<?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>138821</bug_id>
          
          <creation_ts>2014-11-17 21:04:32 -0800</creation_ts>
          <short_desc>Make sure range based iteration of Vector&lt;&gt; still receives bounds checking</short_desc>
          <delta_ts>2015-09-10 09:17:39 -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>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>139658</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>andersca</cc>
    
    <cc>barraclough</cc>
    
    <cc>cdumez</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>kling</cc>
    
    <cc>mark.lam</cc>
    
    <cc>ossy</cc>
    
    <cc>rniwa</cc>
    
    <cc>slewis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1049391</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-11-17 21:04:32 -0800</bug_when>
    <thetext>Make sure range based iteration of Vector&lt;&gt; still receives bounds checking</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049394</commentid>
    <comment_count>1</comment_count>
      <attachid>241762</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-11-17 21:18:42 -0800</bug_when>
    <thetext>Created attachment 241762
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049395</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-17 21:20:58 -0800</bug_when>
    <thetext>Attachment 241762 did not pass style-queue:


ERROR: Source/WTF/wtf/IndexedIterator.h:40:  difference_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:41:  value_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:44:  iterator_category is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 3 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049787</commentid>
    <comment_count>3</comment_count>
      <attachid>241862</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-11-19 08:52:50 -0800</bug_when>
    <thetext>Created attachment 241862
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049839</commentid>
    <comment_count>4</comment_count>
      <attachid>241869</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-11-19 10:51:23 -0800</bug_when>
    <thetext>Created attachment 241869
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049840</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-19 10:54:03 -0800</bug_when>
    <thetext>Attachment 241869 did not pass style-queue:


ERROR: Source/WTF/wtf/IndexedIterator.h:40:  difference_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:41:  value_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:44:  iterator_category is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 3 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049924</commentid>
    <comment_count>6</comment_count>
      <attachid>241869</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-19 14:46:42 -0800</bug_when>
    <thetext>Comment on attachment 241869
Patch

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

&gt; Source/WTF/wtf/IndexedIterator.h:32
&gt; +    if (!(check))\

Doesn&apos;t this impact performance?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049925</commentid>
    <comment_count>7</comment_count>
      <attachid>241869</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-11-19 14:49:14 -0800</bug_when>
    <thetext>Comment on attachment 241869
Patch

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

&gt;&gt; Source/WTF/wtf/IndexedIterator.h:32
&gt;&gt; +    if (!(check))\
&gt; 
&gt; Doesn&apos;t this impact performance?

This has already passed all the performance tests (JSC, PLT, Speeddoohicky, ...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049983</commentid>
    <comment_count>8</comment_count>
      <attachid>241906</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-11-19 16:27:28 -0800</bug_when>
    <thetext>Created attachment 241906
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049984</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-19 16:28:51 -0800</bug_when>
    <thetext>Attachment 241906 did not pass style-queue:


ERROR: Source/WTF/wtf/IndexedIterator.h:40:  difference_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:41:  value_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:44:  iterator_category is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 3 in 28 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050157</commentid>
    <comment_count>10</comment_count>
      <attachid>241954</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-11-20 09:56:02 -0800</bug_when>
    <thetext>Created attachment 241954
trying to fix efl, gtk, and msvc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050158</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-20 09:57:22 -0800</bug_when>
    <thetext>Attachment 241954 did not pass style-queue:


ERROR: Source/WTF/wtf/IndexedIterator.h:40:  difference_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:41:  value_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:44:  iterator_category is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 3 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050173</commentid>
    <comment_count>12</comment_count>
      <attachid>241958</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-11-20 10:32:17 -0800</bug_when>
    <thetext>Created attachment 241958
more efl fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050175</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-20 10:35:45 -0800</bug_when>
    <thetext>Attachment 241958 did not pass style-queue:


ERROR: Source/WTF/wtf/IndexedIterator.h:40:  difference_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:41:  value_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:44:  iterator_category is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 3 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050178</commentid>
    <comment_count>14</comment_count>
      <attachid>241959</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-11-20 10:43:58 -0800</bug_when>
    <thetext>Created attachment 241959
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050182</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-20 10:45:14 -0800</bug_when>
    <thetext>Attachment 241959 did not pass style-queue:


ERROR: Source/WTF/wtf/IndexedIterator.h:40:  difference_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:41:  value_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:44:  iterator_category is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 3 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050206</commentid>
    <comment_count>16</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-11-20 11:55:52 -0800</bug_when>
    <thetext>Performance is good, etc, etc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050296</commentid>
    <comment_count>17</comment_count>
      <attachid>241999</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-11-20 15:59:38 -0800</bug_when>
    <thetext>Created attachment 241999
sigh, another attempt to fix GIFDecoder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050297</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-20 16:02:02 -0800</bug_when>
    <thetext>Attachment 241999 did not pass style-queue:


ERROR: Source/WTF/wtf/IndexedIterator.h:40:  difference_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:41:  value_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:44:  iterator_category is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 3 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050556</commentid>
    <comment_count>19</comment_count>
      <attachid>241999</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-11-21 13:39:00 -0800</bug_when>
    <thetext>Comment on attachment 241999
sigh, another attempt to fix GIFDecoder

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

&gt; Source/JavaScriptCore/profiler/ProfileNode.cpp:157
&gt; +

Please remove.

&gt; Source/WTF/WTF.xcodeproj/project.pbxproj:101
&gt; +		A7DC2F041A09A22D0072F4E3 /* IndexedIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A7DC2F031A099DE30072F4E3 /* IndexedIterator.h */; };

You’ll need to add the new header to WTF.vcxproj and WTF.vcxproj.filters as well.

&gt; Source/WTF/wtf/IndexedIterator.h:33
&gt; +    if (!(check))\
&gt; +        OverflowHandler::overflowed();\

nit: indentation is funny here.  Can you indent these 2 lines 1 more level so that it is not at the same level as the while(0) below?

&gt; Source/WTF/wtf/IndexedIterator.h:111
&gt; +        if (increment &lt; 0) {
&gt; +            INDEXED_ITERATOR_OVERFLOW(increment != std::numeric_limits&lt;int32_t&gt;::max());

if increment &lt; 0, then it can never == std::numeric_limits&lt;int32_t&gt;::max().  Hence, this check will always pass.  The goal is so that when we do the negation below, we don’t overflow, right?  So, instead, I think you actually meant to check:
    INDEXED_ITERATOR_OVERFLOW(increment &gt; std::numeric_limits&lt;int32_t&gt;::min());

&gt; Source/WTF/wtf/IndexedIterator.h:123
&gt; +            INDEXED_ITERATOR_OVERFLOW(decrement != std::numeric_limits&lt;int32_t&gt;::max());

Ditto.  I think you actually meant to check:
    INDEXED_ITERATOR_OVERFLOW(decrement &gt; std::numeric_limits&lt;int32_t&gt;::min());

&gt; Source/WTF/wtf/IndexedIterator.h:150
&gt; +            INDEXED_ITERATOR_OVERFLOW(increment != std::numeric_limits&lt;int32_t&gt;::max());

Ditto.  Should be:
    INDEXED_ITERATOR_OVERFLOW(increment &gt; std::numeric_limits&lt;int32_t&gt;::min());

&gt; Source/WTF/wtf/IndexedIterator.h:162
&gt; +            INDEXED_ITERATOR_OVERFLOW(decrement != std::numeric_limits&lt;int32_t&gt;::max());

Ditto.  Should be:
    INDEXED_ITERATOR_OVERFLOW(decrement &gt; std::numeric_limits&lt;int32_t&gt;::min());

&gt; Source/WTF/wtf/IndexedIterator.h:209
&gt; +        return result += static_cast&lt;size_t&gt;(increment);

You’re casting a signed long long increment into an unsigned size_t.  Is this correct and safe?  I’m thinking of a 32-bit platform where size_t is smaller than long long.

&gt; Source/WTF/wtf/IndexedIterator.h:215
&gt; +        return result += static_cast&lt;size_t&gt;(decrement);

Ditto.  Signed long long to potentially smaller size_t conversion.

&gt; Source/WTF/wtf/IndexedIterator.h:235
&gt; +        return result += static_cast&lt;size_t&gt;(increment);

Here, we’re casting a signed long into an unsigned size_t.  Is this correct and safe?

&gt; Source/WTF/wtf/IndexedIterator.h:241
&gt; +        return result += static_cast&lt;size_t&gt;(decrement);

Ditto.  Signed long to unsigned size_t conversion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050563</commentid>
    <comment_count>20</comment_count>
      <attachid>241999</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-11-21 14:26:37 -0800</bug_when>
    <thetext>Comment on attachment 241999
sigh, another attempt to fix GIFDecoder

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

&gt;&gt; Source/WTF/wtf/IndexedIterator.h:33
&gt;&gt; +        OverflowHandler::overflowed();\
&gt; 
&gt; nit: indentation is funny here.  Can you indent these 2 lines 1 more level so that it is not at the same level as the while(0) below?

fighting Xcode auto indent, fixed

&gt;&gt; Source/WTF/wtf/IndexedIterator.h:111
&gt;&gt; +            INDEXED_ITERATOR_OVERFLOW(increment != std::numeric_limits&lt;int32_t&gt;::max());
&gt; 
&gt; if increment &lt; 0, then it can never == std::numeric_limits&lt;int32_t&gt;::max().  Hence, this check will always pass.  The goal is so that when we do the negation below, we don’t overflow, right?  So, instead, I think you actually meant to check:
&gt;     INDEXED_ITERATOR_OVERFLOW(increment &gt; std::numeric_limits&lt;int32_t&gt;::min());

Aieeeee, good catch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050584</commentid>
    <comment_count>21</comment_count>
      <attachid>242077</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-11-21 15:16:21 -0800</bug_when>
    <thetext>Created attachment 242077
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050588</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-21 15:19:22 -0800</bug_when>
    <thetext>Attachment 242077 did not pass style-queue:


ERROR: Source/WTF/wtf/IndexedIterator.h:40:  difference_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:41:  value_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:44:  iterator_category is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 3 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050607</commentid>
    <comment_count>23</comment_count>
      <attachid>242087</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-11-21 15:38:23 -0800</bug_when>
    <thetext>Created attachment 242087
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050611</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-21 15:40:44 -0800</bug_when>
    <thetext>Attachment 242087 did not pass style-queue:


ERROR: Source/WTF/wtf/IndexedIterator.h:40:  difference_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:41:  value_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:44:  iterator_category is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 3 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050626</commentid>
    <comment_count>25</comment_count>
      <attachid>242087</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-11-21 16:04:14 -0800</bug_when>
    <thetext>Comment on attachment 242087
Patch

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

&gt; Source/WTF/wtf/IndexedIterator.h:225
&gt; +        return result += static_cast&lt;unsigned long long&gt;(decrement);

This should be:
    return result -= static_cast&lt;unsigned long long&gt;(decrement);

&gt; Source/WTF/wtf/IndexedIterator.h:247
&gt; +            return result + static_cast&lt;size_t&gt;(-increment);

This should be:
    return result - static_cast&lt;size_t&gt;(-increment);

&gt; Source/WTF/wtf/IndexedIterator.h:259
&gt; +        return result += static_cast&lt;size_t&gt;(decrement);

This should be:
    return result -= static_cast&lt;size_t&gt;(decrement);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051311</commentid>
    <comment_count>26</comment_count>
      <attachid>242275</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-11-29 11:08:56 -0800</bug_when>
    <thetext>Created attachment 242275
sigh, webkit-patch was waiting for me to say yes before uploading...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051312</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-29 11:12:12 -0800</bug_when>
    <thetext>Attachment 242275 did not pass style-queue:


ERROR: Source/WTF/wtf/IndexedIterator.h:40:  difference_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:41:  value_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:44:  iterator_category is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 3 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051465</commentid>
    <comment_count>28</comment_count>
      <attachid>242275</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-12-01 09:46:58 -0800</bug_when>
    <thetext>Comment on attachment 242275
sigh, webkit-patch was waiting for me to say yes before uploading...

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051467</commentid>
    <comment_count>29</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-12-01 09:50:09 -0800</bug_when>
    <thetext>Committed r176592: &lt;http://trac.webkit.org/changeset/176592&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051510</commentid>
    <comment_count>30</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-12-01 11:31:45 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; Committed r176592: &lt;http://trac.webkit.org/changeset/176592&gt;

It broke Apple&apos;s 32 bit build: https://build.webkit.org/builders/Apple%20MountainLion%20Release%20%2832-bit%20Build%29/builds/17559</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051512</commentid>
    <comment_count>31</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-12-01 11:32:32 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #29)
&gt; &gt; Committed r176592: &lt;http://trac.webkit.org/changeset/176592&gt;
&gt; 
&gt; It broke Apple&apos;s 32 bit build:
&gt; https://build.webkit.org/builders/Apple%20MountainLion%20Release%20%2832-
&gt; bit%20Build%29/builds/17559

goddammit. Looking into it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051618</commentid>
    <comment_count>32</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-12-01 14:54:31 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #30)
&gt; &gt; (In reply to comment #29)
&gt; &gt; &gt; Committed r176592: &lt;http://trac.webkit.org/changeset/176592&gt;
&gt; &gt; 
&gt; &gt; It broke Apple&apos;s 32 bit build:
&gt; &gt; https://build.webkit.org/builders/Apple%20MountainLion%20Release%20%2832-
&gt; &gt; bit%20Build%29/builds/17559
&gt; 
&gt; goddammit. Looking into it.

The fix https://trac.webkit.org/changeset/176603 broke non Apple builds:
- EFL ARM Thumb2: https://build.webkit.org/builders/EFL%20Linux%20ARMv7%20Thumb2%20Release%20%28Build%29/builds/8754
- EFL ARM: https://build.webkit.org/builders/EFL%20Linux%20ARMv7%20Traditional%20Release%20%28Build%29/builds/8607
- GTK x86: https://build.webkit.org/builders/GTK%20Linux%2032-bit%20Release/builds/48526</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051668</commentid>
    <comment_count>33</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2014-12-01 16:47:43 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; The fix https://trac.webkit.org/changeset/176603 broke non Apple builds:
&gt; - EFL ARM Thumb2:
&gt; https://build.webkit.org/builders/
&gt; EFL%20Linux%20ARMv7%20Thumb2%20Release%20%28Build%29/builds/8754
&gt; - EFL ARM:
&gt; https://build.webkit.org/builders/
&gt; EFL%20Linux%20ARMv7%20Traditional%20Release%20%28Build%29/builds/8607
&gt; - GTK x86:
&gt; https://build.webkit.org/builders/GTK%20Linux%2032-bit%20Release/builds/48526

It broke also GTK ARM bot: https://build.webkit.org/builders/GTK%20Linux%2032-bit%20Release/builds/48526

I think the issue is incorrectly assuming that !WIN==MAC|IOS.

What about this fix? (I didn&apos;t tested it)

--- a/Source/WTF/wtf/IndexedIterator.h
+++ b/Source/WTF/wtf/IndexedIterator.h
@@ -225,7 +225,7 @@ template &lt;typename VectorType, typename T, typename OverflowHandler = CrashOnOve
         return result -= static_cast&lt;unsigned long long&gt;(decrement);
     }
 
-#if __SIZEOF_SIZE_T__ != __SIZEOF_INT__ || !PLATFORM(WIN)
+#if __SIZEOF_SIZE_T__ != __SIZEOF_INT__ || (PLATFORM(COCOA) &amp;&amp; !PLATFORM(WIN))
     IndexedIterator operator+(unsigned increment) const
     {
         IndexedIterator result(*this);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051833</commentid>
    <comment_count>34</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2014-12-02 08:29:53 -0800</bug_when>
    <thetext>Fixed by: https://trac.webkit.org/changeset/176616</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051902</commentid>
    <comment_count>35</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-02 11:11:29 -0800</bug_when>
    <thetext>Looks like we took a 1-1.5% hit on Speedometer:
https://perf.webkit.org/#mode=charts&amp;chartList=%5B%5B%22gtk%22%2C%22DoYouEvenBench%2FFull%3ATime%3ATotal%22%5D%5D
https://perf.webkit.org/#mode=charts&amp;chartList=%5B%5B%22mac-mavericks%22%2C%22DoYouEvenBench%2FFull%3ATime%3ATotal%22%5D%5D

And a 1.7% hit on HTML5 Full Render:
https://perf.webkit.org/#mode=charts&amp;chartList=%5B%5B%22efl%22%2C%22Parser%2Fhtml5-full-render%3ATime%22%5D%5D

This change is the only commit in the Range so I am fairly confident this caused the regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051903</commentid>
    <comment_count>36</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-12-02 11:13:21 -0800</bug_when>
    <thetext>ok, this is weird as stephanie had perf checked it before - i&apos;ll see if i can get her to re-test the final commit.  I didn&apos;t think that there had been any changes that would impact perf, but maybe i was wrong?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052069</commentid>
    <comment_count>37</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-12-02 20:15:40 -0800</bug_when>
    <thetext>Rolled out r176592, r176603, r176616, and r176705 in 176709: &lt;http://trac.webkit.org/r176709&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052216</commentid>
    <comment_count>38</comment_count>
      <attachid>242506</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-12-03 11:13:19 -0800</bug_when>
    <thetext>Created attachment 242506
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052222</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-03 11:16:24 -0800</bug_when>
    <thetext>Attachment 242506 did not pass style-queue:


ERROR: Source/WTF/wtf/IndexedIterator.h:40:  difference_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:41:  value_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:44:  iterator_category is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 3 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052240</commentid>
    <comment_count>40</comment_count>
      <attachid>242511</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-12-03 11:58:36 -0800</bug_when>
    <thetext>Created attachment 242511
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052243</commentid>
    <comment_count>41</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-03 12:01:52 -0800</bug_when>
    <thetext>Attachment 242511 did not pass style-queue:


ERROR: Source/WTF/wtf/IndexedIterator.h:40:  difference_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:41:  value_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:44:  iterator_category is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 3 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052259</commentid>
    <comment_count>42</comment_count>
      <attachid>242511</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-12-03 12:51:17 -0800</bug_when>
    <thetext>Comment on attachment 242511
Patch

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

It looks like the change you made is to allow the iterator value to be out of range.  However, when the iterator is actually used to access the element via get(), you to the overflow check then.  I understand that this is probably done for performance reasons.

Based on how the iterators work, it looks like you&apos;re allowing overflow and underflow when applying signed increments / decrements, as long as the end result is a legal index into the vector.  The result is that bad code that adds / subtracts a ridiculously large / negative delta can go undetected as long as the resultant index is within range.  I assume that this is intentional, and that we&apos;re willing to live with this limitation?

r=me with the blank line removed, assuming the above is the intended behavior you want.

&gt; Source/WTF/wtf/IndexedIterator.h:150
&gt; +

Extra line here which can be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052262</commentid>
    <comment_count>43</comment_count>
      <attachid>242511</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-12-03 12:54:32 -0800</bug_when>
    <thetext>Comment on attachment 242511
Patch

Yeah, basically we&apos;re now relying on the Vector&apos;s own bounds checking logic for more or less everything. This means we should remain memory safe even if you misuse the iterators. Still waiting on final perf numbers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052263</commentid>
    <comment_count>44</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-12-03 12:55:23 -0800</bug_when>
    <thetext>If this is still a 1.5-1.7% performance regression I don&apos;t see how it can be landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052267</commentid>
    <comment_count>45</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-12-03 13:01:08 -0800</bug_when>
    <thetext>(In reply to comment #44)
&gt; If this is still a 1.5-1.7% performance regression I don&apos;t see how it can be
&gt; landed.

It should not be a regression anymore - it&apos;s dropped all the expensive checks. If it&apos;s not possible to fix this we need to stop use of the range syntax as every use of it is a security regression vs. the old indexed iteration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053411</commentid>
    <comment_count>46</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-12-08 09:37:27 -0800</bug_when>
    <thetext>(In reply to comment #45)
&gt; (In reply to comment #44)
&gt; &gt; If this is still a 1.5-1.7% performance regression I don&apos;t see how it can be
&gt; &gt; landed.
&gt; 
&gt; It should not be a regression anymore - it&apos;s dropped all the expensive
&gt; checks. If it&apos;s not possible to fix this we need to stop use of the range
&gt; syntax as every use of it is a security regression vs. the old indexed
&gt; iteration.

Is this ready to land yet?  Did the perf test run pan out?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054712</commentid>
    <comment_count>47</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2014-12-11 17:33:44 -0800</bug_when>
    <thetext>Patch passed all perf. tests and might even be a little faster.  Due to the unsigned vs. size_t discussion in Vector the patch no longer applies cleanly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055451</commentid>
    <comment_count>48</comment_count>
      <attachid>243259</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-12-13 13:55:15 -0800</bug_when>
    <thetext>Created attachment 243259
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055454</commentid>
    <comment_count>49</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-13 13:57:46 -0800</bug_when>
    <thetext>Attachment 243259 did not pass style-queue:


ERROR: Source/WTF/wtf/IndexedIterator.h:40:  difference_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:41:  value_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:44:  iterator_category is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 3 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055495</commentid>
    <comment_count>50</comment_count>
      <attachid>243259</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-12-14 07:24:09 -0800</bug_when>
    <thetext>Comment on attachment 243259
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055656</commentid>
    <comment_count>51</comment_count>
      <attachid>243259</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-15 10:04:16 -0800</bug_when>
    <thetext>Comment on attachment 243259
Patch

Clearing flags on attachment: 243259

Committed r177284: &lt;http://trac.webkit.org/changeset/177284&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055657</commentid>
    <comment_count>52</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-15 10:04:24 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055678</commentid>
    <comment_count>53</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-12-15 11:27:02 -0800</bug_when>
    <thetext>Does this mean that any time you use .data() you go fast and any time you use .begin() you go slow?

How do you propose that authors go about choosing one or the other?

This strikes me as a dangerous and confusing booby trap to leave in the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055684</commentid>
    <comment_count>54</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-12-15 11:39:32 -0800</bug_when>
    <thetext>(In reply to comment #53)
&gt; Does this mean that any time you use .data() you go fast and any time you
&gt; use .begin() you go slow?
&gt; 
&gt; How do you propose that authors go about choosing one or the other?
&gt; 
&gt; This strikes me as a dangerous and confusing booby trap to leave in the code.

Seriously, there&apos;s no performance regression from this. The correct thing is to use begin()/end() if you want to iterate, and data() if you need to pass a pointer to some non-c++ API.

Stephanie&apos;s perf measuring says that if anything this improves performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055687</commentid>
    <comment_count>55</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-12-15 11:41:02 -0800</bug_when>
    <thetext>&gt; Seriously, there&apos;s no performance regression from this.

In that case, what changed between the first landed version of this patch and the second, which accounts for fixing the 1.7% performance regression?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055690</commentid>
    <comment_count>56</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-12-15 11:45:39 -0800</bug_when>
    <thetext>(In reply to comment #55)
&gt; &gt; Seriously, there&apos;s no performance regression from this.
&gt; 
&gt; In that case, what changed between the first landed version of this patch
&gt; and the second, which accounts for fixing the 1.7% performance regression?

I removed a lot of the intermediate overflow checks, so it&apos;s not as brutal as it used to be. Most of the original performance regression occurred due to complications added when trying to convince all the various changes needed to appease MSVC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055760</commentid>
    <comment_count>57</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-15 15:19:34 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 139658</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055762</commentid>
    <comment_count>58</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-12-15 15:20:00 -0800</bug_when>
    <thetext>I think this is about to get rolled out for breaking debug builds, but FWIW the single data point we got on perf.webkit.org&apos;s mac-mavericks builder saw a 0.85% regression on Speedometer and 1.96% on html5-full-render.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114122</commentid>
    <comment_count>59</comment_count>
      <attachid>258044</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-08-02 15:18:44 -0700</bug_when>
    <thetext>Created attachment 258044
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114124</commentid>
    <comment_count>60</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-02 15:21:45 -0700</bug_when>
    <thetext>Attachment 258044 did not pass style-queue:


ERROR: Source/WTF/wtf/IndexedIterator.h:40:  difference_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:41:  value_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:44:  iterator_category is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 3 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114125</commentid>
    <comment_count>61</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-08-02 15:37:31 -0700</bug_when>
    <thetext>Throwing this at the bots because i&apos;m too lazy to build myself :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122920</commentid>
    <comment_count>62</comment_count>
      <attachid>260442</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-09-02 14:43:55 -0700</bug_when>
    <thetext>Created attachment 260442
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122921</commentid>
    <comment_count>63</comment_count>
      <attachid>260442</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-09-02 14:44:41 -0700</bug_when>
    <thetext>Comment on attachment 260442
Patch

Not complete yet (aside from anything else i&apos;m going to make it debug only at first)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122946</commentid>
    <comment_count>64</comment_count>
      <attachid>260450</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-09-02 16:21:29 -0700</bug_when>
    <thetext>Created attachment 260450
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122948</commentid>
    <comment_count>65</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-02 16:23:31 -0700</bug_when>
    <thetext>Attachment 260450 did not pass style-queue:


ERROR: Source/WTF/wtf/IndexedIterator.h:40:  difference_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:41:  value_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/IndexedIterator.h:44:  iterator_category is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 3 in 28 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124908</commentid>
    <comment_count>66</comment_count>
      <attachid>260450</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-09-10 09:17:39 -0700</bug_when>
    <thetext>Comment on attachment 260450
Patch

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

Currently compiles only on iOS and Mac, so needs more work.

Performance testing results?

Should be using get() more and getPtr() much less (see below).

Vector uses pointers and iterators interchangeably in its implementation. I think this patch causes it to use the iterators too much instead of pointers.

We are now range checking approach too much. We have functions like Vector::remove that already have range checking with ASSERT_WITH_SECURITY_IMPLICATION, but then we are letting them be written in terms of these new checked iterators so they are checking twice. That’s sloppy. We can switch to the iterators and do lots of range checking and remove ASSERT_WITH_SECURITY_IMPLICATION, or we can decide to use pointers inside Vector’s own implementation. We need a principle about how to implement Vector itself that is separate from how code outside Vector uses iterators.

I like the idea of landing the changes that make this refactoring possible separately before changing Vector itself. Most changes that are outside Vector could be landed that way. (That’s one argument for using getPtr, since it would work both before and after, but I’d still prefer to keep that to a minimum so maybe hold off on the changes that actually require using get/getPtr explicitly.)

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:96
&gt;      for (FunctionExpressionVector::iterator ptr = thisObject-&gt;m_functionDecls.begin(), end = thisObject-&gt;m_functionDecls.end(); ptr != end; ++ptr)
&gt; -        visitor.append(ptr);
&gt; +        visitor.append(WTF::getPtr(ptr));
&gt;      for (FunctionExpressionVector::iterator ptr = thisObject-&gt;m_functionExprs.begin(), end = thisObject-&gt;m_functionExprs.end(); ptr != end; ++ptr)
&gt; -        visitor.append(ptr);
&gt; +        visitor.append(WTF::getPtr(ptr));

I think it would be nicer to rewrite these two loops to use modern C++ iteration, since we have to touch them.

    for (auto&amp; expression : thisObject-&gt;m_functionDecls)
        visitor.append(&amp;expression);
    for (auto&amp; expression : thisObject-&gt;m_functionExprs)
        visitor.append(&amp;expression);

&gt; Source/WTF/wtf/IndexedIterator.h:2
&gt; + * Copyright (C) 2014 Apple Inc. All rights reserved.

2014?

&gt; Source/WTF/wtf/IndexedIterator.h:34
&gt; +#define INDEXED_ITERATOR_OVERFLOW(check) do {\
&gt; +    if (!(check))\
&gt; +        OverflowHandler::overflowed();\
&gt; +} while (0)

Seems unhelpful to use a macro for this; we only use the macro in one place.

&gt; Source/WTF/wtf/IndexedIterator.h:36
&gt; +template &lt;typename VectorType, typename T, typename OverflowHandler = CrashOnOverflow&gt; struct IndexedIterator {

This should be a class template, not a struct template. We use struct when we have public data members as the primary interface and in that case we do not use the &quot;m_&quot; prefix on the data members; in cases like this where we don’t, then we use class, not struct.

&gt; Source/WTF/wtf/IndexedIterator.h:37
&gt; +    typedef struct IndexedIterator&lt;const VectorType, const T, OverflowHandler&gt; const_iterator;

I don’t think const_iterator is a good name for this type. That’s a name used on collections to give the type for their const iterator. The IndexedIterator class is an iterator, not a collection. Using the same name is a bit clever but I think subtly confusing.

&gt; Source/WTF/wtf/IndexedIterator.h:50
&gt; +    IndexedIterator()
&gt; +        : m_vector(nullptr)
&gt; +        , m_position(0)
&gt; +    {
&gt; +    }

Newly written code should initialize data members where they are defined instead of listing them all in places like this. If we did that, then this would be more like this:

    IndexedIterator() -&gt; default;

&gt; Source/WTF/wtf/IndexedIterator.h:56
&gt; +    IndexedIterator(std::nullptr_t)
&gt; +        : m_vector(nullptr)
&gt; +        , m_position(0)
&gt; +    {
&gt; +    }

And this would just be a function with an empty body, no need to specify m_vector and m_position.

&gt; Source/WTF/wtf/IndexedIterator.h:58
&gt; +    IndexedIterator(VectorType&amp; vector, ValueType* position)

Since ValueType* must never be null, I suggest we let it be a reference even if it feels a little “pointer-y”.

&gt; Source/WTF/wtf/IndexedIterator.h:68
&gt; +    IndexedIterator(const IndexedIterator&amp; other)
&gt; +        : m_vector(other.m_vector)
&gt; +        , m_position(other.m_position)
&gt; +    {
&gt; +    }

Should not declare this. This is what the compiler will generate as long as we don’t write it explicitly.

&gt; Source/WTF/wtf/IndexedIterator.h:82
&gt; +        m_position++;

Our idiom in WebKit code is to use pre-increment in places like this.

&gt; Source/WTF/wtf/IndexedIterator.h:89
&gt; +        m_position++;

Ditto.

&gt; Source/WTF/wtf/IndexedIterator.h:95
&gt; +        m_position--;

Ditto.

&gt; Source/WTF/wtf/IndexedIterator.h:102
&gt; +        m_position--;

Ditto.

&gt; Source/WTF/wtf/IndexedIterator.h:108
&gt; +    // This conversion operator allows implicit conversion to bool but not to other integer types.
&gt; +    typedef size_t (IndexedIterator::*UnspecifiedBoolType);
&gt; +    operator UnspecifiedBoolType() const { return m_vector ? &amp;IndexedIterator::m_position : nullptr; }

This is not allowed or needed any more in more modern C++. Instead just write this:

    explicit operator bool const() { return m_vector; }

&gt; Source/WTF/wtf/IndexedIterator.h:122
&gt; +#if __SIZEOF_SIZE_T__ != __SIZEOF_INT__ || PLATFORM(COCOA)
&gt; +#define _UNSIGNED_If_DIFFERENT(macro) macro(unsigned)
&gt; +#else
&gt; +#define _UNSIGNED_If_DIFFERENT(macro)
&gt; +#endif
&gt; +
&gt; +#define FOR_EACH_INTEGER_TYPE(macro) \
&gt; +    macro(size_t) \
&gt; +    macro(int32_t) \
&gt; +    macro(long) \
&gt; +    macro(long long) \
&gt; +    macro(unsigned long long) \
&gt; +    _UNSIGNED_If_DIFFERENT(macro)

This is not the right approach. I suggest overloading for int, long, long long, unsigned, unsigned long, and unsigned long long. Don’t overload for size_t or int32_t. Then you won’t need this complex #if.

But also, you should ask Anders if there’s a cleaner way to achieve this.

&gt; Source/WTF/wtf/IndexedIterator.h:169
&gt; +    ptrdiff_t operator-(const const_iterator&amp; right) const
&gt; +    {
&gt; +        return m_position - right.m_position;
&gt; +    }
&gt; +
&gt; +    ptrdiff_t operator-(const ValueType* right) const
&gt; +    {
&gt; +        return get() - right;
&gt; +    }

These should not be member functions; should just be non-member functions; friends if necessary.

&gt; Source/WTF/wtf/IndexedIterator.h:175
&gt; +    void operator=(const IndexedIterator&amp; other)
&gt; +    {
&gt; +        m_vector = other.m_vector;
&gt; +        m_position = other.m_position;
&gt; +    }

Please omit this and let the compiler generate it. It will generate exactly this if you don’t write it out explicitly.

&gt; Source/WTF/wtf/IndexedIterator.h:235
&gt; +    bool operator==(const const_iterator&amp; other) const
&gt; +    {
&gt; +        return unsafeGet() == other.unsafeGet();
&gt; +    }
&gt; +
&gt; +    bool operator!=(const const_iterator&amp; other) const
&gt; +    {
&gt; +        return unsafeGet() != other.unsafeGet();
&gt; +    }
&gt; +
&gt; +    bool operator==(const ValueType* other) const
&gt; +    {
&gt; +        return unsafeGet() == other;
&gt; +    }
&gt; +
&gt; +    bool operator!=(const ValueType* other) const
&gt; +    {
&gt; +        return unsafeGet() != other;
&gt; +    }
&gt; +
&gt; +    bool operator&lt;(const ValueType* other) const
&gt; +    {
&gt; +        return unsafeGet() &lt; other;
&gt; +    }
&gt; +
&gt; +    bool operator&lt;=(const ValueType* other) const
&gt; +    {
&gt; +        return unsafeGet() &lt;= other;
&gt; +    }
&gt; +
&gt; +    bool operator&lt;(const const_iterator&amp; other) const
&gt; +    {
&gt; +        return unsafeGet() &lt; other.unsafeGet();
&gt; +    }
&gt; +
&gt; +    bool operator&lt;=(const const_iterator&amp; other) const
&gt; +    {
&gt; +        return unsafeGet() &lt;= other.unsafeGet();
&gt; +    }
&gt; +
&gt; +    bool operator&gt;(const IndexedIterator&amp; other) const
&gt; +    {
&gt; +        return unsafeGet() &gt; other.unsafeGet();
&gt; +    }
&gt; +
&gt; +    bool operator&gt;=(const const_iterator&amp; other) const
&gt; +    {
&gt; +        return unsafeGet() &gt;= other.unsafeGet();
&gt; +    }
&gt; +
&gt; +    bool operator&gt;(const ValueType* other) const
&gt; +    {
&gt; +        return unsafeGet() &gt; other;
&gt; +    }
&gt; +
&gt; +    bool operator&gt;=(const ValueType* other) const
&gt; +    {
&gt; +        return unsafeGet() &gt;= other;
&gt; +    }

These should not be member functions; should just be non-member functions; friends if necessary. Unclear why these need to do unsafe_get.

I believe it’s possibly inefficient to only define versions that compare with the const_iterator class. We might be creating and destroying temporaries unnecessarily unless the compiler does a great job optimizing.

&gt; Source/WTF/wtf/IndexedIterator.h:243
&gt; +    operator const_iterator() const
&gt; +    {
&gt; +        const_iterator result;
&gt; +        result.m_vector = m_vector;
&gt; +        result.m_position = m_position;
&gt; +        return result;
&gt; +    }

Surprised this compiles when const_iterator is the same type as this class’s type.

&gt; Source/WTF/wtf/IndexedIterator.h:246
&gt; +    VectorType* m_vector;
&gt; +    size_t m_position;

VectorType* m_vector { nullptr };
    size_t m_position { 0 };

&gt; Source/WTF/wtf/IndexedIterator.h:253
&gt; +    ValueType* unsafeGet() const
&gt; +    {
&gt; +        if (!m_vector)
&gt; +            return nullptr;
&gt; +        return get();
&gt; +    }

We don’t normally put functions after the data members. Please let the data members be last.

&gt; Source/WTF/wtf/IndexedIterator.h:257
&gt; +inline typename IndexedIterator&lt;T, ValueType, OverflowHandler&gt;::ValueType* getPtr(IndexedIterator&lt;T, ValueType, OverflowHandler&gt; p)

This should take const IndexedIterator&amp;, not copy an IndexedIterator.

&gt; Source/WTF/wtf/Vector.h:615
&gt; +            TypeOperations::initialize(getPtr(begin()), getPtr(end()));

The getPtr function is only intended to be used in code that’s so generic that we can’t know whether it’s a class or a raw pointer. This code doesn’t qualify. Here we should write begin().get(). Or alternatively have private functions that return pointers for use inside the class? I don’t like the idea of doing the range checking unnecessarily inside the class so it seems bad to be calling get() here instead of unsafeGet().

&gt; Source/WTF/wtf/Vector.h:624
&gt; +            TypeOperations::uninitializedFill(getPtr(begin()), getPtr(end()), val);

Ditto.

&gt; Source/WTF/wtf/Vector.h:693
&gt; +    iterator begin() { return IteratorSelector::makeIterator(*this, data()); }

Why isn’t this just:

    return { *this, data() };

I don’t understand the need for IteratorSelector.

&gt; Source/WTF/wtf/Vector.h:694
&gt; +    iterator end() { return begin() + size(); }

Is this efficient enough? Would it be better to write:

    return { *this, data() + size(); }

&gt; Source/WTF/wtf/Vector.h:695
&gt; +    const_iterator begin() const { return IteratorSelector::makeConstIterator(*this, data()); }

Ditto.

&gt; Source/WTF/wtf/Vector.h:696
&gt; +    const_iterator end() const { return begin() + size(); }

Ditto.

&gt; Source/WTF/wtf/Vector.h:737
&gt; +    void append(const_iterator, size_t);

Not sure we want this. If we do want it, I think we’d want a template version that supports iterators from vectors with other element types too, just like all the other append functions.

&gt; Source/WebCore/platform/graphics/cairo/GradientCairo.cpp:65
&gt; -    Vector&lt;ColorStop&gt;::iterator stopIterator = m_stops.begin();
&gt; +    auto stopIterator = m_stops.begin();
&gt;      while (stopIterator != m_stops.end()) {

Better to use a modern for loop here.

&gt; Source/WebCore/svg/SVGFontElement.cpp:246
&gt; +        size_t it = kerningVector-&gt;size();

I don’t think “it” is a good name for an index.

&gt; Source/WebCore/svg/SVGFontElement.cpp:248
&gt; +            auto&amp; value = kerningVector-&gt;at(it);

We normally prefer the [] syntax to the at() function.

&gt; Source/WebCore/svg/SVGFontElement.cpp:257
&gt; +            size_t it = kerningVector-&gt;size();

Ditto.

&gt; Source/WebCore/svg/SVGFontElement.cpp:259
&gt; +                auto&amp; value = kerningVector-&gt;at(it);

Ditto.

&gt; Source/WebCore/svg/SVGFontElement.cpp:266
&gt; +            size_t it = kerningMap.kerningUnicodeRangeMap.size();

Ditto.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241762</attachid>
            <date>2014-11-17 21:18:42 -0800</date>
            <delta_ts>2014-11-19 08:52:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138821-20141117211853.patch</filename>
            <type>text/plain</type>
            <size>66770</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2MjM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NzhmYzA2Y2U1NDc3MzgwMTJlMTkzN2JjZGZiYmVkYjRkNjg0MWQyLi4yNTAxNjRiMTE3ZWExZTE5
MGEzYzdkNTg1MTFlNzMzYTk0NDkyM2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNiBAQAorMjAxNC0xMS0xNyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3Rp
bGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGVyZSBhcmUgYSBmZXcgdXNlcyBvZiBiZWdpbigpL2VuZCgp
IHRoYXQgZXhwbGljaXRseSByZXF1aXJlIHBvaW50ZXJzLAorICAgICAgICBzbyB3ZSB1c2UgZ2V0
UHRyKCkgdG8gZXh0cmFjdCB0aGUgdW5kZXJseWluZyBwb2ludGVyIGdlbmVyaWNhbGx5LgorCisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRDb21wbGV4UG9wU2NvcGVzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVt
cCk6CisgICAgICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6RlRM
OjptZE5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkQ2FsbCk6CisgICAgICAgICogbGxp
bnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBlcmZvcm1Bc3Nl
cnRpb25zKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlNjb3Bl
OjpTY29wZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwOgorICAgICAgICAo
SlNDOjpQcm9maWxlTm9kZTo6ZGVidWdQcmludFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3Rvcik6
CisgICAgICAgICogdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2Zp
bGVUcmVlTm9kZTo6ZHVtcEludGVybmFsKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgor
ICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjptYXRjaENoYXJhY3RlckNsYXNzKToK
KwogMjAxNC0xMS0xNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAg
QWRkIHByaW50aW5nIGZ1bmN0aW9uYWxpdHkgaW4gSklUdGVkIGNvZGUgZm9yIGRlYnVnZ2luZyBw
dXJwb3Nlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9D
aGFuZ2VMb2cKaW5kZXggYzU2MmExM2FhN2ZhZGZmMmE4YTcwMTViNWQyNDczODY4MjkyYWI5NC4u
MDNkNDI4MWNlYWRiYzRjZmM0ODJiYWY3YmM3ZTQwOWQwOWMzNjZmNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5
OCBAQAorMjAxNC0xMS0xNyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisgICAg
ICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3RpbGwgcmVj
ZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgYSBuZXcgSW5kZXhlZEl0ZXJhdG9yIHN0cnVjdCB0byBXVEYgdGhh
dCB3cmFwcyBhCisgICAgICAgIFZlY3RvciB0eXBlIGFuZCBpbmRleCB0byBwcm92aWRlIHBvaW50
ZXIgbGlrZSBzZW1hbnRpY3MKKyAgICAgICAgd2hpbGUgc3RpbGwgcGVyZm9ybWluZyBydW50aW1l
IGJvdW5kcyBjaGVja2luZywgZXZlbiBpbgorICAgICAgICByZWxlYXNlIGJ1aWxkcy4gV2Ugc3Rv
cmUgYSBzaW1wbGUgaW5kZXggaW50byB0aGUgdmVjdG9yCisgICAgICAgIHdoaWNoIG1lYW5zIHRo
YXQgdGhpcyBpdGVyYXRvciBhbGxvd3MgdmVjdG9yIHJlc2l6aW5nCisgICAgICAgIGR1cmluZyBp
dGVyYXRpb24uIElmIHRoZSB2ZWN0b3IgaXMgcmVzaXplZCBzdWNoIHRoYXQgdGhlCisgICAgICAg
IGl0ZXJhdG9yIGlzIG91dCBvZiBib3VuZHMsIHRoZW4gYW55IGF0dGVtcHQgdG8gZGVyZWZlcmVu
Y2UKKyAgICAgICAgdGhlIGl0ZXJhdG9yIHdpbGwgY3Jhc2ggc2FmZWx5LiBBbnkgb3RoZXIgZXJy
b3JzLCBpbmNsdWRpbmcKKyAgICAgICAgb3ZlcmZsb3dzLCBhbmQgb3ZlciBleHRlbmRpbmcgdGhl
IGl0ZXJhdG9yIHdpbGwgbGlrZXdpc2UKKyAgICAgICAgY3Jhc2guCisKKyAgICAgICAgRm9yIHRo
ZSBwdXJwb3NlIG9mIHJldGFpbmluZyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudAorICAgICAgICBi
ZWhhdmlvdXIsIHRoZSBpdGVyYXRvciBjYW4gYmUgbW92ZWQgdG8gbV9pbmRleCA9PSBzaXplKCkK
KyAgICAgICAgYXMgdGhhdCBpcyB0aGUgc3RhbmRhcmQgImVuZCIgdGVybWluYXRvciBmb3IgdGhl
c2UgdHlwZXMuCisgICAgICAgIEF0dGVtcHRpbmcgdG8gZGVyZWZlcmVuY2UgYXQgdGhhdCBwb2lu
dCB3aWxsIHN0aWxsIGNyYXNoCisgICAgICAgIHJhdGhlciB0aGFuIHBlcmZvcm0gYW4gdW5zYWZl
IG1lbW9yeSBvcGVyYXRpb24uCisKKyAgICAgICAgSW4gb3JkZXIgdG8gbWFpbnRhaW4gdGhlIHZh
bGlkaXR5IG9mIGFsbCB0aGUgYm91bmRzIGNoZWNraW5nLAorICAgICAgICB3ZSBwZXJmb3JtIGZ1
bGwgaW50ZWdlciByYW5nZSBjaGVja2luZyBwcmlvciB0byBhbnkgbXV0YXRpb24KKyAgICAgICAg
b2YgdGhlIGl0ZXJhdG9yIGxvY2F0aW9uLiBJZiB3ZSBkZXRlY3QgYW4gYXJpdGhtZXRpYyBvdmVy
ZmxvdworICAgICAgICB3ZSB3aWxsIGNyYXNoIHJhdGhlciB0aGFuIGF0dGVtcHRpbmcgdG8gY2Fy
cnkgb24uCisKKyAgICAgICAgQnkgbmVjZXNzaXR5IHRoZXJlIGFyZSBtYW55IG92ZXJyaWRlcyBm
b3Igb3BlcmF0b3IgKyBhbmQgLSBhcworICAgICAgICB3ZSBvdGhlcndpc2UgaGl0IG1hbnkgZGlm
ZmVyZW50IHR5cGUgcHJvbW90aW9uIGFtYmlndWl0aWVzIHdoZW4KKyAgICAgICAgcGVyZm9ybWlu
ZyBhcml0aG1ldGljIHdpdGggaXRlcmF0b3JzLiBUaGVzZSBhbWJpZ3VpdGllcyBhcmUgYWxzbwor
ICAgICAgICBkaWZmZXJlbnQgZm9yIDMyLSB2cy4gNjQtYml0LCBzbyBkdXBsaWNhdGluZyB0aGUg
ZnVuY3Rpb25zCisgICAgICAgIGFuZCB0aGVuIGZvcndhcmRpbmcgdG8gdGhlIGNvcmUgaW1wbGVt
ZW50YXRpb25zIHRoYXQgcGVyZm9ybWVkCisgICAgICAgIHRoZSBib3VuZHMgY2hlY2tpbmcgYW5k
IG11dGF0aW9uIHNlZW1lZCBsaWtlIHRoZSByaWdodCBjYWxsLgorCisgICAgICAgICogV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0luZGV4ZWRJdGVyYXRvci5o
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpJbmRleGVkSXRlcmF0b3Ip
OgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yLT4pOgorICAgICAgICAo
V1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXVEY6OkluZGV4ZWRJ
dGVyYXRvcjo6Z2V0KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcisr
KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvci0tKToKKyAgICAgICAg
KFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKToKKyAg
ICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcis9KToKKyAgICAgICAgKFdURjo6
SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvci09KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJh
dG9yOjpvcGVyYXRvcispOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9y
LSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3I9KToKKyAgICAgICAg
KFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6SW5kZXhl
ZEl0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpv
cGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPD0pOgor
ICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPik6CisgICAgICAgIChXVEY6
OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3I+PSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVy
YXRvcjo6b3BlcmF0b3IgY29uc3RfaXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRl
cmF0b3I6OmlzU2FmZVRvQ29tcGFyZSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6
dW5zYWZlR2V0KToKKyAgICAgICAgKFdURjo6Z2V0UHRyKToKKyAgICAgICAgKFdURjo6b3BlcmF0
b3ItKToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9y
IT0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcjw9KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I+
PSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPCk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPik6
CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvclNlbGVjdG9yOjptYWtlSXRlcmF0b3IpOgor
ICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3JTZWxlY3Rvcjo6bWFrZUNvbnN0SXRlcmF0b3Ip
OgorICAgICAgICAqIHd0Zi9SZWZDb3VudGVkQXJyYXkuaDoKKyAgICAgICAgKFdURjo6UmVmQ291
bnRlZEFycmF5OjpSZWZDb3VudGVkQXJyYXkpOgorICAgICAgICAqIHd0Zi9WZWN0b3IuaDoKKyAg
ICAgICAgKFdURjo6VmVjdG9yOjpWZWN0b3IpOgorICAgICAgICAoV1RGOjpWZWN0b3I6OmJlZ2lu
KToKKyAgICAgICAgKFdURjo6VmVjdG9yOjplbmQpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hh
bmRsZXI+OjpWZWN0b3IpOgorICAgICAgICAoV1RGOjo9KToKKyAgICAgICAgKFdURjo6T3ZlcmZs
b3dIYW5kbGVyPjo6ZmlsbCk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OmV4cGFu
ZENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6dHJ5RXhwYW5kQ2Fw
YWNpdHkpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpyZXNpemUpOgorICAgICAg
ICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpzaHJpbmspOgorICAgICAgICAoV1RGOjpPdmVyZmxv
d0hhbmRsZXI+Ojpncm93KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6cmVzZXJ2
ZUNhcGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6dHJ5UmVzZXJ2ZUNh
cGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6c2hyaW5rQ2FwYWNpdHkp
OgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmQpOgorICAgICAgICAoV1RG
OjpPdmVyZmxvd0hhbmRsZXI+Ojp0cnlBcHBlbmQpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hh
bmRsZXI+OjphcHBlbmRTbG93Q2FzZSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46
OnVuY2hlY2tlZEFwcGVuZCk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OmFwcGVu
ZFZlY3Rvcik6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46Omluc2VydCk6CisgICAg
ICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46Omluc2VydFZlY3Rvcik6CisgICAgICAgIChXVEY6
Ok92ZXJmbG93SGFuZGxlcj46OnJlbW92ZSk6CisKIDIwMTQtMTEtMTcgIEFuZGVycyBDYXJsc3Nv
biAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggV1RGIGJ1aWxkIHdpdGggbmV3
ZXIgdmVyc2lvbnMgb2YgY2xhbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzYwZmFjZDhlMjM3MTU3YmY2M2Ix
NjhhZDc3OTAzMWQyZTZkYmFjMy4uZDViMjdkZjQ0NzI3YWZhOWIzMjg0MTdkYzkzZTM1OThjNjQw
MzczOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE0LTExLTE3ICBPbGl2ZXIgSHVu
dCAgPG9saXZlckBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBzdXJlIHJhbmdlIGJhc2VkIGl0
ZXJhdGlvbiBvZiBWZWN0b3I8PiBzdGlsbCByZWNlaXZlcyBib3VuZHMgY2hlY2tpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODgyMQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXJlIGFyZSBhIGZl
dyB1c2VzIG9mIGJlZ2luKCkvZW5kKCkgdGhhdCBleHBsaWNpdGx5IHJlcXVpcmUgcG9pbnRlcnMs
CisgICAgICAgIHNvIHdlIHVzZSBnZXRQdHIoKSB0byBleHRyYWN0IHRoZSB1bmRlcmx5aW5nIHBv
aW50ZXIgZ2VuZXJpY2FsbHkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2Vy
aWFsaXplU3RyaW5nKToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTZWFyY2hCdWZmZXI6OmlzQmFkTWF0Y2gpOgorICAgICAgICAqIHBhZ2Uv
bWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2VnbWVudGVkRm9udERhdGE6OmZvbnREYXRhRm9yQ2hhcmFjdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNlZ21lbnRlZEZvbnREYXRhOjpjb250YWluc0NoYXJhY3Rlcik6CisgICAgICAg
IChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6aXNMb2FkaW5nKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252
ZXJ0V09GRlRvU2ZudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBhaW50RmlsbExheWVycyk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmZpcnN0TmFtZWRHcmlkTGluZUJlZm9yZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
aWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlUm93RW5kQ29sdW1uRW5kTmFtZWRHcmlkTGluZVBv
c2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24pOgorICAgICAgICAqIHN2Zy9TVkdGb250RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjprZXJuaW5nRm9yUGFpck9mU3RyaW5nc0FuZEds
eXBocyk6CisgICAgICAgICogc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmg6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoQnl0ZVN0cmVhbTo6YXBwZW5kKToKKyAgICAgICAgKiB4bWwvWFBhdGhOb2Rl
U2V0Lmg6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6Tm9kZVNldDo6YmVnaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6Ok5vZGVTZXQ6OmVuZCk6CisKIDIwMTQtMTEtMTcgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgaW5pdGlhbCBsYXlvdXQgdGVz
dGluZyBjb3ZlcmFnZSBmb3IgdGltZXIgdGhyb3R0bGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKaW5kZXggNmMyOTNjY2Y5
OGQ1NjczMjZkYzQyZmFiZDVkZmE0MWQyM2Y2YzJjMS4uNjM1YWNkMmNiYjM4ZTc4YTYwODNiNjFl
NThkYmExYjQ3Y2I3OWU5YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC0yMzQsOSArMjM0LDkgQEAgdm9pZCBVbmxp
bmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAg
ICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc3ltYm9sVGFibGUpOwogICAgIGZvciAo
RnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yOjppdGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5tX2Z1
bmN0aW9uRGVjbHMuYmVnaW4oKSwgZW5kID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkRlY2xzLmVu
ZCgpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQocHRyKTsKKyAg
ICAgICAgdmlzaXRvci5hcHBlbmQoV1RGOjpnZXRQdHIocHRyKSk7CiAgICAgZm9yIChGdW5jdGlv
bkV4cHJlc3Npb25WZWN0b3I6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25F
eHBycy5iZWdpbigpLCBlbmQgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRXhwcnMuZW5kKCk7IHB0
ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICB2aXNpdG9yLmFwcGVuZChwdHIpOworICAgICAgICB2
aXNpdG9yLmFwcGVuZChXVEY6OmdldFB0cihwdHIpKTsKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
cyh0aGlzT2JqZWN0LT5tX2NvbnN0YW50UmVnaXN0ZXJzLmRhdGEoKSwgdGhpc09iamVjdC0+bV9j
b25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwogICAgIGlmICh0aGlzT2JqZWN0LT5tX3JhcmVEYXRh
KSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBlbmQgPSB0aGlzT2JqZWN0LT5tX3JhcmVE
YXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOyBpICE9IGVuZDsgaSsrKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRl
eCBiMjEzNGVmN2E1MDliNzM2OWUzZDJjMDU2NjJjMjFiODQ3MDdmZjVjLi44ZmQ4YTBlMmI2NGY2
MDE0ZjYzMzE1M2VkMTk4MDc5NWUxYmM1ZGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMjI2Myw4
ICsyMjYzLDggQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMo
UmVnaXN0ZXJJRCogc2NvcGUsIENvbnRyb2xGbG93Q29udGUKICAgICAgICAgICAgIGludCB0b3BT
Y29wZUluZGV4ID0gLTE7CiAgICAgICAgICAgICBpbnQgYm90dG9tU2NvcGVJbmRleCA9IC0xOwog
ICAgICAgICAgICAgaWYgKGZsaXBTY29wZXMpIHsKLSAgICAgICAgICAgICAgICB0b3BTY29wZUlu
ZGV4ID0gdG9wU2NvcGUgLSBtX3Njb3BlQ29udGV4dFN0YWNrLmJlZ2luKCk7Ci0gICAgICAgICAg
ICAgICAgYm90dG9tU2NvcGVJbmRleCA9IGJvdHRvbVNjb3BlIC0gbV9zY29wZUNvbnRleHRTdGFj
ay5iZWdpbigpOworICAgICAgICAgICAgICAgIHRvcFNjb3BlSW5kZXggPSB0b3BTY29wZSAtIGdl
dFB0cihtX3Njb3BlQ29udGV4dFN0YWNrLmJlZ2luKCkpOworICAgICAgICAgICAgICAgIGJvdHRv
bVNjb3BlSW5kZXggPSBib3R0b21TY29wZSAtIGdldFB0cihtX3Njb3BlQ29udGV4dFN0YWNrLmJl
Z2luKCkpOwogICAgICAgICAgICAgICAgIHNhdmVkU2NvcGVDb250ZXh0U3RhY2sgPSBtX3Njb3Bl
Q29udGV4dFN0YWNrOwogICAgICAgICAgICAgICAgIG1fc2NvcGVDb250ZXh0U3RhY2suc2hyaW5r
KGZpbmFsbHlDb250ZXh0LnNjb3BlQ29udGV4dFN0YWNrU2l6ZSk7CiAgICAgICAgICAgICB9CkBA
IC0yMzA4LDcgKzIzMDgsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleFBv
cFNjb3BlcyhSZWdpc3RlcklEKiBzY29wZSwgQ29udHJvbEZsb3dDb250ZQogICAgICAgICAgICAg
aWYgKGZsaXBTY29wZXMpIHsKICAgICAgICAgICAgICAgICBtX3Njb3BlQ29udGV4dFN0YWNrID0g
c2F2ZWRTY29wZUNvbnRleHRTdGFjazsKICAgICAgICAgICAgICAgICB0b3BTY29wZSA9ICZtX3Nj
b3BlQ29udGV4dFN0YWNrW3RvcFNjb3BlSW5kZXhdOyAvLyBhc3NlcnQgaXQncyB3aXRoaW4gYm91
bmRzCi0gICAgICAgICAgICAgICAgYm90dG9tU2NvcGUgPSBtX3Njb3BlQ29udGV4dFN0YWNrLmJl
Z2luKCkgKyBib3R0b21TY29wZUluZGV4OyAvLyBkb24ndCBhc3NlcnQsIHNpbmNlIGl0IHRoZSBp
bmRleCBtaWdodCBiZSAtMS4KKyAgICAgICAgICAgICAgICBib3R0b21TY29wZSA9IFdURjo6Z2V0
UHRyKG1fc2NvcGVDb250ZXh0U3RhY2suYmVnaW4oKSkgKyBib3R0b21TY29wZUluZGV4OyAvLyBk
b24ndCBhc3NlcnQsIHNpbmNlIGl0IHRoZSBpbmRleCBtaWdodCBiZSAtMS4KICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmIChmbGlwU3dpdGNoZXMpCiAgICAgICAgICAgICAgICAgbV9zd2l0
Y2hDb250ZXh0U3RhY2sgPSBzYXZlZFN3aXRjaENvbnRleHRTdGFjazsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggZjA3MjRkZjQ3MDM5
NDliMzBkMjRlMzZhYTgyZTc3OGE1Y2I5YmY3My4uODIwOWY1ZmEwMjBkZTYzNTI2YjhmZmI2N2Fl
NmZhNWYxMWQ1ZjE1MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKQEAgLTQ5MTAsNyArNDkxMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRTd2l0Y2hJbnRKdW1wKAogICAgIGFkZEJyYW5jaCgKICAgICAgICAgbV9qaXQuYnJhbmNo
MzIoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWUsIEltbTMyKHRhYmxlLmN0aU9mZnNl
dHMuc2l6ZSgpKSksCiAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKLSAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW1QdHIodGFibGUuY3RpT2Zmc2V0cy5iZWdpbigpKSwgc2NyYXRjaCk7
CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGdldFB0cih0YWJsZS5jdGlPZmZzZXRzLmJl
Z2luKCkpKSwgc2NyYXRjaCk7CiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QmFzZUlu
ZGV4KHNjcmF0Y2gsIHZhbHVlLCBKSVRDb21waWxlcjo6dGltZXNQdHIoKSksIHNjcmF0Y2gpOwog
ICAgIG1faml0Lmp1bXAoc2NyYXRjaCk7CiAgICAgZGF0YS0+ZGlkVXNlSnVtcFRhYmxlID0gdHJ1
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9u
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgKaW5kZXgg
ZmM3Y2IxYjI1NDMyNjk0YWFlZThmYmYzMTUzZTZlMDhhODMzMmYzOS4uYzdiMWRhOTY5OWU0MDdi
NWQ2ODM5ZTAxZGM3ZTYzZjEwY2Y4Mzc2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExBYmJyZXZpYXRpb25zLmgKQEAgLTEyMCw3ICsxMjAsNyBAQCBzdGF0aWMgaW5saW5lIExW
YWx1ZSBtZFN0cmluZyhMQ29udGV4dCBjb250ZXh0LCBjb25zdCBjaGFyKiBzdHJpbmcsIHVuc2ln
bmVkIGxlbgogc3RhdGljIGlubGluZSBMVmFsdWUgbWRTdHJpbmcoTENvbnRleHQgY29udGV4dCwg
Y29uc3QgY2hhciogc3RyaW5nKSB7IHJldHVybiBtZFN0cmluZyhjb250ZXh0LCBzdHJpbmcsIHN0
ZDo6c3RybGVuKHN0cmluZykpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRl
eHQgY29udGV4dCwgTFZhbHVlKiBhcmdzLCB1bnNpZ25lZCBudW1BcmdzKSB7IHJldHVybiBsbHZt
LT5NRE5vZGVJbkNvbnRleHQoY29udGV4dCwgYXJncywgbnVtQXJncyk7IH0KIHRlbXBsYXRlPHR5
cGVuYW1lIFZlY3RvclR5cGU+Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQg
Y29udGV4dCwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKSB7IHJldHVybiBtZE5vZGUoY29udGV4
dCwgY29uc3RfY2FzdDxMVmFsdWUqPih2ZWN0b3IuYmVnaW4oKSksIHZlY3Rvci5zaXplKCkpOyB9
CitzdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwgY29uc3QgVmVj
dG9yVHlwZSYgdmVjdG9yKSB7IHJldHVybiBtZE5vZGUoY29udGV4dCwgY29uc3RfY2FzdDxMVmFs
dWUqPihnZXRQdHIodmVjdG9yLmJlZ2luKCkpKSwgdmVjdG9yLnNpemUoKSk7IH0KIHN0YXRpYyBp
bmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0KSB7IHJldHVybiBtZE5vZGUoY29u
dGV4dCwgMCwgMCk7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4dCBjb250
ZXh0LCBMVmFsdWUgYXJnMSkgeyByZXR1cm4gbWROb2RlKGNvbnRleHQsICZhcmcxLCAxKTsgfQog
c3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQsIExWYWx1ZSBhcmcx
LCBMVmFsdWUgYXJnMikKQEAgLTI4OCw3ICsyODgsNyBAQCBzdGF0aWMgaW5saW5lIExWYWx1ZSBi
dWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBMVmFsdWUq
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPgogaW5saW5lIExWYWx1ZSBidWlsZENhbGwo
TEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0
b3IpCiB7Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgdmVjdG9yLmJl
Z2luKCksIHZlY3Rvci5zaXplKCkpOworICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVu
Y3Rpb24sIGdldFB0cih2ZWN0b3IuYmVnaW4oKSksIHZlY3Rvci5zaXplKCkpOwogfQogc3RhdGlj
IGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlv
bikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKaW5kZXggNjkx
OWFlYWIwMGExYjI1YzQ3NWJiZjlkZDI1YzY4OGYwYWE1OGE3Mi4uMzFiYTRiMGM4MGI2M2U5YTc3
YzgxNWI0N2QxZTVkM2ZhYTFmNTI3MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50RGF0YS5jcHAKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRp
b25zKFZNJiB2bSkKICAgICBWZWN0b3I8aW50PiB0ZXN0VmVjdG9yOwogICAgIHRlc3RWZWN0b3Iu
cmVzaXplKDQyKTsKICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnQzMl90Kj4oJnRlc3RWZWN0
b3IpW3NpemVvZih2b2lkKikvc2l6ZW9mKHVpbnQzMl90KSArIDFdID09IDQyKTsKLSAgICBBU1NF
UlQoYml0d2lzZV9jYXN0PGludCoqPigmdGVzdFZlY3RvcilbMF0gPT0gdGVzdFZlY3Rvci5iZWdp
bigpKTsKKyAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGludCoqPigmdGVzdFZlY3RvcilbMF0gPT0g
Z2V0UHRyKHRlc3RWZWN0b3IuYmVnaW4oKSkpOwogI2VuZGlmCiAKICAgICBBU1NFUlQoU3RyaW5n
SW1wbDo6c19oYXNoRmxhZzhCaXRCdWZmZXIgPT0gMzIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmgKaW5kZXggNDUyZjcwNDZmMzAyMmQzODgxMDlhZWJkYzg0Mzg0ZTFhYTIyZmZh
MS4uMDFmY2NkYjdlMzhhYzVhNjAyMmM2OGM5N2I4ZDhlYjNiMGNlYzE4MCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCkBAIC0xMzAsMTEgKzEzMCw4IEBAIHN0cnVjdCBTY29w
ZSB7CiAgICAgewogICAgICAgICBpZiAocmhzLm1fbGFiZWxzKSB7CiAgICAgICAgICAgICBtX2xh
YmVscyA9IGFkb3B0UHRyKG5ldyBMYWJlbFN0YWNrKTsKLQotICAgICAgICAgICAgdHlwZWRlZiBM
YWJlbFN0YWNrOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKLSAgICAgICAgICAgIGl0ZXJhdG9y
IGVuZCA9IHJocy5tX2xhYmVscy0+ZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0
ID0gcmhzLm1fbGFiZWxzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAg
ICAgbV9sYWJlbHMtPmFwcGVuZChTY29wZUxhYmVsSW5mbyhpdC0+bV9pZGVudCwgaXQtPm1faXNM
b29wKSk7CisgICAgICAgICAgICBmb3IgKGF1dG8gbGFiZWwgOiAqcmhzLm1fbGFiZWxzKQorICAg
ICAgICAgICAgICAgIG1fbGFiZWxzLT5hcHBlbmQoU2NvcGVMYWJlbEluZm8obGFiZWwubV9pZGVu
dCwgbGFiZWwubV9pc0xvb3ApKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVOb2RlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlTm9kZS5jcHAKaW5kZXggMjY1Y2RkZDBlZjc4ODMz
ZjYxYjU3MTExOWNmZDc3MjBmZDQ2ZDE1Ny4uNjkyYzdiODZmM2MzYTI1NDIxYmIxMDA4MmRmNmUw
OGRlYjQwZjBmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVOb2RlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZU5vZGUuY3BwCkBAIC0xNTQsNiArMTU0LDcgQEAgdm9pZCBQcm9maWxlTm9kZTo6ZGVidWdQcmlu
dFJlY3Vyc2l2ZWx5KGludCBpbmRlbnRMZXZlbCwgY29uc3QgUHJvZmlsZVN1YnRyZWVEYXQKICAg
ICAvLyBQcmludCBjaGlsZHJlbidzIG5hbWVzIGFuZCBpbmZvcm1hdGlvbgogICAgIGZvciAoU3Rh
Y2tJdGVyYXRvciBjdXJyZW50Q2hpbGQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGN1cnJlbnRDaGls
ZCAhPSBtX2NoaWxkcmVuLmVuZCgpOyArK2N1cnJlbnRDaGlsZCkKICAgICAgICAgKCpjdXJyZW50
Q2hpbGQpLT5kZWJ1Z1ByaW50UmVjdXJzaXZlbHkoaW5kZW50TGV2ZWwsIGRhdGEpOworCiB9CiAK
IC8vIHByaW50IHRoZSBwcm9maWxlZCBkYXRhIGluIGEgZm9ybWF0IHRoYXQgbWF0Y2hlcyB0aGUg
dG9vbCBzYW1wbGUncyBvdXRwdXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuY3BwCmluZGV4IGNjNjMwMjE3ZGY3ZmQyNWFkZTRjNGJiMzk4NTc0ZDY3ZDVhNzQ1NjkuLjVk
OTE4MGE1YmIzMTJlZmIzM2I0MTE4YWFhYzQxNDFkZWE3Mzc4NzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCkBAIC0zNTIsNyArMzUyLDcgQEAgYm9vbCBKU0Fy
cmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
bmV3TGVuZ3RoLCBib28KICAgICAgICAgICAgIC8vIHByb3BlcnRpZXMsIHNvIHdlIGhhdmUgdG8g
cGVyZm9ybSBkZWxldGlvbiB3aXRoIGNhdXRpb24sIGlmIG5vdCB3ZSBjYW4KICAgICAgICAgICAg
IC8vIGRlbGV0ZSB2YWx1ZXMgaW4gYW55IG9yZGVyLgogICAgICAgICAgICAgaWYgKG1hcC0+c3Bh
cnNlTW9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgcXNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLnNp
emUoKSwgc2l6ZW9mKHVuc2lnbmVkKSwgY29tcGFyZUtleXNGb3JRU29ydCk7CisgICAgICAgICAg
ICAgICAgcXNvcnQoV1RGOjpnZXRQdHIoa2V5cy5iZWdpbigpKSwga2V5cy5zaXplKCksIHNpemVv
Zih1bnNpZ25lZCksIGNvbXBhcmVLZXlzRm9yUVNvcnQpOwogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGkgPSBrZXlzLnNpemUoKTsKICAgICAgICAgICAgICAgICB3aGlsZSAoaSkgewogICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGtleXNbLS1pXTsKQEAgLTExOTEsOSArMTE5
MSw5IEBAIHZvaWQgSlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3RvcihFeGVjU3RhdGUqIGV4ZWMs
IENvbnRpZ3VvdXNEYXRhPFN0b3JhZ2VUeXBlPiBkCiAgICAgICAgIAogI2lmIEhBVkUoTUVSR0VT
T1JUKQogICAgIGlmIChpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMpCi0gICAgICAgIHFzb3J0KHZh
bHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29t
cGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICAgICAgcXNvcnQoV1RGOjpnZXRQdHIodmFs
dWVzLmJlZ2luKCkpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29t
cGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICAgICBlbHNlCi0gICAgICAgIG1lcmdlc29ydCh2
YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNv
bXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAgICAgIG1lcmdlc29ydChXVEY6OmdldFB0
cih2YWx1ZXMuYmVnaW4oKSksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIp
LCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2Vsc2UKICAgICAvLyBGSVhNRTogVGhl
IHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0
LgogICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNwZWNpZnkgYSBzdGFibGUgc29ydCwg
YnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEgc3RhYmxlIHNvcnQuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgKaW5kZXggODhkNTdmM2Rk
NGU3OTc2OWQxZDA2YzNhODU5MTAxYjU1NWM2YTgzZi4uOTM5NjQ5NmQwNmMxNjQ0Yzc1YjliNTQ1
YjU4YWZjNmQ4YjgxZGFhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L1Byb2ZpbGVUcmVlTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9m
aWxlVHJlZU5vZGUuaApAQCAtODYsNyArODYsNyBAQCBwcml2YXRlOgogICAgICAgICBWZWN0b3I8
TWFwRW50cnkqPiBlbnRyaWVzOwogICAgICAgICBmb3IgKE1hcDo6aXRlcmF0b3IgaXQgPSBtX2No
aWxkcmVuLT5iZWdpbigpOyBpdCAhPSBtX2NoaWxkcmVuLT5lbmQoKTsgKytpdCkKICAgICAgICAg
ICAgIGVudHJpZXMuYXBwZW5kKCYqaXQpOwotICAgICAgICBxc29ydChlbnRyaWVzLmJlZ2luKCks
IGVudHJpZXMuc2l6ZSgpLCBzaXplb2YoTWFwRW50cnkqKSwgY29tcGFyZUVudHJpZXMpOworICAg
ICAgICBxc29ydChXVEY6OmdldFB0cihlbnRyaWVzLmJlZ2luKCkpLCBlbnRyaWVzLnNpemUoKSwg
c2l6ZW9mKE1hcEVudHJ5KiksIGNvbXBhcmVFbnRyaWVzKTsKIAogICAgICAgICAvLyBJdGVyYXRl
IG92ZXIgdGhlIGNoaWxkcmVuIGluIHNhbXBsZS1mcmVxdWVuY3kgb3JkZXIuCiAgICAgICAgIGZv
ciAoc2l6ZV90IGUgPSAwOyBlIDwgZW50cmllcy5zaXplKCk7ICsrZSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUveWFyci9ZYXJySklULmNwcAppbmRleCBlM2EzYTkzMmNlN2VkNzM4ZjE5ODZiMmJmMmI3
NDNlMDQyM2EzYjI1Li5kMjY4ZTU5ZTEyYmI0ZTgzNjhjZTM5MjA2ODc4YWM4MTYyZTNiNDJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcApAQCAtMjIzLDcgKzIyMyw3IEBA
IGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAg
aWYgKGNoYXJDbGFzcy0+bV9yYW5nZXMuc2l6ZSgpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBt
YXRjaEluZGV4ID0gMDsKICAgICAgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwotICAgICAgICAg
ICAgbWF0Y2hDaGFyYWN0ZXJDbGFzc1JhbmdlKGNoYXJhY3RlciwgZmFpbHVyZXMsIG1hdGNoRGVz
dCwgY2hhckNsYXNzLT5tX3Jhbmdlcy5iZWdpbigpLCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUo
KSwgJm1hdGNoSW5kZXgsIGNoYXJDbGFzcy0+bV9tYXRjaGVzLmJlZ2luKCksIGNoYXJDbGFzcy0+
bV9tYXRjaGVzLnNpemUoKSk7CisgICAgICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzUmFuZ2Uo
Y2hhcmFjdGVyLCBmYWlsdXJlcywgbWF0Y2hEZXN0LCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLmRhdGEo
KSwgY2hhckNsYXNzLT5tX3Jhbmdlcy5zaXplKCksICZtYXRjaEluZGV4LCBjaGFyQ2xhc3MtPm1f
bWF0Y2hlcy5kYXRhKCksIGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNpemUoKSk7CiAgICAgICAgICAg
ICB3aGlsZSAobWF0Y2hJbmRleCA8IGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNpemUoKSkKICAgICAg
ICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIsIElt
bTMyKCh1bnNpZ25lZCBzaG9ydCljaGFyQ2xhc3MtPm1fbWF0Y2hlc1ttYXRjaEluZGV4KytdKSkp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmZjQ4ZGEw
Y2M1MzEyODJhMTJkMGQ1MTA2YzY2MDM1ZjE1NWQ5MTU2Li4xYmE1Y2ZkNzg5OGZkOWU5NjU5NWJm
ZDVhNDc3NGZlZjFlYmY0ZjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTk4LDYgKzk4LDcgQEAKIAkJQTc0ODc0NTIxN0EwQkRBRTAwRkEwNENCIC8qIFNp
eENoYXJhY3Rlckhhc2guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTc0ODc0NEYxN0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guY3Bw
ICovOyB9OwogCQlBNzQ4NzQ1MzE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc0ODc0NTAx
N0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guaCAqLzsgfTsKIAkJQTc0ODc0NTQx
N0EwQkRBRTAwRkEwNENCIC8qIFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc0ODc0NTExN0EwQkRBRTAwRkEwNENC
IC8qIFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oICovOyB9OworCQlBN0RDMkYwNDFBMDlBMjJEMDA3
MkY0RTMgLyogSW5kZXhlZEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBN0RDMkYwMzFBMDk5REUzMDA3MkY0RTMgLyogSW5kZXhlZEl0ZXJh
dG9yLmggKi87IH07CiAJCUE3RTY0M0M2MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21wcmVzc2lvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0U2NDND
NDE3QzU0MjNCMDAzQkIxNkIgLyogQ29tcHJlc3Npb24uY3BwICovOyB9OwogCQlBN0U2NDNDNzE3
QzU0MjNCMDAzQkIxNkIgLyogQ29tcHJlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTY0M0M1MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21wcmVz
c2lvbi5oICovOyB9OwogCQlBODc2REJEODE1MTgxNkU1MDBEQURCOTUgLyogUGxhdGZvcm0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzZEQkQ3MTUx
ODE2RTUwMERBREI5NSAvKiBQbGF0Zm9ybS5oICovOyB9OwpAQCAtMzg5LDYgKzM5MCw3IEBACiAJ
CUE3NDg3NDRGMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpeENoYXJhY3Rlckhhc2guY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzQ4NzQ1MDE3QTBCREFFMDBGQTA0Q0IgLyogU2l4
Q2hhcmFjdGVySGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaXhDaGFy
YWN0ZXJIYXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NDg3NDUxMTdBMEJE
QUUwMEZBMDRDQiAvKiBTdHJpbmdIYXNoRHVtcENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3RyaW5nSGFzaER1bXBDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUE3REMyRjAzMUEwOTlERTMwMDcyRjRFMyAvKiBJbmRleGVkSXRlcmF0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhlZEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE3RTY0M0M0MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21wcmVzc2lvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21wcmVzc2lvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3RTY0M0M1MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21w
cmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wcmVzc2lvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODc2REJENzE1MTgxNkU1MDBEQURCOTUg
LyogUGxhdGZvcm0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm0u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg5Miw2ICs4OTQsNyBAQAogCQkJCTk3
NENGQzhEMTZBNEYzMjcwMDZENTQwNCAvKiBXZWFrUHRyLmggKi8sCiAJCQkJQThBNDczN0ExNTFB
ODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuY3BwICovLAogCQkJCUE4QTQ3MzdCMTUxQTgy
NUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmggKi8sCisJCQkJQTdEQzJGMDMxQTA5OURFMzAw
NzJGNEUzIC8qIEluZGV4ZWRJdGVyYXRvci5oICovLAogCQkJKTsKIAkJCXBhdGggPSB3dGY7CiAJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTA2NSw2ICsxMDY4LDcgQEAKIAkJCQlBOEE0
NzNBRDE1MUE4MjVCMDA0MTIzRkYgLyogY2FjaGVkLXBvd2Vycy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDc0NUUxNTFBODI1QjAwNDEyM0ZGIC8qIENoYXJhY3Rlck5hbWVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzM5NDE1MUE4MjVCMDA0MTIzRkYgLyogQ2hlY2tlZEFyaXRobWV0aWMu
aCBpbiBIZWFkZXJzICovLAorCQkJCUE3REMyRjA0MUEwOUEyMkQwMDcyRjRFMyAvKiBJbmRleGVk
SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3Mzk1MTUxQTgyNUIwMDQxMjNGRiAv
KiBDaGVja2VkQm9vbGVhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NUYxNTFBODI1QjAw
NDEyM0ZGIC8qIENvbGxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM0RURFNjE2OTYxNDk2
MDBGNjUwNDEgLyogQ29tbWFQcmludGVyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL0luZGV4ZWRJdGVyYXRvci5oIGIvU291cmNlL1dURi93dGYvSW5kZXhlZEl0
ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjdkNGZhZTU5NzYyMDJiZDMxY2ViOWQxY2U2ZDIzYTYyMzc2
MTQxMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL0luZGV4ZWRJdGVyYXRvci5o
CkBAIC0wLDAgKzEsNDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBXVEZfSW5kZXhlZEl0ZXJhdG9yX2gKKyNkZWZpbmUgV1RGX0luZGV4
ZWRJdGVyYXRvcl9oCisKK25hbWVzcGFjZSBXVEYgeworCisjZGVmaW5lIElOREVYRURfSVRFUkFU
T1JfT1ZFUkZMT1coY2hlY2spIGRvIHtcCisgICAgaWYgKCEoY2hlY2spKVwKKyAgICAgICAgT3Zl
cmZsb3dIYW5kbGVyOjpvdmVyZmxvd2VkKCk7XAorICAgIH0gd2hpbGUgKDApCisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBWZWN0b3JUeXBlLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXIgPSBDcmFzaE9uT3ZlcmZsb3c+IHN0cnVjdCBJbmRleGVkSXRlcmF0b3IgeworICAgIHR5cGVk
ZWYgc3RydWN0IEluZGV4ZWRJdGVyYXRvcjxjb25zdCBWZWN0b3JUeXBlLCBjb25zdCBULCBPdmVy
Zmxvd0hhbmRsZXI+IGNvbnN0X2l0ZXJhdG9yOworCisgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsK
KyAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CisgICAgdHlwZWRlZiBWYWx1
ZVR5cGUgdmFsdWVfdHlwZTsKKyAgICB0eXBlZGVmIFZhbHVlVHlwZSogcG9pbnRlcjsKKyAgICB0
eXBlZGVmIFZhbHVlVHlwZSYgcmVmZXJlbmNlOworICAgIHR5cGVkZWYgc3RkOjpiaWRpcmVjdGlv
bmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKworICAgIEluZGV4ZWRJdGVyYXRv
cigpCisgICAgICAgIDogbV92ZWN0b3IobnVsbHB0cikKKyAgICAgICAgLCBtX3Bvc2l0aW9uKDAp
CisgICAgeworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvcihWZWN0b3JUeXBlJiB2ZWN0b3Is
IFZhbHVlVHlwZSogcG9zaXRpb24pCisgICAgICAgIDogbV92ZWN0b3IoJnZlY3RvcikKKyAgICAg
ICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uIC0gdmVjdG9yLmRhdGEoKSkKKyAgICB7CisgICAgICAg
IElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA8PSB2ZWN0b3Iuc2l6ZSgpKTsK
KyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3IoY29uc3QgSW5kZXhlZEl0ZXJhdG9yJiBvdGhl
cikKKyAgICAgICAgOiBtX3ZlY3RvcihvdGhlci5tX3ZlY3RvcikKKyAgICAgICAgLCBtX3Bvc2l0
aW9uKG90aGVyLm1fcG9zaXRpb24pCisgICAgeworICAgIH0KKworICAgIFZhbHVlVHlwZSogb3Bl
cmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZtX3ZlY3Rvci0+YXQobV9wb3NpdGlvbik7IH0KKyAg
ICBWYWx1ZVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLT5hdChtX3Bv
c2l0aW9uKTsgfQorICAgIFZhbHVlVHlwZSogZ2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIElO
REVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA8PSBtX3ZlY3Rvci0+c2l6ZSgpKTsK
KyAgICAgICAgcmV0dXJuIG1fdmVjdG9yLT5kYXRhKCkgKyBtX3Bvc2l0aW9uOworICAgIH0KKwor
ICAgIEluZGV4ZWRJdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgeworICAgICAgICBJTkRFWEVE
X0lURVJBVE9SX09WRVJGTE9XKG1fcG9zaXRpb24gPCBtX3ZlY3Rvci0+c2l6ZSgpKTsKKyAgICAg
ICAgbV9wb3NpdGlvbisrOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgSW5k
ZXhlZEl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KQorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uIDwgbV92ZWN0b3ItPnNpemUoKSk7CisgICAgICAgIElu
ZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICBtX3Bvc2l0aW9uKys7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRv
ci0tKCkKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlv
biA+IDApOworICAgICAgICBtX3Bvc2l0aW9uLS07CisgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpCisgICAgeworICAgICAg
ICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1fcG9zaXRpb24gPiAwKTsKKyAgICAgICAgSW5k
ZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAgIG1fcG9zaXRpb24tLTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNvbnZlcnNpb24gb3BlcmF0
b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBidXQgbm90IHRvIG90aGVyIGlu
dGVnZXIgdHlwZXMuCisgICAgdHlwZWRlZiBzaXplX3QgKEluZGV4ZWRJdGVyYXRvcjo6KlVuc3Bl
Y2lmaWVkQm9vbFR5cGUpOworICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3ZlY3RvciA/ICZJbmRleGVkSXRlcmF0b3I6Om1fcG9zaXRpb24gOiBudWxs
cHRyOyB9CisKKworICAgIEluZGV4ZWRJdGVyYXRvciYgb3BlcmF0b3IrPShsb25nIGluY3JlbWVu
dCkKKyAgICB7CisgICAgICAgIGlmIChpbmNyZW1lbnQgPCAwKSB7CisgICAgICAgICAgICBJTkRF
WEVEX0lURVJBVE9SX09WRVJGTE9XKGluY3JlbWVudCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDMyX3Q+OjptYXgoKSk7CisgICAgICAgICAgICByZXR1cm4gKCp0aGlzKSAtPSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KC1pbmNyZW1lbnQpOworICAgICAgICB9CisgICAgICAgIElOREVYRURfSVRFUkFU
T1JfT1ZFUkZMT1coKHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLSBtX3Bvc2l0
aW9uKSA+IHN0YXRpY19jYXN0PHNpemVfdD4oaW5jcmVtZW50KSk7CisgICAgICAgIG1fcG9zaXRp
b24gKz0gaW5jcmVtZW50OworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1fcG9z
aXRpb24gPD0gbV92ZWN0b3ItPnNpemUoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9
CisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJhdG9yLT0obG9uZyBkZWNyZW1lbnQpCisgICAg
eworICAgICAgICBpZiAoZGVjcmVtZW50IDwgMCkgeworICAgICAgICAgICAgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVyhkZWNyZW1lbnQgIT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6
bWF4KCkpOworICAgICAgICAgICAgcmV0dXJuICgqdGhpcykgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90
PigtZGVjcmVtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZF
UkZMT1coc3RhdGljX2Nhc3Q8c2l6ZV90PihkZWNyZW1lbnQpIDw9IG1fcG9zaXRpb24pOworICAg
ICAgICBtX3Bvc2l0aW9uIC09IGRlY3JlbWVudDsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAg
IH0KKworICAgIEluZGV4ZWRJdGVyYXRvciYgb3BlcmF0b3IrPShzaXplX3QgaW5jcmVtZW50KQor
ICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVygoc3RkOjpudW1lcmljX2xp
bWl0czxzaXplX3Q+OjptYXgoKSAtIG1fcG9zaXRpb24pID4gaW5jcmVtZW50KTsKKyAgICAgICAg
bV9wb3NpdGlvbiArPSBpbmNyZW1lbnQ7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZM
T1cobV9wb3NpdGlvbiA8PSBtX3ZlY3Rvci0+c2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciYgb3BlcmF0b3ItPShzaXplX3QgZGVjcmVt
ZW50KQorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhkZWNyZW1lbnQg
PD0gbV9wb3NpdGlvbik7CisgICAgICAgIG1fcG9zaXRpb24gLT0gZGVjcmVtZW50OworICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvcis9
KGludDMyX3QgaW5jcmVtZW50KQorICAgIHsKKyAgICAgICAgaWYgKGluY3JlbWVudCA8IDApIHsK
KyAgICAgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaW5jcmVtZW50ICE9IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKTsKKyAgICAgICAgICAgIHJldHVybiAoKnRo
aXMpIC09IHN0YXRpY19jYXN0PHNpemVfdD4oLWluY3JlbWVudCk7CisgICAgICAgIH0KKyAgICAg
ICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVygoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+
OjptYXgoKSAtIG1fcG9zaXRpb24pID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmNyZW1lbnQpKTsK
KyAgICAgICAgbV9wb3NpdGlvbiArPSBpbmNyZW1lbnQ7CisgICAgICAgIElOREVYRURfSVRFUkFU
T1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA8PSBtX3ZlY3Rvci0+c2l6ZSgpKTsKKyAgICAgICAgcmV0
dXJuICp0aGlzOworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciYgb3BlcmF0b3ItPShpbnQz
Ml90IGRlY3JlbWVudCkKKyAgICB7CisgICAgICAgIGlmIChkZWNyZW1lbnQgPCAwKSB7CisgICAg
ICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGRlY3JlbWVudCAhPSBzdGQ6Om51bWVy
aWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSk7CisgICAgICAgICAgICByZXR1cm4gKCp0aGlzKSAr
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC1kZWNyZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAg
SU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhzdGF0aWNfY2FzdDxzaXplX3Q+KGRlY3JlbWVudCkg
PD0gbV9wb3NpdGlvbik7CisgICAgICAgIG1fcG9zaXRpb24gLT0gZGVjcmVtZW50OworICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yKyhz
aXplX3QgaW5jcmVtZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJl
c3VsdCgqdGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQgKz0gaW5jcmVtZW50OworICAgIH0K
KworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0oc2l6ZV90IGRlY3JlbWVudCkgY29uc3QK
KyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0IC09IGRlY3JlbWVudDsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Ig
b3BlcmF0b3IrKGludDMyX3QgaW5jcmVtZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgSW5kZXhl
ZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQgKz0gaW5jcmVt
ZW50OworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0oaW50MzJfdCBkZWNy
ZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlz
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCAtPSBkZWNyZW1lbnQ7CisgICAgfQorCisgICAgSW5k
ZXhlZEl0ZXJhdG9yIG9wZXJhdG9yKyh1bnNpZ25lZCBsb25nIGxvbmcgaW5jcmVtZW50KSBjb25z
dAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAg
IHJldHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmNyZW1lbnQpOworICAgIH0K
KworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0odW5zaWduZWQgbG9uZyBsb25nIGRlY3Jl
bWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMp
OworICAgICAgICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19jYXN0PHNpemVfdD4oZGVjcmVtZW50
KTsKKyAgICB9CisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yKyhsb25nIGxvbmcgaW5jcmVt
ZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7
CisgICAgICAgIHJldHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmNyZW1lbnQp
OworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0obG9uZyBsb25nIGRlY3Jl
bWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMp
OworICAgICAgICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19jYXN0PHNpemVfdD4oZGVjcmVtZW50
KTsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKHVuc2lnbmVkIGluY3Jl
bWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMp
OworICAgICAgICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19jYXN0PHNpemVfdD4oaW5jcmVtZW50
KTsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3ItKHVuc2lnbmVkIGRlY3Jl
bWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMp
OworICAgICAgICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19jYXN0PHNpemVfdD4oZGVjcmVtZW50
KTsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKGxvbmcgaW5jcmVtZW50
KSBjb25zdAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmNyZW1lbnQpOwor
ICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0obG9uZyBkZWNyZW1lbnQpIGNv
bnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlY3JlbWVudCk7CisgICAg
fQorCisgICAgcHRyZGlmZl90IG9wZXJhdG9yLShjb25zdCBjb25zdF9pdGVyYXRvciYgcmlnaHQp
IGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1fdmVjdG9y
ID09IHJpZ2h0Lm1fdmVjdG9yKTsKKyAgICAgICAgcmV0dXJuIG1fcG9zaXRpb24gLSByaWdodC5t
X3Bvc2l0aW9uOworICAgIH0KKworICAgIHB0cmRpZmZfdCBvcGVyYXRvci0oY29uc3QgVmFsdWVU
eXBlKiByaWdodCkgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZM
T1cocmlnaHQgPj0gbV92ZWN0b3ItPmRhdGEoKSk7CisgICAgICAgIElOREVYRURfSVRFUkFUT1Jf
T1ZFUkZMT1cobV9wb3NpdGlvbiA+PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHJpZ2h0IC0gbV92ZWN0
b3ItPmRhdGEoKSkpOworICAgICAgICByZXR1cm4gZ2V0KCkgLSByaWdodDsKKyAgICB9CisKKyAg
ICB2b2lkIG9wZXJhdG9yPShjb25zdCBJbmRleGVkSXRlcmF0b3ImIG90aGVyKQorICAgIHsKKyAg
ICAgICAgbV92ZWN0b3IgPSBvdGhlci5tX3ZlY3RvcjsKKyAgICAgICAgbV9wb3NpdGlvbiA9IG90
aGVyLm1fcG9zaXRpb247CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0
X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1Jf
T1ZFUkZMT1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVH
ZXQoKSA9PSBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhF
RF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0
dXJuIHVuc2FmZUdldCgpICE9IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
SU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAg
ICAgcmV0dXJuIHVuc2FmZUdldCgpID09IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhF
RF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0
dXJuIHVuc2FmZUdldCgpICE9IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJB
VE9SX09WRVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5z
YWZlR2V0KCkgPCBvdGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgVmFs
dWVUeXBlKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZF
UkZMT1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQo
KSA8PSBvdGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBjb25zdF9pdGVy
YXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJG
TE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkg
PCBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3Qg
Y29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVyhzYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNh
ZmVHZXQoKSA8PSBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
Pihjb25zdCBJbmRleGVkSXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5E
RVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAg
cmV0dXJuIHVuc2FmZUdldCgpID4gb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvcj49KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7
CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA+PSBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9
CisKKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3Ro
ZXIpKTsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpID4gb3RoZXI7CisgICAgfQorCisgICAg
Ym9vbCBvcGVyYXRvcj49KGNvbnN0IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOwor
ICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPj0gb3RoZXI7CisgICAgfQorCisgICAgb3BlcmF0
b3IgY29uc3RfaXRlcmF0b3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3RfaXRlcmF0b3Ig
cmVzdWx0OworICAgICAgICByZXN1bHQubV92ZWN0b3IgPSBtX3ZlY3RvcjsKKyAgICAgICAgcmVz
dWx0Lm1fcG9zaXRpb24gPSBtX3Bvc2l0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKworICAgIFZlY3RvclR5cGUqIG1fdmVjdG9yOworICAgIHNpemVfdCBtX3Bvc2l0aW9uOwor
CisgICAgYm9vbCBpc1NhZmVUb0NvbXBhcmUoY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiAhbV92ZWN0b3IgfHwgIW90aGVy
Lm1fdmVjdG9yOworICAgIH0KKworICAgIGJvb2wgaXNTYWZlVG9Db21wYXJlKGNvbnN0IFZhbHVl
VHlwZSogdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghbV92ZWN0b3IpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgc2l6ZV90IGRlbHRhID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pih2YWx1
ZSAtIG1fdmVjdG9yLT5kYXRhKCkpOworICAgICAgICByZXR1cm4gZGVsdGEgPD0gbV92ZWN0b3It
PnNpemUoKTsKKyAgICB9CisKKyAgICBWYWx1ZVR5cGUqIHVuc2FmZUdldCgpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoIW1fdmVjdG9yKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBnZXQoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgdHlw
ZW5hbWUgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPjo6VmFs
dWVUeXBlKiBnZXRQdHIoSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5k
bGVyPiBwKQoreworICAgIHJldHVybiBwLmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUg
cHRyZGlmZl90IG9wZXJhdG9yLShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJ
dGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIElO
REVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobGVmdCA+PSByaWdodC5tX3ZlY3Rvci0+ZGF0YSgpKTsK
KyAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGxlZnQgPD0gcmlnaHQubV92ZWN0b3ItPmVu
ZCgpLmdldCgpKTsKKyAgICByZXR1cm4gbGVmdCAtIHJpZ2h0LmdldCgpOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXI+CitpbmxpbmUgcHRyZGlmZl90IG9wZXJhdG9yLShWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IElu
ZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQorewor
ICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobGVmdCA+PSByaWdodC5tX3ZlY3Rvci0+ZGF0
YSgpKTsKKyAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGxlZnQgPD0gcmlnaHQubV92ZWN0
b3ItPmVuZCgpLmdldCgpKTsKKyAgICByZXR1cm4gbGVmdCAtIHJpZ2h0LmdldCgpOworfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXI+CitpbmxpbmUgcHRyZGlmZl90IG9wZXJhdG9yLShjb25zdCBWYWx1ZVR5cGUqIGxl
ZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxjb25zdCBULCBjb25zdCBWYWx1ZVR5cGUsIE92ZXJm
bG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobGVm
dCA+PSByaWdodC5tX3ZlY3Rvci0+ZGF0YSgpKTsKKyAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJG
TE9XKGxlZnQgPD0gcmlnaHQubV92ZWN0b3ItPmVuZCgpLmdldCgpKTsKKyAgICByZXR1cm4gbGVm
dCAtIHJpZ2h0LmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFs
dWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3Zl
cmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID09IGxlZnQ7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0
LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiBy
aWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPT0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRv
cjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiBy
aWdodCAhPSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVU
eXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwg
T3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ICE9IGxlZnQ7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPD0oVmFsdWVUeXBlKiBsZWZ0LCBj
b25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdo
dCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPj0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5l
IGJvb2wgb3BlcmF0b3I8PShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVy
YXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVy
biByaWdodCA+PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFs
dWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj49
KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3Zl
cmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0IDw9IGxlZnQ7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0
LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiBy
aWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPD0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5s
aW5lIGJvb2wgb3BlcmF0b3I8KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9y
PFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJp
Z2h0ID4gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlw
ZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0
IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3Zl
cmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID4gbGVmdDsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I+KFZhbHVlVHlwZSogbGVmdCwgY29uc3Qg
SW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7
CisgICAgcmV0dXJuIHJpZ2h0IDwgbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wg
b3BlcmF0b3I+KGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQs
IFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0
IDwgbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFZlY3RvclR5cGUsIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlcj4gc3RydWN0IEluZGV4ZWRJdGVyYXRvclNlbGVjdG9yIHsKKyAgICB0eXBl
ZGVmIHR5cGVuYW1lIFZlY3RvclR5cGU6OlZhbHVlVHlwZSBWYWx1ZVR5cGU7CisgICAgdHlwZWRl
ZiBJbmRleGVkSXRlcmF0b3I8VmVjdG9yVHlwZSwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+
IGl0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3I6OmNvbnN0X2l0ZXJhdG9y
IGNvbnN0X2l0ZXJhdG9yOworICAgIHN0YXRpYyBpdGVyYXRvciBtYWtlSXRlcmF0b3IoVmVjdG9y
VHlwZSYgdmVjdG9yLCBWYWx1ZVR5cGUqIHApIHsgcmV0dXJuIGl0ZXJhdG9yKHZlY3RvciwgcCk7
IH0KKyAgICBzdGF0aWMgY29uc3RfaXRlcmF0b3IgbWFrZUNvbnN0SXRlcmF0b3IoY29uc3QgVmVj
dG9yVHlwZSYgdmVjdG9yLCBjb25zdCBWYWx1ZVR5cGUqIHApIHsgcmV0dXJuIGNvbnN0X2l0ZXJh
dG9yKHZlY3RvciwgcCk7IH0KK307CisKKyN1bmRlZiBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9X
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJy
YXkuaCBiL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCmluZGV4IGE1NWQ3YWVlYWI4
NGI5YzQ5NTE5NmU4ZTIzMGExZGMxNzg1MTkzYWIuLjgxMWU5ZmZjZWEzMzdhNmM3ZDhiMjkxNjMw
ZTJhZmRmOGU1NjYzOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJh
eS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCkBAIC04Myw3ICs4Myw3
IEBAIHB1YmxpYzoKICAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5yZWZDb3Vu
dCA9IDE7CiAgICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+bGVuZ3RoID0gb3Ro
ZXIuc2l6ZSgpOwogICAgICAgICBBU1NFUlQoSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5s
ZW5ndGggPT0gb3RoZXIuc2l6ZSgpKTsKLSAgICAgICAgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD46
OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpLCBtX2RhdGEpOwor
ICAgICAgICBWZWN0b3JUeXBlT3BlcmF0aW9uczxUPjo6dW5pbml0aWFsaXplZENvcHkoZ2V0UHRy
KG90aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuZW5kKCkpLCBtX2RhdGEpOwogICAgIH0KICAg
ICAKICAgICBSZWZDb3VudGVkQXJyYXkmIG9wZXJhdG9yPShjb25zdCBSZWZDb3VudGVkQXJyYXkm
IG90aGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVmVjdG9yLmggYi9Tb3VyY2UvV1RG
L3d0Zi9WZWN0b3IuaAppbmRleCBmMzEzMjllMzRiMzdiMzg5Y2I4OTYwOTBmMzUwMjk5YTQxZGM5
YjQwLi44YWMzNWJjNTk0ZWJhYjQyYmMwMjM2NGQ2M2FjYWZjZmE2NGY0NDg0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaApA
QCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8d3RmL0NoZWNr
ZWRBcml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL0luZGV4ZWRJdGVyYXRvci5oPgogI2luY2x1ZGUg
PHd0Zi9NYWxsb2NQdHIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC01NTMsMTQgKzU1NSwxNyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHkgPSAwLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXIgPSBDcmFzaAogY2xhc3MgVmVjdG9yIDogcHJpdmF0ZSBWZWN0b3JCdWZmZXI8VCwgaW5saW5l
Q2FwYWNpdHk+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHByaXZhdGU6CisKICAg
ICB0eXBlZGVmIFZlY3RvckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eT4gQmFzZTsKICAgICB0eXBl
ZGVmIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+IFR5cGVPcGVyYXRpb25zOworICAgIHR5cGVkZWYg
SW5kZXhlZEl0ZXJhdG9yU2VsZWN0b3I8VmVjdG9yLCBPdmVyZmxvd0hhbmRsZXI+IEl0ZXJhdG9y
U2VsZWN0b3I7CiAKIHB1YmxpYzoKICAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOwogCi0gICAgdHlw
ZWRlZiBUKiBpdGVyYXRvcjsKLSAgICB0eXBlZGVmIGNvbnN0IFQqIGNvbnN0X2l0ZXJhdG9yOwor
ICAgIHR5cGVkZWYgdHlwZW5hbWUgSXRlcmF0b3JTZWxlY3Rvcjo6aXRlcmF0b3IgaXRlcmF0b3I7
CisgICAgdHlwZWRlZiB0eXBlbmFtZSBJdGVyYXRvclNlbGVjdG9yOjpjb25zdF9pdGVyYXRvciBj
b25zdF9pdGVyYXRvcjsKKwogICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJh
dG9yPiByZXZlcnNlX2l0ZXJhdG9yOwogICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9y
PGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogCkBAIC01NzMsMTQgKzU3
OCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIDogQmFzZShzaXplLCBzaXplKQogICAgIHsKICAgICAg
ICAgaWYgKGJlZ2luKCkpCi0gICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShi
ZWdpbigpLCBlbmQoKSk7CisgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShn
ZXRQdHIoYmVnaW4oKSksIGdldFB0cihlbmQoKSkpOwogICAgIH0KIAogICAgIFZlY3RvcihzaXpl
X3Qgc2l6ZSwgY29uc3QgVCYgdmFsKQogICAgICAgICA6IEJhc2Uoc2l6ZSwgc2l6ZSkKICAgICB7
CiAgICAgICAgIGlmIChiZWdpbigpKQotICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5p
dGlhbGl6ZWRGaWxsKGJlZ2luKCksIGVuZCgpLCB2YWwpOworICAgICAgICAgICAgVHlwZU9wZXJh
dGlvbnM6OnVuaW5pdGlhbGl6ZWRGaWxsKGdldFB0cihiZWdpbigpKSwgZ2V0UHRyKGVuZCgpKSwg
dmFsKTsKICAgICB9CiAKICAgICBWZWN0b3Ioc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IGluaXRp
YWxpemVyTGlzdCkKQEAgLTY0NCwxMCArNjQ5LDEwIEBAIHB1YmxpYzoKICAgICBjb25zdCBUKiBk
YXRhKCkgY29uc3QgeyByZXR1cm4gQmFzZTo6YnVmZmVyKCk7IH0KICAgICBzdGF0aWMgcHRyZGlm
Zl90IGRhdGFNZW1vcnlPZmZzZXQoKSB7IHJldHVybiBCYXNlOjpidWZmZXJNZW1vcnlPZmZzZXQo
KTsgfQogCi0gICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBkYXRhKCk7IH0KLSAgICBpdGVy
YXRvciBlbmQoKSB7IHJldHVybiBiZWdpbigpICsgbV9zaXplOyB9Ci0gICAgY29uc3RfaXRlcmF0
b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBkYXRhKCk7IH0KLSAgICBjb25zdF9pdGVyYXRvciBl
bmQoKSBjb25zdCB7IHJldHVybiBiZWdpbigpICsgbV9zaXplOyB9CisgICAgaXRlcmF0b3IgYmVn
aW4oKSB7IHJldHVybiBJdGVyYXRvclNlbGVjdG9yOjptYWtlSXRlcmF0b3IoKnRoaXMsIGRhdGEo
KSk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBiZWdpbigpICsgc2l6ZSgpOyB9Cisg
ICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBJdGVyYXRvclNlbGVjdG9y
OjptYWtlQ29uc3RJdGVyYXRvcigqdGhpcywgZGF0YSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgKyBzaXplKCk7IH0KIAogICAgIHJldmVyc2Vf
aXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICAg
ICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2lu
KCkpOyB9CkBAIC02ODIsNiArNjg3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhcigpIHsg
c2hyaW5rQ2FwYWNpdHkoMCk7IH0KIAorICAgIHZvaWQgYXBwZW5kKGNvbnN0X2l0ZXJhdG9yLCBz
aXplX3QpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKGNvbnN0IFUqLCBz
aXplX3QpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKFUmJik7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCB1bmNoZWNrZWRBcHBlbmQoVSYmIHZhbCk7CkBAIC03
NDUsNyArNzUxLDcgQEAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+
OjpWZWN0b3IoY29uc3QgVmVjdG9yJiBvdGhlcikKICAgICA6IEJhc2Uob3RoZXIuY2FwYWNpdHko
KSwgb3RoZXIuc2l6ZSgpKQogewogICAgIGlmIChiZWdpbigpKQotICAgICAgICBUeXBlT3BlcmF0
aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCksIGJlZ2lu
KCkpOworICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90
aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlcj4KQEAgLTc1NCw3ICs3NjAsNyBAQCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlcj46OlZlY3Rvcihjb25zdCBWZWN0b3I8VCwgb3RoZXJDYXBhY2l0
eQogICAgIDogQmFzZShvdGhlci5jYXBhY2l0eSgpLCBvdGhlci5zaXplKCkpCiB7CiAgICAgaWYg
KGJlZ2luKCkpCi0gICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShvdGhl
ci5iZWdpbigpLCBvdGhlci5lbmQoKSwgYmVnaW4oKSk7CisgICAgICAgIFR5cGVPcGVyYXRpb25z
Ojp1bmluaXRpYWxpemVkQ29weShnZXRQdHIob3RoZXIuYmVnaW4oKSksIGdldFB0cihvdGhlci5l
bmQoKSksIGdldFB0cihiZWdpbigpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgpAQCAtNzcxLDggKzc3
Nyw4IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPiYgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhCiAgICAgICAgIEFTU0VSVChiZWdpbigpKTsK
ICAgICB9CiAgICAgCi0gICAgc3RkOjpjb3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmJlZ2luKCkg
KyBzaXplKCksIGJlZ2luKCkpOwotICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29w
eShvdGhlci5iZWdpbigpICsgc2l6ZSgpLCBvdGhlci5lbmQoKSwgZW5kKCkpOworICAgIHN0ZDo6
Y29weShnZXRQdHIob3RoZXIuYmVnaW4oKSksIGdldFB0cihvdGhlci5iZWdpbigpICsgc2l6ZSgp
KSwgZ2V0UHRyKGJlZ2luKCkpKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENv
cHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkgKyBzaXplKCkpLCBnZXRQdHIob3RoZXIuZW5kKCkpLCBn
ZXRQdHIoZW5kKCkpKTsKICAgICBtX3NpemUgPSBvdGhlci5zaXplKCk7CiAKICAgICByZXR1cm4g
KnRoaXM7CkBAIC03OTYsOSArODAyLDkgQEAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXI+JiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGEKICAgICAg
ICAgcmVzZXJ2ZUNhcGFjaXR5KG90aGVyLnNpemUoKSk7CiAgICAgICAgIEFTU0VSVChiZWdpbigp
KTsKICAgICB9Ci0gICAgCi0gICAgc3RkOjpjb3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmJlZ2lu
KCkgKyBzaXplKCksIGJlZ2luKCkpOwotICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVk
Q29weShvdGhlci5iZWdpbigpICsgc2l6ZSgpLCBvdGhlci5lbmQoKSwgZW5kKCkpOworCisgICAg
c3RkOjpjb3B5KGdldFB0cihvdGhlci5iZWdpbigpKSwgZ2V0UHRyKG90aGVyLmJlZ2luKCkgKyBz
aXplKCkpLCBnZXRQdHIoYmVnaW4oKSkpOworICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxp
emVkQ29weShnZXRQdHIob3RoZXIuYmVnaW4oKSArIHNpemUoKSksIGdldFB0cihvdGhlci5lbmQo
KSksIGdldFB0cihlbmQoKSkpOwogICAgIG1fc2l6ZSA9IG90aGVyLnNpemUoKTsKIAogICAgIHJl
dHVybiAqdGhpczsKQEAgLTg1OCw4ICs4NjQsOCBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6ZmlsbChjb25zdCBUJiB2YWwsIHNpemVfdCBuZXdTaQog
ICAgICAgICBBU1NFUlQoYmVnaW4oKSk7CiAgICAgfQogICAgIAotICAgIHN0ZDo6ZmlsbChiZWdp
bigpLCBlbmQoKSwgdmFsKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZEZpbGwo
ZW5kKCksIGJlZ2luKCkgKyBuZXdTaXplLCB2YWwpOworICAgIHN0ZDo6ZmlsbChnZXRQdHIoYmVn
aW4oKSksIGdldFB0cihlbmQoKSksIHZhbCk7CisgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlh
bGl6ZWRGaWxsKGdldFB0cihlbmQoKSksIGdldFB0cihiZWdpbigpKSArIG5ld1NpemUsIHZhbCk7
CiAgICAgbV9zaXplID0gbmV3U2l6ZTsKIH0KIApAQCAtODgwLDEzICs4ODYsMTMgQEAgdm9pZCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmV4cGFuZENhcGFjaXR5
KHNpemVfdCBuZXdNaW5DYXAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogVCogVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNp
dHksIFQqIHB0cikKIHsKLSAgICBpZiAocHRyIDwgYmVnaW4oKSB8fCBwdHIgPj0gZW5kKCkpIHsK
KyAgICBpZiAocHRyIDwgZ2V0UHRyKGJlZ2luKCkpIHx8IHB0ciA+PSBnZXRQdHIoZW5kKCkpKSB7
CiAgICAgICAgIGV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5KTsKICAgICAgICAgcmV0dXJu
IHB0cjsKICAgICB9Ci0gICAgc2l6ZV90IGluZGV4ID0gcHRyIC0gYmVnaW4oKTsKKyAgICBzaXpl
X3QgaW5kZXggPSBwdHIgLSBnZXRQdHIoYmVnaW4oKSk7CiAgICAgZXhwYW5kQ2FwYWNpdHkobmV3
TWluQ2FwYWNpdHkpOwotICAgIHJldHVybiBiZWdpbigpICsgaW5kZXg7CisgICAgcmV0dXJuIGdl
dFB0cihiZWdpbigpKSArIGluZGV4OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KQEAgLTg5OCwxNSArOTA0
LDE1IEBAIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojp0
cnlFeHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIGNvbnN0IFQqIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6dHJ5RXhwYW5kQ2FwYWNp
dHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBjb25zdCBUKiBwdHIpCiB7Ci0gICAgaWYgKHB0ciA8
IGJlZ2luKCkgfHwgcHRyID49IGVuZCgpKSB7CisgICAgaWYgKHB0ciA8IGdldFB0cihiZWdpbigp
KSB8fCBwdHIgPj0gZ2V0UHRyKGVuZCgpKSkgewogICAgICAgICBpZiAoIXRyeUV4cGFuZENhcGFj
aXR5KG5ld01pbkNhcGFjaXR5KSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1
cm4gcHRyOwogICAgIH0KLSAgICBzaXplX3QgaW5kZXggPSBwdHIgLSBiZWdpbigpOworICAgIHNp
emVfdCBpbmRleCA9IHB0ciAtIGdldFB0cihiZWdpbigpKTsKICAgICBpZiAoIXRyeUV4cGFuZENh
cGFjaXR5KG5ld01pbkNhcGFjaXR5KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGJl
Z2luKCkgKyBpbmRleDsKKyAgICByZXR1cm4gZ2V0UHRyKGJlZ2luKCkpICsgaW5kZXg7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgpAQCAtOTIwLDEyICs5MjYsMTIgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXI+CiBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlcj46OnJlc2l6ZShzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAoc2l6ZSA8PSBtX3Np
emUpCi0gICAgICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChiZWdpbigpICsgc2l6ZSwgZW5k
KCkpOworICAgICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QoZ2V0UHRyKGJlZ2luKCkpICsg
c2l6ZSwgZ2V0UHRyKGVuZCgpKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChzaXplID4gY2Fw
YWNpdHkoKSkKICAgICAgICAgICAgIGV4cGFuZENhcGFjaXR5KHNpemUpOwogICAgICAgICBpZiAo
YmVnaW4oKSkKLSAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0aWFsaXplKGVuZCgpLCBi
ZWdpbigpICsgc2l6ZSk7CisgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShn
ZXRQdHIoZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkgKyBzaXplKTsKICAgICB9CiAgICAgCiAgICAg
bV9zaXplID0gc2l6ZTsKQEAgLTk0Miw3ICs5NDgsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIHZvaWQgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpzaHJpbmsoc2l6ZV90IHNp
emUpCiB7CiAgICAgQVNTRVJUKHNpemUgPD0gbV9zaXplKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6
ZGVzdHJ1Y3QoYmVnaW4oKSArIHNpemUsIGVuZCgpKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6ZGVz
dHJ1Y3QoZ2V0UHRyKGJlZ2luKCkpICsgc2l6ZSwgZ2V0UHRyKGVuZCgpKSk7CiAgICAgbV9zaXpl
ID0gc2l6ZTsKIH0KIApAQCAtOTUzLDcgKzk1OSw3IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojpncm93KHNpemVfdCBzaXplKQogICAgIGlmIChzaXpl
ID4gY2FwYWNpdHkoKSkKICAgICAgICAgZXhwYW5kQ2FwYWNpdHkoc2l6ZSk7CiAgICAgaWYgKGJl
Z2luKCkpCi0gICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0aWFsaXplKGVuZCgpLCBiZWdpbigp
ICsgc2l6ZSk7CisgICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0aWFsaXplKGdldFB0cihlbmQo
KSksIGdldFB0cihiZWdpbigpKSArIHNpemUpOwogICAgIG1fc2l6ZSA9IHNpemU7CiB9CiAKQEAg
LTk2MiwxMSArOTY4LDExIEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXI+OjpyZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjCiB7CiAgICAgaWYgKG5l
d0NhcGFjaXR5IDw9IGNhcGFjaXR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBUKiBvbGRCdWZm
ZXIgPSBiZWdpbigpOwotICAgIFQqIG9sZEVuZCA9IGVuZCgpOworICAgIFQqIG9sZEJ1ZmZlciA9
IGdldFB0cihiZWdpbigpKTsKKyAgICBUKiBvbGRFbmQgPSBnZXRQdHIoZW5kKCkpOwogICAgIEJh
c2U6OmFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKICAgICBBU1NFUlQoYmVnaW4oKSk7Ci0g
ICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOworICAg
IFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBnZXRQdHIoYmVnaW4oKSkp
OwogICAgIEJhc2U6OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKIH0KIApAQCAtOTc1LDEy
ICs5ODEsMTIgQEAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
cj46OnRyeVJlc2VydmVDYXBhY2l0eShzaXplX3QgbmV3Q2EKIHsKICAgICBpZiAobmV3Q2FwYWNp
dHkgPD0gY2FwYWNpdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgVCogb2xkQnVmZmVy
ID0gYmVnaW4oKTsKLSAgICBUKiBvbGRFbmQgPSBlbmQoKTsKKyAgICBUKiBvbGRCdWZmZXIgPSBn
ZXRQdHIoYmVnaW4oKSk7CisgICAgVCogb2xkRW5kID0gZ2V0UHRyKGVuZCgpKTsKICAgICBpZiAo
IUJhc2U6OnRyeUFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIEFTU0VSVChiZWdpbigpKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShvbGRC
dWZmZXIsIG9sZEVuZCwgYmVnaW4oKSk7CisgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVm
ZmVyLCBvbGRFbmQsIGdldFB0cihiZWdpbigpKSk7CiAgICAgQmFzZTo6ZGVhbGxvY2F0ZUJ1ZmZl
cihvbGRCdWZmZXIpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTAwMywxNyArMTAwOSwxNyBA
QCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6c2hyaW5r
Q2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaQogICAgIGlmIChuZXdDYXBhY2l0eSA8IHNpemUoKSkg
CiAgICAgICAgIHNocmluayhuZXdDYXBhY2l0eSk7CiAKLSAgICBUKiBvbGRCdWZmZXIgPSBiZWdp
bigpOworICAgIFQqIG9sZEJ1ZmZlciA9IGdldFB0cihiZWdpbigpKTsKICAgICBpZiAobmV3Q2Fw
YWNpdHkgPiAwKSB7CiAgICAgICAgIGlmIChCYXNlOjpzaG91bGRSZWFsbG9jYXRlQnVmZmVyKG5l
d0NhcGFjaXR5KSkgewogICAgICAgICAgICAgQmFzZTo6cmVhbGxvY2F0ZUJ1ZmZlcihuZXdDYXBh
Y2l0eSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBUKiBvbGRF
bmQgPSBlbmQoKTsKKyAgICAgICAgVCogb2xkRW5kID0gZ2V0UHRyKGVuZCgpKTsKICAgICAgICAg
QmFzZTo6YWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpOwotICAgICAgICBpZiAoYmVnaW4oKSAh
PSBvbGRCdWZmZXIpCi0gICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShvbGRCdWZmZXIs
IG9sZEVuZCwgYmVnaW4oKSk7CisgICAgICAgIGlmIChnZXRQdHIoYmVnaW4oKSkgIT0gb2xkQnVm
ZmVyKQorICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQs
IGdldFB0cihiZWdpbigpKSk7CiAgICAgfQogCiAgICAgQmFzZTo6ZGVhbGxvY2F0ZUJ1ZmZlcihv
bGRCdWZmZXIpOwpAQCAtMTAzMywxMSArMTAzOSwxNyBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kKGNvbnN0IFUqIGRhdGEsIHNpemVfdCBk
YQogICAgIH0KICAgICBpZiAobmV3U2l6ZSA8IG1fc2l6ZSkKICAgICAgICAgQ1JBU0goKTsKLSAg
ICBUKiBkZXN0ID0gZW5kKCk7CisgICAgVCogZGVzdCA9IGdldFB0cihlbmQoKSk7CiAgICAgVmVj
dG9yQ29waWVyPHN0ZDo6aXNfdHJpdmlhbDxUPjo6dmFsdWUsIFU+Ojp1bmluaXRpYWxpemVkQ29w
eShkYXRhLCAmZGF0YVtkYXRhU2l6ZV0sIGRlc3QpOwogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiB9
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyPgordm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlcj46OmFwcGVuZChjb25zdF9pdGVyYXRvciBkYXRhLCBzaXplX3QgZGF0YVNpemUpCit7
CisgICAgYXBwZW5kKGdldFB0cihkYXRhKSwgZGF0YVNpemUpOworfQorCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4g
dGVtcGxhdGU8dHlwZW5hbWUgVT4KIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXI+Ojp0cnlBcHBlbmQoY29uc3QgVSogZGF0YSwgc2l6ZV90IGRhdGFTaXplKQog
ewpAQCAtMTA1MCw3ICsxMDYyLDcgQEAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlcj46OnRyeUFwcGVuZChjb25zdCBVKiBkYXRhLCBzaXplX3QKICAgICB9CiAg
ICAgaWYgKG5ld1NpemUgPCBtX3NpemUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBUKiBk
ZXN0ID0gZW5kKCk7CisgICAgVCogZGVzdCA9IGdldFB0cihlbmQoKSk7CiAgICAgVmVjdG9yQ29w
aWVyPHN0ZDo6aXNfdHJpdmlhbDxUPjo6dmFsdWUsIFU+Ojp1bmluaXRpYWxpemVkQ29weShkYXRh
LCAmZGF0YVtkYXRhU2l6ZV0sIGRlc3QpOwogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC0xMDYwLDcgKzEwNzIsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dAog
QUxXQVlTX0lOTElORSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyPjo6YXBwZW5kKFUmJiB2YWx1ZSkKIHsKICAgICBpZiAoc2l6ZSgpICE9IGNhcGFjaXR5KCkp
IHsKLSAgICAgICAgbmV3IChOb3ROdWxsLCBlbmQoKSkgVChzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKKyAgICAgICAgbmV3IChOb3ROdWxsLCBnZXRQdHIoZW5kKCkpKSBUKHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOwogICAgICAgICArK21fc2l6ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTEwNzcsNyArMTA4OSw3IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXI+OjphcHBlbmRTbG93Q2FzZShVJiYgdmFsdWUpCiAgICAgcHRyID0gZXhwYW5kQ2Fw
YWNpdHkoc2l6ZSgpICsgMSwgcHRyKTsKICAgICBBU1NFUlQoYmVnaW4oKSk7CiAKLSAgICBuZXcg
KE5vdE51bGwsIGVuZCgpKSBUKHN0ZDo6Zm9yd2FyZDxVPigqcHRyKSk7CisgICAgbmV3IChOb3RO
dWxsLCBnZXRQdHIoZW5kKCkpKSBUKHN0ZDo6Zm9yd2FyZDxVPigqcHRyKSk7CiAgICAgKyttX3Np
emU7CiB9CiAKQEAgLTEwOTAsMTQgKzExMDIsMTQgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojp1bmNoZWNrZWRBcHBlbmQoVSYmIHZhbHUK
ICAgICBBU1NFUlQoc2l6ZSgpIDwgY2FwYWNpdHkoKSk7CiAKICAgICBhdXRvIHB0ciA9IHN0ZDo6
YWRkcmVzc29mKHZhbHVlKTsKLSAgICBuZXcgKE5vdE51bGwsIGVuZCgpKSBUKHN0ZDo6Zm9yd2Fy
ZDxVPigqcHRyKSk7CisgICAgbmV3IChOb3ROdWxsLCBnZXRQdHIoZW5kKCkpKSBUKHN0ZDo6Zm9y
d2FyZDxVPigqcHRyKSk7CiAgICAgKyttX3NpemU7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiB0ZW1wbGF0
ZTx0eXBlbmFtZSBVLCBzaXplX3Qgb3RoZXJDYXBhY2l0eT4KIGlubGluZSB2b2lkIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kVmVjdG9yKGNvbnN0IFZl
Y3RvcjxVLCBvdGhlckNhcGFjaXR5PiYgdmFsKQogewotICAgIGFwcGVuZCh2YWwuYmVnaW4oKSwg
dmFsLnNpemUoKSk7CisgICAgYXBwZW5kKGdldFB0cih2YWwuYmVnaW4oKSksIHZhbC5zaXplKCkp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KQEAgLTExMTEsOCArMTEy
Myw4IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojpp
bnNlcnQoc2l6ZV90IHBvc2l0aW9uLCBjb25zdCBVCiAgICAgfQogICAgIGlmIChuZXdTaXplIDwg
bV9zaXplKQogICAgICAgICBDUkFTSCgpOwotICAgIFQqIHNwb3QgPSBiZWdpbigpICsgcG9zaXRp
b247Ci0gICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90LCBlbmQoKSwgc3Bv
dCArIGRhdGFTaXplKTsKKyAgICBUKiBzcG90ID0gZ2V0UHRyKGJlZ2luKCkpICsgcG9zaXRpb247
CisgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90LCBnZXRQdHIoZW5kKCkp
LCBzcG90ICsgZGF0YVNpemUpOwogICAgIFZlY3RvckNvcGllcjxzdGQ6OmlzX3RyaXZpYWw8VD46
OnZhbHVlLCBVPjo6dW5pbml0aWFsaXplZENvcHkoZGF0YSwgJmRhdGFbZGF0YVNpemVdLCBzcG90
KTsKICAgICBtX3NpemUgPSBuZXdTaXplOwogfQpAQCAtMTEyOCw4ICsxMTQwLDggQEAgaW5saW5l
IHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnQo
c2l6ZV90IHBvc2l0aW9uLAogICAgICAgICBBU1NFUlQoYmVnaW4oKSk7CiAgICAgfQogCi0gICAg
VCogc3BvdCA9IGJlZ2luKCkgKyBwb3NpdGlvbjsKLSAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92
ZXJsYXBwaW5nKHNwb3QsIGVuZCgpLCBzcG90ICsgMSk7CisgICAgVCogc3BvdCA9IGdldFB0cihi
ZWdpbigpKSArIHBvc2l0aW9uOworICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmco
c3BvdCwgZ2V0UHRyKGVuZCgpKSwgc3BvdCArIDEpOwogICAgIG5ldyAoTm90TnVsbCwgc3BvdCkg
VChzdGQ6OmZvcndhcmQ8VT4oKnB0cikpOwogICAgICsrbV9zaXplOwogfQpAQCAtMTEzNywxNiAr
MTE0OSwxNiBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlcj46Omluc2VydChzaXplX3QgcG9zaXRpb24sCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8
dHlwZW5hbWUgVSwgc2l6ZV90IGM+CiBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlcj46Omluc2VydFZlY3RvcihzaXplX3QgcG9zaXRpb24sIGNvbnN0
IFZlY3RvcjxVLCBjPiYgdmFsKQogewotICAgIGluc2VydChwb3NpdGlvbiwgdmFsLmJlZ2luKCks
IHZhbC5zaXplKCkpOworICAgIGluc2VydChwb3NpdGlvbiwgZ2V0UHRyKHZhbC5iZWdpbigpKSwg
dmFsLnNpemUoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUoc2l6ZV90IHBvc2l0aW9uKQog
ewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0aW9uIDwgc2l6ZSgp
KTsKLSAgICBUKiBzcG90ID0gYmVnaW4oKSArIHBvc2l0aW9uOworICAgIFQqIHNwb3QgPSBnZXRQ
dHIoYmVnaW4oKSkgKyBwb3NpdGlvbjsKICAgICBzcG90LT5+VCgpOwotICAgIFR5cGVPcGVyYXRp
b25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCArIDEsIGVuZCgpLCBzcG90KTsKKyAgICBUeXBlT3Bl
cmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QgKyAxLCBnZXRQdHIoZW5kKCkpLCBzcG90KTsK
ICAgICAtLW1fc2l6ZTsKIH0KIApAQCAtMTE1NSwxMCArMTE2NywxMCBAQCBpbmxpbmUgdm9pZCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnJlbW92ZShzaXplX3Qg
cG9zaXRpb24sCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRp
b24gPD0gc2l6ZSgpKTsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihwb3Np
dGlvbiArIGxlbmd0aCA8PSBzaXplKCkpOwotICAgIFQqIGJlZ2luU3BvdCA9IGJlZ2luKCkgKyBw
b3NpdGlvbjsKKyAgICBUKiBiZWdpblNwb3QgPSBnZXRQdHIoYmVnaW4oKSkgKyBwb3NpdGlvbjsK
ICAgICBUKiBlbmRTcG90ID0gYmVnaW5TcG90ICsgbGVuZ3RoOwogICAgIFR5cGVPcGVyYXRpb25z
OjpkZXN0cnVjdChiZWdpblNwb3QsIGVuZFNwb3QpOyAKLSAgICBUeXBlT3BlcmF0aW9uczo6bW92
ZU92ZXJsYXBwaW5nKGVuZFNwb3QsIGVuZCgpLCBiZWdpblNwb3QpOworICAgIFR5cGVPcGVyYXRp
b25zOjptb3ZlT3ZlcmxhcHBpbmcoZW5kU3BvdCwgZ2V0UHRyKGVuZCgpKSwgYmVnaW5TcG90KTsK
ICAgICBtX3NpemUgLT0gbGVuZ3RoOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCAwY2YwOWUxZjVlYzk4YTg1
MTQ0Y2M3MjJkMmE2Y2M0YWU0ZjkzODk4Li4zZWU4MDY4YTNhNzZhNGE0M2FjNjQzMjMyNzcyNjQz
YzE2MTQ5ZDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTE0MzcsOCArMTQzNyw4IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIGlmIChidWZmZXIuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotICAgICAgICBjb25zdCB1aW50OF90KiBwdHIgPSBidWZmZXIuYmVnaW4oKTsKLSAgICAg
ICAgY29uc3QgdWludDhfdCogZW5kID0gYnVmZmVyLmVuZCgpOworICAgICAgICBjb25zdCB1aW50
OF90KiBwdHIgPSBnZXRQdHIoYnVmZmVyLmJlZ2luKCkpOworICAgICAgICBjb25zdCB1aW50OF90
KiBlbmQgPSBnZXRQdHIoYnVmZmVyLmVuZCgpKTsKICAgICAgICAgdWludDMyX3QgdmVyc2lvbjsK
ICAgICAgICAgaWYgKCFyZWFkTGl0dGxlRW5kaWFuKHB0ciwgZW5kLCB2ZXJzaW9uKSB8fCB2ZXJz
aW9uID4gQ3VycmVudFZlcnNpb24pCiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggODQ1MjViZWY4ZTIzYWIzMjg5
MmE0ODBhZDEyZDYwZjA4NDY5MjJhMC4uNDI3YjZkMjFiNDk3ZTc2NjA3YmUwM2Q2MzIyYTFmYzI2
OGM2OWJiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMjA3
MywxMSArMjA3MywxMSBAQCBpbmxpbmUgYm9vbCBTZWFyY2hCdWZmZXI6OmlzQmFkTWF0Y2goY29u
c3QgVUNoYXIqIG1hdGNoLCBzaXplX3QgbWF0Y2hMZW5ndGgpIGNvbgogICAgIC8vIGNyZWF0aW5n
IGEgbmV3IG9uZSBlYWNoIHRpbWUuCiAgICAgbm9ybWFsaXplQ2hhcmFjdGVycyhtYXRjaCwgbWF0
Y2hMZW5ndGgsIG1fbm9ybWFsaXplZE1hdGNoKTsKIAotICAgIGNvbnN0IFVDaGFyKiBhID0gbV9u
b3JtYWxpemVkVGFyZ2V0LmJlZ2luKCk7Ci0gICAgY29uc3QgVUNoYXIqIGFFbmQgPSBtX25vcm1h
bGl6ZWRUYXJnZXQuZW5kKCk7CisgICAgY29uc3QgVUNoYXIqIGEgPSBnZXRQdHIobV9ub3JtYWxp
emVkVGFyZ2V0LmJlZ2luKCkpOworICAgIGNvbnN0IFVDaGFyKiBhRW5kID0gZ2V0UHRyKG1fbm9y
bWFsaXplZFRhcmdldC5lbmQoKSk7CiAKLSAgICBjb25zdCBVQ2hhciogYiA9IG1fbm9ybWFsaXpl
ZE1hdGNoLmJlZ2luKCk7Ci0gICAgY29uc3QgVUNoYXIqIGJFbmQgPSBtX25vcm1hbGl6ZWRNYXRj
aC5lbmQoKTsKKyAgICBjb25zdCBVQ2hhciogYiA9IGdldFB0cihtX25vcm1hbGl6ZWRNYXRjaC5i
ZWdpbigpKTsKKyAgICBjb25zdCBVQ2hhciogYkVuZCA9IGdldFB0cihtX25vcm1hbGl6ZWRNYXRj
aC5lbmQoKSk7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAvLyBTa2lwIHJ1bnMgb2Yg
bm9uLWthbmEtbGV0dGVyIGNoYXJhY3RlcnMuIFRoaXMgaXMgbmVjZXNzYXJ5IHNvIHdlIGNhbgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJv
bGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXIubW0KaW5kZXggMDA5OGM3NjMxM2Y0Y2M2NjBlOTY4YTkwZDNlOTM4YThiMWJiYzlkZS4uZjVl
ZjkzZDFhYTQ4NjI5NGI2ZGZhYjQxN2EyMmIxYjI2YmMxOWM4YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCkBAIC01NTUs
NyArNTU1LDcgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpidWlsZFNlbGVjdGlv
bkhpZ2hsaWdodCgpCiAKICAgICAgICAgaWYgKCFjZ1JlY3RzLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgQ0dSZWN0IHZpc2libGVSZWN0ID0gbWFpbkZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRS
ZWN0KCk7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0
ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5
bGVBbmREaXJlY3Rpb24obnVsbHB0ciwgY2dSZWN0cy5iZWdpbigpLCBjZ1JlY3RzLnNpemUoKSwg
dmlzaWJsZVJlY3QsIERESGlnaGxpZ2h0Tm9PdXRsaW5lV2l0aEFycm93LCBZRVMsIE5TV3JpdGlu
Z0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxEREhp
Z2hsaWdodFJlZj4gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJl
Y3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCBnZXRQdHIoY2dS
ZWN0cy5iZWdpbigpKSwgY2dSZWN0cy5zaXplKCksIHZpc2libGVSZWN0LCBEREhpZ2hsaWdodE5v
T3V0bGluZVdpdGhBcnJvdywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVT
KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5ld1BvdGVudGlhbEhpZ2hsaWdodHMuYWRk
KEhpZ2hsaWdodDo6Y3JlYXRlRm9yU2VsZWN0aW9uKCp0aGlzLCBkZEhpZ2hsaWdodCwgc2VsZWN0
aW9uUmFuZ2UpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwCmluZGV4IGQxYjkyYjdiNjA5YjQ1MTk5
Yzg0YTQ2YWVlOWZkYjZjNGY3Y2ZlYzUuLjUwM2IwZThkOWJiZjI5MDZjZTczYmViZWJhMDFiZDYw
M2VjNzk5OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Nl
Z21lbnRlZEZvbnREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TZWdtZW50ZWRGb250RGF0YS5jcHAKQEAgLTM5LDggKzM5LDggQEAgU2VnbWVudGVkRm9udERh
dGE6On5TZWdtZW50ZWRGb250RGF0YSgpCiAKIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBTZWdtZW50
ZWRGb250RGF0YTo6Zm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAogewotICAg
IFZlY3RvcjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYW5nZXMuZW5k
KCk7Ci0gICAgZm9yIChWZWN0b3I8Rm9udERhdGFSYW5nZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgYXV0byBlbmQgPSBtX3Jh
bmdlcy5lbmQoKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgaWYgKGl0LT5mcm9tKCkgPD0gYyAmJiBpdC0+dG8oKSA+PSBj
KQogICAgICAgICAgICAgcmV0dXJuIGl0LT5mb250RGF0YSgpLmdldCgpOwogICAgIH0KQEAgLTQ5
LDggKzQ5LDggQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIFNlZ21lbnRlZEZvbnREYXRhOjpmb250
RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0CiAKIGJvb2wgU2VnbWVudGVkRm9udERh
dGE6OmNvbnRhaW5zQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKIHsKLSAgICBWZWN0b3I8Rm9u
dERhdGFSYW5nZT46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwotICAgIGZv
ciAoVmVjdG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIGF1dG8gZW5kID0gbV9yYW5nZXMuZW5kKCk7
CisgICAgZm9yIChhdXRvIGl0ID0gbV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CiAgICAgICAgIGlmIChjID49IGl0LT5mcm9tKCkgJiYgYyA8PSBpdC0+dG8oKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTc2LDggKzc2LDggQEAgYm9vbCBTZWdtZW50ZWRG
b250RGF0YTo6aXNDdXN0b21Gb250KCkgY29uc3QKIAogYm9vbCBTZWdtZW50ZWRGb250RGF0YTo6
aXNMb2FkaW5nKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8Rm9udERhdGFSYW5nZT46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPEZvbnREYXRhUmFu
Z2U+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgIGF1dG8gZW5kID0gbV9yYW5nZXMuZW5kKCk7CisgICAgZm9yIChhdXRvIGl0ID0g
bV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGlmIChpdC0+Zm9u
dERhdGEoKS0+aXNMb2FkaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1h
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5j
cHAKaW5kZXggMDUxODcxYWM2YzYwZmI2NDM5MjgzMGFhYzZhZDM4NTJhOTRkNDQ3Ni4uZGQwOTYz
YTc1MDFhZDJlZTA2MzFhNWUxNmQ3OTUxMTExMjIzOWQ1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcApAQCAtMjAwLDcgKzIw
MCw3IEBAIGJvb2wgY29udmVydFdPRkZUb1NmbnQoU2hhcmVkQnVmZmVyKiB3b2ZmLCBWZWN0b3I8
Y2hhcj4mIHNmbnQpCiAgICAgICAgICAgICB1TG9uZ2YgZGVzdExlbiA9IHRhYmxlT3JpZ0xlbmd0
aDsKICAgICAgICAgICAgIGlmICghc2ZudC50cnlSZXNlcnZlQ2FwYWNpdHkoc2ZudC5zaXplKCkg
KyB0YWJsZU9yaWdMZW5ndGgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIEJ5dGVmKiBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxCeXRlZio+KHNmbnQuZW5kKCkp
OworICAgICAgICAgICAgQnl0ZWYqIGRlc3QgPSByZWludGVycHJldF9jYXN0PEJ5dGVmKj4oZ2V0
UHRyKHNmbnQuZW5kKCkpKTsKICAgICAgICAgICAgIHNmbnQuZ3JvdyhzZm50LnNpemUoKSArIHRh
YmxlT3JpZ0xlbmd0aCk7CiAgICAgICAgICAgICBpZiAodW5jb21wcmVzcyhkZXN0LCAmZGVzdExl
biwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBCeXRlZio+KHdvZmYtPmRhdGEoKSArIHRhYmxlT2Zm
c2V0KSwgdGFibGVDb21wTGVuZ3RoKSAhPSBaX09LKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggMWQ2NTFhZmUw
MThjZWM0ZDYwYWQ1NDY5NWNmODVhOTczZDNmOWNhNC4uNzU3MDM2YTYwMzU1YWJkNDE5ZTVhOWJi
MzZiYzk4NjQ3ZGQ0M2VhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAK
QEAgLTE1NzcsOCArMTU3Nyw4IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEZpbGxMYXllcnMoY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IENvbG9yJiBjLCBjb25zCiAgICAgICAgIGNv
bnRleHQtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoMSk7CiAgICAgfQogCi0gICAgVmVjdG9yPGNv
bnN0IEZpbGxMYXllcio+Ojpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHRvcExheWVyID0gbGF5ZXJz
LnJlbmQoKTsKLSAgICBmb3IgKFZlY3Rvcjxjb25zdCBGaWxsTGF5ZXIqPjo6Y29uc3RfcmV2ZXJz
ZV9pdGVyYXRvciBpdCA9IGxheWVycy5yYmVnaW4oKTsgaXQgIT0gdG9wTGF5ZXI7ICsraXQpCisg
ICAgYXV0byB0b3BMYXllciA9IGxheWVycy5yZW5kKCk7CisgICAgZm9yIChhdXRvIGl0ID0gbGF5
ZXJzLnJiZWdpbigpOyBpdCAhPSB0b3BMYXllcjsgKytpdCkKICAgICAgICAgcGFpbnRGaWxsTGF5
ZXIocGFpbnRJbmZvLCBjLCAqaXQsIHJlY3QsIGJsZWVkQXZvaWRhbmNlLCBvcCwgYmFja2dyb3Vu
ZE9iamVjdCwgYmFzZUJnQ29sb3JVc2FnZSk7CiAKICAgICBpZiAoc2hvdWxkRHJhd0JhY2tncm91
bmRJblNlcGFyYXRlQnVmZmVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHAKaW5kZXggMGYzNjJhZWZhMWJhZjYxMTE0
ZWY0YjQ0ODE3NjcwN2IyYmUyNTMwYy4uZDU5NGRkODk3NzliZjc4MjMzNTZmMzIwOGRjN2Y3YzJj
Y2ExMjU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRS
ZXNvbHZlZFBvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
R3JpZFJlc29sdmVkUG9zaXRpb24uY3BwCkBAIC0yOTUsNyArMjk1LDcgQEAgc3RhdGljIGlubGlu
ZSBzaXplX3QgZmlyc3ROYW1lZEdyaWRMaW5lQmVmb3JlUG9zaXRpb24oc2l6ZV90IHBvc2l0aW9u
LCBjb25zdCBWZWMKICAgICAvLyBhbHJlYWR5IGNvbnZlcnRlZCB0byBhbiBpbmRleCBpbiBvdXIg
Z3JpZCByZXByZXNlbnRhdGlvbiAoaWUgb25lIHdhcyByZW1vdmVkIGZyb20gdGhlIGdyaWQgbGlu
ZSB0byBhY2NvdW50IGZvcgogICAgIC8vIHRoZSBzaWRlKS4KICAgICBzaXplX3QgZmlyc3RMaW5l
QmVmb3JlUG9zaXRpb25JbmRleCA9IDA7Ci0gICAgY29uc3Qgc2l6ZV90KiBmaXJzdExpbmVCZWZv
cmVQb3NpdGlvbiA9IHN0ZDo6bG93ZXJfYm91bmQoZ3JpZExpbmVzLmJlZ2luKCksIGdyaWRMaW5l
cy5lbmQoKSwgcG9zaXRpb24pOworICAgIGF1dG8gZmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gPSBz
dGQ6Omxvd2VyX2JvdW5kKGdyaWRMaW5lcy5iZWdpbigpLCBncmlkTGluZXMuZW5kKCksIHBvc2l0
aW9uKTsKICAgICBpZiAoZmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gIT0gZ3JpZExpbmVzLmVuZCgp
KSB7CiAgICAgICAgIGlmICgqZmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gPiBwb3NpdGlvbiAmJiBm
aXJzdExpbmVCZWZvcmVQb3NpdGlvbiAhPSBncmlkTGluZXMuYmVnaW4oKSkKICAgICAgICAgICAg
IC0tZmlyc3RMaW5lQmVmb3JlUG9zaXRpb247CkBAIC0zMTcsNyArMzE3LDcgQEAgc3RkOjp1bmlx
dWVfcHRyPEdyaWRTcGFuPiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZVJvd1N0YXJ0Q29s
dW1uU3RhcnROYW1lZEcKIHN0ZDo6dW5pcXVlX3B0cjxHcmlkU3Bhbj4gR3JpZFJlc29sdmVkUG9z
aXRpb246OnJlc29sdmVSb3dFbmRDb2x1bW5FbmROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0
T3Bwb3NpdGVQb3NpdGlvbihjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgcmVzb2x2ZWRPcHBv
c2l0ZVBvc2l0aW9uLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8
c2l6ZV90PiYgZ3JpZExpbmVzKQogewogICAgIHNpemVfdCBmaXJzdExpbmVBZnRlck9wcG9zaXRl
UG9zaXRpb25JbmRleCA9IGdyaWRMaW5lcy5zaXplKCkgLSAxOwotICAgIGNvbnN0IHNpemVfdCog
Zmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uID0gc3RkOjp1cHBlcl9ib3VuZChncmlkTGlu
ZXMuYmVnaW4oKSwgZ3JpZExpbmVzLmVuZCgpLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pOwor
ICAgIGF1dG8gZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uID0gc3RkOjp1cHBlcl9ib3Vu
ZChncmlkTGluZXMuYmVnaW4oKSwgZ3JpZExpbmVzLmVuZCgpLCByZXNvbHZlZE9wcG9zaXRlUG9z
aXRpb24pOwogICAgIGlmIChmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb24gIT0gZ3JpZExp
bmVzLmVuZCgpKQogICAgICAgICBmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb25JbmRleCA9
IGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbiAtIGdyaWRMaW5lcy5iZWdpbigpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcAppbmRleCBjMzNmZmI3N2I2ZDhmOTk1N2Ix
MjZmMWJmMzkxN2E4NTdmZGZiNTBlLi5hMGJmNTAxOTFiNmFiOTU4MTYxOGQ5NTNjMDg5MGQyMTJl
YjdiMzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAKQEAgLTI1MiwzMSAr
MjUyLDMxIEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQga2VybmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRH
bHlwaHMoY29uc3QgU1ZHS2VybmluZ01hcCYga2VybmluCiB7CiAgICAgaWYgKCFnMS5pc0VtcHR5
KCkgJiYga2VybmluZ01hcC5nbHlwaE1hcC5jb250YWlucyhnMSkpIHsKICAgICAgICAgU1ZHS2Vy
bmluZ1ZlY3Rvcioga2VybmluZ1ZlY3RvciA9IGtlcm5pbmdNYXAuZ2x5cGhNYXAuZ2V0KGcxKTsK
LSAgICAgICAgU1ZHS2VybmluZ1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBrZXJuaW5nVmVj
dG9yLT5lbmQoKSAtIDE7Ci0gICAgICAgIGNvbnN0IFNWR0tlcm5pbmdWZWN0b3I6OmNvbnN0X2l0
ZXJhdG9yIGJlZ2luID0ga2VybmluZ1ZlY3Rvci0+YmVnaW4oKSAtIDE7Ci0gICAgICAgIGZvciAo
OyBpdCAhPSBiZWdpbjsgLS1pdCkgewotICAgICAgICAgICAgaWYgKG1hdGNoZXModTIsIGcyLCAq
aXQpKQotICAgICAgICAgICAgICAgIHJldHVybiBpdC0+a2VybmluZzsKKyAgICAgICAgc2l6ZV90
IGl0ID0ga2VybmluZ1ZlY3Rvci0+c2l6ZSgpOworICAgICAgICB3aGlsZSAoaXQtLSA+IDApIHsK
KyAgICAgICAgICAgIGF1dG8mIHZhbHVlID0ga2VybmluZ1ZlY3Rvci0+YXQoaXQpOworICAgICAg
ICAgICAgaWYgKG1hdGNoZXModTIsIGcyLCB2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLmtlcm5pbmc7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoIXUxLmlzRW1wdHko
KSkgewogICAgICAgICBpZiAoa2VybmluZ01hcC51bmljb2RlTWFwLmNvbnRhaW5zKHUxKSkgewog
ICAgICAgICAgICAgU1ZHS2VybmluZ1ZlY3Rvcioga2VybmluZ1ZlY3RvciA9IGtlcm5pbmdNYXAu
dW5pY29kZU1hcC5nZXQodTEpOwotICAgICAgICAgICAgU1ZHS2VybmluZ1ZlY3Rvcjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBrZXJuaW5nVmVjdG9yLT5lbmQoKSAtIDE7Ci0gICAgICAgICAgICBjb25z
dCBTVkdLZXJuaW5nVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbiA9IGtlcm5pbmdWZWN0b3It
PmJlZ2luKCkgLSAxOwotICAgICAgICAgICAgZm9yICg7IGl0ICE9IGJlZ2luOyAtLWl0KSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKG1hdGNoZXModTIsIGcyLCAqaXQpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gaXQtPmtlcm5pbmc7CisgICAgICAgICAgICBzaXplX3QgaXQgPSBrZXJuaW5n
VmVjdG9yLT5zaXplKCk7CisgICAgICAgICAgICB3aGlsZSAoaXQtLSA+IDApIHsKKyAgICAgICAg
ICAgICAgICBhdXRvJiB2YWx1ZSA9IGtlcm5pbmdWZWN0b3ItPmF0KGl0KTsKKyAgICAgICAgICAg
ICAgICBpZiAobWF0Y2hlcyh1MiwgZzIsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHZhbHVlLmtlcm5pbmc7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoIWtlcm5pbmdNYXAua2VybmluZ1VuaWNvZGVSYW5nZU1hcC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIFZlY3RvcjxTVkdLZXJuaW5nUGFpcj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0ga2Vybmlu
Z01hcC5rZXJuaW5nVW5pY29kZVJhbmdlTWFwLmVuZCgpIC0gMTsKLSAgICAgICAgICAgIGNvbnN0
IFZlY3RvcjxTVkdLZXJuaW5nUGFpcj46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0ga2VybmluZ01h
cC5rZXJuaW5nVW5pY29kZVJhbmdlTWFwLmJlZ2luKCkgLSAxOwotICAgICAgICAgICAgZm9yICg7
IGl0ICE9IGJlZ2luOyAtLWl0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoZXModTEsIHUy
LCBnMiwgKml0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXJuaW5nOworICAg
ICAgICAgICAgc2l6ZV90IGl0ID0ga2VybmluZ01hcC5rZXJuaW5nVW5pY29kZVJhbmdlTWFwLnNp
emUoKTsKKyAgICAgICAgICAgIHdoaWxlIChpdC0tID4gMCkgeworICAgICAgICAgICAgICAgIGF1
dG8mIHZhbHVlID0ga2VybmluZ01hcC5rZXJuaW5nVW5pY29kZVJhbmdlTWFwW2l0XTsKKyAgICAg
ICAgICAgICAgICBpZiAobWF0Y2hlcyh1MSwgdTIsIGcyLCB2YWx1ZSkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB2YWx1ZS5rZXJuaW5nOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaAppbmRleCA5ZDlkMmEyYjIz
YzYwMGZlYmI1MzQwY2JjZGQxYjYxZGRjM2I5ZjE1Li5iOTk5NTU0OTQzOWFjOTY0YWIzZTY3YTMw
ZjBkODlkOGMzNThhY2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5
dGVTdHJlYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaApA
QCAtNjAsOCArNjAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmQodW5zaWduZWQgY2hhciBi
eXRlKSB7IG1fZGF0YS5hcHBlbmQoYnl0ZSk7IH0KICAgICB2b2lkIGFwcGVuZChTVkdQYXRoQnl0
ZVN0cmVhbSogb3RoZXIpCiAgICAgewotICAgICAgICBmb3IgKERhdGFJdGVyYXRvciBpdCA9IG90
aGVyLT5iZWdpbigpOyBpdCAhPSBvdGhlci0+ZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBhcHBl
bmQoKml0KTsKKyAgICAgICAgZm9yIChhdXRvJiBieXRlIDogKm90aGVyKQorICAgICAgICAgICAg
YXBwZW5kKGJ5dGUpOwogICAgIH0KICAgICB2b2lkIGNsZWFyKCkgeyBtX2RhdGEuY2xlYXIoKTsg
fQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2RhdGEuc2l6ZSgpOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmggYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvWFBhdGhOb2RlU2V0LmgKaW5kZXggM2Q4OWI4ZDUwODdhODZjZmVhZmZjMDE0MGI2
OTQ3NjJjMDk1ZGRkZi4uZGFmMmI5M2Q1MWI1YWY2YjczNGY1ZjlhNzY1NDEzNjllMDQxNGEyYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9kZVNldC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQuaApAQCAtNjQsOCArNjQsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgICAgICB2b2lkIG1hcmtTdWJ0cmVlc0Rpc2pvaW50KGJvb2wgZGlz
am9pbnQpIHsgbV9zdWJ0cmVlc0FyZURpc2pvaW50ID0gZGlzam9pbnQ7IH0KICAgICAgICAgICAg
IGJvb2wgc3VidHJlZXNBcmVEaXNqb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VidHJlZXNBcmVE
aXNqb2ludCB8fCBtX25vZGVzLnNpemUoKSA8IDI7IH0KIAotICAgICAgICAgICAgY29uc3QgUmVm
UHRyPE5vZGU+KiBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuYmVnaW4oKTsgfQotICAg
ICAgICAgICAgY29uc3QgUmVmUHRyPE5vZGU+KiBlbmQoKSBjb25zdCB7IHJldHVybiBtX25vZGVz
LmVuZCgpOyB9CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+Pjo6aXRlcmF0
b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX25vZGVzLmJlZ2luKCk7IH0KKyAgICAgICAgICAg
IGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4+OjppdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBtX25vZGVzLmVuZCgpOyB9CiAKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIHZvaWQg
dHJhdmVyc2FsU29ydCgpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241862</attachid>
            <date>2014-11-19 08:52:50 -0800</date>
            <delta_ts>2014-11-19 10:51:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138821-20141119085301.patch</filename>
            <type>text/plain</type>
            <size>67077</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2MjM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NzhmYzA2Y2U1NDc3MzgwMTJlMTkzN2JjZGZiYmVkYjRkNjg0MWQyLi4yNTAxNjRiMTE3ZWExZTE5
MGEzYzdkNTg1MTFlNzMzYTk0NDkyM2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNiBAQAorMjAxNC0xMS0xNyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3Rp
bGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGVyZSBhcmUgYSBmZXcgdXNlcyBvZiBiZWdpbigpL2VuZCgp
IHRoYXQgZXhwbGljaXRseSByZXF1aXJlIHBvaW50ZXJzLAorICAgICAgICBzbyB3ZSB1c2UgZ2V0
UHRyKCkgdG8gZXh0cmFjdCB0aGUgdW5kZXJseWluZyBwb2ludGVyIGdlbmVyaWNhbGx5LgorCisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRDb21wbGV4UG9wU2NvcGVzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVt
cCk6CisgICAgICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6RlRM
OjptZE5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkQ2FsbCk6CisgICAgICAgICogbGxp
bnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBlcmZvcm1Bc3Nl
cnRpb25zKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlNjb3Bl
OjpTY29wZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwOgorICAgICAgICAo
SlNDOjpQcm9maWxlTm9kZTo6ZGVidWdQcmludFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3Rvcik6
CisgICAgICAgICogdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2Zp
bGVUcmVlTm9kZTo6ZHVtcEludGVybmFsKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgor
ICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjptYXRjaENoYXJhY3RlckNsYXNzKToK
KwogMjAxNC0xMS0xNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAg
QWRkIHByaW50aW5nIGZ1bmN0aW9uYWxpdHkgaW4gSklUdGVkIGNvZGUgZm9yIGRlYnVnZ2luZyBw
dXJwb3Nlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9D
aGFuZ2VMb2cKaW5kZXggYzU2MmExM2FhN2ZhZGZmMmE4YTcwMTViNWQyNDczODY4MjkyYWI5NC4u
MDNkNDI4MWNlYWRiYzRjZmM0ODJiYWY3YmM3ZTQwOWQwOWMzNjZmNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5
OCBAQAorMjAxNC0xMS0xNyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisgICAg
ICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3RpbGwgcmVj
ZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgYSBuZXcgSW5kZXhlZEl0ZXJhdG9yIHN0cnVjdCB0byBXVEYgdGhh
dCB3cmFwcyBhCisgICAgICAgIFZlY3RvciB0eXBlIGFuZCBpbmRleCB0byBwcm92aWRlIHBvaW50
ZXIgbGlrZSBzZW1hbnRpY3MKKyAgICAgICAgd2hpbGUgc3RpbGwgcGVyZm9ybWluZyBydW50aW1l
IGJvdW5kcyBjaGVja2luZywgZXZlbiBpbgorICAgICAgICByZWxlYXNlIGJ1aWxkcy4gV2Ugc3Rv
cmUgYSBzaW1wbGUgaW5kZXggaW50byB0aGUgdmVjdG9yCisgICAgICAgIHdoaWNoIG1lYW5zIHRo
YXQgdGhpcyBpdGVyYXRvciBhbGxvd3MgdmVjdG9yIHJlc2l6aW5nCisgICAgICAgIGR1cmluZyBp
dGVyYXRpb24uIElmIHRoZSB2ZWN0b3IgaXMgcmVzaXplZCBzdWNoIHRoYXQgdGhlCisgICAgICAg
IGl0ZXJhdG9yIGlzIG91dCBvZiBib3VuZHMsIHRoZW4gYW55IGF0dGVtcHQgdG8gZGVyZWZlcmVu
Y2UKKyAgICAgICAgdGhlIGl0ZXJhdG9yIHdpbGwgY3Jhc2ggc2FmZWx5LiBBbnkgb3RoZXIgZXJy
b3JzLCBpbmNsdWRpbmcKKyAgICAgICAgb3ZlcmZsb3dzLCBhbmQgb3ZlciBleHRlbmRpbmcgdGhl
IGl0ZXJhdG9yIHdpbGwgbGlrZXdpc2UKKyAgICAgICAgY3Jhc2guCisKKyAgICAgICAgRm9yIHRo
ZSBwdXJwb3NlIG9mIHJldGFpbmluZyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudAorICAgICAgICBi
ZWhhdmlvdXIsIHRoZSBpdGVyYXRvciBjYW4gYmUgbW92ZWQgdG8gbV9pbmRleCA9PSBzaXplKCkK
KyAgICAgICAgYXMgdGhhdCBpcyB0aGUgc3RhbmRhcmQgImVuZCIgdGVybWluYXRvciBmb3IgdGhl
c2UgdHlwZXMuCisgICAgICAgIEF0dGVtcHRpbmcgdG8gZGVyZWZlcmVuY2UgYXQgdGhhdCBwb2lu
dCB3aWxsIHN0aWxsIGNyYXNoCisgICAgICAgIHJhdGhlciB0aGFuIHBlcmZvcm0gYW4gdW5zYWZl
IG1lbW9yeSBvcGVyYXRpb24uCisKKyAgICAgICAgSW4gb3JkZXIgdG8gbWFpbnRhaW4gdGhlIHZh
bGlkaXR5IG9mIGFsbCB0aGUgYm91bmRzIGNoZWNraW5nLAorICAgICAgICB3ZSBwZXJmb3JtIGZ1
bGwgaW50ZWdlciByYW5nZSBjaGVja2luZyBwcmlvciB0byBhbnkgbXV0YXRpb24KKyAgICAgICAg
b2YgdGhlIGl0ZXJhdG9yIGxvY2F0aW9uLiBJZiB3ZSBkZXRlY3QgYW4gYXJpdGhtZXRpYyBvdmVy
ZmxvdworICAgICAgICB3ZSB3aWxsIGNyYXNoIHJhdGhlciB0aGFuIGF0dGVtcHRpbmcgdG8gY2Fy
cnkgb24uCisKKyAgICAgICAgQnkgbmVjZXNzaXR5IHRoZXJlIGFyZSBtYW55IG92ZXJyaWRlcyBm
b3Igb3BlcmF0b3IgKyBhbmQgLSBhcworICAgICAgICB3ZSBvdGhlcndpc2UgaGl0IG1hbnkgZGlm
ZmVyZW50IHR5cGUgcHJvbW90aW9uIGFtYmlndWl0aWVzIHdoZW4KKyAgICAgICAgcGVyZm9ybWlu
ZyBhcml0aG1ldGljIHdpdGggaXRlcmF0b3JzLiBUaGVzZSBhbWJpZ3VpdGllcyBhcmUgYWxzbwor
ICAgICAgICBkaWZmZXJlbnQgZm9yIDMyLSB2cy4gNjQtYml0LCBzbyBkdXBsaWNhdGluZyB0aGUg
ZnVuY3Rpb25zCisgICAgICAgIGFuZCB0aGVuIGZvcndhcmRpbmcgdG8gdGhlIGNvcmUgaW1wbGVt
ZW50YXRpb25zIHRoYXQgcGVyZm9ybWVkCisgICAgICAgIHRoZSBib3VuZHMgY2hlY2tpbmcgYW5k
IG11dGF0aW9uIHNlZW1lZCBsaWtlIHRoZSByaWdodCBjYWxsLgorCisgICAgICAgICogV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0luZGV4ZWRJdGVyYXRvci5o
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpJbmRleGVkSXRlcmF0b3Ip
OgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yLT4pOgorICAgICAgICAo
V1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXVEY6OkluZGV4ZWRJ
dGVyYXRvcjo6Z2V0KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcisr
KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvci0tKToKKyAgICAgICAg
KFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKToKKyAg
ICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcis9KToKKyAgICAgICAgKFdURjo6
SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvci09KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJh
dG9yOjpvcGVyYXRvcispOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9y
LSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3I9KToKKyAgICAgICAg
KFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6SW5kZXhl
ZEl0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpv
cGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPD0pOgor
ICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPik6CisgICAgICAgIChXVEY6
OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3I+PSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVy
YXRvcjo6b3BlcmF0b3IgY29uc3RfaXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRl
cmF0b3I6OmlzU2FmZVRvQ29tcGFyZSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6
dW5zYWZlR2V0KToKKyAgICAgICAgKFdURjo6Z2V0UHRyKToKKyAgICAgICAgKFdURjo6b3BlcmF0
b3ItKToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9y
IT0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcjw9KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I+
PSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPCk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPik6
CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvclNlbGVjdG9yOjptYWtlSXRlcmF0b3IpOgor
ICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3JTZWxlY3Rvcjo6bWFrZUNvbnN0SXRlcmF0b3Ip
OgorICAgICAgICAqIHd0Zi9SZWZDb3VudGVkQXJyYXkuaDoKKyAgICAgICAgKFdURjo6UmVmQ291
bnRlZEFycmF5OjpSZWZDb3VudGVkQXJyYXkpOgorICAgICAgICAqIHd0Zi9WZWN0b3IuaDoKKyAg
ICAgICAgKFdURjo6VmVjdG9yOjpWZWN0b3IpOgorICAgICAgICAoV1RGOjpWZWN0b3I6OmJlZ2lu
KToKKyAgICAgICAgKFdURjo6VmVjdG9yOjplbmQpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hh
bmRsZXI+OjpWZWN0b3IpOgorICAgICAgICAoV1RGOjo9KToKKyAgICAgICAgKFdURjo6T3ZlcmZs
b3dIYW5kbGVyPjo6ZmlsbCk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OmV4cGFu
ZENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6dHJ5RXhwYW5kQ2Fw
YWNpdHkpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpyZXNpemUpOgorICAgICAg
ICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpzaHJpbmspOgorICAgICAgICAoV1RGOjpPdmVyZmxv
d0hhbmRsZXI+Ojpncm93KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6cmVzZXJ2
ZUNhcGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6dHJ5UmVzZXJ2ZUNh
cGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6c2hyaW5rQ2FwYWNpdHkp
OgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmQpOgorICAgICAgICAoV1RG
OjpPdmVyZmxvd0hhbmRsZXI+Ojp0cnlBcHBlbmQpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hh
bmRsZXI+OjphcHBlbmRTbG93Q2FzZSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46
OnVuY2hlY2tlZEFwcGVuZCk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OmFwcGVu
ZFZlY3Rvcik6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46Omluc2VydCk6CisgICAg
ICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46Omluc2VydFZlY3Rvcik6CisgICAgICAgIChXVEY6
Ok92ZXJmbG93SGFuZGxlcj46OnJlbW92ZSk6CisKIDIwMTQtMTEtMTcgIEFuZGVycyBDYXJsc3Nv
biAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggV1RGIGJ1aWxkIHdpdGggbmV3
ZXIgdmVyc2lvbnMgb2YgY2xhbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzYwZmFjZDhlMjM3MTU3YmY2M2Ix
NjhhZDc3OTAzMWQyZTZkYmFjMy4uZDViMjdkZjQ0NzI3YWZhOWIzMjg0MTdkYzkzZTM1OThjNjQw
MzczOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE0LTExLTE3ICBPbGl2ZXIgSHVu
dCAgPG9saXZlckBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBzdXJlIHJhbmdlIGJhc2VkIGl0
ZXJhdGlvbiBvZiBWZWN0b3I8PiBzdGlsbCByZWNlaXZlcyBib3VuZHMgY2hlY2tpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODgyMQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXJlIGFyZSBhIGZl
dyB1c2VzIG9mIGJlZ2luKCkvZW5kKCkgdGhhdCBleHBsaWNpdGx5IHJlcXVpcmUgcG9pbnRlcnMs
CisgICAgICAgIHNvIHdlIHVzZSBnZXRQdHIoKSB0byBleHRyYWN0IHRoZSB1bmRlcmx5aW5nIHBv
aW50ZXIgZ2VuZXJpY2FsbHkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2Vy
aWFsaXplU3RyaW5nKToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTZWFyY2hCdWZmZXI6OmlzQmFkTWF0Y2gpOgorICAgICAgICAqIHBhZ2Uv
bWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2VnbWVudGVkRm9udERhdGE6OmZvbnREYXRhRm9yQ2hhcmFjdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNlZ21lbnRlZEZvbnREYXRhOjpjb250YWluc0NoYXJhY3Rlcik6CisgICAgICAg
IChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6aXNMb2FkaW5nKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252
ZXJ0V09GRlRvU2ZudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBhaW50RmlsbExheWVycyk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmZpcnN0TmFtZWRHcmlkTGluZUJlZm9yZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
aWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlUm93RW5kQ29sdW1uRW5kTmFtZWRHcmlkTGluZVBv
c2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24pOgorICAgICAgICAqIHN2Zy9TVkdGb250RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjprZXJuaW5nRm9yUGFpck9mU3RyaW5nc0FuZEds
eXBocyk6CisgICAgICAgICogc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmg6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoQnl0ZVN0cmVhbTo6YXBwZW5kKToKKyAgICAgICAgKiB4bWwvWFBhdGhOb2Rl
U2V0Lmg6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6Tm9kZVNldDo6YmVnaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6Ok5vZGVTZXQ6OmVuZCk6CisKIDIwMTQtMTEtMTcgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgaW5pdGlhbCBsYXlvdXQgdGVz
dGluZyBjb3ZlcmFnZSBmb3IgdGltZXIgdGhyb3R0bGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKaW5kZXggNmMyOTNjY2Y5
OGQ1NjczMjZkYzQyZmFiZDVkZmE0MWQyM2Y2YzJjMS4uNjM1YWNkMmNiYjM4ZTc4YTYwODNiNjFl
NThkYmExYjQ3Y2I3OWU5YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC0yMzQsOSArMjM0LDkgQEAgdm9pZCBVbmxp
bmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAg
ICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc3ltYm9sVGFibGUpOwogICAgIGZvciAo
RnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yOjppdGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5tX2Z1
bmN0aW9uRGVjbHMuYmVnaW4oKSwgZW5kID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkRlY2xzLmVu
ZCgpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQocHRyKTsKKyAg
ICAgICAgdmlzaXRvci5hcHBlbmQoV1RGOjpnZXRQdHIocHRyKSk7CiAgICAgZm9yIChGdW5jdGlv
bkV4cHJlc3Npb25WZWN0b3I6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25F
eHBycy5iZWdpbigpLCBlbmQgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRXhwcnMuZW5kKCk7IHB0
ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICB2aXNpdG9yLmFwcGVuZChwdHIpOworICAgICAgICB2
aXNpdG9yLmFwcGVuZChXVEY6OmdldFB0cihwdHIpKTsKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
cyh0aGlzT2JqZWN0LT5tX2NvbnN0YW50UmVnaXN0ZXJzLmRhdGEoKSwgdGhpc09iamVjdC0+bV9j
b25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwogICAgIGlmICh0aGlzT2JqZWN0LT5tX3JhcmVEYXRh
KSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBlbmQgPSB0aGlzT2JqZWN0LT5tX3JhcmVE
YXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOyBpICE9IGVuZDsgaSsrKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRl
eCBiMjEzNGVmN2E1MDliNzM2OWUzZDJjMDU2NjJjMjFiODQ3MDdmZjVjLi44ZmQ4YTBlMmI2NGY2
MDE0ZjYzMzE1M2VkMTk4MDc5NWUxYmM1ZGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMjI2Myw4
ICsyMjYzLDggQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMo
UmVnaXN0ZXJJRCogc2NvcGUsIENvbnRyb2xGbG93Q29udGUKICAgICAgICAgICAgIGludCB0b3BT
Y29wZUluZGV4ID0gLTE7CiAgICAgICAgICAgICBpbnQgYm90dG9tU2NvcGVJbmRleCA9IC0xOwog
ICAgICAgICAgICAgaWYgKGZsaXBTY29wZXMpIHsKLSAgICAgICAgICAgICAgICB0b3BTY29wZUlu
ZGV4ID0gdG9wU2NvcGUgLSBtX3Njb3BlQ29udGV4dFN0YWNrLmJlZ2luKCk7Ci0gICAgICAgICAg
ICAgICAgYm90dG9tU2NvcGVJbmRleCA9IGJvdHRvbVNjb3BlIC0gbV9zY29wZUNvbnRleHRTdGFj
ay5iZWdpbigpOworICAgICAgICAgICAgICAgIHRvcFNjb3BlSW5kZXggPSB0b3BTY29wZSAtIGdl
dFB0cihtX3Njb3BlQ29udGV4dFN0YWNrLmJlZ2luKCkpOworICAgICAgICAgICAgICAgIGJvdHRv
bVNjb3BlSW5kZXggPSBib3R0b21TY29wZSAtIGdldFB0cihtX3Njb3BlQ29udGV4dFN0YWNrLmJl
Z2luKCkpOwogICAgICAgICAgICAgICAgIHNhdmVkU2NvcGVDb250ZXh0U3RhY2sgPSBtX3Njb3Bl
Q29udGV4dFN0YWNrOwogICAgICAgICAgICAgICAgIG1fc2NvcGVDb250ZXh0U3RhY2suc2hyaW5r
KGZpbmFsbHlDb250ZXh0LnNjb3BlQ29udGV4dFN0YWNrU2l6ZSk7CiAgICAgICAgICAgICB9CkBA
IC0yMzA4LDcgKzIzMDgsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleFBv
cFNjb3BlcyhSZWdpc3RlcklEKiBzY29wZSwgQ29udHJvbEZsb3dDb250ZQogICAgICAgICAgICAg
aWYgKGZsaXBTY29wZXMpIHsKICAgICAgICAgICAgICAgICBtX3Njb3BlQ29udGV4dFN0YWNrID0g
c2F2ZWRTY29wZUNvbnRleHRTdGFjazsKICAgICAgICAgICAgICAgICB0b3BTY29wZSA9ICZtX3Nj
b3BlQ29udGV4dFN0YWNrW3RvcFNjb3BlSW5kZXhdOyAvLyBhc3NlcnQgaXQncyB3aXRoaW4gYm91
bmRzCi0gICAgICAgICAgICAgICAgYm90dG9tU2NvcGUgPSBtX3Njb3BlQ29udGV4dFN0YWNrLmJl
Z2luKCkgKyBib3R0b21TY29wZUluZGV4OyAvLyBkb24ndCBhc3NlcnQsIHNpbmNlIGl0IHRoZSBp
bmRleCBtaWdodCBiZSAtMS4KKyAgICAgICAgICAgICAgICBib3R0b21TY29wZSA9IFdURjo6Z2V0
UHRyKG1fc2NvcGVDb250ZXh0U3RhY2suYmVnaW4oKSkgKyBib3R0b21TY29wZUluZGV4OyAvLyBk
b24ndCBhc3NlcnQsIHNpbmNlIGl0IHRoZSBpbmRleCBtaWdodCBiZSAtMS4KICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmIChmbGlwU3dpdGNoZXMpCiAgICAgICAgICAgICAgICAgbV9zd2l0
Y2hDb250ZXh0U3RhY2sgPSBzYXZlZFN3aXRjaENvbnRleHRTdGFjazsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggZjA3MjRkZjQ3MDM5
NDliMzBkMjRlMzZhYTgyZTc3OGE1Y2I5YmY3My4uODIwOWY1ZmEwMjBkZTYzNTI2YjhmZmI2N2Fl
NmZhNWYxMWQ1ZjE1MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKQEAgLTQ5MTAsNyArNDkxMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRTd2l0Y2hJbnRKdW1wKAogICAgIGFkZEJyYW5jaCgKICAgICAgICAgbV9qaXQuYnJhbmNo
MzIoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWUsIEltbTMyKHRhYmxlLmN0aU9mZnNl
dHMuc2l6ZSgpKSksCiAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKLSAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW1QdHIodGFibGUuY3RpT2Zmc2V0cy5iZWdpbigpKSwgc2NyYXRjaCk7
CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGdldFB0cih0YWJsZS5jdGlPZmZzZXRzLmJl
Z2luKCkpKSwgc2NyYXRjaCk7CiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QmFzZUlu
ZGV4KHNjcmF0Y2gsIHZhbHVlLCBKSVRDb21waWxlcjo6dGltZXNQdHIoKSksIHNjcmF0Y2gpOwog
ICAgIG1faml0Lmp1bXAoc2NyYXRjaCk7CiAgICAgZGF0YS0+ZGlkVXNlSnVtcFRhYmxlID0gdHJ1
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9u
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgKaW5kZXgg
ZmM3Y2IxYjI1NDMyNjk0YWFlZThmYmYzMTUzZTZlMDhhODMzMmYzOS4uYzdiMWRhOTY5OWU0MDdi
NWQ2ODM5ZTAxZGM3ZTYzZjEwY2Y4Mzc2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExBYmJyZXZpYXRpb25zLmgKQEAgLTEyMCw3ICsxMjAsNyBAQCBzdGF0aWMgaW5saW5lIExW
YWx1ZSBtZFN0cmluZyhMQ29udGV4dCBjb250ZXh0LCBjb25zdCBjaGFyKiBzdHJpbmcsIHVuc2ln
bmVkIGxlbgogc3RhdGljIGlubGluZSBMVmFsdWUgbWRTdHJpbmcoTENvbnRleHQgY29udGV4dCwg
Y29uc3QgY2hhciogc3RyaW5nKSB7IHJldHVybiBtZFN0cmluZyhjb250ZXh0LCBzdHJpbmcsIHN0
ZDo6c3RybGVuKHN0cmluZykpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRl
eHQgY29udGV4dCwgTFZhbHVlKiBhcmdzLCB1bnNpZ25lZCBudW1BcmdzKSB7IHJldHVybiBsbHZt
LT5NRE5vZGVJbkNvbnRleHQoY29udGV4dCwgYXJncywgbnVtQXJncyk7IH0KIHRlbXBsYXRlPHR5
cGVuYW1lIFZlY3RvclR5cGU+Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQg
Y29udGV4dCwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKSB7IHJldHVybiBtZE5vZGUoY29udGV4
dCwgY29uc3RfY2FzdDxMVmFsdWUqPih2ZWN0b3IuYmVnaW4oKSksIHZlY3Rvci5zaXplKCkpOyB9
CitzdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwgY29uc3QgVmVj
dG9yVHlwZSYgdmVjdG9yKSB7IHJldHVybiBtZE5vZGUoY29udGV4dCwgY29uc3RfY2FzdDxMVmFs
dWUqPihnZXRQdHIodmVjdG9yLmJlZ2luKCkpKSwgdmVjdG9yLnNpemUoKSk7IH0KIHN0YXRpYyBp
bmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0KSB7IHJldHVybiBtZE5vZGUoY29u
dGV4dCwgMCwgMCk7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4dCBjb250
ZXh0LCBMVmFsdWUgYXJnMSkgeyByZXR1cm4gbWROb2RlKGNvbnRleHQsICZhcmcxLCAxKTsgfQog
c3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQsIExWYWx1ZSBhcmcx
LCBMVmFsdWUgYXJnMikKQEAgLTI4OCw3ICsyODgsNyBAQCBzdGF0aWMgaW5saW5lIExWYWx1ZSBi
dWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBMVmFsdWUq
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPgogaW5saW5lIExWYWx1ZSBidWlsZENhbGwo
TEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0
b3IpCiB7Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgdmVjdG9yLmJl
Z2luKCksIHZlY3Rvci5zaXplKCkpOworICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVu
Y3Rpb24sIGdldFB0cih2ZWN0b3IuYmVnaW4oKSksIHZlY3Rvci5zaXplKCkpOwogfQogc3RhdGlj
IGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlv
bikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKaW5kZXggNjkx
OWFlYWIwMGExYjI1YzQ3NWJiZjlkZDI1YzY4OGYwYWE1OGE3Mi4uMzFiYTRiMGM4MGI2M2U5YTc3
YzgxNWI0N2QxZTVkM2ZhYTFmNTI3MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50RGF0YS5jcHAKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRp
b25zKFZNJiB2bSkKICAgICBWZWN0b3I8aW50PiB0ZXN0VmVjdG9yOwogICAgIHRlc3RWZWN0b3Iu
cmVzaXplKDQyKTsKICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnQzMl90Kj4oJnRlc3RWZWN0
b3IpW3NpemVvZih2b2lkKikvc2l6ZW9mKHVpbnQzMl90KSArIDFdID09IDQyKTsKLSAgICBBU1NF
UlQoYml0d2lzZV9jYXN0PGludCoqPigmdGVzdFZlY3RvcilbMF0gPT0gdGVzdFZlY3Rvci5iZWdp
bigpKTsKKyAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGludCoqPigmdGVzdFZlY3RvcilbMF0gPT0g
Z2V0UHRyKHRlc3RWZWN0b3IuYmVnaW4oKSkpOwogI2VuZGlmCiAKICAgICBBU1NFUlQoU3RyaW5n
SW1wbDo6c19oYXNoRmxhZzhCaXRCdWZmZXIgPT0gMzIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmgKaW5kZXggNDUyZjcwNDZmMzAyMmQzODgxMDlhZWJkYzg0Mzg0ZTFhYTIyZmZh
MS4uMDFmY2NkYjdlMzhhYzVhNjAyMmM2OGM5N2I4ZDhlYjNiMGNlYzE4MCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCkBAIC0xMzAsMTEgKzEzMCw4IEBAIHN0cnVjdCBTY29w
ZSB7CiAgICAgewogICAgICAgICBpZiAocmhzLm1fbGFiZWxzKSB7CiAgICAgICAgICAgICBtX2xh
YmVscyA9IGFkb3B0UHRyKG5ldyBMYWJlbFN0YWNrKTsKLQotICAgICAgICAgICAgdHlwZWRlZiBM
YWJlbFN0YWNrOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKLSAgICAgICAgICAgIGl0ZXJhdG9y
IGVuZCA9IHJocy5tX2xhYmVscy0+ZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0
ID0gcmhzLm1fbGFiZWxzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAg
ICAgbV9sYWJlbHMtPmFwcGVuZChTY29wZUxhYmVsSW5mbyhpdC0+bV9pZGVudCwgaXQtPm1faXNM
b29wKSk7CisgICAgICAgICAgICBmb3IgKGF1dG8gbGFiZWwgOiAqcmhzLm1fbGFiZWxzKQorICAg
ICAgICAgICAgICAgIG1fbGFiZWxzLT5hcHBlbmQoU2NvcGVMYWJlbEluZm8obGFiZWwubV9pZGVu
dCwgbGFiZWwubV9pc0xvb3ApKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVOb2RlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlTm9kZS5jcHAKaW5kZXggMjY1Y2RkZDBlZjc4ODMz
ZjYxYjU3MTExOWNmZDc3MjBmZDQ2ZDE1Ny4uNjkyYzdiODZmM2MzYTI1NDIxYmIxMDA4MmRmNmUw
OGRlYjQwZjBmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVOb2RlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZU5vZGUuY3BwCkBAIC0xNTQsNiArMTU0LDcgQEAgdm9pZCBQcm9maWxlTm9kZTo6ZGVidWdQcmlu
dFJlY3Vyc2l2ZWx5KGludCBpbmRlbnRMZXZlbCwgY29uc3QgUHJvZmlsZVN1YnRyZWVEYXQKICAg
ICAvLyBQcmludCBjaGlsZHJlbidzIG5hbWVzIGFuZCBpbmZvcm1hdGlvbgogICAgIGZvciAoU3Rh
Y2tJdGVyYXRvciBjdXJyZW50Q2hpbGQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGN1cnJlbnRDaGls
ZCAhPSBtX2NoaWxkcmVuLmVuZCgpOyArK2N1cnJlbnRDaGlsZCkKICAgICAgICAgKCpjdXJyZW50
Q2hpbGQpLT5kZWJ1Z1ByaW50UmVjdXJzaXZlbHkoaW5kZW50TGV2ZWwsIGRhdGEpOworCiB9CiAK
IC8vIHByaW50IHRoZSBwcm9maWxlZCBkYXRhIGluIGEgZm9ybWF0IHRoYXQgbWF0Y2hlcyB0aGUg
dG9vbCBzYW1wbGUncyBvdXRwdXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuY3BwCmluZGV4IGNjNjMwMjE3ZGY3ZmQyNWFkZTRjNGJiMzk4NTc0ZDY3ZDVhNzQ1NjkuLmJj
Yzg4MzU5NjEyMjNmY2M1ZWFhNmY5M2ZhOWQ3MWY3NzIxMzFjZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCkBAIC0zNTIsNyArMzUyLDcgQEAgYm9vbCBKU0Fy
cmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
bmV3TGVuZ3RoLCBib28KICAgICAgICAgICAgIC8vIHByb3BlcnRpZXMsIHNvIHdlIGhhdmUgdG8g
cGVyZm9ybSBkZWxldGlvbiB3aXRoIGNhdXRpb24sIGlmIG5vdCB3ZSBjYW4KICAgICAgICAgICAg
IC8vIGRlbGV0ZSB2YWx1ZXMgaW4gYW55IG9yZGVyLgogICAgICAgICAgICAgaWYgKG1hcC0+c3Bh
cnNlTW9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgcXNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLnNp
emUoKSwgc2l6ZW9mKHVuc2lnbmVkKSwgY29tcGFyZUtleXNGb3JRU29ydCk7CisgICAgICAgICAg
ICAgICAgcXNvcnQoV1RGOjpnZXRQdHIoa2V5cy5iZWdpbigpKSwga2V5cy5zaXplKCksIHNpemVv
Zih1bnNpZ25lZCksIGNvbXBhcmVLZXlzRm9yUVNvcnQpOwogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGkgPSBrZXlzLnNpemUoKTsKICAgICAgICAgICAgICAgICB3aGlsZSAoaSkgewogICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGtleXNbLS1pXTsKQEAgLTExOTEsMTMgKzEx
OTEsMTMgQEAgdm9pZCBKU0FycmF5Ojpzb3J0Q29tcGFjdGVkVmVjdG9yKEV4ZWNTdGF0ZSogZXhl
YywgQ29udGlndW91c0RhdGE8U3RvcmFnZVR5cGU+IGQKICAgICAgICAgCiAjaWYgSEFWRShNRVJH
RVNPUlQpCiAgICAgaWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcykKLSAgICAgICAgcXNvcnQo
dmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBj
b21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBxc29ydChXVEY6OmdldFB0cih2
YWx1ZXMuYmVnaW4oKSksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBj
b21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogICAgIGVsc2UKLSAgICAgICAgbWVyZ2Vzb3J0
KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwg
Y29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICAgICAgbWVyZ2Vzb3J0KFdURjo6Z2V0
UHRyKHZhbHVlcy5iZWdpbigpKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFp
ciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CiAjZWxzZQogICAgIC8vIEZJWE1FOiBU
aGUgcXNvcnQgbGlicmFyeSBmdW5jdGlvbiBpcyBsaWtlbHkgdG8gbm90IGJlIGEgc3RhYmxlIHNv
cnQuCiAgICAgLy8gRUNNQVNjcmlwdC0yNjIgZG9lcyBub3Qgc3BlY2lmeSBhIHN0YWJsZSBzb3J0
LCBidXQgaW4gcHJhY3RpY2UsIGJyb3dzZXJzIHBlcmZvcm0gYSBzdGFibGUgc29ydC4KLSAgICBx
c29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFp
ciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAgcXNvcnQoV1RGOjpnZXRQdHIo
dmFsdWVzLmJlZ2luKCkpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwg
Y29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICNlbmRpZgogICAgIAogICAgIC8vIElmIHRo
ZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZl
Y3RvciBzdG9yYWdlLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1By
b2ZpbGVUcmVlTm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVl
Tm9kZS5oCmluZGV4IDg4ZDU3ZjNkZDRlNzk3NjlkMWQwNmMzYTg1OTEwMWI1NTVjNmE4M2YuLjkz
OTY0OTZkMDZjMTY0NGM3NWI5YjU0NWI1OGFmYzZkOGI4MWRhYTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgKQEAgLTg2LDcgKzg2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgVmVjdG9yPE1hcEVudHJ5Kj4gZW50cmllczsKICAgICAgICAgZm9yIChN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi0+YmVnaW4oKTsgaXQgIT0gbV9jaGlsZHJlbi0+
ZW5kKCk7ICsraXQpCiAgICAgICAgICAgICBlbnRyaWVzLmFwcGVuZCgmKml0KTsKLSAgICAgICAg
cXNvcnQoZW50cmllcy5iZWdpbigpLCBlbnRyaWVzLnNpemUoKSwgc2l6ZW9mKE1hcEVudHJ5Kiks
IGNvbXBhcmVFbnRyaWVzKTsKKyAgICAgICAgcXNvcnQoV1RGOjpnZXRQdHIoZW50cmllcy5iZWdp
bigpKSwgZW50cmllcy5zaXplKCksIHNpemVvZihNYXBFbnRyeSopLCBjb21wYXJlRW50cmllcyk7
CiAKICAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBjaGlsZHJlbiBpbiBzYW1wbGUtZnJlcXVl
bmN5IG9yZGVyLgogICAgICAgICBmb3IgKHNpemVfdCBlID0gMDsgZSA8IGVudHJpZXMuc2l6ZSgp
OyArK2UpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKaW5kZXggZTNhM2E5
MzJjZTdlZDczOGYxOTg2YjJiZjJiNzQzZTA0MjNhM2IyNS4uZDI2OGU1OWUxMmJiNGU4MzY4Y2Uz
OTIwNjg3OGFjODE2MmUzYjQyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lh
cnIvWWFyckpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5j
cHAKQEAgLTIyMyw3ICsyMjMsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNy
b0Fzc2VtYmxlciB7CiAgICAgICAgIGlmIChjaGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUoKSkgewog
ICAgICAgICAgICAgdW5zaWduZWQgbWF0Y2hJbmRleCA9IDA7CiAgICAgICAgICAgICBKdW1wTGlz
dCBmYWlsdXJlczsKLSAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3NSYW5nZShjaGFyYWN0
ZXIsIGZhaWx1cmVzLCBtYXRjaERlc3QsIGNoYXJDbGFzcy0+bV9yYW5nZXMuYmVnaW4oKSwgY2hh
ckNsYXNzLT5tX3Jhbmdlcy5zaXplKCksICZtYXRjaEluZGV4LCBjaGFyQ2xhc3MtPm1fbWF0Y2hl
cy5iZWdpbigpLCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5zaXplKCkpOworICAgICAgICAgICAgbWF0
Y2hDaGFyYWN0ZXJDbGFzc1JhbmdlKGNoYXJhY3RlciwgZmFpbHVyZXMsIG1hdGNoRGVzdCwgY2hh
ckNsYXNzLT5tX3Jhbmdlcy5kYXRhKCksIGNoYXJDbGFzcy0+bV9yYW5nZXMuc2l6ZSgpLCAmbWF0
Y2hJbmRleCwgY2hhckNsYXNzLT5tX21hdGNoZXMuZGF0YSgpLCBjaGFyQ2xhc3MtPm1fbWF0Y2hl
cy5zaXplKCkpOwogICAgICAgICAgICAgd2hpbGUgKG1hdGNoSW5kZXggPCBjaGFyQ2xhc3MtPm1f
bWF0Y2hlcy5zaXplKCkpCiAgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChicmFuY2gz
MihFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMigodW5zaWduZWQgc2hvcnQpY2hhckNsYXNzLT5tX21h
dGNoZXNbbWF0Y2hJbmRleCsrXSkpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggZmY0OGRhMGNjNTMxMjgyYTEyZDBkNTEwNmM2NjAzNWYxNTVkOTE1Ni4u
MWJhNWNmZDc4OThmZDllOTY1OTViZmQ1YTQ3NzRmZWYxZWJmNGY4MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05OCw2ICs5OCw3IEBACiAJCUE3NDg3NDUy
MTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NDg3NDRGMTdBMEJEQUUwMEZBMDRDQiAv
KiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCAqLzsgfTsKIAkJQTc0ODc0NTMxN0EwQkRBRTAwRkEwNENC
IC8qIFNpeENoYXJhY3Rlckhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3NDg3NDUwMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNo
LmggKi87IH07CiAJCUE3NDg3NDU0MTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJpbmdIYXNoRHVtcENv
bnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
NDg3NDUxMTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJpbmdIYXNoRHVtcENvbnRleHQuaCAqLzsgfTsK
KwkJQTdEQzJGMDQxQTA5QTIyRDAwNzJGNEUzIC8qIEluZGV4ZWRJdGVyYXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEQzJGMDMxQTA5OURFMzAw
NzJGNEUzIC8qIEluZGV4ZWRJdGVyYXRvci5oICovOyB9OwogCQlBN0U2NDNDNjE3QzU0MjNCMDAz
QkIxNkIgLyogQ29tcHJlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTdFNjQzQzQxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXByZXNzaW9uLmNw
cCAqLzsgfTsKIAkJQTdFNjQzQzcxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXByZXNzaW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0U2NDNDNTE3QzU0
MjNCMDAzQkIxNkIgLyogQ29tcHJlc3Npb24uaCAqLzsgfTsKIAkJQTg3NkRCRDgxNTE4MTZFNTAw
REFEQjk1IC8qIFBsYXRmb3JtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBODc2REJENzE1MTgxNkU1MDBEQURCOTUgLyogUGxhdGZvcm0uaCAqLzsgfTsK
QEAgLTM4OSw2ICszOTAsNyBAQAogCQlBNzQ4NzQ0RjE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hh
cmFjdGVySGFzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaXhD
aGFyYWN0ZXJIYXNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc0ODc0NTAx
N0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2l4Q2hhcmFjdGVySGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBNzQ4NzQ1MTE3QTBCREFFMDBGQTA0Q0IgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ0hhc2hEdW1wQ29udGV4
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0RDMkYwMzFBMDk5REUzMDA3MkY0
RTMgLyogSW5kZXhlZEl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4ZWRJdGVyYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0U2NDNDNDE3QzU0MjNCMDAzQkIxNkIg
LyogQ29tcHJlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q29tcHJlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0U2NDNDNTE3
QzU0MjNCMDAzQkIxNkIgLyogQ29tcHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29tcHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg3
NkRCRDcxNTE4MTZFNTAwREFEQjk1IC8qIFBsYXRmb3JtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBsYXRmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04
OTIsNiArODk0LDcgQEAKIAkJCQk5NzRDRkM4RDE2QTRGMzI3MDA2RDU0MDQgLyogV2Vha1B0ci5o
ICovLAogCQkJCUE4QTQ3MzdBMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmNwcCAq
LywKIAkJCQlBOEE0NzM3QjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oICovLAor
CQkJCUE3REMyRjAzMUEwOTlERTMwMDcyRjRFMyAvKiBJbmRleGVkSXRlcmF0b3IuaCAqLywKIAkJ
CSk7CiAJCQlwYXRoID0gd3RmOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTEwNjUs
NiArMTA2OCw3IEBACiAJCQkJQThBNDczQUQxNTFBODI1QjAwNDEyM0ZGIC8qIGNhY2hlZC1wb3dl
cnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDVFMTUxQTgyNUIwMDQxMjNGRiAvKiBDaGFy
YWN0ZXJOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOTQxNTFBODI1QjAwNDEyM0ZG
IC8qIENoZWNrZWRBcml0aG1ldGljLmggaW4gSGVhZGVycyAqLywKKwkJCQlBN0RDMkYwNDFBMDlB
MjJEMDA3MkY0RTMgLyogSW5kZXhlZEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0
NzM5NTE1MUE4MjVCMDA0MTIzRkYgLyogQ2hlY2tlZEJvb2xlYW4uaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3NDVGMTUxQTgyNUIwMDQxMjNGRiAvKiBDb2xsYXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZDNEVERTYxNjk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRlci5oIGluIEhlYWRl
cnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9JbmRleGVkSXRlcmF0b3IuaCBiL1Nv
dXJjZS9XVEYvd3RmL0luZGV4ZWRJdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3ZDRmYWU1OTc2MjAy
YmQzMWNlYjlkMWNlNmQyM2E2MjM3NjE0MTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9JbmRleGVkSXRlcmF0b3IuaApAQCAtMCwwICsxLDQ4MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV1RGX0luZGV4ZWRJdGVyYXRv
cl9oCisjZGVmaW5lIFdURl9JbmRleGVkSXRlcmF0b3JfaAorCituYW1lc3BhY2UgV1RGIHsKKwor
I2RlZmluZSBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGNoZWNrKSBkbyB7XAorICAgIGlmICgh
KGNoZWNrKSlcCisgICAgICAgIE92ZXJmbG93SGFuZGxlcjo6b3ZlcmZsb3dlZCgpO1wKKyAgICB9
IHdoaWxlICgwKQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmVjdG9yVHlwZSwgdHlwZW5hbWUgVCwg
dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyID0gQ3Jhc2hPbk92ZXJmbG93PiBzdHJ1Y3QgSW5kZXhl
ZEl0ZXJhdG9yIHsKKyAgICB0eXBlZGVmIHN0cnVjdCBJbmRleGVkSXRlcmF0b3I8Y29uc3QgVmVj
dG9yVHlwZSwgY29uc3QgVCwgT3ZlcmZsb3dIYW5kbGVyPiBjb25zdF9pdGVyYXRvcjsKKworICAg
IHR5cGVkZWYgVCBWYWx1ZVR5cGU7CisgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90
eXBlOworICAgIHR5cGVkZWYgVmFsdWVUeXBlIHZhbHVlX3R5cGU7CisgICAgdHlwZWRlZiBWYWx1
ZVR5cGUqIHBvaW50ZXI7CisgICAgdHlwZWRlZiBWYWx1ZVR5cGUmIHJlZmVyZW5jZTsKKyAgICB0
eXBlZGVmIHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7
CisKKyAgICBJbmRleGVkSXRlcmF0b3IoKQorICAgICAgICA6IG1fdmVjdG9yKG51bGxwdHIpCisg
ICAgICAgICwgbV9wb3NpdGlvbigwKQorICAgIHsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0
b3IoVmVjdG9yVHlwZSYgdmVjdG9yLCBWYWx1ZVR5cGUqIHBvc2l0aW9uKQorICAgICAgICA6IG1f
dmVjdG9yKCZ2ZWN0b3IpCisgICAgICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbiAtIHZlY3Rvci5k
YXRhKCkpCisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1fcG9zaXRp
b24gPD0gdmVjdG9yLnNpemUoKSk7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yKGNvbnN0
IEluZGV4ZWRJdGVyYXRvciYgb3RoZXIpCisgICAgICAgIDogbV92ZWN0b3Iob3RoZXIubV92ZWN0
b3IpCisgICAgICAgICwgbV9wb3NpdGlvbihvdGhlci5tX3Bvc2l0aW9uKQorICAgIHsKKyAgICB9
CisKKyAgICBWYWx1ZVR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmbV92ZWN0b3It
PmF0KG1fcG9zaXRpb24pOyB9CisgICAgVmFsdWVUeXBlJiBvcGVyYXRvciooKSBjb25zdCB7IHJl
dHVybiBtX3ZlY3Rvci0+YXQobV9wb3NpdGlvbik7IH0KKyAgICBWYWx1ZVR5cGUqIGdldCgpIGNv
bnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1fcG9zaXRpb24g
PD0gbV92ZWN0b3ItPnNpemUoKSk7CisgICAgICAgIHJldHVybiBtX3ZlY3Rvci0+ZGF0YSgpICsg
bV9wb3NpdGlvbjsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJhdG9yKysoKQor
ICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uIDwgbV92
ZWN0b3ItPnNpemUoKSk7CisgICAgICAgIG1fcG9zaXRpb24rKzsKKyAgICAgICAgcmV0dXJuICp0
aGlzOworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvcisrKGludCkKKyAgICB7
CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA8IG1fdmVjdG9y
LT5zaXplKCkpOworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAg
ICAgbV9wb3NpdGlvbisrOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIElu
ZGV4ZWRJdGVyYXRvciYgb3BlcmF0b3ItLSgpCisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJB
VE9SX09WRVJGTE9XKG1fcG9zaXRpb24gPiAwKTsKKyAgICAgICAgbV9wb3NpdGlvbi0tOworICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9y
LS0oaW50KQorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0
aW9uID4gMCk7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAgICAg
ICBtX3Bvc2l0aW9uLS07CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy8g
VGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGJv
b2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgorICAgIHR5cGVkZWYgc2l6ZV90IChJ
bmRleGVkSXRlcmF0b3I6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRvciBVbnNw
ZWNpZmllZEJvb2xUeXBlKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IgPyAmSW5kZXhlZEl0ZXJh
dG9yOjptX3Bvc2l0aW9uIDogbnVsbHB0cjsgfQorCisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9w
ZXJhdG9yKz0obG9uZyBpbmNyZW1lbnQpCisgICAgeworICAgICAgICBpZiAoaW5jcmVtZW50IDwg
MCkgeworICAgICAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpbmNyZW1lbnQgIT0g
c3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpOworICAgICAgICAgICAgcmV0dXJu
ICgqdGhpcykgLT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtaW5jcmVtZW50KTsKKyAgICAgICAgfQor
ICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKChzdGQ6Om51bWVyaWNfbGltaXRzPHNp
emVfdD46Om1heCgpIC0gbV9wb3NpdGlvbikgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluY3JlbWVu
dCkpOworICAgICAgICBtX3Bvc2l0aW9uICs9IGluY3JlbWVudDsKKyAgICAgICAgSU5ERVhFRF9J
VEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uIDw9IG1fdmVjdG9yLT5zaXplKCkpOworICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvci09
KGxvbmcgZGVjcmVtZW50KQorICAgIHsKKyAgICAgICAgaWYgKGRlY3JlbWVudCA8IDApIHsKKyAg
ICAgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coZGVjcmVtZW50ICE9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKTsKKyAgICAgICAgICAgIHJldHVybiAoKnRoaXMp
ICs9IHN0YXRpY19jYXN0PHNpemVfdD4oLWRlY3JlbWVudCk7CisgICAgICAgIH0KKworICAgICAg
ICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKHN0YXRpY19jYXN0PHNpemVfdD4oZGVjcmVtZW50
KSA8PSBtX3Bvc2l0aW9uKTsKKyAgICAgICAgbV9wb3NpdGlvbiAtPSBkZWNyZW1lbnQ7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJhdG9y
Kz0oc2l6ZV90IGluY3JlbWVudCkKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZF
UkZMT1coKHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLSBtX3Bvc2l0aW9uKSA+
IGluY3JlbWVudCk7CisgICAgICAgIG1fcG9zaXRpb24gKz0gaW5jcmVtZW50OworICAgICAgICBJ
TkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1fcG9zaXRpb24gPD0gbV92ZWN0b3ItPnNpemUoKSk7
CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9w
ZXJhdG9yLT0oc2l6ZV90IGRlY3JlbWVudCkKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFU
T1JfT1ZFUkZMT1coZGVjcmVtZW50IDw9IG1fcG9zaXRpb24pOworICAgICAgICBtX3Bvc2l0aW9u
IC09IGRlY3JlbWVudDsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIEluZGV4
ZWRJdGVyYXRvciYgb3BlcmF0b3IrPShpbnQzMl90IGluY3JlbWVudCkKKyAgICB7CisgICAgICAg
IGlmIChpbmNyZW1lbnQgPCAwKSB7CisgICAgICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJG
TE9XKGluY3JlbWVudCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gKCp0aGlzKSAtPSBzdGF0aWNfY2FzdDxzaXplX3Q+KC1pbmNyZW1l
bnQpOworICAgICAgICB9CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coKHN0ZDo6
bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLSBtX3Bvc2l0aW9uKSA+IHN0YXRpY19jYXN0
PHNpemVfdD4oaW5jcmVtZW50KSk7CisgICAgICAgIG1fcG9zaXRpb24gKz0gaW5jcmVtZW50Owor
ICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1fcG9zaXRpb24gPD0gbV92ZWN0b3It
PnNpemUoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJbmRleGVkSXRl
cmF0b3ImIG9wZXJhdG9yLT0oaW50MzJfdCBkZWNyZW1lbnQpCisgICAgeworICAgICAgICBpZiAo
ZGVjcmVtZW50IDwgMCkgeworICAgICAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhk
ZWNyZW1lbnQgIT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpOworICAgICAg
ICAgICAgcmV0dXJuICgqdGhpcykgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtZGVjcmVtZW50KTsK
KyAgICAgICAgfQorCisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coc3RhdGljX2Nh
c3Q8c2l6ZV90PihkZWNyZW1lbnQpIDw9IG1fcG9zaXRpb24pOworICAgICAgICBtX3Bvc2l0aW9u
IC09IGRlY3JlbWVudDsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIEluZGV4
ZWRJdGVyYXRvciBvcGVyYXRvcisoc2l6ZV90IGluY3JlbWVudCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICByZXR1cm4gcmVzdWx0
ICs9IGluY3JlbWVudDsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3ItKHNp
emVfdCBkZWNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVz
dWx0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCAtPSBkZWNyZW1lbnQ7CisgICAgfQor
CisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yKyhpbnQzMl90IGluY3JlbWVudCkgY29uc3QK
KyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0ICs9IGluY3JlbWVudDsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Ig
b3BlcmF0b3ItKGludDMyX3QgZGVjcmVtZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgSW5kZXhl
ZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQgLT0gZGVjcmVt
ZW50OworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvcisodW5zaWduZWQgbG9u
ZyBsb25nIGluY3JlbWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciBy
ZXN1bHQoKnRoaXMpOworICAgICAgICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19jYXN0PHNpemVf
dD4oaW5jcmVtZW50KTsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3ItKHVu
c2lnbmVkIGxvbmcgbG9uZyBkZWNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVk
SXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGRlY3JlbWVudCk7CisgICAgfQorICAgIEluZGV4ZWRJdGVyYXRvciBvcGVy
YXRvcisobG9uZyBsb25nIGluY3JlbWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJ
dGVyYXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19j
YXN0PHNpemVfdD4oaW5jcmVtZW50KTsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3Bl
cmF0b3ItKGxvbmcgbG9uZyBkZWNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVk
SXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGRlY3JlbWVudCk7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9w
ZXJhdG9yKyh1bnNpZ25lZCBpbmNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVk
SXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGluY3JlbWVudCk7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9w
ZXJhdG9yLSh1bnNpZ25lZCBkZWNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVk
SXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGRlY3JlbWVudCk7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9w
ZXJhdG9yKyhsb25nIGluY3JlbWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVy
YXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19jYXN0
PHNpemVfdD4oaW5jcmVtZW50KTsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0
b3ItKGxvbmcgZGVjcmVtZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9y
IHJlc3VsdCgqdGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6
ZV90PihkZWNyZW1lbnQpOworICAgIH0KKworICAgIHB0cmRpZmZfdCBvcGVyYXRvci0oY29uc3Qg
Y29uc3RfaXRlcmF0b3ImIHJpZ2h0KSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVyhtX3ZlY3RvciA9PSByaWdodC5tX3ZlY3Rvcik7CisgICAgICAgIHJldHVy
biBtX3Bvc2l0aW9uIC0gcmlnaHQubV9wb3NpdGlvbjsKKyAgICB9CisKKyAgICBwdHJkaWZmX3Qg
b3BlcmF0b3ItKGNvbnN0IFZhbHVlVHlwZSogcmlnaHQpIGNvbnN0CisgICAgeworICAgICAgICBJ
TkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKHJpZ2h0ID49IG1fdmVjdG9yLT5kYXRhKCkpOworICAg
ICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1fcG9zaXRpb24gPj0gc3RhdGljX2Nhc3Q8
c2l6ZV90PihyaWdodCAtIG1fdmVjdG9yLT5kYXRhKCkpKTsKKyAgICAgICAgcmV0dXJuIGdldCgp
IC0gcmlnaHQ7CisgICAgfQorCisgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgSW5kZXhlZEl0ZXJh
dG9yJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fdmVjdG9yID0gb3RoZXIubV92ZWN0b3I7Cisg
ICAgICAgIG1fcG9zaXRpb24gPSBvdGhlci5tX3Bvc2l0aW9uOworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOwor
ICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPT0gb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQor
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaXNTYWZlVG9Db21wYXJl
KG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSAhPSBvdGhlci51bnNhZmVHZXQo
KTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmFsdWVUeXBlKiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaXNTYWZlVG9D
b21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA9PSBvdGhlcjsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVmFsdWVUeXBlKiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaXNTYWZlVG9Db21wYXJl
KG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSAhPSBvdGhlcjsKKyAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yPChjb25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIp
KTsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpIDwgb3RoZXI7CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvcjw9KGNvbnN0IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOworICAg
ICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPD0gb3RoZXI7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvcjwoY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
SU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAg
ICAgcmV0dXJuIHVuc2FmZUdldCgpIDwgb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisgICAg
Ym9vbCBvcGVyYXRvcjw9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coc2FmZVRvQ29tcGFyZShvdGhlcikp
OworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPD0gb3RoZXIudW5zYWZlR2V0KCk7CisgICAg
fQorCisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgSW5kZXhlZEl0ZXJhdG9yJiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaXNTYWZlVG9Db21w
YXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA+IG90aGVyLnVuc2FmZUdl
dCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBjb25zdF9pdGVyYXRvciYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlz
U2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPj0gb3Ro
ZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgVmFsdWVU
eXBlKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZM
T1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA+
IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBWYWx1ZVR5cGUqIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpc1Nh
ZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpID49IG90aGVy
OworICAgIH0KKworICAgIG9wZXJhdG9yIGNvbnN0X2l0ZXJhdG9yKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGNvbnN0X2l0ZXJhdG9yIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmVjdG9yID0g
bV92ZWN0b3I7CisgICAgICAgIHJlc3VsdC5tX3Bvc2l0aW9uID0gbV9wb3NpdGlvbjsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBWZWN0b3JUeXBlKiBtX3ZlY3RvcjsKKyAg
ICBzaXplX3QgbV9wb3NpdGlvbjsKKworICAgIGJvb2wgaXNTYWZlVG9Db21wYXJlKGNvbnN0IGNv
bnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3ZlY3RvciA9
PSBvdGhlci5tX3ZlY3RvcikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1
cm4gIW1fdmVjdG9yIHx8ICFvdGhlci5tX3ZlY3RvcjsKKyAgICB9CisKKyAgICBib29sIGlzU2Fm
ZVRvQ29tcGFyZShjb25zdCBWYWx1ZVR5cGUqIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIW1fdmVj
dG9yKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHNpemVfdCBkZWx0YSA9IHN0
YXRpY19jYXN0PHNpemVfdD4odmFsdWUgLSBtX3ZlY3Rvci0+ZGF0YSgpKTsKKyAgICAgICAgcmV0
dXJuIGRlbHRhIDw9IG1fdmVjdG9yLT5zaXplKCk7CisgICAgfQorCisgICAgVmFsdWVUeXBlKiB1
bnNhZmVHZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX3ZlY3RvcikKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZ2V0KCk7CisgICAgfQorfTsKKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyPgoraW5saW5lIHR5cGVuYW1lIEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUs
IE92ZXJmbG93SGFuZGxlcj46OlZhbHVlVHlwZSogZ2V0UHRyKEluZGV4ZWRJdGVyYXRvcjxULCBW
YWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4gcCkKK3sKKyAgICByZXR1cm4gcC5nZXQoKTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyPgoraW5saW5lIHB0cmRpZmZfdCBvcGVyYXRvci0oY29uc3QgVmFsdWVUeXBl
KiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRs
ZXI+JiByaWdodCkKK3sKKyAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGxlZnQgPj0gcmln
aHQubV92ZWN0b3ItPmRhdGEoKSk7CisgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhsZWZ0
IDw9IHJpZ2h0Lm1fdmVjdG9yLT5lbmQoKS5nZXQoKSk7CisgICAgcmV0dXJuIGxlZnQgLSByaWdo
dC5nZXQoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwg
dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIHB0cmRpZmZfdCBvcGVyYXRvci0oVmFs
dWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxv
d0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGxlZnQg
Pj0gcmlnaHQubV92ZWN0b3ItPmRhdGEoKSk7CisgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxP
VyhsZWZ0IDw9IHJpZ2h0Lm1fdmVjdG9yLT5lbmQoKS5nZXQoKSk7CisgICAgcmV0dXJuIGxlZnQg
LSByaWdodC5nZXQoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVl
VHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIHB0cmRpZmZfdCBvcGVyYXRv
ci0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8Y29uc3QgVCwg
Y29uc3QgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICBJTkRFWEVE
X0lURVJBVE9SX09WRVJGTE9XKGxlZnQgPj0gcmlnaHQubV92ZWN0b3ItPmRhdGEoKSk7CisgICAg
SU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhsZWZ0IDw9IHJpZ2h0Lm1fdmVjdG9yLT5lbmQoKS5n
ZXQoKSk7CisgICAgcmV0dXJuIGxlZnQgLSByaWdodC5nZXQoKTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVy
YXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVy
biByaWdodCA9PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFs
dWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlw
ZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID09IGxlZnQ7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yIT0oVmFsdWVUeXBlKiBsZWZ0
LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiBy
aWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgIT0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJ
dGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJl
dHVybiByaWdodCAhPSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRv
cjw9KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwg
T3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID49IGxlZnQ7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgVmFsdWVUeXBlKiBs
ZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+
JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPj0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgor
aW5saW5lIGJvb2wgb3BlcmF0b3I+PShWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVy
YXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVy
biByaWdodCA8PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFs
dWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj49
KGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlw
ZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0IDw9IGxlZnQ7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPChWYWx1ZVR5cGUqIGxlZnQs
IGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJp
Z2h0KQoreworICAgIHJldHVybiByaWdodCA+IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGlu
ZSBib29sIG9wZXJhdG9yPChjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVy
YXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVy
biByaWdodCA+IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1
ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPihW
YWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJm
bG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA8IGxlZnQ7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNv
bnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0
KQoreworICAgIHJldHVybiByaWdodCA8IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBW
ZWN0b3JUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0cnVjdCBJbmRleGVkSXRlcmF0
b3JTZWxlY3RvciB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBWZWN0b3JUeXBlOjpWYWx1ZVR5cGUg
VmFsdWVUeXBlOworICAgIHR5cGVkZWYgSW5kZXhlZEl0ZXJhdG9yPFZlY3RvclR5cGUsIFZhbHVl
VHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiBpdGVyYXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICBzdGF0aWMgaXRlcmF0
b3IgbWFrZUl0ZXJhdG9yKFZlY3RvclR5cGUmIHZlY3RvciwgVmFsdWVUeXBlKiBwKSB7IHJldHVy
biBpdGVyYXRvcih2ZWN0b3IsIHApOyB9CisgICAgc3RhdGljIGNvbnN0X2l0ZXJhdG9yIG1ha2VD
b25zdEl0ZXJhdG9yKGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvciwgY29uc3QgVmFsdWVUeXBlKiBw
KSB7IHJldHVybiBjb25zdF9pdGVyYXRvcih2ZWN0b3IsIHApOyB9Cit9OworCisjdW5kZWYgSU5E
RVhFRF9JVEVSQVRPUl9PVkVSRkxPVworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvUmVmQ291bnRlZEFycmF5LmggYi9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJy
YXkuaAppbmRleCBhNTVkN2FlZWFiODRiOWM0OTUxOTZlOGUyMzBhMWRjMTc4NTE5M2FiLi44MTFl
OWZmY2VhMzM3YTZjN2Q4YjI5MTYzMGUyYWZkZjhlNTY2MzkwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVk
QXJyYXkuaApAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgICAgIEhlYWRlcjo6ZnJvbVBh
eWxvYWQobV9kYXRhKS0+cmVmQ291bnQgPSAxOwogICAgICAgICBIZWFkZXI6OmZyb21QYXlsb2Fk
KG1fZGF0YSktPmxlbmd0aCA9IG90aGVyLnNpemUoKTsKICAgICAgICAgQVNTRVJUKEhlYWRlcjo6
ZnJvbVBheWxvYWQobV9kYXRhKS0+bGVuZ3RoID09IG90aGVyLnNpemUoKSk7Ci0gICAgICAgIFZl
Y3RvclR5cGVPcGVyYXRpb25zPFQ+Ojp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpLCBv
dGhlci5lbmQoKSwgbV9kYXRhKTsKKyAgICAgICAgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD46OnVu
aW5pdGlhbGl6ZWRDb3B5KGdldFB0cihvdGhlci5iZWdpbigpKSwgZ2V0UHRyKG90aGVyLmVuZCgp
KSwgbV9kYXRhKTsKICAgICB9CiAgICAgCiAgICAgUmVmQ291bnRlZEFycmF5JiBvcGVyYXRvcj0o
Y29uc3QgUmVmQ291bnRlZEFycmF5JiBvdGhlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1ZlY3Rvci5oIGIvU291cmNlL1dURi93dGYvVmVjdG9yLmgKaW5kZXggZjMxMzI5ZTM0YjM3YjM4
OWNiODk2MDkwZjM1MDI5OWE0MWRjOWI0MC4uOGFjMzViYzU5NGViYWI0MmJjMDIzNjRkNjNhY2Fm
Y2ZhNjRmNDQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVmVjdG9yLmgKKysrIGIvU291
cmNlL1dURi93dGYvVmVjdG9yLmgKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlIDx1dGlsaXR5
PgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9JbmRleGVk
SXRlcmF0b3IuaD4KICNpbmNsdWRlIDx3dGYvTWFsbG9jUHRyLmg+CiAjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtNTUzLDE0ICs1
NTUsMTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5ID0gMCwg
dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyID0gQ3Jhc2gKIGNsYXNzIFZlY3RvciA6IHByaXZhdGUg
VmVjdG9yQnVmZmVyPFQsIGlubGluZUNhcGFjaXR5PiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwcml2YXRlOgorCiAgICAgdHlwZWRlZiBWZWN0b3JCdWZmZXI8VCwgaW5saW5lQ2Fw
YWNpdHk+IEJhc2U7CiAgICAgdHlwZWRlZiBWZWN0b3JUeXBlT3BlcmF0aW9uczxUPiBUeXBlT3Bl
cmF0aW9uczsKKyAgICB0eXBlZGVmIEluZGV4ZWRJdGVyYXRvclNlbGVjdG9yPFZlY3RvciwgT3Zl
cmZsb3dIYW5kbGVyPiBJdGVyYXRvclNlbGVjdG9yOwogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBU
IFZhbHVlVHlwZTsKIAotICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7Ci0gICAgdHlwZWRlZiBjb25z
dCBUKiBjb25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEl0ZXJhdG9yU2VsZWN0
b3I6Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgSXRlcmF0b3JTZWxl
Y3Rvcjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisKICAgICB0eXBlZGVmIHN0ZDo6
cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICAgICB0eXBlZGVm
IHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVy
YXRvcjsKIApAQCAtNTczLDE0ICs1NzgsMTQgQEAgcHVibGljOgogICAgICAgICA6IEJhc2Uoc2l6
ZSwgc2l6ZSkKICAgICB7CiAgICAgICAgIGlmIChiZWdpbigpKQotICAgICAgICAgICAgVHlwZU9w
ZXJhdGlvbnM6OmluaXRpYWxpemUoYmVnaW4oKSwgZW5kKCkpOworICAgICAgICAgICAgVHlwZU9w
ZXJhdGlvbnM6OmluaXRpYWxpemUoZ2V0UHRyKGJlZ2luKCkpLCBnZXRQdHIoZW5kKCkpKTsKICAg
ICB9CiAKICAgICBWZWN0b3Ioc2l6ZV90IHNpemUsIGNvbnN0IFQmIHZhbCkKICAgICAgICAgOiBC
YXNlKHNpemUsIHNpemUpCiAgICAgewogICAgICAgICBpZiAoYmVnaW4oKSkKLSAgICAgICAgICAg
IFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkRmlsbChiZWdpbigpLCBlbmQoKSwgdmFsKTsK
KyAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkRmlsbChnZXRQdHIoYmVn
aW4oKSksIGdldFB0cihlbmQoKSksIHZhbCk7CiAgICAgfQogCiAgICAgVmVjdG9yKHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxUPiBpbml0aWFsaXplckxpc3QpCkBAIC02NDQsMTAgKzY0OSwxMCBAQCBw
dWJsaWM6CiAgICAgY29uc3QgVCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIEJhc2U6OmJ1ZmZlcigp
OyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBkYXRhTWVtb3J5T2Zmc2V0KCkgeyByZXR1cm4gQmFz
ZTo6YnVmZmVyTWVtb3J5T2Zmc2V0KCk7IH0KIAotICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1
cm4gZGF0YSgpOyB9Ci0gICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gYmVnaW4oKSArIG1fc2l6
ZTsgfQotICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gZGF0YSgpOyB9
Ci0gICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSArIG1fc2l6
ZTsgfQorICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gSXRlcmF0b3JTZWxlY3Rvcjo6bWFr
ZUl0ZXJhdG9yKCp0aGlzLCBkYXRhKCkpOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4g
YmVnaW4oKSArIHNpemUoKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gSXRlcmF0b3JTZWxlY3Rvcjo6bWFrZUNvbnN0SXRlcmF0b3IoKnRoaXMsIGRhdGEoKSk7
IH0KKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBiZWdpbigpICsgc2l6
ZSgpOyB9CiAKICAgICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2Vf
aXRlcmF0b3IoZW5kKCkpOyB9CiAgICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4g
cmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQpAQCAtNjgyLDYgKzY4Nyw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgY2xlYXIoKSB7IHNocmlua0NhcGFjaXR5KDApOyB9CiAKKyAgICB2b2lkIGFw
cGVuZChjb25zdF9pdGVyYXRvciwgc2l6ZV90KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2
b2lkIGFwcGVuZChjb25zdCBVKiwgc2l6ZV90KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2
b2lkIGFwcGVuZChVJiYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgdW5jaGVja2Vk
QXBwZW5kKFUmJiB2YWwpOwpAQCAtNzQ1LDcgKzc1MSw3IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6VmVjdG9yKGNvbnN0IFZlY3RvciYgb3RoZXIpCiAgICAg
OiBCYXNlKG90aGVyLmNhcGFjaXR5KCksIG90aGVyLnNpemUoKSkKIHsKICAgICBpZiAoYmVnaW4o
KSkKLSAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2lu
KCksIG90aGVyLmVuZCgpLCBiZWdpbigpKTsKKyAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5p
dGlhbGl6ZWRDb3B5KGdldFB0cihvdGhlci5iZWdpbigpKSwgZ2V0UHRyKG90aGVyLmVuZCgpKSwg
Z2V0UHRyKGJlZ2luKCkpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CkBAIC03NTQsNyArNzYwLDcgQEAg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpWZWN0b3IoY29uc3Qg
VmVjdG9yPFQsIG90aGVyQ2FwYWNpdHkKICAgICA6IEJhc2Uob3RoZXIuY2FwYWNpdHkoKSwgb3Ro
ZXIuc2l6ZSgpKQogewogICAgIGlmIChiZWdpbigpKQotICAgICAgICBUeXBlT3BlcmF0aW9uczo6
dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCksIGJlZ2luKCkpOwor
ICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90aGVyLmJl
Z2luKCkpLCBnZXRQdHIob3RoZXIuZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4KQEAgLTc3MSw4ICs3NzcsOCBAQCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlcj4mIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYQogICAg
ICAgICBBU1NFUlQoYmVnaW4oKSk7CiAgICAgfQogICAgIAotICAgIHN0ZDo6Y29weShvdGhlci5i
ZWdpbigpLCBvdGhlci5iZWdpbigpICsgc2l6ZSgpLCBiZWdpbigpKTsKLSAgICBUeXBlT3BlcmF0
aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSArIHNpemUoKSwgb3RoZXIuZW5k
KCksIGVuZCgpKTsKKyAgICBzdGQ6OmNvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkpLCBnZXRQdHIo
b3RoZXIuYmVnaW4oKSArIHNpemUoKSksIGdldFB0cihiZWdpbigpKSk7CisgICAgVHlwZU9wZXJh
dGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KGdldFB0cihvdGhlci5iZWdpbigpICsgc2l6ZSgpKSwg
Z2V0UHRyKG90aGVyLmVuZCgpKSwgZ2V0UHRyKGVuZCgpKSk7CiAgICAgbV9zaXplID0gb3RoZXIu
c2l6ZSgpOwogCiAgICAgcmV0dXJuICp0aGlzOwpAQCAtNzk2LDkgKzgwMiw5IEBAIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPiYgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhCiAgICAgICAgIHJlc2VydmVDYXBhY2l0eShvdGhlci5zaXplKCkpOwog
ICAgICAgICBBU1NFUlQoYmVnaW4oKSk7CiAgICAgfQotICAgIAotICAgIHN0ZDo6Y29weShvdGhl
ci5iZWdpbigpLCBvdGhlci5iZWdpbigpICsgc2l6ZSgpLCBiZWdpbigpKTsKLSAgICBUeXBlT3Bl
cmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSArIHNpemUoKSwgb3RoZXIu
ZW5kKCksIGVuZCgpKTsKKworICAgIHN0ZDo6Y29weShnZXRQdHIob3RoZXIuYmVnaW4oKSksIGdl
dFB0cihvdGhlci5iZWdpbigpICsgc2l6ZSgpKSwgZ2V0UHRyKGJlZ2luKCkpKTsKKyAgICBUeXBl
T3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkgKyBzaXpl
KCkpLCBnZXRQdHIob3RoZXIuZW5kKCkpLCBnZXRQdHIoZW5kKCkpKTsKICAgICBtX3NpemUgPSBv
dGhlci5zaXplKCk7CiAKICAgICByZXR1cm4gKnRoaXM7CkBAIC04NTgsOCArODY0LDggQEAgdm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmZpbGwoY29uc3Qg
VCYgdmFsLCBzaXplX3QgbmV3U2kKICAgICAgICAgQVNTRVJUKGJlZ2luKCkpOwogICAgIH0KICAg
ICAKLSAgICBzdGQ6OmZpbGwoYmVnaW4oKSwgZW5kKCksIHZhbCk7Ci0gICAgVHlwZU9wZXJhdGlv
bnM6OnVuaW5pdGlhbGl6ZWRGaWxsKGVuZCgpLCBiZWdpbigpICsgbmV3U2l6ZSwgdmFsKTsKKyAg
ICBzdGQ6OmZpbGwoZ2V0UHRyKGJlZ2luKCkpLCBnZXRQdHIoZW5kKCkpLCB2YWwpOworICAgIFR5
cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkRmlsbChnZXRQdHIoZW5kKCkpLCBnZXRQdHIoYmVn
aW4oKSkgKyBuZXdTaXplLCB2YWwpOwogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiB9CiAKQEAgLTg4
MCwxMyArODg2LDEzIEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXI+OjpleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIFQq
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6ZXhwYW5kQ2FwYWNp
dHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBUKiBwdHIpCiB7Ci0gICAgaWYgKHB0ciA8IGJlZ2lu
KCkgfHwgcHRyID49IGVuZCgpKSB7CisgICAgaWYgKHB0ciA8IGdldFB0cihiZWdpbigpKSB8fCBw
dHIgPj0gZ2V0UHRyKGVuZCgpKSkgewogICAgICAgICBleHBhbmRDYXBhY2l0eShuZXdNaW5DYXBh
Y2l0eSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQotICAgIHNpemVfdCBpbmRleCA9IHB0
ciAtIGJlZ2luKCk7CisgICAgc2l6ZV90IGluZGV4ID0gcHRyIC0gZ2V0UHRyKGJlZ2luKCkpOwog
ICAgIGV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5KTsKLSAgICByZXR1cm4gYmVnaW4oKSAr
IGluZGV4OworICAgIHJldHVybiBnZXRQdHIoYmVnaW4oKSkgKyBpbmRleDsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXI+CkBAIC04OTgsMTUgKzkwNCwxNSBAQCBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyPjo6dHJ5RXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbgogdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXI+CiBjb25zdCBUKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlcj46OnRyeUV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSwgY29uc3QgVCog
cHRyKQogewotICAgIGlmIChwdHIgPCBiZWdpbigpIHx8IHB0ciA+PSBlbmQoKSkgeworICAgIGlm
IChwdHIgPCBnZXRQdHIoYmVnaW4oKSkgfHwgcHRyID49IGdldFB0cihlbmQoKSkpIHsKICAgICAg
ICAgaWYgKCF0cnlFeHBhbmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0eSkpCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9Ci0gICAgc2l6ZV90IGluZGV4ID0g
cHRyIC0gYmVnaW4oKTsKKyAgICBzaXplX3QgaW5kZXggPSBwdHIgLSBnZXRQdHIoYmVnaW4oKSk7
CiAgICAgaWYgKCF0cnlFeHBhbmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0eSkpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBiZWdpbigpICsgaW5kZXg7CisgICAgcmV0dXJuIGdldFB0cihi
ZWdpbigpKSArIGluZGV4OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUgVT4K
QEAgLTkyMCwxMiArOTI2LDEyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogaW5saW5lIHZvaWQgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpyZXNpemUoc2l6ZV90IHNpemUpCiB7
CiAgICAgaWYgKHNpemUgPD0gbV9zaXplKQotICAgICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1
Y3QoYmVnaW4oKSArIHNpemUsIGVuZCgpKTsKKyAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmRlc3Ry
dWN0KGdldFB0cihiZWdpbigpKSArIHNpemUsIGdldFB0cihlbmQoKSkpOwogICAgIGVsc2Ugewog
ICAgICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgICAgICBleHBhbmRDYXBhY2l0
eShzaXplKTsKICAgICAgICAgaWYgKGJlZ2luKCkpCi0gICAgICAgICAgICBUeXBlT3BlcmF0aW9u
czo6aW5pdGlhbGl6ZShlbmQoKSwgYmVnaW4oKSArIHNpemUpOworICAgICAgICAgICAgVHlwZU9w
ZXJhdGlvbnM6OmluaXRpYWxpemUoZ2V0UHRyKGVuZCgpKSwgZ2V0UHRyKGJlZ2luKCkpICsgc2l6
ZSk7CiAgICAgfQogICAgIAogICAgIG1fc2l6ZSA9IHNpemU7CkBAIC05NDIsNyArOTQ4LDcgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXI+CiB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyPjo6c2hyaW5rKHNpemVfdCBzaXplKQogewogICAgIEFTU0VSVChzaXplIDw9IG1fc2l6ZSk7
Ci0gICAgVHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0KGJlZ2luKCkgKyBzaXplLCBlbmQoKSk7Cisg
ICAgVHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0KGdldFB0cihiZWdpbigpKSArIHNpemUsIGdldFB0
cihlbmQoKSkpOwogICAgIG1fc2l6ZSA9IHNpemU7CiB9CiAKQEAgLTk1Myw3ICs5NTksNyBAQCB2
b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6Z3JvdyhzaXpl
X3Qgc2l6ZSkKICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgIGV4cGFuZENhcGFj
aXR5KHNpemUpOwogICAgIGlmIChiZWdpbigpKQotICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5p
dGlhbGl6ZShlbmQoKSwgYmVnaW4oKSArIHNpemUpOworICAgICAgICBUeXBlT3BlcmF0aW9uczo6
aW5pdGlhbGl6ZShnZXRQdHIoZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkgKyBzaXplKTsKICAgICBt
X3NpemUgPSBzaXplOwogfQogCkBAIC05NjIsMTEgKzk2OCwxMSBAQCB2b2lkIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBu
ZXdDYXBhYwogewogICAgIGlmIChuZXdDYXBhY2l0eSA8PSBjYXBhY2l0eSgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgVCogb2xkQnVmZmVyID0gYmVnaW4oKTsKLSAgICBUKiBvbGRFbmQgPSBlbmQo
KTsKKyAgICBUKiBvbGRCdWZmZXIgPSBnZXRQdHIoYmVnaW4oKSk7CisgICAgVCogb2xkRW5kID0g
Z2V0UHRyKGVuZCgpKTsKICAgICBCYXNlOjphbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSk7CiAg
ICAgQVNTRVJUKGJlZ2luKCkpOwotICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwg
b2xkRW5kLCBiZWdpbigpKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShvbGRCdWZmZXIsIG9s
ZEVuZCwgZ2V0UHRyKGJlZ2luKCkpKTsKICAgICBCYXNlOjpkZWFsbG9jYXRlQnVmZmVyKG9sZEJ1
ZmZlcik7CiB9CiAKQEAgLTk3NSwxMiArOTgxLDEyIEBAIGJvb2wgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojp0cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IG5ld0Nh
CiB7CiAgICAgaWYgKG5ld0NhcGFjaXR5IDw9IGNhcGFjaXR5KCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIFQqIG9sZEJ1ZmZlciA9IGJlZ2luKCk7Ci0gICAgVCogb2xkRW5kID0gZW5kKCk7
CisgICAgVCogb2xkQnVmZmVyID0gZ2V0UHRyKGJlZ2luKCkpOworICAgIFQqIG9sZEVuZCA9IGdl
dFB0cihlbmQoKSk7CiAgICAgaWYgKCFCYXNlOjp0cnlBbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0
eSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBBU1NFUlQoYmVnaW4oKSk7Ci0gICAgVHlw
ZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOworICAgIFR5cGVP
cGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBnZXRQdHIoYmVnaW4oKSkpOwogICAg
IEJhc2U6OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
QEAgLTEwMDMsMTcgKzEwMDksMTcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlcj46OnNocmlua0NhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2kKICAgICBpZiAo
bmV3Q2FwYWNpdHkgPCBzaXplKCkpIAogICAgICAgICBzaHJpbmsobmV3Q2FwYWNpdHkpOwogCi0g
ICAgVCogb2xkQnVmZmVyID0gYmVnaW4oKTsKKyAgICBUKiBvbGRCdWZmZXIgPSBnZXRQdHIoYmVn
aW4oKSk7CiAgICAgaWYgKG5ld0NhcGFjaXR5ID4gMCkgewogICAgICAgICBpZiAoQmFzZTo6c2hv
dWxkUmVhbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSkpIHsKICAgICAgICAgICAgIEJhc2U6OnJl
YWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKLSAgICAgICAgVCogb2xkRW5kID0gZW5kKCk7CisgICAgICAgIFQqIG9sZEVuZCA9IGdl
dFB0cihlbmQoKSk7CiAgICAgICAgIEJhc2U6OmFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsK
LSAgICAgICAgaWYgKGJlZ2luKCkgIT0gb2xkQnVmZmVyKQotICAgICAgICAgICAgVHlwZU9wZXJh
dGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOworICAgICAgICBpZiAoZ2V0
UHRyKGJlZ2luKCkpICE9IG9sZEJ1ZmZlcikKKyAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjpt
b3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBnZXRQdHIoYmVnaW4oKSkpOwogICAgIH0KIAogICAgIEJh
c2U6OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKQEAgLTEwMzMsMTEgKzEwMzksMTcgQEAg
dm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmFwcGVuZChj
b25zdCBVKiBkYXRhLCBzaXplX3QgZGEKICAgICB9CiAgICAgaWYgKG5ld1NpemUgPCBtX3NpemUp
CiAgICAgICAgIENSQVNIKCk7Ci0gICAgVCogZGVzdCA9IGVuZCgpOworICAgIFQqIGRlc3QgPSBn
ZXRQdHIoZW5kKCkpOwogICAgIFZlY3RvckNvcGllcjxzdGQ6OmlzX3RyaXZpYWw8VD46OnZhbHVl
LCBVPjo6dW5pbml0aWFsaXplZENvcHkoZGF0YSwgJmRhdGFbZGF0YVNpemVdLCBkZXN0KTsKICAg
ICBtX3NpemUgPSBuZXdTaXplOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK3ZvaWQgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmQoY29uc3RfaXRlcmF0b3IgZGF0
YSwgc2l6ZV90IGRhdGFTaXplKQoreworICAgIGFwcGVuZChnZXRQdHIoZGF0YSksIGRhdGFTaXpl
KTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBl
bmFtZSBPdmVyZmxvd0hhbmRsZXI+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CiBib29sIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6dHJ5QXBwZW5kKGNvbnN0IFUqIGRh
dGEsIHNpemVfdCBkYXRhU2l6ZSkKIHsKQEAgLTEwNTAsNyArMTA2Miw3IEBAIGJvb2wgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojp0cnlBcHBlbmQoY29uc3QgVSog
ZGF0YSwgc2l6ZV90CiAgICAgfQogICAgIGlmIChuZXdTaXplIDwgbV9zaXplKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgVCogZGVzdCA9IGVuZCgpOworICAgIFQqIGRlc3QgPSBnZXRQdHIo
ZW5kKCkpOwogICAgIFZlY3RvckNvcGllcjxzdGQ6OmlzX3RyaXZpYWw8VD46OnZhbHVlLCBVPjo6
dW5pbml0aWFsaXplZENvcHkoZGF0YSwgJmRhdGFbZGF0YVNpemVdLCBkZXN0KTsKICAgICBtX3Np
emUgPSBuZXdTaXplOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTA2MCw3ICsxMDcyLDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXI+IHRlbXBsYXRlPHQKIEFMV0FZU19JTkxJTkUgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmFwcGVuZChVJiYgdmFsdWUpCiB7CiAgICAgaWYg
KHNpemUoKSAhPSBjYXBhY2l0eSgpKSB7Ci0gICAgICAgIG5ldyAoTm90TnVsbCwgZW5kKCkpIFQo
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgICAgIG5ldyAoTm90TnVsbCwgZ2V0UHRyKGVu
ZCgpKSkgVChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKICAgICAgICAgKyttX3NpemU7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0xMDc3LDcgKzEwODksNyBAQCB2b2lkIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kU2xvd0Nhc2UoVSYmIHZhbHVl
KQogICAgIHB0ciA9IGV4cGFuZENhcGFjaXR5KHNpemUoKSArIDEsIHB0cik7CiAgICAgQVNTRVJU
KGJlZ2luKCkpOwogCi0gICAgbmV3IChOb3ROdWxsLCBlbmQoKSkgVChzdGQ6OmZvcndhcmQ8VT4o
KnB0cikpOworICAgIG5ldyAoTm90TnVsbCwgZ2V0UHRyKGVuZCgpKSkgVChzdGQ6OmZvcndhcmQ8
VT4oKnB0cikpOwogICAgICsrbV9zaXplOwogfQogCkBAIC0xMDkwLDE0ICsxMTAyLDE0IEBAIGlu
bGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6dW5j
aGVja2VkQXBwZW5kKFUmJiB2YWx1CiAgICAgQVNTRVJUKHNpemUoKSA8IGNhcGFjaXR5KCkpOwog
CiAgICAgYXV0byBwdHIgPSBzdGQ6OmFkZHJlc3NvZih2YWx1ZSk7Ci0gICAgbmV3IChOb3ROdWxs
LCBlbmQoKSkgVChzdGQ6OmZvcndhcmQ8VT4oKnB0cikpOworICAgIG5ldyAoTm90TnVsbCwgZ2V0
UHRyKGVuZCgpKSkgVChzdGQ6OmZvcndhcmQ8VT4oKnB0cikpOwogICAgICsrbV9zaXplOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IG90aGVyQ2FwYWNpdHk+
CiBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46
OmFwcGVuZFZlY3Rvcihjb25zdCBWZWN0b3I8VSwgb3RoZXJDYXBhY2l0eT4mIHZhbCkKIHsKLSAg
ICBhcHBlbmQodmFsLmJlZ2luKCksIHZhbC5zaXplKCkpOworICAgIGFwcGVuZChnZXRQdHIodmFs
LmJlZ2luKCkpLCB2YWwuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHRlbXBsYXRlPHR5cGVu
YW1lIFU+CkBAIC0xMTExLDggKzExMjMsOCBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyPjo6aW5zZXJ0KHNpemVfdCBwb3NpdGlvbiwgY29uc3QgVQogICAg
IH0KICAgICBpZiAobmV3U2l6ZSA8IG1fc2l6ZSkKICAgICAgICAgQ1JBU0goKTsKLSAgICBUKiBz
cG90ID0gYmVnaW4oKSArIHBvc2l0aW9uOwotICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3Zlcmxh
cHBpbmcoc3BvdCwgZW5kKCksIHNwb3QgKyBkYXRhU2l6ZSk7CisgICAgVCogc3BvdCA9IGdldFB0
cihiZWdpbigpKSArIHBvc2l0aW9uOworICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBp
bmcoc3BvdCwgZ2V0UHRyKGVuZCgpKSwgc3BvdCArIGRhdGFTaXplKTsKICAgICBWZWN0b3JDb3Bp
ZXI8c3RkOjppc190cml2aWFsPFQ+Ojp2YWx1ZSwgVT46OnVuaW5pdGlhbGl6ZWRDb3B5KGRhdGEs
ICZkYXRhW2RhdGFTaXplXSwgc3BvdCk7CiAgICAgbV9zaXplID0gbmV3U2l6ZTsKIH0KQEAgLTEx
MjgsOCArMTE0MCw4IEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyPjo6aW5zZXJ0KHNpemVfdCBwb3NpdGlvbiwKICAgICAgICAgQVNTRVJUKGJl
Z2luKCkpOwogICAgIH0KIAotICAgIFQqIHNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247Ci0gICAg
VHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90LCBlbmQoKSwgc3BvdCArIDEpOwor
ICAgIFQqIHNwb3QgPSBnZXRQdHIoYmVnaW4oKSkgKyBwb3NpdGlvbjsKKyAgICBUeXBlT3BlcmF0
aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGdldFB0cihlbmQoKSksIHNwb3QgKyAxKTsKICAg
ICBuZXcgKE5vdE51bGwsIHNwb3QpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKICAgICArK21f
c2l6ZTsKIH0KQEAgLTExMzcsMTYgKzExNDksMTYgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnQoc2l6ZV90IHBvc2l0aW9uLAog
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXI+IHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBjPgogaW5saW5lIHZvaWQg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnRWZWN0b3Io
c2l6ZV90IHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8VSwgYz4mIHZhbCkKIHsKLSAgICBpbnNlcnQo
cG9zaXRpb24sIHZhbC5iZWdpbigpLCB2YWwuc2l6ZSgpKTsKKyAgICBpbnNlcnQocG9zaXRpb24s
IGdldFB0cih2YWwuYmVnaW4oKSksIHZhbC5zaXplKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIGlu
bGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVt
b3ZlKHNpemVfdCBwb3NpdGlvbikKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihwb3NpdGlvbiA8IHNpemUoKSk7Ci0gICAgVCogc3BvdCA9IGJlZ2luKCkgKyBwb3NpdGlv
bjsKKyAgICBUKiBzcG90ID0gZ2V0UHRyKGJlZ2luKCkpICsgcG9zaXRpb247CiAgICAgc3BvdC0+
flQoKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QgKyAxLCBlbmQo
KSwgc3BvdCk7CisgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90ICsgMSwg
Z2V0UHRyKGVuZCgpKSwgc3BvdCk7CiAgICAgLS1tX3NpemU7CiB9CiAKQEAgLTExNTUsMTAgKzEx
NjcsMTAgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXI+OjpyZW1vdmUoc2l6ZV90IHBvc2l0aW9uLAogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKHBvc2l0aW9uIDw9IHNpemUoKSk7CiAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24gKyBsZW5ndGggPD0gc2l6ZSgpKTsKLSAgICBUKiBi
ZWdpblNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247CisgICAgVCogYmVnaW5TcG90ID0gZ2V0UHRy
KGJlZ2luKCkpICsgcG9zaXRpb247CiAgICAgVCogZW5kU3BvdCA9IGJlZ2luU3BvdCArIGxlbmd0
aDsKICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QoYmVnaW5TcG90LCBlbmRTcG90KTsgCi0g
ICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhlbmRTcG90LCBlbmQoKSwgYmVnaW5T
cG90KTsKKyAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKGVuZFNwb3QsIGdldFB0
cihlbmQoKSksIGJlZ2luU3BvdCk7CiAgICAgbV9zaXplIC09IGxlbmd0aDsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAK
aW5kZXggMGNmMDllMWY1ZWM5OGE4NTE0NGNjNzIyZDJhNmNjNGFlNGY5Mzg5OC4uM2VlODA2OGEz
YTc2YTRhNDNhYzY0MzIzMjc3MjY0M2MxNjE0OWQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC0xNDM3LDggKzE0
MzcsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAgICAgY29uc3QgdWludDhfdCogcHRyID0g
YnVmZmVyLmJlZ2luKCk7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IGJ1ZmZlci5lbmQo
KTsKKyAgICAgICAgY29uc3QgdWludDhfdCogcHRyID0gZ2V0UHRyKGJ1ZmZlci5iZWdpbigpKTsK
KyAgICAgICAgY29uc3QgdWludDhfdCogZW5kID0gZ2V0UHRyKGJ1ZmZlci5lbmQoKSk7CiAgICAg
ICAgIHVpbnQzMl90IHZlcnNpb247CiAgICAgICAgIGlmICghcmVhZExpdHRsZUVuZGlhbihwdHIs
IGVuZCwgdmVyc2lvbikgfHwgdmVyc2lvbiA+IEN1cnJlbnRWZXJzaW9uKQogICAgICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmlu
ZGV4IDg0NTI1YmVmOGUyM2FiMzI4OTJhNDgwYWQxMmQ2MGYwODQ2OTIyYTAuLjQyN2I2ZDIxYjQ5
N2U3NjYwN2JlMDNkNjMyMmExZmMyNjhjNjliYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5jcHAKQEAgLTIwNzMsMTEgKzIwNzMsMTEgQEAgaW5saW5lIGJvb2wgU2VhcmNo
QnVmZmVyOjppc0JhZE1hdGNoKGNvbnN0IFVDaGFyKiBtYXRjaCwgc2l6ZV90IG1hdGNoTGVuZ3Ro
KSBjb24KICAgICAvLyBjcmVhdGluZyBhIG5ldyBvbmUgZWFjaCB0aW1lLgogICAgIG5vcm1hbGl6
ZUNoYXJhY3RlcnMobWF0Y2gsIG1hdGNoTGVuZ3RoLCBtX25vcm1hbGl6ZWRNYXRjaCk7CiAKLSAg
ICBjb25zdCBVQ2hhciogYSA9IG1fbm9ybWFsaXplZFRhcmdldC5iZWdpbigpOwotICAgIGNvbnN0
IFVDaGFyKiBhRW5kID0gbV9ub3JtYWxpemVkVGFyZ2V0LmVuZCgpOworICAgIGNvbnN0IFVDaGFy
KiBhID0gZ2V0UHRyKG1fbm9ybWFsaXplZFRhcmdldC5iZWdpbigpKTsKKyAgICBjb25zdCBVQ2hh
ciogYUVuZCA9IGdldFB0cihtX25vcm1hbGl6ZWRUYXJnZXQuZW5kKCkpOwogCi0gICAgY29uc3Qg
VUNoYXIqIGIgPSBtX25vcm1hbGl6ZWRNYXRjaC5iZWdpbigpOwotICAgIGNvbnN0IFVDaGFyKiBi
RW5kID0gbV9ub3JtYWxpemVkTWF0Y2guZW5kKCk7CisgICAgY29uc3QgVUNoYXIqIGIgPSBnZXRQ
dHIobV9ub3JtYWxpemVkTWF0Y2guYmVnaW4oKSk7CisgICAgY29uc3QgVUNoYXIqIGJFbmQgPSBn
ZXRQdHIobV9ub3JtYWxpemVkTWF0Y2guZW5kKCkpOwogCiAgICAgd2hpbGUgKHRydWUpIHsKICAg
ICAgICAgLy8gU2tpcCBydW5zIG9mIG5vbi1rYW5hLWxldHRlciBjaGFyYWN0ZXJzLiBUaGlzIGlz
IG5lY2Vzc2FyeSBzbyB3ZSBjYW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFj
L1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9T
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCmluZGV4IDAwOThjNzYzMTNmNGNjNjYwZTk2OGE5
MGQzZTkzOGE4YjFiYmM5ZGUuLmY1ZWY5M2QxYWE0ODYyOTRiNmRmYWI0MTdhMjJiMWIyNmJjMTlj
OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5
Q29udHJvbGxlci5tbQpAQCAtNTU1LDcgKzU1NSw3IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGlnaHQoKQogCiAgICAgICAgIGlmICghY2dSZWN0
cy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIENHUmVjdCB2aXNpYmxlUmVjdCA9IG1haW5GcmFt
ZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwotICAgICAgICAgICAgUmV0YWluUHRyPERESGln
aGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCA9IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRoUmVj
dHNJblZpc2libGVSZWN0V2l0aFN0eWxlQW5kRGlyZWN0aW9uKG51bGxwdHIsIGNnUmVjdHMuYmVn
aW4oKSwgY2dSZWN0cy5zaXplKCksIHZpc2libGVSZWN0LCBEREhpZ2hsaWdodE5vT3V0bGluZVdp
dGhBcnJvdywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVTKSk7CisgICAg
ICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihE
REhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVBbmREaXJlY3Rp
b24obnVsbHB0ciwgZ2V0UHRyKGNnUmVjdHMuYmVnaW4oKSksIGNnUmVjdHMuc2l6ZSgpLCB2aXNp
YmxlUmVjdCwgRERIaWdobGlnaHROb091dGxpbmVXaXRoQXJyb3csIFlFUywgTlNXcml0aW5nRGly
ZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBuZXdQ
b3RlbnRpYWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZvclNlbGVjdGlvbigqdGhp
cywgZGRIaWdobGlnaHQsIHNlbGVjdGlvblJhbmdlKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNwcApp
bmRleCBkMWI5MmI3YjYwOWI0NTE5OWM4NGE0NmFlZTlmZGI2YzRmN2NmZWM1Li41MDNiMGU4ZDli
YmYyOTA2Y2U3M2JlYmViYTAxYmQ2MDNlYzc5OTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwCkBAIC0zOSw4ICsz
OSw4IEBAIFNlZ21lbnRlZEZvbnREYXRhOjp+U2VnbWVudGVkRm9udERhdGEoKQogCiBjb25zdCBT
aW1wbGVGb250RGF0YSogU2VnbWVudGVkRm9udERhdGE6OmZvbnREYXRhRm9yQ2hhcmFjdGVyKFVD
aGFyMzIgYykgY29uc3QKIHsKLSAgICBWZWN0b3I8Rm9udERhdGFSYW5nZT46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPEZvbnREYXRhUmFuZ2U+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgIGF1dG8gZW5kID0gbV9yYW5nZXMuZW5kKCk7CisgICAgZm9yIChhdXRvIGl0ID0gbV9y
YW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGlmIChpdC0+ZnJvbSgp
IDw9IGMgJiYgaXQtPnRvKCkgPj0gYykKICAgICAgICAgICAgIHJldHVybiBpdC0+Zm9udERhdGEo
KS5nZXQoKTsKICAgICB9CkBAIC00OSw4ICs0OSw4IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBT
ZWdtZW50ZWRGb250RGF0YTo6Zm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAog
CiBib29sIFNlZ21lbnRlZEZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcihVQ2hhcjMyIGMpIGNv
bnN0CiB7Ci0gICAgVmVjdG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3Jhbmdlcy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBhdXRv
IGVuZCA9IG1fcmFuZ2VzLmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IG1fcmFuZ2VzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoYyA+PSBpdC0+ZnJvbSgpICYmIGMg
PD0gaXQtPnRvKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03Niw4ICs3
Niw4IEBAIGJvb2wgU2VnbWVudGVkRm9udERhdGE6OmlzQ3VzdG9tRm9udCgpIGNvbnN0CiAKIGJv
b2wgU2VnbWVudGVkRm9udERhdGE6OmlzTG9hZGluZygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPEZv
bnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsKLSAgICBm
b3IgKFZlY3RvcjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jhbmdlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBhdXRvIGVuZCA9IG1fcmFuZ2VzLmVuZCgp
OworICAgIGZvciAoYXV0byBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewogICAgICAgICBpZiAoaXQtPmZvbnREYXRhKCktPmlzTG9hZGluZygpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCmluZGV4IDA1MTg3MWFjNmM2MGZiNjQzOTI4MzBhYWM2
YWQzODUyYTk0ZDQ0NzYuLmRkMDk2M2E3NTAxYWQyZWUwNjMxYTVlMTZkNzk1MTExMTIyMzlkNTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9y
bWF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZv
cm1hdC5jcHAKQEAgLTIwMCw3ICsyMDAsNyBAQCBib29sIGNvbnZlcnRXT0ZGVG9TZm50KFNoYXJl
ZEJ1ZmZlciogd29mZiwgVmVjdG9yPGNoYXI+JiBzZm50KQogICAgICAgICAgICAgdUxvbmdmIGRl
c3RMZW4gPSB0YWJsZU9yaWdMZW5ndGg7CiAgICAgICAgICAgICBpZiAoIXNmbnQudHJ5UmVzZXJ2
ZUNhcGFjaXR5KHNmbnQuc2l6ZSgpICsgdGFibGVPcmlnTGVuZ3RoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBCeXRlZiogZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Qnl0ZWYqPihzZm50LmVuZCgpKTsKKyAgICAgICAgICAgIEJ5dGVmKiBkZXN0ID0gcmVpbnRl
cnByZXRfY2FzdDxCeXRlZio+KGdldFB0cihzZm50LmVuZCgpKSk7CiAgICAgICAgICAgICBzZm50
Lmdyb3coc2ZudC5zaXplKCkgKyB0YWJsZU9yaWdMZW5ndGgpOwogICAgICAgICAgICAgaWYgKHVu
Y29tcHJlc3MoZGVzdCwgJmRlc3RMZW4sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQnl0ZWYqPih3
b2ZmLT5kYXRhKCkgKyB0YWJsZU9mZnNldCksIHRhYmxlQ29tcExlbmd0aCkgIT0gWl9PSykKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCmluZGV4IDFkNjUxYWZlMDE4Y2VjNGQ2MGFkNTQ2OTVjZjg1YTk3M2QzZjljYTQuLjc1
NzAzNmE2MDM1NWFiZDQxOWU1YTliYjM2YmM5ODY0N2RkNDNlYWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC0xNTc3LDggKzE1NzcsOCBAQCB2b2lkIFJlbmRlckJv
eDo6cGFpbnRGaWxsTGF5ZXJzKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBDb2xv
ciYgYywgY29ucwogICAgICAgICBjb250ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEpOwog
ICAgIH0KIAotICAgIFZlY3Rvcjxjb25zdCBGaWxsTGF5ZXIqPjo6Y29uc3RfcmV2ZXJzZV9pdGVy
YXRvciB0b3BMYXllciA9IGxheWVycy5yZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8Y29uc3QgRmls
bExheWVyKj46OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgaXQgPSBsYXllcnMucmJlZ2luKCk7IGl0
ICE9IHRvcExheWVyOyArK2l0KQorICAgIGF1dG8gdG9wTGF5ZXIgPSBsYXllcnMucmVuZCgpOwor
ICAgIGZvciAoYXV0byBpdCA9IGxheWVycy5yYmVnaW4oKTsgaXQgIT0gdG9wTGF5ZXI7ICsraXQp
CiAgICAgICAgIHBhaW50RmlsbExheWVyKHBhaW50SW5mbywgYywgKml0LCByZWN0LCBibGVlZEF2
b2lkYW5jZSwgb3AsIGJhY2tncm91bmRPYmplY3QsIGJhc2VCZ0NvbG9yVXNhZ2UpOwogCiAgICAg
aWYgKHNob3VsZERyYXdCYWNrZ3JvdW5kSW5TZXBhcmF0ZUJ1ZmZlcikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwCmlu
ZGV4IDBmMzYyYWVmYTFiYWY2MTExNGVmNGI0NDgxNzY3MDdiMmJlMjUzMGMuLmQ1OTRkZDg5Nzc5
YmY3ODIzMzU2ZjMyMDhkYzdmN2MyY2NhMTI1NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcApAQCAtMjk1LDcg
KzI5NSw3IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGZpcnN0TmFtZWRHcmlkTGluZUJlZm9yZVBv
c2l0aW9uKHNpemVfdCBwb3NpdGlvbiwgY29uc3QgVmVjCiAgICAgLy8gYWxyZWFkeSBjb252ZXJ0
ZWQgdG8gYW4gaW5kZXggaW4gb3VyIGdyaWQgcmVwcmVzZW50YXRpb24gKGllIG9uZSB3YXMgcmVt
b3ZlZCBmcm9tIHRoZSBncmlkIGxpbmUgdG8gYWNjb3VudCBmb3IKICAgICAvLyB0aGUgc2lkZSku
CiAgICAgc2l6ZV90IGZpcnN0TGluZUJlZm9yZVBvc2l0aW9uSW5kZXggPSAwOwotICAgIGNvbnN0
IHNpemVfdCogZmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gPSBzdGQ6Omxvd2VyX2JvdW5kKGdyaWRM
aW5lcy5iZWdpbigpLCBncmlkTGluZXMuZW5kKCksIHBvc2l0aW9uKTsKKyAgICBhdXRvIGZpcnN0
TGluZUJlZm9yZVBvc2l0aW9uID0gc3RkOjpsb3dlcl9ib3VuZChncmlkTGluZXMuYmVnaW4oKSwg
Z3JpZExpbmVzLmVuZCgpLCBwb3NpdGlvbik7CiAgICAgaWYgKGZpcnN0TGluZUJlZm9yZVBvc2l0
aW9uICE9IGdyaWRMaW5lcy5lbmQoKSkgewogICAgICAgICBpZiAoKmZpcnN0TGluZUJlZm9yZVBv
c2l0aW9uID4gcG9zaXRpb24gJiYgZmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gIT0gZ3JpZExpbmVz
LmJlZ2luKCkpCiAgICAgICAgICAgICAtLWZpcnN0TGluZUJlZm9yZVBvc2l0aW9uOwpAQCAtMzE3
LDcgKzMxNyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxHcmlkU3Bhbj4gR3JpZFJlc29sdmVkUG9zaXRp
b246OnJlc29sdmVSb3dTdGFydENvbHVtblN0YXJ0TmFtZWRHCiBzdGQ6OnVuaXF1ZV9wdHI8R3Jp
ZFNwYW4+IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlUm93RW5kQ29sdW1uRW5kTmFtZWRH
cmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oY29uc3QgR3JpZFJlc29sdmVk
UG9zaXRpb24mIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgY29uc3QgR3JpZFBvc2l0aW9uJiBw
b3NpdGlvbiwgY29uc3QgVmVjdG9yPHNpemVfdD4mIGdyaWRMaW5lcykKIHsKICAgICBzaXplX3Qg
Zmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uSW5kZXggPSBncmlkTGluZXMuc2l6ZSgpIC0g
MTsKLSAgICBjb25zdCBzaXplX3QqIGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbiA9IHN0
ZDo6dXBwZXJfYm91bmQoZ3JpZExpbmVzLmJlZ2luKCksIGdyaWRMaW5lcy5lbmQoKSwgcmVzb2x2
ZWRPcHBvc2l0ZVBvc2l0aW9uKTsKKyAgICBhdXRvIGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3Np
dGlvbiA9IHN0ZDo6dXBwZXJfYm91bmQoZ3JpZExpbmVzLmJlZ2luKCksIGdyaWRMaW5lcy5lbmQo
KSwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKTsKICAgICBpZiAoZmlyc3RMaW5lQWZ0ZXJPcHBv
c2l0ZVBvc2l0aW9uICE9IGdyaWRMaW5lcy5lbmQoKSkKICAgICAgICAgZmlyc3RMaW5lQWZ0ZXJP
cHBvc2l0ZVBvc2l0aW9uSW5kZXggPSBmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb24gLSBn
cmlkTGluZXMuYmVnaW4oKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zv
bnRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAKaW5k
ZXggYzMzZmZiNzdiNmQ4Zjk5NTdiMTI2ZjFiZjM5MTdhODU3ZmRmYjUwZS4uYTBiZjUwMTkxYjZh
Yjk1ODE2MThkOTUzYzA4OTBkMjEyZWI3YjM2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZvbnRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEVs
ZW1lbnQuY3BwCkBAIC0yNTIsMzEgKzI1MiwzMSBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IGtlcm5p
bmdGb3JQYWlyT2ZTdHJpbmdzQW5kR2x5cGhzKGNvbnN0IFNWR0tlcm5pbmdNYXAmIGtlcm5pbgog
ewogICAgIGlmICghZzEuaXNFbXB0eSgpICYmIGtlcm5pbmdNYXAuZ2x5cGhNYXAuY29udGFpbnMo
ZzEpKSB7CiAgICAgICAgIFNWR0tlcm5pbmdWZWN0b3IqIGtlcm5pbmdWZWN0b3IgPSBrZXJuaW5n
TWFwLmdseXBoTWFwLmdldChnMSk7Ci0gICAgICAgIFNWR0tlcm5pbmdWZWN0b3I6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0ga2VybmluZ1ZlY3Rvci0+ZW5kKCkgLSAxOwotICAgICAgICBjb25zdCBTVkdL
ZXJuaW5nVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbiA9IGtlcm5pbmdWZWN0b3ItPmJlZ2lu
KCkgLSAxOwotICAgICAgICBmb3IgKDsgaXQgIT0gYmVnaW47IC0taXQpIHsKLSAgICAgICAgICAg
IGlmIChtYXRjaGVzKHUyLCBnMiwgKml0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaXQtPmtl
cm5pbmc7CisgICAgICAgIHNpemVfdCBpdCA9IGtlcm5pbmdWZWN0b3ItPnNpemUoKTsKKyAgICAg
ICAgd2hpbGUgKGl0LS0gPiAwKSB7CisgICAgICAgICAgICBhdXRvJiB2YWx1ZSA9IGtlcm5pbmdW
ZWN0b3ItPmF0KGl0KTsKKyAgICAgICAgICAgIGlmIChtYXRjaGVzKHUyLCBnMiwgdmFsdWUpKQor
ICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5rZXJuaW5nOwogICAgICAgICB9CiAgICAgfQog
CiAgICAgaWYgKCF1MS5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKGtlcm5pbmdNYXAudW5pY29k
ZU1hcC5jb250YWlucyh1MSkpIHsKICAgICAgICAgICAgIFNWR0tlcm5pbmdWZWN0b3IqIGtlcm5p
bmdWZWN0b3IgPSBrZXJuaW5nTWFwLnVuaWNvZGVNYXAuZ2V0KHUxKTsKLSAgICAgICAgICAgIFNW
R0tlcm5pbmdWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0ga2VybmluZ1ZlY3Rvci0+ZW5kKCkg
LSAxOwotICAgICAgICAgICAgY29uc3QgU1ZHS2VybmluZ1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3Ig
YmVnaW4gPSBrZXJuaW5nVmVjdG9yLT5iZWdpbigpIC0gMTsKLSAgICAgICAgICAgIGZvciAoOyBp
dCAhPSBiZWdpbjsgLS1pdCkgewotICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzKHUyLCBnMiwg
Kml0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXJuaW5nOworICAgICAgICAg
ICAgc2l6ZV90IGl0ID0ga2VybmluZ1ZlY3Rvci0+c2l6ZSgpOworICAgICAgICAgICAgd2hpbGUg
KGl0LS0gPiAwKSB7CisgICAgICAgICAgICAgICAgYXV0byYgdmFsdWUgPSBrZXJuaW5nVmVjdG9y
LT5hdChpdCk7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXModTIsIGcyLCB2YWx1ZSkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5rZXJuaW5nOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKCFrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VN
YXAuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBWZWN0b3I8U1ZHS2VybmluZ1BhaXI+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IGtlcm5pbmdNYXAua2VybmluZ1VuaWNvZGVSYW5nZU1hcC5lbmQoKSAt
IDE7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZHS2VybmluZ1BhaXI+Ojpjb25zdF9pdGVy
YXRvciBiZWdpbiA9IGtlcm5pbmdNYXAua2VybmluZ1VuaWNvZGVSYW5nZU1hcC5iZWdpbigpIC0g
MTsKLSAgICAgICAgICAgIGZvciAoOyBpdCAhPSBiZWdpbjsgLS1pdCkgewotICAgICAgICAgICAg
ICAgIGlmIChtYXRjaGVzKHUxLCB1MiwgZzIsICppdCkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBpdC0+a2VybmluZzsKKyAgICAgICAgICAgIHNpemVfdCBpdCA9IGtlcm5pbmdNYXAua2Vy
bmluZ1VuaWNvZGVSYW5nZU1hcC5zaXplKCk7CisgICAgICAgICAgICB3aGlsZSAoaXQtLSA+IDAp
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiB2YWx1ZSA9IGtlcm5pbmdNYXAua2VybmluZ1VuaWNv
ZGVSYW5nZU1hcFtpdF07CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXModTEsIHUyLCBnMiwg
dmFsdWUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUua2VybmluZzsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3Ry
ZWFtLmgKaW5kZXggOWQ5ZDJhMmIyM2M2MDBmZWJiNTM0MGNiY2RkMWI2MWRkYzNiOWYxNS4uYjk5
OTU1NDk0MzlhYzk2NGFiM2U2N2EzMGYwZDg5ZDhjMzU4YWNhMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhCeXRlU3RyZWFtLmgKQEAgLTYwLDggKzYwLDggQEAgcHVibGljOgogICAgIHZvaWQg
YXBwZW5kKHVuc2lnbmVkIGNoYXIgYnl0ZSkgeyBtX2RhdGEuYXBwZW5kKGJ5dGUpOyB9CiAgICAg
dm9pZCBhcHBlbmQoU1ZHUGF0aEJ5dGVTdHJlYW0qIG90aGVyKQogICAgIHsKLSAgICAgICAgZm9y
IChEYXRhSXRlcmF0b3IgaXQgPSBvdGhlci0+YmVnaW4oKTsgaXQgIT0gb3RoZXItPmVuZCgpOyAr
K2l0KQotICAgICAgICAgICAgYXBwZW5kKCppdCk7CisgICAgICAgIGZvciAoYXV0byYgYnl0ZSA6
ICpvdGhlcikKKyAgICAgICAgICAgIGFwcGVuZChieXRlKTsKICAgICB9CiAgICAgdm9pZCBjbGVh
cigpIHsgbV9kYXRhLmNsZWFyKCk7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biAhbV9kYXRhLnNpemUoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRo
Tm9kZVNldC5oIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9kZVNldC5oCmluZGV4IDNkODli
OGQ1MDg3YTg2Y2ZlYWZmYzAxNDBiNjk0NzYyYzA5NWRkZGYuLmRhZjJiOTNkNTFiNWFmNmI3MzRm
NWY5YTc2NTQxMzY5ZTA0MTRhMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0
aE5vZGVTZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmgKQEAgLTY0
LDggKzY0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgdm9pZCBtYXJrU3Vi
dHJlZXNEaXNqb2ludChib29sIGRpc2pvaW50KSB7IG1fc3VidHJlZXNBcmVEaXNqb2ludCA9IGRp
c2pvaW50OyB9CiAgICAgICAgICAgICBib29sIHN1YnRyZWVzQXJlRGlzam9pbnQoKSBjb25zdCB7
IHJldHVybiBtX3N1YnRyZWVzQXJlRGlzam9pbnQgfHwgbV9ub2Rlcy5zaXplKCkgPCAyOyB9CiAK
LSAgICAgICAgICAgIGNvbnN0IFJlZlB0cjxOb2RlPiogYmVnaW4oKSBjb25zdCB7IHJldHVybiBt
X25vZGVzLmJlZ2luKCk7IH0KLSAgICAgICAgICAgIGNvbnN0IFJlZlB0cjxOb2RlPiogZW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9ub2Rlcy5lbmQoKTsgfQorICAgICAgICAgICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxOb2RlPj46Oml0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rlcy5i
ZWdpbigpOyB9CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+Pjo6aXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rlcy5lbmQoKTsgfQogCiAgICAgICAgIHByaXZh
dGU6CiAgICAgICAgICAgICB2b2lkIHRyYXZlcnNhbFNvcnQoKSBjb25zdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241869</attachid>
            <date>2014-11-19 10:51:23 -0800</date>
            <delta_ts>2014-11-19 16:27:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138821-20141119105137.patch</filename>
            <type>text/plain</type>
            <size>67165</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2MzI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
YjZhNjBkNjJlYTk2ZjY0NjJjMzVmNDk2MDYxNGUwYjJmN2I2NzBlLi4zZjJhZjVhOWM3ZWI2Y2Nl
MmI5YzMzMWU2NGM1MDVjNmRmYzcxZDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNiBAQAorMjAxNC0xMS0xNyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3Rp
bGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGVyZSBhcmUgYSBmZXcgdXNlcyBvZiBiZWdpbigpL2VuZCgp
IHRoYXQgZXhwbGljaXRseSByZXF1aXJlIHBvaW50ZXJzLAorICAgICAgICBzbyB3ZSB1c2UgZ2V0
UHRyKCkgdG8gZXh0cmFjdCB0aGUgdW5kZXJseWluZyBwb2ludGVyIGdlbmVyaWNhbGx5LgorCisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRDb21wbGV4UG9wU2NvcGVzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVt
cCk6CisgICAgICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6RlRM
OjptZE5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkQ2FsbCk6CisgICAgICAgICogbGxp
bnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBlcmZvcm1Bc3Nl
cnRpb25zKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlNjb3Bl
OjpTY29wZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwOgorICAgICAgICAo
SlNDOjpQcm9maWxlTm9kZTo6ZGVidWdQcmludFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3Rvcik6
CisgICAgICAgICogdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2Zp
bGVUcmVlTm9kZTo6ZHVtcEludGVybmFsKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgor
ICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjptYXRjaENoYXJhY3RlckNsYXNzKToK
KwogMjAxNC0xMS0xOCAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOiBTd2l0Y2ggZnJvbSB1c2luZyBQTEFURk9STV9O
QU1FIHRvIFNESyBzZWxlY3RvcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggNTUxYTZiNmQ5NjkzOGY4YmMzYjYwM2ExM2UxMDBk
ODY0YzFkYjgzZS4uMjcxODkzM2IyNTNkZWQyMmQzMmIyNGQ3OGRlNDAwNWM2MmQxN2ZhZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw5OCBAQAorMjAxNC0xMS0xNyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUu
Y29tPgorCisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9y
PD4gc3RpbGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgSW5kZXhlZEl0ZXJhdG9yIHN0cnVj
dCB0byBXVEYgdGhhdCB3cmFwcyBhCisgICAgICAgIFZlY3RvciB0eXBlIGFuZCBpbmRleCB0byBw
cm92aWRlIHBvaW50ZXIgbGlrZSBzZW1hbnRpY3MKKyAgICAgICAgd2hpbGUgc3RpbGwgcGVyZm9y
bWluZyBydW50aW1lIGJvdW5kcyBjaGVja2luZywgZXZlbiBpbgorICAgICAgICByZWxlYXNlIGJ1
aWxkcy4gV2Ugc3RvcmUgYSBzaW1wbGUgaW5kZXggaW50byB0aGUgdmVjdG9yCisgICAgICAgIHdo
aWNoIG1lYW5zIHRoYXQgdGhpcyBpdGVyYXRvciBhbGxvd3MgdmVjdG9yIHJlc2l6aW5nCisgICAg
ICAgIGR1cmluZyBpdGVyYXRpb24uIElmIHRoZSB2ZWN0b3IgaXMgcmVzaXplZCBzdWNoIHRoYXQg
dGhlCisgICAgICAgIGl0ZXJhdG9yIGlzIG91dCBvZiBib3VuZHMsIHRoZW4gYW55IGF0dGVtcHQg
dG8gZGVyZWZlcmVuY2UKKyAgICAgICAgdGhlIGl0ZXJhdG9yIHdpbGwgY3Jhc2ggc2FmZWx5LiBB
bnkgb3RoZXIgZXJyb3JzLCBpbmNsdWRpbmcKKyAgICAgICAgb3ZlcmZsb3dzLCBhbmQgb3ZlciBl
eHRlbmRpbmcgdGhlIGl0ZXJhdG9yIHdpbGwgbGlrZXdpc2UKKyAgICAgICAgY3Jhc2guCisKKyAg
ICAgICAgRm9yIHRoZSBwdXJwb3NlIG9mIHJldGFpbmluZyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVu
dAorICAgICAgICBiZWhhdmlvdXIsIHRoZSBpdGVyYXRvciBjYW4gYmUgbW92ZWQgdG8gbV9pbmRl
eCA9PSBzaXplKCkKKyAgICAgICAgYXMgdGhhdCBpcyB0aGUgc3RhbmRhcmQgImVuZCIgdGVybWlu
YXRvciBmb3IgdGhlc2UgdHlwZXMuCisgICAgICAgIEF0dGVtcHRpbmcgdG8gZGVyZWZlcmVuY2Ug
YXQgdGhhdCBwb2ludCB3aWxsIHN0aWxsIGNyYXNoCisgICAgICAgIHJhdGhlciB0aGFuIHBlcmZv
cm0gYW4gdW5zYWZlIG1lbW9yeSBvcGVyYXRpb24uCisKKyAgICAgICAgSW4gb3JkZXIgdG8gbWFp
bnRhaW4gdGhlIHZhbGlkaXR5IG9mIGFsbCB0aGUgYm91bmRzIGNoZWNraW5nLAorICAgICAgICB3
ZSBwZXJmb3JtIGZ1bGwgaW50ZWdlciByYW5nZSBjaGVja2luZyBwcmlvciB0byBhbnkgbXV0YXRp
b24KKyAgICAgICAgb2YgdGhlIGl0ZXJhdG9yIGxvY2F0aW9uLiBJZiB3ZSBkZXRlY3QgYW4gYXJp
dGhtZXRpYyBvdmVyZmxvdworICAgICAgICB3ZSB3aWxsIGNyYXNoIHJhdGhlciB0aGFuIGF0dGVt
cHRpbmcgdG8gY2Fycnkgb24uCisKKyAgICAgICAgQnkgbmVjZXNzaXR5IHRoZXJlIGFyZSBtYW55
IG92ZXJyaWRlcyBmb3Igb3BlcmF0b3IgKyBhbmQgLSBhcworICAgICAgICB3ZSBvdGhlcndpc2Ug
aGl0IG1hbnkgZGlmZmVyZW50IHR5cGUgcHJvbW90aW9uIGFtYmlndWl0aWVzIHdoZW4KKyAgICAg
ICAgcGVyZm9ybWluZyBhcml0aG1ldGljIHdpdGggaXRlcmF0b3JzLiBUaGVzZSBhbWJpZ3VpdGll
cyBhcmUgYWxzbworICAgICAgICBkaWZmZXJlbnQgZm9yIDMyLSB2cy4gNjQtYml0LCBzbyBkdXBs
aWNhdGluZyB0aGUgZnVuY3Rpb25zCisgICAgICAgIGFuZCB0aGVuIGZvcndhcmRpbmcgdG8gdGhl
IGNvcmUgaW1wbGVtZW50YXRpb25zIHRoYXQgcGVyZm9ybWVkCisgICAgICAgIHRoZSBib3VuZHMg
Y2hlY2tpbmcgYW5kIG11dGF0aW9uIHNlZW1lZCBsaWtlIHRoZSByaWdodCBjYWxsLgorCisgICAg
ICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0luZGV4
ZWRJdGVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpJbmRl
eGVkSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yLT4p
OgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChX
VEY6OkluZGV4ZWRJdGVyYXRvcjo6Z2V0KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9y
OjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvci0t
KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvciBVbnNwZWNpZmllZEJv
b2xUeXBlKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcis9KToKKyAg
ICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvci09KToKKyAgICAgICAgKFdURjo6
SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcispOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0
b3I6Om9wZXJhdG9yLSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3I9
KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6SW5kZXhl
ZEl0ZXJhdG9yOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9w
ZXJhdG9yPD0pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPik6Cisg
ICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3I+PSk6CisgICAgICAgIChXVEY6
OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IgY29uc3RfaXRlcmF0b3IpOgorICAgICAgICAoV1RG
OjpJbmRleGVkSXRlcmF0b3I6OmlzU2FmZVRvQ29tcGFyZSk6CisgICAgICAgIChXVEY6OkluZGV4
ZWRJdGVyYXRvcjo6dW5zYWZlR2V0KToKKyAgICAgICAgKFdURjo6Z2V0UHRyKToKKyAgICAgICAg
KFdURjo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChX
VEY6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcjw9KToKKyAgICAgICAgKFdU
Rjo6b3BlcmF0b3I+PSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPCk6CisgICAgICAgIChXVEY6
Om9wZXJhdG9yPik6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvclNlbGVjdG9yOjptYWtl
SXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3JTZWxlY3Rvcjo6bWFrZUNv
bnN0SXRlcmF0b3IpOgorICAgICAgICAqIHd0Zi9SZWZDb3VudGVkQXJyYXkuaDoKKyAgICAgICAg
KFdURjo6UmVmQ291bnRlZEFycmF5OjpSZWZDb3VudGVkQXJyYXkpOgorICAgICAgICAqIHd0Zi9W
ZWN0b3IuaDoKKyAgICAgICAgKFdURjo6VmVjdG9yOjpWZWN0b3IpOgorICAgICAgICAoV1RGOjpW
ZWN0b3I6OmJlZ2luKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjplbmQpOgorICAgICAgICAoV1RG
OjpPdmVyZmxvd0hhbmRsZXI+OjpWZWN0b3IpOgorICAgICAgICAoV1RGOjo9KToKKyAgICAgICAg
KFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6ZmlsbCk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFu
ZGxlcj46OmV4cGFuZENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6
dHJ5RXhwYW5kQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpyZXNp
emUpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpzaHJpbmspOgorICAgICAgICAo
V1RGOjpPdmVyZmxvd0hhbmRsZXI+Ojpncm93KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5k
bGVyPjo6cmVzZXJ2ZUNhcGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6
dHJ5UmVzZXJ2ZUNhcGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6c2hy
aW5rQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmQpOgor
ICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+Ojp0cnlBcHBlbmQpOgorICAgICAgICAoV1RG
OjpPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmRTbG93Q2FzZSk6CisgICAgICAgIChXVEY6Ok92ZXJm
bG93SGFuZGxlcj46OnVuY2hlY2tlZEFwcGVuZCk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFu
ZGxlcj46OmFwcGVuZFZlY3Rvcik6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46Omlu
c2VydCk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46Omluc2VydFZlY3Rvcik6Cisg
ICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnJlbW92ZSk6CisKIDIwMTQtMTEtMTggIENo
cmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBIYXZlIFZlY3Rvcjo6Y2Fw
YWNpdHkoKSByZXR1cm4gYW4gdW5zaWduZWQgaW5zdGVhZCBvZiBhIHNpemVfdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDYxMDM2YWQyNGU0Zjk0Y2ExNjE3MDc3Yjk5ZmE4Zjk5NmUyNGMyM2UuLjAwYjMxNzgxZTI0
NmNjMTNjZTcyNjg3ZmJiNWQ4NzhlNDcyMjY4NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBA
QAorMjAxNC0xMS0xNyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3RpbGwgcmVjZWl2
ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGVyZSBhcmUgYSBmZXcgdXNlcyBvZiBiZWdpbigpL2VuZCgpIHRoYXQgZXhw
bGljaXRseSByZXF1aXJlIHBvaW50ZXJzLAorICAgICAgICBzbyB3ZSB1c2UgZ2V0UHRyKCkgdG8g
ZXh0cmFjdCB0aGUgdW5kZXJseWluZyBwb2ludGVyIGdlbmVyaWNhbGx5LgorCisgICAgICAgICog
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZVN0cmluZyk6CisgICAgICAgICogZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoQnVmZmVyOjppc0Jh
ZE1hdGNoKToKKyAgICAgICAgKiBwYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1t
OgorICAgICAgICAoV2ViQ29yZTo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxl
Y3Rpb25IaWdobGlnaHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZv
bnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZEZvbnREYXRhOjpmb250RGF0
YUZvckNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6Y29u
dGFpbnNDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkRm9udERhdGE6Omlz
TG9hZGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFdPRkZUb1NmbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwYWludEZp
bGxMYXllcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaXJzdE5hbWVkR3JpZExpbmVCZWZvcmVQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZVJvd0Vu
ZENvbHVtbkVuZE5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKToK
KyAgICAgICAgKiBzdmcvU1ZHRm9udEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6a2Vy
bmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoQnl0
ZVN0cmVhbS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW06OmFwcGVuZCk6
CisgICAgICAgICogeG1sL1hQYXRoTm9kZVNldC5oOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6
Ok5vZGVTZXQ6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOb2RlU2V0OjplbmQp
OgorCiAyMDE0LTExLTE5ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4K
IAogICAgICAgICBNaXNzaW5nIE5VTEwtY2hlY2sgaW4gVmlkZW9UcmFjazo6c2V0TGFuZ3VhZ2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suY3BwCmluZGV4IDZjMjkzY2NmOThkNTY3MzI2ZGM0MmZhYmQ1ZGZhNDFkMjNmNmMyYzEuLjYz
NWFjZDJjYmIzOGU3OGE2MDgzYjYxZTU4ZGJhMWI0N2NiNzllOWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApAQCAtMjM0
LDkgKzIzNCw5IEBAIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRo
aXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3N5
bWJvbFRhYmxlKTsKICAgICBmb3IgKEZ1bmN0aW9uRXhwcmVzc2lvblZlY3Rvcjo6aXRlcmF0b3Ig
cHRyID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkRlY2xzLmJlZ2luKCksIGVuZCA9IHRoaXNPYmpl
Y3QtPm1fZnVuY3Rpb25EZWNscy5lbmQoKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgIHZp
c2l0b3IuYXBwZW5kKHB0cik7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKFdURjo6Z2V0UHRyKHB0
cikpOwogICAgIGZvciAoRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yOjppdGVyYXRvciBwdHIgPSB0
aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRXhwcnMuYmVnaW4oKSwgZW5kID0gdGhpc09iamVjdC0+bV9m
dW5jdGlvbkV4cHJzLmVuZCgpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgdmlzaXRvci5h
cHBlbmQocHRyKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoV1RGOjpnZXRQdHIocHRyKSk7CiAg
ICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+bV9jb25zdGFudFJlZ2lzdGVycy5k
YXRhKCksIHRoaXNPYmplY3QtPm1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKICAgICBpZiAo
dGhpc09iamVjdC0+bV9yYXJlRGF0YSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgZW5k
ID0gdGhpc09iamVjdC0+bV9yYXJlRGF0YS0+bV9yZWdleHBzLnNpemUoKTsgaSAhPSBlbmQ7IGkr
KykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAKaW5kZXggYjIxMzRlZjdhNTA5YjczNjllM2QyYzA1NjYyYzIxYjg0
NzA3ZmY1Yy4uOGZkOGEwZTJiNjRmNjAxNGY2MzMxNTNlZDE5ODA3OTVlMWJjNWRiMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAKQEAgLTIyNjMsOCArMjI2Myw4IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRDb21wbGV4UG9wU2NvcGVzKFJlZ2lzdGVySUQqIHNjb3BlLCBDb250cm9sRmxvd0NvbnRl
CiAgICAgICAgICAgICBpbnQgdG9wU2NvcGVJbmRleCA9IC0xOwogICAgICAgICAgICAgaW50IGJv
dHRvbVNjb3BlSW5kZXggPSAtMTsKICAgICAgICAgICAgIGlmIChmbGlwU2NvcGVzKSB7Ci0gICAg
ICAgICAgICAgICAgdG9wU2NvcGVJbmRleCA9IHRvcFNjb3BlIC0gbV9zY29wZUNvbnRleHRTdGFj
ay5iZWdpbigpOwotICAgICAgICAgICAgICAgIGJvdHRvbVNjb3BlSW5kZXggPSBib3R0b21TY29w
ZSAtIG1fc2NvcGVDb250ZXh0U3RhY2suYmVnaW4oKTsKKyAgICAgICAgICAgICAgICB0b3BTY29w
ZUluZGV4ID0gdG9wU2NvcGUgLSBnZXRQdHIobV9zY29wZUNvbnRleHRTdGFjay5iZWdpbigpKTsK
KyAgICAgICAgICAgICAgICBib3R0b21TY29wZUluZGV4ID0gYm90dG9tU2NvcGUgLSBnZXRQdHIo
bV9zY29wZUNvbnRleHRTdGFjay5iZWdpbigpKTsKICAgICAgICAgICAgICAgICBzYXZlZFNjb3Bl
Q29udGV4dFN0YWNrID0gbV9zY29wZUNvbnRleHRTdGFjazsKICAgICAgICAgICAgICAgICBtX3Nj
b3BlQ29udGV4dFN0YWNrLnNocmluayhmaW5hbGx5Q29udGV4dC5zY29wZUNvbnRleHRTdGFja1Np
emUpOwogICAgICAgICAgICAgfQpAQCAtMjMwOCw3ICsyMzA4LDcgQEAgdm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMoUmVnaXN0ZXJJRCogc2NvcGUsIENvbnRyb2xG
bG93Q29udGUKICAgICAgICAgICAgIGlmIChmbGlwU2NvcGVzKSB7CiAgICAgICAgICAgICAgICAg
bV9zY29wZUNvbnRleHRTdGFjayA9IHNhdmVkU2NvcGVDb250ZXh0U3RhY2s7CiAgICAgICAgICAg
ICAgICAgdG9wU2NvcGUgPSAmbV9zY29wZUNvbnRleHRTdGFja1t0b3BTY29wZUluZGV4XTsgLy8g
YXNzZXJ0IGl0J3Mgd2l0aGluIGJvdW5kcwotICAgICAgICAgICAgICAgIGJvdHRvbVNjb3BlID0g
bV9zY29wZUNvbnRleHRTdGFjay5iZWdpbigpICsgYm90dG9tU2NvcGVJbmRleDsgLy8gZG9uJ3Qg
YXNzZXJ0LCBzaW5jZSBpdCB0aGUgaW5kZXggbWlnaHQgYmUgLTEuCisgICAgICAgICAgICAgICAg
Ym90dG9tU2NvcGUgPSBXVEY6OmdldFB0cihtX3Njb3BlQ29udGV4dFN0YWNrLmJlZ2luKCkpICsg
Ym90dG9tU2NvcGVJbmRleDsgLy8gZG9uJ3QgYXNzZXJ0LCBzaW5jZSBpdCB0aGUgaW5kZXggbWln
aHQgYmUgLTEuCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoZmxpcFN3aXRjaGVzKQog
ICAgICAgICAgICAgICAgIG1fc3dpdGNoQ29udGV4dFN0YWNrID0gc2F2ZWRTd2l0Y2hDb250ZXh0
U3RhY2s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCmluZGV4IGYwNzI0ZGY0NzAzOTQ5YjMwZDI0ZTM2YWE4MmU3NzhhNWNiOWJmNzMuLjgyMDlm
NWZhMDIwZGU2MzUyNmI4ZmZiNjdhZTZmYTVmMTFkNWYxNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC00OTEwLDcgKzQ5MTAsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVtcCgKICAgICBhZGRCcmFuY2go
CiAgICAgICAgIG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsIHZhbHVl
LCBJbW0zMih0YWJsZS5jdGlPZmZzZXRzLnNpemUoKSkpLAogICAgICAgICBkYXRhLT5mYWxsVGhy
b3VnaC5ibG9jayk7Ci0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHRhYmxlLmN0aU9mZnNl
dHMuYmVnaW4oKSksIHNjcmF0Y2gpOworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihnZXRQ
dHIodGFibGUuY3RpT2Zmc2V0cy5iZWdpbigpKSksIHNjcmF0Y2gpOwogICAgIG1faml0LmxvYWRQ
dHIoSklUQ29tcGlsZXI6OkJhc2VJbmRleChzY3JhdGNoLCB2YWx1ZSwgSklUQ29tcGlsZXI6OnRp
bWVzUHRyKCkpLCBzY3JhdGNoKTsKICAgICBtX2ppdC5qdW1wKHNjcmF0Y2gpOwogICAgIGRhdGEt
PmRpZFVzZUp1bXBUYWJsZSA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QWJicmV2aWF0aW9ucy5oCmluZGV4IGZjN2NiMWIyNTQzMjY5NGFhZWU4ZmJmMzE1M2U2ZTA4YTgz
MzJmMzkuLmM3YjFkYTk2OTllNDA3YjVkNjgzOWUwMWRjN2U2M2YxMGNmODM3NjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCkBAIC0xMjAsNyArMTIw
LDcgQEAgc3RhdGljIGlubGluZSBMVmFsdWUgbWRTdHJpbmcoTENvbnRleHQgY29udGV4dCwgY29u
c3QgY2hhciogc3RyaW5nLCB1bnNpZ25lZCBsZW4KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kU3Ry
aW5nKExDb250ZXh0IGNvbnRleHQsIGNvbnN0IGNoYXIqIHN0cmluZykgeyByZXR1cm4gbWRTdHJp
bmcoY29udGV4dCwgc3RyaW5nLCBzdGQ6OnN0cmxlbihzdHJpbmcpKTsgfQogc3RhdGljIGlubGlu
ZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQsIExWYWx1ZSogYXJncywgdW5zaWduZWQg
bnVtQXJncykgeyByZXR1cm4gbGx2bS0+TUROb2RlSW5Db250ZXh0KGNvbnRleHQsIGFyZ3MsIG51
bUFyZ3MpOyB9CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPgotc3RhdGljIGlubGluZSBM
VmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQsIGNvbnN0IFZlY3RvclR5cGUmIHZlY3Rvcikg
eyByZXR1cm4gbWROb2RlKGNvbnRleHQsIGNvbnN0X2Nhc3Q8TFZhbHVlKj4odmVjdG9yLmJlZ2lu
KCkpLCB2ZWN0b3Iuc2l6ZSgpKTsgfQorc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250
ZXh0IGNvbnRleHQsIGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvcikgeyByZXR1cm4gbWROb2RlKGNv
bnRleHQsIGNvbnN0X2Nhc3Q8TFZhbHVlKj4oZ2V0UHRyKHZlY3Rvci5iZWdpbigpKSksIHZlY3Rv
ci5zaXplKCkpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29udGV4
dCkgeyByZXR1cm4gbWROb2RlKGNvbnRleHQsIDAsIDApOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1
ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwgTFZhbHVlIGFyZzEpIHsgcmV0dXJuIG1kTm9kZShj
b250ZXh0LCAmYXJnMSwgMSk7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4
dCBjb250ZXh0LCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIpCkBAIC0yODgsNyArMjg4LDcgQEAg
c3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBm
dW5jdGlvbiwgY29uc3QgTFZhbHVlKgogdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KIGlu
bGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwg
Y29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKQogewotICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRl
ciwgZnVuY3Rpb24sIHZlY3Rvci5iZWdpbigpLCB2ZWN0b3Iuc2l6ZSgpKTsKKyAgICByZXR1cm4g
YnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBnZXRQdHIodmVjdG9yLmJlZ2luKCkpLCB2ZWN0
b3Iuc2l6ZSgpKTsKIH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBi
dWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24pCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnREYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludERhdGEuY3BwCmluZGV4IDY5MTlhZWFiMDBhMWIyNWM0NzViYmY5ZGQyNWM2ODhmMGFhNThh
NzIuLjMxYmE0YjBjODBiNjNlOWE3N2M4MTViNDdkMWU1ZDNmYWExZjUyNzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgdm9p
ZCBEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyhWTSYgdm0pCiAgICAgVmVjdG9yPGludD4gdGVzdFZl
Y3RvcjsKICAgICB0ZXN0VmVjdG9yLnJlc2l6ZSg0Mik7CiAgICAgQVNTRVJUKGJpdHdpc2VfY2Fz
dDx1aW50MzJfdCo+KCZ0ZXN0VmVjdG9yKVtzaXplb2Yodm9pZCopL3NpemVvZih1aW50MzJfdCkg
KyAxXSA9PSA0Mik7Ci0gICAgQVNTRVJUKGJpdHdpc2VfY2FzdDxpbnQqKj4oJnRlc3RWZWN0b3Ip
WzBdID09IHRlc3RWZWN0b3IuYmVnaW4oKSk7CisgICAgQVNTRVJUKGJpdHdpc2VfY2FzdDxpbnQq
Kj4oJnRlc3RWZWN0b3IpWzBdID09IGdldFB0cih0ZXN0VmVjdG9yLmJlZ2luKCkpKTsKICNlbmRp
ZgogCiAgICAgQVNTRVJUKFN0cmluZ0ltcGw6OnNfaGFzaEZsYWc4Qml0QnVmZmVyID09IDMyKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCmluZGV4IDQ1MmY3MDQ2ZjMwMjJkMzg4
MTA5YWViZGM4NDM4NGUxYWEyMmZmYTEuLjAxZmNjZGI3ZTM4YWM1YTYwMjJjNjhjOTdiOGQ4ZWIz
YjBjZWMxODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaApAQCAtMTMwLDEx
ICsxMzAsOCBAQCBzdHJ1Y3QgU2NvcGUgewogICAgIHsKICAgICAgICAgaWYgKHJocy5tX2xhYmVs
cykgewogICAgICAgICAgICAgbV9sYWJlbHMgPSBhZG9wdFB0cihuZXcgTGFiZWxTdGFjayk7Ci0K
LSAgICAgICAgICAgIHR5cGVkZWYgTGFiZWxTdGFjazo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7
Ci0gICAgICAgICAgICBpdGVyYXRvciBlbmQgPSByaHMubV9sYWJlbHMtPmVuZCgpOwotICAgICAg
ICAgICAgZm9yIChpdGVyYXRvciBpdCA9IHJocy5tX2xhYmVscy0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICAgICAgICAgIG1fbGFiZWxzLT5hcHBlbmQoU2NvcGVMYWJlbEluZm8o
aXQtPm1faWRlbnQsIGl0LT5tX2lzTG9vcCkpOworICAgICAgICAgICAgZm9yIChhdXRvIGxhYmVs
IDogKnJocy5tX2xhYmVscykKKyAgICAgICAgICAgICAgICBtX2xhYmVscy0+YXBwZW5kKFNjb3Bl
TGFiZWxJbmZvKGxhYmVsLm1faWRlbnQsIGxhYmVsLm1faXNMb29wKSk7CiAgICAgICAgIH0KICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxl
Tm9kZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3Bw
CmluZGV4IDI2NWNkZGQwZWY3ODgzM2Y2MWI1NzExMTljZmQ3NzIwZmQ0NmQxNTcuLjY5MmM3Yjg2
ZjNjM2EyNTQyMWJiMTAwODJkZjZlMDhkZWI0MGYwZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlTm9kZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVOb2RlLmNwcApAQCAtMTU0LDYgKzE1NCw3IEBAIHZvaWQg
UHJvZmlsZU5vZGU6OmRlYnVnUHJpbnRSZWN1cnNpdmVseShpbnQgaW5kZW50TGV2ZWwsIGNvbnN0
IFByb2ZpbGVTdWJ0cmVlRGF0CiAgICAgLy8gUHJpbnQgY2hpbGRyZW4ncyBuYW1lcyBhbmQgaW5m
b3JtYXRpb24KICAgICBmb3IgKFN0YWNrSXRlcmF0b3IgY3VycmVudENoaWxkID0gbV9jaGlsZHJl
bi5iZWdpbigpOyBjdXJyZW50Q2hpbGQgIT0gbV9jaGlsZHJlbi5lbmQoKTsgKytjdXJyZW50Q2hp
bGQpCiAgICAgICAgICgqY3VycmVudENoaWxkKS0+ZGVidWdQcmludFJlY3Vyc2l2ZWx5KGluZGVu
dExldmVsLCBkYXRhKTsKKwogfQogCiAvLyBwcmludCB0aGUgcHJvZmlsZWQgZGF0YSBpbiBhIGZv
cm1hdCB0aGF0IG1hdGNoZXMgdGhlIHRvb2wgc2FtcGxlJ3Mgb3V0cHV0LgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAppbmRleCBjYzYzMDIxN2RmN2ZkMjVhZGU0YzRi
YjM5ODU3NGQ2N2Q1YTc0NTY5Li5iY2M4ODM1OTYxMjIzZmNjNWVhYTZmOTNmYTlkNzFmNzcyMTMx
Y2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcApAQCAtMzUy
LDcgKzM1Miw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vCiAgICAgICAgICAgICAvLyBwcm9w
ZXJ0aWVzLCBzbyB3ZSBoYXZlIHRvIHBlcmZvcm0gZGVsZXRpb24gd2l0aCBjYXV0aW9uLCBpZiBu
b3Qgd2UgY2FuCiAgICAgICAgICAgICAvLyBkZWxldGUgdmFsdWVzIGluIGFueSBvcmRlci4KICAg
ICAgICAgICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSkgewotICAgICAgICAgICAgICAgIHFzb3J0
KGtleXMuYmVnaW4oKSwga2V5cy5zaXplKCksIHNpemVvZih1bnNpZ25lZCksIGNvbXBhcmVLZXlz
Rm9yUVNvcnQpOworICAgICAgICAgICAgICAgIHFzb3J0KFdURjo6Z2V0UHRyKGtleXMuYmVnaW4o
KSksIGtleXMuc2l6ZSgpLCBzaXplb2YodW5zaWduZWQpLCBjb21wYXJlS2V5c0ZvclFTb3J0KTsK
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpID0ga2V5cy5zaXplKCk7CiAgICAgICAgICAgICAg
ICAgd2hpbGUgKGkpIHsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBrZXlz
Wy0taV07CkBAIC0xMTkxLDEzICsxMTkxLDEzIEBAIHZvaWQgSlNBcnJheTo6c29ydENvbXBhY3Rl
ZFZlY3RvcihFeGVjU3RhdGUqIGV4ZWMsIENvbnRpZ3VvdXNEYXRhPFN0b3JhZ2VUeXBlPiBkCiAg
ICAgICAgIAogI2lmIEhBVkUoTUVSR0VTT1JUKQogICAgIGlmIChpc1NvcnRpbmdQcmltaXRpdmVW
YWx1ZXMpCi0gICAgICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXpl
b2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICAg
ICAgcXNvcnQoV1RGOjpnZXRQdHIodmFsdWVzLmJlZ2luKCkpLCB2YWx1ZXMuc2l6ZSgpLCBzaXpl
b2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICAgICBl
bHNlCi0gICAgICAgIG1lcmdlc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6
ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAg
ICAgIG1lcmdlc29ydChXVEY6OmdldFB0cih2YWx1ZXMuYmVnaW4oKSksIHZhbHVlcy5zaXplKCks
IHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwog
I2Vsc2UKICAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5
IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgogICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90
IHNwZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3Jt
IGEgc3RhYmxlIHNvcnQuCi0gICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCks
IHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwor
ICAgIHFzb3J0KFdURjo6Z2V0UHRyKHZhbHVlcy5iZWdpbigpKSwgdmFsdWVzLnNpemUoKSwgc2l6
ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CiAjZW5k
aWYKICAgICAKICAgICAvLyBJZiB0aGUgdG9TdHJpbmcgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVu
Z3RoIG9mIHRoZSBhcnJheSBvciB2ZWN0b3Igc3RvcmFnZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAppbmRleCA4OGQ1N2YzZGQ0ZTc5NzY5ZDFkMDZj
M2E4NTkxMDFiNTU1YzZhODNmLi45Mzk2NDk2ZDA2YzE2NDRjNzViOWI1NDViNThhZmM2ZDhiODFk
YWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVO
b2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5o
CkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIFZlY3RvcjxNYXBFbnRyeSo+IGVu
dHJpZXM7CiAgICAgICAgIGZvciAoTWFwOjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4tPmJlZ2lu
KCk7IGl0ICE9IG1fY2hpbGRyZW4tPmVuZCgpOyArK2l0KQogICAgICAgICAgICAgZW50cmllcy5h
cHBlbmQoJippdCk7Ci0gICAgICAgIHFzb3J0KGVudHJpZXMuYmVnaW4oKSwgZW50cmllcy5zaXpl
KCksIHNpemVvZihNYXBFbnRyeSopLCBjb21wYXJlRW50cmllcyk7CisgICAgICAgIHFzb3J0KFdU
Rjo6Z2V0UHRyKGVudHJpZXMuYmVnaW4oKSksIGVudHJpZXMuc2l6ZSgpLCBzaXplb2YoTWFwRW50
cnkqKSwgY29tcGFyZUVudHJpZXMpOwogCiAgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgY2hp
bGRyZW4gaW4gc2FtcGxlLWZyZXF1ZW5jeSBvcmRlci4KICAgICAgICAgZm9yIChzaXplX3QgZSA9
IDA7IGUgPCBlbnRyaWVzLnNpemUoKTsgKytlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUveWFyci9ZYXJySklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lh
cnJKSVQuY3BwCmluZGV4IGUzYTNhOTMyY2U3ZWQ3MzhmMTk4NmIyYmYyYjc0M2UwNDIzYTNiMjUu
LmQyNjhlNTllMTJiYjRlODM2OGNlMzkyMDY4NzhhYzgxNjJlM2I0MmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCkBAIC0yMjMsNyArMjIzLDcgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBpZiAoY2hhckNsYXNz
LT5tX3Jhbmdlcy5zaXplKCkpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIG1hdGNoSW5kZXggPSAw
OwogICAgICAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7Ci0gICAgICAgICAgICBtYXRjaENoYXJh
Y3RlckNsYXNzUmFuZ2UoY2hhcmFjdGVyLCBmYWlsdXJlcywgbWF0Y2hEZXN0LCBjaGFyQ2xhc3Mt
Pm1fcmFuZ2VzLmJlZ2luKCksIGNoYXJDbGFzcy0+bV9yYW5nZXMuc2l6ZSgpLCAmbWF0Y2hJbmRl
eCwgY2hhckNsYXNzLT5tX21hdGNoZXMuYmVnaW4oKSwgY2hhckNsYXNzLT5tX21hdGNoZXMuc2l6
ZSgpKTsKKyAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3NSYW5nZShjaGFyYWN0ZXIsIGZh
aWx1cmVzLCBtYXRjaERlc3QsIGNoYXJDbGFzcy0+bV9yYW5nZXMuZGF0YSgpLCBjaGFyQ2xhc3Mt
Pm1fcmFuZ2VzLnNpemUoKSwgJm1hdGNoSW5kZXgsIGNoYXJDbGFzcy0+bV9tYXRjaGVzLmRhdGEo
KSwgY2hhckNsYXNzLT5tX21hdGNoZXMuc2l6ZSgpKTsKICAgICAgICAgICAgIHdoaWxlIChtYXRj
aEluZGV4IDwgY2hhckNsYXNzLT5tX21hdGNoZXMuc2l6ZSgpKQogICAgICAgICAgICAgICAgIG1h
dGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoKHVuc2lnbmVk
IHNob3J0KWNoYXJDbGFzcy0+bV9tYXRjaGVzW21hdGNoSW5kZXgrK10pKSk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGZmNDhkYTBjYzUzMTI4MmExMmQw
ZDUxMDZjNjYwMzVmMTU1ZDkxNTYuLjFiYTVjZmQ3ODk4ZmQ5ZTk2NTk1YmZkNWE0Nzc0ZmVmMWVi
ZjRmODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTgs
NiArOTgsNyBAQAogCQlBNzQ4NzQ1MjE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFz
aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzQ4
NzQ0RjE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5jcHAgKi87IH07CiAJCUE3
NDg3NDUzMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzQ4NzQ1MDE3QTBCREFFMDBGQTA0
Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5oICovOyB9OwogCQlBNzQ4NzQ1NDE3QTBCREFFMDBGQTA0
Q0IgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNzQ4NzQ1MTE3QTBCREFFMDBGQTA0Q0IgLyogU3RyaW5nSGFz
aER1bXBDb250ZXh0LmggKi87IH07CisJCUE3REMyRjA0MUEwOUEyMkQwMDcyRjRFMyAvKiBJbmRl
eGVkSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3REMyRjAzMUEwOTlERTMwMDcyRjRFMyAvKiBJbmRleGVkSXRlcmF0b3IuaCAqLzsgfTsK
IAkJQTdFNjQzQzYxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXByZXNzaW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTY0M0M0MTdDNTQyM0IwMDNC
QjE2QiAvKiBDb21wcmVzc2lvbi5jcHAgKi87IH07CiAJCUE3RTY0M0M3MTdDNTQyM0IwMDNCQjE2
QiAvKiBDb21wcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTdFNjQzQzUxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXByZXNzaW9uLmggKi87IH07
CiAJCUE4NzZEQkQ4MTUxODE2RTUwMERBREI5NSAvKiBQbGF0Zm9ybS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3NkRCRDcxNTE4MTZFNTAwREFEQjk1
IC8qIFBsYXRmb3JtLmggKi87IH07CkBAIC0zODksNiArMzkwLDcgQEAKIAkJQTc0ODc0NEYxN0Ew
QkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2l4Q2hhcmFjdGVySGFzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE3NDg3NDUwMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNo
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpeENoYXJhY3Rlckhhc2guaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc0ODc0NTExN0EwQkRBRTAwRkEwNENCIC8q
IFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdHJpbmdIYXNoRHVtcENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTdEQzJGMDMxQTA5OURFMzAwNzJGNEUzIC8qIEluZGV4ZWRJdGVyYXRvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbmRleGVkSXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdF
NjQzQzQxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXByZXNzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXByZXNzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTdFNjQzQzUxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXByZXNzaW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXByZXNzaW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE4NzZEQkQ3MTUxODE2RTUwMERBREI5NSAvKiBQbGF0Zm9ybS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtODkyLDYgKzg5NCw3IEBACiAJCQkJOTc0Q0ZDOEQxNkE0RjMy
NzAwNkQ1NDA0IC8qIFdlYWtQdHIuaCAqLywKIAkJCQlBOEE0NzM3QTE1MUE4MjVCMDA0MTIzRkYg
LyogV1RGVGhyZWFkRGF0YS5jcHAgKi8sCiAJCQkJQThBNDczN0IxNTFBODI1QjAwNDEyM0ZGIC8q
IFdURlRocmVhZERhdGEuaCAqLywKKwkJCQlBN0RDMkYwMzFBMDk5REUzMDA3MkY0RTMgLyogSW5k
ZXhlZEl0ZXJhdG9yLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHd0ZjsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CkBAIC0xMDY1LDYgKzEwNjgsNyBAQAogCQkJCUE4QTQ3M0FEMTUxQTgyNUIw
MDQxMjNGRiAvKiBjYWNoZWQtcG93ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1RTE1
MUE4MjVCMDA0MTIzRkYgLyogQ2hhcmFjdGVyTmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3Mzk0MTUxQTgyNUIwMDQxMjNGRiAvKiBDaGVja2VkQXJpdGhtZXRpYy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTdEQzJGMDQxQTA5QTIyRDAwNzJGNEUzIC8qIEluZGV4ZWRJdGVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOTUxNTFBODI1QjAwNDEyM0ZGIC8qIENoZWNrZWRCb29s
ZWFuLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1RjE1MUE4MjVCMDA0MTIzRkYgLyogQ29s
bGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzRFREU2MTY5NjE0OTYwMEY2NTA0MSAvKiBD
b21tYVByaW50ZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
SW5kZXhlZEl0ZXJhdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9JbmRleGVkSXRlcmF0b3IuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42N2Q0ZmFlNTk3NjIwMmJkMzFjZWI5ZDFjZTZkMjNhNjIzNzYxNDEwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dURi93dGYvSW5kZXhlZEl0ZXJhdG9yLmgKQEAgLTAsMCArMSw0
ODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFdURl9JbmRleGVkSXRlcmF0b3JfaAorI2RlZmluZSBXVEZfSW5kZXhlZEl0ZXJhdG9yX2gK
KworbmFtZXNwYWNlIFdURiB7CisKKyNkZWZpbmUgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhj
aGVjaykgZG8ge1wKKyAgICBpZiAoIShjaGVjaykpXAorICAgICAgICBPdmVyZmxvd0hhbmRsZXI6
Om92ZXJmbG93ZWQoKTtcCisgICAgfSB3aGlsZSAoMCkKKwordGVtcGxhdGUgPHR5cGVuYW1lIFZl
Y3RvclR5cGUsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciA9IENyYXNoT25P
dmVyZmxvdz4gc3RydWN0IEluZGV4ZWRJdGVyYXRvciB7CisgICAgdHlwZWRlZiBzdHJ1Y3QgSW5k
ZXhlZEl0ZXJhdG9yPGNvbnN0IFZlY3RvclR5cGUsIGNvbnN0IFQsIE92ZXJmbG93SGFuZGxlcj4g
Y29uc3RfaXRlcmF0b3I7CisKKyAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOworICAgIHR5cGVkZWYg
cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKKyAgICB0eXBlZGVmIFZhbHVlVHlwZSB2YWx1ZV90
eXBlOworICAgIHR5cGVkZWYgVmFsdWVUeXBlKiBwb2ludGVyOworICAgIHR5cGVkZWYgVmFsdWVU
eXBlJiByZWZlcmVuY2U7CisgICAgdHlwZWRlZiBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgSW5kZXhlZEl0ZXJhdG9yKCkKKyAgICAgICAg
OiBtX3ZlY3RvcihudWxscHRyKQorICAgICAgICAsIG1fcG9zaXRpb24oMCkKKyAgICB7CisgICAg
fQorCisgICAgSW5kZXhlZEl0ZXJhdG9yKFZlY3RvclR5cGUmIHZlY3RvciwgVmFsdWVUeXBlKiBw
b3NpdGlvbikKKyAgICAgICAgOiBtX3ZlY3RvcigmdmVjdG9yKQorICAgICAgICAsIG1fcG9zaXRp
b24ocG9zaXRpb24gLSB2ZWN0b3IuZGF0YSgpKQorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uIDw9IHZlY3Rvci5zaXplKCkpOworICAgIH0KKworICAg
IEluZGV4ZWRJdGVyYXRvcihjb25zdCBJbmRleGVkSXRlcmF0b3ImIG90aGVyKQorICAgICAgICA6
IG1fdmVjdG9yKG90aGVyLm1fdmVjdG9yKQorICAgICAgICAsIG1fcG9zaXRpb24ob3RoZXIubV9w
b3NpdGlvbikKKyAgICB7CisgICAgfQorCisgICAgVmFsdWVUeXBlKiBvcGVyYXRvci0+KCkgY29u
c3QgeyByZXR1cm4gJm1fdmVjdG9yLT5hdChtX3Bvc2l0aW9uKTsgfQorICAgIFZhbHVlVHlwZSYg
b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3ItPmF0KG1fcG9zaXRpb24pOyB9Cisg
ICAgVmFsdWVUeXBlKiBnZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRP
Ul9PVkVSRkxPVyhtX3Bvc2l0aW9uIDw9IG1fdmVjdG9yLT5zaXplKCkpOworICAgICAgICByZXR1
cm4gbV92ZWN0b3ItPmRhdGEoKSArIG1fcG9zaXRpb247CisgICAgfQorCisgICAgSW5kZXhlZEl0
ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZF
UkZMT1cobV9wb3NpdGlvbiA8IG1fdmVjdG9yLT5zaXplKCkpOworICAgICAgICBtX3Bvc2l0aW9u
Kys7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Ig
b3BlcmF0b3IrKyhpbnQpCisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9X
KG1fcG9zaXRpb24gPCBtX3ZlY3Rvci0+c2l6ZSgpKTsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9y
IHJlc3VsdCgqdGhpcyk7CisgICAgICAgIG1fcG9zaXRpb24rKzsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJhdG9yLS0oKQorICAgIHsK
KyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uID4gMCk7CisgICAg
ICAgIG1fcG9zaXRpb24tLTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIElu
ZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0tKGludCkKKyAgICB7CisgICAgICAgIElOREVYRURfSVRF
UkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA+IDApOworICAgICAgICBJbmRleGVkSXRlcmF0b3Ig
cmVzdWx0KCp0aGlzKTsKKyAgICAgICAgbV9wb3NpdGlvbi0tOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1w
bGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4K
KyAgICB0eXBlZGVmIHNpemVfdCAoSW5kZXhlZEl0ZXJhdG9yOjoqVW5zcGVjaWZpZWRCb29sVHlw
ZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmVjdG9yID8gJkluZGV4ZWRJdGVyYXRvcjo6bV9wb3NpdGlvbiA6IG51bGxwdHI7IH0KKworCisg
ICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvcis9KGxvbmcgaW5jcmVtZW50KQorICAgIHsKKyAg
ICAgICAgaWYgKGluY3JlbWVudCA8IDApIHsKKyAgICAgICAgICAgIElOREVYRURfSVRFUkFUT1Jf
T1ZFUkZMT1coaW5jcmVtZW50ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgp
KTsKKyAgICAgICAgICAgIHJldHVybiAoKnRoaXMpIC09IHN0YXRpY19jYXN0PHNpemVfdD4oLWlu
Y3JlbWVudCk7CisgICAgICAgIH0KKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVygo
c3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIG1fcG9zaXRpb24pID4gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihpbmNyZW1lbnQpKTsKKyAgICAgICAgbV9wb3NpdGlvbiArPSBpbmNyZW1l
bnQ7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA8PSBtX3Zl
Y3Rvci0+c2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIEluZGV4
ZWRJdGVyYXRvciYgb3BlcmF0b3ItPShsb25nIGRlY3JlbWVudCkKKyAgICB7CisgICAgICAgIGlm
IChkZWNyZW1lbnQgPCAwKSB7CisgICAgICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9X
KGRlY3JlbWVudCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSk7CisgICAg
ICAgICAgICByZXR1cm4gKCp0aGlzKSArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KC1kZWNyZW1lbnQp
OworICAgICAgICB9CisKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhzdGF0aWNf
Y2FzdDxzaXplX3Q+KGRlY3JlbWVudCkgPD0gbV9wb3NpdGlvbik7CisgICAgICAgIG1fcG9zaXRp
b24gLT0gZGVjcmVtZW50OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgSW5k
ZXhlZEl0ZXJhdG9yJiBvcGVyYXRvcis9KHNpemVfdCBpbmNyZW1lbnQpCisgICAgeworICAgICAg
ICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46
Om1heCgpIC0gbV9wb3NpdGlvbikgPiBpbmNyZW1lbnQpOworICAgICAgICBtX3Bvc2l0aW9uICs9
IGluY3JlbWVudDsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9u
IDw9IG1fdmVjdG9yLT5zaXplKCkpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisg
ICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvci09KHNpemVfdCBkZWNyZW1lbnQpCisgICAgewor
ICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGRlY3JlbWVudCA8PSBtX3Bvc2l0aW9u
KTsKKyAgICAgICAgbV9wb3NpdGlvbiAtPSBkZWNyZW1lbnQ7CisgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJhdG9yKz0oaW50MzJfdCBpbmNy
ZW1lbnQpCisgICAgeworICAgICAgICBpZiAoaW5jcmVtZW50IDwgMCkgeworICAgICAgICAgICAg
SU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpbmNyZW1lbnQgIT0gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQzMl90Pjo6bWF4KCkpOworICAgICAgICAgICAgcmV0dXJuICgqdGhpcykgLT0gc3RhdGlj
X2Nhc3Q8c2l6ZV90PigtaW5jcmVtZW50KTsKKyAgICAgICAgfQorICAgICAgICBJTkRFWEVEX0lU
RVJBVE9SX09WRVJGTE9XKChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC0gbV9w
b3NpdGlvbikgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluY3JlbWVudCkpOworICAgICAgICBtX3Bv
c2l0aW9uICs9IGluY3JlbWVudDsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyht
X3Bvc2l0aW9uIDw9IG1fdmVjdG9yLT5zaXplKCkpOworICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvci09KGludDMyX3QgZGVjcmVtZW50
KQorICAgIHsKKyAgICAgICAgaWYgKGRlY3JlbWVudCA8IDApIHsKKyAgICAgICAgICAgIElOREVY
RURfSVRFUkFUT1JfT1ZFUkZMT1coZGVjcmVtZW50ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
MzJfdD46Om1heCgpKTsKKyAgICAgICAgICAgIHJldHVybiAoKnRoaXMpICs9IHN0YXRpY19jYXN0
PHNpemVfdD4oLWRlY3JlbWVudCk7CisgICAgICAgIH0KKworICAgICAgICBJTkRFWEVEX0lURVJB
VE9SX09WRVJGTE9XKHN0YXRpY19jYXN0PHNpemVfdD4oZGVjcmVtZW50KSA8PSBtX3Bvc2l0aW9u
KTsKKyAgICAgICAgbV9wb3NpdGlvbiAtPSBkZWNyZW1lbnQ7CisgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKHNpemVfdCBpbmNyZW1l
bnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBpbmNyZW1lbnQ7CisgICAgfQorCisgICAgSW5kZXhl
ZEl0ZXJhdG9yIG9wZXJhdG9yLShzaXplX3QgZGVjcmVtZW50KSBjb25zdAorICAgIHsKKyAgICAg
ICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQg
LT0gZGVjcmVtZW50OworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvcisoaW50
MzJfdCBpbmNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVz
dWx0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBpbmNyZW1lbnQ7CisgICAgfQor
CisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLShpbnQzMl90IGRlY3JlbWVudCkgY29uc3QK
KyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0IC09IGRlY3JlbWVudDsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Ig
b3BlcmF0b3IrKHVuc2lnbmVkIGxvbmcgbG9uZyBpbmNyZW1lbnQpIGNvbnN0CisgICAgeworICAg
ICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGluY3JlbWVudCk7CisgICAgfQorCisgICAgSW5kZXhl
ZEl0ZXJhdG9yIG9wZXJhdG9yLSh1bnNpZ25lZCBsb25nIGxvbmcgZGVjcmVtZW50KSBjb25zdAor
ICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAgIHJl
dHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihkZWNyZW1lbnQpOworICAgIH0KKyAg
ICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKGxvbmcgbG9uZyBpbmNyZW1lbnQpIGNvbnN0Cisg
ICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGluY3JlbWVudCk7CisgICAgfQorCisg
ICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLShsb25nIGxvbmcgZGVjcmVtZW50KSBjb25zdAor
ICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAgIHJl
dHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihkZWNyZW1lbnQpOworICAgIH0KKwor
ICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvcisodW5zaWduZWQgaW5jcmVtZW50KSBjb25zdAor
ICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAgIHJl
dHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmNyZW1lbnQpOworICAgIH0KKwor
ICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0odW5zaWduZWQgZGVjcmVtZW50KSBjb25zdAor
ICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAgIHJl
dHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihkZWNyZW1lbnQpOworICAgIH0KKwor
ICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvcisobG9uZyBpbmNyZW1lbnQpIGNvbnN0CisgICAg
eworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGluY3JlbWVudCk7CisgICAgfQorCisgICAg
SW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLShsb25nIGRlY3JlbWVudCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICByZXR1cm4gcmVz
dWx0ICs9IHN0YXRpY19jYXN0PHNpemVfdD4oZGVjcmVtZW50KTsKKyAgICB9CisKKyAgICBwdHJk
aWZmX3Qgb3BlcmF0b3ItKGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiByaWdodCkgY29uc3QKKyAgICB7
CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV92ZWN0b3IgPT0gcmlnaHQubV92
ZWN0b3IpOworICAgICAgICByZXR1cm4gbV9wb3NpdGlvbiAtIHJpZ2h0Lm1fcG9zaXRpb247Cisg
ICAgfQorCisgICAgcHRyZGlmZl90IG9wZXJhdG9yLShjb25zdCBWYWx1ZVR5cGUqIHJpZ2h0KSBj
b25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhyaWdodCA+PSBt
X3ZlY3Rvci0+ZGF0YSgpKTsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bv
c2l0aW9uID49IHN0YXRpY19jYXN0PHNpemVfdD4ocmlnaHQgLSBtX3ZlY3Rvci0+ZGF0YSgpKSk7
CisgICAgICAgIHJldHVybiBnZXQoKSAtIHJpZ2h0OworICAgIH0KKworICAgIHZvaWQgb3BlcmF0
b3I9KGNvbnN0IEluZGV4ZWRJdGVyYXRvciYgb3RoZXIpCisgICAgeworICAgICAgICBtX3ZlY3Rv
ciA9IG90aGVyLm1fdmVjdG9yOworICAgICAgICBtX3Bvc2l0aW9uID0gb3RoZXIubV9wb3NpdGlv
bjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpc1Nh
ZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpID09IG90aGVy
LnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBjb25zdF9p
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09W
RVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5zYWZlR2V0
KCkgIT0gb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJB
VE9SX09WRVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5z
YWZlR2V0KCkgPT0gb3RoZXI7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZh
bHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09W
RVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5zYWZlR2V0
KCkgIT0gb3RoZXI7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgVmFsdWVUeXBl
KiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1co
aXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA8IG90
aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBWYWx1ZVR5cGUqIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVU
b0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpIDw9IG90aGVyOwor
ICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaXNTYWZlVG9D
b21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA8IG90aGVyLnVuc2Fm
ZUdldCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBjb25zdF9pdGVyYXRv
ciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9X
KHNhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpIDw9IG90
aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEluZGV4
ZWRJdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9S
X09WRVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5zYWZl
R2V0KCkgPiBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPj0o
Y29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhF
RF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0
dXJuIHVuc2FmZUdldCgpID49IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3I+KGNvbnN0IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJ
TkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAg
ICByZXR1cm4gdW5zYWZlR2V0KCkgPiBvdGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
Pj0oY29uc3QgVmFsdWVUeXBlKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURf
SVRFUkFUT1JfT1ZFUkZMT1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVy
biB1bnNhZmVHZXQoKSA+PSBvdGhlcjsKKyAgICB9CisKKyAgICBvcGVyYXRvciBjb25zdF9pdGVy
YXRvcigpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdF9pdGVyYXRvciByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX3ZlY3RvciA9IG1fdmVjdG9yOworICAgICAgICByZXN1bHQubV9wb3NpdGlv
biA9IG1fcG9zaXRpb247CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgVmVj
dG9yVHlwZSogbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fcG9zaXRpb247CisKKyAgICBib29sIGlz
U2FmZVRvQ29tcGFyZShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAobV92ZWN0b3IgPT0gb3RoZXIubV92ZWN0b3IpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuICFtX3ZlY3RvciB8fCAhb3RoZXIubV92ZWN0b3I7Cisg
ICAgfQorCisgICAgYm9vbCBpc1NhZmVUb0NvbXBhcmUoY29uc3QgVmFsdWVUeXBlKiB2YWx1ZSkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKCFtX3ZlY3RvcikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBzaXplX3QgZGVsdGEgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHZhbHVlIC0gbV92ZWN0b3It
PmRhdGEoKSk7CisgICAgICAgIHJldHVybiBkZWx0YSA8PSBtX3ZlY3Rvci0+c2l6ZSgpOworICAg
IH0KKworICAgIFZhbHVlVHlwZSogdW5zYWZlR2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
ICghbV92ZWN0b3IpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IGdldCgpOworICAgIH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1
ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSB0eXBlbmFtZSBJbmRleGVk
SXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+OjpWYWx1ZVR5cGUqIGdldFB0
cihJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+IHApCit7Cisg
ICAgcmV0dXJuIHAuZ2V0KCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBW
YWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBwdHJkaWZmX3Qgb3Bl
cmF0b3ItKGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZh
bHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgSU5ERVhFRF9JVEVSQVRP
Ul9PVkVSRkxPVyhsZWZ0ID49IHJpZ2h0Lm1fdmVjdG9yLT5kYXRhKCkpOworICAgIElOREVYRURf
SVRFUkFUT1JfT1ZFUkZMT1cobGVmdCA8PSByaWdodC5tX3ZlY3Rvci0+ZW5kKCkuZ2V0KCkpOwor
ICAgIHJldHVybiBsZWZ0IC0gcmlnaHQuZ2V0KCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBw
dHJkaWZmX3Qgb3BlcmF0b3ItKFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9y
PFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgSU5ERVhFRF9J
VEVSQVRPUl9PVkVSRkxPVyhsZWZ0ID49IHJpZ2h0Lm1fdmVjdG9yLT5kYXRhKCkpOworICAgIElO
REVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobGVmdCA8PSByaWdodC5tX3ZlY3Rvci0+ZW5kKCkuZ2V0
KCkpOworICAgIHJldHVybiBsZWZ0IC0gcmlnaHQuZ2V0KCk7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lu
bGluZSBwdHJkaWZmX3Qgb3BlcmF0b3ItKGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5k
ZXhlZEl0ZXJhdG9yPGNvbnN0IFQsIGNvbnN0IFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYg
cmlnaHQpCit7CisgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhsZWZ0ID49IHJpZ2h0Lm1f
dmVjdG9yLT5kYXRhKCkpOworICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobGVmdCA8PSBy
aWdodC5tX3ZlY3Rvci0+ZW5kKCkuZ2V0KCkpOworICAgIHJldHVybiBsZWZ0IC0gcmlnaHQuZ2V0
KCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPT0oVmFsdWVUeXBlKiBs
ZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+
JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPT0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4
ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAg
IHJldHVybiByaWdodCA9PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVy
YXRvciE9KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlw
ZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ICE9IGxlZnQ7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVmFsdWVUeXBl
KiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRs
ZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgIT0gbGVmdDsKK30KKwordGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
PgoraW5saW5lIGJvb2wgb3BlcmF0b3I8PShWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJ
dGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJl
dHVybiByaWdodCA+PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRv
cjw9KGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVl
VHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID49IGxl
ZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPj0oVmFsdWVUeXBlKiBs
ZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+
JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPD0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgor
aW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4
ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAg
IHJldHVybiByaWdodCA8PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVy
YXRvcjwoVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBl
LCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPiBsZWZ0Owor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgVmFsdWVUeXBlKiBs
ZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+
JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPiBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Citp
bmxpbmUgYm9vbCBvcGVyYXRvcj4oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0
b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4g
cmlnaHQgPCBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVU
eXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29u
c3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBP
dmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPCBsZWZ0OworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmVjdG9yVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
PiBzdHJ1Y3QgSW5kZXhlZEl0ZXJhdG9yU2VsZWN0b3IgeworICAgIHR5cGVkZWYgdHlwZW5hbWUg
VmVjdG9yVHlwZTo6VmFsdWVUeXBlIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVmIEluZGV4ZWRJdGVy
YXRvcjxWZWN0b3JUeXBlLCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4gaXRlcmF0b3I7Cisg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0
b3I7CisgICAgc3RhdGljIGl0ZXJhdG9yIG1ha2VJdGVyYXRvcihWZWN0b3JUeXBlJiB2ZWN0b3Is
IFZhbHVlVHlwZSogcCkgeyByZXR1cm4gaXRlcmF0b3IodmVjdG9yLCBwKTsgfQorICAgIHN0YXRp
YyBjb25zdF9pdGVyYXRvciBtYWtlQ29uc3RJdGVyYXRvcihjb25zdCBWZWN0b3JUeXBlJiB2ZWN0
b3IsIGNvbnN0IFZhbHVlVHlwZSogcCkgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodmVjdG9yLCBw
KTsgfQorfTsKKworI3VuZGVmIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cKKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oIGIvU291cmNl
L1dURi93dGYvUmVmQ291bnRlZEFycmF5LmgKaW5kZXggYTU1ZDdhZWVhYjg0YjljNDk1MTk2ZThl
MjMwYTFkYzE3ODUxOTNhYi4uODExZTlmZmNlYTMzN2E2YzdkOGIyOTE2MzBlMmFmZGY4ZTU2NjM5
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5LmgKKysrIGIvU291
cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5LmgKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgog
ICAgICAgICBIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSktPnJlZkNvdW50ID0gMTsKICAgICAg
ICAgSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5sZW5ndGggPSBvdGhlci5zaXplKCk7CiAg
ICAgICAgIEFTU0VSVChIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSktPmxlbmd0aCA9PSBvdGhl
ci5zaXplKCkpOwotICAgICAgICBWZWN0b3JUeXBlT3BlcmF0aW9uczxUPjo6dW5pbml0aWFsaXpl
ZENvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCksIG1fZGF0YSk7CisgICAgICAgIFZlY3Rv
clR5cGVPcGVyYXRpb25zPFQ+Ojp1bmluaXRpYWxpemVkQ29weShnZXRQdHIob3RoZXIuYmVnaW4o
KSksIGdldFB0cihvdGhlci5lbmQoKSksIG1fZGF0YSk7CiAgICAgfQogICAgIAogICAgIFJlZkNv
dW50ZWRBcnJheSYgb3BlcmF0b3I9KGNvbnN0IFJlZkNvdW50ZWRBcnJheSYgb3RoZXIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5o
CmluZGV4IDI3NDU2OGE2OTFjNjRhMDM0MjNhNGYyYjczNDg3N2U2MjA3MmQ5MWUuLjRhYWE0OGFj
MjRhNDJmZTk5YTgwOGVhN2IxZWQyYjhkMDgyMmMwMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL1ZlY3Rvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCkBAIC0yOCw2ICsyOCw4
IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMu
aD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvSW5kZXhlZEl0ZXJhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0
ci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KQEAgLTU1NCwxNCArNTU2LDE3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2ln
bmVkIGlubGluZUNhcGFjaXR5ID0gMCwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyID0gQ3JhCiBj
bGFzcyBWZWN0b3IgOiBwcml2YXRlIFZlY3RvckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eT4gewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHJpdmF0ZToKKwogICAgIHR5cGVkZWYgVmVj
dG9yQnVmZmVyPFQsIGlubGluZUNhcGFjaXR5PiBCYXNlOwogICAgIHR5cGVkZWYgVmVjdG9yVHlw
ZU9wZXJhdGlvbnM8VD4gVHlwZU9wZXJhdGlvbnM7CisgICAgdHlwZWRlZiBJbmRleGVkSXRlcmF0
b3JTZWxlY3RvcjxWZWN0b3IsIE92ZXJmbG93SGFuZGxlcj4gSXRlcmF0b3JTZWxlY3RvcjsKIAog
cHVibGljOgogICAgIHR5cGVkZWYgVCBWYWx1ZVR5cGU7CiAKLSAgICB0eXBlZGVmIFQqIGl0ZXJh
dG9yOwotICAgIHR5cGVkZWYgY29uc3QgVCogY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiB0
eXBlbmFtZSBJdGVyYXRvclNlbGVjdG9yOjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICB0eXBlZGVm
IHR5cGVuYW1lIEl0ZXJhdG9yU2VsZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9y
OworCiAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2Vf
aXRlcmF0b3I7CiAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0
b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAKQEAgLTU3NCwxNCArNTc5LDE0IEBAIHB1Ymxp
YzoKICAgICAgICAgOiBCYXNlKHNpemUsIHNpemUpCiAgICAgewogICAgICAgICBpZiAoYmVnaW4o
KSkKLSAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0aWFsaXplKGJlZ2luKCksIGVuZCgp
KTsKKyAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0aWFsaXplKGdldFB0cihiZWdpbigp
KSwgZ2V0UHRyKGVuZCgpKSk7CiAgICAgfQogCiAgICAgVmVjdG9yKHVuc2lnbmVkIHNpemUsIGNv
bnN0IFQmIHZhbCkKICAgICAgICAgOiBCYXNlKHNpemUsIHNpemUpCiAgICAgewogICAgICAgICBp
ZiAoYmVnaW4oKSkKLSAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkRmls
bChiZWdpbigpLCBlbmQoKSwgdmFsKTsKKyAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmlu
aXRpYWxpemVkRmlsbChnZXRQdHIoYmVnaW4oKSksIGdldFB0cihlbmQoKSksIHZhbCk7CiAgICAg
fQogCiAgICAgVmVjdG9yKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiBpbml0aWFsaXplckxpc3Qp
CkBAIC02NDUsMTAgKzY1MCwxMCBAQCBwdWJsaWM6CiAgICAgY29uc3QgVCogZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIEJhc2U6OmJ1ZmZlcigpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBkYXRhTWVt
b3J5T2Zmc2V0KCkgeyByZXR1cm4gQmFzZTo6YnVmZmVyTWVtb3J5T2Zmc2V0KCk7IH0KIAotICAg
IGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gZGF0YSgpOyB9Ci0gICAgaXRlcmF0b3IgZW5kKCkg
eyByZXR1cm4gYmVnaW4oKSArIG1fc2l6ZTsgfQotICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gZGF0YSgpOyB9Ci0gICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gYmVnaW4oKSArIG1fc2l6ZTsgfQorICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1
cm4gSXRlcmF0b3JTZWxlY3Rvcjo6bWFrZUl0ZXJhdG9yKCp0aGlzLCBkYXRhKCkpOyB9CisgICAg
aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gYmVnaW4oKSArIHNpemUoKTsgfQorICAgIGNvbnN0X2l0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gSXRlcmF0b3JTZWxlY3Rvcjo6bWFrZUNvbnN0
SXRlcmF0b3IoKnRoaXMsIGRhdGEoKSk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBiZWdpbigpICsgc2l6ZSgpOyB9CiAKICAgICByZXZlcnNlX2l0ZXJhdG9yIHJi
ZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgICAgcmV2ZXJzZV9p
dGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQpAQCAt
NjgzLDYgKzY4OCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoKSB7IHNocmlua0NhcGFj
aXR5KDApOyB9CiAKKyAgICB2b2lkIGFwcGVuZChjb25zdF9pdGVyYXRvciwgdW5zaWduZWQpOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKGNvbnN0IFUqLCB1bnNpZ25lZCk7
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCBhcHBlbmQoVSYmKTsKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiB2b2lkIHVuY2hlY2tlZEFwcGVuZChVJiYgdmFsKTsKQEAgLTc0Niw3ICs3
NTIsNyBAQCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OlZlY3Rv
cihjb25zdCBWZWN0b3ImIG90aGVyKQogICAgIDogQmFzZShvdGhlci5jYXBhY2l0eSgpLCBvdGhl
ci5zaXplKCkpCiB7CiAgICAgaWYgKGJlZ2luKCkpCi0gICAgICAgIFR5cGVPcGVyYXRpb25zOjp1
bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSwgYmVnaW4oKSk7Cisg
ICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShnZXRQdHIob3RoZXIuYmVn
aW4oKSksIGdldFB0cihvdGhlci5lbmQoKSksIGdldFB0cihiZWdpbigpKSk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXI+CkBAIC03NTUsNyArNzYxLDcgQEAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXI+OjpWZWN0b3IoY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHkKICAg
ICA6IEJhc2Uob3RoZXIuY2FwYWNpdHkoKSwgb3RoZXIuc2l6ZSgpKQogewogICAgIGlmIChiZWdp
bigpKQotICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVn
aW4oKSwgb3RoZXIuZW5kKCksIGJlZ2luKCkpOworICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5p
bml0aWFsaXplZENvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuZW5kKCkp
LCBnZXRQdHIoYmVnaW4oKSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBp
bmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgpAQCAtNzcyLDggKzc3OCw4
IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPiYgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhCiAgICAgICAgIEFTU0VSVChiZWdpbigpKTsKICAg
ICB9CiAgICAgCi0gICAgc3RkOjpjb3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmJlZ2luKCkgKyBz
aXplKCksIGJlZ2luKCkpOwotICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShv
dGhlci5iZWdpbigpICsgc2l6ZSgpLCBvdGhlci5lbmQoKSwgZW5kKCkpOworICAgIHN0ZDo6Y29w
eShnZXRQdHIob3RoZXIuYmVnaW4oKSksIGdldFB0cihvdGhlci5iZWdpbigpICsgc2l6ZSgpKSwg
Z2V0UHRyKGJlZ2luKCkpKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHko
Z2V0UHRyKG90aGVyLmJlZ2luKCkgKyBzaXplKCkpLCBnZXRQdHIob3RoZXIuZW5kKCkpLCBnZXRQ
dHIoZW5kKCkpKTsKICAgICBtX3NpemUgPSBvdGhlci5zaXplKCk7CiAKICAgICByZXR1cm4gKnRo
aXM7CkBAIC03OTcsOSArODAzLDkgQEAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXI+JiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGEKICAgICAgICAg
cmVzZXJ2ZUNhcGFjaXR5KG90aGVyLnNpemUoKSk7CiAgICAgICAgIEFTU0VSVChiZWdpbigpKTsK
ICAgICB9Ci0gICAgCi0gICAgc3RkOjpjb3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmJlZ2luKCkg
KyBzaXplKCksIGJlZ2luKCkpOwotICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29w
eShvdGhlci5iZWdpbigpICsgc2l6ZSgpLCBvdGhlci5lbmQoKSwgZW5kKCkpOworCisgICAgc3Rk
Ojpjb3B5KGdldFB0cihvdGhlci5iZWdpbigpKSwgZ2V0UHRyKG90aGVyLmJlZ2luKCkgKyBzaXpl
KCkpLCBnZXRQdHIoYmVnaW4oKSkpOworICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVk
Q29weShnZXRQdHIob3RoZXIuYmVnaW4oKSArIHNpemUoKSksIGdldFB0cihvdGhlci5lbmQoKSks
IGdldFB0cihlbmQoKSkpOwogICAgIG1fc2l6ZSA9IG90aGVyLnNpemUoKTsKIAogICAgIHJldHVy
biAqdGhpczsKQEAgLTg1OSw4ICs4NjUsOCBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyPjo6ZmlsbChjb25zdCBUJiB2YWwsIHVuc2lnbmVkIG5ldwogICAg
ICAgICBBU1NFUlQoYmVnaW4oKSk7CiAgICAgfQogICAgIAotICAgIHN0ZDo6ZmlsbChiZWdpbigp
LCBlbmQoKSwgdmFsKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZEZpbGwoZW5k
KCksIGJlZ2luKCkgKyBuZXdTaXplLCB2YWwpOworICAgIHN0ZDo6ZmlsbChnZXRQdHIoYmVnaW4o
KSksIGdldFB0cihlbmQoKSksIHZhbCk7CisgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6
ZWRGaWxsKGdldFB0cihlbmQoKSksIGdldFB0cihiZWdpbigpKSArIG5ld1NpemUsIHZhbCk7CiAg
ICAgbV9zaXplID0gbmV3U2l6ZTsKIH0KIApAQCAtODgxLDEzICs4ODcsMTMgQEAgdm9pZCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmV4cGFuZENhcGFjaXR5KHVu
c2lnbmVkIG5ld01pbkMKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CiBUKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlcj46OmV4cGFuZENhcGFjaXR5KHVuc2lnbmVkIG5ld01pbkNhcGFj
aXR5LCBUKiBwdHIpCiB7Ci0gICAgaWYgKHB0ciA8IGJlZ2luKCkgfHwgcHRyID49IGVuZCgpKSB7
CisgICAgaWYgKHB0ciA8IGdldFB0cihiZWdpbigpKSB8fCBwdHIgPj0gZ2V0UHRyKGVuZCgpKSkg
ewogICAgICAgICBleHBhbmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0eSk7CiAgICAgICAgIHJldHVy
biBwdHI7CiAgICAgfQotICAgIHVuc2lnbmVkIGluZGV4ID0gcHRyIC0gYmVnaW4oKTsKKyAgICB1
bnNpZ25lZCBpbmRleCA9IHB0ciAtIGdldFB0cihiZWdpbigpKTsKICAgICBleHBhbmRDYXBhY2l0
eShuZXdNaW5DYXBhY2l0eSk7Ci0gICAgcmV0dXJuIGJlZ2luKCkgKyBpbmRleDsKKyAgICByZXR1
cm4gZ2V0UHRyKGJlZ2luKCkpICsgaW5kZXg7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVu
c2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CkBAIC04OTks
MTUgKzkwNSwxNSBAQCBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyPjo6dHJ5RXhwYW5kQ2FwYWNpdHkodW5zaWduZWQgbmV3TQogdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIGNv
bnN0IFQqIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6dHJ5RXhw
YW5kQ2FwYWNpdHkodW5zaWduZWQgbmV3TWluQ2FwYWNpdHksIGNvbnN0IFQqIHB0cikKIHsKLSAg
ICBpZiAocHRyIDwgYmVnaW4oKSB8fCBwdHIgPj0gZW5kKCkpIHsKKyAgICBpZiAocHRyIDwgZ2V0
UHRyKGJlZ2luKCkpIHx8IHB0ciA+PSBnZXRQdHIoZW5kKCkpKSB7CiAgICAgICAgIGlmICghdHJ5
RXhwYW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgIHJldHVybiBwdHI7CiAgICAgfQotICAgIHVuc2lnbmVkIGluZGV4ID0gcHRyIC0gYmVn
aW4oKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IHB0ciAtIGdldFB0cihiZWdpbigpKTsKICAgICBp
ZiAoIXRyeUV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5KSkKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgcmV0dXJuIGJlZ2luKCkgKyBpbmRleDsKKyAgICByZXR1cm4gZ2V0UHRyKGJlZ2luKCkp
ICsgaW5kZXg7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CkBAIC05
MjEsMTIgKzkyNywxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpyZXNpemUodW5zaWduZWQgc2l6ZSkKIHsK
ICAgICBpZiAoc2l6ZSA8PSBtX3NpemUpCi0gICAgICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVj
dChiZWdpbigpICsgc2l6ZSwgZW5kKCkpOworICAgICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1
Y3QoZ2V0UHRyKGJlZ2luKCkpICsgc2l6ZSwgZ2V0UHRyKGVuZCgpKSk7CiAgICAgZWxzZSB7CiAg
ICAgICAgIGlmIChzaXplID4gY2FwYWNpdHkoKSkKICAgICAgICAgICAgIGV4cGFuZENhcGFjaXR5
KHNpemUpOwogICAgICAgICBpZiAoYmVnaW4oKSkKLSAgICAgICAgICAgIFR5cGVPcGVyYXRpb25z
Ojppbml0aWFsaXplKGVuZCgpLCBiZWdpbigpICsgc2l6ZSk7CisgICAgICAgICAgICBUeXBlT3Bl
cmF0aW9uczo6aW5pdGlhbGl6ZShnZXRQdHIoZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkgKyBzaXpl
KTsKICAgICB9CiAgICAgCiAgICAgbV9zaXplID0gc2l6ZTsKQEAgLTk0Myw3ICs5NDksNyBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyPgogdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlcj46OnNocmluayh1bnNpZ25lZCBzaXplKQogewogICAgIEFTU0VSVChzaXplIDw9IG1fc2l6
ZSk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0KGJlZ2luKCkgKyBzaXplLCBlbmQoKSk7
CisgICAgVHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0KGdldFB0cihiZWdpbigpKSArIHNpemUsIGdl
dFB0cihlbmQoKSkpOwogICAgIG1fc2l6ZSA9IHNpemU7CiB9CiAKQEAgLTk1NCw3ICs5NjAsNyBA
QCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6Z3Jvdyh1
bnNpZ25lZCBzaXplKQogICAgIGlmIChzaXplID4gY2FwYWNpdHkoKSkKICAgICAgICAgZXhwYW5k
Q2FwYWNpdHkoc2l6ZSk7CiAgICAgaWYgKGJlZ2luKCkpCi0gICAgICAgIFR5cGVPcGVyYXRpb25z
Ojppbml0aWFsaXplKGVuZCgpLCBiZWdpbigpICsgc2l6ZSk7CisgICAgICAgIFR5cGVPcGVyYXRp
b25zOjppbml0aWFsaXplKGdldFB0cihlbmQoKSksIGdldFB0cihiZWdpbigpKSArIHNpemUpOwog
ICAgIG1fc2l6ZSA9IHNpemU7CiB9CiAKQEAgLTk2MywxMSArOTY5LDExIEBAIHZvaWQgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpyZXNlcnZlQ2FwYWNpdHkodW5z
aWduZWQgbmV3Q2FwCiB7CiAgICAgaWYgKG5ld0NhcGFjaXR5IDw9IGNhcGFjaXR5KCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBUKiBvbGRCdWZmZXIgPSBiZWdpbigpOwotICAgIFQqIG9sZEVuZCA9
IGVuZCgpOworICAgIFQqIG9sZEJ1ZmZlciA9IGdldFB0cihiZWdpbigpKTsKKyAgICBUKiBvbGRF
bmQgPSBnZXRQdHIoZW5kKCkpOwogICAgIEJhc2U6OmFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5
KTsKICAgICBBU1NFUlQoYmVnaW4oKSk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVm
ZmVyLCBvbGRFbmQsIGJlZ2luKCkpOworICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZl
ciwgb2xkRW5kLCBnZXRQdHIoYmVnaW4oKSkpOwogICAgIEJhc2U6OmRlYWxsb2NhdGVCdWZmZXIo
b2xkQnVmZmVyKTsKIH0KIApAQCAtOTc2LDEyICs5ODIsMTIgQEAgYm9vbCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnRyeVJlc2VydmVDYXBhY2l0eSh1bnNpZ25l
ZCBuZXcKIHsKICAgICBpZiAobmV3Q2FwYWNpdHkgPD0gY2FwYWNpdHkoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgVCogb2xkQnVmZmVyID0gYmVnaW4oKTsKLSAgICBUKiBvbGRFbmQgPSBl
bmQoKTsKKyAgICBUKiBvbGRCdWZmZXIgPSBnZXRQdHIoYmVnaW4oKSk7CisgICAgVCogb2xkRW5k
ID0gZ2V0UHRyKGVuZCgpKTsKICAgICBpZiAoIUJhc2U6OnRyeUFsbG9jYXRlQnVmZmVyKG5ld0Nh
cGFjaXR5KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEFTU0VSVChiZWdpbigpKTsKLSAg
ICBUeXBlT3BlcmF0aW9uczo6bW92ZShvbGRCdWZmZXIsIG9sZEVuZCwgYmVnaW4oKSk7CisgICAg
VHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGdldFB0cihiZWdpbigpKSk7
CiAgICAgQmFzZTo6ZGVhbGxvY2F0ZUJ1ZmZlcihvbGRCdWZmZXIpOwogICAgIHJldHVybiB0cnVl
OwogfQpAQCAtMTAwNCwxNyArMTAxMCwxNyBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyPjo6c2hyaW5rQ2FwYWNpdHkodW5zaWduZWQgbmV3Q2FwYQogICAg
IGlmIChuZXdDYXBhY2l0eSA8IHNpemUoKSkgCiAgICAgICAgIHNocmluayhuZXdDYXBhY2l0eSk7
CiAKLSAgICBUKiBvbGRCdWZmZXIgPSBiZWdpbigpOworICAgIFQqIG9sZEJ1ZmZlciA9IGdldFB0
cihiZWdpbigpKTsKICAgICBpZiAobmV3Q2FwYWNpdHkgPiAwKSB7CiAgICAgICAgIGlmIChCYXNl
OjpzaG91bGRSZWFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KSkgewogICAgICAgICAgICAgQmFz
ZTo6cmVhbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICBUKiBvbGRFbmQgPSBlbmQoKTsKKyAgICAgICAgVCogb2xkRW5k
ID0gZ2V0UHRyKGVuZCgpKTsKICAgICAgICAgQmFzZTo6YWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNp
dHkpOwotICAgICAgICBpZiAoYmVnaW4oKSAhPSBvbGRCdWZmZXIpCi0gICAgICAgICAgICBUeXBl
T3BlcmF0aW9uczo6bW92ZShvbGRCdWZmZXIsIG9sZEVuZCwgYmVnaW4oKSk7CisgICAgICAgIGlm
IChnZXRQdHIoYmVnaW4oKSkgIT0gb2xkQnVmZmVyKQorICAgICAgICAgICAgVHlwZU9wZXJhdGlv
bnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGdldFB0cihiZWdpbigpKSk7CiAgICAgfQogCiAg
ICAgQmFzZTo6ZGVhbGxvY2F0ZUJ1ZmZlcihvbGRCdWZmZXIpOwpAQCAtMTAzNCwxMSArMTA0MCwx
NyBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6YXBw
ZW5kKGNvbnN0IFUqIGRhdGEsIHVuc2lnbmVkCiAgICAgfQogICAgIGlmIChuZXdTaXplIDwgbV9z
aXplKQogICAgICAgICBDUkFTSCgpOwotICAgIFQqIGRlc3QgPSBlbmQoKTsKKyAgICBUKiBkZXN0
ID0gZ2V0UHRyKGVuZCgpKTsKICAgICBWZWN0b3JDb3BpZXI8c3RkOjppc190cml2aWFsPFQ+Ojp2
YWx1ZSwgVT46OnVuaW5pdGlhbGl6ZWRDb3B5KGRhdGEsICZkYXRhW2RhdGFTaXplXSwgZGVzdCk7
CiAgICAgbV9zaXplID0gbmV3U2l6ZTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWdu
ZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK3ZvaWQgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmQoY29uc3RfaXRlcmF0
b3IgZGF0YSwgdW5zaWduZWQgZGF0YVNpemUpCit7CisgICAgYXBwZW5kKGdldFB0cihkYXRhKSwg
ZGF0YVNpemUpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgogYm9v
bCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnRyeUFwcGVuZChj
b25zdCBVKiBkYXRhLCB1bnNpZ25lZCBkYXRhU2l6ZSkKIHsKQEAgLTEwNTEsNyArMTA2Myw3IEBA
IGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojp0cnlBcHBl
bmQoY29uc3QgVSogZGF0YSwgdW5zaWduCiAgICAgfQogICAgIGlmIChuZXdTaXplIDwgbV9zaXpl
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgVCogZGVzdCA9IGVuZCgpOworICAgIFQqIGRl
c3QgPSBnZXRQdHIoZW5kKCkpOwogICAgIFZlY3RvckNvcGllcjxzdGQ6OmlzX3RyaXZpYWw8VD46
OnZhbHVlLCBVPjo6dW5pbml0aWFsaXplZENvcHkoZGF0YSwgJmRhdGFbZGF0YVNpemVdLCBkZXN0
KTsKICAgICBtX3NpemUgPSBuZXdTaXplOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTA2MSw3ICsx
MDczLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGUKIEFMV0FZU19JTkxJTkUgdm9pZCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmFwcGVuZChVJiYgdmFsdWUp
CiB7CiAgICAgaWYgKHNpemUoKSAhPSBjYXBhY2l0eSgpKSB7Ci0gICAgICAgIG5ldyAoTm90TnVs
bCwgZW5kKCkpIFQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgICAgIG5ldyAoTm90TnVs
bCwgZ2V0UHRyKGVuZCgpKSkgVChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKICAgICAgICAgKytt
X3NpemU7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMDc4LDcgKzEwOTAsNyBAQCB2b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kU2xvd0Nh
c2UoVSYmIHZhbHVlKQogICAgIHB0ciA9IGV4cGFuZENhcGFjaXR5KHNpemUoKSArIDEsIHB0cik7
CiAgICAgQVNTRVJUKGJlZ2luKCkpOwogCi0gICAgbmV3IChOb3ROdWxsLCBlbmQoKSkgVChzdGQ6
OmZvcndhcmQ8VT4oKnB0cikpOworICAgIG5ldyAoTm90TnVsbCwgZ2V0UHRyKGVuZCgpKSkgVChz
dGQ6OmZvcndhcmQ8VT4oKnB0cikpOwogICAgICsrbV9zaXplOwogfQogCkBAIC0xMDkxLDE0ICsx
MTAzLDE0IEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyPjo6dW5jaGVja2VkQXBwZW5kKFUmJiB2YWx1CiAgICAgQVNTRVJUKHNpemUoKSA8IGNh
cGFjaXR5KCkpOwogCiAgICAgYXV0byBwdHIgPSBzdGQ6OmFkZHJlc3NvZih2YWx1ZSk7Ci0gICAg
bmV3IChOb3ROdWxsLCBlbmQoKSkgVChzdGQ6OmZvcndhcmQ8VT4oKnB0cikpOworICAgIG5ldyAo
Tm90TnVsbCwgZ2V0UHRyKGVuZCgpKSkgVChzdGQ6OmZvcndhcmQ8VT4oKnB0cikpOwogICAgICsr
bV9zaXplOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0
eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB1bnNpZ25l
ZCBvdGhlckNhcGFjaXR5PgogaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXI+OjphcHBlbmRWZWN0b3IoY29uc3QgVmVjdG9yPFUsIG90aGVyQ2FwYWNp
dHk+JiB2YWwpCiB7Ci0gICAgYXBwZW5kKHZhbC5iZWdpbigpLCB2YWwuc2l6ZSgpKTsKKyAgICBh
cHBlbmQoZ2V0UHRyKHZhbC5iZWdpbigpKSwgdmFsLnNpemUoKSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXI+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CkBAIC0xMTEyLDggKzExMjQsOCBAQCB2b2lkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6aW5zZXJ0KHVuc2lnbmVkIHBv
c2l0aW9uLCBjb25zdAogICAgIH0KICAgICBpZiAobmV3U2l6ZSA8IG1fc2l6ZSkKICAgICAgICAg
Q1JBU0goKTsKLSAgICBUKiBzcG90ID0gYmVnaW4oKSArIHBvc2l0aW9uOwotICAgIFR5cGVPcGVy
YXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCwgZW5kKCksIHNwb3QgKyBkYXRhU2l6ZSk7Cisg
ICAgVCogc3BvdCA9IGdldFB0cihiZWdpbigpKSArIHBvc2l0aW9uOworICAgIFR5cGVPcGVyYXRp
b25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCwgZ2V0UHRyKGVuZCgpKSwgc3BvdCArIGRhdGFTaXpl
KTsKICAgICBWZWN0b3JDb3BpZXI8c3RkOjppc190cml2aWFsPFQ+Ojp2YWx1ZSwgVT46OnVuaW5p
dGlhbGl6ZWRDb3B5KGRhdGEsICZkYXRhW2RhdGFTaXplXSwgc3BvdCk7CiAgICAgbV9zaXplID0g
bmV3U2l6ZTsKIH0KQEAgLTExMjksOCArMTE0MSw4IEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6aW5zZXJ0KHVuc2lnbmVkIHBvc2l0aW9u
CiAgICAgICAgIEFTU0VSVChiZWdpbigpKTsKICAgICB9CiAKLSAgICBUKiBzcG90ID0gYmVnaW4o
KSArIHBvc2l0aW9uOwotICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCwg
ZW5kKCksIHNwb3QgKyAxKTsKKyAgICBUKiBzcG90ID0gZ2V0UHRyKGJlZ2luKCkpICsgcG9zaXRp
b247CisgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90LCBnZXRQdHIoZW5k
KCkpLCBzcG90ICsgMSk7CiAgICAgbmV3IChOb3ROdWxsLCBzcG90KSBUKHN0ZDo6Zm9yd2FyZDxV
PigqcHRyKSk7CiAgICAgKyttX3NpemU7CiB9CkBAIC0xMTM4LDE2ICsxMTUwLDE2IEBAIGlubGlu
ZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6aW5zZXJ0
KHVuc2lnbmVkIHBvc2l0aW9uCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVD
YXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB1
bnNpZ25lZCBjPgogaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXI+OjppbnNlcnRWZWN0b3IodW5zaWduZWQgcG9zaXRpb24sIGNvbnN0IFZlY3RvcjxV
LCBjPiYgdmFsKQogewotICAgIGluc2VydChwb3NpdGlvbiwgdmFsLmJlZ2luKCksIHZhbC5zaXpl
KCkpOworICAgIGluc2VydChwb3NpdGlvbiwgZ2V0UHRyKHZhbC5iZWdpbigpKSwgdmFsLnNpemUo
KSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CiBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnJlbW92ZSh1bnNpZ25lZCBwb3NpdGlvbikKIHsKICAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihwb3NpdGlvbiA8IHNpemUoKSk7Ci0g
ICAgVCogc3BvdCA9IGJlZ2luKCkgKyBwb3NpdGlvbjsKKyAgICBUKiBzcG90ID0gZ2V0UHRyKGJl
Z2luKCkpICsgcG9zaXRpb247CiAgICAgc3BvdC0+flQoKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6
bW92ZU92ZXJsYXBwaW5nKHNwb3QgKyAxLCBlbmQoKSwgc3BvdCk7CisgICAgVHlwZU9wZXJhdGlv
bnM6Om1vdmVPdmVybGFwcGluZyhzcG90ICsgMSwgZ2V0UHRyKGVuZCgpKSwgc3BvdCk7CiAgICAg
LS1tX3NpemU7CiB9CiAKQEAgLTExNTYsMTAgKzExNjgsMTAgQEAgaW5saW5lIHZvaWQgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUodW5zaWduZWQgcG9z
aXRpb24KIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihwb3NpdGlvbiA8
PSBzaXplKCkpOwogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0aW9u
ICsgbGVuZ3RoIDw9IHNpemUoKSk7Ci0gICAgVCogYmVnaW5TcG90ID0gYmVnaW4oKSArIHBvc2l0
aW9uOworICAgIFQqIGJlZ2luU3BvdCA9IGdldFB0cihiZWdpbigpKSArIHBvc2l0aW9uOwogICAg
IFQqIGVuZFNwb3QgPSBiZWdpblNwb3QgKyBsZW5ndGg7CiAgICAgVHlwZU9wZXJhdGlvbnM6OmRl
c3RydWN0KGJlZ2luU3BvdCwgZW5kU3BvdCk7IAotICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3Zl
cmxhcHBpbmcoZW5kU3BvdCwgZW5kKCksIGJlZ2luU3BvdCk7CisgICAgVHlwZU9wZXJhdGlvbnM6
Om1vdmVPdmVybGFwcGluZyhlbmRTcG90LCBnZXRQdHIoZW5kKCkpLCBiZWdpblNwb3QpOwogICAg
IG1fc2l6ZSAtPSBsZW5ndGg7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDBjZjA5ZTFmNWVjOThhODUxNDRj
YzcyMmQyYTZjYzRhZTRmOTM4OTguLjNlZTgwNjhhM2E3NmE0YTQzYWM2NDMyMzI3NzI2NDNjMTYx
NDlkNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcApAQCAtMTQzNyw4ICsxNDM3LDggQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIHB0ciA9IGJ1ZmZlci5iZWdpbigpOwotICAgICAgICBj
b25zdCB1aW50OF90KiBlbmQgPSBidWZmZXIuZW5kKCk7CisgICAgICAgIGNvbnN0IHVpbnQ4X3Qq
IHB0ciA9IGdldFB0cihidWZmZXIuYmVnaW4oKSk7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGVu
ZCA9IGdldFB0cihidWZmZXIuZW5kKCkpOwogICAgICAgICB1aW50MzJfdCB2ZXJzaW9uOwogICAg
ICAgICBpZiAoIXJlYWRMaXR0bGVFbmRpYW4ocHRyLCBlbmQsIHZlcnNpb24pIHx8IHZlcnNpb24g
PiBDdXJyZW50VmVyc2lvbikKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCAyZDliNzllMTNhYmY5NjBhNjE0Yjk2
ZDI3MDY2MGU1ZjM1ZTM0MTdmLi5lOTJmYjJmNzkwYmU0YzVjMTY3NmM2OThjNWJlMWJhNjVlMWE2
OTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC0yMDczLDEx
ICsyMDczLDExIEBAIGlubGluZSBib29sIFNlYXJjaEJ1ZmZlcjo6aXNCYWRNYXRjaChjb25zdCBV
Q2hhciogbWF0Y2gsIHNpemVfdCBtYXRjaExlbmd0aCkgY29uCiAgICAgLy8gY3JlYXRpbmcgYSBu
ZXcgb25lIGVhY2ggdGltZS4KICAgICBub3JtYWxpemVDaGFyYWN0ZXJzKG1hdGNoLCBtYXRjaExl
bmd0aCwgbV9ub3JtYWxpemVkTWF0Y2gpOwogCi0gICAgY29uc3QgVUNoYXIqIGEgPSBtX25vcm1h
bGl6ZWRUYXJnZXQuYmVnaW4oKTsKLSAgICBjb25zdCBVQ2hhciogYUVuZCA9IG1fbm9ybWFsaXpl
ZFRhcmdldC5lbmQoKTsKKyAgICBjb25zdCBVQ2hhciogYSA9IGdldFB0cihtX25vcm1hbGl6ZWRU
YXJnZXQuYmVnaW4oKSk7CisgICAgY29uc3QgVUNoYXIqIGFFbmQgPSBnZXRQdHIobV9ub3JtYWxp
emVkVGFyZ2V0LmVuZCgpKTsKIAotICAgIGNvbnN0IFVDaGFyKiBiID0gbV9ub3JtYWxpemVkTWF0
Y2guYmVnaW4oKTsKLSAgICBjb25zdCBVQ2hhciogYkVuZCA9IG1fbm9ybWFsaXplZE1hdGNoLmVu
ZCgpOworICAgIGNvbnN0IFVDaGFyKiBiID0gZ2V0UHRyKG1fbm9ybWFsaXplZE1hdGNoLmJlZ2lu
KCkpOworICAgIGNvbnN0IFVDaGFyKiBiRW5kID0gZ2V0UHRyKG1fbm9ybWFsaXplZE1hdGNoLmVu
ZCgpKTsKIAogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIC8vIFNraXAgcnVucyBvZiBub24t
a2FuYS1sZXR0ZXIgY2hhcmFjdGVycy4gVGhpcyBpcyBuZWNlc3Nhcnkgc28gd2UgY2FuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5t
bQppbmRleCAwMDk4Yzc2MzEzZjRjYzY2MGU5NjhhOTBkM2U5MzhhOGIxYmJjOWRlLi5mNWVmOTNk
MWFhNDg2Mjk0YjZkZmFiNDE3YTIyYjFiMjZiYzE5YzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KQEAgLTU1NSw3ICs1
NTUsNyBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9uSGln
aGxpZ2h0KCkKIAogICAgICAgICBpZiAoIWNnUmVjdHMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICBDR1JlY3QgdmlzaWJsZVJlY3QgPSBtYWluRnJhbWVWaWV3LT52aXNpYmxlQ29udGVudFJlY3Qo
KTsKLSAgICAgICAgICAgIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4gZGRIaWdobGlnaHQgPSBh
ZG9wdENGKERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFu
ZERpcmVjdGlvbihudWxscHRyLCBjZ1JlY3RzLmJlZ2luKCksIGNnUmVjdHMuc2l6ZSgpLCB2aXNp
YmxlUmVjdCwgRERIaWdobGlnaHROb091dGxpbmVXaXRoQXJyb3csIFlFUywgTlNXcml0aW5nRGly
ZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOworICAgICAgICAgICAgUmV0YWluUHRyPERESGlnaGxp
Z2h0UmVmPiBkZEhpZ2hsaWdodCA9IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJ
blZpc2libGVSZWN0V2l0aFN0eWxlQW5kRGlyZWN0aW9uKG51bGxwdHIsIGdldFB0cihjZ1JlY3Rz
LmJlZ2luKCkpLCBjZ1JlY3RzLnNpemUoKSwgdmlzaWJsZVJlY3QsIERESGlnaGxpZ2h0Tm9PdXRs
aW5lV2l0aEFycm93LCBZRVMsIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgbmV3UG90ZW50aWFsSGlnaGxpZ2h0cy5hZGQoSGln
aGxpZ2h0OjpjcmVhdGVGb3JTZWxlY3Rpb24oKnRoaXMsIGRkSGlnaGxpZ2h0LCBzZWxlY3Rpb25S
YW5nZSkpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHAKaW5kZXggZDFiOTJiN2I2MDliNDUxOTljODRh
NDZhZWU5ZmRiNmM0ZjdjZmVjNS4uNTAzYjBlOGQ5YmJmMjkwNmNlNzNiZWJlYmEwMWJkNjAzZWM3
OTk5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVu
dGVkRm9udERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Nl
Z21lbnRlZEZvbnREYXRhLmNwcApAQCAtMzksOCArMzksOCBAQCBTZWdtZW50ZWRGb250RGF0YTo6
flNlZ21lbnRlZEZvbnREYXRhKCkKIAogY29uc3QgU2ltcGxlRm9udERhdGEqIFNlZ21lbnRlZEZv
bnREYXRhOjpmb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0CiB7Ci0gICAgVmVj
dG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsK
LSAgICBmb3IgKFZlY3RvcjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jh
bmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBhdXRvIGVuZCA9IG1fcmFuZ2Vz
LmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewogICAgICAgICBpZiAoaXQtPmZyb20oKSA8PSBjICYmIGl0LT50bygpID49IGMpCiAg
ICAgICAgICAgICByZXR1cm4gaXQtPmZvbnREYXRhKCkuZ2V0KCk7CiAgICAgfQpAQCAtNDksOCAr
NDksOCBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogU2VnbWVudGVkRm9udERhdGE6OmZvbnREYXRh
Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKIAogYm9vbCBTZWdtZW50ZWRGb250RGF0YTo6
Y29udGFpbnNDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAogewotICAgIFZlY3RvcjxGb250RGF0
YVJhbmdlPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYW5nZXMuZW5kKCk7Ci0gICAgZm9yIChW
ZWN0b3I8Rm9udERhdGFSYW5nZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yYW5nZXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgYXV0byBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsKKyAg
ICBmb3IgKGF1dG8gaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgaWYgKGMgPj0gaXQtPmZyb20oKSAmJiBjIDw9IGl0LT50bygpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNzYsOCArNzYsOCBAQCBib29sIFNlZ21lbnRlZEZvbnRE
YXRhOjppc0N1c3RvbUZvbnQoKSBjb25zdAogCiBib29sIFNlZ21lbnRlZEZvbnREYXRhOjppc0xv
YWRpbmcoKSBjb25zdAogewotICAgIFZlY3RvcjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9yYW5nZXMuZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8Rm9udERhdGFSYW5nZT46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CisgICAgYXV0byBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3Jh
bmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgaWYgKGl0LT5mb250RGF0
YSgpLT5pc0xvYWRpbmcoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcApp
bmRleCAwNTE4NzFhYzZjNjBmYjY0MzkyODMwYWFjNmFkMzg1MmE5NGQ0NDc2Li5kZDA5NjNhNzUw
MWFkMmVlMDYzMWE1ZTE2ZDc5NTExMTEyMjM5ZDU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCkBAIC0yMDAsNyArMjAwLDcg
QEAgYm9vbCBjb252ZXJ0V09GRlRvU2ZudChTaGFyZWRCdWZmZXIqIHdvZmYsIFZlY3RvcjxjaGFy
PiYgc2ZudCkKICAgICAgICAgICAgIHVMb25nZiBkZXN0TGVuID0gdGFibGVPcmlnTGVuZ3RoOwog
ICAgICAgICAgICAgaWYgKCFzZm50LnRyeVJlc2VydmVDYXBhY2l0eShzZm50LnNpemUoKSArIHRh
YmxlT3JpZ0xlbmd0aCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgQnl0ZWYqIGRlc3QgPSByZWludGVycHJldF9jYXN0PEJ5dGVmKj4oc2ZudC5lbmQoKSk7Cisg
ICAgICAgICAgICBCeXRlZiogZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Qnl0ZWYqPihnZXRQdHIo
c2ZudC5lbmQoKSkpOwogICAgICAgICAgICAgc2ZudC5ncm93KHNmbnQuc2l6ZSgpICsgdGFibGVP
cmlnTGVuZ3RoKTsKICAgICAgICAgICAgIGlmICh1bmNvbXByZXNzKGRlc3QsICZkZXN0TGVuLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IEJ5dGVmKj4od29mZi0+ZGF0YSgpICsgdGFibGVPZmZzZXQp
LCB0YWJsZUNvbXBMZW5ndGgpICE9IFpfT0spCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCBlNDhlYjliNjc1ZGM5
ZDIxNzU5OTI0Yzg4MDVhZmEwYjg5YjQ5ODM3Li5lOWZiNWZhM2NkYTE0NzFlYzZlYmFiYjc0YTk2
MDFlZmY0YzM1NDNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAt
MTU3Nyw4ICsxNTc3LDggQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50RmlsbExheWVycyhjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgQ29sb3ImIGMsIGNvbnMKICAgICAgICAgY29udGV4
dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcigxKTsKICAgICB9CiAKLSAgICBWZWN0b3I8Y29uc3Qg
RmlsbExheWVyKj46OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgdG9wTGF5ZXIgPSBsYXllcnMucmVu
ZCgpOwotICAgIGZvciAoVmVjdG9yPGNvbnN0IEZpbGxMYXllcio+Ojpjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yIGl0ID0gbGF5ZXJzLnJiZWdpbigpOyBpdCAhPSB0b3BMYXllcjsgKytpdCkKKyAgICBh
dXRvIHRvcExheWVyID0gbGF5ZXJzLnJlbmQoKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBsYXllcnMu
cmJlZ2luKCk7IGl0ICE9IHRvcExheWVyOyArK2l0KQogICAgICAgICBwYWludEZpbGxMYXllcihw
YWludEluZm8sIGMsICppdCwgcmVjdCwgYmxlZWRBdm9pZGFuY2UsIG9wLCBiYWNrZ3JvdW5kT2Jq
ZWN0LCBiYXNlQmdDb2xvclVzYWdlKTsKIAogICAgIGlmIChzaG91bGREcmF3QmFja2dyb3VuZElu
U2VwYXJhdGVCdWZmZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcAppbmRleCAwZjM2MmFlZmExYmFmNjExMTRlZjRi
NDQ4MTc2NzA3YjJiZTI1MzBjLi5kNTk0ZGQ4OTc3OWJmNzgyMzM1NmYzMjA4ZGM3ZjdjMmNjYTEy
NTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29s
dmVkUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Hcmlk
UmVzb2x2ZWRQb3NpdGlvbi5jcHAKQEAgLTI5NSw3ICsyOTUsNyBAQCBzdGF0aWMgaW5saW5lIHNp
emVfdCBmaXJzdE5hbWVkR3JpZExpbmVCZWZvcmVQb3NpdGlvbihzaXplX3QgcG9zaXRpb24sIGNv
bnN0IFZlYwogICAgIC8vIGFscmVhZHkgY29udmVydGVkIHRvIGFuIGluZGV4IGluIG91ciBncmlk
IHJlcHJlc2VudGF0aW9uIChpZSBvbmUgd2FzIHJlbW92ZWQgZnJvbSB0aGUgZ3JpZCBsaW5lIHRv
IGFjY291bnQgZm9yCiAgICAgLy8gdGhlIHNpZGUpLgogICAgIHNpemVfdCBmaXJzdExpbmVCZWZv
cmVQb3NpdGlvbkluZGV4ID0gMDsKLSAgICBjb25zdCBzaXplX3QqIGZpcnN0TGluZUJlZm9yZVBv
c2l0aW9uID0gc3RkOjpsb3dlcl9ib3VuZChncmlkTGluZXMuYmVnaW4oKSwgZ3JpZExpbmVzLmVu
ZCgpLCBwb3NpdGlvbik7CisgICAgYXV0byBmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiA9IHN0ZDo6
bG93ZXJfYm91bmQoZ3JpZExpbmVzLmJlZ2luKCksIGdyaWRMaW5lcy5lbmQoKSwgcG9zaXRpb24p
OwogICAgIGlmIChmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiAhPSBncmlkTGluZXMuZW5kKCkpIHsK
ICAgICAgICAgaWYgKCpmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiA+IHBvc2l0aW9uICYmIGZpcnN0
TGluZUJlZm9yZVBvc2l0aW9uICE9IGdyaWRMaW5lcy5iZWdpbigpKQogICAgICAgICAgICAgLS1m
aXJzdExpbmVCZWZvcmVQb3NpdGlvbjsKQEAgLTMxNyw3ICszMTcsNyBAQCBzdGQ6OnVuaXF1ZV9w
dHI8R3JpZFNwYW4+IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlUm93U3RhcnRDb2x1bW5T
dGFydE5hbWVkRwogc3RkOjp1bmlxdWVfcHRyPEdyaWRTcGFuPiBHcmlkUmVzb2x2ZWRQb3NpdGlv
bjo6cmVzb2x2ZVJvd0VuZENvbHVtbkVuZE5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBv
c2l0ZVBvc2l0aW9uKGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNvbHZlZE9wcG9zaXRl
UG9zaXRpb24sIGNvbnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFZlY3RvcjxzaXpl
X3Q+JiBncmlkTGluZXMpCiB7CiAgICAgc2l6ZV90IGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3Np
dGlvbkluZGV4ID0gZ3JpZExpbmVzLnNpemUoKSAtIDE7Ci0gICAgY29uc3Qgc2l6ZV90KiBmaXJz
dExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb24gPSBzdGQ6OnVwcGVyX2JvdW5kKGdyaWRMaW5lcy5i
ZWdpbigpLCBncmlkTGluZXMuZW5kKCksIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CisgICAg
YXV0byBmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb24gPSBzdGQ6OnVwcGVyX2JvdW5kKGdy
aWRMaW5lcy5iZWdpbigpLCBncmlkTGluZXMuZW5kKCksIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlv
bik7CiAgICAgaWYgKGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbiAhPSBncmlkTGluZXMu
ZW5kKCkpCiAgICAgICAgIGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbkluZGV4ID0gZmly
c3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uIC0gZ3JpZExpbmVzLmJlZ2luKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwCmluZGV4IGMzM2ZmYjc3YjZkOGY5OTU3YjEyNmYx
YmYzOTE3YTg1N2ZkZmI1MGUuLmEwYmY1MDE5MWI2YWI5NTgxNjE4ZDk1M2MwODkwZDIxMmViN2Iz
NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcApAQCAtMjUyLDMxICsyNTIs
MzEgQEAgc3RhdGljIGlubGluZSBmbG9hdCBrZXJuaW5nRm9yUGFpck9mU3RyaW5nc0FuZEdseXBo
cyhjb25zdCBTVkdLZXJuaW5nTWFwJiBrZXJuaW4KIHsKICAgICBpZiAoIWcxLmlzRW1wdHkoKSAm
JiBrZXJuaW5nTWFwLmdseXBoTWFwLmNvbnRhaW5zKGcxKSkgewogICAgICAgICBTVkdLZXJuaW5n
VmVjdG9yKiBrZXJuaW5nVmVjdG9yID0ga2VybmluZ01hcC5nbHlwaE1hcC5nZXQoZzEpOwotICAg
ICAgICBTVkdLZXJuaW5nVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGtlcm5pbmdWZWN0b3It
PmVuZCgpIC0gMTsKLSAgICAgICAgY29uc3QgU1ZHS2VybmluZ1ZlY3Rvcjo6Y29uc3RfaXRlcmF0
b3IgYmVnaW4gPSBrZXJuaW5nVmVjdG9yLT5iZWdpbigpIC0gMTsKLSAgICAgICAgZm9yICg7IGl0
ICE9IGJlZ2luOyAtLWl0KSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2hlcyh1MiwgZzIsICppdCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXJuaW5nOworICAgICAgICBzaXplX3QgaXQg
PSBrZXJuaW5nVmVjdG9yLT5zaXplKCk7CisgICAgICAgIHdoaWxlIChpdC0tID4gMCkgeworICAg
ICAgICAgICAgYXV0byYgdmFsdWUgPSBrZXJuaW5nVmVjdG9yLT5hdChpdCk7CisgICAgICAgICAg
ICBpZiAobWF0Y2hlcyh1MiwgZzIsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFs
dWUua2VybmluZzsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghdTEuaXNFbXB0eSgpKSB7
CiAgICAgICAgIGlmIChrZXJuaW5nTWFwLnVuaWNvZGVNYXAuY29udGFpbnModTEpKSB7CiAgICAg
ICAgICAgICBTVkdLZXJuaW5nVmVjdG9yKiBrZXJuaW5nVmVjdG9yID0ga2VybmluZ01hcC51bmlj
b2RlTWFwLmdldCh1MSk7Ci0gICAgICAgICAgICBTVkdLZXJuaW5nVmVjdG9yOjpjb25zdF9pdGVy
YXRvciBpdCA9IGtlcm5pbmdWZWN0b3ItPmVuZCgpIC0gMTsKLSAgICAgICAgICAgIGNvbnN0IFNW
R0tlcm5pbmdWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0ga2VybmluZ1ZlY3Rvci0+YmVn
aW4oKSAtIDE7Ci0gICAgICAgICAgICBmb3IgKDsgaXQgIT0gYmVnaW47IC0taXQpIHsKLSAgICAg
ICAgICAgICAgICBpZiAobWF0Y2hlcyh1MiwgZzIsICppdCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBpdC0+a2VybmluZzsKKyAgICAgICAgICAgIHNpemVfdCBpdCA9IGtlcm5pbmdWZWN0
b3ItPnNpemUoKTsKKyAgICAgICAgICAgIHdoaWxlIChpdC0tID4gMCkgeworICAgICAgICAgICAg
ICAgIGF1dG8mIHZhbHVlID0ga2VybmluZ1ZlY3Rvci0+YXQoaXQpOworICAgICAgICAgICAgICAg
IGlmIChtYXRjaGVzKHUyLCBnMiwgdmFsdWUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dmFsdWUua2VybmluZzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICgh
a2VybmluZ01hcC5rZXJuaW5nVW5pY29kZVJhbmdlTWFwLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgVmVjdG9yPFNWR0tlcm5pbmdQYWlyPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBrZXJuaW5nTWFw
Lmtlcm5pbmdVbmljb2RlUmFuZ2VNYXAuZW5kKCkgLSAxOwotICAgICAgICAgICAgY29uc3QgVmVj
dG9yPFNWR0tlcm5pbmdQYWlyPjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBrZXJuaW5nTWFwLmtl
cm5pbmdVbmljb2RlUmFuZ2VNYXAuYmVnaW4oKSAtIDE7Ci0gICAgICAgICAgICBmb3IgKDsgaXQg
IT0gYmVnaW47IC0taXQpIHsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyh1MSwgdTIsIGcy
LCAqaXQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQtPmtlcm5pbmc7CisgICAgICAg
ICAgICBzaXplX3QgaXQgPSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VNYXAuc2l6ZSgp
OworICAgICAgICAgICAgd2hpbGUgKGl0LS0gPiAwKSB7CisgICAgICAgICAgICAgICAgYXV0byYg
dmFsdWUgPSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VNYXBbaXRdOworICAgICAgICAg
ICAgICAgIGlmIChtYXRjaGVzKHUxLCB1MiwgZzIsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlLmtlcm5pbmc7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oCmluZGV4IDlkOWQyYTJiMjNjNjAw
ZmViYjUzNDBjYmNkZDFiNjFkZGMzYjlmMTUuLmI5OTk1NTQ5NDM5YWM5NjRhYjNlNjdhMzBmMGQ4
OWQ4YzM1OGFjYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0
cmVhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oCkBAIC02
MCw4ICs2MCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZCh1bnNpZ25lZCBjaGFyIGJ5dGUp
IHsgbV9kYXRhLmFwcGVuZChieXRlKTsgfQogICAgIHZvaWQgYXBwZW5kKFNWR1BhdGhCeXRlU3Ry
ZWFtKiBvdGhlcikKICAgICB7Ci0gICAgICAgIGZvciAoRGF0YUl0ZXJhdG9yIGl0ID0gb3RoZXIt
PmJlZ2luKCk7IGl0ICE9IG90aGVyLT5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgIGFwcGVuZCgq
aXQpOworICAgICAgICBmb3IgKGF1dG8mIGJ5dGUgOiAqb3RoZXIpCisgICAgICAgICAgICBhcHBl
bmQoYnl0ZSk7CiAgICAgfQogICAgIHZvaWQgY2xlYXIoKSB7IG1fZGF0YS5jbGVhcigpOyB9CiAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fZGF0YS5zaXplKCk7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3htbC9YUGF0aE5vZGVTZXQuaAppbmRleCAzZDg5YjhkNTA4N2E4NmNmZWFmZmMwMTQwYjY5NDc2
MmMwOTVkZGRmLi5kYWYyYjkzZDUxYjVhZjZiNzM0ZjVmOWE3NjU0MTM2OWUwNDE0YTJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUveG1sL1hQYXRoTm9kZVNldC5oCkBAIC02NCw4ICs2NCw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgICAgIHZvaWQgbWFya1N1YnRyZWVzRGlzam9pbnQoYm9vbCBkaXNqb2lu
dCkgeyBtX3N1YnRyZWVzQXJlRGlzam9pbnQgPSBkaXNqb2ludDsgfQogICAgICAgICAgICAgYm9v
bCBzdWJ0cmVlc0FyZURpc2pvaW50KCkgY29uc3QgeyByZXR1cm4gbV9zdWJ0cmVlc0FyZURpc2pv
aW50IHx8IG1fbm9kZXMuc2l6ZSgpIDwgMjsgfQogCi0gICAgICAgICAgICBjb25zdCBSZWZQdHI8
Tm9kZT4qIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rlcy5iZWdpbigpOyB9Ci0gICAgICAg
ICAgICBjb25zdCBSZWZQdHI8Tm9kZT4qIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuZW5k
KCk7IH0KKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4+OjppdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuYmVnaW4oKTsgfQorICAgICAgICAgICAgY29u
c3QgVmVjdG9yPFJlZlB0cjxOb2RlPj46Oml0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
bm9kZXMuZW5kKCk7IH0KIAogICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgdm9pZCB0cmF2
ZXJzYWxTb3J0KCkgY29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241906</attachid>
            <date>2014-11-19 16:27:28 -0800</date>
            <delta_ts>2014-11-20 09:55:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138821-20141119162743.patch</filename>
            <type>text/plain</type>
            <size>68005</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2MzUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
ZTFmZjE5MDA4NDNmYmYzZDM2Yjk3OTRhNjMyMTRhOWEzZjg3YmZlLi4zMjMzMGMxMzk2MzBkYzdi
N2FlNmExYWMyNDA0ZDU0MzI0ZTQ1OGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNiBAQAorMjAxNC0xMS0xNyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3Rp
bGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGVyZSBhcmUgYSBmZXcgdXNlcyBvZiBiZWdpbigpL2VuZCgp
IHRoYXQgZXhwbGljaXRseSByZXF1aXJlIHBvaW50ZXJzLAorICAgICAgICBzbyB3ZSB1c2UgZ2V0
UHRyKCkgdG8gZXh0cmFjdCB0aGUgdW5kZXJseWluZyBwb2ludGVyIGdlbmVyaWNhbGx5LgorCisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRDb21wbGV4UG9wU2NvcGVzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVt
cCk6CisgICAgICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6RlRM
OjptZE5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkQ2FsbCk6CisgICAgICAgICogbGxp
bnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBlcmZvcm1Bc3Nl
cnRpb25zKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlNjb3Bl
OjpTY29wZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwOgorICAgICAgICAo
SlNDOjpQcm9maWxlTm9kZTo6ZGVidWdQcmludFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3Rvcik6
CisgICAgICAgICogdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2Zp
bGVUcmVlTm9kZTo6ZHVtcEludGVybmFsKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgor
ICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjptYXRjaENoYXJhY3RlckNsYXNzKToK
KwogMjAxNC0xMS0xOSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4ZXMgYWZ0ZXIgcjE3NjMyOS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggNTUxYTZi
NmQ5NjkzOGY4YmMzYjYwM2ExM2UxMDBkODY0YzFkYjgzZS4uMjcxODkzM2IyNTNkZWQyMmQzMmIy
NGQ3OGRlNDAwNWM2MmQxN2ZhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5OCBAQAorMjAxNC0xMS0xNyAgT2xp
dmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBi
YXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3RpbGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5n
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBu
ZXcgSW5kZXhlZEl0ZXJhdG9yIHN0cnVjdCB0byBXVEYgdGhhdCB3cmFwcyBhCisgICAgICAgIFZl
Y3RvciB0eXBlIGFuZCBpbmRleCB0byBwcm92aWRlIHBvaW50ZXIgbGlrZSBzZW1hbnRpY3MKKyAg
ICAgICAgd2hpbGUgc3RpbGwgcGVyZm9ybWluZyBydW50aW1lIGJvdW5kcyBjaGVja2luZywgZXZl
biBpbgorICAgICAgICByZWxlYXNlIGJ1aWxkcy4gV2Ugc3RvcmUgYSBzaW1wbGUgaW5kZXggaW50
byB0aGUgdmVjdG9yCisgICAgICAgIHdoaWNoIG1lYW5zIHRoYXQgdGhpcyBpdGVyYXRvciBhbGxv
d3MgdmVjdG9yIHJlc2l6aW5nCisgICAgICAgIGR1cmluZyBpdGVyYXRpb24uIElmIHRoZSB2ZWN0
b3IgaXMgcmVzaXplZCBzdWNoIHRoYXQgdGhlCisgICAgICAgIGl0ZXJhdG9yIGlzIG91dCBvZiBi
b3VuZHMsIHRoZW4gYW55IGF0dGVtcHQgdG8gZGVyZWZlcmVuY2UKKyAgICAgICAgdGhlIGl0ZXJh
dG9yIHdpbGwgY3Jhc2ggc2FmZWx5LiBBbnkgb3RoZXIgZXJyb3JzLCBpbmNsdWRpbmcKKyAgICAg
ICAgb3ZlcmZsb3dzLCBhbmQgb3ZlciBleHRlbmRpbmcgdGhlIGl0ZXJhdG9yIHdpbGwgbGlrZXdp
c2UKKyAgICAgICAgY3Jhc2guCisKKyAgICAgICAgRm9yIHRoZSBwdXJwb3NlIG9mIHJldGFpbmlu
ZyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudAorICAgICAgICBiZWhhdmlvdXIsIHRoZSBpdGVyYXRv
ciBjYW4gYmUgbW92ZWQgdG8gbV9pbmRleCA9PSBzaXplKCkKKyAgICAgICAgYXMgdGhhdCBpcyB0
aGUgc3RhbmRhcmQgImVuZCIgdGVybWluYXRvciBmb3IgdGhlc2UgdHlwZXMuCisgICAgICAgIEF0
dGVtcHRpbmcgdG8gZGVyZWZlcmVuY2UgYXQgdGhhdCBwb2ludCB3aWxsIHN0aWxsIGNyYXNoCisg
ICAgICAgIHJhdGhlciB0aGFuIHBlcmZvcm0gYW4gdW5zYWZlIG1lbW9yeSBvcGVyYXRpb24uCisK
KyAgICAgICAgSW4gb3JkZXIgdG8gbWFpbnRhaW4gdGhlIHZhbGlkaXR5IG9mIGFsbCB0aGUgYm91
bmRzIGNoZWNraW5nLAorICAgICAgICB3ZSBwZXJmb3JtIGZ1bGwgaW50ZWdlciByYW5nZSBjaGVj
a2luZyBwcmlvciB0byBhbnkgbXV0YXRpb24KKyAgICAgICAgb2YgdGhlIGl0ZXJhdG9yIGxvY2F0
aW9uLiBJZiB3ZSBkZXRlY3QgYW4gYXJpdGhtZXRpYyBvdmVyZmxvdworICAgICAgICB3ZSB3aWxs
IGNyYXNoIHJhdGhlciB0aGFuIGF0dGVtcHRpbmcgdG8gY2Fycnkgb24uCisKKyAgICAgICAgQnkg
bmVjZXNzaXR5IHRoZXJlIGFyZSBtYW55IG92ZXJyaWRlcyBmb3Igb3BlcmF0b3IgKyBhbmQgLSBh
cworICAgICAgICB3ZSBvdGhlcndpc2UgaGl0IG1hbnkgZGlmZmVyZW50IHR5cGUgcHJvbW90aW9u
IGFtYmlndWl0aWVzIHdoZW4KKyAgICAgICAgcGVyZm9ybWluZyBhcml0aG1ldGljIHdpdGggaXRl
cmF0b3JzLiBUaGVzZSBhbWJpZ3VpdGllcyBhcmUgYWxzbworICAgICAgICBkaWZmZXJlbnQgZm9y
IDMyLSB2cy4gNjQtYml0LCBzbyBkdXBsaWNhdGluZyB0aGUgZnVuY3Rpb25zCisgICAgICAgIGFu
ZCB0aGVuIGZvcndhcmRpbmcgdG8gdGhlIGNvcmUgaW1wbGVtZW50YXRpb25zIHRoYXQgcGVyZm9y
bWVkCisgICAgICAgIHRoZSBib3VuZHMgY2hlY2tpbmcgYW5kIG11dGF0aW9uIHNlZW1lZCBsaWtl
IHRoZSByaWdodCBjYWxsLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogd3RmL0luZGV4ZWRJdGVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdU
Rjo6SW5kZXhlZEl0ZXJhdG9yOjpJbmRleGVkSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpJbmRl
eGVkSXRlcmF0b3I6Om9wZXJhdG9yLT4pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6
Om9wZXJhdG9yKik6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6Z2V0KToKKyAgICAg
ICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6SW5k
ZXhlZEl0ZXJhdG9yOjpvcGVyYXRvci0tKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9y
OjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0
ZXJhdG9yOjpvcGVyYXRvcis9KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVy
YXRvci09KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcispOgorICAg
ICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yLSk6CisgICAgICAgIChXVEY6Oklu
ZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9y
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvciE9
KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcjwpOgorICAgICAgICAo
V1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPD0pOgorICAgICAgICAoV1RGOjpJbmRleGVk
SXRlcmF0b3I6Om9wZXJhdG9yPik6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3Bl
cmF0b3I+PSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IgY29uc3Rf
aXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6OmlzU2FmZVRvQ29tcGFy
ZSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6dW5zYWZlR2V0KToKKyAgICAgICAg
KFdURjo6Z2V0UHRyKToKKyAgICAgICAgKFdURjo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6
b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpv
cGVyYXRvcjw9KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I+PSk6CisgICAgICAgIChXVEY6Om9w
ZXJhdG9yPCk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPik6CisgICAgICAgIChXVEY6OkluZGV4
ZWRJdGVyYXRvclNlbGVjdG9yOjptYWtlSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpJbmRleGVk
SXRlcmF0b3JTZWxlY3Rvcjo6bWFrZUNvbnN0SXRlcmF0b3IpOgorICAgICAgICAqIHd0Zi9SZWZD
b3VudGVkQXJyYXkuaDoKKyAgICAgICAgKFdURjo6UmVmQ291bnRlZEFycmF5OjpSZWZDb3VudGVk
QXJyYXkpOgorICAgICAgICAqIHd0Zi9WZWN0b3IuaDoKKyAgICAgICAgKFdURjo6VmVjdG9yOjpW
ZWN0b3IpOgorICAgICAgICAoV1RGOjpWZWN0b3I6OmJlZ2luKToKKyAgICAgICAgKFdURjo6VmVj
dG9yOjplbmQpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpWZWN0b3IpOgorICAg
ICAgICAoV1RGOjo9KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6ZmlsbCk6Cisg
ICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OmV4cGFuZENhcGFjaXR5KToKKyAgICAgICAg
KFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6dHJ5RXhwYW5kQ2FwYWNpdHkpOgorICAgICAgICAoV1RG
OjpPdmVyZmxvd0hhbmRsZXI+OjpyZXNpemUpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRs
ZXI+OjpzaHJpbmspOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+Ojpncm93KToKKyAg
ICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6cmVzZXJ2ZUNhcGFjaXR5KToKKyAgICAgICAg
KFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6dHJ5UmVzZXJ2ZUNhcGFjaXR5KToKKyAgICAgICAgKFdU
Rjo6T3ZlcmZsb3dIYW5kbGVyPjo6c2hyaW5rQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpPdmVy
Zmxvd0hhbmRsZXI+OjphcHBlbmQpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+Ojp0
cnlBcHBlbmQpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmRTbG93Q2Fz
ZSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnVuY2hlY2tlZEFwcGVuZCk6Cisg
ICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OmFwcGVuZFZlY3Rvcik6CisgICAgICAgIChX
VEY6Ok92ZXJmbG93SGFuZGxlcj46Omluc2VydCk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFu
ZGxlcj46Omluc2VydFZlY3Rvcik6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnJl
bW92ZSk6CisKIDIwMTQtMTEtMTggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBIYXZlIFZlY3Rvcjo6Y2FwYWNpdHkoKSByZXR1cm4gYW4gdW5zaWduZWQgaW5zdGVh
ZCBvZiBhIHNpemVfdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDVkNTFjMWQ0MzY5OWMzZjZiMDRhZjIwNzViMGUw
MGRkODkzYTE2YWUuLjg1MzE0MTA4ZjgyYTNmZTllM2EyYjI0MDc3ODczYTc1MTYyY2Q2NTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxNC0xMS0xNyAgT2xpdmVyIEh1bnQgIDxvbGl2
ZXJAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24g
b2YgVmVjdG9yPD4gc3RpbGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGVyZSBhcmUgYSBmZXcgdXNlcyBv
ZiBiZWdpbigpL2VuZCgpIHRoYXQgZXhwbGljaXRseSByZXF1aXJlIHBvaW50ZXJzLAorICAgICAg
ICBzbyB3ZSB1c2UgZ2V0UHRyKCkgdG8gZXh0cmFjdCB0aGUgdW5kZXJseWluZyBwb2ludGVyIGdl
bmVyaWNhbGx5LgorCisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZVN0
cmluZyk6CisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2VhcmNoQnVmZmVyOjppc0JhZE1hdGNoKToKKyAgICAgICAgKiBwYWdlL21hYy9TZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGlnaHQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNl
Z21lbnRlZEZvbnREYXRhOjpmb250RGF0YUZvckNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3Jl
OjpTZWdtZW50ZWRGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VnbWVudGVkRm9udERhdGE6OmlzTG9hZGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFdPRkZU
b1NmbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94OjpwYWludEZpbGxMYXllcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaXJzdE5h
bWVkR3JpZExpbmVCZWZvcmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmlkUmVzb2x2
ZWRQb3NpdGlvbjo6cmVzb2x2ZVJvd0VuZENvbHVtbkVuZE5hbWVkR3JpZExpbmVQb3NpdGlvbkFn
YWluc3RPcHBvc2l0ZVBvc2l0aW9uKToKKyAgICAgICAgKiBzdmcvU1ZHRm9udEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6a2VybmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMpOgor
ICAgICAgICAqIHN2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEJ5dGVTdHJlYW06OmFwcGVuZCk6CisgICAgICAgICogeG1sL1hQYXRoTm9kZVNldC5oOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Ok5vZGVTZXQ6OmJlZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpOb2RlU2V0OjplbmQpOgorCiAyMDE0LTExLTE4ICBBZGEgQ2hhbiAgPGFkYWNo
YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFRha2UgV2ViIEF1ZGlvIGludG8gYWNjb3VudCBmb3Ig
dGhlIFBhZ2U6OmlzUGxheWluZ0F1ZGlvKCkgQVBJLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKaW5kZXggNmMyOTNjY2Y5OGQ1
NjczMjZkYzQyZmFiZDVkZmE0MWQyM2Y2YzJjMS4uNjM1YWNkMmNiYjM4ZTc4YTYwODNiNjFlNThk
YmExYjQ3Y2I3OWU5YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC0yMzQsOSArMjM0LDkgQEAgdm9pZCBVbmxpbmtl
ZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc3ltYm9sVGFibGUpOwogICAgIGZvciAoRnVu
Y3Rpb25FeHByZXNzaW9uVmVjdG9yOjppdGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0
aW9uRGVjbHMuYmVnaW4oKSwgZW5kID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkRlY2xzLmVuZCgp
OyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQocHRyKTsKKyAgICAg
ICAgdmlzaXRvci5hcHBlbmQoV1RGOjpnZXRQdHIocHRyKSk7CiAgICAgZm9yIChGdW5jdGlvbkV4
cHJlc3Npb25WZWN0b3I6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25FeHBy
cy5iZWdpbigpLCBlbmQgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRXhwcnMuZW5kKCk7IHB0ciAh
PSBlbmQ7ICsrcHRyKQotICAgICAgICB2aXNpdG9yLmFwcGVuZChwdHIpOworICAgICAgICB2aXNp
dG9yLmFwcGVuZChXVEY6OmdldFB0cihwdHIpKTsKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0
aGlzT2JqZWN0LT5tX2NvbnN0YW50UmVnaXN0ZXJzLmRhdGEoKSwgdGhpc09iamVjdC0+bV9jb25z
dGFudFJlZ2lzdGVycy5zaXplKCkpOwogICAgIGlmICh0aGlzT2JqZWN0LT5tX3JhcmVEYXRhKSB7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBlbmQgPSB0aGlzT2JqZWN0LT5tX3JhcmVEYXRh
LT5tX3JlZ2V4cHMuc2l6ZSgpOyBpICE9IGVuZDsgaSsrKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCBi
MjEzNGVmN2E1MDliNzM2OWUzZDJjMDU2NjJjMjFiODQ3MDdmZjVjLi44ZmQ4YTBlMmI2NGY2MDE0
ZjYzMzE1M2VkMTk4MDc5NWUxYmM1ZGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMjI2Myw4ICsy
MjYzLDggQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMoUmVn
aXN0ZXJJRCogc2NvcGUsIENvbnRyb2xGbG93Q29udGUKICAgICAgICAgICAgIGludCB0b3BTY29w
ZUluZGV4ID0gLTE7CiAgICAgICAgICAgICBpbnQgYm90dG9tU2NvcGVJbmRleCA9IC0xOwogICAg
ICAgICAgICAgaWYgKGZsaXBTY29wZXMpIHsKLSAgICAgICAgICAgICAgICB0b3BTY29wZUluZGV4
ID0gdG9wU2NvcGUgLSBtX3Njb3BlQ29udGV4dFN0YWNrLmJlZ2luKCk7Ci0gICAgICAgICAgICAg
ICAgYm90dG9tU2NvcGVJbmRleCA9IGJvdHRvbVNjb3BlIC0gbV9zY29wZUNvbnRleHRTdGFjay5i
ZWdpbigpOworICAgICAgICAgICAgICAgIHRvcFNjb3BlSW5kZXggPSB0b3BTY29wZSAtIGdldFB0
cihtX3Njb3BlQ29udGV4dFN0YWNrLmJlZ2luKCkpOworICAgICAgICAgICAgICAgIGJvdHRvbVNj
b3BlSW5kZXggPSBib3R0b21TY29wZSAtIGdldFB0cihtX3Njb3BlQ29udGV4dFN0YWNrLmJlZ2lu
KCkpOwogICAgICAgICAgICAgICAgIHNhdmVkU2NvcGVDb250ZXh0U3RhY2sgPSBtX3Njb3BlQ29u
dGV4dFN0YWNrOwogICAgICAgICAgICAgICAgIG1fc2NvcGVDb250ZXh0U3RhY2suc2hyaW5rKGZp
bmFsbHlDb250ZXh0LnNjb3BlQ29udGV4dFN0YWNrU2l6ZSk7CiAgICAgICAgICAgICB9CkBAIC0y
MzA4LDcgKzIzMDgsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleFBvcFNj
b3BlcyhSZWdpc3RlcklEKiBzY29wZSwgQ29udHJvbEZsb3dDb250ZQogICAgICAgICAgICAgaWYg
KGZsaXBTY29wZXMpIHsKICAgICAgICAgICAgICAgICBtX3Njb3BlQ29udGV4dFN0YWNrID0gc2F2
ZWRTY29wZUNvbnRleHRTdGFjazsKICAgICAgICAgICAgICAgICB0b3BTY29wZSA9ICZtX3Njb3Bl
Q29udGV4dFN0YWNrW3RvcFNjb3BlSW5kZXhdOyAvLyBhc3NlcnQgaXQncyB3aXRoaW4gYm91bmRz
Ci0gICAgICAgICAgICAgICAgYm90dG9tU2NvcGUgPSBtX3Njb3BlQ29udGV4dFN0YWNrLmJlZ2lu
KCkgKyBib3R0b21TY29wZUluZGV4OyAvLyBkb24ndCBhc3NlcnQsIHNpbmNlIGl0IHRoZSBpbmRl
eCBtaWdodCBiZSAtMS4KKyAgICAgICAgICAgICAgICBib3R0b21TY29wZSA9IFdURjo6Z2V0UHRy
KG1fc2NvcGVDb250ZXh0U3RhY2suYmVnaW4oKSkgKyBib3R0b21TY29wZUluZGV4OyAvLyBkb24n
dCBhc3NlcnQsIHNpbmNlIGl0IHRoZSBpbmRleCBtaWdodCBiZSAtMS4KICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGlmIChmbGlwU3dpdGNoZXMpCiAgICAgICAgICAgICAgICAgbV9zd2l0Y2hD
b250ZXh0U3RhY2sgPSBzYXZlZFN3aXRjaENvbnRleHRTdGFjazsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggZjA3MjRkZjQ3MDM5NDli
MzBkMjRlMzZhYTgyZTc3OGE1Y2I5YmY3My4uODIwOWY1ZmEwMjBkZTYzNTI2YjhmZmI2N2FlNmZh
NWYxMWQ1ZjE1MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKQEAgLTQ5MTAsNyArNDkxMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRTd2l0Y2hJbnRKdW1wKAogICAgIGFkZEJyYW5jaCgKICAgICAgICAgbV9qaXQuYnJhbmNoMzIo
SklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWUsIEltbTMyKHRhYmxlLmN0aU9mZnNldHMu
c2l6ZSgpKSksCiAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKLSAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHIodGFibGUuY3RpT2Zmc2V0cy5iZWdpbigpKSwgc2NyYXRjaCk7Cisg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGdldFB0cih0YWJsZS5jdGlPZmZzZXRzLmJlZ2lu
KCkpKSwgc2NyYXRjaCk7CiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QmFzZUluZGV4
KHNjcmF0Y2gsIHZhbHVlLCBKSVRDb21waWxlcjo6dGltZXNQdHIoKSksIHNjcmF0Y2gpOwogICAg
IG1faml0Lmp1bXAoc2NyYXRjaCk7CiAgICAgZGF0YS0+ZGlkVXNlSnVtcFRhYmxlID0gdHJ1ZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgKaW5kZXggZmM3
Y2IxYjI1NDMyNjk0YWFlZThmYmYzMTUzZTZlMDhhODMzMmYzOS4uYzdiMWRhOTY5OWU0MDdiNWQ2
ODM5ZTAxZGM3ZTYzZjEwY2Y4Mzc2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYmJyZXZpYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExBYmJyZXZpYXRpb25zLmgKQEAgLTEyMCw3ICsxMjAsNyBAQCBzdGF0aWMgaW5saW5lIExWYWx1
ZSBtZFN0cmluZyhMQ29udGV4dCBjb250ZXh0LCBjb25zdCBjaGFyKiBzdHJpbmcsIHVuc2lnbmVk
IGxlbgogc3RhdGljIGlubGluZSBMVmFsdWUgbWRTdHJpbmcoTENvbnRleHQgY29udGV4dCwgY29u
c3QgY2hhciogc3RyaW5nKSB7IHJldHVybiBtZFN0cmluZyhjb250ZXh0LCBzdHJpbmcsIHN0ZDo6
c3RybGVuKHN0cmluZykpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQg
Y29udGV4dCwgTFZhbHVlKiBhcmdzLCB1bnNpZ25lZCBudW1BcmdzKSB7IHJldHVybiBsbHZtLT5N
RE5vZGVJbkNvbnRleHQoY29udGV4dCwgYXJncywgbnVtQXJncyk7IH0KIHRlbXBsYXRlPHR5cGVu
YW1lIFZlY3RvclR5cGU+Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29u
dGV4dCwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKSB7IHJldHVybiBtZE5vZGUoY29udGV4dCwg
Y29uc3RfY2FzdDxMVmFsdWUqPih2ZWN0b3IuYmVnaW4oKSksIHZlY3Rvci5zaXplKCkpOyB9Citz
dGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwgY29uc3QgVmVjdG9y
VHlwZSYgdmVjdG9yKSB7IHJldHVybiBtZE5vZGUoY29udGV4dCwgY29uc3RfY2FzdDxMVmFsdWUq
PihnZXRQdHIodmVjdG9yLmJlZ2luKCkpKSwgdmVjdG9yLnNpemUoKSk7IH0KIHN0YXRpYyBpbmxp
bmUgTFZhbHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0KSB7IHJldHVybiBtZE5vZGUoY29udGV4
dCwgMCwgMCk7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0
LCBMVmFsdWUgYXJnMSkgeyByZXR1cm4gbWROb2RlKGNvbnRleHQsICZhcmcxLCAxKTsgfQogc3Rh
dGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQsIExWYWx1ZSBhcmcxLCBM
VmFsdWUgYXJnMikKQEAgLTI4OCw3ICsyODgsNyBAQCBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWls
ZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBMVmFsdWUqCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPgogaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1
aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3Ip
CiB7Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgdmVjdG9yLmJlZ2lu
KCksIHZlY3Rvci5zaXplKCkpOworICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rp
b24sIGdldFB0cih2ZWN0b3IuYmVnaW4oKSksIHZlY3Rvci5zaXplKCkpOwogfQogc3RhdGljIGlu
bGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbikK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKaW5kZXggNjkxOWFl
YWIwMGExYjI1YzQ3NWJiZjlkZDI1YzY4OGYwYWE1OGE3Mi4uMzFiYTRiMGM4MGI2M2U5YTc3Yzgx
NWI0N2QxZTVkM2ZhYTFmNTI3MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
RGF0YS5jcHAKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRpb25z
KFZNJiB2bSkKICAgICBWZWN0b3I8aW50PiB0ZXN0VmVjdG9yOwogICAgIHRlc3RWZWN0b3IucmVz
aXplKDQyKTsKICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnQzMl90Kj4oJnRlc3RWZWN0b3Ip
W3NpemVvZih2b2lkKikvc2l6ZW9mKHVpbnQzMl90KSArIDFdID09IDQyKTsKLSAgICBBU1NFUlQo
Yml0d2lzZV9jYXN0PGludCoqPigmdGVzdFZlY3RvcilbMF0gPT0gdGVzdFZlY3Rvci5iZWdpbigp
KTsKKyAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGludCoqPigmdGVzdFZlY3RvcilbMF0gPT0gZ2V0
UHRyKHRlc3RWZWN0b3IuYmVnaW4oKSkpOwogI2VuZGlmCiAKICAgICBBU1NFUlQoU3RyaW5nSW1w
bDo6c19oYXNoRmxhZzhCaXRCdWZmZXIgPT0gMzIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmgKaW5kZXggNDUyZjcwNDZmMzAyMmQzODgxMDlhZWJkYzg0Mzg0ZTFhYTIyZmZhMS4u
MDFmY2NkYjdlMzhhYzVhNjAyMmM2OGM5N2I4ZDhlYjNiMGNlYzE4MCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlci5oCkBAIC0xMzAsMTEgKzEzMCw4IEBAIHN0cnVjdCBTY29wZSB7
CiAgICAgewogICAgICAgICBpZiAocmhzLm1fbGFiZWxzKSB7CiAgICAgICAgICAgICBtX2xhYmVs
cyA9IGFkb3B0UHRyKG5ldyBMYWJlbFN0YWNrKTsKLQotICAgICAgICAgICAgdHlwZWRlZiBMYWJl
bFN0YWNrOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKLSAgICAgICAgICAgIGl0ZXJhdG9yIGVu
ZCA9IHJocy5tX2xhYmVscy0+ZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0g
cmhzLm1fbGFiZWxzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAg
bV9sYWJlbHMtPmFwcGVuZChTY29wZUxhYmVsSW5mbyhpdC0+bV9pZGVudCwgaXQtPm1faXNMb29w
KSk7CisgICAgICAgICAgICBmb3IgKGF1dG8gbGFiZWwgOiAqcmhzLm1fbGFiZWxzKQorICAgICAg
ICAgICAgICAgIG1fbGFiZWxzLT5hcHBlbmQoU2NvcGVMYWJlbEluZm8obGFiZWwubV9pZGVudCwg
bGFiZWwubV9pc0xvb3ApKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVOb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlTm9kZS5jcHAKaW5kZXggMjY1Y2RkZDBlZjc4ODMzZjYx
YjU3MTExOWNmZDc3MjBmZDQ2ZDE1Ny4uNjkyYzdiODZmM2MzYTI1NDIxYmIxMDA4MmRmNmUwOGRl
YjQwZjBmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVOb2RlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZU5v
ZGUuY3BwCkBAIC0xNTQsNiArMTU0LDcgQEAgdm9pZCBQcm9maWxlTm9kZTo6ZGVidWdQcmludFJl
Y3Vyc2l2ZWx5KGludCBpbmRlbnRMZXZlbCwgY29uc3QgUHJvZmlsZVN1YnRyZWVEYXQKICAgICAv
LyBQcmludCBjaGlsZHJlbidzIG5hbWVzIGFuZCBpbmZvcm1hdGlvbgogICAgIGZvciAoU3RhY2tJ
dGVyYXRvciBjdXJyZW50Q2hpbGQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGN1cnJlbnRDaGlsZCAh
PSBtX2NoaWxkcmVuLmVuZCgpOyArK2N1cnJlbnRDaGlsZCkKICAgICAgICAgKCpjdXJyZW50Q2hp
bGQpLT5kZWJ1Z1ByaW50UmVjdXJzaXZlbHkoaW5kZW50TGV2ZWwsIGRhdGEpOworCiB9CiAKIC8v
IHByaW50IHRoZSBwcm9maWxlZCBkYXRhIGluIGEgZm9ybWF0IHRoYXQgbWF0Y2hlcyB0aGUgdG9v
bCBzYW1wbGUncyBvdXRwdXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCmluZGV4IGNjNjMwMjE3ZGY3ZmQyNWFkZTRjNGJiMzk4NTc0ZDY3ZDVhNzQ1NjkuLmJjYzg4
MzU5NjEyMjNmY2M1ZWFhNmY5M2ZhOWQ3MWY3NzIxMzFjZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCkBAIC0zNTIsNyArMzUyLDcgQEAgYm9vbCBKU0FycmF5
OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3
TGVuZ3RoLCBib28KICAgICAgICAgICAgIC8vIHByb3BlcnRpZXMsIHNvIHdlIGhhdmUgdG8gcGVy
Zm9ybSBkZWxldGlvbiB3aXRoIGNhdXRpb24sIGlmIG5vdCB3ZSBjYW4KICAgICAgICAgICAgIC8v
IGRlbGV0ZSB2YWx1ZXMgaW4gYW55IG9yZGVyLgogICAgICAgICAgICAgaWYgKG1hcC0+c3BhcnNl
TW9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgcXNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLnNpemUo
KSwgc2l6ZW9mKHVuc2lnbmVkKSwgY29tcGFyZUtleXNGb3JRU29ydCk7CisgICAgICAgICAgICAg
ICAgcXNvcnQoV1RGOjpnZXRQdHIoa2V5cy5iZWdpbigpKSwga2V5cy5zaXplKCksIHNpemVvZih1
bnNpZ25lZCksIGNvbXBhcmVLZXlzRm9yUVNvcnQpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGkgPSBrZXlzLnNpemUoKTsKICAgICAgICAgICAgICAgICB3aGlsZSAoaSkgewogICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGtleXNbLS1pXTsKQEAgLTExOTEsMTMgKzExOTEs
MTMgQEAgdm9pZCBKU0FycmF5Ojpzb3J0Q29tcGFjdGVkVmVjdG9yKEV4ZWNTdGF0ZSogZXhlYywg
Q29udGlndW91c0RhdGE8U3RvcmFnZVR5cGU+IGQKICAgICAgICAgCiAjaWYgSEFWRShNRVJHRVNP
UlQpCiAgICAgaWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcykKLSAgICAgICAgcXNvcnQodmFs
dWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21w
YXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBxc29ydChXVEY6OmdldFB0cih2YWx1
ZXMuYmVnaW4oKSksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21w
YXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogICAgIGVsc2UKLSAgICAgICAgbWVyZ2Vzb3J0KHZh
bHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29t
cGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICAgICAgbWVyZ2Vzb3J0KFdURjo6Z2V0UHRy
KHZhbHVlcy5iZWdpbigpKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciks
IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CiAjZWxzZQogICAgIC8vIEZJWE1FOiBUaGUg
cXNvcnQgbGlicmFyeSBmdW5jdGlvbiBpcyBsaWtlbHkgdG8gbm90IGJlIGEgc3RhYmxlIHNvcnQu
CiAgICAgLy8gRUNNQVNjcmlwdC0yNjIgZG9lcyBub3Qgc3BlY2lmeSBhIHN0YWJsZSBzb3J0LCBi
dXQgaW4gcHJhY3RpY2UsIGJyb3dzZXJzIHBlcmZvcm0gYSBzdGFibGUgc29ydC4KLSAgICBxc29y
dCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciks
IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAgcXNvcnQoV1RGOjpnZXRQdHIodmFs
dWVzLmJlZ2luKCkpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29t
cGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICNlbmRpZgogICAgIAogICAgIC8vIElmIHRoZSB0
b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3Rv
ciBzdG9yYWdlLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2Zp
bGVUcmVlTm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9k
ZS5oCmluZGV4IDg4ZDU3ZjNkZDRlNzk3NjlkMWQwNmMzYTg1OTEwMWI1NTVjNmE4M2YuLjkzOTY0
OTZkMDZjMTY0NGM3NWI5YjU0NWI1OGFmYzZkOGI4MWRhYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgVmVjdG9yPE1hcEVudHJ5Kj4gZW50cmllczsKICAgICAgICAgZm9yIChNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi0+YmVnaW4oKTsgaXQgIT0gbV9jaGlsZHJlbi0+ZW5k
KCk7ICsraXQpCiAgICAgICAgICAgICBlbnRyaWVzLmFwcGVuZCgmKml0KTsKLSAgICAgICAgcXNv
cnQoZW50cmllcy5iZWdpbigpLCBlbnRyaWVzLnNpemUoKSwgc2l6ZW9mKE1hcEVudHJ5KiksIGNv
bXBhcmVFbnRyaWVzKTsKKyAgICAgICAgcXNvcnQoV1RGOjpnZXRQdHIoZW50cmllcy5iZWdpbigp
KSwgZW50cmllcy5zaXplKCksIHNpemVvZihNYXBFbnRyeSopLCBjb21wYXJlRW50cmllcyk7CiAK
ICAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBjaGlsZHJlbiBpbiBzYW1wbGUtZnJlcXVlbmN5
IG9yZGVyLgogICAgICAgICBmb3IgKHNpemVfdCBlID0gMDsgZSA8IGVudHJpZXMuc2l6ZSgpOyAr
K2UpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKaW5kZXggZTNhM2E5MzJj
ZTdlZDczOGYxOTg2YjJiZjJiNzQzZTA0MjNhM2IyNS4uZDI2OGU1OWUxMmJiNGU4MzY4Y2UzOTIw
Njg3OGFjODE2MmUzYjQyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIv
WWFyckpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAK
QEAgLTIyMyw3ICsyMjMsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fz
c2VtYmxlciB7CiAgICAgICAgIGlmIChjaGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUoKSkgewogICAg
ICAgICAgICAgdW5zaWduZWQgbWF0Y2hJbmRleCA9IDA7CiAgICAgICAgICAgICBKdW1wTGlzdCBm
YWlsdXJlczsKLSAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3NSYW5nZShjaGFyYWN0ZXIs
IGZhaWx1cmVzLCBtYXRjaERlc3QsIGNoYXJDbGFzcy0+bV9yYW5nZXMuYmVnaW4oKSwgY2hhckNs
YXNzLT5tX3Jhbmdlcy5zaXplKCksICZtYXRjaEluZGV4LCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5i
ZWdpbigpLCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5zaXplKCkpOworICAgICAgICAgICAgbWF0Y2hD
aGFyYWN0ZXJDbGFzc1JhbmdlKGNoYXJhY3RlciwgZmFpbHVyZXMsIG1hdGNoRGVzdCwgY2hhckNs
YXNzLT5tX3Jhbmdlcy5kYXRhKCksIGNoYXJDbGFzcy0+bV9yYW5nZXMuc2l6ZSgpLCAmbWF0Y2hJ
bmRleCwgY2hhckNsYXNzLT5tX21hdGNoZXMuZGF0YSgpLCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5z
aXplKCkpOwogICAgICAgICAgICAgd2hpbGUgKG1hdGNoSW5kZXggPCBjaGFyQ2xhc3MtPm1fbWF0
Y2hlcy5zaXplKCkpCiAgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChicmFuY2gzMihF
cXVhbCwgY2hhcmFjdGVyLCBJbW0zMigodW5zaWduZWQgc2hvcnQpY2hhckNsYXNzLT5tX21hdGNo
ZXNbbWF0Y2hJbmRleCsrXSkpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggZmY0OGRhMGNjNTMxMjgyYTEyZDBkNTEwNmM2NjAzNWYxNTVkOTE1Ni4uMWJh
NWNmZDc4OThmZDllOTY1OTViZmQ1YTQ3NzRmZWYxZWJmNGY4MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05OCw2ICs5OCw3IEBACiAJCUE3NDg3NDUyMTdB
MEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NDg3NDRGMTdBMEJEQUUwMEZBMDRDQiAvKiBT
aXhDaGFyYWN0ZXJIYXNoLmNwcCAqLzsgfTsKIAkJQTc0ODc0NTMxN0EwQkRBRTAwRkEwNENCIC8q
IFNpeENoYXJhY3Rlckhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3NDg3NDUwMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmgg
Ki87IH07CiAJCUE3NDg3NDU0MTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJpbmdIYXNoRHVtcENvbnRl
eHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NDg3
NDUxMTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJpbmdIYXNoRHVtcENvbnRleHQuaCAqLzsgfTsKKwkJ
QTdEQzJGMDQxQTA5QTIyRDAwNzJGNEUzIC8qIEluZGV4ZWRJdGVyYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEQzJGMDMxQTA5OURFMzAwNzJG
NEUzIC8qIEluZGV4ZWRJdGVyYXRvci5oICovOyB9OwogCQlBN0U2NDNDNjE3QzU0MjNCMDAzQkIx
NkIgLyogQ29tcHJlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTdFNjQzQzQxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXByZXNzaW9uLmNwcCAq
LzsgfTsKIAkJQTdFNjQzQzcxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXByZXNzaW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0U2NDNDNTE3QzU0MjNC
MDAzQkIxNkIgLyogQ29tcHJlc3Npb24uaCAqLzsgfTsKIAkJQTg3NkRCRDgxNTE4MTZFNTAwREFE
Qjk1IC8qIFBsYXRmb3JtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBODc2REJENzE1MTgxNkU1MDBEQURCOTUgLyogUGxhdGZvcm0uaCAqLzsgfTsKQEAg
LTM4OSw2ICszOTAsNyBAQAogCQlBNzQ4NzQ0RjE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFj
dGVySGFzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaXhDaGFy
YWN0ZXJIYXNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc0ODc0NTAxN0Ew
QkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2l4Q2hhcmFjdGVySGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBNzQ4NzQ1MTE3QTBCREFFMDBGQTA0Q0IgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ0hhc2hEdW1wQ29udGV4dC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0RDMkYwMzFBMDk5REUzMDA3MkY0RTMg
LyogSW5kZXhlZEl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4ZWRJdGVyYXRvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0U2NDNDNDE3QzU0MjNCMDAzQkIxNkIgLyog
Q29tcHJlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29t
cHJlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0U2NDNDNTE3QzU0
MjNCMDAzQkIxNkIgLyogQ29tcHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29tcHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg3NkRC
RDcxNTE4MTZFNTAwREFEQjk1IC8qIFBsYXRmb3JtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBsYXRmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04OTIs
NiArODk0LDcgQEAKIAkJCQk5NzRDRkM4RDE2QTRGMzI3MDA2RDU0MDQgLyogV2Vha1B0ci5oICov
LAogCQkJCUE4QTQ3MzdBMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmNwcCAqLywK
IAkJCQlBOEE0NzM3QjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oICovLAorCQkJ
CUE3REMyRjAzMUEwOTlERTMwMDcyRjRFMyAvKiBJbmRleGVkSXRlcmF0b3IuaCAqLywKIAkJCSk7
CiAJCQlwYXRoID0gd3RmOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTEwNjUsNiAr
MTA2OCw3IEBACiAJCQkJQThBNDczQUQxNTFBODI1QjAwNDEyM0ZGIC8qIGNhY2hlZC1wb3dlcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDVFMTUxQTgyNUIwMDQxMjNGRiAvKiBDaGFyYWN0
ZXJOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOTQxNTFBODI1QjAwNDEyM0ZGIC8q
IENoZWNrZWRBcml0aG1ldGljLmggaW4gSGVhZGVycyAqLywKKwkJCQlBN0RDMkYwNDFBMDlBMjJE
MDA3MkY0RTMgLyogSW5kZXhlZEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM5
NTE1MUE4MjVCMDA0MTIzRkYgLyogQ2hlY2tlZEJvb2xlYW4uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4QTQ3NDVGMTUxQTgyNUIwMDQxMjNGRiAvKiBDb2xsYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZDNEVERTYxNjk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRlci5oIGluIEhlYWRlcnMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9JbmRleGVkSXRlcmF0b3IuaCBiL1NvdXJj
ZS9XVEYvd3RmL0luZGV4ZWRJdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3ZDRmYWU1OTc2MjAyYmQz
MWNlYjlkMWNlNmQyM2E2MjM3NjE0MTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9JbmRleGVkSXRlcmF0b3IuaApAQCAtMCwwICsxLDQ4MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV1RGX0luZGV4ZWRJdGVyYXRvcl9o
CisjZGVmaW5lIFdURl9JbmRleGVkSXRlcmF0b3JfaAorCituYW1lc3BhY2UgV1RGIHsKKworI2Rl
ZmluZSBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGNoZWNrKSBkbyB7XAorICAgIGlmICghKGNo
ZWNrKSlcCisgICAgICAgIE92ZXJmbG93SGFuZGxlcjo6b3ZlcmZsb3dlZCgpO1wKKyAgICB9IHdo
aWxlICgwKQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmVjdG9yVHlwZSwgdHlwZW5hbWUgVCwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyID0gQ3Jhc2hPbk92ZXJmbG93PiBzdHJ1Y3QgSW5kZXhlZEl0
ZXJhdG9yIHsKKyAgICB0eXBlZGVmIHN0cnVjdCBJbmRleGVkSXRlcmF0b3I8Y29uc3QgVmVjdG9y
VHlwZSwgY29uc3QgVCwgT3ZlcmZsb3dIYW5kbGVyPiBjb25zdF9pdGVyYXRvcjsKKworICAgIHR5
cGVkZWYgVCBWYWx1ZVR5cGU7CisgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBl
OworICAgIHR5cGVkZWYgVmFsdWVUeXBlIHZhbHVlX3R5cGU7CisgICAgdHlwZWRlZiBWYWx1ZVR5
cGUqIHBvaW50ZXI7CisgICAgdHlwZWRlZiBWYWx1ZVR5cGUmIHJlZmVyZW5jZTsKKyAgICB0eXBl
ZGVmIHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisK
KyAgICBJbmRleGVkSXRlcmF0b3IoKQorICAgICAgICA6IG1fdmVjdG9yKG51bGxwdHIpCisgICAg
ICAgICwgbV9wb3NpdGlvbigwKQorICAgIHsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Io
VmVjdG9yVHlwZSYgdmVjdG9yLCBWYWx1ZVR5cGUqIHBvc2l0aW9uKQorICAgICAgICA6IG1fdmVj
dG9yKCZ2ZWN0b3IpCisgICAgICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbiAtIHZlY3Rvci5kYXRh
KCkpCisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1fcG9zaXRpb24g
PD0gdmVjdG9yLnNpemUoKSk7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yKGNvbnN0IElu
ZGV4ZWRJdGVyYXRvciYgb3RoZXIpCisgICAgICAgIDogbV92ZWN0b3Iob3RoZXIubV92ZWN0b3Ip
CisgICAgICAgICwgbV9wb3NpdGlvbihvdGhlci5tX3Bvc2l0aW9uKQorICAgIHsKKyAgICB9CisK
KyAgICBWYWx1ZVR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmbV92ZWN0b3ItPmF0
KG1fcG9zaXRpb24pOyB9CisgICAgVmFsdWVUeXBlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVy
biBtX3ZlY3Rvci0+YXQobV9wb3NpdGlvbik7IH0KKyAgICBWYWx1ZVR5cGUqIGdldCgpIGNvbnN0
CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1fcG9zaXRpb24gPD0g
bV92ZWN0b3ItPnNpemUoKSk7CisgICAgICAgIHJldHVybiBtX3ZlY3Rvci0+ZGF0YSgpICsgbV9w
b3NpdGlvbjsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAg
IHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uIDwgbV92ZWN0
b3ItPnNpemUoKSk7CisgICAgICAgIG1fcG9zaXRpb24rKzsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvcisrKGludCkKKyAgICB7Cisg
ICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA8IG1fdmVjdG9yLT5z
aXplKCkpOworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAg
bV9wb3NpdGlvbisrOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEluZGV4
ZWRJdGVyYXRvciYgb3BlcmF0b3ItLSgpCisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9S
X09WRVJGTE9XKG1fcG9zaXRpb24gPiAwKTsKKyAgICAgICAgbV9wb3NpdGlvbi0tOworICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLS0o
aW50KQorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9u
ID4gMCk7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICBt
X3Bvc2l0aW9uLS07CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy8gVGhp
cyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGJvb2wg
YnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgorICAgIHR5cGVkZWYgc2l6ZV90IChJbmRl
eGVkSXRlcmF0b3I6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRvciBVbnNwZWNp
ZmllZEJvb2xUeXBlKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IgPyAmSW5kZXhlZEl0ZXJhdG9y
OjptX3Bvc2l0aW9uIDogbnVsbHB0cjsgfQorCisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJh
dG9yKz0obG9uZyBpbmNyZW1lbnQpCisgICAgeworICAgICAgICBpZiAoaW5jcmVtZW50IDwgMCkg
eworICAgICAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpbmNyZW1lbnQgIT0gc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpOworICAgICAgICAgICAgcmV0dXJuICgq
dGhpcykgLT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtaW5jcmVtZW50KTsKKyAgICAgICAgfQorICAg
ICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVf
dD46Om1heCgpIC0gbV9wb3NpdGlvbikgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluY3JlbWVudCkp
OworICAgICAgICBtX3Bvc2l0aW9uICs9IGluY3JlbWVudDsKKyAgICAgICAgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uIDw9IG1fdmVjdG9yLT5zaXplKCkpOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvci09KGxv
bmcgZGVjcmVtZW50KQorICAgIHsKKyAgICAgICAgaWYgKGRlY3JlbWVudCA8IDApIHsKKyAgICAg
ICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coZGVjcmVtZW50ICE9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50MzJfdD46Om1heCgpKTsKKyAgICAgICAgICAgIHJldHVybiAoKnRoaXMpICs9
IHN0YXRpY19jYXN0PHNpemVfdD4oLWRlY3JlbWVudCk7CisgICAgICAgIH0KKworICAgICAgICBJ
TkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKHN0YXRpY19jYXN0PHNpemVfdD4oZGVjcmVtZW50KSA8
PSBtX3Bvc2l0aW9uKTsKKyAgICAgICAgbV9wb3NpdGlvbiAtPSBkZWNyZW1lbnQ7CisgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJhdG9yKz0o
c2l6ZV90IGluY3JlbWVudCkKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZM
T1coKHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLSBtX3Bvc2l0aW9uKSA+IGlu
Y3JlbWVudCk7CisgICAgICAgIG1fcG9zaXRpb24gKz0gaW5jcmVtZW50OworICAgICAgICBJTkRF
WEVEX0lURVJBVE9SX09WRVJGTE9XKG1fcG9zaXRpb24gPD0gbV92ZWN0b3ItPnNpemUoKSk7Cisg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJh
dG9yLT0oc2l6ZV90IGRlY3JlbWVudCkKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1Jf
T1ZFUkZMT1coZGVjcmVtZW50IDw9IG1fcG9zaXRpb24pOworICAgICAgICBtX3Bvc2l0aW9uIC09
IGRlY3JlbWVudDsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIEluZGV4ZWRJ
dGVyYXRvciYgb3BlcmF0b3IrPShpbnQzMl90IGluY3JlbWVudCkKKyAgICB7CisgICAgICAgIGlm
IChpbmNyZW1lbnQgPCAwKSB7CisgICAgICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9X
KGluY3JlbWVudCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSk7CisgICAg
ICAgICAgICByZXR1cm4gKCp0aGlzKSAtPSBzdGF0aWNfY2FzdDxzaXplX3Q+KC1pbmNyZW1lbnQp
OworICAgICAgICB9CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coKHN0ZDo6bnVt
ZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLSBtX3Bvc2l0aW9uKSA+IHN0YXRpY19jYXN0PHNp
emVfdD4oaW5jcmVtZW50KSk7CisgICAgICAgIG1fcG9zaXRpb24gKz0gaW5jcmVtZW50OworICAg
ICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1fcG9zaXRpb24gPD0gbV92ZWN0b3ItPnNp
emUoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0
b3ImIG9wZXJhdG9yLT0oaW50MzJfdCBkZWNyZW1lbnQpCisgICAgeworICAgICAgICBpZiAoZGVj
cmVtZW50IDwgMCkgeworICAgICAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhkZWNy
ZW1lbnQgIT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpOworICAgICAgICAg
ICAgcmV0dXJuICgqdGhpcykgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtZGVjcmVtZW50KTsKKyAg
ICAgICAgfQorCisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coc3RhdGljX2Nhc3Q8
c2l6ZV90PihkZWNyZW1lbnQpIDw9IG1fcG9zaXRpb24pOworICAgICAgICBtX3Bvc2l0aW9uIC09
IGRlY3JlbWVudDsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIEluZGV4ZWRJ
dGVyYXRvciBvcGVyYXRvcisoc2l6ZV90IGluY3JlbWVudCkgY29uc3QKKyAgICB7CisgICAgICAg
IEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICByZXR1cm4gcmVzdWx0ICs9
IGluY3JlbWVudDsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3ItKHNpemVf
dCBkZWNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0
KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCAtPSBkZWNyZW1lbnQ7CisgICAgfQorCisg
ICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yKyhpbnQzMl90IGluY3JlbWVudCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICByZXR1
cm4gcmVzdWx0ICs9IGluY3JlbWVudDsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3Bl
cmF0b3ItKGludDMyX3QgZGVjcmVtZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0
ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQgLT0gZGVjcmVtZW50
OworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvcisodW5zaWduZWQgbG9uZyBs
b25nIGluY3JlbWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1
bHQoKnRoaXMpOworICAgICAgICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19jYXN0PHNpemVfdD4o
aW5jcmVtZW50KTsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3ItKHVuc2ln
bmVkIGxvbmcgbG9uZyBkZWNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRl
cmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGRlY3JlbWVudCk7CisgICAgfQorICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRv
cisobG9uZyBsb25nIGluY3JlbWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVy
YXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19jYXN0
PHNpemVfdD4oaW5jcmVtZW50KTsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0
b3ItKGxvbmcgbG9uZyBkZWNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRl
cmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGRlY3JlbWVudCk7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJh
dG9yKyh1bnNpZ25lZCBpbmNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRl
cmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGluY3JlbWVudCk7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJh
dG9yLSh1bnNpZ25lZCBkZWNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRl
cmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGRlY3JlbWVudCk7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJh
dG9yKyhsb25nIGluY3JlbWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRv
ciByZXN1bHQoKnRoaXMpOworICAgICAgICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19jYXN0PHNp
emVfdD4oaW5jcmVtZW50KTsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3It
KGxvbmcgZGVjcmVtZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJl
c3VsdCgqdGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90
PihkZWNyZW1lbnQpOworICAgIH0KKworICAgIHB0cmRpZmZfdCBvcGVyYXRvci0oY29uc3QgY29u
c3RfaXRlcmF0b3ImIHJpZ2h0KSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRP
Ul9PVkVSRkxPVyhtX3ZlY3RvciA9PSByaWdodC5tX3ZlY3Rvcik7CisgICAgICAgIHJldHVybiBt
X3Bvc2l0aW9uIC0gcmlnaHQubV9wb3NpdGlvbjsKKyAgICB9CisKKyAgICBwdHJkaWZmX3Qgb3Bl
cmF0b3ItKGNvbnN0IFZhbHVlVHlwZSogcmlnaHQpIGNvbnN0CisgICAgeworICAgICAgICBJTkRF
WEVEX0lURVJBVE9SX09WRVJGTE9XKHJpZ2h0ID49IG1fdmVjdG9yLT5kYXRhKCkpOworICAgICAg
ICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1fcG9zaXRpb24gPj0gc3RhdGljX2Nhc3Q8c2l6
ZV90PihyaWdodCAtIG1fdmVjdG9yLT5kYXRhKCkpKTsKKyAgICAgICAgcmV0dXJuIGdldCgpIC0g
cmlnaHQ7CisgICAgfQorCisgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgSW5kZXhlZEl0ZXJhdG9y
JiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fdmVjdG9yID0gb3RoZXIubV92ZWN0b3I7CisgICAg
ICAgIG1fcG9zaXRpb24gPSBvdGhlci5tX3Bvc2l0aW9uOworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOworICAg
ICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPT0gb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaXNTYWZlVG9Db21wYXJlKG90
aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSAhPSBvdGhlci51bnNhZmVHZXQoKTsK
KyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmFsdWVUeXBlKiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaXNTYWZlVG9Db21w
YXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA9PSBvdGhlcjsKKyAgICB9
CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVmFsdWVUeXBlKiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaXNTYWZlVG9Db21wYXJlKG90
aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSAhPSBvdGhlcjsKKyAgICB9CisKKyAg
ICBib29sIG9wZXJhdG9yPChjb25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsK
KyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpIDwgb3RoZXI7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvcjw9KGNvbnN0IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJ
TkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAg
ICByZXR1cm4gdW5zYWZlR2V0KCkgPD0gb3RoZXI7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRv
cjwoY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5E
RVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAg
cmV0dXJuIHVuc2FmZUdldCgpIDwgb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvcjw9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coc2FmZVRvQ29tcGFyZShvdGhlcikpOwor
ICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPD0gb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQor
CisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgSW5kZXhlZEl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaXNTYWZlVG9Db21wYXJl
KG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA+IG90aGVyLnVuc2FmZUdldCgp
OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBjb25zdF9pdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlzU2Fm
ZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPj0gb3RoZXIu
dW5zYWZlR2V0KCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgVmFsdWVUeXBl
KiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1co
aXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA+IG90
aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBWYWx1ZVR5cGUqIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVU
b0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpID49IG90aGVyOwor
ICAgIH0KKworICAgIG9wZXJhdG9yIGNvbnN0X2l0ZXJhdG9yKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGNvbnN0X2l0ZXJhdG9yIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmVjdG9yID0gbV92
ZWN0b3I7CisgICAgICAgIHJlc3VsdC5tX3Bvc2l0aW9uID0gbV9wb3NpdGlvbjsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBWZWN0b3JUeXBlKiBtX3ZlY3RvcjsKKyAgICBz
aXplX3QgbV9wb3NpdGlvbjsKKworICAgIGJvb2wgaXNTYWZlVG9Db21wYXJlKGNvbnN0IGNvbnN0
X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3ZlY3RvciA9PSBv
dGhlci5tX3ZlY3RvcikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4g
IW1fdmVjdG9yIHx8ICFvdGhlci5tX3ZlY3RvcjsKKyAgICB9CisKKyAgICBib29sIGlzU2FmZVRv
Q29tcGFyZShjb25zdCBWYWx1ZVR5cGUqIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIW1fdmVjdG9y
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHNpemVfdCBkZWx0YSA9IHN0YXRp
Y19jYXN0PHNpemVfdD4odmFsdWUgLSBtX3ZlY3Rvci0+ZGF0YSgpKTsKKyAgICAgICAgcmV0dXJu
IGRlbHRhIDw9IG1fdmVjdG9yLT5zaXplKCk7CisgICAgfQorCisgICAgVmFsdWVUeXBlKiB1bnNh
ZmVHZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX3ZlY3RvcikKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZ2V0KCk7CisgICAgfQorfTsKKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dI
YW5kbGVyPgoraW5saW5lIHR5cGVuYW1lIEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92
ZXJmbG93SGFuZGxlcj46OlZhbHVlVHlwZSogZ2V0UHRyKEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1
ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4gcCkKK3sKKyAgICByZXR1cm4gcC5nZXQoKTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyPgoraW5saW5lIHB0cmRpZmZfdCBvcGVyYXRvci0oY29uc3QgVmFsdWVUeXBlKiBs
ZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+
JiByaWdodCkKK3sKKyAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGxlZnQgPj0gcmlnaHQu
bV92ZWN0b3ItPmRhdGEoKSk7CisgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhsZWZ0IDw9
IHJpZ2h0Lm1fdmVjdG9yLT5lbmQoKS5nZXQoKSk7CisgICAgcmV0dXJuIGxlZnQgLSByaWdodC5n
ZXQoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIHB0cmRpZmZfdCBvcGVyYXRvci0oVmFsdWVU
eXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hh
bmRsZXI+JiByaWdodCkKK3sKKyAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGxlZnQgPj0g
cmlnaHQubV92ZWN0b3ItPmRhdGEoKSk7CisgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhs
ZWZ0IDw9IHJpZ2h0Lm1fdmVjdG9yLT5lbmQoKS5nZXQoKSk7CisgICAgcmV0dXJuIGxlZnQgLSBy
aWdodC5nZXQoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlw
ZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIHB0cmRpZmZfdCBvcGVyYXRvci0o
Y29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8Y29uc3QgVCwgY29u
c3QgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICBJTkRFWEVEX0lU
RVJBVE9SX09WRVJGTE9XKGxlZnQgPj0gcmlnaHQubV92ZWN0b3ItPmRhdGEoKSk7CisgICAgSU5E
RVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhsZWZ0IDw9IHJpZ2h0Lm1fdmVjdG9yLT5lbmQoKS5nZXQo
KSk7CisgICAgcmV0dXJuIGxlZnQgLSByaWdodC5nZXQoKTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRv
cjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiBy
aWdodCA9PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVU
eXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwg
T3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID09IGxlZnQ7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yIT0oVmFsdWVUeXBlKiBsZWZ0LCBj
b25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdo
dCkKK3sKKyAgICByZXR1cm4gcmlnaHQgIT0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVy
YXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVy
biByaWdodCAhPSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFs
dWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9
KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3Zl
cmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID49IGxlZnQ7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0
LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiBy
aWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPj0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5s
aW5lIGJvb2wgb3BlcmF0b3I+PShWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRv
cjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiBy
aWdodCA8PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVU
eXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNv
bnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwg
T3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0IDw9IGxlZnQ7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPChWYWx1ZVR5cGUqIGxlZnQsIGNv
bnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0
KQoreworICAgIHJldHVybiByaWdodCA+IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBi
b29sIG9wZXJhdG9yPChjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRv
cjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiBy
aWdodCA+IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5
cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPihWYWx1
ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93
SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA8IGxlZnQ7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0
IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQor
eworICAgIHJldHVybiByaWdodCA8IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWZWN0
b3JUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0cnVjdCBJbmRleGVkSXRlcmF0b3JT
ZWxlY3RvciB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBWZWN0b3JUeXBlOjpWYWx1ZVR5cGUgVmFs
dWVUeXBlOworICAgIHR5cGVkZWYgSW5kZXhlZEl0ZXJhdG9yPFZlY3RvclR5cGUsIFZhbHVlVHlw
ZSwgT3ZlcmZsb3dIYW5kbGVyPiBpdGVyYXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICBzdGF0aWMgaXRlcmF0b3Ig
bWFrZUl0ZXJhdG9yKFZlY3RvclR5cGUmIHZlY3RvciwgVmFsdWVUeXBlKiBwKSB7IHJldHVybiBp
dGVyYXRvcih2ZWN0b3IsIHApOyB9CisgICAgc3RhdGljIGNvbnN0X2l0ZXJhdG9yIG1ha2VDb25z
dEl0ZXJhdG9yKGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvciwgY29uc3QgVmFsdWVUeXBlKiBwKSB7
IHJldHVybiBjb25zdF9pdGVyYXRvcih2ZWN0b3IsIHApOyB9Cit9OworCisjdW5kZWYgSU5ERVhF
RF9JVEVSQVRPUl9PVkVSRkxPVworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvUmVmQ291bnRlZEFycmF5LmggYi9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXku
aAppbmRleCBhNTVkN2FlZWFiODRiOWM0OTUxOTZlOGUyMzBhMWRjMTc4NTE5M2FiLi44MTFlOWZm
Y2VhMzM3YTZjN2Q4YjI5MTYzMGUyYWZkZjhlNTY2MzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9SZWZDb3VudGVkQXJyYXkuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJy
YXkuaApAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgICAgIEhlYWRlcjo6ZnJvbVBheWxv
YWQobV9kYXRhKS0+cmVmQ291bnQgPSAxOwogICAgICAgICBIZWFkZXI6OmZyb21QYXlsb2FkKG1f
ZGF0YSktPmxlbmd0aCA9IG90aGVyLnNpemUoKTsKICAgICAgICAgQVNTRVJUKEhlYWRlcjo6ZnJv
bVBheWxvYWQobV9kYXRhKS0+bGVuZ3RoID09IG90aGVyLnNpemUoKSk7Ci0gICAgICAgIFZlY3Rv
clR5cGVPcGVyYXRpb25zPFQ+Ojp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpLCBvdGhl
ci5lbmQoKSwgbV9kYXRhKTsKKyAgICAgICAgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD46OnVuaW5p
dGlhbGl6ZWRDb3B5KGdldFB0cihvdGhlci5iZWdpbigpKSwgZ2V0UHRyKG90aGVyLmVuZCgpKSwg
bV9kYXRhKTsKICAgICB9CiAgICAgCiAgICAgUmVmQ291bnRlZEFycmF5JiBvcGVyYXRvcj0oY29u
c3QgUmVmQ291bnRlZEFycmF5JiBvdGhlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Zl
Y3Rvci5oIGIvU291cmNlL1dURi93dGYvVmVjdG9yLmgKaW5kZXggMjc0NTY4YTY5MWM2NGEwMzQy
M2E0ZjJiNzM0ODc3ZTYyMDcyZDkxZS4uNGFhYTQ4YWMyNGE0MmZlOTlhODA4ZWE3YjFlZDJiOGQw
ODIyYzAwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVmVjdG9yLmgKKysrIGIvU291cmNl
L1dURi93dGYvVmVjdG9yLmgKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlIDx1dGlsaXR5Pgog
I2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9JbmRleGVkSXRl
cmF0b3IuaD4KICNpbmNsdWRlIDx3dGYvTWFsbG9jUHRyLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtNTU0LDE0ICs1NTYs
MTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkgPSAwLCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIgPSBDcmEKIGNsYXNzIFZlY3RvciA6IHByaXZhdGUgVmVj
dG9yQnVmZmVyPFQsIGlubGluZUNhcGFjaXR5PiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwcml2YXRlOgorCiAgICAgdHlwZWRlZiBWZWN0b3JCdWZmZXI8VCwgaW5saW5lQ2FwYWNp
dHk+IEJhc2U7CiAgICAgdHlwZWRlZiBWZWN0b3JUeXBlT3BlcmF0aW9uczxUPiBUeXBlT3BlcmF0
aW9uczsKKyAgICB0eXBlZGVmIEluZGV4ZWRJdGVyYXRvclNlbGVjdG9yPFZlY3RvciwgT3ZlcmZs
b3dIYW5kbGVyPiBJdGVyYXRvclNlbGVjdG9yOwogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBUIFZh
bHVlVHlwZTsKIAotICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7Ci0gICAgdHlwZWRlZiBjb25zdCBU
KiBjb25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEl0ZXJhdG9yU2VsZWN0b3I6
Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgSXRlcmF0b3JTZWxlY3Rv
cjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisKICAgICB0eXBlZGVmIHN0ZDo6cmV2
ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICAgICB0eXBlZGVmIHN0
ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRv
cjsKIApAQCAtNTc0LDE0ICs1NzksMTQgQEAgcHVibGljOgogICAgICAgICA6IEJhc2Uoc2l6ZSwg
c2l6ZSkKICAgICB7CiAgICAgICAgIGlmIChiZWdpbigpKQotICAgICAgICAgICAgVHlwZU9wZXJh
dGlvbnM6OmluaXRpYWxpemUoYmVnaW4oKSwgZW5kKCkpOworICAgICAgICAgICAgVHlwZU9wZXJh
dGlvbnM6OmluaXRpYWxpemUoZ2V0UHRyKGJlZ2luKCkpLCBnZXRQdHIoZW5kKCkpKTsKICAgICB9
CiAKICAgICBWZWN0b3IodW5zaWduZWQgc2l6ZSwgY29uc3QgVCYgdmFsKQogICAgICAgICA6IEJh
c2Uoc2l6ZSwgc2l6ZSkKICAgICB7CiAgICAgICAgIGlmIChiZWdpbigpKQotICAgICAgICAgICAg
VHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRGaWxsKGJlZ2luKCksIGVuZCgpLCB2YWwpOwor
ICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRGaWxsKGdldFB0cihiZWdp
bigpKSwgZ2V0UHRyKGVuZCgpKSwgdmFsKTsKICAgICB9CiAKICAgICBWZWN0b3Ioc3RkOjppbml0
aWFsaXplcl9saXN0PFQ+IGluaXRpYWxpemVyTGlzdCkKQEAgLTY0NSwxMCArNjUwLDEwIEBAIHB1
YmxpYzoKICAgICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gQmFzZTo6YnVmZmVyKCk7
IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGRhdGFNZW1vcnlPZmZzZXQoKSB7IHJldHVybiBCYXNl
OjpidWZmZXJNZW1vcnlPZmZzZXQoKTsgfQogCi0gICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVy
biBkYXRhKCk7IH0KLSAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBiZWdpbigpICsgbV9zaXpl
OyB9Ci0gICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBkYXRhKCk7IH0K
LSAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBiZWdpbigpICsgbV9zaXpl
OyB9CisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBJdGVyYXRvclNlbGVjdG9yOjptYWtl
SXRlcmF0b3IoKnRoaXMsIGRhdGEoKSk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBi
ZWdpbigpICsgc2l6ZSgpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJl
dHVybiBJdGVyYXRvclNlbGVjdG9yOjptYWtlQ29uc3RJdGVyYXRvcigqdGhpcywgZGF0YSgpKTsg
fQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgKyBzaXpl
KCk7IH0KIAogICAgIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9p
dGVyYXRvcihlbmQoKSk7IH0KICAgICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiBy
ZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CkBAIC02ODMsNiArNjg4LDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBjbGVhcigpIHsgc2hyaW5rQ2FwYWNpdHkoMCk7IH0KIAorICAgIHZvaWQgYXBw
ZW5kKGNvbnN0X2l0ZXJhdG9yLCB1bnNpZ25lZCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4g
dm9pZCBhcHBlbmQoY29uc3QgVSosIHVuc2lnbmVkKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiB2b2lkIGFwcGVuZChVJiYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgdW5jaGVj
a2VkQXBwZW5kKFUmJiB2YWwpOwpAQCAtNzQ2LDcgKzc1Miw3IEBAIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6VmVjdG9yKGNvbnN0IFZlY3RvciYgb3RoZXIpCiAg
ICAgOiBCYXNlKG90aGVyLmNhcGFjaXR5KCksIG90aGVyLnNpemUoKSkKIHsKICAgICBpZiAoYmVn
aW4oKSkKLSAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJl
Z2luKCksIG90aGVyLmVuZCgpLCBiZWdpbigpKTsKKyAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVu
aW5pdGlhbGl6ZWRDb3B5KGdldFB0cihvdGhlci5iZWdpbigpKSwgZ2V0UHRyKG90aGVyLmVuZCgp
KSwgZ2V0UHRyKGJlZ2luKCkpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KQEAgLTc1NSw3ICs3NjEs
NyBAQCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OlZlY3Rvcihj
b25zdCBWZWN0b3I8VCwgb3RoZXJDYXBhY2l0eQogICAgIDogQmFzZShvdGhlci5jYXBhY2l0eSgp
LCBvdGhlci5zaXplKCkpCiB7CiAgICAgaWYgKGJlZ2luKCkpCi0gICAgICAgIFR5cGVPcGVyYXRp
b25zOjp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSwgYmVnaW4o
KSk7CisgICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShnZXRQdHIob3Ro
ZXIuYmVnaW4oKSksIGdldFB0cihvdGhlci5lbmQoKSksIGdldFB0cihiZWdpbigpKSk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXI+CkBAIC03NzIsOCArNzc4LDggQEAgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXI+JiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGEKICAgICAgICAgQVNTRVJUKGJlZ2luKCkpOwogICAgIH0KICAgICAKLSAgICBzdGQ6OmNvcHko
b3RoZXIuYmVnaW4oKSwgb3RoZXIuYmVnaW4oKSArIHNpemUoKSwgYmVnaW4oKSk7Ci0gICAgVHlw
ZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCkgKyBzaXplKCksIG90
aGVyLmVuZCgpLCBlbmQoKSk7CisgICAgc3RkOjpjb3B5KGdldFB0cihvdGhlci5iZWdpbigpKSwg
Z2V0UHRyKG90aGVyLmJlZ2luKCkgKyBzaXplKCkpLCBnZXRQdHIoYmVnaW4oKSkpOworICAgIFR5
cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShnZXRQdHIob3RoZXIuYmVnaW4oKSArIHNp
emUoKSksIGdldFB0cihvdGhlci5lbmQoKSksIGdldFB0cihlbmQoKSkpOwogICAgIG1fc2l6ZSA9
IG90aGVyLnNpemUoKTsKIAogICAgIHJldHVybiAqdGhpczsKQEAgLTc5Nyw5ICs4MDMsOSBAQCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj4mIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYQogICAgICAgICByZXNlcnZlQ2FwYWNpdHkob3RoZXIuc2l6
ZSgpKTsKICAgICAgICAgQVNTRVJUKGJlZ2luKCkpOwogICAgIH0KLSAgICAKLSAgICBzdGQ6OmNv
cHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuYmVnaW4oKSArIHNpemUoKSwgYmVnaW4oKSk7Ci0gICAg
VHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCkgKyBzaXplKCks
IG90aGVyLmVuZCgpLCBlbmQoKSk7CisKKyAgICBzdGQ6OmNvcHkoZ2V0UHRyKG90aGVyLmJlZ2lu
KCkpLCBnZXRQdHIob3RoZXIuYmVnaW4oKSArIHNpemUoKSksIGdldFB0cihiZWdpbigpKSk7Cisg
ICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KGdldFB0cihvdGhlci5iZWdpbigp
ICsgc2l6ZSgpKSwgZ2V0UHRyKG90aGVyLmVuZCgpKSwgZ2V0UHRyKGVuZCgpKSk7CiAgICAgbV9z
aXplID0gb3RoZXIuc2l6ZSgpOwogCiAgICAgcmV0dXJuICp0aGlzOwpAQCAtODU5LDggKzg2NSw4
IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpmaWxs
KGNvbnN0IFQmIHZhbCwgdW5zaWduZWQgbmV3CiAgICAgICAgIEFTU0VSVChiZWdpbigpKTsKICAg
ICB9CiAgICAgCi0gICAgc3RkOjpmaWxsKGJlZ2luKCksIGVuZCgpLCB2YWwpOwotICAgIFR5cGVP
cGVyYXRpb25zOjp1bmluaXRpYWxpemVkRmlsbChlbmQoKSwgYmVnaW4oKSArIG5ld1NpemUsIHZh
bCk7CisgICAgc3RkOjpmaWxsKGdldFB0cihiZWdpbigpKSwgZ2V0UHRyKGVuZCgpKSwgdmFsKTsK
KyAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZEZpbGwoZ2V0UHRyKGVuZCgpKSwgZ2V0
UHRyKGJlZ2luKCkpICsgbmV3U2l6ZSwgdmFsKTsKICAgICBtX3NpemUgPSBuZXdTaXplOwogfQog
CkBAIC04ODEsMTMgKzg4NywxMyBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyPjo6ZXhwYW5kQ2FwYWNpdHkodW5zaWduZWQgbmV3TWluQwogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlcj4KIFQqIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6ZXhw
YW5kQ2FwYWNpdHkodW5zaWduZWQgbmV3TWluQ2FwYWNpdHksIFQqIHB0cikKIHsKLSAgICBpZiAo
cHRyIDwgYmVnaW4oKSB8fCBwdHIgPj0gZW5kKCkpIHsKKyAgICBpZiAocHRyIDwgZ2V0UHRyKGJl
Z2luKCkpIHx8IHB0ciA+PSBnZXRQdHIoZW5kKCkpKSB7CiAgICAgICAgIGV4cGFuZENhcGFjaXR5
KG5ld01pbkNhcGFjaXR5KTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9Ci0gICAgdW5zaWdu
ZWQgaW5kZXggPSBwdHIgLSBiZWdpbigpOworICAgIHVuc2lnbmVkIGluZGV4ID0gcHRyIC0gZ2V0
UHRyKGJlZ2luKCkpOwogICAgIGV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5KTsKLSAgICBy
ZXR1cm4gYmVnaW4oKSArIGluZGV4OworICAgIHJldHVybiBnZXRQdHIoYmVnaW4oKSkgKyBpbmRl
eDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KQEAgLTg5OSwxNSArOTA1LDE1IEBAIGJvb2wgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojp0cnlFeHBhbmRDYXBhY2l0eSh1
bnNpZ25lZCBuZXdNCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0
eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogY29uc3QgVCogVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojp0cnlFeHBhbmRDYXBhY2l0eSh1bnNpZ25lZCBuZXdN
aW5DYXBhY2l0eSwgY29uc3QgVCogcHRyKQogewotICAgIGlmIChwdHIgPCBiZWdpbigpIHx8IHB0
ciA+PSBlbmQoKSkgeworICAgIGlmIChwdHIgPCBnZXRQdHIoYmVnaW4oKSkgfHwgcHRyID49IGdl
dFB0cihlbmQoKSkpIHsKICAgICAgICAgaWYgKCF0cnlFeHBhbmRDYXBhY2l0eShuZXdNaW5DYXBh
Y2l0eSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9
Ci0gICAgdW5zaWduZWQgaW5kZXggPSBwdHIgLSBiZWdpbigpOworICAgIHVuc2lnbmVkIGluZGV4
ID0gcHRyIC0gZ2V0UHRyKGJlZ2luKCkpOwogICAgIGlmICghdHJ5RXhwYW5kQ2FwYWNpdHkobmV3
TWluQ2FwYWNpdHkpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gYmVnaW4oKSArIGlu
ZGV4OworICAgIHJldHVybiBnZXRQdHIoYmVnaW4oKSkgKyBpbmRleDsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KQEAgLTkyMSwxMiArOTI3LDEyIEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXI+CiBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlcj46OnJlc2l6ZSh1bnNpZ25lZCBzaXplKQogewogICAgIGlmIChzaXplIDw9IG1fc2l6ZSkK
LSAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0KGJlZ2luKCkgKyBzaXplLCBlbmQoKSk7
CisgICAgICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChnZXRQdHIoYmVnaW4oKSkgKyBzaXpl
LCBnZXRQdHIoZW5kKCkpKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKHNpemUgPiBjYXBhY2l0
eSgpKQogICAgICAgICAgICAgZXhwYW5kQ2FwYWNpdHkoc2l6ZSk7CiAgICAgICAgIGlmIChiZWdp
bigpKQotICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoZW5kKCksIGJlZ2lu
KCkgKyBzaXplKTsKKyAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0aWFsaXplKGdldFB0
cihlbmQoKSksIGdldFB0cihiZWdpbigpKSArIHNpemUpOwogICAgIH0KICAgICAKICAgICBtX3Np
emUgPSBzaXplOwpAQCAtOTQzLDcgKzk0OSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2ln
bmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CiB2b2lkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6c2hyaW5rKHVuc2lnbmVkIHNp
emUpCiB7CiAgICAgQVNTRVJUKHNpemUgPD0gbV9zaXplKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6
ZGVzdHJ1Y3QoYmVnaW4oKSArIHNpemUsIGVuZCgpKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6ZGVz
dHJ1Y3QoZ2V0UHRyKGJlZ2luKCkpICsgc2l6ZSwgZ2V0UHRyKGVuZCgpKSk7CiAgICAgbV9zaXpl
ID0gc2l6ZTsKIH0KIApAQCAtOTU0LDcgKzk2MCw3IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojpncm93KHVuc2lnbmVkIHNpemUpCiAgICAgaWYgKHNp
emUgPiBjYXBhY2l0eSgpKQogICAgICAgICBleHBhbmRDYXBhY2l0eShzaXplKTsKICAgICBpZiAo
YmVnaW4oKSkKLSAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoZW5kKCksIGJlZ2lu
KCkgKyBzaXplKTsKKyAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoZ2V0UHRyKGVu
ZCgpKSwgZ2V0UHRyKGJlZ2luKCkpICsgc2l6ZSk7CiAgICAgbV9zaXplID0gc2l6ZTsKIH0KIApA
QCAtOTYzLDExICs5NjksMTEgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlcj46OnJlc2VydmVDYXBhY2l0eSh1bnNpZ25lZCBuZXdDYXAKIHsKICAgICBpZiAo
bmV3Q2FwYWNpdHkgPD0gY2FwYWNpdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFQqIG9sZEJ1
ZmZlciA9IGJlZ2luKCk7Ci0gICAgVCogb2xkRW5kID0gZW5kKCk7CisgICAgVCogb2xkQnVmZmVy
ID0gZ2V0UHRyKGJlZ2luKCkpOworICAgIFQqIG9sZEVuZCA9IGdldFB0cihlbmQoKSk7CiAgICAg
QmFzZTo6YWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpOwogICAgIEFTU0VSVChiZWdpbigpKTsK
LSAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShvbGRCdWZmZXIsIG9sZEVuZCwgYmVnaW4oKSk7Cisg
ICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGdldFB0cihiZWdpbigp
KSk7CiAgICAgQmFzZTo6ZGVhbGxvY2F0ZUJ1ZmZlcihvbGRCdWZmZXIpOwogfQogCkBAIC05NzYs
MTIgKzk4MiwxMiBAQCBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyPjo6dHJ5UmVzZXJ2ZUNhcGFjaXR5KHVuc2lnbmVkIG5ldwogewogICAgIGlmIChuZXdDYXBh
Y2l0eSA8PSBjYXBhY2l0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBUKiBvbGRCdWZm
ZXIgPSBiZWdpbigpOwotICAgIFQqIG9sZEVuZCA9IGVuZCgpOworICAgIFQqIG9sZEJ1ZmZlciA9
IGdldFB0cihiZWdpbigpKTsKKyAgICBUKiBvbGRFbmQgPSBnZXRQdHIoZW5kKCkpOwogICAgIGlm
ICghQmFzZTo6dHJ5QWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgQVNTRVJUKGJlZ2luKCkpOwotICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlKG9s
ZEJ1ZmZlciwgb2xkRW5kLCBiZWdpbigpKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShvbGRC
dWZmZXIsIG9sZEVuZCwgZ2V0UHRyKGJlZ2luKCkpKTsKICAgICBCYXNlOjpkZWFsbG9jYXRlQnVm
ZmVyKG9sZEJ1ZmZlcik7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xMDA0LDE3ICsxMDEwLDE3
IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpzaHJp
bmtDYXBhY2l0eSh1bnNpZ25lZCBuZXdDYXBhCiAgICAgaWYgKG5ld0NhcGFjaXR5IDwgc2l6ZSgp
KSAKICAgICAgICAgc2hyaW5rKG5ld0NhcGFjaXR5KTsKIAotICAgIFQqIG9sZEJ1ZmZlciA9IGJl
Z2luKCk7CisgICAgVCogb2xkQnVmZmVyID0gZ2V0UHRyKGJlZ2luKCkpOwogICAgIGlmIChuZXdD
YXBhY2l0eSA+IDApIHsKICAgICAgICAgaWYgKEJhc2U6OnNob3VsZFJlYWxsb2NhdGVCdWZmZXIo
bmV3Q2FwYWNpdHkpKSB7CiAgICAgICAgICAgICBCYXNlOjpyZWFsbG9jYXRlQnVmZmVyKG5ld0Nh
cGFjaXR5KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFQqIG9s
ZEVuZCA9IGVuZCgpOworICAgICAgICBUKiBvbGRFbmQgPSBnZXRQdHIoZW5kKCkpOwogICAgICAg
ICBCYXNlOjphbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSk7Ci0gICAgICAgIGlmIChiZWdpbigp
ICE9IG9sZEJ1ZmZlcikKLSAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZl
ciwgb2xkRW5kLCBiZWdpbigpKTsKKyAgICAgICAgaWYgKGdldFB0cihiZWdpbigpKSAhPSBvbGRC
dWZmZXIpCisgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShvbGRCdWZmZXIsIG9sZEVu
ZCwgZ2V0UHRyKGJlZ2luKCkpKTsKICAgICB9CiAKICAgICBCYXNlOjpkZWFsbG9jYXRlQnVmZmVy
KG9sZEJ1ZmZlcik7CkBAIC0xMDM0LDExICsxMDQwLDE3IEBAIHZvaWQgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmQoY29uc3QgVSogZGF0YSwgdW5zaWdu
ZWQKICAgICB9CiAgICAgaWYgKG5ld1NpemUgPCBtX3NpemUpCiAgICAgICAgIENSQVNIKCk7Ci0g
ICAgVCogZGVzdCA9IGVuZCgpOworICAgIFQqIGRlc3QgPSBnZXRQdHIoZW5kKCkpOwogICAgIFZl
Y3RvckNvcGllcjxzdGQ6OmlzX3RyaXZpYWw8VD46OnZhbHVlLCBVPjo6dW5pbml0aWFsaXplZENv
cHkoZGF0YSwgJmRhdGFbZGF0YVNpemVdLCBkZXN0KTsKICAgICBtX3NpemUgPSBuZXdTaXplOwog
fQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyPgordm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlcj46OmFwcGVuZChjb25zdF9pdGVyYXRvciBkYXRhLCB1bnNpZ25lZCBkYXRhU2l6
ZSkKK3sKKyAgICBhcHBlbmQoZ2V0UHRyKGRhdGEpLCBkYXRhU2l6ZSk7Cit9CisKIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXI+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CiBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyPjo6dHJ5QXBwZW5kKGNvbnN0IFUqIGRhdGEsIHVuc2lnbmVkIGRh
dGFTaXplKQogewpAQCAtMTA1MSw3ICsxMDYzLDcgQEAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnRyeUFwcGVuZChjb25zdCBVKiBkYXRhLCB1bnNpZ24K
ICAgICB9CiAgICAgaWYgKG5ld1NpemUgPCBtX3NpemUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBUKiBkZXN0ID0gZW5kKCk7CisgICAgVCogZGVzdCA9IGdldFB0cihlbmQoKSk7CiAgICAg
VmVjdG9yQ29waWVyPHN0ZDo6aXNfdHJpdmlhbDxUPjo6dmFsdWUsIFU+Ojp1bmluaXRpYWxpemVk
Q29weShkYXRhLCAmZGF0YVtkYXRhU2l6ZV0sIGRlc3QpOwogICAgIG1fc2l6ZSA9IG5ld1NpemU7
CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDYxLDcgKzEwNzMsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiB0
ZW1wbGF0ZQogQUxXQVlTX0lOTElORSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyPjo6YXBwZW5kKFUmJiB2YWx1ZSkKIHsKICAgICBpZiAoc2l6ZSgpICE9IGNh
cGFjaXR5KCkpIHsKLSAgICAgICAgbmV3IChOb3ROdWxsLCBlbmQoKSkgVChzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKKyAgICAgICAgbmV3IChOb3ROdWxsLCBnZXRQdHIoZW5kKCkpKSBUKHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOwogICAgICAgICArK21fc2l6ZTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTEwNzgsNyArMTA5MCw3IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmRTbG93Q2FzZShVJiYgdmFsdWUpCiAgICAgcHRyID0g
ZXhwYW5kQ2FwYWNpdHkoc2l6ZSgpICsgMSwgcHRyKTsKICAgICBBU1NFUlQoYmVnaW4oKSk7CiAK
LSAgICBuZXcgKE5vdE51bGwsIGVuZCgpKSBUKHN0ZDo6Zm9yd2FyZDxVPigqcHRyKSk7CisgICAg
bmV3IChOb3ROdWxsLCBnZXRQdHIoZW5kKCkpKSBUKHN0ZDo6Zm9yd2FyZDxVPigqcHRyKSk7CiAg
ICAgKyttX3NpemU7CiB9CiAKQEAgLTEwOTEsMTQgKzExMDMsMTQgQEAgaW5saW5lIHZvaWQgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojp1bmNoZWNrZWRBcHBlbmQo
VSYmIHZhbHUKICAgICBBU1NFUlQoc2l6ZSgpIDwgY2FwYWNpdHkoKSk7CiAKICAgICBhdXRvIHB0
ciA9IHN0ZDo6YWRkcmVzc29mKHZhbHVlKTsKLSAgICBuZXcgKE5vdE51bGwsIGVuZCgpKSBUKHN0
ZDo6Zm9yd2FyZDxVPigqcHRyKSk7CisgICAgbmV3IChOb3ROdWxsLCBnZXRQdHIoZW5kKCkpKSBU
KHN0ZDo6Zm9yd2FyZDxVPigqcHRyKSk7CiAgICAgKyttX3NpemU7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXI+IHRlbXBsYXRlPHR5cGVuYW1lIFUsIHVuc2lnbmVkIG90aGVyQ2FwYWNpdHk+CiBpbmxpbmUg
dm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmFwcGVuZFZl
Y3Rvcihjb25zdCBWZWN0b3I8VSwgb3RoZXJDYXBhY2l0eT4mIHZhbCkKIHsKLSAgICBhcHBlbmQo
dmFsLmJlZ2luKCksIHZhbC5zaXplKCkpOworICAgIGFwcGVuZChnZXRQdHIodmFsLmJlZ2luKCkp
LCB2YWwuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUgVT4K
QEAgLTExMTIsOCArMTEyNCw4IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXI+OjppbnNlcnQodW5zaWduZWQgcG9zaXRpb24sIGNvbnN0CiAgICAgfQogICAg
IGlmIChuZXdTaXplIDwgbV9zaXplKQogICAgICAgICBDUkFTSCgpOwotICAgIFQqIHNwb3QgPSBi
ZWdpbigpICsgcG9zaXRpb247Ci0gICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhz
cG90LCBlbmQoKSwgc3BvdCArIGRhdGFTaXplKTsKKyAgICBUKiBzcG90ID0gZ2V0UHRyKGJlZ2lu
KCkpICsgcG9zaXRpb247CisgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90
LCBnZXRQdHIoZW5kKCkpLCBzcG90ICsgZGF0YVNpemUpOwogICAgIFZlY3RvckNvcGllcjxzdGQ6
OmlzX3RyaXZpYWw8VD46OnZhbHVlLCBVPjo6dW5pbml0aWFsaXplZENvcHkoZGF0YSwgJmRhdGFb
ZGF0YVNpemVdLCBzcG90KTsKICAgICBtX3NpemUgPSBuZXdTaXplOwogfQpAQCAtMTEyOSw4ICsx
MTQxLDggQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXI+OjppbnNlcnQodW5zaWduZWQgcG9zaXRpb24KICAgICAgICAgQVNTRVJUKGJlZ2luKCkp
OwogICAgIH0KIAotICAgIFQqIHNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247Ci0gICAgVHlwZU9w
ZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90LCBlbmQoKSwgc3BvdCArIDEpOworICAgIFQq
IHNwb3QgPSBnZXRQdHIoYmVnaW4oKSkgKyBwb3NpdGlvbjsKKyAgICBUeXBlT3BlcmF0aW9uczo6
bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGdldFB0cihlbmQoKSksIHNwb3QgKyAxKTsKICAgICBuZXcg
KE5vdE51bGwsIHNwb3QpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKICAgICArK21fc2l6ZTsK
IH0KQEAgLTExMzgsMTYgKzExNTAsMTYgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnQodW5zaWduZWQgcG9zaXRpb24KIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXI+IHRlbXBsYXRlPHR5cGVuYW1lIFUsIHVuc2lnbmVkIGM+CiBpbmxpbmUgdm9pZCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46Omluc2VydFZlY3Rvcih1
bnNpZ25lZCBwb3NpdGlvbiwgY29uc3QgVmVjdG9yPFUsIGM+JiB2YWwpCiB7Ci0gICAgaW5zZXJ0
KHBvc2l0aW9uLCB2YWwuYmVnaW4oKSwgdmFsLnNpemUoKSk7CisgICAgaW5zZXJ0KHBvc2l0aW9u
LCBnZXRQdHIodmFsLmJlZ2luKCkpLCB2YWwuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4K
IGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6
cmVtb3ZlKHVuc2lnbmVkIHBvc2l0aW9uKQogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKHBvc2l0aW9uIDwgc2l6ZSgpKTsKLSAgICBUKiBzcG90ID0gYmVnaW4oKSArIHBv
c2l0aW9uOworICAgIFQqIHNwb3QgPSBnZXRQdHIoYmVnaW4oKSkgKyBwb3NpdGlvbjsKICAgICBz
cG90LT5+VCgpOwotICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCArIDEs
IGVuZCgpLCBzcG90KTsKKyAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3Qg
KyAxLCBnZXRQdHIoZW5kKCkpLCBzcG90KTsKICAgICAtLW1fc2l6ZTsKIH0KIApAQCAtMTE1Niwx
MCArMTE2OCwxMCBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlcj46OnJlbW92ZSh1bnNpZ25lZCBwb3NpdGlvbgogewogICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0aW9uIDw9IHNpemUoKSk7CiAgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24gKyBsZW5ndGggPD0gc2l6ZSgpKTsKLSAg
ICBUKiBiZWdpblNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247CisgICAgVCogYmVnaW5TcG90ID0g
Z2V0UHRyKGJlZ2luKCkpICsgcG9zaXRpb247CiAgICAgVCogZW5kU3BvdCA9IGJlZ2luU3BvdCAr
IGxlbmd0aDsKICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QoYmVnaW5TcG90LCBlbmRTcG90
KTsgCi0gICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhlbmRTcG90LCBlbmQoKSwg
YmVnaW5TcG90KTsKKyAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKGVuZFNwb3Qs
IGdldFB0cihlbmQoKSksIGJlZ2luU3BvdCk7CiAgICAgbV9zaXplIC09IGxlbmd0aDsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAKaW5kZXggMGNmMDllMWY1ZWM5OGE4NTE0NGNjNzIyZDJhNmNjNGFlNGY5Mzg5OC4uM2Vl
ODA2OGEzYTc2YTRhNDNhYzY0MzIzMjc3MjY0M2MxNjE0OWQ3MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC0xNDM3
LDggKzE0MzcsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoYnVmZmVyLmlzRW1wdHko
KSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAgICAgY29uc3QgdWludDhfdCog
cHRyID0gYnVmZmVyLmJlZ2luKCk7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IGJ1ZmZl
ci5lbmQoKTsKKyAgICAgICAgY29uc3QgdWludDhfdCogcHRyID0gZ2V0UHRyKGJ1ZmZlci5iZWdp
bigpKTsKKyAgICAgICAgY29uc3QgdWludDhfdCogZW5kID0gZ2V0UHRyKGJ1ZmZlci5lbmQoKSk7
CiAgICAgICAgIHVpbnQzMl90IHZlcnNpb247CiAgICAgICAgIGlmICghcmVhZExpdHRsZUVuZGlh
bihwdHIsIGVuZCwgdmVyc2lvbikgfHwgdmVyc2lvbiA+IEN1cnJlbnRWZXJzaW9uKQogICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
Y3BwCmluZGV4IDJkOWI3OWUxM2FiZjk2MGE2MTRiOTZkMjcwNjYwZTVmMzVlMzQxN2YuLmU5MmZi
MmY3OTBiZTRjNWMxNjc2YzY5OGM1YmUxYmE2NWUxYTY5MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTIwNzMsMTEgKzIwNzMsMTEgQEAgaW5saW5lIGJvb2wg
U2VhcmNoQnVmZmVyOjppc0JhZE1hdGNoKGNvbnN0IFVDaGFyKiBtYXRjaCwgc2l6ZV90IG1hdGNo
TGVuZ3RoKSBjb24KICAgICAvLyBjcmVhdGluZyBhIG5ldyBvbmUgZWFjaCB0aW1lLgogICAgIG5v
cm1hbGl6ZUNoYXJhY3RlcnMobWF0Y2gsIG1hdGNoTGVuZ3RoLCBtX25vcm1hbGl6ZWRNYXRjaCk7
CiAKLSAgICBjb25zdCBVQ2hhciogYSA9IG1fbm9ybWFsaXplZFRhcmdldC5iZWdpbigpOwotICAg
IGNvbnN0IFVDaGFyKiBhRW5kID0gbV9ub3JtYWxpemVkVGFyZ2V0LmVuZCgpOworICAgIGNvbnN0
IFVDaGFyKiBhID0gZ2V0UHRyKG1fbm9ybWFsaXplZFRhcmdldC5iZWdpbigpKTsKKyAgICBjb25z
dCBVQ2hhciogYUVuZCA9IGdldFB0cihtX25vcm1hbGl6ZWRUYXJnZXQuZW5kKCkpOwogCi0gICAg
Y29uc3QgVUNoYXIqIGIgPSBtX25vcm1hbGl6ZWRNYXRjaC5iZWdpbigpOwotICAgIGNvbnN0IFVD
aGFyKiBiRW5kID0gbV9ub3JtYWxpemVkTWF0Y2guZW5kKCk7CisgICAgY29uc3QgVUNoYXIqIGIg
PSBnZXRQdHIobV9ub3JtYWxpemVkTWF0Y2guYmVnaW4oKSk7CisgICAgY29uc3QgVUNoYXIqIGJF
bmQgPSBnZXRQdHIobV9ub3JtYWxpemVkTWF0Y2guZW5kKCkpOwogCiAgICAgd2hpbGUgKHRydWUp
IHsKICAgICAgICAgLy8gU2tpcCBydW5zIG9mIG5vbi1rYW5hLWxldHRlciBjaGFyYWN0ZXJzLiBU
aGlzIGlzIG5lY2Vzc2FyeSBzbyB3ZSBjYW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCmluZGV4IDAwOThjNzYzMTNmNGNjNjYw
ZTk2OGE5MGQzZTkzOGE4YjFiYmM5ZGUuLmY1ZWY5M2QxYWE0ODYyOTRiNmRmYWI0MTdhMjJiMWIy
NmJjMTljOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNP
dmVybGF5Q29udHJvbGxlci5tbQpAQCAtNTU1LDcgKzU1NSw3IEBAIHZvaWQgU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGlnaHQoKQogCiAgICAgICAgIGlmICgh
Y2dSZWN0cy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIENHUmVjdCB2aXNpYmxlUmVjdCA9IG1h
aW5GcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwotICAgICAgICAgICAgUmV0YWluUHRy
PERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCA9IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVhdGVX
aXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlQW5kRGlyZWN0aW9uKG51bGxwdHIsIGNnUmVj
dHMuYmVnaW4oKSwgY2dSZWN0cy5zaXplKCksIHZpc2libGVSZWN0LCBEREhpZ2hsaWdodE5vT3V0
bGluZVdpdGhBcnJvdywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVTKSk7
CisgICAgICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0ID0gYWRv
cHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVBbmRE
aXJlY3Rpb24obnVsbHB0ciwgZ2V0UHRyKGNnUmVjdHMuYmVnaW4oKSksIGNnUmVjdHMuc2l6ZSgp
LCB2aXNpYmxlUmVjdCwgRERIaWdobGlnaHROb091dGxpbmVXaXRoQXJyb3csIFlFUywgTlNXcml0
aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZvclNlbGVjdGlv
bigqdGhpcywgZGRIaWdobGlnaHQsIHNlbGVjdGlvblJhbmdlKSk7CiAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRh
LmNwcAppbmRleCBkMWI5MmI3YjYwOWI0NTE5OWM4NGE0NmFlZTlmZGI2YzRmN2NmZWM1Li41MDNi
MGU4ZDliYmYyOTA2Y2U3M2JlYmViYTAxYmQ2MDNlYzc5OTkzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwCkBAIC0z
OSw4ICszOSw4IEBAIFNlZ21lbnRlZEZvbnREYXRhOjp+U2VnbWVudGVkRm9udERhdGEoKQogCiBj
b25zdCBTaW1wbGVGb250RGF0YSogU2VnbWVudGVkRm9udERhdGE6OmZvbnREYXRhRm9yQ2hhcmFj
dGVyKFVDaGFyMzIgYykgY29uc3QKIHsKLSAgICBWZWN0b3I8Rm9udERhdGFSYW5nZT46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPEZvbnREYXRh
UmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgIGF1dG8gZW5kID0gbV9yYW5nZXMuZW5kKCk7CisgICAgZm9yIChhdXRvIGl0
ID0gbV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGlmIChpdC0+
ZnJvbSgpIDw9IGMgJiYgaXQtPnRvKCkgPj0gYykKICAgICAgICAgICAgIHJldHVybiBpdC0+Zm9u
dERhdGEoKS5nZXQoKTsKICAgICB9CkBAIC00OSw4ICs0OSw4IEBAIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBTZWdtZW50ZWRGb250RGF0YTo6Zm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBj
b25zdAogCiBib29sIFNlZ21lbnRlZEZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcihVQ2hhcjMy
IGMpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3Jhbmdlcy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxGb250RGF0YVJhbmdlPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICBhdXRvIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IG1fcmFuZ2Vz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoYyA+PSBpdC0+ZnJvbSgp
ICYmIGMgPD0gaXQtPnRvKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03
Niw4ICs3Niw4IEBAIGJvb2wgU2VnbWVudGVkRm9udERhdGE6OmlzQ3VzdG9tRm9udCgpIGNvbnN0
CiAKIGJvb2wgU2VnbWVudGVkRm9udERhdGE6OmlzTG9hZGluZygpIGNvbnN0CiB7Ci0gICAgVmVj
dG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsK
LSAgICBmb3IgKFZlY3RvcjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jh
bmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBhdXRvIGVuZCA9IG1fcmFuZ2Vz
LmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewogICAgICAgICBpZiAoaXQtPmZvbnREYXRhKCktPmlzTG9hZGluZygpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCmluZGV4IDA1MTg3MWFjNmM2MGZiNjQzOTI4
MzBhYWM2YWQzODUyYTk0ZDQ0NzYuLmRkMDk2M2E3NTAxYWQyZWUwNjMxYTVlMTZkNzk1MTExMTIy
MzlkNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dPRkZG
aWxlRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZG
RmlsZUZvcm1hdC5jcHAKQEAgLTIwMCw3ICsyMDAsNyBAQCBib29sIGNvbnZlcnRXT0ZGVG9TZm50
KFNoYXJlZEJ1ZmZlciogd29mZiwgVmVjdG9yPGNoYXI+JiBzZm50KQogICAgICAgICAgICAgdUxv
bmdmIGRlc3RMZW4gPSB0YWJsZU9yaWdMZW5ndGg7CiAgICAgICAgICAgICBpZiAoIXNmbnQudHJ5
UmVzZXJ2ZUNhcGFjaXR5KHNmbnQuc2l6ZSgpICsgdGFibGVPcmlnTGVuZ3RoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBCeXRlZiogZGVzdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Qnl0ZWYqPihzZm50LmVuZCgpKTsKKyAgICAgICAgICAgIEJ5dGVmKiBkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDxCeXRlZio+KGdldFB0cihzZm50LmVuZCgpKSk7CiAgICAgICAgICAg
ICBzZm50Lmdyb3coc2ZudC5zaXplKCkgKyB0YWJsZU9yaWdMZW5ndGgpOwogICAgICAgICAgICAg
aWYgKHVuY29tcHJlc3MoZGVzdCwgJmRlc3RMZW4sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQnl0
ZWYqPih3b2ZmLT5kYXRhKCkgKyB0YWJsZU9mZnNldCksIHRhYmxlQ29tcExlbmd0aCkgIT0gWl9P
SykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCmluZGV4IDUw
MjJjNTBjN2VlODI1ZTI0MGYwZTcxMjI0N2M3ZWYxNjQ4ZjM4YmQuLjc1MTZiMGFjZDE1YWFmZDEy
YTM1NmFmZjRkNTBhNmM0YWEwMjRmMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCkBAIC01OSw3ICs1OSw3
IEBAIGNhaXJvX3BhdHRlcm5fdCogR3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQoZmxvYXQgZ2xv
YmFsQWxwaGEpCiAgICAgZWxzZQogICAgICAgICBtX2dyYWRpZW50ID0gY2Fpcm9fcGF0dGVybl9j
cmVhdGVfbGluZWFyKG1fcDAueCgpLCBtX3AwLnkoKSwgbV9wMS54KCksIG1fcDEueSgpKTsKIAot
ICAgIFZlY3RvcjxDb2xvclN0b3A+OjppdGVyYXRvciBzdG9wSXRlcmF0b3IgPSBtX3N0b3BzLmJl
Z2luKCk7CisgICAgYXV0byBzdG9wSXRlcmF0b3IgPSBtX3N0b3BzLmJlZ2luKCk7CiAgICAgd2hp
bGUgKHN0b3BJdGVyYXRvciAhPSBtX3N0b3BzLmVuZCgpKSB7CiAgICAgICAgIGNhaXJvX3BhdHRl
cm5fYWRkX2NvbG9yX3N0b3BfcmdiYShtX2dyYWRpZW50LCBzdG9wSXRlcmF0b3ItPnN0b3AsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wSXRlcmF0b3ItPnJl
ZCwgc3RvcEl0ZXJhdG9yLT5ncmVlbiwgc3RvcEl0ZXJhdG9yLT5ibHVlLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCBlNDhlYjliNjc1ZGM5ZDIxNzU5OTI0Yzg4MDVh
ZmEwYjg5YjQ5ODM3Li5lOWZiNWZhM2NkYTE0NzFlYzZlYmFiYjc0YTk2MDFlZmY0YzM1NDNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtMTU3Nyw4ICsxNTc3LDgg
QEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50RmlsbExheWVycyhjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgQ29sb3ImIGMsIGNvbnMKICAgICAgICAgY29udGV4dC0+YmVnaW5UcmFuc3Bh
cmVuY3lMYXllcigxKTsKICAgICB9CiAKLSAgICBWZWN0b3I8Y29uc3QgRmlsbExheWVyKj46OmNv
bnN0X3JldmVyc2VfaXRlcmF0b3IgdG9wTGF5ZXIgPSBsYXllcnMucmVuZCgpOwotICAgIGZvciAo
VmVjdG9yPGNvbnN0IEZpbGxMYXllcio+Ojpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGl0ID0gbGF5
ZXJzLnJiZWdpbigpOyBpdCAhPSB0b3BMYXllcjsgKytpdCkKKyAgICBhdXRvIHRvcExheWVyID0g
bGF5ZXJzLnJlbmQoKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBsYXllcnMucmJlZ2luKCk7IGl0ICE9
IHRvcExheWVyOyArK2l0KQogICAgICAgICBwYWludEZpbGxMYXllcihwYWludEluZm8sIGMsICpp
dCwgcmVjdCwgYmxlZWRBdm9pZGFuY2UsIG9wLCBiYWNrZ3JvdW5kT2JqZWN0LCBiYXNlQmdDb2xv
clVzYWdlKTsKIAogICAgIGlmIChzaG91bGREcmF3QmFja2dyb3VuZEluU2VwYXJhdGVCdWZmZXIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVk
UG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRSZXNvbHZl
ZFBvc2l0aW9uLmNwcAppbmRleCAwZjM2MmFlZmExYmFmNjExMTRlZjRiNDQ4MTc2NzA3YjJiZTI1
MzBjLi5kNTk0ZGQ4OTc3OWJmNzgyMzM1NmYzMjA4ZGM3ZjdjMmNjYTEyNTZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlv
bi5jcHAKQEAgLTI5NSw3ICsyOTUsNyBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBmaXJzdE5hbWVk
R3JpZExpbmVCZWZvcmVQb3NpdGlvbihzaXplX3QgcG9zaXRpb24sIGNvbnN0IFZlYwogICAgIC8v
IGFscmVhZHkgY29udmVydGVkIHRvIGFuIGluZGV4IGluIG91ciBncmlkIHJlcHJlc2VudGF0aW9u
IChpZSBvbmUgd2FzIHJlbW92ZWQgZnJvbSB0aGUgZ3JpZCBsaW5lIHRvIGFjY291bnQgZm9yCiAg
ICAgLy8gdGhlIHNpZGUpLgogICAgIHNpemVfdCBmaXJzdExpbmVCZWZvcmVQb3NpdGlvbkluZGV4
ID0gMDsKLSAgICBjb25zdCBzaXplX3QqIGZpcnN0TGluZUJlZm9yZVBvc2l0aW9uID0gc3RkOjps
b3dlcl9ib3VuZChncmlkTGluZXMuYmVnaW4oKSwgZ3JpZExpbmVzLmVuZCgpLCBwb3NpdGlvbik7
CisgICAgYXV0byBmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiA9IHN0ZDo6bG93ZXJfYm91bmQoZ3Jp
ZExpbmVzLmJlZ2luKCksIGdyaWRMaW5lcy5lbmQoKSwgcG9zaXRpb24pOwogICAgIGlmIChmaXJz
dExpbmVCZWZvcmVQb3NpdGlvbiAhPSBncmlkTGluZXMuZW5kKCkpIHsKICAgICAgICAgaWYgKCpm
aXJzdExpbmVCZWZvcmVQb3NpdGlvbiA+IHBvc2l0aW9uICYmIGZpcnN0TGluZUJlZm9yZVBvc2l0
aW9uICE9IGdyaWRMaW5lcy5iZWdpbigpKQogICAgICAgICAgICAgLS1maXJzdExpbmVCZWZvcmVQ
b3NpdGlvbjsKQEAgLTMxNyw3ICszMTcsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8R3JpZFNwYW4+IEdy
aWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlUm93U3RhcnRDb2x1bW5TdGFydE5hbWVkRwogc3Rk
Ojp1bmlxdWVfcHRyPEdyaWRTcGFuPiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZVJvd0Vu
ZENvbHVtbkVuZE5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGNv
bnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIGNvbnN0
IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFZlY3RvcjxzaXplX3Q+JiBncmlkTGluZXMp
CiB7CiAgICAgc2l6ZV90IGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbkluZGV4ID0gZ3Jp
ZExpbmVzLnNpemUoKSAtIDE7Ci0gICAgY29uc3Qgc2l6ZV90KiBmaXJzdExpbmVBZnRlck9wcG9z
aXRlUG9zaXRpb24gPSBzdGQ6OnVwcGVyX2JvdW5kKGdyaWRMaW5lcy5iZWdpbigpLCBncmlkTGlu
ZXMuZW5kKCksIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CisgICAgYXV0byBmaXJzdExpbmVB
ZnRlck9wcG9zaXRlUG9zaXRpb24gPSBzdGQ6OnVwcGVyX2JvdW5kKGdyaWRMaW5lcy5iZWdpbigp
LCBncmlkTGluZXMuZW5kKCksIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CiAgICAgaWYgKGZp
cnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbiAhPSBncmlkTGluZXMuZW5kKCkpCiAgICAgICAg
IGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbkluZGV4ID0gZmlyc3RMaW5lQWZ0ZXJPcHBv
c2l0ZVBvc2l0aW9uIC0gZ3JpZExpbmVzLmJlZ2luKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9u
dEVsZW1lbnQuY3BwCmluZGV4IGMzM2ZmYjc3YjZkOGY5OTU3YjEyNmYxYmYzOTE3YTg1N2ZkZmI1
MGUuLmEwYmY1MDE5MWI2YWI5NTgxNjE4ZDk1M2MwODkwZDIxMmViN2IzNjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcApAQCAtMjUyLDMxICsyNTIsMzEgQEAgc3RhdGljIGlu
bGluZSBmbG9hdCBrZXJuaW5nRm9yUGFpck9mU3RyaW5nc0FuZEdseXBocyhjb25zdCBTVkdLZXJu
aW5nTWFwJiBrZXJuaW4KIHsKICAgICBpZiAoIWcxLmlzRW1wdHkoKSAmJiBrZXJuaW5nTWFwLmds
eXBoTWFwLmNvbnRhaW5zKGcxKSkgewogICAgICAgICBTVkdLZXJuaW5nVmVjdG9yKiBrZXJuaW5n
VmVjdG9yID0ga2VybmluZ01hcC5nbHlwaE1hcC5nZXQoZzEpOwotICAgICAgICBTVkdLZXJuaW5n
VmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGtlcm5pbmdWZWN0b3ItPmVuZCgpIC0gMTsKLSAg
ICAgICAgY29uc3QgU1ZHS2VybmluZ1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBrZXJu
aW5nVmVjdG9yLT5iZWdpbigpIC0gMTsKLSAgICAgICAgZm9yICg7IGl0ICE9IGJlZ2luOyAtLWl0
KSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2hlcyh1MiwgZzIsICppdCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGl0LT5rZXJuaW5nOworICAgICAgICBzaXplX3QgaXQgPSBrZXJuaW5nVmVjdG9y
LT5zaXplKCk7CisgICAgICAgIHdoaWxlIChpdC0tID4gMCkgeworICAgICAgICAgICAgYXV0byYg
dmFsdWUgPSBrZXJuaW5nVmVjdG9yLT5hdChpdCk7CisgICAgICAgICAgICBpZiAobWF0Y2hlcyh1
MiwgZzIsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUua2VybmluZzsKICAg
ICAgICAgfQogICAgIH0KIAogICAgIGlmICghdTEuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChr
ZXJuaW5nTWFwLnVuaWNvZGVNYXAuY29udGFpbnModTEpKSB7CiAgICAgICAgICAgICBTVkdLZXJu
aW5nVmVjdG9yKiBrZXJuaW5nVmVjdG9yID0ga2VybmluZ01hcC51bmljb2RlTWFwLmdldCh1MSk7
Ci0gICAgICAgICAgICBTVkdLZXJuaW5nVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGtlcm5p
bmdWZWN0b3ItPmVuZCgpIC0gMTsKLSAgICAgICAgICAgIGNvbnN0IFNWR0tlcm5pbmdWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0ga2VybmluZ1ZlY3Rvci0+YmVnaW4oKSAtIDE7Ci0gICAg
ICAgICAgICBmb3IgKDsgaXQgIT0gYmVnaW47IC0taXQpIHsKLSAgICAgICAgICAgICAgICBpZiAo
bWF0Y2hlcyh1MiwgZzIsICppdCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdC0+a2Vy
bmluZzsKKyAgICAgICAgICAgIHNpemVfdCBpdCA9IGtlcm5pbmdWZWN0b3ItPnNpemUoKTsKKyAg
ICAgICAgICAgIHdoaWxlIChpdC0tID4gMCkgeworICAgICAgICAgICAgICAgIGF1dG8mIHZhbHVl
ID0ga2VybmluZ1ZlY3Rvci0+YXQoaXQpOworICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzKHUy
LCBnMiwgdmFsdWUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUua2VybmluZzsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICgha2VybmluZ01hcC5rZXJu
aW5nVW5pY29kZVJhbmdlTWFwLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgVmVjdG9yPFNWR0tl
cm5pbmdQYWlyPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2Rl
UmFuZ2VNYXAuZW5kKCkgLSAxOwotICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0tlcm5pbmdQ
YWlyPjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2RlUmFu
Z2VNYXAuYmVnaW4oKSAtIDE7Ci0gICAgICAgICAgICBmb3IgKDsgaXQgIT0gYmVnaW47IC0taXQp
IHsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyh1MSwgdTIsIGcyLCAqaXQpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gaXQtPmtlcm5pbmc7CisgICAgICAgICAgICBzaXplX3QgaXQg
PSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VNYXAuc2l6ZSgpOworICAgICAgICAgICAg
d2hpbGUgKGl0LS0gPiAwKSB7CisgICAgICAgICAgICAgICAgYXV0byYgdmFsdWUgPSBrZXJuaW5n
TWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VNYXBbaXRdOworICAgICAgICAgICAgICAgIGlmIChtYXRj
aGVzKHUxLCB1MiwgZzIsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVl
Lmtlcm5pbmc7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oCmluZGV4IDlkOWQyYTJiMjNjNjAwZmViYjUzNDBjYmNkZDFi
NjFkZGMzYjlmMTUuLmI5OTk1NTQ5NDM5YWM5NjRhYjNlNjdhMzBmMGQ4OWQ4YzM1OGFjYTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oCkBAIC02MCw4ICs2MCw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIGFwcGVuZCh1bnNpZ25lZCBjaGFyIGJ5dGUpIHsgbV9kYXRhLmFwcGVu
ZChieXRlKTsgfQogICAgIHZvaWQgYXBwZW5kKFNWR1BhdGhCeXRlU3RyZWFtKiBvdGhlcikKICAg
ICB7Ci0gICAgICAgIGZvciAoRGF0YUl0ZXJhdG9yIGl0ID0gb3RoZXItPmJlZ2luKCk7IGl0ICE9
IG90aGVyLT5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgIGFwcGVuZCgqaXQpOworICAgICAgICBm
b3IgKGF1dG8mIGJ5dGUgOiAqb3RoZXIpCisgICAgICAgICAgICBhcHBlbmQoYnl0ZSk7CiAgICAg
fQogICAgIHZvaWQgY2xlYXIoKSB7IG1fZGF0YS5jbGVhcigpOyB9CiAgICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gIW1fZGF0YS5zaXplKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aE5vZGVT
ZXQuaAppbmRleCAzZDg5YjhkNTA4N2E4NmNmZWFmZmMwMTQwYjY5NDc2MmMwOTVkZGRmLi5kYWYy
YjkzZDUxYjVhZjZiNzM0ZjVmOWE3NjU0MTM2OWUwNDE0YTJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRo
Tm9kZVNldC5oCkBAIC02NCw4ICs2NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
ICAgIHZvaWQgbWFya1N1YnRyZWVzRGlzam9pbnQoYm9vbCBkaXNqb2ludCkgeyBtX3N1YnRyZWVz
QXJlRGlzam9pbnQgPSBkaXNqb2ludDsgfQogICAgICAgICAgICAgYm9vbCBzdWJ0cmVlc0FyZURp
c2pvaW50KCkgY29uc3QgeyByZXR1cm4gbV9zdWJ0cmVlc0FyZURpc2pvaW50IHx8IG1fbm9kZXMu
c2l6ZSgpIDwgMjsgfQogCi0gICAgICAgICAgICBjb25zdCBSZWZQdHI8Tm9kZT4qIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9ub2Rlcy5iZWdpbigpOyB9Ci0gICAgICAgICAgICBjb25zdCBSZWZQ
dHI8Tm9kZT4qIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuZW5kKCk7IH0KKyAgICAgICAg
ICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4+OjppdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIG1fbm9kZXMuYmVnaW4oKTsgfQorICAgICAgICAgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxOb2RlPj46Oml0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuZW5kKCk7IH0K
IAogICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgdm9pZCB0cmF2ZXJzYWxTb3J0KCkgY29u
c3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241954</attachid>
            <date>2014-11-20 09:56:02 -0800</date>
            <delta_ts>2014-11-20 10:32:15 -0800</delta_ts>
            <desc>trying to fix efl, gtk, and msvc</desc>
            <filename>bug-138821-20141120095617.patch</filename>
            <type>text/plain</type>
            <size>69034</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2Mzk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
MDJjYWNjMWVlMDYxOGNiOTk3M2FlYTQ1Mjc2ZTdmYzg4OTBjODc0Li5jZmYyODMwOTQ2MTJhOTMz
NDI5MTFmYzM5MTVhY2JkOWI1YjY4MzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNiBAQAorMjAxNC0xMS0xNyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3Rp
bGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGVyZSBhcmUgYSBmZXcgdXNlcyBvZiBiZWdpbigpL2VuZCgp
IHRoYXQgZXhwbGljaXRseSByZXF1aXJlIHBvaW50ZXJzLAorICAgICAgICBzbyB3ZSB1c2UgZ2V0
UHRyKCkgdG8gZXh0cmFjdCB0aGUgdW5kZXJseWluZyBwb2ludGVyIGdlbmVyaWNhbGx5LgorCisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRDb21wbGV4UG9wU2NvcGVzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVt
cCk6CisgICAgICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6RlRM
OjptZE5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkQ2FsbCk6CisgICAgICAgICogbGxp
bnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBlcmZvcm1Bc3Nl
cnRpb25zKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlNjb3Bl
OjpTY29wZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwOgorICAgICAgICAo
SlNDOjpQcm9maWxlTm9kZTo6ZGVidWdQcmludFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3Rvcik6
CisgICAgICAgICogdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2Zp
bGVUcmVlTm9kZTo6ZHVtcEludGVybmFsKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgor
ICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjptYXRjaENoYXJhY3RlckNsYXNzKToK
KwogMjAxNC0xMS0xOSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IEpTQ29udGV4dCBpbnNwZWN0aW9uIFJlc291cmNlIHNlYXJj
aCBkb2VzIG5vdCB3b3JrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDU1MWE2YjZkOTY5MzhmOGJjM2I2MDNhMTNlMTAwZDg2NGMx
ZGI4M2UuLjI3MTg5MzNiMjUzZGVkMjJkMzJiMjRkNzhkZTQwMDVjNjJkMTdmYWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsOTggQEAKKzIwMTQtMTEtMTcgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
KworICAgICAgICBNYWtlIHN1cmUgcmFuZ2UgYmFzZWQgaXRlcmF0aW9uIG9mIFZlY3Rvcjw+IHN0
aWxsIHJlY2VpdmVzIGJvdW5kcyBjaGVja2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4ODIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IEluZGV4ZWRJdGVyYXRvciBzdHJ1Y3QgdG8g
V1RGIHRoYXQgd3JhcHMgYQorICAgICAgICBWZWN0b3IgdHlwZSBhbmQgaW5kZXggdG8gcHJvdmlk
ZSBwb2ludGVyIGxpa2Ugc2VtYW50aWNzCisgICAgICAgIHdoaWxlIHN0aWxsIHBlcmZvcm1pbmcg
cnVudGltZSBib3VuZHMgY2hlY2tpbmcsIGV2ZW4gaW4KKyAgICAgICAgcmVsZWFzZSBidWlsZHMu
IFdlIHN0b3JlIGEgc2ltcGxlIGluZGV4IGludG8gdGhlIHZlY3RvcgorICAgICAgICB3aGljaCBt
ZWFucyB0aGF0IHRoaXMgaXRlcmF0b3IgYWxsb3dzIHZlY3RvciByZXNpemluZworICAgICAgICBk
dXJpbmcgaXRlcmF0aW9uLiBJZiB0aGUgdmVjdG9yIGlzIHJlc2l6ZWQgc3VjaCB0aGF0IHRoZQor
ICAgICAgICBpdGVyYXRvciBpcyBvdXQgb2YgYm91bmRzLCB0aGVuIGFueSBhdHRlbXB0IHRvIGRl
cmVmZXJlbmNlCisgICAgICAgIHRoZSBpdGVyYXRvciB3aWxsIGNyYXNoIHNhZmVseS4gQW55IG90
aGVyIGVycm9ycywgaW5jbHVkaW5nCisgICAgICAgIG92ZXJmbG93cywgYW5kIG92ZXIgZXh0ZW5k
aW5nIHRoZSBpdGVyYXRvciB3aWxsIGxpa2V3aXNlCisgICAgICAgIGNyYXNoLgorCisgICAgICAg
IEZvciB0aGUgcHVycG9zZSBvZiByZXRhaW5pbmcgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQKKyAg
ICAgICAgYmVoYXZpb3VyLCB0aGUgaXRlcmF0b3IgY2FuIGJlIG1vdmVkIHRvIG1faW5kZXggPT0g
c2l6ZSgpCisgICAgICAgIGFzIHRoYXQgaXMgdGhlIHN0YW5kYXJkICJlbmQiIHRlcm1pbmF0b3Ig
Zm9yIHRoZXNlIHR5cGVzLgorICAgICAgICBBdHRlbXB0aW5nIHRvIGRlcmVmZXJlbmNlIGF0IHRo
YXQgcG9pbnQgd2lsbCBzdGlsbCBjcmFzaAorICAgICAgICByYXRoZXIgdGhhbiBwZXJmb3JtIGFu
IHVuc2FmZSBtZW1vcnkgb3BlcmF0aW9uLgorCisgICAgICAgIEluIG9yZGVyIHRvIG1haW50YWlu
IHRoZSB2YWxpZGl0eSBvZiBhbGwgdGhlIGJvdW5kcyBjaGVja2luZywKKyAgICAgICAgd2UgcGVy
Zm9ybSBmdWxsIGludGVnZXIgcmFuZ2UgY2hlY2tpbmcgcHJpb3IgdG8gYW55IG11dGF0aW9uCisg
ICAgICAgIG9mIHRoZSBpdGVyYXRvciBsb2NhdGlvbi4gSWYgd2UgZGV0ZWN0IGFuIGFyaXRobWV0
aWMgb3ZlcmZsb3cKKyAgICAgICAgd2Ugd2lsbCBjcmFzaCByYXRoZXIgdGhhbiBhdHRlbXB0aW5n
IHRvIGNhcnJ5IG9uLgorCisgICAgICAgIEJ5IG5lY2Vzc2l0eSB0aGVyZSBhcmUgbWFueSBvdmVy
cmlkZXMgZm9yIG9wZXJhdG9yICsgYW5kIC0gYXMKKyAgICAgICAgd2Ugb3RoZXJ3aXNlIGhpdCBt
YW55IGRpZmZlcmVudCB0eXBlIHByb21vdGlvbiBhbWJpZ3VpdGllcyB3aGVuCisgICAgICAgIHBl
cmZvcm1pbmcgYXJpdGhtZXRpYyB3aXRoIGl0ZXJhdG9ycy4gVGhlc2UgYW1iaWd1aXRpZXMgYXJl
IGFsc28KKyAgICAgICAgZGlmZmVyZW50IGZvciAzMi0gdnMuIDY0LWJpdCwgc28gZHVwbGljYXRp
bmcgdGhlIGZ1bmN0aW9ucworICAgICAgICBhbmQgdGhlbiBmb3J3YXJkaW5nIHRvIHRoZSBjb3Jl
IGltcGxlbWVudGF0aW9ucyB0aGF0IHBlcmZvcm1lZAorICAgICAgICB0aGUgYm91bmRzIGNoZWNr
aW5nIGFuZCBtdXRhdGlvbiBzZWVtZWQgbGlrZSB0aGUgcmlnaHQgY2FsbC4KKworICAgICAgICAq
IFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9JbmRleGVkSXRl
cmF0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6SW5kZXhlZEl0
ZXJhdG9yKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvci0+KToKKyAg
ICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpJ
bmRleGVkSXRlcmF0b3I6OmdldCk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3Bl
cmF0b3IrKyk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3ItLSk6Cisg
ICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlw
ZSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IrPSk6CisgICAgICAg
IChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3ItPSk6CisgICAgICAgIChXVEY6OkluZGV4
ZWRJdGVyYXRvcjo6b3BlcmF0b3IrKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpv
cGVyYXRvci0pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6
OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVy
YXRvcjo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRv
cjw9KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcj4pOgorICAgICAg
ICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPj0pOgorICAgICAgICAoV1RGOjpJbmRl
eGVkSXRlcmF0b3I6Om9wZXJhdG9yIGNvbnN0X2l0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6SW5k
ZXhlZEl0ZXJhdG9yOjppc1NhZmVUb0NvbXBhcmUpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRl
cmF0b3I6OnVuc2FmZUdldCk6CisgICAgICAgIChXVEY6OmdldFB0cik6CisgICAgICAgIChXVEY6
Om9wZXJhdG9yLSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXVEY6Om9w
ZXJhdG9yPj0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpvcGVy
YXRvcj4pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3JTZWxlY3Rvcjo6bWFrZUl0ZXJh
dG9yKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yU2VsZWN0b3I6Om1ha2VDb25zdEl0
ZXJhdG9yKToKKyAgICAgICAgKiB3dGYvUmVmQ291bnRlZEFycmF5Lmg6CisgICAgICAgIChXVEY6
OlJlZkNvdW50ZWRBcnJheTo6UmVmQ291bnRlZEFycmF5KToKKyAgICAgICAgKiB3dGYvVmVjdG9y
Lmg6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6VmVjdG9y
OjpiZWdpbik6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6ZW5kKToKKyAgICAgICAgKFdURjo6T3Zl
cmZsb3dIYW5kbGVyPjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6PSk6CisgICAgICAgIChXVEY6
Ok92ZXJmbG93SGFuZGxlcj46OmZpbGwpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+
OjpleHBhbmRDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnRyeUV4
cGFuZENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6cmVzaXplKToK
KyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6c2hyaW5rKToKKyAgICAgICAgKFdURjo6
T3ZlcmZsb3dIYW5kbGVyPjo6Z3Jvdyk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46
OnJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnRyeVJl
c2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnNocmlua0Nh
cGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kKToKKyAgICAg
ICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6dHJ5QXBwZW5kKToKKyAgICAgICAgKFdURjo6T3Zl
cmZsb3dIYW5kbGVyPjo6YXBwZW5kU2xvd0Nhc2UpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hh
bmRsZXI+Ojp1bmNoZWNrZWRBcHBlbmQpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+
OjphcHBlbmRWZWN0b3IpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnQp
OgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnRWZWN0b3IpOgorICAgICAg
ICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUpOgorCiAyMDE0LTExLTE4ICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgSGF2ZSBWZWN0b3I6OmNhcGFjaXR5
KCkgcmV0dXJuIGFuIHVuc2lnbmVkIGluc3RlYWQgb2YgYSBzaXplX3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAz
MjFkNGE2MTVjZWJhZmI0Y2Q3MGI2NDgxMjRlZTgxMjYyMDMwNjI3Li44ZGQyZjBmZDgzM2I1Y2Jm
NjNkYTU2ODU4ZThmNDFjYjM4NTA0NzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIw
MTQtMTEtMTcgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtl
IHN1cmUgcmFuZ2UgYmFzZWQgaXRlcmF0aW9uIG9mIFZlY3Rvcjw+IHN0aWxsIHJlY2VpdmVzIGJv
dW5kcyBjaGVja2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM4ODIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhlcmUgYXJlIGEgZmV3IHVzZXMgb2YgYmVnaW4oKS9lbmQoKSB0aGF0IGV4cGxpY2l0
bHkgcmVxdWlyZSBwb2ludGVycywKKyAgICAgICAgc28gd2UgdXNlIGdldFB0cigpIHRvIGV4dHJh
Y3QgdGhlIHVuZGVybHlpbmcgcG9pbnRlciBnZW5lcmljYWxseS4KKworICAgICAgICAqIGJpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9u
ZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemVTdHJpbmcpOgorICAgICAgICAqIGVkaXRpbmcvVGV4
dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEJ1ZmZlcjo6aXNCYWRNYXRj
aCk6CisgICAgICAgICogcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9u
SGlnaGxpZ2h0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6Zm9udERhdGFGb3JD
aGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkRm9udERhdGE6OmNvbnRhaW5z
Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZEZvbnREYXRhOjppc0xvYWRp
bmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnZlcnRXT0ZGVG9TZm50KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFpbnRGaWxsTGF5
ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3ROYW1lZEdyaWRMaW5lQmVmb3JlUG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVSb3dFbmRDb2x1
bW5FbmROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbik6CisgICAg
ICAgICogc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omtlcm5pbmdG
b3JQYWlyT2ZTdHJpbmdzQW5kR2x5cGhzKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ5dGVTdHJl
YW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtOjphcHBlbmQpOgorICAg
ICAgICAqIHhtbC9YUGF0aE5vZGVTZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOb2Rl
U2V0OjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6Tm9kZVNldDo6ZW5kKToKKwog
MjAxNC0xMS0yMCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE3NjM5Ni4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCmluZGV4IDZjMjkz
Y2NmOThkNTY3MzI2ZGM0MmZhYmQ1ZGZhNDFkMjNmNmMyYzEuLjYzNWFjZDJjYmIzOGU3OGE2MDgz
YjYxZTU4ZGJhMWI0N2NiNzllOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApAQCAtMjM0LDkgKzIzNCw5IEBAIHZvaWQg
VW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3N5bWJvbFRhYmxlKTsKICAgICBm
b3IgKEZ1bmN0aW9uRXhwcmVzc2lvblZlY3Rvcjo6aXRlcmF0b3IgcHRyID0gdGhpc09iamVjdC0+
bV9mdW5jdGlvbkRlY2xzLmJlZ2luKCksIGVuZCA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25EZWNs
cy5lbmQoKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0cik7
CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKFdURjo6Z2V0UHRyKHB0cikpOwogICAgIGZvciAoRnVu
Y3Rpb25FeHByZXNzaW9uVmVjdG9yOjppdGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0
aW9uRXhwcnMuYmVnaW4oKSwgZW5kID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkV4cHJzLmVuZCgp
OyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQocHRyKTsKKyAgICAg
ICAgdmlzaXRvci5hcHBlbmQoV1RGOjpnZXRQdHIocHRyKSk7CiAgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXModGhpc09iamVjdC0+bV9jb25zdGFudFJlZ2lzdGVycy5kYXRhKCksIHRoaXNPYmplY3Qt
Pm1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKICAgICBpZiAodGhpc09iamVjdC0+bV9yYXJl
RGF0YSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgZW5kID0gdGhpc09iamVjdC0+bV9y
YXJlRGF0YS0+bV9yZWdleHBzLnNpemUoKTsgaSAhPSBlbmQ7IGkrKykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAK
aW5kZXggYjIxMzRlZjdhNTA5YjczNjllM2QyYzA1NjYyYzIxYjg0NzA3ZmY1Yy4uNWUxZjQ2MTI5
MWFjZTI2MDkzYjEzMTdkYWY4NGNlOTVkM2QxYmZmYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTIy
NjMsOCArMjI2Myw4IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb21wbGV4UG9wU2Nv
cGVzKFJlZ2lzdGVySUQqIHNjb3BlLCBDb250cm9sRmxvd0NvbnRlCiAgICAgICAgICAgICBpbnQg
dG9wU2NvcGVJbmRleCA9IC0xOwogICAgICAgICAgICAgaW50IGJvdHRvbVNjb3BlSW5kZXggPSAt
MTsKICAgICAgICAgICAgIGlmIChmbGlwU2NvcGVzKSB7Ci0gICAgICAgICAgICAgICAgdG9wU2Nv
cGVJbmRleCA9IHRvcFNjb3BlIC0gbV9zY29wZUNvbnRleHRTdGFjay5iZWdpbigpOwotICAgICAg
ICAgICAgICAgIGJvdHRvbVNjb3BlSW5kZXggPSBib3R0b21TY29wZSAtIG1fc2NvcGVDb250ZXh0
U3RhY2suYmVnaW4oKTsKKyAgICAgICAgICAgICAgICB0b3BTY29wZUluZGV4ID0gdG9wU2NvcGUg
LSBtX3Njb3BlQ29udGV4dFN0YWNrLmRhdGEoKTsKKyAgICAgICAgICAgICAgICBib3R0b21TY29w
ZUluZGV4ID0gYm90dG9tU2NvcGUgLSBtX3Njb3BlQ29udGV4dFN0YWNrLmRhdGEoKTsKICAgICAg
ICAgICAgICAgICBzYXZlZFNjb3BlQ29udGV4dFN0YWNrID0gbV9zY29wZUNvbnRleHRTdGFjazsK
ICAgICAgICAgICAgICAgICBtX3Njb3BlQ29udGV4dFN0YWNrLnNocmluayhmaW5hbGx5Q29udGV4
dC5zY29wZUNvbnRleHRTdGFja1NpemUpOwogICAgICAgICAgICAgfQpAQCAtMjMwOCw3ICsyMzA4
LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMoUmVnaXN0
ZXJJRCogc2NvcGUsIENvbnRyb2xGbG93Q29udGUKICAgICAgICAgICAgIGlmIChmbGlwU2NvcGVz
KSB7CiAgICAgICAgICAgICAgICAgbV9zY29wZUNvbnRleHRTdGFjayA9IHNhdmVkU2NvcGVDb250
ZXh0U3RhY2s7CiAgICAgICAgICAgICAgICAgdG9wU2NvcGUgPSAmbV9zY29wZUNvbnRleHRTdGFj
a1t0b3BTY29wZUluZGV4XTsgLy8gYXNzZXJ0IGl0J3Mgd2l0aGluIGJvdW5kcwotICAgICAgICAg
ICAgICAgIGJvdHRvbVNjb3BlID0gbV9zY29wZUNvbnRleHRTdGFjay5iZWdpbigpICsgYm90dG9t
U2NvcGVJbmRleDsgLy8gZG9uJ3QgYXNzZXJ0LCBzaW5jZSBpdCB0aGUgaW5kZXggbWlnaHQgYmUg
LTEuCisgICAgICAgICAgICAgICAgYm90dG9tU2NvcGUgPSBtX3Njb3BlQ29udGV4dFN0YWNrLmRh
dGEoKSArIGJvdHRvbVNjb3BlSW5kZXg7IC8vIGRvbid0IGFzc2VydCwgc2luY2UgaXQgdGhlIGlu
ZGV4IG1pZ2h0IGJlIC0xLgogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGZsaXBTd2l0
Y2hlcykKICAgICAgICAgICAgICAgICBtX3N3aXRjaENvbnRleHRTdGFjayA9IHNhdmVkU3dpdGNo
Q29udGV4dFN0YWNrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAppbmRleCBmMDcyNGRmNDcwMzk0OWIzMGQyNGUzNmFhODJlNzc4YTVjYjliZjcz
Li4zYmUxOGVhNmM2Y2I3ZjM2ZjQ4ZTIwYjU5ZjcyM2VjYzUxNGI5ZDNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtNDkxMCw3ICs0
OTEwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEludEp1bXAoCiAgICAgYWRk
QnJhbmNoKAogICAgICAgICBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFs
LCB2YWx1ZSwgSW1tMzIodGFibGUuY3RpT2Zmc2V0cy5zaXplKCkpKSwKICAgICAgICAgZGF0YS0+
ZmFsbFRocm91Z2guYmxvY2spOwotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cih0YWJsZS5j
dGlPZmZzZXRzLmJlZ2luKCkpLCBzY3JhdGNoKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1Q
dHIodGFibGUuY3RpT2Zmc2V0cy5kYXRhKCkpLCBzY3JhdGNoKTsKICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjpCYXNlSW5kZXgoc2NyYXRjaCwgdmFsdWUsIEpJVENvbXBpbGVyOjp0aW1l
c1B0cigpKSwgc2NyYXRjaCk7CiAgICAgbV9qaXQuanVtcChzY3JhdGNoKTsKICAgICBkYXRhLT5k
aWRVc2VKdW1wVGFibGUgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYmJyZXZpYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
YnJldmlhdGlvbnMuaAppbmRleCBmYzdjYjFiMjU0MzI2OTRhYWVlOGZiZjMxNTNlNmUwOGE4MzMy
ZjM5Li43YjFhMWNlN2IzODM3ZTgxNGNiYTJiM2VjYzNhMDdiMDE4ZDlhZTMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaApAQCAtMTIwLDcgKzEyMCw3
IEBAIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kU3RyaW5nKExDb250ZXh0IGNvbnRleHQsIGNvbnN0
IGNoYXIqIHN0cmluZywgdW5zaWduZWQgbGVuCiBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZFN0cmlu
ZyhMQ29udGV4dCBjb250ZXh0LCBjb25zdCBjaGFyKiBzdHJpbmcpIHsgcmV0dXJuIG1kU3RyaW5n
KGNvbnRleHQsIHN0cmluZywgc3RkOjpzdHJsZW4oc3RyaW5nKSk7IH0KIHN0YXRpYyBpbmxpbmUg
TFZhbHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0LCBMVmFsdWUqIGFyZ3MsIHVuc2lnbmVkIG51
bUFyZ3MpIHsgcmV0dXJuIGxsdm0tPk1ETm9kZUluQ29udGV4dChjb250ZXh0LCBhcmdzLCBudW1B
cmdzKTsgfQogdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KLXN0YXRpYyBpbmxpbmUgTFZh
bHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0LCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpIHsg
cmV0dXJuIG1kTm9kZShjb250ZXh0LCBjb25zdF9jYXN0PExWYWx1ZSo+KHZlY3Rvci5iZWdpbigp
KSwgdmVjdG9yLnNpemUoKSk7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4
dCBjb250ZXh0LCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpIHsgcmV0dXJuIG1kTm9kZShjb250
ZXh0LCBjb25zdF9jYXN0PExWYWx1ZSo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpKTsg
fQogc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQpIHsgcmV0dXJu
IG1kTm9kZShjb250ZXh0LCAwLCAwKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExD
b250ZXh0IGNvbnRleHQsIExWYWx1ZSBhcmcxKSB7IHJldHVybiBtZE5vZGUoY29udGV4dCwgJmFy
ZzEsIDEpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwg
TFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyKQpAQCAtMjg4LDcgKzI4OCw3IEBAIHN0YXRpYyBpbmxp
bmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIGNv
bnN0IExWYWx1ZSoKIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+CiBpbmxpbmUgTFZhbHVl
IGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IFZlY3Rv
clR5cGUmIHZlY3RvcikKIHsKLSAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9u
LCB2ZWN0b3IuYmVnaW4oKSwgdmVjdG9yLnNpemUoKSk7CisgICAgcmV0dXJuIGJ1aWxkQ2FsbChi
dWlsZGVyLCBmdW5jdGlvbiwgdmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUoKSk7CiB9CiBzdGF0
aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0
aW9uKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0
YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAppbmRleCA2
OTE5YWVhYjAwYTFiMjVjNDc1YmJmOWRkMjVjNjg4ZjBhYTU4YTcyLi40NGFmY2E0Y2JhZDhiM2U1
NTMzNDEyOWFjOWM5YjBkZWZkOTU2MWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnREYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnREYXRhLmNwcApAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgRGF0YTo6cGVyZm9ybUFzc2Vy
dGlvbnMoVk0mIHZtKQogICAgIFZlY3RvcjxpbnQ+IHRlc3RWZWN0b3I7CiAgICAgdGVzdFZlY3Rv
ci5yZXNpemUoNDIpOwogICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8dWludDMyX3QqPigmdGVzdFZl
Y3Rvcilbc2l6ZW9mKHZvaWQqKS9zaXplb2YodWludDMyX3QpICsgMV0gPT0gNDIpOwotICAgIEFT
U0VSVChiaXR3aXNlX2Nhc3Q8aW50Kio+KCZ0ZXN0VmVjdG9yKVswXSA9PSB0ZXN0VmVjdG9yLmJl
Z2luKCkpOworICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50Kio+KCZ0ZXN0VmVjdG9yKVswXSA9
PSB0ZXN0VmVjdG9yLmRhdGEoKSk7CiAjZW5kaWYKIAogICAgIEFTU0VSVChTdHJpbmdJbXBsOjpz
X2hhc2hGbGFnOEJpdEJ1ZmZlciA9PSAzMik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuaAppbmRleCA0NTJmNzA0NmYzMDIyZDM4ODEwOWFlYmRjODQzODRlMWFhMjJmZmExLi4wMWZj
Y2RiN2UzOGFjNWE2MDIyYzY4Yzk3YjhkOGViM2IwY2VjMTgwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyLmgKQEAgLTEzMCwxMSArMTMwLDggQEAgc3RydWN0IFNjb3BlIHsKICAg
ICB7CiAgICAgICAgIGlmIChyaHMubV9sYWJlbHMpIHsKICAgICAgICAgICAgIG1fbGFiZWxzID0g
YWRvcHRQdHIobmV3IExhYmVsU3RhY2spOwotCi0gICAgICAgICAgICB0eXBlZGVmIExhYmVsU3Rh
Y2s6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAgICAgICAgaXRlcmF0b3IgZW5kID0g
cmhzLm1fbGFiZWxzLT5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoaXRlcmF0b3IgaXQgPSByaHMu
bV9sYWJlbHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICAgICBtX2xh
YmVscy0+YXBwZW5kKFNjb3BlTGFiZWxJbmZvKGl0LT5tX2lkZW50LCBpdC0+bV9pc0xvb3ApKTsK
KyAgICAgICAgICAgIGZvciAoYXV0byBsYWJlbCA6ICpyaHMubV9sYWJlbHMpCisgICAgICAgICAg
ICAgICAgbV9sYWJlbHMtPmFwcGVuZChTY29wZUxhYmVsSW5mbyhsYWJlbC5tX2lkZW50LCBsYWJl
bC5tX2lzTG9vcCkpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVOb2RlLmNwcAppbmRleCAyNjVjZGRkMGVmNzg4MzNmNjFiNTcx
MTE5Y2ZkNzcyMGZkNDZkMTU3Li42OTJjN2I4NmYzYzNhMjU0MjFiYjEwMDgyZGY2ZTA4ZGViNDBm
MGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZU5v
ZGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlTm9kZS5j
cHAKQEAgLTE1NCw2ICsxNTQsNyBAQCB2b2lkIFByb2ZpbGVOb2RlOjpkZWJ1Z1ByaW50UmVjdXJz
aXZlbHkoaW50IGluZGVudExldmVsLCBjb25zdCBQcm9maWxlU3VidHJlZURhdAogICAgIC8vIFBy
aW50IGNoaWxkcmVuJ3MgbmFtZXMgYW5kIGluZm9ybWF0aW9uCiAgICAgZm9yIChTdGFja0l0ZXJh
dG9yIGN1cnJlbnRDaGlsZCA9IG1fY2hpbGRyZW4uYmVnaW4oKTsgY3VycmVudENoaWxkICE9IG1f
Y2hpbGRyZW4uZW5kKCk7ICsrY3VycmVudENoaWxkKQogICAgICAgICAoKmN1cnJlbnRDaGlsZCkt
PmRlYnVnUHJpbnRSZWN1cnNpdmVseShpbmRlbnRMZXZlbCwgZGF0YSk7CisKIH0KIAogLy8gcHJp
bnQgdGhlIHByb2ZpbGVkIGRhdGEgaW4gYSBmb3JtYXQgdGhhdCBtYXRjaGVzIHRoZSB0b29sIHNh
bXBsZSdzIG91dHB1dC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAK
aW5kZXggY2M2MzAyMTdkZjdmZDI1YWRlNGM0YmIzOTg1NzRkNjdkNWE3NDU2OS4uNzljZDY3YTY3
ODE3YmRkZmFlZGRmM2M1MDY4NmM0ODJjOTIwNDUwNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAKQEAgLTM1Miw3ICszNTIsNyBAQCBib29sIEpTQXJyYXk6OnNl
dExlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5n
dGgsIGJvbwogICAgICAgICAgICAgLy8gcHJvcGVydGllcywgc28gd2UgaGF2ZSB0byBwZXJmb3Jt
IGRlbGV0aW9uIHdpdGggY2F1dGlvbiwgaWYgbm90IHdlIGNhbgogICAgICAgICAgICAgLy8gZGVs
ZXRlIHZhbHVlcyBpbiBhbnkgb3JkZXIuCiAgICAgICAgICAgICBpZiAobWFwLT5zcGFyc2VNb2Rl
KCkpIHsKLSAgICAgICAgICAgICAgICBxc29ydChrZXlzLmJlZ2luKCksIGtleXMuc2l6ZSgpLCBz
aXplb2YodW5zaWduZWQpLCBjb21wYXJlS2V5c0ZvclFTb3J0KTsKKyAgICAgICAgICAgICAgICBx
c29ydChrZXlzLmRhdGEoKSwga2V5cy5zaXplKCksIHNpemVvZih1bnNpZ25lZCksIGNvbXBhcmVL
ZXlzRm9yUVNvcnQpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBrZXlzLnNpemUoKTsK
ICAgICAgICAgICAgICAgICB3aGlsZSAoaSkgewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbmRleCA9IGtleXNbLS1pXTsKQEAgLTExOTEsMTMgKzExOTEsMTMgQEAgdm9pZCBKU0FycmF5
Ojpzb3J0Q29tcGFjdGVkVmVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgQ29udGlndW91c0RhdGE8U3Rv
cmFnZVR5cGU+IGQKICAgICAgICAgCiAjaWYgSEFWRShNRVJHRVNPUlQpCiAgICAgaWYgKGlzU29y
dGluZ1ByaW1pdGl2ZVZhbHVlcykKLSAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVl
cy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9y
UVNvcnQpOworICAgICAgICBxc29ydCh2YWx1ZXMuZGF0YSgpLCB2YWx1ZXMuc2l6ZSgpLCBzaXpl
b2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICAgICBl
bHNlCi0gICAgICAgIG1lcmdlc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6
ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAg
ICAgIG1lcmdlc29ydCh2YWx1ZXMuZGF0YSgpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVT
dHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICNlbHNlCiAgICAgLy8g
RklYTUU6IFRoZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBz
dGFibGUgc29ydC4KICAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3Rh
YmxlIHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0
LgotICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVT
dHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICBxc29ydCh2YWx1
ZXMuZGF0YSgpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFy
ZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICNlbmRpZgogICAgIAogICAgIC8vIElmIHRoZSB0b1N0
cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBz
dG9yYWdlLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVU
cmVlTm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5o
CmluZGV4IDg4ZDU3ZjNkZDRlNzk3NjlkMWQwNmMzYTg1OTEwMWI1NTVjNmE4M2YuLmRkM2MxMjFk
MGViYjE2ZThhNTI0NjFmYWFjZGJiYjRkOTg3ZDcyYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgVmVjdG9yPE1hcEVudHJ5Kj4gZW50cmllczsKICAgICAgICAgZm9yIChNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi0+YmVnaW4oKTsgaXQgIT0gbV9jaGlsZHJlbi0+ZW5kKCk7
ICsraXQpCiAgICAgICAgICAgICBlbnRyaWVzLmFwcGVuZCgmKml0KTsKLSAgICAgICAgcXNvcnQo
ZW50cmllcy5iZWdpbigpLCBlbnRyaWVzLnNpemUoKSwgc2l6ZW9mKE1hcEVudHJ5KiksIGNvbXBh
cmVFbnRyaWVzKTsKKyAgICAgICAgcXNvcnQoZW50cmllcy5kYXRhKCksIGVudHJpZXMuc2l6ZSgp
LCBzaXplb2YoTWFwRW50cnkqKSwgY29tcGFyZUVudHJpZXMpOwogCiAgICAgICAgIC8vIEl0ZXJh
dGUgb3ZlciB0aGUgY2hpbGRyZW4gaW4gc2FtcGxlLWZyZXF1ZW5jeSBvcmRlci4KICAgICAgICAg
Zm9yIChzaXplX3QgZSA9IDA7IGUgPCBlbnRyaWVzLnNpemUoKTsgKytlKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCmluZGV4IGUzYTNhOTMyY2U3ZWQ3MzhmMTk4NmIyYmYy
Yjc0M2UwNDIzYTNiMjUuLmQyNjhlNTllMTJiYjRlODM2OGNlMzkyMDY4NzhhYzgxNjJlM2I0MmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCkBAIC0yMjMsNyArMjIzLDcg
QEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAg
ICBpZiAoY2hhckNsYXNzLT5tX3Jhbmdlcy5zaXplKCkpIHsKICAgICAgICAgICAgIHVuc2lnbmVk
IG1hdGNoSW5kZXggPSAwOwogICAgICAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7Ci0gICAgICAg
ICAgICBtYXRjaENoYXJhY3RlckNsYXNzUmFuZ2UoY2hhcmFjdGVyLCBmYWlsdXJlcywgbWF0Y2hE
ZXN0LCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLmJlZ2luKCksIGNoYXJDbGFzcy0+bV9yYW5nZXMuc2l6
ZSgpLCAmbWF0Y2hJbmRleCwgY2hhckNsYXNzLT5tX21hdGNoZXMuYmVnaW4oKSwgY2hhckNsYXNz
LT5tX21hdGNoZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3NSYW5n
ZShjaGFyYWN0ZXIsIGZhaWx1cmVzLCBtYXRjaERlc3QsIGNoYXJDbGFzcy0+bV9yYW5nZXMuZGF0
YSgpLCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUoKSwgJm1hdGNoSW5kZXgsIGNoYXJDbGFzcy0+
bV9tYXRjaGVzLmRhdGEoKSwgY2hhckNsYXNzLT5tX21hdGNoZXMuc2l6ZSgpKTsKICAgICAgICAg
ICAgIHdoaWxlIChtYXRjaEluZGV4IDwgY2hhckNsYXNzLT5tX21hdGNoZXMuc2l6ZSgpKQogICAg
ICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNoYXJhY3Rlciwg
SW1tMzIoKHVuc2lnbmVkIHNob3J0KWNoYXJDbGFzcy0+bV9tYXRjaGVzW21hdGNoSW5kZXgrK10p
KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGZmNDhk
YTBjYzUzMTI4MmExMmQwZDUxMDZjNjYwMzVmMTU1ZDkxNTYuLjFiYTVjZmQ3ODk4ZmQ5ZTk2NTk1
YmZkNWE0Nzc0ZmVmMWViZjRmODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtOTgsNiArOTgsNyBAQAogCQlBNzQ4NzQ1MjE3QTBCREFFMDBGQTA0Q0IgLyog
U2l4Q2hhcmFjdGVySGFzaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNzQ4NzQ0RjE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5j
cHAgKi87IH07CiAJCUE3NDg3NDUzMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNo
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzQ4NzQ1
MDE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5oICovOyB9OwogCQlBNzQ4NzQ1
NDE3QTBCREFFMDBGQTA0Q0IgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzQ4NzQ1MTE3QTBCREFFMDBGQTA0
Q0IgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0LmggKi87IH07CisJCUE3REMyRjA0MUEwOUEyMkQw
MDcyRjRFMyAvKiBJbmRleGVkSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3REMyRjAzMUEwOTlERTMwMDcyRjRFMyAvKiBJbmRleGVkSXRl
cmF0b3IuaCAqLzsgfTsKIAkJQTdFNjQzQzYxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXByZXNzaW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTY0
M0M0MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21wcmVzc2lvbi5jcHAgKi87IH07CiAJCUE3RTY0M0M3
MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21wcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdFNjQzQzUxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXBy
ZXNzaW9uLmggKi87IH07CiAJCUE4NzZEQkQ4MTUxODE2RTUwMERBREI5NSAvKiBQbGF0Zm9ybS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3NkRCRDcx
NTE4MTZFNTAwREFEQjk1IC8qIFBsYXRmb3JtLmggKi87IH07CkBAIC0zODksNiArMzkwLDcgQEAK
IAkJQTc0ODc0NEYxN0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l4Q2hhcmFjdGVySGFzaC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NDg3NDUwMTdBMEJEQUUwMEZBMDRDQiAvKiBT
aXhDaGFyYWN0ZXJIYXNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpeENo
YXJhY3Rlckhhc2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc0ODc0NTExN0Ew
QkRBRTAwRkEwNENCIC8qIFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdHJpbmdIYXNoRHVtcENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTdEQzJGMDMxQTA5OURFMzAwNzJGNEUzIC8qIEluZGV4ZWRJdGVyYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGVkSXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTdFNjQzQzQxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXByZXNzaW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXByZXNzaW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdFNjQzQzUxN0M1NDIzQjAwM0JCMTZCIC8qIENv
bXByZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXByZXNzaW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4NzZEQkQ3MTUxODE2RTUwMERBREI5
NSAvKiBQbGF0Zm9ybS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9y
bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODkyLDYgKzg5NCw3IEBACiAJCQkJ
OTc0Q0ZDOEQxNkE0RjMyNzAwNkQ1NDA0IC8qIFdlYWtQdHIuaCAqLywKIAkJCQlBOEE0NzM3QTE1
MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5jcHAgKi8sCiAJCQkJQThBNDczN0IxNTFB
ODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCAqLywKKwkJCQlBN0RDMkYwMzFBMDk5REUz
MDA3MkY0RTMgLyogSW5kZXhlZEl0ZXJhdG9yLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHd0ZjsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMDY1LDYgKzEwNjgsNyBAQAogCQkJCUE4
QTQ3M0FEMTUxQTgyNUIwMDQxMjNGRiAvKiBjYWNoZWQtcG93ZXJzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzQ1RTE1MUE4MjVCMDA0MTIzRkYgLyogQ2hhcmFjdGVyTmFtZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3Mzk0MTUxQTgyNUIwMDQxMjNGRiAvKiBDaGVja2VkQXJpdGhtZXRp
Yy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTdEQzJGMDQxQTA5QTIyRDAwNzJGNEUzIC8qIEluZGV4
ZWRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOTUxNTFBODI1QjAwNDEyM0ZG
IC8qIENoZWNrZWRCb29sZWFuLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1RjE1MUE4MjVC
MDA0MTIzRkYgLyogQ29sbGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzRFREU2MTY5NjE0
OTYwMEY2NTA0MSAvKiBDb21tYVByaW50ZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvSW5kZXhlZEl0ZXJhdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9JbmRleGVk
SXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZTZlMTlhYjBlZGRhYWYwMGQzN2EyNzcyNzEyMjJhNmRi
ZmNlZjUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvSW5kZXhlZEl0ZXJhdG9y
LmgKQEAgLTAsMCArMSw0ODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdURl9JbmRleGVkSXRlcmF0b3JfaAorI2RlZmluZSBXVEZfSW5k
ZXhlZEl0ZXJhdG9yX2gKKworbmFtZXNwYWNlIFdURiB7CisKKyNkZWZpbmUgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVyhjaGVjaykgZG8ge1wKKyAgICBpZiAoIShjaGVjaykpXAorICAgICAgICBP
dmVyZmxvd0hhbmRsZXI6Om92ZXJmbG93ZWQoKTtcCisgICAgfSB3aGlsZSAoMCkKKwordGVtcGxh
dGUgPHR5cGVuYW1lIFZlY3RvclR5cGUsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlciA9IENyYXNoT25PdmVyZmxvdz4gc3RydWN0IEluZGV4ZWRJdGVyYXRvciB7CisgICAgdHlw
ZWRlZiBzdHJ1Y3QgSW5kZXhlZEl0ZXJhdG9yPGNvbnN0IFZlY3RvclR5cGUsIGNvbnN0IFQsIE92
ZXJmbG93SGFuZGxlcj4gY29uc3RfaXRlcmF0b3I7CisKKyAgICB0eXBlZGVmIFQgVmFsdWVUeXBl
OworICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKKyAgICB0eXBlZGVmIFZh
bHVlVHlwZSB2YWx1ZV90eXBlOworICAgIHR5cGVkZWYgVmFsdWVUeXBlKiBwb2ludGVyOworICAg
IHR5cGVkZWYgVmFsdWVUeXBlJiByZWZlcmVuY2U7CisgICAgdHlwZWRlZiBzdGQ6OmJpZGlyZWN0
aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgSW5kZXhlZEl0ZXJh
dG9yKCkKKyAgICAgICAgOiBtX3ZlY3RvcihudWxscHRyKQorICAgICAgICAsIG1fcG9zaXRpb24o
MCkKKyAgICB7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yKFZlY3RvclR5cGUmIHZlY3Rv
ciwgVmFsdWVUeXBlKiBwb3NpdGlvbikKKyAgICAgICAgOiBtX3ZlY3RvcigmdmVjdG9yKQorICAg
ICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24gLSB2ZWN0b3IuZGF0YSgpKQorICAgIHsKKyAgICAg
ICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uIDw9IHZlY3Rvci5zaXplKCkp
OworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvcihjb25zdCBJbmRleGVkSXRlcmF0b3ImIG90
aGVyKQorICAgICAgICA6IG1fdmVjdG9yKG90aGVyLm1fdmVjdG9yKQorICAgICAgICAsIG1fcG9z
aXRpb24ob3RoZXIubV9wb3NpdGlvbikKKyAgICB7CisgICAgfQorCisgICAgVmFsdWVUeXBlKiBv
cGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJm1fdmVjdG9yLT5hdChtX3Bvc2l0aW9uKTsgfQor
ICAgIFZhbHVlVHlwZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3ItPmF0KG1f
cG9zaXRpb24pOyB9CisgICAgVmFsdWVUeXBlKiBnZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
SU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uIDw9IG1fdmVjdG9yLT5zaXplKCkp
OworICAgICAgICByZXR1cm4gbV92ZWN0b3ItPmRhdGEoKSArIG1fcG9zaXRpb247CisgICAgfQor
CisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICB7CisgICAgICAgIElOREVY
RURfSVRFUkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA8IG1fdmVjdG9yLT5zaXplKCkpOworICAg
ICAgICBtX3Bvc2l0aW9uKys7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJ
bmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpCisgICAgeworICAgICAgICBJTkRFWEVEX0lU
RVJBVE9SX09WRVJGTE9XKG1fcG9zaXRpb24gPCBtX3ZlY3Rvci0+c2l6ZSgpKTsKKyAgICAgICAg
SW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAgIG1fcG9zaXRpb24rKzsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJh
dG9yLS0oKQorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0
aW9uID4gMCk7CisgICAgICAgIG1fcG9zaXRpb24tLTsKKyAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0tKGludCkKKyAgICB7CisgICAg
ICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA+IDApOworICAgICAgICBJ
bmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgbV9wb3NpdGlvbi0tOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVy
YXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIg
aW50ZWdlciB0eXBlcy4KKyAgICB0eXBlZGVmIHNpemVfdCAoSW5kZXhlZEl0ZXJhdG9yOjoqVW5z
cGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmVjdG9yID8gJkluZGV4ZWRJdGVyYXRvcjo6bV9wb3NpdGlvbiA6IG51
bGxwdHI7IH0KKworCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvcis9KGxvbmcgaW5jcmVt
ZW50KQorICAgIHsKKyAgICAgICAgaWYgKGluY3JlbWVudCA8IDApIHsKKyAgICAgICAgICAgIElO
REVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaW5jcmVtZW50ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50MzJfdD46Om1heCgpKTsKKyAgICAgICAgICAgIHJldHVybiAoKnRoaXMpIC09IHN0YXRpY19j
YXN0PHNpemVfdD4oLWluY3JlbWVudCk7CisgICAgICAgIH0KKyAgICAgICAgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVygoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIG1fcG9z
aXRpb24pID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmNyZW1lbnQpKTsKKyAgICAgICAgbV9wb3Np
dGlvbiArPSBpbmNyZW1lbnQ7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9w
b3NpdGlvbiA8PSBtX3ZlY3Rvci0+c2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAg
IH0KKworICAgIEluZGV4ZWRJdGVyYXRvciYgb3BlcmF0b3ItPShsb25nIGRlY3JlbWVudCkKKyAg
ICB7CisgICAgICAgIGlmIChkZWNyZW1lbnQgPCAwKSB7CisgICAgICAgICAgICBJTkRFWEVEX0lU
RVJBVE9SX09WRVJGTE9XKGRlY3JlbWVudCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+
OjptYXgoKSk7CisgICAgICAgICAgICByZXR1cm4gKCp0aGlzKSArPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KC1kZWNyZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9P
VkVSRkxPVyhzdGF0aWNfY2FzdDxzaXplX3Q+KGRlY3JlbWVudCkgPD0gbV9wb3NpdGlvbik7Cisg
ICAgICAgIG1fcG9zaXRpb24gLT0gZGVjcmVtZW50OworICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvcis9KHNpemVfdCBpbmNyZW1lbnQp
CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKChzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpIC0gbV9wb3NpdGlvbikgPiBpbmNyZW1lbnQpOworICAgICAg
ICBtX3Bvc2l0aW9uICs9IGluY3JlbWVudDsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVS
RkxPVyhtX3Bvc2l0aW9uIDw9IG1fdmVjdG9yLT5zaXplKCkpOworICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvci09KHNpemVfdCBkZWNy
ZW1lbnQpCisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGRlY3JlbWVu
dCA8PSBtX3Bvc2l0aW9uKTsKKyAgICAgICAgbV9wb3NpdGlvbiAtPSBkZWNyZW1lbnQ7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJhdG9y
Kz0oaW50MzJfdCBpbmNyZW1lbnQpCisgICAgeworICAgICAgICBpZiAoaW5jcmVtZW50IDwgMCkg
eworICAgICAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpbmNyZW1lbnQgIT0gc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpOworICAgICAgICAgICAgcmV0dXJuICgq
dGhpcykgLT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtaW5jcmVtZW50KTsKKyAgICAgICAgfQorICAg
ICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVf
dD46Om1heCgpIC0gbV9wb3NpdGlvbikgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluY3JlbWVudCkp
OworICAgICAgICBtX3Bvc2l0aW9uICs9IGluY3JlbWVudDsKKyAgICAgICAgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uIDw9IG1fdmVjdG9yLT5zaXplKCkpOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvci09KGlu
dDMyX3QgZGVjcmVtZW50KQorICAgIHsKKyAgICAgICAgaWYgKGRlY3JlbWVudCA8IDApIHsKKyAg
ICAgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coZGVjcmVtZW50ICE9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKTsKKyAgICAgICAgICAgIHJldHVybiAoKnRoaXMp
ICs9IHN0YXRpY19jYXN0PHNpemVfdD4oLWRlY3JlbWVudCk7CisgICAgICAgIH0KKworICAgICAg
ICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKHN0YXRpY19jYXN0PHNpemVfdD4oZGVjcmVtZW50
KSA8PSBtX3Bvc2l0aW9uKTsKKyAgICAgICAgbV9wb3NpdGlvbiAtPSBkZWNyZW1lbnQ7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3Ir
KHNpemVfdCBpbmNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3Ig
cmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBpbmNyZW1lbnQ7CisgICAg
fQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLShzaXplX3QgZGVjcmVtZW50KSBjb25z
dAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAg
IHJldHVybiByZXN1bHQgLT0gZGVjcmVtZW50OworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRv
ciBvcGVyYXRvcisoaW50MzJfdCBpbmNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRl
eGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBpbmNy
ZW1lbnQ7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLShpbnQzMl90IGRl
Y3JlbWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRo
aXMpOworICAgICAgICByZXR1cm4gcmVzdWx0IC09IGRlY3JlbWVudDsKKyAgICB9CisKKyAgICBJ
bmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKHVuc2lnbmVkIGxvbmcgbG9uZyBpbmNyZW1lbnQpIGNv
bnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGluY3JlbWVudCk7CisgICAg
fQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLSh1bnNpZ25lZCBsb25nIGxvbmcgZGVj
cmVtZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhp
cyk7CisgICAgICAgIHJldHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihkZWNyZW1l
bnQpOworICAgIH0KKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKGxvbmcgbG9uZyBpbmNy
ZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlz
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGluY3JlbWVu
dCk7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLShsb25nIGxvbmcgZGVj
cmVtZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhp
cyk7CisgICAgICAgIHJldHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihkZWNyZW1l
bnQpOworICAgIH0KKworI2lmIF9fU0laRU9GX1NJWkVfVF9fICE9IF9fU0laRU9GX0lOVF9fCisg
ICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yKyh1bnNpZ25lZCBpbmNyZW1lbnQpIGNvbnN0Cisg
ICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGluY3JlbWVudCk7CisgICAgfQorCisg
ICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLSh1bnNpZ25lZCBkZWNyZW1lbnQpIGNvbnN0Cisg
ICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlY3JlbWVudCk7CisgICAgfQorI2Vu
ZGlmCisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKGxvbmcgaW5jcmVtZW50KSBjb25z
dAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAg
IHJldHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmNyZW1lbnQpOworICAgIH0K
KworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0obG9uZyBkZWNyZW1lbnQpIGNvbnN0Cisg
ICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlY3JlbWVudCk7CisgICAgfQorCisg
ICAgcHRyZGlmZl90IG9wZXJhdG9yLShjb25zdCBjb25zdF9pdGVyYXRvciYgcmlnaHQpIGNvbnN0
CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1fdmVjdG9yID09IHJp
Z2h0Lm1fdmVjdG9yKTsKKyAgICAgICAgcmV0dXJuIG1fcG9zaXRpb24gLSByaWdodC5tX3Bvc2l0
aW9uOworICAgIH0KKworICAgIHB0cmRpZmZfdCBvcGVyYXRvci0oY29uc3QgVmFsdWVUeXBlKiBy
aWdodCkgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cocmln
aHQgPj0gbV92ZWN0b3ItPmRhdGEoKSk7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZM
T1cobV9wb3NpdGlvbiA+PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHJpZ2h0IC0gbV92ZWN0b3ItPmRh
dGEoKSkpOworICAgICAgICByZXR1cm4gZ2V0KCkgLSByaWdodDsKKyAgICB9CisKKyAgICB2b2lk
IG9wZXJhdG9yPShjb25zdCBJbmRleGVkSXRlcmF0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAg
bV92ZWN0b3IgPSBvdGhlci5tX3ZlY3RvcjsKKyAgICAgICAgbV9wb3NpdGlvbiA9IG90aGVyLm1f
cG9zaXRpb247CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZM
T1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA9
PSBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
Y29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVu
c2FmZUdldCgpICE9IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhF
RF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0
dXJuIHVuc2FmZUdldCgpID09IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVu
c2FmZUdldCgpICE9IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZh
bHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09W
RVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5zYWZlR2V0
KCkgPCBvdGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgVmFsdWVUeXBl
KiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1co
aXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA8PSBv
dGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBjb25zdF9pdGVyYXRvciYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlz
U2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPCBvdGhl
ci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgY29uc3Rf
aXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9P
VkVSRkxPVyhzYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQo
KSA8PSBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPihjb25z
dCBJbmRleGVkSXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9J
VEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJu
IHVuc2FmZUdldCgpID4gb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAg
ICAgIHJldHVybiB1bnNhZmVHZXQoKSA+PSBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAg
ICBib29sIG9wZXJhdG9yPihjb25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsK
KyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpID4gb3RoZXI7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvcj49KGNvbnN0IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJ
TkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAg
ICByZXR1cm4gdW5zYWZlR2V0KCkgPj0gb3RoZXI7CisgICAgfQorCisgICAgb3BlcmF0b3IgY29u
c3RfaXRlcmF0b3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3RfaXRlcmF0b3IgcmVzdWx0
OworICAgICAgICByZXN1bHQubV92ZWN0b3IgPSBtX3ZlY3RvcjsKKyAgICAgICAgcmVzdWx0Lm1f
cG9zaXRpb24gPSBtX3Bvc2l0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIFZlY3RvclR5cGUqIG1fdmVjdG9yOworICAgIHNpemVfdCBtX3Bvc2l0aW9uOworCisgICAg
Ym9vbCBpc1NhZmVUb0NvbXBhcmUoY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiAhbV92ZWN0b3IgfHwgIW90aGVyLm1fdmVj
dG9yOworICAgIH0KKworICAgIGJvb2wgaXNTYWZlVG9Db21wYXJlKGNvbnN0IFZhbHVlVHlwZSog
dmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGlmICghbV92ZWN0b3IpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgc2l6ZV90IGRlbHRhID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pih2YWx1ZSAtIG1f
dmVjdG9yLT5kYXRhKCkpOworICAgICAgICByZXR1cm4gZGVsdGEgPD0gbV92ZWN0b3ItPnNpemUo
KTsKKyAgICB9CisKKyAgICBWYWx1ZVR5cGUqIHVuc2FmZUdldCgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoIW1fdmVjdG9yKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiBnZXQoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgdHlwZW5hbWUg
SW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPjo6VmFsdWVUeXBl
KiBnZXRQdHIoSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiBw
KQoreworICAgIHJldHVybiBwLmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgcHRyZGlm
Zl90IG9wZXJhdG9yLShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRv
cjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIElOREVYRURf
SVRFUkFUT1JfT1ZFUkZMT1cobGVmdCA+PSByaWdodC5tX3ZlY3Rvci0+ZGF0YSgpKTsKKyAgICBJ
TkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGxlZnQgPD0gcmlnaHQubV92ZWN0b3ItPmVuZCgpLmdl
dCgpKTsKKyAgICByZXR1cm4gbGVmdCAtIHJpZ2h0LmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Citp
bmxpbmUgcHRyZGlmZl90IG9wZXJhdG9yLShWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJ
dGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIElO
REVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobGVmdCA+PSByaWdodC5tX3ZlY3Rvci0+ZGF0YSgpKTsK
KyAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGxlZnQgPD0gcmlnaHQubV92ZWN0b3ItPmVu
ZCgpLmdldCgpKTsKKyAgICByZXR1cm4gbGVmdCAtIHJpZ2h0LmdldCgpOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXI+CitpbmxpbmUgcHRyZGlmZl90IG9wZXJhdG9yLShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNv
bnN0IEluZGV4ZWRJdGVyYXRvcjxjb25zdCBULCBjb25zdCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFu
ZGxlcj4mIHJpZ2h0KQoreworICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobGVmdCA+PSBy
aWdodC5tX3ZlY3Rvci0+ZGF0YSgpKTsKKyAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGxl
ZnQgPD0gcmlnaHQubV92ZWN0b3ItPmVuZCgpLmdldCgpKTsKKyAgICByZXR1cm4gbGVmdCAtIHJp
Z2h0LmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBl
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFZhbHVl
VHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dI
YW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID09IGxlZnQ7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25z
dCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkK
K3sKKyAgICByZXR1cm4gcmlnaHQgPT0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJv
b2wgb3BlcmF0b3IhPShWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBW
YWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCAh
PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZh
bHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZs
b3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ICE9IGxlZnQ7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPD0oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJ
bmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sK
KyAgICByZXR1cm4gcmlnaHQgPj0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wg
b3BlcmF0b3I8PShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxU
LCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdo
dCA+PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBl
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KFZhbHVl
VHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dI
YW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0IDw9IGxlZnQ7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25z
dCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkK
K3sKKyAgICByZXR1cm4gcmlnaHQgPD0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJv
b2wgb3BlcmF0b3I8KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZh
bHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID4g
bGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZhbHVl
VHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dI
YW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID4gbGVmdDsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I+KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhl
ZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAg
cmV0dXJuIHJpZ2h0IDwgbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0
b3I+KGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVl
VHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0IDwgbGVm
dDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFZlY3RvclR5cGUsIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4gc3RydWN0IEluZGV4ZWRJdGVyYXRvclNlbGVjdG9yIHsKKyAgICB0eXBlZGVmIHR5
cGVuYW1lIFZlY3RvclR5cGU6OlZhbHVlVHlwZSBWYWx1ZVR5cGU7CisgICAgdHlwZWRlZiBJbmRl
eGVkSXRlcmF0b3I8VmVjdG9yVHlwZSwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+IGl0ZXJh
dG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3I6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0
X2l0ZXJhdG9yOworICAgIHN0YXRpYyBpdGVyYXRvciBtYWtlSXRlcmF0b3IoVmVjdG9yVHlwZSYg
dmVjdG9yLCBWYWx1ZVR5cGUqIHApIHsgcmV0dXJuIGl0ZXJhdG9yKHZlY3RvciwgcCk7IH0KKyAg
ICBzdGF0aWMgY29uc3RfaXRlcmF0b3IgbWFrZUNvbnN0SXRlcmF0b3IoY29uc3QgVmVjdG9yVHlw
ZSYgdmVjdG9yLCBjb25zdCBWYWx1ZVR5cGUqIHApIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHZl
Y3RvciwgcCk7IH0KK307CisKKyN1bmRlZiBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XCisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaCBi
L1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCmluZGV4IGE1NWQ3YWVlYWI4NGI5YzQ5
NTE5NmU4ZTIzMGExZGMxNzg1MTkzYWIuLjgxMWU5ZmZjZWEzMzdhNmM3ZDhiMjkxNjMwZTJhZmRm
OGU1NjYzOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCkBAIC04Myw3ICs4Myw3IEBAIHB1
YmxpYzoKICAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5yZWZDb3VudCA9IDE7
CiAgICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+bGVuZ3RoID0gb3RoZXIuc2l6
ZSgpOwogICAgICAgICBBU1NFUlQoSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5sZW5ndGgg
PT0gb3RoZXIuc2l6ZSgpKTsKLSAgICAgICAgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD46OnVuaW5p
dGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpLCBtX2RhdGEpOworICAgICAg
ICBWZWN0b3JUeXBlT3BlcmF0aW9uczxUPjo6dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90aGVy
LmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuZW5kKCkpLCBtX2RhdGEpOwogICAgIH0KICAgICAKICAg
ICBSZWZDb3VudGVkQXJyYXkmIG9wZXJhdG9yPShjb25zdCBSZWZDb3VudGVkQXJyYXkmIG90aGVy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9W
ZWN0b3IuaAppbmRleCAyNzQ1NjhhNjkxYzY0YTAzNDIzYTRmMmI3MzQ4NzdlNjIwNzJkOTFlLi40
YWFhNDhhYzI0YTQyZmU5OWE4MDhlYTdiMWVkMmI4ZDA4MjJjMDA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9WZWN0b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaApAQCAtMjgs
NiArMjgsOCBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0
aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvR2V0
UHRyLmg+CisjaW5jbHVkZSA8d3RmL0luZGV4ZWRJdGVyYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9N
YWxsb2NQdHIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CkBAIC01NTQsMTQgKzU1NiwxNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IDAsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciA9
IENyYQogY2xhc3MgVmVjdG9yIDogcHJpdmF0ZSBWZWN0b3JCdWZmZXI8VCwgaW5saW5lQ2FwYWNp
dHk+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHByaXZhdGU6CisKICAgICB0eXBl
ZGVmIFZlY3RvckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eT4gQmFzZTsKICAgICB0eXBlZGVmIFZl
Y3RvclR5cGVPcGVyYXRpb25zPFQ+IFR5cGVPcGVyYXRpb25zOworICAgIHR5cGVkZWYgSW5kZXhl
ZEl0ZXJhdG9yU2VsZWN0b3I8VmVjdG9yLCBPdmVyZmxvd0hhbmRsZXI+IEl0ZXJhdG9yU2VsZWN0
b3I7CiAKIHB1YmxpYzoKICAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOwogCi0gICAgdHlwZWRlZiBU
KiBpdGVyYXRvcjsKLSAgICB0eXBlZGVmIGNvbnN0IFQqIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5
cGVkZWYgdHlwZW5hbWUgSXRlcmF0b3JTZWxlY3Rvcjo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAg
dHlwZWRlZiB0eXBlbmFtZSBJdGVyYXRvclNlbGVjdG9yOjpjb25zdF9pdGVyYXRvciBjb25zdF9p
dGVyYXRvcjsKKwogICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiBy
ZXZlcnNlX2l0ZXJhdG9yOwogICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0
X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogCkBAIC01NzQsMTQgKzU3OSwxNCBA
QCBwdWJsaWM6CiAgICAgICAgIDogQmFzZShzaXplLCBzaXplKQogICAgIHsKICAgICAgICAgaWYg
KGJlZ2luKCkpCi0gICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShiZWdpbigp
LCBlbmQoKSk7CisgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShnZXRQdHIo
YmVnaW4oKSksIGdldFB0cihlbmQoKSkpOwogICAgIH0KIAogICAgIFZlY3Rvcih1bnNpZ25lZCBz
aXplLCBjb25zdCBUJiB2YWwpCiAgICAgICAgIDogQmFzZShzaXplLCBzaXplKQogICAgIHsKICAg
ICAgICAgaWYgKGJlZ2luKCkpCi0gICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFs
aXplZEZpbGwoYmVnaW4oKSwgZW5kKCksIHZhbCk7CisgICAgICAgICAgICBUeXBlT3BlcmF0aW9u
czo6dW5pbml0aWFsaXplZEZpbGwoZ2V0UHRyKGJlZ2luKCkpLCBnZXRQdHIoZW5kKCkpLCB2YWwp
OwogICAgIH0KIAogICAgIFZlY3RvcihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4gaW5pdGlhbGl6
ZXJMaXN0KQpAQCAtNjQ1LDEwICs2NTAsMTAgQEAgcHVibGljOgogICAgIGNvbnN0IFQqIGRhdGEo
KSBjb25zdCB7IHJldHVybiBCYXNlOjpidWZmZXIoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qg
ZGF0YU1lbW9yeU9mZnNldCgpIHsgcmV0dXJuIEJhc2U6OmJ1ZmZlck1lbW9yeU9mZnNldCgpOyB9
CiAKLSAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGRhdGEoKTsgfQotICAgIGl0ZXJhdG9y
IGVuZCgpIHsgcmV0dXJuIGJlZ2luKCkgKyBtX3NpemU7IH0KLSAgICBjb25zdF9pdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIGRhdGEoKTsgfQotICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgKyBtX3NpemU7IH0KKyAgICBpdGVyYXRvciBiZWdpbigp
IHsgcmV0dXJuIEl0ZXJhdG9yU2VsZWN0b3I6Om1ha2VJdGVyYXRvcigqdGhpcywgZGF0YSgpKTsg
fQorICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGJlZ2luKCkgKyBzaXplKCk7IH0KKyAgICBj
b25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIEl0ZXJhdG9yU2VsZWN0b3I6Om1h
a2VDb25zdEl0ZXJhdG9yKCp0aGlzLCBkYXRhKCkpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSArIHNpemUoKTsgfQogCiAgICAgcmV2ZXJzZV9pdGVy
YXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogICAgIHJl
dmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7
IH0KQEAgLTY4Myw2ICs2ODgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKCkgeyBzaHJp
bmtDYXBhY2l0eSgwKTsgfQogCisgICAgdm9pZCBhcHBlbmQoY29uc3RfaXRlcmF0b3IsIHVuc2ln
bmVkKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIGFwcGVuZChjb25zdCBVKiwgdW5z
aWduZWQpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKFUmJik7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCB1bmNoZWNrZWRBcHBlbmQoVSYmIHZhbCk7CkBAIC03
NDYsNyArNzUyLDcgQEAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+
OjpWZWN0b3IoY29uc3QgVmVjdG9yJiBvdGhlcikKICAgICA6IEJhc2Uob3RoZXIuY2FwYWNpdHko
KSwgb3RoZXIuc2l6ZSgpKQogewogICAgIGlmIChiZWdpbigpKQotICAgICAgICBUeXBlT3BlcmF0
aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCksIGJlZ2lu
KCkpOworICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90
aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyPgpAQCAtNzU1LDcgKzc2MSw3IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6VmVjdG9yKGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFj
aXR5CiAgICAgOiBCYXNlKG90aGVyLmNhcGFjaXR5KCksIG90aGVyLnNpemUoKSkKIHsKICAgICBp
ZiAoYmVnaW4oKSkKLSAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90
aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpLCBiZWdpbigpKTsKKyAgICAgICAgVHlwZU9wZXJhdGlv
bnM6OnVuaW5pdGlhbGl6ZWRDb3B5KGdldFB0cihvdGhlci5iZWdpbigpKSwgZ2V0UHRyKG90aGVy
LmVuZCgpKSwgZ2V0UHRyKGJlZ2luKCkpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5z
aWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KQEAgLTc3Miw4
ICs3NzgsOCBAQCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj4mIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYQogICAgICAgICBBU1NFUlQoYmVnaW4o
KSk7CiAgICAgfQogICAgIAotICAgIHN0ZDo6Y29weShvdGhlci5iZWdpbigpLCBvdGhlci5iZWdp
bigpICsgc2l6ZSgpLCBiZWdpbigpKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXpl
ZENvcHkob3RoZXIuYmVnaW4oKSArIHNpemUoKSwgb3RoZXIuZW5kKCksIGVuZCgpKTsKKyAgICBz
dGQ6OmNvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuYmVnaW4oKSArIHNp
emUoKSksIGdldFB0cihiZWdpbigpKSk7CisgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6
ZWRDb3B5KGdldFB0cihvdGhlci5iZWdpbigpICsgc2l6ZSgpKSwgZ2V0UHRyKG90aGVyLmVuZCgp
KSwgZ2V0UHRyKGVuZCgpKSk7CiAgICAgbV9zaXplID0gb3RoZXIuc2l6ZSgpOwogCiAgICAgcmV0
dXJuICp0aGlzOwpAQCAtNzk3LDkgKzgwMyw5IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyPiYgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhCiAg
ICAgICAgIHJlc2VydmVDYXBhY2l0eShvdGhlci5zaXplKCkpOwogICAgICAgICBBU1NFUlQoYmVn
aW4oKSk7CiAgICAgfQotICAgIAotICAgIHN0ZDo6Y29weShvdGhlci5iZWdpbigpLCBvdGhlci5i
ZWdpbigpICsgc2l6ZSgpLCBiZWdpbigpKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFs
aXplZENvcHkob3RoZXIuYmVnaW4oKSArIHNpemUoKSwgb3RoZXIuZW5kKCksIGVuZCgpKTsKKwor
ICAgIHN0ZDo6Y29weShnZXRQdHIob3RoZXIuYmVnaW4oKSksIGdldFB0cihvdGhlci5iZWdpbigp
ICsgc2l6ZSgpKSwgZ2V0UHRyKGJlZ2luKCkpKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0
aWFsaXplZENvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkgKyBzaXplKCkpLCBnZXRQdHIob3RoZXIu
ZW5kKCkpLCBnZXRQdHIoZW5kKCkpKTsKICAgICBtX3NpemUgPSBvdGhlci5zaXplKCk7CiAKICAg
ICByZXR1cm4gKnRoaXM7CkBAIC04NTksOCArODY1LDggQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmZpbGwoY29uc3QgVCYgdmFsLCB1bnNpZ25lZCBu
ZXcKICAgICAgICAgQVNTRVJUKGJlZ2luKCkpOwogICAgIH0KICAgICAKLSAgICBzdGQ6OmZpbGwo
YmVnaW4oKSwgZW5kKCksIHZhbCk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRG
aWxsKGVuZCgpLCBiZWdpbigpICsgbmV3U2l6ZSwgdmFsKTsKKyAgICBzdGQ6OmZpbGwoZ2V0UHRy
KGJlZ2luKCkpLCBnZXRQdHIoZW5kKCkpLCB2YWwpOworICAgIFR5cGVPcGVyYXRpb25zOjp1bmlu
aXRpYWxpemVkRmlsbChnZXRQdHIoZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkgKyBuZXdTaXplLCB2
YWwpOwogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiB9CiAKQEAgLTg4MSwxMyArODg3LDEzIEBAIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpleHBhbmRDYXBh
Y2l0eSh1bnNpZ25lZCBuZXdNaW5DCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogVCogVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpleHBhbmRDYXBhY2l0eSh1bnNpZ25lZCBuZXdN
aW5DYXBhY2l0eSwgVCogcHRyKQogewotICAgIGlmIChwdHIgPCBiZWdpbigpIHx8IHB0ciA+PSBl
bmQoKSkgeworICAgIGlmIChwdHIgPCBnZXRQdHIoYmVnaW4oKSkgfHwgcHRyID49IGdldFB0cihl
bmQoKSkpIHsKICAgICAgICAgZXhwYW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpOwogICAgICAg
ICByZXR1cm4gcHRyOwogICAgIH0KLSAgICB1bnNpZ25lZCBpbmRleCA9IHB0ciAtIGJlZ2luKCk7
CisgICAgdW5zaWduZWQgaW5kZXggPSBwdHIgLSBnZXRQdHIoYmVnaW4oKSk7CiAgICAgZXhwYW5k
Q2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpOwotICAgIHJldHVybiBiZWdpbigpICsgaW5kZXg7Cisg
ICAgcmV0dXJuIGdldFB0cihiZWdpbigpKSArIGluZGV4OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgpA
QCAtODk5LDE1ICs5MDUsMTUgQEAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlcj46OnRyeUV4cGFuZENhcGFjaXR5KHVuc2lnbmVkIG5ld00KIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXI+CiBjb25zdCBUKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46
OnRyeUV4cGFuZENhcGFjaXR5KHVuc2lnbmVkIG5ld01pbkNhcGFjaXR5LCBjb25zdCBUKiBwdHIp
CiB7Ci0gICAgaWYgKHB0ciA8IGJlZ2luKCkgfHwgcHRyID49IGVuZCgpKSB7CisgICAgaWYgKHB0
ciA8IGdldFB0cihiZWdpbigpKSB8fCBwdHIgPj0gZ2V0UHRyKGVuZCgpKSkgewogICAgICAgICBp
ZiAoIXRyeUV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5KSkKICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KLSAgICB1bnNpZ25lZCBpbmRleCA9IHB0
ciAtIGJlZ2luKCk7CisgICAgdW5zaWduZWQgaW5kZXggPSBwdHIgLSBnZXRQdHIoYmVnaW4oKSk7
CiAgICAgaWYgKCF0cnlFeHBhbmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0eSkpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBiZWdpbigpICsgaW5kZXg7CisgICAgcmV0dXJuIGdldFB0cihi
ZWdpbigpKSArIGluZGV4OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgpAQCAtOTIxLDEyICs5MjcsMTIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIGlubGluZSB2b2lkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVzaXplKHVuc2lnbmVkIHNp
emUpCiB7CiAgICAgaWYgKHNpemUgPD0gbV9zaXplKQotICAgICAgICBUeXBlT3BlcmF0aW9uczo6
ZGVzdHJ1Y3QoYmVnaW4oKSArIHNpemUsIGVuZCgpKTsKKyAgICAgICAgVHlwZU9wZXJhdGlvbnM6
OmRlc3RydWN0KGdldFB0cihiZWdpbigpKSArIHNpemUsIGdldFB0cihlbmQoKSkpOwogICAgIGVs
c2UgewogICAgICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgICAgICBleHBhbmRD
YXBhY2l0eShzaXplKTsKICAgICAgICAgaWYgKGJlZ2luKCkpCi0gICAgICAgICAgICBUeXBlT3Bl
cmF0aW9uczo6aW5pdGlhbGl6ZShlbmQoKSwgYmVnaW4oKSArIHNpemUpOworICAgICAgICAgICAg
VHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoZ2V0UHRyKGVuZCgpKSwgZ2V0UHRyKGJlZ2luKCkp
ICsgc2l6ZSk7CiAgICAgfQogICAgIAogICAgIG1fc2l6ZSA9IHNpemU7CkBAIC05NDMsNyArOTQ5
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlcj4KIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXI+OjpzaHJpbmsodW5zaWduZWQgc2l6ZSkKIHsKICAgICBBU1NFUlQoc2l6ZSA8
PSBtX3NpemUpOwotICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChiZWdpbigpICsgc2l6ZSwg
ZW5kKCkpOworICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChnZXRQdHIoYmVnaW4oKSkgKyBz
aXplLCBnZXRQdHIoZW5kKCkpKTsKICAgICBtX3NpemUgPSBzaXplOwogfQogCkBAIC05NTQsNyAr
OTYwLDcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46
Omdyb3codW5zaWduZWQgc2l6ZSkKICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAg
IGV4cGFuZENhcGFjaXR5KHNpemUpOwogICAgIGlmIChiZWdpbigpKQotICAgICAgICBUeXBlT3Bl
cmF0aW9uczo6aW5pdGlhbGl6ZShlbmQoKSwgYmVnaW4oKSArIHNpemUpOworICAgICAgICBUeXBl
T3BlcmF0aW9uczo6aW5pdGlhbGl6ZShnZXRQdHIoZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkgKyBz
aXplKTsKICAgICBtX3NpemUgPSBzaXplOwogfQogCkBAIC05NjMsMTEgKzk2OSwxMSBAQCB2b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVzZXJ2ZUNhcGFj
aXR5KHVuc2lnbmVkIG5ld0NhcAogewogICAgIGlmIChuZXdDYXBhY2l0eSA8PSBjYXBhY2l0eSgp
KQogICAgICAgICByZXR1cm47Ci0gICAgVCogb2xkQnVmZmVyID0gYmVnaW4oKTsKLSAgICBUKiBv
bGRFbmQgPSBlbmQoKTsKKyAgICBUKiBvbGRCdWZmZXIgPSBnZXRQdHIoYmVnaW4oKSk7CisgICAg
VCogb2xkRW5kID0gZ2V0UHRyKGVuZCgpKTsKICAgICBCYXNlOjphbGxvY2F0ZUJ1ZmZlcihuZXdD
YXBhY2l0eSk7CiAgICAgQVNTRVJUKGJlZ2luKCkpOwotICAgIFR5cGVPcGVyYXRpb25zOjptb3Zl
KG9sZEJ1ZmZlciwgb2xkRW5kLCBiZWdpbigpKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShv
bGRCdWZmZXIsIG9sZEVuZCwgZ2V0UHRyKGJlZ2luKCkpKTsKICAgICBCYXNlOjpkZWFsbG9jYXRl
QnVmZmVyKG9sZEJ1ZmZlcik7CiB9CiAKQEAgLTk3NiwxMiArOTgyLDEyIEBAIGJvb2wgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojp0cnlSZXNlcnZlQ2FwYWNpdHko
dW5zaWduZWQgbmV3CiB7CiAgICAgaWYgKG5ld0NhcGFjaXR5IDw9IGNhcGFjaXR5KCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIFQqIG9sZEJ1ZmZlciA9IGJlZ2luKCk7Ci0gICAgVCogb2xk
RW5kID0gZW5kKCk7CisgICAgVCogb2xkQnVmZmVyID0gZ2V0UHRyKGJlZ2luKCkpOworICAgIFQq
IG9sZEVuZCA9IGdldFB0cihlbmQoKSk7CiAgICAgaWYgKCFCYXNlOjp0cnlBbGxvY2F0ZUJ1ZmZl
cihuZXdDYXBhY2l0eSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBBU1NFUlQoYmVnaW4o
KSk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkp
OworICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBnZXRQdHIoYmVn
aW4oKSkpOwogICAgIEJhc2U6OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KQEAgLTEwMDQsMTcgKzEwMTAsMTcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnNocmlua0NhcGFjaXR5KHVuc2lnbmVkIG5ld0Nh
cGEKICAgICBpZiAobmV3Q2FwYWNpdHkgPCBzaXplKCkpIAogICAgICAgICBzaHJpbmsobmV3Q2Fw
YWNpdHkpOwogCi0gICAgVCogb2xkQnVmZmVyID0gYmVnaW4oKTsKKyAgICBUKiBvbGRCdWZmZXIg
PSBnZXRQdHIoYmVnaW4oKSk7CiAgICAgaWYgKG5ld0NhcGFjaXR5ID4gMCkgewogICAgICAgICBp
ZiAoQmFzZTo6c2hvdWxkUmVhbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSkpIHsKICAgICAgICAg
ICAgIEJhc2U6OnJlYWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgVCogb2xkRW5kID0gZW5kKCk7CisgICAgICAgIFQq
IG9sZEVuZCA9IGdldFB0cihlbmQoKSk7CiAgICAgICAgIEJhc2U6OmFsbG9jYXRlQnVmZmVyKG5l
d0NhcGFjaXR5KTsKLSAgICAgICAgaWYgKGJlZ2luKCkgIT0gb2xkQnVmZmVyKQotICAgICAgICAg
ICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOworICAg
ICAgICBpZiAoZ2V0UHRyKGJlZ2luKCkpICE9IG9sZEJ1ZmZlcikKKyAgICAgICAgICAgIFR5cGVP
cGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBnZXRQdHIoYmVnaW4oKSkpOwogICAg
IH0KIAogICAgIEJhc2U6OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKQEAgLTEwMzQsMTEg
KzEwNDAsMTcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
cj46OmFwcGVuZChjb25zdCBVKiBkYXRhLCB1bnNpZ25lZAogICAgIH0KICAgICBpZiAobmV3U2l6
ZSA8IG1fc2l6ZSkKICAgICAgICAgQ1JBU0goKTsKLSAgICBUKiBkZXN0ID0gZW5kKCk7CisgICAg
VCogZGVzdCA9IGdldFB0cihlbmQoKSk7CiAgICAgVmVjdG9yQ29waWVyPHN0ZDo6aXNfdHJpdmlh
bDxUPjo6dmFsdWUsIFU+Ojp1bmluaXRpYWxpemVkQ29weShkYXRhLCAmZGF0YVtkYXRhU2l6ZV0s
IGRlc3QpOwogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Cit2b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kKGNvbnN0
X2l0ZXJhdG9yIGRhdGEsIHVuc2lnbmVkIGRhdGFTaXplKQoreworICAgIGFwcGVuZChnZXRQdHIo
ZGF0YSksIGRhdGFTaXplKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUg
VT4KIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojp0cnlB
cHBlbmQoY29uc3QgVSogZGF0YSwgdW5zaWduZWQgZGF0YVNpemUpCiB7CkBAIC0xMDUxLDcgKzEw
NjMsNyBAQCBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6
dHJ5QXBwZW5kKGNvbnN0IFUqIGRhdGEsIHVuc2lnbgogICAgIH0KICAgICBpZiAobmV3U2l6ZSA8
IG1fc2l6ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFQqIGRlc3QgPSBlbmQoKTsKKyAg
ICBUKiBkZXN0ID0gZ2V0UHRyKGVuZCgpKTsKICAgICBWZWN0b3JDb3BpZXI8c3RkOjppc190cml2
aWFsPFQ+Ojp2YWx1ZSwgVT46OnVuaW5pdGlhbGl6ZWRDb3B5KGRhdGEsICZkYXRhW2RhdGFTaXpl
XSwgZGVzdCk7CiAgICAgbV9zaXplID0gbmV3U2l6ZTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEw
NjEsNyArMTA3Myw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHRlbXBsYXRlCiBBTFdBWVNfSU5MSU5FIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmQoVSYm
IHZhbHVlKQogewogICAgIGlmIChzaXplKCkgIT0gY2FwYWNpdHkoKSkgewotICAgICAgICBuZXcg
KE5vdE51bGwsIGVuZCgpKSBUKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgICAgICBuZXcg
KE5vdE51bGwsIGdldFB0cihlbmQoKSkpIFQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CiAgICAg
ICAgICsrbV9zaXplOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA3OCw3ICsxMDkwLDcg
QEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmFwcGVu
ZFNsb3dDYXNlKFUmJiB2YWx1ZSkKICAgICBwdHIgPSBleHBhbmRDYXBhY2l0eShzaXplKCkgKyAx
LCBwdHIpOwogICAgIEFTU0VSVChiZWdpbigpKTsKIAotICAgIG5ldyAoTm90TnVsbCwgZW5kKCkp
IFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKKyAgICBuZXcgKE5vdE51bGwsIGdldFB0cihlbmQo
KSkpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKICAgICArK21fc2l6ZTsKIH0KIApAQCAtMTA5
MSwxNCArMTEwMywxNCBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlcj46OnVuY2hlY2tlZEFwcGVuZChVJiYgdmFsdQogICAgIEFTU0VSVChzaXpl
KCkgPCBjYXBhY2l0eSgpKTsKIAogICAgIGF1dG8gcHRyID0gc3RkOjphZGRyZXNzb2YodmFsdWUp
OwotICAgIG5ldyAoTm90TnVsbCwgZW5kKCkpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKKyAg
ICBuZXcgKE5vdE51bGwsIGdldFB0cihlbmQoKSkpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsK
ICAgICArK21fc2l6ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUgVSwg
dW5zaWduZWQgb3RoZXJDYXBhY2l0eT4KIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kVmVjdG9yKGNvbnN0IFZlY3RvcjxVLCBvdGhl
ckNhcGFjaXR5PiYgdmFsKQogewotICAgIGFwcGVuZCh2YWwuYmVnaW4oKSwgdmFsLnNpemUoKSk7
CisgICAgYXBwZW5kKGdldFB0cih2YWwuYmVnaW4oKSksIHZhbC5zaXplKCkpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgpAQCAtMTExMiw4ICsxMTI0LDggQEAgdm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46Omluc2VydCh1bnNp
Z25lZCBwb3NpdGlvbiwgY29uc3QKICAgICB9CiAgICAgaWYgKG5ld1NpemUgPCBtX3NpemUpCiAg
ICAgICAgIENSQVNIKCk7Ci0gICAgVCogc3BvdCA9IGJlZ2luKCkgKyBwb3NpdGlvbjsKLSAgICBU
eXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGVuZCgpLCBzcG90ICsgZGF0YVNp
emUpOworICAgIFQqIHNwb3QgPSBnZXRQdHIoYmVnaW4oKSkgKyBwb3NpdGlvbjsKKyAgICBUeXBl
T3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGdldFB0cihlbmQoKSksIHNwb3QgKyBk
YXRhU2l6ZSk7CiAgICAgVmVjdG9yQ29waWVyPHN0ZDo6aXNfdHJpdmlhbDxUPjo6dmFsdWUsIFU+
Ojp1bmluaXRpYWxpemVkQ29weShkYXRhLCAmZGF0YVtkYXRhU2l6ZV0sIHNwb3QpOwogICAgIG1f
c2l6ZSA9IG5ld1NpemU7CiB9CkBAIC0xMTI5LDggKzExNDEsOCBAQCBpbmxpbmUgdm9pZCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46Omluc2VydCh1bnNpZ25lZCBw
b3NpdGlvbgogICAgICAgICBBU1NFUlQoYmVnaW4oKSk7CiAgICAgfQogCi0gICAgVCogc3BvdCA9
IGJlZ2luKCkgKyBwb3NpdGlvbjsKLSAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5n
KHNwb3QsIGVuZCgpLCBzcG90ICsgMSk7CisgICAgVCogc3BvdCA9IGdldFB0cihiZWdpbigpKSAr
IHBvc2l0aW9uOworICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCwgZ2V0
UHRyKGVuZCgpKSwgc3BvdCArIDEpOwogICAgIG5ldyAoTm90TnVsbCwgc3BvdCkgVChzdGQ6OmZv
cndhcmQ8VT4oKnB0cikpOwogICAgICsrbV9zaXplOwogfQpAQCAtMTEzOCwxNiArMTE1MCwxNiBA
QCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46
Omluc2VydCh1bnNpZ25lZCBwb3NpdGlvbgogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5h
bWUgVSwgdW5zaWduZWQgYz4KIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyPjo6aW5zZXJ0VmVjdG9yKHVuc2lnbmVkIHBvc2l0aW9uLCBjb25zdCBW
ZWN0b3I8VSwgYz4mIHZhbCkKIHsKLSAgICBpbnNlcnQocG9zaXRpb24sIHZhbC5iZWdpbigpLCB2
YWwuc2l6ZSgpKTsKKyAgICBpbnNlcnQocG9zaXRpb24sIGdldFB0cih2YWwuYmVnaW4oKSksIHZh
bC5zaXplKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUodW5zaWduZWQgcG9zaXRpb24p
CiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24gPCBzaXpl
KCkpOwotICAgIFQqIHNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247CisgICAgVCogc3BvdCA9IGdl
dFB0cihiZWdpbigpKSArIHBvc2l0aW9uOwogICAgIHNwb3QtPn5UKCk7Ci0gICAgVHlwZU9wZXJh
dGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90ICsgMSwgZW5kKCksIHNwb3QpOworICAgIFR5cGVP
cGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCArIDEsIGdldFB0cihlbmQoKSksIHNwb3Qp
OwogICAgIC0tbV9zaXplOwogfQogCkBAIC0xMTU2LDEwICsxMTY4LDEwIEBAIGlubGluZSB2b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlKHVuc2ln
bmVkIHBvc2l0aW9uCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9z
aXRpb24gPD0gc2l6ZSgpKTsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihw
b3NpdGlvbiArIGxlbmd0aCA8PSBzaXplKCkpOwotICAgIFQqIGJlZ2luU3BvdCA9IGJlZ2luKCkg
KyBwb3NpdGlvbjsKKyAgICBUKiBiZWdpblNwb3QgPSBnZXRQdHIoYmVnaW4oKSkgKyBwb3NpdGlv
bjsKICAgICBUKiBlbmRTcG90ID0gYmVnaW5TcG90ICsgbGVuZ3RoOwogICAgIFR5cGVPcGVyYXRp
b25zOjpkZXN0cnVjdChiZWdpblNwb3QsIGVuZFNwb3QpOyAKLSAgICBUeXBlT3BlcmF0aW9uczo6
bW92ZU92ZXJsYXBwaW5nKGVuZFNwb3QsIGVuZCgpLCBiZWdpblNwb3QpOworICAgIFR5cGVPcGVy
YXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoZW5kU3BvdCwgZ2V0UHRyKGVuZCgpKSwgYmVnaW5TcG90
KTsKICAgICBtX3NpemUgLT0gbGVuZ3RoOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCAwY2YwOWUxZjVlYzk4
YTg1MTQ0Y2M3MjJkMmE2Y2M0YWU0ZjkzODk4Li4zZWU4MDY4YTNhNzZhNGE0M2FjNjQzMjMyNzcy
NjQzYzE2MTQ5ZDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTE0MzcsOCArMTQzNyw4IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIGlmIChidWZmZXIuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgICAgICBjb25zdCB1aW50OF90KiBwdHIgPSBidWZmZXIuYmVnaW4oKTsKLSAg
ICAgICAgY29uc3QgdWludDhfdCogZW5kID0gYnVmZmVyLmVuZCgpOworICAgICAgICBjb25zdCB1
aW50OF90KiBwdHIgPSBnZXRQdHIoYnVmZmVyLmJlZ2luKCkpOworICAgICAgICBjb25zdCB1aW50
OF90KiBlbmQgPSBnZXRQdHIoYnVmZmVyLmVuZCgpKTsKICAgICAgICAgdWludDMyX3QgdmVyc2lv
bjsKICAgICAgICAgaWYgKCFyZWFkTGl0dGxlRW5kaWFuKHB0ciwgZW5kLCB2ZXJzaW9uKSB8fCB2
ZXJzaW9uID4gQ3VycmVudFZlcnNpb24pCiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggMmQ5Yjc5ZTEzYWJmOTYw
YTYxNGI5NmQyNzA2NjBlNWYzNWUzNDE3Zi4uZTkyZmIyZjc5MGJlNGM1YzE2NzZjNjk4YzViZTFi
YTY1ZTFhNjkxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAt
MjA3MywxMSArMjA3MywxMSBAQCBpbmxpbmUgYm9vbCBTZWFyY2hCdWZmZXI6OmlzQmFkTWF0Y2go
Y29uc3QgVUNoYXIqIG1hdGNoLCBzaXplX3QgbWF0Y2hMZW5ndGgpIGNvbgogICAgIC8vIGNyZWF0
aW5nIGEgbmV3IG9uZSBlYWNoIHRpbWUuCiAgICAgbm9ybWFsaXplQ2hhcmFjdGVycyhtYXRjaCwg
bWF0Y2hMZW5ndGgsIG1fbm9ybWFsaXplZE1hdGNoKTsKIAotICAgIGNvbnN0IFVDaGFyKiBhID0g
bV9ub3JtYWxpemVkVGFyZ2V0LmJlZ2luKCk7Ci0gICAgY29uc3QgVUNoYXIqIGFFbmQgPSBtX25v
cm1hbGl6ZWRUYXJnZXQuZW5kKCk7CisgICAgY29uc3QgVUNoYXIqIGEgPSBnZXRQdHIobV9ub3Jt
YWxpemVkVGFyZ2V0LmJlZ2luKCkpOworICAgIGNvbnN0IFVDaGFyKiBhRW5kID0gZ2V0UHRyKG1f
bm9ybWFsaXplZFRhcmdldC5lbmQoKSk7CiAKLSAgICBjb25zdCBVQ2hhciogYiA9IG1fbm9ybWFs
aXplZE1hdGNoLmJlZ2luKCk7Ci0gICAgY29uc3QgVUNoYXIqIGJFbmQgPSBtX25vcm1hbGl6ZWRN
YXRjaC5lbmQoKTsKKyAgICBjb25zdCBVQ2hhciogYiA9IGdldFB0cihtX25vcm1hbGl6ZWRNYXRj
aC5iZWdpbigpKTsKKyAgICBjb25zdCBVQ2hhciogYkVuZCA9IGdldFB0cihtX25vcm1hbGl6ZWRN
YXRjaC5lbmQoKSk7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAvLyBTa2lwIHJ1bnMg
b2Ygbm9uLWthbmEtbGV0dGVyIGNoYXJhY3RlcnMuIFRoaXMgaXMgbmVjZXNzYXJ5IHNvIHdlIGNh
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXIubW0KaW5kZXggMDA5OGM3NjMxM2Y0Y2M2NjBlOTY4YTkwZDNlOTM4YThiMWJiYzlkZS4u
MjA2MmZkM2UxMjEzZDg2NzE3OTZlYjczOWU4YjU2YzdlMmI3YTU5OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCkBAIC01
NTUsNyArNTU1LDcgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpidWlsZFNlbGVj
dGlvbkhpZ2hsaWdodCgpCiAKICAgICAgICAgaWYgKCFjZ1JlY3RzLmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgQ0dSZWN0IHZpc2libGVSZWN0ID0gbWFpbkZyYW1lVmlldy0+dmlzaWJsZUNvbnRl
bnRSZWN0KCk7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxp
Z2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRo
U3R5bGVBbmREaXJlY3Rpb24obnVsbHB0ciwgY2dSZWN0cy5iZWdpbigpLCBjZ1JlY3RzLnNpemUo
KSwgdmlzaWJsZVJlY3QsIERESGlnaGxpZ2h0Tm9PdXRsaW5lV2l0aEFycm93LCBZRVMsIE5TV3Jp
dGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxE
REhpZ2hsaWdodFJlZj4gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGlnaGxpZ2h0Q3JlYXRlV2l0
aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCBjZ1JlY3Rz
LmRhdGEoKSwgY2dSZWN0cy5zaXplKCksIHZpc2libGVSZWN0LCBEREhpZ2hsaWdodE5vT3V0bGlu
ZVdpdGhBcnJvdywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVTKSk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIG5ld1BvdGVudGlhbEhpZ2hsaWdodHMuYWRkKEhpZ2hs
aWdodDo6Y3JlYXRlRm9yU2VsZWN0aW9uKCp0aGlzLCBkZEhpZ2hsaWdodCwgc2VsZWN0aW9uUmFu
Z2UpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwCmluZGV4IGQxYjkyYjdiNjA5YjQ1MTk5Yzg0YTQ2
YWVlOWZkYjZjNGY3Y2ZlYzUuLjUwM2IwZThkOWJiZjI5MDZjZTczYmViZWJhMDFiZDYwM2VjNzk5
OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRl
ZEZvbnREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdt
ZW50ZWRGb250RGF0YS5jcHAKQEAgLTM5LDggKzM5LDggQEAgU2VnbWVudGVkRm9udERhdGE6On5T
ZWdtZW50ZWRGb250RGF0YSgpCiAKIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBTZWdtZW50ZWRGb250
RGF0YTo6Zm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAogewotICAgIFZlY3Rv
cjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYW5nZXMuZW5kKCk7Ci0g
ICAgZm9yIChWZWN0b3I8Rm9udERhdGFSYW5nZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yYW5n
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgYXV0byBlbmQgPSBtX3Jhbmdlcy5l
bmQoKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKICAgICAgICAgaWYgKGl0LT5mcm9tKCkgPD0gYyAmJiBpdC0+dG8oKSA+PSBjKQogICAg
ICAgICAgICAgcmV0dXJuIGl0LT5mb250RGF0YSgpLmdldCgpOwogICAgIH0KQEAgLTQ5LDggKzQ5
LDggQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIFNlZ21lbnRlZEZvbnREYXRhOjpmb250RGF0YUZv
ckNoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0CiAKIGJvb2wgU2VnbWVudGVkRm9udERhdGE6OmNv
bnRhaW5zQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKIHsKLSAgICBWZWN0b3I8Rm9udERhdGFS
YW5nZT46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwotICAgIGZvciAoVmVj
dG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgIGF1dG8gZW5kID0gbV9yYW5nZXMuZW5kKCk7CisgICAg
Zm9yIChhdXRvIGl0ID0gbV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgIGlmIChjID49IGl0LT5mcm9tKCkgJiYgYyA8PSBpdC0+dG8oKSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KQEAgLTc2LDggKzc2LDggQEAgYm9vbCBTZWdtZW50ZWRGb250RGF0
YTo6aXNDdXN0b21Gb250KCkgY29uc3QKIAogYm9vbCBTZWdtZW50ZWRGb250RGF0YTo6aXNMb2Fk
aW5nKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8Rm9udERhdGFSYW5nZT46OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPEZvbnREYXRhUmFuZ2U+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewor
ICAgIGF1dG8gZW5kID0gbV9yYW5nZXMuZW5kKCk7CisgICAgZm9yIChhdXRvIGl0ID0gbV9yYW5n
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGlmIChpdC0+Zm9udERhdGEo
KS0+aXNMb2FkaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAKaW5k
ZXggMDUxODcxYWM2YzYwZmI2NDM5MjgzMGFhYzZhZDM4NTJhOTRkNDQ3Ni4uZGQwOTYzYTc1MDFh
ZDJlZTA2MzFhNWUxNmQ3OTUxMTExMjIzOWQ1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcApAQCAtMjAwLDcgKzIwMCw3IEBA
IGJvb2wgY29udmVydFdPRkZUb1NmbnQoU2hhcmVkQnVmZmVyKiB3b2ZmLCBWZWN0b3I8Y2hhcj4m
IHNmbnQpCiAgICAgICAgICAgICB1TG9uZ2YgZGVzdExlbiA9IHRhYmxlT3JpZ0xlbmd0aDsKICAg
ICAgICAgICAgIGlmICghc2ZudC50cnlSZXNlcnZlQ2FwYWNpdHkoc2ZudC5zaXplKCkgKyB0YWJs
ZU9yaWdMZW5ndGgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IEJ5dGVmKiBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxCeXRlZio+KHNmbnQuZW5kKCkpOworICAg
ICAgICAgICAgQnl0ZWYqIGRlc3QgPSByZWludGVycHJldF9jYXN0PEJ5dGVmKj4oZ2V0UHRyKHNm
bnQuZW5kKCkpKTsKICAgICAgICAgICAgIHNmbnQuZ3JvdyhzZm50LnNpemUoKSArIHRhYmxlT3Jp
Z0xlbmd0aCk7CiAgICAgICAgICAgICBpZiAodW5jb21wcmVzcyhkZXN0LCAmZGVzdExlbiwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBCeXRlZio+KHdvZmYtPmRhdGEoKSArIHRhYmxlT2Zmc2V0KSwg
dGFibGVDb21wTGVuZ3RoKSAhPSBaX09LKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRp
ZW50Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
ZGllbnRDYWlyby5jcHAKaW5kZXggNTAyMmM1MGM3ZWU4MjVlMjQwZjBlNzEyMjQ3YzdlZjE2NDhm
MzhiZC4uNzUxNmIwYWNkMTVhYWZkMTJhMzU2YWZmNGQ1MGE2YzRhYTAyNGYyMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRD
YWlyby5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgY2Fpcm9fcGF0dGVybl90KiBHcmFkaWVudDo6cGxh
dGZvcm1HcmFkaWVudChmbG9hdCBnbG9iYWxBbHBoYSkKICAgICBlbHNlCiAgICAgICAgIG1fZ3Jh
ZGllbnQgPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9saW5lYXIobV9wMC54KCksIG1fcDAueSgpLCBt
X3AxLngoKSwgbV9wMS55KCkpOwogCi0gICAgVmVjdG9yPENvbG9yU3RvcD46Oml0ZXJhdG9yIHN0
b3BJdGVyYXRvciA9IG1fc3RvcHMuYmVnaW4oKTsKKyAgICBhdXRvIHN0b3BJdGVyYXRvciA9IG1f
c3RvcHMuYmVnaW4oKTsKICAgICB3aGlsZSAoc3RvcEl0ZXJhdG9yICE9IG1fc3RvcHMuZW5kKCkp
IHsKICAgICAgICAgY2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKG1fZ3JhZGllbnQs
IHN0b3BJdGVyYXRvci0+c3RvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0b3BJdGVyYXRvci0+cmVkLCBzdG9wSXRlcmF0b3ItPmdyZWVuLCBzdG9wSXRlcmF0
b3ItPmJsdWUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCmluZGV4IGRlNDU1MDk0YTBiY2Y3
YzlkZDNiMzllNGY4OGUwMmM1MDlkZWVjODUuLjc3NGQ3NmM1NjgyOTY1ZWJlNTVjNTNhZmQ2YmEx
YzIwYWQ3YWU3YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCkBAIC0xNDUsNyArMTQ1
LDcgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3Qg
Y2xlYXJCZWZvcmVGcmFtZSkKICAgICAvLyBhbHdheXMgdXNlIEltYWdlU291cmNlOjpjbGVhcih0
cnVlLCAuLi4pIHRvIGNvbXBsZXRlbHkgZnJlZSB0aGUgbWVtb3J5IGluCiAgICAgLy8gdGhpcyBj
YXNlLgogICAgIGNsZWFyQmVmb3JlRnJhbWUgPSBzdGQ6Om1pbihjbGVhckJlZm9yZUZyYW1lLCBt
X2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpIC0gMSk7Ci0gICAgY29uc3QgVmVjdG9yPEltYWdlRnJh
bWU+OjppdGVyYXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBjbGVhckJlZm9y
ZUZyYW1lKTsKKyAgICBjb25zdCBWZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGVuZChtX2Zy
YW1lQnVmZmVyQ2FjaGUuZGF0YSgpICsgY2xlYXJCZWZvcmVGcmFtZSk7CiAKICAgICAvLyBXZSBu
ZWVkIHRvIHByZXNlcnZlIGZyYW1lcyBzdWNoIHRoYXQ6CiAgICAgLy8gICAqIFdlIGRvbid0IGNs
ZWFyIHxlbmR8CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGU0OGVi
OWI2NzVkYzlkMjE3NTk5MjRjODgwNWFmYTBiODliNDk4MzcuLmU5ZmI1ZmEzY2RhMTQ3MWVjNmVi
YWJiNzRhOTYwMWVmZjRjMzU0M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCkBAIC0xNTc3LDggKzE1NzcsOCBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRGaWxsTGF5ZXJz
KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBDb2xvciYgYywgY29ucwogICAgICAg
ICBjb250ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEpOwogICAgIH0KIAotICAgIFZlY3Rv
cjxjb25zdCBGaWxsTGF5ZXIqPjo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciB0b3BMYXllciA9IGxh
eWVycy5yZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8Y29uc3QgRmlsbExheWVyKj46OmNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IgaXQgPSBsYXllcnMucmJlZ2luKCk7IGl0ICE9IHRvcExheWVyOyArK2l0
KQorICAgIGF1dG8gdG9wTGF5ZXIgPSBsYXllcnMucmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9
IGxheWVycy5yYmVnaW4oKTsgaXQgIT0gdG9wTGF5ZXI7ICsraXQpCiAgICAgICAgIHBhaW50Rmls
bExheWVyKHBhaW50SW5mbywgYywgKml0LCByZWN0LCBibGVlZEF2b2lkYW5jZSwgb3AsIGJhY2tn
cm91bmRPYmplY3QsIGJhc2VCZ0NvbG9yVXNhZ2UpOwogCiAgICAgaWYgKHNob3VsZERyYXdCYWNr
Z3JvdW5kSW5TZXBhcmF0ZUJ1ZmZlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwCmluZGV4IGNjZGMyYTNkYzZkYTJk
NjUzNGE3ZWI2MzUwOWU2YjQzYmFhMWZkNzEuLmM1YjFhNDEzM2U3ZmU2OGNlMDg2ODg0NmFkNjMy
MmU4ZTM0MWU2NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9H
cmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcApAQCAtMjk0LDggKzI5NCw4IEBAIHN0YXRpYyBp
bmxpbmUgdW5zaWduZWQgZmlyc3ROYW1lZEdyaWRMaW5lQmVmb3JlUG9zaXRpb24odW5zaWduZWQg
cG9zaXRpb24sIGNvbnN0CiAgICAgLy8gVGhlIGdyaWQgbGluZSBpbmVxdWFsaXR5IG5lZWRzIHRv
IGJlIHN0cmljdCAod2hpY2ggZG9lc24ndCBtYXRjaCB0aGUgYWZ0ZXIgLyBlbmQgY2FzZSkgYmVj
YXVzZSB8cG9zaXRpb258IGlzCiAgICAgLy8gYWxyZWFkeSBjb252ZXJ0ZWQgdG8gYW4gaW5kZXgg
aW4gb3VyIGdyaWQgcmVwcmVzZW50YXRpb24gKGllIG9uZSB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBn
cmlkIGxpbmUgdG8gYWNjb3VudCBmb3IKICAgICAvLyB0aGUgc2lkZSkuCi0gICAgdW5zaWduZWQg
Zmlyc3RMaW5lQmVmb3JlUG9zaXRpb25JbmRleCA9IDA7Ci0gICAgY29uc3QgdW5zaWduZWQqIGZp
cnN0TGluZUJlZm9yZVBvc2l0aW9uID0gc3RkOjpsb3dlcl9ib3VuZChncmlkTGluZXMuYmVnaW4o
KSwgZ3JpZExpbmVzLmVuZCgpLCBwb3NpdGlvbik7CisgICAgdW5pc2duZWQgZmlyc3RMaW5lQmVm
b3JlUG9zaXRpb25JbmRleCA9IDA7CisgICAgYXV0byBmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiA9
IHN0ZDo6bG93ZXJfYm91bmQoZ3JpZExpbmVzLmJlZ2luKCksIGdyaWRMaW5lcy5lbmQoKSwgcG9z
aXRpb24pOwogICAgIGlmIChmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiAhPSBncmlkTGluZXMuZW5k
KCkpIHsKICAgICAgICAgaWYgKCpmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiA+IHBvc2l0aW9uICYm
IGZpcnN0TGluZUJlZm9yZVBvc2l0aW9uICE9IGdyaWRMaW5lcy5iZWdpbigpKQogICAgICAgICAg
ICAgLS1maXJzdExpbmVCZWZvcmVQb3NpdGlvbjsKQEAgLTMxNiw5ICszMTYsOCBAQCBzdGQ6OnVu
aXF1ZV9wdHI8R3JpZFNwYW4+IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlUm93U3RhcnRD
b2x1bW5TdGFydE5hbWVkRwogCiBzdGQ6OnVuaXF1ZV9wdHI8R3JpZFNwYW4+IEdyaWRSZXNvbHZl
ZFBvc2l0aW9uOjpyZXNvbHZlUm93RW5kQ29sdW1uRW5kTmFtZWRHcmlkTGluZVBvc2l0aW9uQWdh
aW5zdE9wcG9zaXRlUG9zaXRpb24oY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIHJlc29sdmVk
T3Bwb3NpdGVQb3NpdGlvbiwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgVmVj
dG9yPHVuc2lnbmVkPiYgZ3JpZExpbmVzKQogewotICAgIEFTU0VSVChncmlkTGluZXMuc2l6ZSgp
KTsKICAgICB1bnNpZ25lZCBmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb25JbmRleCA9IGdy
aWRMaW5lcy5zaXplKCkgLSAxOwotICAgIGNvbnN0IHVuc2lnbmVkKiBmaXJzdExpbmVBZnRlck9w
cG9zaXRlUG9zaXRpb24gPSBzdGQ6OnVwcGVyX2JvdW5kKGdyaWRMaW5lcy5iZWdpbigpLCBncmlk
TGluZXMuZW5kKCksIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CisgICAgYXV0byBmaXJzdExp
bmVBZnRlck9wcG9zaXRlUG9zaXRpb24gPSBzdGQ6OnVwcGVyX2JvdW5kKGdyaWRMaW5lcy5iZWdp
bigpLCBncmlkTGluZXMuZW5kKCksIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CiAgICAgaWYg
KGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbiAhPSBncmlkTGluZXMuZW5kKCkpCiAgICAg
ICAgIGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbkluZGV4ID0gZmlyc3RMaW5lQWZ0ZXJP
cHBvc2l0ZVBvc2l0aW9uIC0gZ3JpZExpbmVzLmJlZ2luKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Rm9udEVsZW1lbnQuY3BwCmluZGV4IGMzM2ZmYjc3YjZkOGY5OTU3YjEyNmYxYmYzOTE3YTg1N2Zk
ZmI1MGUuLmEwYmY1MDE5MWI2YWI5NTgxNjE4ZDk1M2MwODkwZDIxMmViN2IzNjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcApAQCAtMjUyLDMxICsyNTIsMzEgQEAgc3RhdGlj
IGlubGluZSBmbG9hdCBrZXJuaW5nRm9yUGFpck9mU3RyaW5nc0FuZEdseXBocyhjb25zdCBTVkdL
ZXJuaW5nTWFwJiBrZXJuaW4KIHsKICAgICBpZiAoIWcxLmlzRW1wdHkoKSAmJiBrZXJuaW5nTWFw
LmdseXBoTWFwLmNvbnRhaW5zKGcxKSkgewogICAgICAgICBTVkdLZXJuaW5nVmVjdG9yKiBrZXJu
aW5nVmVjdG9yID0ga2VybmluZ01hcC5nbHlwaE1hcC5nZXQoZzEpOwotICAgICAgICBTVkdLZXJu
aW5nVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGtlcm5pbmdWZWN0b3ItPmVuZCgpIC0gMTsK
LSAgICAgICAgY29uc3QgU1ZHS2VybmluZ1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBr
ZXJuaW5nVmVjdG9yLT5iZWdpbigpIC0gMTsKLSAgICAgICAgZm9yICg7IGl0ICE9IGJlZ2luOyAt
LWl0KSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2hlcyh1MiwgZzIsICppdCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGl0LT5rZXJuaW5nOworICAgICAgICBzaXplX3QgaXQgPSBrZXJuaW5nVmVj
dG9yLT5zaXplKCk7CisgICAgICAgIHdoaWxlIChpdC0tID4gMCkgeworICAgICAgICAgICAgYXV0
byYgdmFsdWUgPSBrZXJuaW5nVmVjdG9yLT5hdChpdCk7CisgICAgICAgICAgICBpZiAobWF0Y2hl
cyh1MiwgZzIsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUua2VybmluZzsK
ICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghdTEuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlm
IChrZXJuaW5nTWFwLnVuaWNvZGVNYXAuY29udGFpbnModTEpKSB7CiAgICAgICAgICAgICBTVkdL
ZXJuaW5nVmVjdG9yKiBrZXJuaW5nVmVjdG9yID0ga2VybmluZ01hcC51bmljb2RlTWFwLmdldCh1
MSk7Ci0gICAgICAgICAgICBTVkdLZXJuaW5nVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGtl
cm5pbmdWZWN0b3ItPmVuZCgpIC0gMTsKLSAgICAgICAgICAgIGNvbnN0IFNWR0tlcm5pbmdWZWN0
b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0ga2VybmluZ1ZlY3Rvci0+YmVnaW4oKSAtIDE7Ci0g
ICAgICAgICAgICBmb3IgKDsgaXQgIT0gYmVnaW47IC0taXQpIHsKLSAgICAgICAgICAgICAgICBp
ZiAobWF0Y2hlcyh1MiwgZzIsICppdCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdC0+
a2VybmluZzsKKyAgICAgICAgICAgIHNpemVfdCBpdCA9IGtlcm5pbmdWZWN0b3ItPnNpemUoKTsK
KyAgICAgICAgICAgIHdoaWxlIChpdC0tID4gMCkgeworICAgICAgICAgICAgICAgIGF1dG8mIHZh
bHVlID0ga2VybmluZ1ZlY3Rvci0+YXQoaXQpOworICAgICAgICAgICAgICAgIGlmIChtYXRjaGVz
KHUyLCBnMiwgdmFsdWUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUua2Vybmlu
ZzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICgha2VybmluZ01hcC5r
ZXJuaW5nVW5pY29kZVJhbmdlTWFwLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgVmVjdG9yPFNW
R0tlcm5pbmdQYWlyPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBrZXJuaW5nTWFwLmtlcm5pbmdVbmlj
b2RlUmFuZ2VNYXAuZW5kKCkgLSAxOwotICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0tlcm5p
bmdQYWlyPjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2Rl
UmFuZ2VNYXAuYmVnaW4oKSAtIDE7Ci0gICAgICAgICAgICBmb3IgKDsgaXQgIT0gYmVnaW47IC0t
aXQpIHsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyh1MSwgdTIsIGcyLCAqaXQpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gaXQtPmtlcm5pbmc7CisgICAgICAgICAgICBzaXplX3Qg
aXQgPSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VNYXAuc2l6ZSgpOworICAgICAgICAg
ICAgd2hpbGUgKGl0LS0gPiAwKSB7CisgICAgICAgICAgICAgICAgYXV0byYgdmFsdWUgPSBrZXJu
aW5nTWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VNYXBbaXRdOworICAgICAgICAgICAgICAgIGlmICht
YXRjaGVzKHUxLCB1MiwgZzIsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZh
bHVlLmtlcm5pbmc7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oCmluZGV4IDlkOWQyYTJiMjNjNjAwZmViYjUzNDBjYmNk
ZDFiNjFkZGMzYjlmMTUuLmI5OTk1NTQ5NDM5YWM5NjRhYjNlNjdhMzBmMGQ4OWQ4YzM1OGFjYTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oCkBAIC02MCw4ICs2MCw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZCh1bnNpZ25lZCBjaGFyIGJ5dGUpIHsgbV9kYXRhLmFw
cGVuZChieXRlKTsgfQogICAgIHZvaWQgYXBwZW5kKFNWR1BhdGhCeXRlU3RyZWFtKiBvdGhlcikK
ICAgICB7Ci0gICAgICAgIGZvciAoRGF0YUl0ZXJhdG9yIGl0ID0gb3RoZXItPmJlZ2luKCk7IGl0
ICE9IG90aGVyLT5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgIGFwcGVuZCgqaXQpOworICAgICAg
ICBmb3IgKGF1dG8mIGJ5dGUgOiAqb3RoZXIpCisgICAgICAgICAgICBhcHBlbmQoYnl0ZSk7CiAg
ICAgfQogICAgIHZvaWQgY2xlYXIoKSB7IG1fZGF0YS5jbGVhcigpOyB9CiAgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gIW1fZGF0YS5zaXplKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aE5v
ZGVTZXQuaAppbmRleCAzZDg5YjhkNTA4N2E4NmNmZWFmZmMwMTQwYjY5NDc2MmMwOTVkZGRmLi5k
YWYyYjkzZDUxYjVhZjZiNzM0ZjVmOWE3NjU0MTM2OWUwNDE0YTJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQ
YXRoTm9kZVNldC5oCkBAIC02NCw4ICs2NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgICAgIHZvaWQgbWFya1N1YnRyZWVzRGlzam9pbnQoYm9vbCBkaXNqb2ludCkgeyBtX3N1YnRy
ZWVzQXJlRGlzam9pbnQgPSBkaXNqb2ludDsgfQogICAgICAgICAgICAgYm9vbCBzdWJ0cmVlc0Fy
ZURpc2pvaW50KCkgY29uc3QgeyByZXR1cm4gbV9zdWJ0cmVlc0FyZURpc2pvaW50IHx8IG1fbm9k
ZXMuc2l6ZSgpIDwgMjsgfQogCi0gICAgICAgICAgICBjb25zdCBSZWZQdHI8Tm9kZT4qIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gbV9ub2Rlcy5iZWdpbigpOyB9Ci0gICAgICAgICAgICBjb25zdCBS
ZWZQdHI8Tm9kZT4qIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuZW5kKCk7IH0KKyAgICAg
ICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4+OjppdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fbm9kZXMuYmVnaW4oKTsgfQorICAgICAgICAgICAgY29uc3QgVmVjdG9yPFJl
ZlB0cjxOb2RlPj46Oml0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuZW5kKCk7
IH0KIAogICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgdm9pZCB0cmF2ZXJzYWxTb3J0KCkg
Y29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241958</attachid>
            <date>2014-11-20 10:32:17 -0800</date>
            <delta_ts>2014-11-20 10:43:55 -0800</delta_ts>
            <desc>more efl fixes</desc>
            <filename>bug-138821-20141120103232.patch</filename>
            <type>text/plain</type>
            <size>70054</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2Mzk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
MDJjYWNjMWVlMDYxOGNiOTk3M2FlYTQ1Mjc2ZTdmYzg4OTBjODc0Li5jZmYyODMwOTQ2MTJhOTMz
NDI5MTFmYzM5MTVhY2JkOWI1YjY4MzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNiBAQAorMjAxNC0xMS0xNyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3Rp
bGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGVyZSBhcmUgYSBmZXcgdXNlcyBvZiBiZWdpbigpL2VuZCgp
IHRoYXQgZXhwbGljaXRseSByZXF1aXJlIHBvaW50ZXJzLAorICAgICAgICBzbyB3ZSB1c2UgZ2V0
UHRyKCkgdG8gZXh0cmFjdCB0aGUgdW5kZXJseWluZyBwb2ludGVyIGdlbmVyaWNhbGx5LgorCisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRDb21wbGV4UG9wU2NvcGVzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVt
cCk6CisgICAgICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6RlRM
OjptZE5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkQ2FsbCk6CisgICAgICAgICogbGxp
bnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBlcmZvcm1Bc3Nl
cnRpb25zKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlNjb3Bl
OjpTY29wZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwOgorICAgICAgICAo
SlNDOjpQcm9maWxlTm9kZTo6ZGVidWdQcmludFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3Rvcik6
CisgICAgICAgICogdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2Zp
bGVUcmVlTm9kZTo6ZHVtcEludGVybmFsKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgor
ICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjptYXRjaENoYXJhY3RlckNsYXNzKToK
KwogMjAxNC0xMS0xOSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IEpTQ29udGV4dCBpbnNwZWN0aW9uIFJlc291cmNlIHNlYXJj
aCBkb2VzIG5vdCB3b3JrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDU1MWE2YjZkOTY5MzhmOGJjM2I2MDNhMTNlMTAwZDg2NGMx
ZGI4M2UuLjI3MTg5MzNiMjUzZGVkMjJkMzJiMjRkNzhkZTQwMDVjNjJkMTdmYWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsOTggQEAKKzIwMTQtMTEtMTcgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
KworICAgICAgICBNYWtlIHN1cmUgcmFuZ2UgYmFzZWQgaXRlcmF0aW9uIG9mIFZlY3Rvcjw+IHN0
aWxsIHJlY2VpdmVzIGJvdW5kcyBjaGVja2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4ODIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IEluZGV4ZWRJdGVyYXRvciBzdHJ1Y3QgdG8g
V1RGIHRoYXQgd3JhcHMgYQorICAgICAgICBWZWN0b3IgdHlwZSBhbmQgaW5kZXggdG8gcHJvdmlk
ZSBwb2ludGVyIGxpa2Ugc2VtYW50aWNzCisgICAgICAgIHdoaWxlIHN0aWxsIHBlcmZvcm1pbmcg
cnVudGltZSBib3VuZHMgY2hlY2tpbmcsIGV2ZW4gaW4KKyAgICAgICAgcmVsZWFzZSBidWlsZHMu
IFdlIHN0b3JlIGEgc2ltcGxlIGluZGV4IGludG8gdGhlIHZlY3RvcgorICAgICAgICB3aGljaCBt
ZWFucyB0aGF0IHRoaXMgaXRlcmF0b3IgYWxsb3dzIHZlY3RvciByZXNpemluZworICAgICAgICBk
dXJpbmcgaXRlcmF0aW9uLiBJZiB0aGUgdmVjdG9yIGlzIHJlc2l6ZWQgc3VjaCB0aGF0IHRoZQor
ICAgICAgICBpdGVyYXRvciBpcyBvdXQgb2YgYm91bmRzLCB0aGVuIGFueSBhdHRlbXB0IHRvIGRl
cmVmZXJlbmNlCisgICAgICAgIHRoZSBpdGVyYXRvciB3aWxsIGNyYXNoIHNhZmVseS4gQW55IG90
aGVyIGVycm9ycywgaW5jbHVkaW5nCisgICAgICAgIG92ZXJmbG93cywgYW5kIG92ZXIgZXh0ZW5k
aW5nIHRoZSBpdGVyYXRvciB3aWxsIGxpa2V3aXNlCisgICAgICAgIGNyYXNoLgorCisgICAgICAg
IEZvciB0aGUgcHVycG9zZSBvZiByZXRhaW5pbmcgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQKKyAg
ICAgICAgYmVoYXZpb3VyLCB0aGUgaXRlcmF0b3IgY2FuIGJlIG1vdmVkIHRvIG1faW5kZXggPT0g
c2l6ZSgpCisgICAgICAgIGFzIHRoYXQgaXMgdGhlIHN0YW5kYXJkICJlbmQiIHRlcm1pbmF0b3Ig
Zm9yIHRoZXNlIHR5cGVzLgorICAgICAgICBBdHRlbXB0aW5nIHRvIGRlcmVmZXJlbmNlIGF0IHRo
YXQgcG9pbnQgd2lsbCBzdGlsbCBjcmFzaAorICAgICAgICByYXRoZXIgdGhhbiBwZXJmb3JtIGFu
IHVuc2FmZSBtZW1vcnkgb3BlcmF0aW9uLgorCisgICAgICAgIEluIG9yZGVyIHRvIG1haW50YWlu
IHRoZSB2YWxpZGl0eSBvZiBhbGwgdGhlIGJvdW5kcyBjaGVja2luZywKKyAgICAgICAgd2UgcGVy
Zm9ybSBmdWxsIGludGVnZXIgcmFuZ2UgY2hlY2tpbmcgcHJpb3IgdG8gYW55IG11dGF0aW9uCisg
ICAgICAgIG9mIHRoZSBpdGVyYXRvciBsb2NhdGlvbi4gSWYgd2UgZGV0ZWN0IGFuIGFyaXRobWV0
aWMgb3ZlcmZsb3cKKyAgICAgICAgd2Ugd2lsbCBjcmFzaCByYXRoZXIgdGhhbiBhdHRlbXB0aW5n
IHRvIGNhcnJ5IG9uLgorCisgICAgICAgIEJ5IG5lY2Vzc2l0eSB0aGVyZSBhcmUgbWFueSBvdmVy
cmlkZXMgZm9yIG9wZXJhdG9yICsgYW5kIC0gYXMKKyAgICAgICAgd2Ugb3RoZXJ3aXNlIGhpdCBt
YW55IGRpZmZlcmVudCB0eXBlIHByb21vdGlvbiBhbWJpZ3VpdGllcyB3aGVuCisgICAgICAgIHBl
cmZvcm1pbmcgYXJpdGhtZXRpYyB3aXRoIGl0ZXJhdG9ycy4gVGhlc2UgYW1iaWd1aXRpZXMgYXJl
IGFsc28KKyAgICAgICAgZGlmZmVyZW50IGZvciAzMi0gdnMuIDY0LWJpdCwgc28gZHVwbGljYXRp
bmcgdGhlIGZ1bmN0aW9ucworICAgICAgICBhbmQgdGhlbiBmb3J3YXJkaW5nIHRvIHRoZSBjb3Jl
IGltcGxlbWVudGF0aW9ucyB0aGF0IHBlcmZvcm1lZAorICAgICAgICB0aGUgYm91bmRzIGNoZWNr
aW5nIGFuZCBtdXRhdGlvbiBzZWVtZWQgbGlrZSB0aGUgcmlnaHQgY2FsbC4KKworICAgICAgICAq
IFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9JbmRleGVkSXRl
cmF0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6SW5kZXhlZEl0
ZXJhdG9yKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvci0+KToKKyAg
ICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpJ
bmRleGVkSXRlcmF0b3I6OmdldCk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3Bl
cmF0b3IrKyk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3ItLSk6Cisg
ICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlw
ZSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IrPSk6CisgICAgICAg
IChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3ItPSk6CisgICAgICAgIChXVEY6OkluZGV4
ZWRJdGVyYXRvcjo6b3BlcmF0b3IrKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpv
cGVyYXRvci0pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6
OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVy
YXRvcjo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRv
cjw9KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcj4pOgorICAgICAg
ICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPj0pOgorICAgICAgICAoV1RGOjpJbmRl
eGVkSXRlcmF0b3I6Om9wZXJhdG9yIGNvbnN0X2l0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6SW5k
ZXhlZEl0ZXJhdG9yOjppc1NhZmVUb0NvbXBhcmUpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRl
cmF0b3I6OnVuc2FmZUdldCk6CisgICAgICAgIChXVEY6OmdldFB0cik6CisgICAgICAgIChXVEY6
Om9wZXJhdG9yLSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXVEY6Om9w
ZXJhdG9yPj0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpvcGVy
YXRvcj4pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3JTZWxlY3Rvcjo6bWFrZUl0ZXJh
dG9yKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yU2VsZWN0b3I6Om1ha2VDb25zdEl0
ZXJhdG9yKToKKyAgICAgICAgKiB3dGYvUmVmQ291bnRlZEFycmF5Lmg6CisgICAgICAgIChXVEY6
OlJlZkNvdW50ZWRBcnJheTo6UmVmQ291bnRlZEFycmF5KToKKyAgICAgICAgKiB3dGYvVmVjdG9y
Lmg6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6VmVjdG9y
OjpiZWdpbik6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6ZW5kKToKKyAgICAgICAgKFdURjo6T3Zl
cmZsb3dIYW5kbGVyPjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6PSk6CisgICAgICAgIChXVEY6
Ok92ZXJmbG93SGFuZGxlcj46OmZpbGwpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+
OjpleHBhbmRDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnRyeUV4
cGFuZENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6cmVzaXplKToK
KyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6c2hyaW5rKToKKyAgICAgICAgKFdURjo6
T3ZlcmZsb3dIYW5kbGVyPjo6Z3Jvdyk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46
OnJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnRyeVJl
c2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnNocmlua0Nh
cGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kKToKKyAgICAg
ICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6dHJ5QXBwZW5kKToKKyAgICAgICAgKFdURjo6T3Zl
cmZsb3dIYW5kbGVyPjo6YXBwZW5kU2xvd0Nhc2UpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hh
bmRsZXI+Ojp1bmNoZWNrZWRBcHBlbmQpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+
OjphcHBlbmRWZWN0b3IpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnQp
OgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnRWZWN0b3IpOgorICAgICAg
ICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUpOgorCiAyMDE0LTExLTE4ICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgSGF2ZSBWZWN0b3I6OmNhcGFjaXR5
KCkgcmV0dXJuIGFuIHVuc2lnbmVkIGluc3RlYWQgb2YgYSBzaXplX3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAz
MjFkNGE2MTVjZWJhZmI0Y2Q3MGI2NDgxMjRlZTgxMjYyMDMwNjI3Li44ZGQyZjBmZDgzM2I1Y2Jm
NjNkYTU2ODU4ZThmNDFjYjM4NTA0NzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIw
MTQtMTEtMTcgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtl
IHN1cmUgcmFuZ2UgYmFzZWQgaXRlcmF0aW9uIG9mIFZlY3Rvcjw+IHN0aWxsIHJlY2VpdmVzIGJv
dW5kcyBjaGVja2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM4ODIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhlcmUgYXJlIGEgZmV3IHVzZXMgb2YgYmVnaW4oKS9lbmQoKSB0aGF0IGV4cGxpY2l0
bHkgcmVxdWlyZSBwb2ludGVycywKKyAgICAgICAgc28gd2UgdXNlIGdldFB0cigpIHRvIGV4dHJh
Y3QgdGhlIHVuZGVybHlpbmcgcG9pbnRlciBnZW5lcmljYWxseS4KKworICAgICAgICAqIGJpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9u
ZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemVTdHJpbmcpOgorICAgICAgICAqIGVkaXRpbmcvVGV4
dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEJ1ZmZlcjo6aXNCYWRNYXRj
aCk6CisgICAgICAgICogcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9u
SGlnaGxpZ2h0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6Zm9udERhdGFGb3JD
aGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkRm9udERhdGE6OmNvbnRhaW5z
Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZEZvbnREYXRhOjppc0xvYWRp
bmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnZlcnRXT0ZGVG9TZm50KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFpbnRGaWxsTGF5
ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3ROYW1lZEdyaWRMaW5lQmVmb3JlUG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVSb3dFbmRDb2x1
bW5FbmROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbik6CisgICAg
ICAgICogc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omtlcm5pbmdG
b3JQYWlyT2ZTdHJpbmdzQW5kR2x5cGhzKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ5dGVTdHJl
YW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtOjphcHBlbmQpOgorICAg
ICAgICAqIHhtbC9YUGF0aE5vZGVTZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOb2Rl
U2V0OjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6Tm9kZVNldDo6ZW5kKToKKwog
MjAxNC0xMS0yMCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE3NjM5Ni4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCmluZGV4IDZjMjkz
Y2NmOThkNTY3MzI2ZGM0MmZhYmQ1ZGZhNDFkMjNmNmMyYzEuLjYzNWFjZDJjYmIzOGU3OGE2MDgz
YjYxZTU4ZGJhMWI0N2NiNzllOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApAQCAtMjM0LDkgKzIzNCw5IEBAIHZvaWQg
VW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3N5bWJvbFRhYmxlKTsKICAgICBm
b3IgKEZ1bmN0aW9uRXhwcmVzc2lvblZlY3Rvcjo6aXRlcmF0b3IgcHRyID0gdGhpc09iamVjdC0+
bV9mdW5jdGlvbkRlY2xzLmJlZ2luKCksIGVuZCA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25EZWNs
cy5lbmQoKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0cik7
CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKFdURjo6Z2V0UHRyKHB0cikpOwogICAgIGZvciAoRnVu
Y3Rpb25FeHByZXNzaW9uVmVjdG9yOjppdGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0
aW9uRXhwcnMuYmVnaW4oKSwgZW5kID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkV4cHJzLmVuZCgp
OyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQocHRyKTsKKyAgICAg
ICAgdmlzaXRvci5hcHBlbmQoV1RGOjpnZXRQdHIocHRyKSk7CiAgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXModGhpc09iamVjdC0+bV9jb25zdGFudFJlZ2lzdGVycy5kYXRhKCksIHRoaXNPYmplY3Qt
Pm1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKICAgICBpZiAodGhpc09iamVjdC0+bV9yYXJl
RGF0YSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgZW5kID0gdGhpc09iamVjdC0+bV9y
YXJlRGF0YS0+bV9yZWdleHBzLnNpemUoKTsgaSAhPSBlbmQ7IGkrKykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAK
aW5kZXggYjIxMzRlZjdhNTA5YjczNjllM2QyYzA1NjYyYzIxYjg0NzA3ZmY1Yy4uNWUxZjQ2MTI5
MWFjZTI2MDkzYjEzMTdkYWY4NGNlOTVkM2QxYmZmYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTIy
NjMsOCArMjI2Myw4IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb21wbGV4UG9wU2Nv
cGVzKFJlZ2lzdGVySUQqIHNjb3BlLCBDb250cm9sRmxvd0NvbnRlCiAgICAgICAgICAgICBpbnQg
dG9wU2NvcGVJbmRleCA9IC0xOwogICAgICAgICAgICAgaW50IGJvdHRvbVNjb3BlSW5kZXggPSAt
MTsKICAgICAgICAgICAgIGlmIChmbGlwU2NvcGVzKSB7Ci0gICAgICAgICAgICAgICAgdG9wU2Nv
cGVJbmRleCA9IHRvcFNjb3BlIC0gbV9zY29wZUNvbnRleHRTdGFjay5iZWdpbigpOwotICAgICAg
ICAgICAgICAgIGJvdHRvbVNjb3BlSW5kZXggPSBib3R0b21TY29wZSAtIG1fc2NvcGVDb250ZXh0
U3RhY2suYmVnaW4oKTsKKyAgICAgICAgICAgICAgICB0b3BTY29wZUluZGV4ID0gdG9wU2NvcGUg
LSBtX3Njb3BlQ29udGV4dFN0YWNrLmRhdGEoKTsKKyAgICAgICAgICAgICAgICBib3R0b21TY29w
ZUluZGV4ID0gYm90dG9tU2NvcGUgLSBtX3Njb3BlQ29udGV4dFN0YWNrLmRhdGEoKTsKICAgICAg
ICAgICAgICAgICBzYXZlZFNjb3BlQ29udGV4dFN0YWNrID0gbV9zY29wZUNvbnRleHRTdGFjazsK
ICAgICAgICAgICAgICAgICBtX3Njb3BlQ29udGV4dFN0YWNrLnNocmluayhmaW5hbGx5Q29udGV4
dC5zY29wZUNvbnRleHRTdGFja1NpemUpOwogICAgICAgICAgICAgfQpAQCAtMjMwOCw3ICsyMzA4
LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMoUmVnaXN0
ZXJJRCogc2NvcGUsIENvbnRyb2xGbG93Q29udGUKICAgICAgICAgICAgIGlmIChmbGlwU2NvcGVz
KSB7CiAgICAgICAgICAgICAgICAgbV9zY29wZUNvbnRleHRTdGFjayA9IHNhdmVkU2NvcGVDb250
ZXh0U3RhY2s7CiAgICAgICAgICAgICAgICAgdG9wU2NvcGUgPSAmbV9zY29wZUNvbnRleHRTdGFj
a1t0b3BTY29wZUluZGV4XTsgLy8gYXNzZXJ0IGl0J3Mgd2l0aGluIGJvdW5kcwotICAgICAgICAg
ICAgICAgIGJvdHRvbVNjb3BlID0gbV9zY29wZUNvbnRleHRTdGFjay5iZWdpbigpICsgYm90dG9t
U2NvcGVJbmRleDsgLy8gZG9uJ3QgYXNzZXJ0LCBzaW5jZSBpdCB0aGUgaW5kZXggbWlnaHQgYmUg
LTEuCisgICAgICAgICAgICAgICAgYm90dG9tU2NvcGUgPSBtX3Njb3BlQ29udGV4dFN0YWNrLmRh
dGEoKSArIGJvdHRvbVNjb3BlSW5kZXg7IC8vIGRvbid0IGFzc2VydCwgc2luY2UgaXQgdGhlIGlu
ZGV4IG1pZ2h0IGJlIC0xLgogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGZsaXBTd2l0
Y2hlcykKICAgICAgICAgICAgICAgICBtX3N3aXRjaENvbnRleHRTdGFjayA9IHNhdmVkU3dpdGNo
Q29udGV4dFN0YWNrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAppbmRleCBmMDcyNGRmNDcwMzk0OWIzMGQyNGUzNmFhODJlNzc4YTVjYjliZjcz
Li4zYmUxOGVhNmM2Y2I3ZjM2ZjQ4ZTIwYjU5ZjcyM2VjYzUxNGI5ZDNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtNDkxMCw3ICs0
OTEwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEludEp1bXAoCiAgICAgYWRk
QnJhbmNoKAogICAgICAgICBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFs
LCB2YWx1ZSwgSW1tMzIodGFibGUuY3RpT2Zmc2V0cy5zaXplKCkpKSwKICAgICAgICAgZGF0YS0+
ZmFsbFRocm91Z2guYmxvY2spOwotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cih0YWJsZS5j
dGlPZmZzZXRzLmJlZ2luKCkpLCBzY3JhdGNoKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1Q
dHIodGFibGUuY3RpT2Zmc2V0cy5kYXRhKCkpLCBzY3JhdGNoKTsKICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjpCYXNlSW5kZXgoc2NyYXRjaCwgdmFsdWUsIEpJVENvbXBpbGVyOjp0aW1l
c1B0cigpKSwgc2NyYXRjaCk7CiAgICAgbV9qaXQuanVtcChzY3JhdGNoKTsKICAgICBkYXRhLT5k
aWRVc2VKdW1wVGFibGUgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYmJyZXZpYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
YnJldmlhdGlvbnMuaAppbmRleCBmYzdjYjFiMjU0MzI2OTRhYWVlOGZiZjMxNTNlNmUwOGE4MzMy
ZjM5Li43YjFhMWNlN2IzODM3ZTgxNGNiYTJiM2VjYzNhMDdiMDE4ZDlhZTMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaApAQCAtMTIwLDcgKzEyMCw3
IEBAIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kU3RyaW5nKExDb250ZXh0IGNvbnRleHQsIGNvbnN0
IGNoYXIqIHN0cmluZywgdW5zaWduZWQgbGVuCiBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZFN0cmlu
ZyhMQ29udGV4dCBjb250ZXh0LCBjb25zdCBjaGFyKiBzdHJpbmcpIHsgcmV0dXJuIG1kU3RyaW5n
KGNvbnRleHQsIHN0cmluZywgc3RkOjpzdHJsZW4oc3RyaW5nKSk7IH0KIHN0YXRpYyBpbmxpbmUg
TFZhbHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0LCBMVmFsdWUqIGFyZ3MsIHVuc2lnbmVkIG51
bUFyZ3MpIHsgcmV0dXJuIGxsdm0tPk1ETm9kZUluQ29udGV4dChjb250ZXh0LCBhcmdzLCBudW1B
cmdzKTsgfQogdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KLXN0YXRpYyBpbmxpbmUgTFZh
bHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0LCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpIHsg
cmV0dXJuIG1kTm9kZShjb250ZXh0LCBjb25zdF9jYXN0PExWYWx1ZSo+KHZlY3Rvci5iZWdpbigp
KSwgdmVjdG9yLnNpemUoKSk7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4
dCBjb250ZXh0LCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpIHsgcmV0dXJuIG1kTm9kZShjb250
ZXh0LCBjb25zdF9jYXN0PExWYWx1ZSo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpKTsg
fQogc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQpIHsgcmV0dXJu
IG1kTm9kZShjb250ZXh0LCAwLCAwKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExD
b250ZXh0IGNvbnRleHQsIExWYWx1ZSBhcmcxKSB7IHJldHVybiBtZE5vZGUoY29udGV4dCwgJmFy
ZzEsIDEpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwg
TFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyKQpAQCAtMjg4LDcgKzI4OCw3IEBAIHN0YXRpYyBpbmxp
bmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIGNv
bnN0IExWYWx1ZSoKIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+CiBpbmxpbmUgTFZhbHVl
IGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IFZlY3Rv
clR5cGUmIHZlY3RvcikKIHsKLSAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9u
LCB2ZWN0b3IuYmVnaW4oKSwgdmVjdG9yLnNpemUoKSk7CisgICAgcmV0dXJuIGJ1aWxkQ2FsbChi
dWlsZGVyLCBmdW5jdGlvbiwgdmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUoKSk7CiB9CiBzdGF0
aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0
aW9uKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0
YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAppbmRleCA2
OTE5YWVhYjAwYTFiMjVjNDc1YmJmOWRkMjVjNjg4ZjBhYTU4YTcyLi40NGFmY2E0Y2JhZDhiM2U1
NTMzNDEyOWFjOWM5YjBkZWZkOTU2MWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnREYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnREYXRhLmNwcApAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgRGF0YTo6cGVyZm9ybUFzc2Vy
dGlvbnMoVk0mIHZtKQogICAgIFZlY3RvcjxpbnQ+IHRlc3RWZWN0b3I7CiAgICAgdGVzdFZlY3Rv
ci5yZXNpemUoNDIpOwogICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8dWludDMyX3QqPigmdGVzdFZl
Y3Rvcilbc2l6ZW9mKHZvaWQqKS9zaXplb2YodWludDMyX3QpICsgMV0gPT0gNDIpOwotICAgIEFT
U0VSVChiaXR3aXNlX2Nhc3Q8aW50Kio+KCZ0ZXN0VmVjdG9yKVswXSA9PSB0ZXN0VmVjdG9yLmJl
Z2luKCkpOworICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50Kio+KCZ0ZXN0VmVjdG9yKVswXSA9
PSB0ZXN0VmVjdG9yLmRhdGEoKSk7CiAjZW5kaWYKIAogICAgIEFTU0VSVChTdHJpbmdJbXBsOjpz
X2hhc2hGbGFnOEJpdEJ1ZmZlciA9PSAzMik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuaAppbmRleCA0NTJmNzA0NmYzMDIyZDM4ODEwOWFlYmRjODQzODRlMWFhMjJmZmExLi4wMWZj
Y2RiN2UzOGFjNWE2MDIyYzY4Yzk3YjhkOGViM2IwY2VjMTgwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyLmgKQEAgLTEzMCwxMSArMTMwLDggQEAgc3RydWN0IFNjb3BlIHsKICAg
ICB7CiAgICAgICAgIGlmIChyaHMubV9sYWJlbHMpIHsKICAgICAgICAgICAgIG1fbGFiZWxzID0g
YWRvcHRQdHIobmV3IExhYmVsU3RhY2spOwotCi0gICAgICAgICAgICB0eXBlZGVmIExhYmVsU3Rh
Y2s6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAgICAgICAgaXRlcmF0b3IgZW5kID0g
cmhzLm1fbGFiZWxzLT5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoaXRlcmF0b3IgaXQgPSByaHMu
bV9sYWJlbHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICAgICBtX2xh
YmVscy0+YXBwZW5kKFNjb3BlTGFiZWxJbmZvKGl0LT5tX2lkZW50LCBpdC0+bV9pc0xvb3ApKTsK
KyAgICAgICAgICAgIGZvciAoYXV0byBsYWJlbCA6ICpyaHMubV9sYWJlbHMpCisgICAgICAgICAg
ICAgICAgbV9sYWJlbHMtPmFwcGVuZChTY29wZUxhYmVsSW5mbyhsYWJlbC5tX2lkZW50LCBsYWJl
bC5tX2lzTG9vcCkpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVOb2RlLmNwcAppbmRleCAyNjVjZGRkMGVmNzg4MzNmNjFiNTcx
MTE5Y2ZkNzcyMGZkNDZkMTU3Li42OTJjN2I4NmYzYzNhMjU0MjFiYjEwMDgyZGY2ZTA4ZGViNDBm
MGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZU5v
ZGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlTm9kZS5j
cHAKQEAgLTE1NCw2ICsxNTQsNyBAQCB2b2lkIFByb2ZpbGVOb2RlOjpkZWJ1Z1ByaW50UmVjdXJz
aXZlbHkoaW50IGluZGVudExldmVsLCBjb25zdCBQcm9maWxlU3VidHJlZURhdAogICAgIC8vIFBy
aW50IGNoaWxkcmVuJ3MgbmFtZXMgYW5kIGluZm9ybWF0aW9uCiAgICAgZm9yIChTdGFja0l0ZXJh
dG9yIGN1cnJlbnRDaGlsZCA9IG1fY2hpbGRyZW4uYmVnaW4oKTsgY3VycmVudENoaWxkICE9IG1f
Y2hpbGRyZW4uZW5kKCk7ICsrY3VycmVudENoaWxkKQogICAgICAgICAoKmN1cnJlbnRDaGlsZCkt
PmRlYnVnUHJpbnRSZWN1cnNpdmVseShpbmRlbnRMZXZlbCwgZGF0YSk7CisKIH0KIAogLy8gcHJp
bnQgdGhlIHByb2ZpbGVkIGRhdGEgaW4gYSBmb3JtYXQgdGhhdCBtYXRjaGVzIHRoZSB0b29sIHNh
bXBsZSdzIG91dHB1dC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAK
aW5kZXggY2M2MzAyMTdkZjdmZDI1YWRlNGM0YmIzOTg1NzRkNjdkNWE3NDU2OS4uNzljZDY3YTY3
ODE3YmRkZmFlZGRmM2M1MDY4NmM0ODJjOTIwNDUwNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAKQEAgLTM1Miw3ICszNTIsNyBAQCBib29sIEpTQXJyYXk6OnNl
dExlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5n
dGgsIGJvbwogICAgICAgICAgICAgLy8gcHJvcGVydGllcywgc28gd2UgaGF2ZSB0byBwZXJmb3Jt
IGRlbGV0aW9uIHdpdGggY2F1dGlvbiwgaWYgbm90IHdlIGNhbgogICAgICAgICAgICAgLy8gZGVs
ZXRlIHZhbHVlcyBpbiBhbnkgb3JkZXIuCiAgICAgICAgICAgICBpZiAobWFwLT5zcGFyc2VNb2Rl
KCkpIHsKLSAgICAgICAgICAgICAgICBxc29ydChrZXlzLmJlZ2luKCksIGtleXMuc2l6ZSgpLCBz
aXplb2YodW5zaWduZWQpLCBjb21wYXJlS2V5c0ZvclFTb3J0KTsKKyAgICAgICAgICAgICAgICBx
c29ydChrZXlzLmRhdGEoKSwga2V5cy5zaXplKCksIHNpemVvZih1bnNpZ25lZCksIGNvbXBhcmVL
ZXlzRm9yUVNvcnQpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBrZXlzLnNpemUoKTsK
ICAgICAgICAgICAgICAgICB3aGlsZSAoaSkgewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbmRleCA9IGtleXNbLS1pXTsKQEAgLTExOTEsMTMgKzExOTEsMTMgQEAgdm9pZCBKU0FycmF5
Ojpzb3J0Q29tcGFjdGVkVmVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgQ29udGlndW91c0RhdGE8U3Rv
cmFnZVR5cGU+IGQKICAgICAgICAgCiAjaWYgSEFWRShNRVJHRVNPUlQpCiAgICAgaWYgKGlzU29y
dGluZ1ByaW1pdGl2ZVZhbHVlcykKLSAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVl
cy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9y
UVNvcnQpOworICAgICAgICBxc29ydCh2YWx1ZXMuZGF0YSgpLCB2YWx1ZXMuc2l6ZSgpLCBzaXpl
b2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICAgICBl
bHNlCi0gICAgICAgIG1lcmdlc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6
ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAg
ICAgIG1lcmdlc29ydCh2YWx1ZXMuZGF0YSgpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVT
dHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICNlbHNlCiAgICAgLy8g
RklYTUU6IFRoZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBz
dGFibGUgc29ydC4KICAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3Rh
YmxlIHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0
LgotICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVT
dHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICBxc29ydCh2YWx1
ZXMuZGF0YSgpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFy
ZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICNlbmRpZgogICAgIAogICAgIC8vIElmIHRoZSB0b1N0
cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBz
dG9yYWdlLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVU
cmVlTm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5o
CmluZGV4IDg4ZDU3ZjNkZDRlNzk3NjlkMWQwNmMzYTg1OTEwMWI1NTVjNmE4M2YuLmRkM2MxMjFk
MGViYjE2ZThhNTI0NjFmYWFjZGJiYjRkOTg3ZDcyYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgVmVjdG9yPE1hcEVudHJ5Kj4gZW50cmllczsKICAgICAgICAgZm9yIChNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi0+YmVnaW4oKTsgaXQgIT0gbV9jaGlsZHJlbi0+ZW5kKCk7
ICsraXQpCiAgICAgICAgICAgICBlbnRyaWVzLmFwcGVuZCgmKml0KTsKLSAgICAgICAgcXNvcnQo
ZW50cmllcy5iZWdpbigpLCBlbnRyaWVzLnNpemUoKSwgc2l6ZW9mKE1hcEVudHJ5KiksIGNvbXBh
cmVFbnRyaWVzKTsKKyAgICAgICAgcXNvcnQoZW50cmllcy5kYXRhKCksIGVudHJpZXMuc2l6ZSgp
LCBzaXplb2YoTWFwRW50cnkqKSwgY29tcGFyZUVudHJpZXMpOwogCiAgICAgICAgIC8vIEl0ZXJh
dGUgb3ZlciB0aGUgY2hpbGRyZW4gaW4gc2FtcGxlLWZyZXF1ZW5jeSBvcmRlci4KICAgICAgICAg
Zm9yIChzaXplX3QgZSA9IDA7IGUgPCBlbnRyaWVzLnNpemUoKTsgKytlKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCmluZGV4IGUzYTNhOTMyY2U3ZWQ3MzhmMTk4NmIyYmYy
Yjc0M2UwNDIzYTNiMjUuLmQyNjhlNTllMTJiYjRlODM2OGNlMzkyMDY4NzhhYzgxNjJlM2I0MmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCkBAIC0yMjMsNyArMjIzLDcg
QEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAg
ICBpZiAoY2hhckNsYXNzLT5tX3Jhbmdlcy5zaXplKCkpIHsKICAgICAgICAgICAgIHVuc2lnbmVk
IG1hdGNoSW5kZXggPSAwOwogICAgICAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7Ci0gICAgICAg
ICAgICBtYXRjaENoYXJhY3RlckNsYXNzUmFuZ2UoY2hhcmFjdGVyLCBmYWlsdXJlcywgbWF0Y2hE
ZXN0LCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLmJlZ2luKCksIGNoYXJDbGFzcy0+bV9yYW5nZXMuc2l6
ZSgpLCAmbWF0Y2hJbmRleCwgY2hhckNsYXNzLT5tX21hdGNoZXMuYmVnaW4oKSwgY2hhckNsYXNz
LT5tX21hdGNoZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3NSYW5n
ZShjaGFyYWN0ZXIsIGZhaWx1cmVzLCBtYXRjaERlc3QsIGNoYXJDbGFzcy0+bV9yYW5nZXMuZGF0
YSgpLCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUoKSwgJm1hdGNoSW5kZXgsIGNoYXJDbGFzcy0+
bV9tYXRjaGVzLmRhdGEoKSwgY2hhckNsYXNzLT5tX21hdGNoZXMuc2l6ZSgpKTsKICAgICAgICAg
ICAgIHdoaWxlIChtYXRjaEluZGV4IDwgY2hhckNsYXNzLT5tX21hdGNoZXMuc2l6ZSgpKQogICAg
ICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNoYXJhY3Rlciwg
SW1tMzIoKHVuc2lnbmVkIHNob3J0KWNoYXJDbGFzcy0+bV9tYXRjaGVzW21hdGNoSW5kZXgrK10p
KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGZmNDhk
YTBjYzUzMTI4MmExMmQwZDUxMDZjNjYwMzVmMTU1ZDkxNTYuLjFiYTVjZmQ3ODk4ZmQ5ZTk2NTk1
YmZkNWE0Nzc0ZmVmMWViZjRmODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtOTgsNiArOTgsNyBAQAogCQlBNzQ4NzQ1MjE3QTBCREFFMDBGQTA0Q0IgLyog
U2l4Q2hhcmFjdGVySGFzaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNzQ4NzQ0RjE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5j
cHAgKi87IH07CiAJCUE3NDg3NDUzMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNo
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzQ4NzQ1
MDE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5oICovOyB9OwogCQlBNzQ4NzQ1
NDE3QTBCREFFMDBGQTA0Q0IgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzQ4NzQ1MTE3QTBCREFFMDBGQTA0
Q0IgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0LmggKi87IH07CisJCUE3REMyRjA0MUEwOUEyMkQw
MDcyRjRFMyAvKiBJbmRleGVkSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3REMyRjAzMUEwOTlERTMwMDcyRjRFMyAvKiBJbmRleGVkSXRl
cmF0b3IuaCAqLzsgfTsKIAkJQTdFNjQzQzYxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXByZXNzaW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTY0
M0M0MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21wcmVzc2lvbi5jcHAgKi87IH07CiAJCUE3RTY0M0M3
MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21wcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdFNjQzQzUxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXBy
ZXNzaW9uLmggKi87IH07CiAJCUE4NzZEQkQ4MTUxODE2RTUwMERBREI5NSAvKiBQbGF0Zm9ybS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3NkRCRDcx
NTE4MTZFNTAwREFEQjk1IC8qIFBsYXRmb3JtLmggKi87IH07CkBAIC0zODksNiArMzkwLDcgQEAK
IAkJQTc0ODc0NEYxN0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l4Q2hhcmFjdGVySGFzaC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NDg3NDUwMTdBMEJEQUUwMEZBMDRDQiAvKiBT
aXhDaGFyYWN0ZXJIYXNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpeENo
YXJhY3Rlckhhc2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc0ODc0NTExN0Ew
QkRBRTAwRkEwNENCIC8qIFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdHJpbmdIYXNoRHVtcENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTdEQzJGMDMxQTA5OURFMzAwNzJGNEUzIC8qIEluZGV4ZWRJdGVyYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGVkSXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTdFNjQzQzQxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXByZXNzaW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXByZXNzaW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdFNjQzQzUxN0M1NDIzQjAwM0JCMTZCIC8qIENv
bXByZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXByZXNzaW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4NzZEQkQ3MTUxODE2RTUwMERBREI5
NSAvKiBQbGF0Zm9ybS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9y
bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODkyLDYgKzg5NCw3IEBACiAJCQkJ
OTc0Q0ZDOEQxNkE0RjMyNzAwNkQ1NDA0IC8qIFdlYWtQdHIuaCAqLywKIAkJCQlBOEE0NzM3QTE1
MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5jcHAgKi8sCiAJCQkJQThBNDczN0IxNTFB
ODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCAqLywKKwkJCQlBN0RDMkYwMzFBMDk5REUz
MDA3MkY0RTMgLyogSW5kZXhlZEl0ZXJhdG9yLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHd0ZjsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMDY1LDYgKzEwNjgsNyBAQAogCQkJCUE4
QTQ3M0FEMTUxQTgyNUIwMDQxMjNGRiAvKiBjYWNoZWQtcG93ZXJzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzQ1RTE1MUE4MjVCMDA0MTIzRkYgLyogQ2hhcmFjdGVyTmFtZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3Mzk0MTUxQTgyNUIwMDQxMjNGRiAvKiBDaGVja2VkQXJpdGhtZXRp
Yy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTdEQzJGMDQxQTA5QTIyRDAwNzJGNEUzIC8qIEluZGV4
ZWRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOTUxNTFBODI1QjAwNDEyM0ZG
IC8qIENoZWNrZWRCb29sZWFuLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1RjE1MUE4MjVC
MDA0MTIzRkYgLyogQ29sbGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzRFREU2MTY5NjE0
OTYwMEY2NTA0MSAvKiBDb21tYVByaW50ZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvSW5kZXhlZEl0ZXJhdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9JbmRleGVk
SXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZTZlMTlhYjBlZGRhYWYwMGQzN2EyNzcyNzEyMjJhNmRi
ZmNlZjUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvSW5kZXhlZEl0ZXJhdG9y
LmgKQEAgLTAsMCArMSw0ODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdURl9JbmRleGVkSXRlcmF0b3JfaAorI2RlZmluZSBXVEZfSW5k
ZXhlZEl0ZXJhdG9yX2gKKworbmFtZXNwYWNlIFdURiB7CisKKyNkZWZpbmUgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVyhjaGVjaykgZG8ge1wKKyAgICBpZiAoIShjaGVjaykpXAorICAgICAgICBP
dmVyZmxvd0hhbmRsZXI6Om92ZXJmbG93ZWQoKTtcCisgICAgfSB3aGlsZSAoMCkKKwordGVtcGxh
dGUgPHR5cGVuYW1lIFZlY3RvclR5cGUsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlciA9IENyYXNoT25PdmVyZmxvdz4gc3RydWN0IEluZGV4ZWRJdGVyYXRvciB7CisgICAgdHlw
ZWRlZiBzdHJ1Y3QgSW5kZXhlZEl0ZXJhdG9yPGNvbnN0IFZlY3RvclR5cGUsIGNvbnN0IFQsIE92
ZXJmbG93SGFuZGxlcj4gY29uc3RfaXRlcmF0b3I7CisKKyAgICB0eXBlZGVmIFQgVmFsdWVUeXBl
OworICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKKyAgICB0eXBlZGVmIFZh
bHVlVHlwZSB2YWx1ZV90eXBlOworICAgIHR5cGVkZWYgVmFsdWVUeXBlKiBwb2ludGVyOworICAg
IHR5cGVkZWYgVmFsdWVUeXBlJiByZWZlcmVuY2U7CisgICAgdHlwZWRlZiBzdGQ6OmJpZGlyZWN0
aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgSW5kZXhlZEl0ZXJh
dG9yKCkKKyAgICAgICAgOiBtX3ZlY3RvcihudWxscHRyKQorICAgICAgICAsIG1fcG9zaXRpb24o
MCkKKyAgICB7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yKFZlY3RvclR5cGUmIHZlY3Rv
ciwgVmFsdWVUeXBlKiBwb3NpdGlvbikKKyAgICAgICAgOiBtX3ZlY3RvcigmdmVjdG9yKQorICAg
ICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24gLSB2ZWN0b3IuZGF0YSgpKQorICAgIHsKKyAgICAg
ICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uIDw9IHZlY3Rvci5zaXplKCkp
OworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvcihjb25zdCBJbmRleGVkSXRlcmF0b3ImIG90
aGVyKQorICAgICAgICA6IG1fdmVjdG9yKG90aGVyLm1fdmVjdG9yKQorICAgICAgICAsIG1fcG9z
aXRpb24ob3RoZXIubV9wb3NpdGlvbikKKyAgICB7CisgICAgfQorCisgICAgVmFsdWVUeXBlKiBv
cGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJm1fdmVjdG9yLT5hdChtX3Bvc2l0aW9uKTsgfQor
ICAgIFZhbHVlVHlwZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3ItPmF0KG1f
cG9zaXRpb24pOyB9CisgICAgVmFsdWVUeXBlKiBnZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
SU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uIDw9IG1fdmVjdG9yLT5zaXplKCkp
OworICAgICAgICByZXR1cm4gbV92ZWN0b3ItPmRhdGEoKSArIG1fcG9zaXRpb247CisgICAgfQor
CisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICB7CisgICAgICAgIElOREVY
RURfSVRFUkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA8IG1fdmVjdG9yLT5zaXplKCkpOworICAg
ICAgICBtX3Bvc2l0aW9uKys7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJ
bmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpCisgICAgeworICAgICAgICBJTkRFWEVEX0lU
RVJBVE9SX09WRVJGTE9XKG1fcG9zaXRpb24gPCBtX3ZlY3Rvci0+c2l6ZSgpKTsKKyAgICAgICAg
SW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAgIG1fcG9zaXRpb24rKzsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJh
dG9yLS0oKQorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0
aW9uID4gMCk7CisgICAgICAgIG1fcG9zaXRpb24tLTsKKyAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0tKGludCkKKyAgICB7CisgICAg
ICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA+IDApOworICAgICAgICBJ
bmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgbV9wb3NpdGlvbi0tOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVy
YXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIg
aW50ZWdlciB0eXBlcy4KKyAgICB0eXBlZGVmIHNpemVfdCAoSW5kZXhlZEl0ZXJhdG9yOjoqVW5z
cGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmVjdG9yID8gJkluZGV4ZWRJdGVyYXRvcjo6bV9wb3NpdGlvbiA6IG51
bGxwdHI7IH0KKworCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvcis9KGxvbmcgaW5jcmVt
ZW50KQorICAgIHsKKyAgICAgICAgaWYgKGluY3JlbWVudCA8IDApIHsKKyAgICAgICAgICAgIElO
REVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaW5jcmVtZW50ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50MzJfdD46Om1heCgpKTsKKyAgICAgICAgICAgIHJldHVybiAoKnRoaXMpIC09IHN0YXRpY19j
YXN0PHNpemVfdD4oLWluY3JlbWVudCk7CisgICAgICAgIH0KKyAgICAgICAgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVygoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIG1fcG9z
aXRpb24pID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmNyZW1lbnQpKTsKKyAgICAgICAgbV9wb3Np
dGlvbiArPSBpbmNyZW1lbnQ7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9w
b3NpdGlvbiA8PSBtX3ZlY3Rvci0+c2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAg
IH0KKworICAgIEluZGV4ZWRJdGVyYXRvciYgb3BlcmF0b3ItPShsb25nIGRlY3JlbWVudCkKKyAg
ICB7CisgICAgICAgIGlmIChkZWNyZW1lbnQgPCAwKSB7CisgICAgICAgICAgICBJTkRFWEVEX0lU
RVJBVE9SX09WRVJGTE9XKGRlY3JlbWVudCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+
OjptYXgoKSk7CisgICAgICAgICAgICByZXR1cm4gKCp0aGlzKSArPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KC1kZWNyZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9P
VkVSRkxPVyhzdGF0aWNfY2FzdDxzaXplX3Q+KGRlY3JlbWVudCkgPD0gbV9wb3NpdGlvbik7Cisg
ICAgICAgIG1fcG9zaXRpb24gLT0gZGVjcmVtZW50OworICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvcis9KHNpemVfdCBpbmNyZW1lbnQp
CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKChzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpIC0gbV9wb3NpdGlvbikgPiBpbmNyZW1lbnQpOworICAgICAg
ICBtX3Bvc2l0aW9uICs9IGluY3JlbWVudDsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVS
RkxPVyhtX3Bvc2l0aW9uIDw9IG1fdmVjdG9yLT5zaXplKCkpOworICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvci09KHNpemVfdCBkZWNy
ZW1lbnQpCisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGRlY3JlbWVu
dCA8PSBtX3Bvc2l0aW9uKTsKKyAgICAgICAgbV9wb3NpdGlvbiAtPSBkZWNyZW1lbnQ7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJhdG9y
Kz0oaW50MzJfdCBpbmNyZW1lbnQpCisgICAgeworICAgICAgICBpZiAoaW5jcmVtZW50IDwgMCkg
eworICAgICAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpbmNyZW1lbnQgIT0gc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpOworICAgICAgICAgICAgcmV0dXJuICgq
dGhpcykgLT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtaW5jcmVtZW50KTsKKyAgICAgICAgfQorICAg
ICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVf
dD46Om1heCgpIC0gbV9wb3NpdGlvbikgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluY3JlbWVudCkp
OworICAgICAgICBtX3Bvc2l0aW9uICs9IGluY3JlbWVudDsKKyAgICAgICAgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uIDw9IG1fdmVjdG9yLT5zaXplKCkpOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvci09KGlu
dDMyX3QgZGVjcmVtZW50KQorICAgIHsKKyAgICAgICAgaWYgKGRlY3JlbWVudCA8IDApIHsKKyAg
ICAgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coZGVjcmVtZW50ICE9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKTsKKyAgICAgICAgICAgIHJldHVybiAoKnRoaXMp
ICs9IHN0YXRpY19jYXN0PHNpemVfdD4oLWRlY3JlbWVudCk7CisgICAgICAgIH0KKworICAgICAg
ICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKHN0YXRpY19jYXN0PHNpemVfdD4oZGVjcmVtZW50
KSA8PSBtX3Bvc2l0aW9uKTsKKyAgICAgICAgbV9wb3NpdGlvbiAtPSBkZWNyZW1lbnQ7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3Ir
KHNpemVfdCBpbmNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3Ig
cmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBpbmNyZW1lbnQ7CisgICAg
fQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLShzaXplX3QgZGVjcmVtZW50KSBjb25z
dAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAg
IHJldHVybiByZXN1bHQgLT0gZGVjcmVtZW50OworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRv
ciBvcGVyYXRvcisoaW50MzJfdCBpbmNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRl
eGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBpbmNy
ZW1lbnQ7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLShpbnQzMl90IGRl
Y3JlbWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRo
aXMpOworICAgICAgICByZXR1cm4gcmVzdWx0IC09IGRlY3JlbWVudDsKKyAgICB9CisKKyAgICBJ
bmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKHVuc2lnbmVkIGxvbmcgbG9uZyBpbmNyZW1lbnQpIGNv
bnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGluY3JlbWVudCk7CisgICAg
fQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLSh1bnNpZ25lZCBsb25nIGxvbmcgZGVj
cmVtZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhp
cyk7CisgICAgICAgIHJldHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihkZWNyZW1l
bnQpOworICAgIH0KKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKGxvbmcgbG9uZyBpbmNy
ZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlz
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGluY3JlbWVu
dCk7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLShsb25nIGxvbmcgZGVj
cmVtZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhp
cyk7CisgICAgICAgIHJldHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihkZWNyZW1l
bnQpOworICAgIH0KKworI2lmIF9fU0laRU9GX1NJWkVfVF9fICE9IF9fU0laRU9GX0lOVF9fCisg
ICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yKyh1bnNpZ25lZCBpbmNyZW1lbnQpIGNvbnN0Cisg
ICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGluY3JlbWVudCk7CisgICAgfQorCisg
ICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLSh1bnNpZ25lZCBkZWNyZW1lbnQpIGNvbnN0Cisg
ICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlY3JlbWVudCk7CisgICAgfQorI2Vu
ZGlmCisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKGxvbmcgaW5jcmVtZW50KSBjb25z
dAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAg
IHJldHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmNyZW1lbnQpOworICAgIH0K
KworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0obG9uZyBkZWNyZW1lbnQpIGNvbnN0Cisg
ICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlY3JlbWVudCk7CisgICAgfQorCisg
ICAgcHRyZGlmZl90IG9wZXJhdG9yLShjb25zdCBjb25zdF9pdGVyYXRvciYgcmlnaHQpIGNvbnN0
CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1fdmVjdG9yID09IHJp
Z2h0Lm1fdmVjdG9yKTsKKyAgICAgICAgcmV0dXJuIG1fcG9zaXRpb24gLSByaWdodC5tX3Bvc2l0
aW9uOworICAgIH0KKworICAgIHB0cmRpZmZfdCBvcGVyYXRvci0oY29uc3QgVmFsdWVUeXBlKiBy
aWdodCkgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cocmln
aHQgPj0gbV92ZWN0b3ItPmRhdGEoKSk7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZM
T1cobV9wb3NpdGlvbiA+PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHJpZ2h0IC0gbV92ZWN0b3ItPmRh
dGEoKSkpOworICAgICAgICByZXR1cm4gZ2V0KCkgLSByaWdodDsKKyAgICB9CisKKyAgICB2b2lk
IG9wZXJhdG9yPShjb25zdCBJbmRleGVkSXRlcmF0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAg
bV92ZWN0b3IgPSBvdGhlci5tX3ZlY3RvcjsKKyAgICAgICAgbV9wb3NpdGlvbiA9IG90aGVyLm1f
cG9zaXRpb247CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZM
T1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA9
PSBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
Y29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVu
c2FmZUdldCgpICE9IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhF
RF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0
dXJuIHVuc2FmZUdldCgpID09IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVu
c2FmZUdldCgpICE9IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZh
bHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09W
RVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5zYWZlR2V0
KCkgPCBvdGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgVmFsdWVUeXBl
KiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1co
aXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA8PSBv
dGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBjb25zdF9pdGVyYXRvciYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlz
U2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPCBvdGhl
ci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgY29uc3Rf
aXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9P
VkVSRkxPVyhzYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQo
KSA8PSBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPihjb25z
dCBJbmRleGVkSXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9J
VEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJu
IHVuc2FmZUdldCgpID4gb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAg
ICAgIHJldHVybiB1bnNhZmVHZXQoKSA+PSBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAg
ICBib29sIG9wZXJhdG9yPihjb25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsK
KyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpID4gb3RoZXI7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvcj49KGNvbnN0IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJ
TkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAg
ICByZXR1cm4gdW5zYWZlR2V0KCkgPj0gb3RoZXI7CisgICAgfQorCisgICAgb3BlcmF0b3IgY29u
c3RfaXRlcmF0b3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3RfaXRlcmF0b3IgcmVzdWx0
OworICAgICAgICByZXN1bHQubV92ZWN0b3IgPSBtX3ZlY3RvcjsKKyAgICAgICAgcmVzdWx0Lm1f
cG9zaXRpb24gPSBtX3Bvc2l0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIFZlY3RvclR5cGUqIG1fdmVjdG9yOworICAgIHNpemVfdCBtX3Bvc2l0aW9uOworCisgICAg
Ym9vbCBpc1NhZmVUb0NvbXBhcmUoY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiAhbV92ZWN0b3IgfHwgIW90aGVyLm1fdmVj
dG9yOworICAgIH0KKworICAgIGJvb2wgaXNTYWZlVG9Db21wYXJlKGNvbnN0IFZhbHVlVHlwZSog
dmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGlmICghbV92ZWN0b3IpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgc2l6ZV90IGRlbHRhID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pih2YWx1ZSAtIG1f
dmVjdG9yLT5kYXRhKCkpOworICAgICAgICByZXR1cm4gZGVsdGEgPD0gbV92ZWN0b3ItPnNpemUo
KTsKKyAgICB9CisKKyAgICBWYWx1ZVR5cGUqIHVuc2FmZUdldCgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoIW1fdmVjdG9yKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiBnZXQoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgdHlwZW5hbWUg
SW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPjo6VmFsdWVUeXBl
KiBnZXRQdHIoSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiBw
KQoreworICAgIHJldHVybiBwLmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgcHRyZGlm
Zl90IG9wZXJhdG9yLShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRv
cjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIElOREVYRURf
SVRFUkFUT1JfT1ZFUkZMT1cobGVmdCA+PSByaWdodC5tX3ZlY3Rvci0+ZGF0YSgpKTsKKyAgICBJ
TkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGxlZnQgPD0gcmlnaHQubV92ZWN0b3ItPmVuZCgpLmdl
dCgpKTsKKyAgICByZXR1cm4gbGVmdCAtIHJpZ2h0LmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Citp
bmxpbmUgcHRyZGlmZl90IG9wZXJhdG9yLShWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJ
dGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIElO
REVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobGVmdCA+PSByaWdodC5tX3ZlY3Rvci0+ZGF0YSgpKTsK
KyAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGxlZnQgPD0gcmlnaHQubV92ZWN0b3ItPmVu
ZCgpLmdldCgpKTsKKyAgICByZXR1cm4gbGVmdCAtIHJpZ2h0LmdldCgpOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXI+CitpbmxpbmUgcHRyZGlmZl90IG9wZXJhdG9yLShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNv
bnN0IEluZGV4ZWRJdGVyYXRvcjxjb25zdCBULCBjb25zdCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFu
ZGxlcj4mIHJpZ2h0KQoreworICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobGVmdCA+PSBy
aWdodC5tX3ZlY3Rvci0+ZGF0YSgpKTsKKyAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGxl
ZnQgPD0gcmlnaHQubV92ZWN0b3ItPmVuZCgpLmdldCgpKTsKKyAgICByZXR1cm4gbGVmdCAtIHJp
Z2h0LmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBl
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFZhbHVl
VHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dI
YW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID09IGxlZnQ7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25z
dCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkK
K3sKKyAgICByZXR1cm4gcmlnaHQgPT0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJv
b2wgb3BlcmF0b3IhPShWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBW
YWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCAh
PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZh
bHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZs
b3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ICE9IGxlZnQ7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPD0oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJ
bmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sK
KyAgICByZXR1cm4gcmlnaHQgPj0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wg
b3BlcmF0b3I8PShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxU
LCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdo
dCA+PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBl
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KFZhbHVl
VHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dI
YW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0IDw9IGxlZnQ7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25z
dCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkK
K3sKKyAgICByZXR1cm4gcmlnaHQgPD0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJv
b2wgb3BlcmF0b3I8KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZh
bHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID4g
bGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZhbHVl
VHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dI
YW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID4gbGVmdDsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I+KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhl
ZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAg
cmV0dXJuIHJpZ2h0IDwgbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0
b3I+KGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVl
VHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0IDwgbGVm
dDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFZlY3RvclR5cGUsIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4gc3RydWN0IEluZGV4ZWRJdGVyYXRvclNlbGVjdG9yIHsKKyAgICB0eXBlZGVmIHR5
cGVuYW1lIFZlY3RvclR5cGU6OlZhbHVlVHlwZSBWYWx1ZVR5cGU7CisgICAgdHlwZWRlZiBJbmRl
eGVkSXRlcmF0b3I8VmVjdG9yVHlwZSwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+IGl0ZXJh
dG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3I6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0
X2l0ZXJhdG9yOworICAgIHN0YXRpYyBpdGVyYXRvciBtYWtlSXRlcmF0b3IoVmVjdG9yVHlwZSYg
dmVjdG9yLCBWYWx1ZVR5cGUqIHApIHsgcmV0dXJuIGl0ZXJhdG9yKHZlY3RvciwgcCk7IH0KKyAg
ICBzdGF0aWMgY29uc3RfaXRlcmF0b3IgbWFrZUNvbnN0SXRlcmF0b3IoY29uc3QgVmVjdG9yVHlw
ZSYgdmVjdG9yLCBjb25zdCBWYWx1ZVR5cGUqIHApIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHZl
Y3RvciwgcCk7IH0KK307CisKKyN1bmRlZiBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XCisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaCBi
L1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCmluZGV4IGE1NWQ3YWVlYWI4NGI5YzQ5
NTE5NmU4ZTIzMGExZGMxNzg1MTkzYWIuLjgxMWU5ZmZjZWEzMzdhNmM3ZDhiMjkxNjMwZTJhZmRm
OGU1NjYzOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCkBAIC04Myw3ICs4Myw3IEBAIHB1
YmxpYzoKICAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5yZWZDb3VudCA9IDE7
CiAgICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+bGVuZ3RoID0gb3RoZXIuc2l6
ZSgpOwogICAgICAgICBBU1NFUlQoSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5sZW5ndGgg
PT0gb3RoZXIuc2l6ZSgpKTsKLSAgICAgICAgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD46OnVuaW5p
dGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpLCBtX2RhdGEpOworICAgICAg
ICBWZWN0b3JUeXBlT3BlcmF0aW9uczxUPjo6dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90aGVy
LmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuZW5kKCkpLCBtX2RhdGEpOwogICAgIH0KICAgICAKICAg
ICBSZWZDb3VudGVkQXJyYXkmIG9wZXJhdG9yPShjb25zdCBSZWZDb3VudGVkQXJyYXkmIG90aGVy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9W
ZWN0b3IuaAppbmRleCAyNzQ1NjhhNjkxYzY0YTAzNDIzYTRmMmI3MzQ4NzdlNjIwNzJkOTFlLi40
YWFhNDhhYzI0YTQyZmU5OWE4MDhlYTdiMWVkMmI4ZDA4MjJjMDA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9WZWN0b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaApAQCAtMjgs
NiArMjgsOCBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0
aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvR2V0
UHRyLmg+CisjaW5jbHVkZSA8d3RmL0luZGV4ZWRJdGVyYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9N
YWxsb2NQdHIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CkBAIC01NTQsMTQgKzU1NiwxNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IDAsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciA9
IENyYQogY2xhc3MgVmVjdG9yIDogcHJpdmF0ZSBWZWN0b3JCdWZmZXI8VCwgaW5saW5lQ2FwYWNp
dHk+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHByaXZhdGU6CisKICAgICB0eXBl
ZGVmIFZlY3RvckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eT4gQmFzZTsKICAgICB0eXBlZGVmIFZl
Y3RvclR5cGVPcGVyYXRpb25zPFQ+IFR5cGVPcGVyYXRpb25zOworICAgIHR5cGVkZWYgSW5kZXhl
ZEl0ZXJhdG9yU2VsZWN0b3I8VmVjdG9yLCBPdmVyZmxvd0hhbmRsZXI+IEl0ZXJhdG9yU2VsZWN0
b3I7CiAKIHB1YmxpYzoKICAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOwogCi0gICAgdHlwZWRlZiBU
KiBpdGVyYXRvcjsKLSAgICB0eXBlZGVmIGNvbnN0IFQqIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5
cGVkZWYgdHlwZW5hbWUgSXRlcmF0b3JTZWxlY3Rvcjo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAg
dHlwZWRlZiB0eXBlbmFtZSBJdGVyYXRvclNlbGVjdG9yOjpjb25zdF9pdGVyYXRvciBjb25zdF9p
dGVyYXRvcjsKKwogICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiBy
ZXZlcnNlX2l0ZXJhdG9yOwogICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0
X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogCkBAIC01NzQsMTQgKzU3OSwxNCBA
QCBwdWJsaWM6CiAgICAgICAgIDogQmFzZShzaXplLCBzaXplKQogICAgIHsKICAgICAgICAgaWYg
KGJlZ2luKCkpCi0gICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShiZWdpbigp
LCBlbmQoKSk7CisgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShnZXRQdHIo
YmVnaW4oKSksIGdldFB0cihlbmQoKSkpOwogICAgIH0KIAogICAgIFZlY3Rvcih1bnNpZ25lZCBz
aXplLCBjb25zdCBUJiB2YWwpCiAgICAgICAgIDogQmFzZShzaXplLCBzaXplKQogICAgIHsKICAg
ICAgICAgaWYgKGJlZ2luKCkpCi0gICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFs
aXplZEZpbGwoYmVnaW4oKSwgZW5kKCksIHZhbCk7CisgICAgICAgICAgICBUeXBlT3BlcmF0aW9u
czo6dW5pbml0aWFsaXplZEZpbGwoZ2V0UHRyKGJlZ2luKCkpLCBnZXRQdHIoZW5kKCkpLCB2YWwp
OwogICAgIH0KIAogICAgIFZlY3RvcihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4gaW5pdGlhbGl6
ZXJMaXN0KQpAQCAtNjQ1LDEwICs2NTAsMTAgQEAgcHVibGljOgogICAgIGNvbnN0IFQqIGRhdGEo
KSBjb25zdCB7IHJldHVybiBCYXNlOjpidWZmZXIoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qg
ZGF0YU1lbW9yeU9mZnNldCgpIHsgcmV0dXJuIEJhc2U6OmJ1ZmZlck1lbW9yeU9mZnNldCgpOyB9
CiAKLSAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGRhdGEoKTsgfQotICAgIGl0ZXJhdG9y
IGVuZCgpIHsgcmV0dXJuIGJlZ2luKCkgKyBtX3NpemU7IH0KLSAgICBjb25zdF9pdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIGRhdGEoKTsgfQotICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgKyBtX3NpemU7IH0KKyAgICBpdGVyYXRvciBiZWdpbigp
IHsgcmV0dXJuIEl0ZXJhdG9yU2VsZWN0b3I6Om1ha2VJdGVyYXRvcigqdGhpcywgZGF0YSgpKTsg
fQorICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGJlZ2luKCkgKyBzaXplKCk7IH0KKyAgICBj
b25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIEl0ZXJhdG9yU2VsZWN0b3I6Om1h
a2VDb25zdEl0ZXJhdG9yKCp0aGlzLCBkYXRhKCkpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSArIHNpemUoKTsgfQogCiAgICAgcmV2ZXJzZV9pdGVy
YXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogICAgIHJl
dmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7
IH0KQEAgLTY4Myw2ICs2ODgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKCkgeyBzaHJp
bmtDYXBhY2l0eSgwKTsgfQogCisgICAgdm9pZCBhcHBlbmQoY29uc3RfaXRlcmF0b3IsIHVuc2ln
bmVkKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIGFwcGVuZChjb25zdCBVKiwgdW5z
aWduZWQpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKFUmJik7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCB1bmNoZWNrZWRBcHBlbmQoVSYmIHZhbCk7CkBAIC03
NDYsNyArNzUyLDcgQEAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+
OjpWZWN0b3IoY29uc3QgVmVjdG9yJiBvdGhlcikKICAgICA6IEJhc2Uob3RoZXIuY2FwYWNpdHko
KSwgb3RoZXIuc2l6ZSgpKQogewogICAgIGlmIChiZWdpbigpKQotICAgICAgICBUeXBlT3BlcmF0
aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCksIGJlZ2lu
KCkpOworICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90
aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyPgpAQCAtNzU1LDcgKzc2MSw3IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6VmVjdG9yKGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFj
aXR5CiAgICAgOiBCYXNlKG90aGVyLmNhcGFjaXR5KCksIG90aGVyLnNpemUoKSkKIHsKICAgICBp
ZiAoYmVnaW4oKSkKLSAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90
aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpLCBiZWdpbigpKTsKKyAgICAgICAgVHlwZU9wZXJhdGlv
bnM6OnVuaW5pdGlhbGl6ZWRDb3B5KGdldFB0cihvdGhlci5iZWdpbigpKSwgZ2V0UHRyKG90aGVy
LmVuZCgpKSwgZ2V0UHRyKGJlZ2luKCkpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5z
aWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KQEAgLTc3Miw4
ICs3NzgsOCBAQCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj4mIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYQogICAgICAgICBBU1NFUlQoYmVnaW4o
KSk7CiAgICAgfQogICAgIAotICAgIHN0ZDo6Y29weShvdGhlci5iZWdpbigpLCBvdGhlci5iZWdp
bigpICsgc2l6ZSgpLCBiZWdpbigpKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXpl
ZENvcHkob3RoZXIuYmVnaW4oKSArIHNpemUoKSwgb3RoZXIuZW5kKCksIGVuZCgpKTsKKyAgICBz
dGQ6OmNvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuYmVnaW4oKSArIHNp
emUoKSksIGdldFB0cihiZWdpbigpKSk7CisgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6
ZWRDb3B5KGdldFB0cihvdGhlci5iZWdpbigpICsgc2l6ZSgpKSwgZ2V0UHRyKG90aGVyLmVuZCgp
KSwgZ2V0UHRyKGVuZCgpKSk7CiAgICAgbV9zaXplID0gb3RoZXIuc2l6ZSgpOwogCiAgICAgcmV0
dXJuICp0aGlzOwpAQCAtNzk3LDkgKzgwMyw5IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyPiYgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhCiAg
ICAgICAgIHJlc2VydmVDYXBhY2l0eShvdGhlci5zaXplKCkpOwogICAgICAgICBBU1NFUlQoYmVn
aW4oKSk7CiAgICAgfQotICAgIAotICAgIHN0ZDo6Y29weShvdGhlci5iZWdpbigpLCBvdGhlci5i
ZWdpbigpICsgc2l6ZSgpLCBiZWdpbigpKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFs
aXplZENvcHkob3RoZXIuYmVnaW4oKSArIHNpemUoKSwgb3RoZXIuZW5kKCksIGVuZCgpKTsKKwor
ICAgIHN0ZDo6Y29weShnZXRQdHIob3RoZXIuYmVnaW4oKSksIGdldFB0cihvdGhlci5iZWdpbigp
ICsgc2l6ZSgpKSwgZ2V0UHRyKGJlZ2luKCkpKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0
aWFsaXplZENvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkgKyBzaXplKCkpLCBnZXRQdHIob3RoZXIu
ZW5kKCkpLCBnZXRQdHIoZW5kKCkpKTsKICAgICBtX3NpemUgPSBvdGhlci5zaXplKCk7CiAKICAg
ICByZXR1cm4gKnRoaXM7CkBAIC04NTksOCArODY1LDggQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmZpbGwoY29uc3QgVCYgdmFsLCB1bnNpZ25lZCBu
ZXcKICAgICAgICAgQVNTRVJUKGJlZ2luKCkpOwogICAgIH0KICAgICAKLSAgICBzdGQ6OmZpbGwo
YmVnaW4oKSwgZW5kKCksIHZhbCk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRG
aWxsKGVuZCgpLCBiZWdpbigpICsgbmV3U2l6ZSwgdmFsKTsKKyAgICBzdGQ6OmZpbGwoZ2V0UHRy
KGJlZ2luKCkpLCBnZXRQdHIoZW5kKCkpLCB2YWwpOworICAgIFR5cGVPcGVyYXRpb25zOjp1bmlu
aXRpYWxpemVkRmlsbChnZXRQdHIoZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkgKyBuZXdTaXplLCB2
YWwpOwogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiB9CiAKQEAgLTg4MSwxMyArODg3LDEzIEBAIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpleHBhbmRDYXBh
Y2l0eSh1bnNpZ25lZCBuZXdNaW5DCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogVCogVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpleHBhbmRDYXBhY2l0eSh1bnNpZ25lZCBuZXdN
aW5DYXBhY2l0eSwgVCogcHRyKQogewotICAgIGlmIChwdHIgPCBiZWdpbigpIHx8IHB0ciA+PSBl
bmQoKSkgeworICAgIGlmIChwdHIgPCBnZXRQdHIoYmVnaW4oKSkgfHwgcHRyID49IGdldFB0cihl
bmQoKSkpIHsKICAgICAgICAgZXhwYW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpOwogICAgICAg
ICByZXR1cm4gcHRyOwogICAgIH0KLSAgICB1bnNpZ25lZCBpbmRleCA9IHB0ciAtIGJlZ2luKCk7
CisgICAgdW5zaWduZWQgaW5kZXggPSBwdHIgLSBnZXRQdHIoYmVnaW4oKSk7CiAgICAgZXhwYW5k
Q2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpOwotICAgIHJldHVybiBiZWdpbigpICsgaW5kZXg7Cisg
ICAgcmV0dXJuIGdldFB0cihiZWdpbigpKSArIGluZGV4OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgpA
QCAtODk5LDE1ICs5MDUsMTUgQEAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlcj46OnRyeUV4cGFuZENhcGFjaXR5KHVuc2lnbmVkIG5ld00KIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXI+CiBjb25zdCBUKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46
OnRyeUV4cGFuZENhcGFjaXR5KHVuc2lnbmVkIG5ld01pbkNhcGFjaXR5LCBjb25zdCBUKiBwdHIp
CiB7Ci0gICAgaWYgKHB0ciA8IGJlZ2luKCkgfHwgcHRyID49IGVuZCgpKSB7CisgICAgaWYgKHB0
ciA8IGdldFB0cihiZWdpbigpKSB8fCBwdHIgPj0gZ2V0UHRyKGVuZCgpKSkgewogICAgICAgICBp
ZiAoIXRyeUV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5KSkKICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KLSAgICB1bnNpZ25lZCBpbmRleCA9IHB0
ciAtIGJlZ2luKCk7CisgICAgdW5zaWduZWQgaW5kZXggPSBwdHIgLSBnZXRQdHIoYmVnaW4oKSk7
CiAgICAgaWYgKCF0cnlFeHBhbmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0eSkpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBiZWdpbigpICsgaW5kZXg7CisgICAgcmV0dXJuIGdldFB0cihi
ZWdpbigpKSArIGluZGV4OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgpAQCAtOTIxLDEyICs5MjcsMTIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIGlubGluZSB2b2lkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVzaXplKHVuc2lnbmVkIHNp
emUpCiB7CiAgICAgaWYgKHNpemUgPD0gbV9zaXplKQotICAgICAgICBUeXBlT3BlcmF0aW9uczo6
ZGVzdHJ1Y3QoYmVnaW4oKSArIHNpemUsIGVuZCgpKTsKKyAgICAgICAgVHlwZU9wZXJhdGlvbnM6
OmRlc3RydWN0KGdldFB0cihiZWdpbigpKSArIHNpemUsIGdldFB0cihlbmQoKSkpOwogICAgIGVs
c2UgewogICAgICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgICAgICBleHBhbmRD
YXBhY2l0eShzaXplKTsKICAgICAgICAgaWYgKGJlZ2luKCkpCi0gICAgICAgICAgICBUeXBlT3Bl
cmF0aW9uczo6aW5pdGlhbGl6ZShlbmQoKSwgYmVnaW4oKSArIHNpemUpOworICAgICAgICAgICAg
VHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoZ2V0UHRyKGVuZCgpKSwgZ2V0UHRyKGJlZ2luKCkp
ICsgc2l6ZSk7CiAgICAgfQogICAgIAogICAgIG1fc2l6ZSA9IHNpemU7CkBAIC05NDMsNyArOTQ5
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlcj4KIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXI+OjpzaHJpbmsodW5zaWduZWQgc2l6ZSkKIHsKICAgICBBU1NFUlQoc2l6ZSA8
PSBtX3NpemUpOwotICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChiZWdpbigpICsgc2l6ZSwg
ZW5kKCkpOworICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChnZXRQdHIoYmVnaW4oKSkgKyBz
aXplLCBnZXRQdHIoZW5kKCkpKTsKICAgICBtX3NpemUgPSBzaXplOwogfQogCkBAIC05NTQsNyAr
OTYwLDcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46
Omdyb3codW5zaWduZWQgc2l6ZSkKICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAg
IGV4cGFuZENhcGFjaXR5KHNpemUpOwogICAgIGlmIChiZWdpbigpKQotICAgICAgICBUeXBlT3Bl
cmF0aW9uczo6aW5pdGlhbGl6ZShlbmQoKSwgYmVnaW4oKSArIHNpemUpOworICAgICAgICBUeXBl
T3BlcmF0aW9uczo6aW5pdGlhbGl6ZShnZXRQdHIoZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkgKyBz
aXplKTsKICAgICBtX3NpemUgPSBzaXplOwogfQogCkBAIC05NjMsMTEgKzk2OSwxMSBAQCB2b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVzZXJ2ZUNhcGFj
aXR5KHVuc2lnbmVkIG5ld0NhcAogewogICAgIGlmIChuZXdDYXBhY2l0eSA8PSBjYXBhY2l0eSgp
KQogICAgICAgICByZXR1cm47Ci0gICAgVCogb2xkQnVmZmVyID0gYmVnaW4oKTsKLSAgICBUKiBv
bGRFbmQgPSBlbmQoKTsKKyAgICBUKiBvbGRCdWZmZXIgPSBnZXRQdHIoYmVnaW4oKSk7CisgICAg
VCogb2xkRW5kID0gZ2V0UHRyKGVuZCgpKTsKICAgICBCYXNlOjphbGxvY2F0ZUJ1ZmZlcihuZXdD
YXBhY2l0eSk7CiAgICAgQVNTRVJUKGJlZ2luKCkpOwotICAgIFR5cGVPcGVyYXRpb25zOjptb3Zl
KG9sZEJ1ZmZlciwgb2xkRW5kLCBiZWdpbigpKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShv
bGRCdWZmZXIsIG9sZEVuZCwgZ2V0UHRyKGJlZ2luKCkpKTsKICAgICBCYXNlOjpkZWFsbG9jYXRl
QnVmZmVyKG9sZEJ1ZmZlcik7CiB9CiAKQEAgLTk3NiwxMiArOTgyLDEyIEBAIGJvb2wgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojp0cnlSZXNlcnZlQ2FwYWNpdHko
dW5zaWduZWQgbmV3CiB7CiAgICAgaWYgKG5ld0NhcGFjaXR5IDw9IGNhcGFjaXR5KCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIFQqIG9sZEJ1ZmZlciA9IGJlZ2luKCk7Ci0gICAgVCogb2xk
RW5kID0gZW5kKCk7CisgICAgVCogb2xkQnVmZmVyID0gZ2V0UHRyKGJlZ2luKCkpOworICAgIFQq
IG9sZEVuZCA9IGdldFB0cihlbmQoKSk7CiAgICAgaWYgKCFCYXNlOjp0cnlBbGxvY2F0ZUJ1ZmZl
cihuZXdDYXBhY2l0eSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBBU1NFUlQoYmVnaW4o
KSk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkp
OworICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBnZXRQdHIoYmVn
aW4oKSkpOwogICAgIEJhc2U6OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KQEAgLTEwMDQsMTcgKzEwMTAsMTcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnNocmlua0NhcGFjaXR5KHVuc2lnbmVkIG5ld0Nh
cGEKICAgICBpZiAobmV3Q2FwYWNpdHkgPCBzaXplKCkpIAogICAgICAgICBzaHJpbmsobmV3Q2Fw
YWNpdHkpOwogCi0gICAgVCogb2xkQnVmZmVyID0gYmVnaW4oKTsKKyAgICBUKiBvbGRCdWZmZXIg
PSBnZXRQdHIoYmVnaW4oKSk7CiAgICAgaWYgKG5ld0NhcGFjaXR5ID4gMCkgewogICAgICAgICBp
ZiAoQmFzZTo6c2hvdWxkUmVhbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSkpIHsKICAgICAgICAg
ICAgIEJhc2U6OnJlYWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgVCogb2xkRW5kID0gZW5kKCk7CisgICAgICAgIFQq
IG9sZEVuZCA9IGdldFB0cihlbmQoKSk7CiAgICAgICAgIEJhc2U6OmFsbG9jYXRlQnVmZmVyKG5l
d0NhcGFjaXR5KTsKLSAgICAgICAgaWYgKGJlZ2luKCkgIT0gb2xkQnVmZmVyKQotICAgICAgICAg
ICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOworICAg
ICAgICBpZiAoZ2V0UHRyKGJlZ2luKCkpICE9IG9sZEJ1ZmZlcikKKyAgICAgICAgICAgIFR5cGVP
cGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBnZXRQdHIoYmVnaW4oKSkpOwogICAg
IH0KIAogICAgIEJhc2U6OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKQEAgLTEwMzQsMTEg
KzEwNDAsMTcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
cj46OmFwcGVuZChjb25zdCBVKiBkYXRhLCB1bnNpZ25lZAogICAgIH0KICAgICBpZiAobmV3U2l6
ZSA8IG1fc2l6ZSkKICAgICAgICAgQ1JBU0goKTsKLSAgICBUKiBkZXN0ID0gZW5kKCk7CisgICAg
VCogZGVzdCA9IGdldFB0cihlbmQoKSk7CiAgICAgVmVjdG9yQ29waWVyPHN0ZDo6aXNfdHJpdmlh
bDxUPjo6dmFsdWUsIFU+Ojp1bmluaXRpYWxpemVkQ29weShkYXRhLCAmZGF0YVtkYXRhU2l6ZV0s
IGRlc3QpOwogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Cit2b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kKGNvbnN0
X2l0ZXJhdG9yIGRhdGEsIHVuc2lnbmVkIGRhdGFTaXplKQoreworICAgIGFwcGVuZChnZXRQdHIo
ZGF0YSksIGRhdGFTaXplKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUg
VT4KIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojp0cnlB
cHBlbmQoY29uc3QgVSogZGF0YSwgdW5zaWduZWQgZGF0YVNpemUpCiB7CkBAIC0xMDUxLDcgKzEw
NjMsNyBAQCBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6
dHJ5QXBwZW5kKGNvbnN0IFUqIGRhdGEsIHVuc2lnbgogICAgIH0KICAgICBpZiAobmV3U2l6ZSA8
IG1fc2l6ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFQqIGRlc3QgPSBlbmQoKTsKKyAg
ICBUKiBkZXN0ID0gZ2V0UHRyKGVuZCgpKTsKICAgICBWZWN0b3JDb3BpZXI8c3RkOjppc190cml2
aWFsPFQ+Ojp2YWx1ZSwgVT46OnVuaW5pdGlhbGl6ZWRDb3B5KGRhdGEsICZkYXRhW2RhdGFTaXpl
XSwgZGVzdCk7CiAgICAgbV9zaXplID0gbmV3U2l6ZTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEw
NjEsNyArMTA3Myw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHRlbXBsYXRlCiBBTFdBWVNfSU5MSU5FIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmQoVSYm
IHZhbHVlKQogewogICAgIGlmIChzaXplKCkgIT0gY2FwYWNpdHkoKSkgewotICAgICAgICBuZXcg
KE5vdE51bGwsIGVuZCgpKSBUKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgICAgICBuZXcg
KE5vdE51bGwsIGdldFB0cihlbmQoKSkpIFQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CiAgICAg
ICAgICsrbV9zaXplOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA3OCw3ICsxMDkwLDcg
QEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmFwcGVu
ZFNsb3dDYXNlKFUmJiB2YWx1ZSkKICAgICBwdHIgPSBleHBhbmRDYXBhY2l0eShzaXplKCkgKyAx
LCBwdHIpOwogICAgIEFTU0VSVChiZWdpbigpKTsKIAotICAgIG5ldyAoTm90TnVsbCwgZW5kKCkp
IFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKKyAgICBuZXcgKE5vdE51bGwsIGdldFB0cihlbmQo
KSkpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKICAgICArK21fc2l6ZTsKIH0KIApAQCAtMTA5
MSwxNCArMTEwMywxNCBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlcj46OnVuY2hlY2tlZEFwcGVuZChVJiYgdmFsdQogICAgIEFTU0VSVChzaXpl
KCkgPCBjYXBhY2l0eSgpKTsKIAogICAgIGF1dG8gcHRyID0gc3RkOjphZGRyZXNzb2YodmFsdWUp
OwotICAgIG5ldyAoTm90TnVsbCwgZW5kKCkpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKKyAg
ICBuZXcgKE5vdE51bGwsIGdldFB0cihlbmQoKSkpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsK
ICAgICArK21fc2l6ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUgVSwg
dW5zaWduZWQgb3RoZXJDYXBhY2l0eT4KIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kVmVjdG9yKGNvbnN0IFZlY3RvcjxVLCBvdGhl
ckNhcGFjaXR5PiYgdmFsKQogewotICAgIGFwcGVuZCh2YWwuYmVnaW4oKSwgdmFsLnNpemUoKSk7
CisgICAgYXBwZW5kKGdldFB0cih2YWwuYmVnaW4oKSksIHZhbC5zaXplKCkpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgpAQCAtMTExMiw4ICsxMTI0LDggQEAgdm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46Omluc2VydCh1bnNp
Z25lZCBwb3NpdGlvbiwgY29uc3QKICAgICB9CiAgICAgaWYgKG5ld1NpemUgPCBtX3NpemUpCiAg
ICAgICAgIENSQVNIKCk7Ci0gICAgVCogc3BvdCA9IGJlZ2luKCkgKyBwb3NpdGlvbjsKLSAgICBU
eXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGVuZCgpLCBzcG90ICsgZGF0YVNp
emUpOworICAgIFQqIHNwb3QgPSBnZXRQdHIoYmVnaW4oKSkgKyBwb3NpdGlvbjsKKyAgICBUeXBl
T3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGdldFB0cihlbmQoKSksIHNwb3QgKyBk
YXRhU2l6ZSk7CiAgICAgVmVjdG9yQ29waWVyPHN0ZDo6aXNfdHJpdmlhbDxUPjo6dmFsdWUsIFU+
Ojp1bmluaXRpYWxpemVkQ29weShkYXRhLCAmZGF0YVtkYXRhU2l6ZV0sIHNwb3QpOwogICAgIG1f
c2l6ZSA9IG5ld1NpemU7CiB9CkBAIC0xMTI5LDggKzExNDEsOCBAQCBpbmxpbmUgdm9pZCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46Omluc2VydCh1bnNpZ25lZCBw
b3NpdGlvbgogICAgICAgICBBU1NFUlQoYmVnaW4oKSk7CiAgICAgfQogCi0gICAgVCogc3BvdCA9
IGJlZ2luKCkgKyBwb3NpdGlvbjsKLSAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5n
KHNwb3QsIGVuZCgpLCBzcG90ICsgMSk7CisgICAgVCogc3BvdCA9IGdldFB0cihiZWdpbigpKSAr
IHBvc2l0aW9uOworICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCwgZ2V0
UHRyKGVuZCgpKSwgc3BvdCArIDEpOwogICAgIG5ldyAoTm90TnVsbCwgc3BvdCkgVChzdGQ6OmZv
cndhcmQ8VT4oKnB0cikpOwogICAgICsrbV9zaXplOwogfQpAQCAtMTEzOCwxNiArMTE1MCwxNiBA
QCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46
Omluc2VydCh1bnNpZ25lZCBwb3NpdGlvbgogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5h
bWUgVSwgdW5zaWduZWQgYz4KIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyPjo6aW5zZXJ0VmVjdG9yKHVuc2lnbmVkIHBvc2l0aW9uLCBjb25zdCBW
ZWN0b3I8VSwgYz4mIHZhbCkKIHsKLSAgICBpbnNlcnQocG9zaXRpb24sIHZhbC5iZWdpbigpLCB2
YWwuc2l6ZSgpKTsKKyAgICBpbnNlcnQocG9zaXRpb24sIGdldFB0cih2YWwuYmVnaW4oKSksIHZh
bC5zaXplKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUodW5zaWduZWQgcG9zaXRpb24p
CiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24gPCBzaXpl
KCkpOwotICAgIFQqIHNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247CisgICAgVCogc3BvdCA9IGdl
dFB0cihiZWdpbigpKSArIHBvc2l0aW9uOwogICAgIHNwb3QtPn5UKCk7Ci0gICAgVHlwZU9wZXJh
dGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90ICsgMSwgZW5kKCksIHNwb3QpOworICAgIFR5cGVP
cGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCArIDEsIGdldFB0cihlbmQoKSksIHNwb3Qp
OwogICAgIC0tbV9zaXplOwogfQogCkBAIC0xMTU2LDEwICsxMTY4LDEwIEBAIGlubGluZSB2b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlKHVuc2ln
bmVkIHBvc2l0aW9uCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9z
aXRpb24gPD0gc2l6ZSgpKTsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihw
b3NpdGlvbiArIGxlbmd0aCA8PSBzaXplKCkpOwotICAgIFQqIGJlZ2luU3BvdCA9IGJlZ2luKCkg
KyBwb3NpdGlvbjsKKyAgICBUKiBiZWdpblNwb3QgPSBnZXRQdHIoYmVnaW4oKSkgKyBwb3NpdGlv
bjsKICAgICBUKiBlbmRTcG90ID0gYmVnaW5TcG90ICsgbGVuZ3RoOwogICAgIFR5cGVPcGVyYXRp
b25zOjpkZXN0cnVjdChiZWdpblNwb3QsIGVuZFNwb3QpOyAKLSAgICBUeXBlT3BlcmF0aW9uczo6
bW92ZU92ZXJsYXBwaW5nKGVuZFNwb3QsIGVuZCgpLCBiZWdpblNwb3QpOworICAgIFR5cGVPcGVy
YXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoZW5kU3BvdCwgZ2V0UHRyKGVuZCgpKSwgYmVnaW5TcG90
KTsKICAgICBtX3NpemUgLT0gbGVuZ3RoOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCAwY2YwOWUxZjVlYzk4
YTg1MTQ0Y2M3MjJkMmE2Y2M0YWU0ZjkzODk4Li4zZWU4MDY4YTNhNzZhNGE0M2FjNjQzMjMyNzcy
NjQzYzE2MTQ5ZDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTE0MzcsOCArMTQzNyw4IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIGlmIChidWZmZXIuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgICAgICBjb25zdCB1aW50OF90KiBwdHIgPSBidWZmZXIuYmVnaW4oKTsKLSAg
ICAgICAgY29uc3QgdWludDhfdCogZW5kID0gYnVmZmVyLmVuZCgpOworICAgICAgICBjb25zdCB1
aW50OF90KiBwdHIgPSBnZXRQdHIoYnVmZmVyLmJlZ2luKCkpOworICAgICAgICBjb25zdCB1aW50
OF90KiBlbmQgPSBnZXRQdHIoYnVmZmVyLmVuZCgpKTsKICAgICAgICAgdWludDMyX3QgdmVyc2lv
bjsKICAgICAgICAgaWYgKCFyZWFkTGl0dGxlRW5kaWFuKHB0ciwgZW5kLCB2ZXJzaW9uKSB8fCB2
ZXJzaW9uID4gQ3VycmVudFZlcnNpb24pCiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggMmQ5Yjc5ZTEzYWJmOTYw
YTYxNGI5NmQyNzA2NjBlNWYzNWUzNDE3Zi4uZTkyZmIyZjc5MGJlNGM1YzE2NzZjNjk4YzViZTFi
YTY1ZTFhNjkxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAt
MjA3MywxMSArMjA3MywxMSBAQCBpbmxpbmUgYm9vbCBTZWFyY2hCdWZmZXI6OmlzQmFkTWF0Y2go
Y29uc3QgVUNoYXIqIG1hdGNoLCBzaXplX3QgbWF0Y2hMZW5ndGgpIGNvbgogICAgIC8vIGNyZWF0
aW5nIGEgbmV3IG9uZSBlYWNoIHRpbWUuCiAgICAgbm9ybWFsaXplQ2hhcmFjdGVycyhtYXRjaCwg
bWF0Y2hMZW5ndGgsIG1fbm9ybWFsaXplZE1hdGNoKTsKIAotICAgIGNvbnN0IFVDaGFyKiBhID0g
bV9ub3JtYWxpemVkVGFyZ2V0LmJlZ2luKCk7Ci0gICAgY29uc3QgVUNoYXIqIGFFbmQgPSBtX25v
cm1hbGl6ZWRUYXJnZXQuZW5kKCk7CisgICAgY29uc3QgVUNoYXIqIGEgPSBnZXRQdHIobV9ub3Jt
YWxpemVkVGFyZ2V0LmJlZ2luKCkpOworICAgIGNvbnN0IFVDaGFyKiBhRW5kID0gZ2V0UHRyKG1f
bm9ybWFsaXplZFRhcmdldC5lbmQoKSk7CiAKLSAgICBjb25zdCBVQ2hhciogYiA9IG1fbm9ybWFs
aXplZE1hdGNoLmJlZ2luKCk7Ci0gICAgY29uc3QgVUNoYXIqIGJFbmQgPSBtX25vcm1hbGl6ZWRN
YXRjaC5lbmQoKTsKKyAgICBjb25zdCBVQ2hhciogYiA9IGdldFB0cihtX25vcm1hbGl6ZWRNYXRj
aC5iZWdpbigpKTsKKyAgICBjb25zdCBVQ2hhciogYkVuZCA9IGdldFB0cihtX25vcm1hbGl6ZWRN
YXRjaC5lbmQoKSk7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAvLyBTa2lwIHJ1bnMg
b2Ygbm9uLWthbmEtbGV0dGVyIGNoYXJhY3RlcnMuIFRoaXMgaXMgbmVjZXNzYXJ5IHNvIHdlIGNh
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXIubW0KaW5kZXggMDA5OGM3NjMxM2Y0Y2M2NjBlOTY4YTkwZDNlOTM4YThiMWJiYzlkZS4u
MjA2MmZkM2UxMjEzZDg2NzE3OTZlYjczOWU4YjU2YzdlMmI3YTU5OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCkBAIC01
NTUsNyArNTU1LDcgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpidWlsZFNlbGVj
dGlvbkhpZ2hsaWdodCgpCiAKICAgICAgICAgaWYgKCFjZ1JlY3RzLmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgQ0dSZWN0IHZpc2libGVSZWN0ID0gbWFpbkZyYW1lVmlldy0+dmlzaWJsZUNvbnRl
bnRSZWN0KCk7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxp
Z2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRo
U3R5bGVBbmREaXJlY3Rpb24obnVsbHB0ciwgY2dSZWN0cy5iZWdpbigpLCBjZ1JlY3RzLnNpemUo
KSwgdmlzaWJsZVJlY3QsIERESGlnaGxpZ2h0Tm9PdXRsaW5lV2l0aEFycm93LCBZRVMsIE5TV3Jp
dGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxE
REhpZ2hsaWdodFJlZj4gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGlnaGxpZ2h0Q3JlYXRlV2l0
aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCBjZ1JlY3Rz
LmRhdGEoKSwgY2dSZWN0cy5zaXplKCksIHZpc2libGVSZWN0LCBEREhpZ2hsaWdodE5vT3V0bGlu
ZVdpdGhBcnJvdywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVTKSk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIG5ld1BvdGVudGlhbEhpZ2hsaWdodHMuYWRkKEhpZ2hs
aWdodDo6Y3JlYXRlRm9yU2VsZWN0aW9uKCp0aGlzLCBkZEhpZ2hsaWdodCwgc2VsZWN0aW9uUmFu
Z2UpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwCmluZGV4IGQxYjkyYjdiNjA5YjQ1MTk5Yzg0YTQ2
YWVlOWZkYjZjNGY3Y2ZlYzUuLjUwM2IwZThkOWJiZjI5MDZjZTczYmViZWJhMDFiZDYwM2VjNzk5
OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRl
ZEZvbnREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdt
ZW50ZWRGb250RGF0YS5jcHAKQEAgLTM5LDggKzM5LDggQEAgU2VnbWVudGVkRm9udERhdGE6On5T
ZWdtZW50ZWRGb250RGF0YSgpCiAKIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBTZWdtZW50ZWRGb250
RGF0YTo6Zm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAogewotICAgIFZlY3Rv
cjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYW5nZXMuZW5kKCk7Ci0g
ICAgZm9yIChWZWN0b3I8Rm9udERhdGFSYW5nZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yYW5n
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgYXV0byBlbmQgPSBtX3Jhbmdlcy5l
bmQoKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKICAgICAgICAgaWYgKGl0LT5mcm9tKCkgPD0gYyAmJiBpdC0+dG8oKSA+PSBjKQogICAg
ICAgICAgICAgcmV0dXJuIGl0LT5mb250RGF0YSgpLmdldCgpOwogICAgIH0KQEAgLTQ5LDggKzQ5
LDggQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIFNlZ21lbnRlZEZvbnREYXRhOjpmb250RGF0YUZv
ckNoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0CiAKIGJvb2wgU2VnbWVudGVkRm9udERhdGE6OmNv
bnRhaW5zQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKIHsKLSAgICBWZWN0b3I8Rm9udERhdGFS
YW5nZT46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwotICAgIGZvciAoVmVj
dG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgIGF1dG8gZW5kID0gbV9yYW5nZXMuZW5kKCk7CisgICAg
Zm9yIChhdXRvIGl0ID0gbV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgIGlmIChjID49IGl0LT5mcm9tKCkgJiYgYyA8PSBpdC0+dG8oKSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KQEAgLTc2LDggKzc2LDggQEAgYm9vbCBTZWdtZW50ZWRGb250RGF0
YTo6aXNDdXN0b21Gb250KCkgY29uc3QKIAogYm9vbCBTZWdtZW50ZWRGb250RGF0YTo6aXNMb2Fk
aW5nKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8Rm9udERhdGFSYW5nZT46OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPEZvbnREYXRhUmFuZ2U+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewor
ICAgIGF1dG8gZW5kID0gbV9yYW5nZXMuZW5kKCk7CisgICAgZm9yIChhdXRvIGl0ID0gbV9yYW5n
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGlmIChpdC0+Zm9udERhdGEo
KS0+aXNMb2FkaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAKaW5k
ZXggMDUxODcxYWM2YzYwZmI2NDM5MjgzMGFhYzZhZDM4NTJhOTRkNDQ3Ni4uZGQwOTYzYTc1MDFh
ZDJlZTA2MzFhNWUxNmQ3OTUxMTExMjIzOWQ1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcApAQCAtMjAwLDcgKzIwMCw3IEBA
IGJvb2wgY29udmVydFdPRkZUb1NmbnQoU2hhcmVkQnVmZmVyKiB3b2ZmLCBWZWN0b3I8Y2hhcj4m
IHNmbnQpCiAgICAgICAgICAgICB1TG9uZ2YgZGVzdExlbiA9IHRhYmxlT3JpZ0xlbmd0aDsKICAg
ICAgICAgICAgIGlmICghc2ZudC50cnlSZXNlcnZlQ2FwYWNpdHkoc2ZudC5zaXplKCkgKyB0YWJs
ZU9yaWdMZW5ndGgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IEJ5dGVmKiBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxCeXRlZio+KHNmbnQuZW5kKCkpOworICAg
ICAgICAgICAgQnl0ZWYqIGRlc3QgPSByZWludGVycHJldF9jYXN0PEJ5dGVmKj4oZ2V0UHRyKHNm
bnQuZW5kKCkpKTsKICAgICAgICAgICAgIHNmbnQuZ3JvdyhzZm50LnNpemUoKSArIHRhYmxlT3Jp
Z0xlbmd0aCk7CiAgICAgICAgICAgICBpZiAodW5jb21wcmVzcyhkZXN0LCAmZGVzdExlbiwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBCeXRlZio+KHdvZmYtPmRhdGEoKSArIHRhYmxlT2Zmc2V0KSwg
dGFibGVDb21wTGVuZ3RoKSAhPSBaX09LKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRp
ZW50Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
ZGllbnRDYWlyby5jcHAKaW5kZXggNTAyMmM1MGM3ZWU4MjVlMjQwZjBlNzEyMjQ3YzdlZjE2NDhm
MzhiZC4uNzUxNmIwYWNkMTVhYWZkMTJhMzU2YWZmNGQ1MGE2YzRhYTAyNGYyMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRD
YWlyby5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgY2Fpcm9fcGF0dGVybl90KiBHcmFkaWVudDo6cGxh
dGZvcm1HcmFkaWVudChmbG9hdCBnbG9iYWxBbHBoYSkKICAgICBlbHNlCiAgICAgICAgIG1fZ3Jh
ZGllbnQgPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9saW5lYXIobV9wMC54KCksIG1fcDAueSgpLCBt
X3AxLngoKSwgbV9wMS55KCkpOwogCi0gICAgVmVjdG9yPENvbG9yU3RvcD46Oml0ZXJhdG9yIHN0
b3BJdGVyYXRvciA9IG1fc3RvcHMuYmVnaW4oKTsKKyAgICBhdXRvIHN0b3BJdGVyYXRvciA9IG1f
c3RvcHMuYmVnaW4oKTsKICAgICB3aGlsZSAoc3RvcEl0ZXJhdG9yICE9IG1fc3RvcHMuZW5kKCkp
IHsKICAgICAgICAgY2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKG1fZ3JhZGllbnQs
IHN0b3BJdGVyYXRvci0+c3RvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0b3BJdGVyYXRvci0+cmVkLCBzdG9wSXRlcmF0b3ItPmdyZWVuLCBzdG9wSXRlcmF0
b3ItPmJsdWUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCmluZGV4IGRlNDU1MDk0YTBiY2Y3
YzlkZDNiMzllNGY4OGUwMmM1MDlkZWVjODUuLjA3MzQ4MDgxN2YyYjk3YjFmNGVhOWNkNDRhMTZk
Y2RhNWE1YmViMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCkBAIC0xNDUsNyArMTQ1
LDcgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3Qg
Y2xlYXJCZWZvcmVGcmFtZSkKICAgICAvLyBhbHdheXMgdXNlIEltYWdlU291cmNlOjpjbGVhcih0
cnVlLCAuLi4pIHRvIGNvbXBsZXRlbHkgZnJlZSB0aGUgbWVtb3J5IGluCiAgICAgLy8gdGhpcyBj
YXNlLgogICAgIGNsZWFyQmVmb3JlRnJhbWUgPSBzdGQ6Om1pbihjbGVhckJlZm9yZUZyYW1lLCBt
X2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpIC0gMSk7Ci0gICAgY29uc3QgVmVjdG9yPEltYWdlRnJh
bWU+OjppdGVyYXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBjbGVhckJlZm9y
ZUZyYW1lKTsKKyAgICBjb25zdCBhdXRvIGVuZCA9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigp
ICsgY2xlYXJCZWZvcmVGcmFtZTsKIAogICAgIC8vIFdlIG5lZWQgdG8gcHJlc2VydmUgZnJhbWVz
IHN1Y2ggdGhhdDoKICAgICAvLyAgICogV2UgZG9uJ3QgY2xlYXIgfGVuZHwKQEAgLTE2NSwxNCAr
MTY1LDE0IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6
ZV90IGNsZWFyQmVmb3JlRnJhbWUpCiAgICAgLy8gICAqIElmIHRoZSBmcmFtZSBpcyBwYXJ0aWFs
LCB3ZSdyZSBkZWNvZGluZyBpdCwgc28gZG9uJ3QgY2xlYXIgaXQ7IGlmIGl0CiAgICAgLy8gICAg
IGhhcyBhIGRpc3Bvc2FsIG1ldGhvZCBvdGhlciB0aGFuIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91
cywgc3RvcAogICAgIC8vICAgICBzY2FubmluZywgYXMgd2UnbGwgb25seSBuZWVkIHRoaXMgZnJh
bWUgd2hlbiBkZWNvZGluZyB0aGUgbmV4dCBvbmUuCi0gICAgVmVjdG9yPEltYWdlRnJhbWU+Ojpp
dGVyYXRvciBpKGVuZCk7CisgICAgY29uc3QgYXV0byBpID0gZW5kOwogICAgIGZvciAoOyAoaSAh
PSBtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSkgJiYgKChpLT5zdGF0dXMoKSA9PSBJbWFnZUZy
YW1lOjpGcmFtZUVtcHR5KSB8fCAoaS0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpE
aXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpKTsgLS1pKSB7CiAgICAgICAgIGlmICgoaS0+c3RhdHVz
KCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkgJiYgKGkgIT0gZW5kKSkKICAgICAgICAg
ICAgIGktPmNsZWFyUGl4ZWxEYXRhKCk7CiAgICAgfQogCiAgICAgLy8gTm93IHxpfCBob2xkcyB0
aGUgbGFzdCBmcmFtZSB3ZSBuZWVkIHRvIHByZXNlcnZlOyBjbGVhciBwcmlvciBmcmFtZXMuCi0g
ICAgZm9yIChWZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGoobV9mcmFtZUJ1ZmZlckNhY2hl
LmJlZ2luKCkpOyBqICE9IGk7ICsraikgeworICAgIGZvciAoYXV0byBqID0gbV9mcmFtZUJ1ZmZl
ckNhY2hlLmJlZ2luKCk7IGogIT0gaTsgKytqKSB7CiAgICAgICAgIEFTU0VSVChqLT5zdGF0dXMo
KSAhPSBJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOwogICAgICAgICBpZiAoai0+c3RhdHVzKCkg
IT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkKICAgICAgICAgICAgIGotPmNsZWFyUGl4ZWxEYXRh
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGU0OGViOWI2NzVk
YzlkMjE3NTk5MjRjODgwNWFmYTBiODliNDk4MzcuLmU5ZmI1ZmEzY2RhMTQ3MWVjNmViYWJiNzRh
OTYwMWVmZjRjMzU0M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBA
IC0xNTc3LDggKzE1NzcsOCBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRGaWxsTGF5ZXJzKGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBDb2xvciYgYywgY29ucwogICAgICAgICBjb250
ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEpOwogICAgIH0KIAotICAgIFZlY3Rvcjxjb25z
dCBGaWxsTGF5ZXIqPjo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciB0b3BMYXllciA9IGxheWVycy5y
ZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8Y29uc3QgRmlsbExheWVyKj46OmNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IgaXQgPSBsYXllcnMucmJlZ2luKCk7IGl0ICE9IHRvcExheWVyOyArK2l0KQorICAg
IGF1dG8gdG9wTGF5ZXIgPSBsYXllcnMucmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IGxheWVy
cy5yYmVnaW4oKTsgaXQgIT0gdG9wTGF5ZXI7ICsraXQpCiAgICAgICAgIHBhaW50RmlsbExheWVy
KHBhaW50SW5mbywgYywgKml0LCByZWN0LCBibGVlZEF2b2lkYW5jZSwgb3AsIGJhY2tncm91bmRP
YmplY3QsIGJhc2VCZ0NvbG9yVXNhZ2UpOwogCiAgICAgaWYgKHNob3VsZERyYXdCYWNrZ3JvdW5k
SW5TZXBhcmF0ZUJ1ZmZlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwCmluZGV4IGNjZGMyYTNkYzZkYTJkNjUzNGE3
ZWI2MzUwOWU2YjQzYmFhMWZkNzEuLmM1YjFhNDEzM2U3ZmU2OGNlMDg2ODg0NmFkNjMyMmU4ZTM0
MWU2NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVz
b2x2ZWRQb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dy
aWRSZXNvbHZlZFBvc2l0aW9uLmNwcApAQCAtMjk0LDggKzI5NCw4IEBAIHN0YXRpYyBpbmxpbmUg
dW5zaWduZWQgZmlyc3ROYW1lZEdyaWRMaW5lQmVmb3JlUG9zaXRpb24odW5zaWduZWQgcG9zaXRp
b24sIGNvbnN0CiAgICAgLy8gVGhlIGdyaWQgbGluZSBpbmVxdWFsaXR5IG5lZWRzIHRvIGJlIHN0
cmljdCAod2hpY2ggZG9lc24ndCBtYXRjaCB0aGUgYWZ0ZXIgLyBlbmQgY2FzZSkgYmVjYXVzZSB8
cG9zaXRpb258IGlzCiAgICAgLy8gYWxyZWFkeSBjb252ZXJ0ZWQgdG8gYW4gaW5kZXggaW4gb3Vy
IGdyaWQgcmVwcmVzZW50YXRpb24gKGllIG9uZSB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBncmlkIGxp
bmUgdG8gYWNjb3VudCBmb3IKICAgICAvLyB0aGUgc2lkZSkuCi0gICAgdW5zaWduZWQgZmlyc3RM
aW5lQmVmb3JlUG9zaXRpb25JbmRleCA9IDA7Ci0gICAgY29uc3QgdW5zaWduZWQqIGZpcnN0TGlu
ZUJlZm9yZVBvc2l0aW9uID0gc3RkOjpsb3dlcl9ib3VuZChncmlkTGluZXMuYmVnaW4oKSwgZ3Jp
ZExpbmVzLmVuZCgpLCBwb3NpdGlvbik7CisgICAgdW5pc2duZWQgZmlyc3RMaW5lQmVmb3JlUG9z
aXRpb25JbmRleCA9IDA7CisgICAgYXV0byBmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiA9IHN0ZDo6
bG93ZXJfYm91bmQoZ3JpZExpbmVzLmJlZ2luKCksIGdyaWRMaW5lcy5lbmQoKSwgcG9zaXRpb24p
OwogICAgIGlmIChmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiAhPSBncmlkTGluZXMuZW5kKCkpIHsK
ICAgICAgICAgaWYgKCpmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiA+IHBvc2l0aW9uICYmIGZpcnN0
TGluZUJlZm9yZVBvc2l0aW9uICE9IGdyaWRMaW5lcy5iZWdpbigpKQogICAgICAgICAgICAgLS1m
aXJzdExpbmVCZWZvcmVQb3NpdGlvbjsKQEAgLTMxNiw5ICszMTYsOCBAQCBzdGQ6OnVuaXF1ZV9w
dHI8R3JpZFNwYW4+IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlUm93U3RhcnRDb2x1bW5T
dGFydE5hbWVkRwogCiBzdGQ6OnVuaXF1ZV9wdHI8R3JpZFNwYW4+IEdyaWRSZXNvbHZlZFBvc2l0
aW9uOjpyZXNvbHZlUm93RW5kQ29sdW1uRW5kTmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9w
cG9zaXRlUG9zaXRpb24oY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIHJlc29sdmVkT3Bwb3Np
dGVQb3NpdGlvbiwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgVmVjdG9yPHVu
c2lnbmVkPiYgZ3JpZExpbmVzKQogewotICAgIEFTU0VSVChncmlkTGluZXMuc2l6ZSgpKTsKICAg
ICB1bnNpZ25lZCBmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb25JbmRleCA9IGdyaWRMaW5l
cy5zaXplKCkgLSAxOwotICAgIGNvbnN0IHVuc2lnbmVkKiBmaXJzdExpbmVBZnRlck9wcG9zaXRl
UG9zaXRpb24gPSBzdGQ6OnVwcGVyX2JvdW5kKGdyaWRMaW5lcy5iZWdpbigpLCBncmlkTGluZXMu
ZW5kKCksIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CisgICAgYXV0byBmaXJzdExpbmVBZnRl
ck9wcG9zaXRlUG9zaXRpb24gPSBzdGQ6OnVwcGVyX2JvdW5kKGdyaWRMaW5lcy5iZWdpbigpLCBn
cmlkTGluZXMuZW5kKCksIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CiAgICAgaWYgKGZpcnN0
TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbiAhPSBncmlkTGluZXMuZW5kKCkpCiAgICAgICAgIGZp
cnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbkluZGV4ID0gZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0
ZVBvc2l0aW9uIC0gZ3JpZExpbmVzLmJlZ2luKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEVs
ZW1lbnQuY3BwCmluZGV4IGMzM2ZmYjc3YjZkOGY5OTU3YjEyNmYxYmYzOTE3YTg1N2ZkZmI1MGUu
LmEwYmY1MDE5MWI2YWI5NTgxNjE4ZDk1M2MwODkwZDIxMmViN2IzNjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZvbnRFbGVtZW50LmNwcApAQCAtMjUyLDMxICsyNTIsMzEgQEAgc3RhdGljIGlubGlu
ZSBmbG9hdCBrZXJuaW5nRm9yUGFpck9mU3RyaW5nc0FuZEdseXBocyhjb25zdCBTVkdLZXJuaW5n
TWFwJiBrZXJuaW4KIHsKICAgICBpZiAoIWcxLmlzRW1wdHkoKSAmJiBrZXJuaW5nTWFwLmdseXBo
TWFwLmNvbnRhaW5zKGcxKSkgewogICAgICAgICBTVkdLZXJuaW5nVmVjdG9yKiBrZXJuaW5nVmVj
dG9yID0ga2VybmluZ01hcC5nbHlwaE1hcC5nZXQoZzEpOwotICAgICAgICBTVkdLZXJuaW5nVmVj
dG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGtlcm5pbmdWZWN0b3ItPmVuZCgpIC0gMTsKLSAgICAg
ICAgY29uc3QgU1ZHS2VybmluZ1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBrZXJuaW5n
VmVjdG9yLT5iZWdpbigpIC0gMTsKLSAgICAgICAgZm9yICg7IGl0ICE9IGJlZ2luOyAtLWl0KSB7
Ci0gICAgICAgICAgICBpZiAobWF0Y2hlcyh1MiwgZzIsICppdCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGl0LT5rZXJuaW5nOworICAgICAgICBzaXplX3QgaXQgPSBrZXJuaW5nVmVjdG9yLT5z
aXplKCk7CisgICAgICAgIHdoaWxlIChpdC0tID4gMCkgeworICAgICAgICAgICAgYXV0byYgdmFs
dWUgPSBrZXJuaW5nVmVjdG9yLT5hdChpdCk7CisgICAgICAgICAgICBpZiAobWF0Y2hlcyh1Miwg
ZzIsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUua2VybmluZzsKICAgICAg
ICAgfQogICAgIH0KIAogICAgIGlmICghdTEuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChrZXJu
aW5nTWFwLnVuaWNvZGVNYXAuY29udGFpbnModTEpKSB7CiAgICAgICAgICAgICBTVkdLZXJuaW5n
VmVjdG9yKiBrZXJuaW5nVmVjdG9yID0ga2VybmluZ01hcC51bmljb2RlTWFwLmdldCh1MSk7Ci0g
ICAgICAgICAgICBTVkdLZXJuaW5nVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGtlcm5pbmdW
ZWN0b3ItPmVuZCgpIC0gMTsKLSAgICAgICAgICAgIGNvbnN0IFNWR0tlcm5pbmdWZWN0b3I6OmNv
bnN0X2l0ZXJhdG9yIGJlZ2luID0ga2VybmluZ1ZlY3Rvci0+YmVnaW4oKSAtIDE7Ci0gICAgICAg
ICAgICBmb3IgKDsgaXQgIT0gYmVnaW47IC0taXQpIHsKLSAgICAgICAgICAgICAgICBpZiAobWF0
Y2hlcyh1MiwgZzIsICppdCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdC0+a2Vybmlu
ZzsKKyAgICAgICAgICAgIHNpemVfdCBpdCA9IGtlcm5pbmdWZWN0b3ItPnNpemUoKTsKKyAgICAg
ICAgICAgIHdoaWxlIChpdC0tID4gMCkgeworICAgICAgICAgICAgICAgIGF1dG8mIHZhbHVlID0g
a2VybmluZ1ZlY3Rvci0+YXQoaXQpOworICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzKHUyLCBn
MiwgdmFsdWUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUua2VybmluZzsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICgha2VybmluZ01hcC5rZXJuaW5n
VW5pY29kZVJhbmdlTWFwLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgVmVjdG9yPFNWR0tlcm5p
bmdQYWlyPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2RlUmFu
Z2VNYXAuZW5kKCkgLSAxOwotICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0tlcm5pbmdQYWly
Pjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VN
YXAuYmVnaW4oKSAtIDE7Ci0gICAgICAgICAgICBmb3IgKDsgaXQgIT0gYmVnaW47IC0taXQpIHsK
LSAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyh1MSwgdTIsIGcyLCAqaXQpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gaXQtPmtlcm5pbmc7CisgICAgICAgICAgICBzaXplX3QgaXQgPSBr
ZXJuaW5nTWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VNYXAuc2l6ZSgpOworICAgICAgICAgICAgd2hp
bGUgKGl0LS0gPiAwKSB7CisgICAgICAgICAgICAgICAgYXV0byYgdmFsdWUgPSBrZXJuaW5nTWFw
Lmtlcm5pbmdVbmljb2RlUmFuZ2VNYXBbaXRdOworICAgICAgICAgICAgICAgIGlmIChtYXRjaGVz
KHUxLCB1MiwgZzIsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmtl
cm5pbmc7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoQnl0ZVN0cmVhbS5oCmluZGV4IDlkOWQyYTJiMjNjNjAwZmViYjUzNDBjYmNkZDFiNjFk
ZGMzYjlmMTUuLmI5OTk1NTQ5NDM5YWM5NjRhYjNlNjdhMzBmMGQ4OWQ4YzM1OGFjYTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oCkBAIC02MCw4ICs2MCw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGFwcGVuZCh1bnNpZ25lZCBjaGFyIGJ5dGUpIHsgbV9kYXRhLmFwcGVuZChi
eXRlKTsgfQogICAgIHZvaWQgYXBwZW5kKFNWR1BhdGhCeXRlU3RyZWFtKiBvdGhlcikKICAgICB7
Ci0gICAgICAgIGZvciAoRGF0YUl0ZXJhdG9yIGl0ID0gb3RoZXItPmJlZ2luKCk7IGl0ICE9IG90
aGVyLT5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgIGFwcGVuZCgqaXQpOworICAgICAgICBmb3Ig
KGF1dG8mIGJ5dGUgOiAqb3RoZXIpCisgICAgICAgICAgICBhcHBlbmQoYnl0ZSk7CiAgICAgfQog
ICAgIHZvaWQgY2xlYXIoKSB7IG1fZGF0YS5jbGVhcigpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gIW1fZGF0YS5zaXplKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3htbC9YUGF0aE5vZGVTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQu
aAppbmRleCAzZDg5YjhkNTA4N2E4NmNmZWFmZmMwMTQwYjY5NDc2MmMwOTVkZGRmLi5kYWYyYjkz
ZDUxYjVhZjZiNzM0ZjVmOWE3NjU0MTM2OWUwNDE0YTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS94bWwvWFBhdGhOb2RlU2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9k
ZVNldC5oCkBAIC02NCw4ICs2NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAg
IHZvaWQgbWFya1N1YnRyZWVzRGlzam9pbnQoYm9vbCBkaXNqb2ludCkgeyBtX3N1YnRyZWVzQXJl
RGlzam9pbnQgPSBkaXNqb2ludDsgfQogICAgICAgICAgICAgYm9vbCBzdWJ0cmVlc0FyZURpc2pv
aW50KCkgY29uc3QgeyByZXR1cm4gbV9zdWJ0cmVlc0FyZURpc2pvaW50IHx8IG1fbm9kZXMuc2l6
ZSgpIDwgMjsgfQogCi0gICAgICAgICAgICBjb25zdCBSZWZQdHI8Tm9kZT4qIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gbV9ub2Rlcy5iZWdpbigpOyB9Ci0gICAgICAgICAgICBjb25zdCBSZWZQdHI8
Tm9kZT4qIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuZW5kKCk7IH0KKyAgICAgICAgICAg
IGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4+OjppdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIG1fbm9kZXMuYmVnaW4oKTsgfQorICAgICAgICAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxO
b2RlPj46Oml0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuZW5kKCk7IH0KIAog
ICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgdm9pZCB0cmF2ZXJzYWxTb3J0KCkgY29uc3Q7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241959</attachid>
            <date>2014-11-20 10:43:58 -0800</date>
            <delta_ts>2014-11-20 15:59:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138821-20141120104413.patch</filename>
            <type>text/plain</type>
            <size>69889</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2Mzk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
MDJjYWNjMWVlMDYxOGNiOTk3M2FlYTQ1Mjc2ZTdmYzg4OTBjODc0Li5jZmYyODMwOTQ2MTJhOTMz
NDI5MTFmYzM5MTVhY2JkOWI1YjY4MzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNiBAQAorMjAxNC0xMS0xNyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3Rp
bGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGVyZSBhcmUgYSBmZXcgdXNlcyBvZiBiZWdpbigpL2VuZCgp
IHRoYXQgZXhwbGljaXRseSByZXF1aXJlIHBvaW50ZXJzLAorICAgICAgICBzbyB3ZSB1c2UgZ2V0
UHRyKCkgdG8gZXh0cmFjdCB0aGUgdW5kZXJseWluZyBwb2ludGVyIGdlbmVyaWNhbGx5LgorCisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRDb21wbGV4UG9wU2NvcGVzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVt
cCk6CisgICAgICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6RlRM
OjptZE5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkQ2FsbCk6CisgICAgICAgICogbGxp
bnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBlcmZvcm1Bc3Nl
cnRpb25zKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlNjb3Bl
OjpTY29wZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwOgorICAgICAgICAo
SlNDOjpQcm9maWxlTm9kZTo6ZGVidWdQcmludFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3Rvcik6
CisgICAgICAgICogdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2Zp
bGVUcmVlTm9kZTo6ZHVtcEludGVybmFsKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgor
ICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjptYXRjaENoYXJhY3RlckNsYXNzKToK
KwogMjAxNC0xMS0xOSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IEpTQ29udGV4dCBpbnNwZWN0aW9uIFJlc291cmNlIHNlYXJj
aCBkb2VzIG5vdCB3b3JrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDU1MWE2YjZkOTY5MzhmOGJjM2I2MDNhMTNlMTAwZDg2NGMx
ZGI4M2UuLjI3MTg5MzNiMjUzZGVkMjJkMzJiMjRkNzhkZTQwMDVjNjJkMTdmYWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsOTggQEAKKzIwMTQtMTEtMTcgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
KworICAgICAgICBNYWtlIHN1cmUgcmFuZ2UgYmFzZWQgaXRlcmF0aW9uIG9mIFZlY3Rvcjw+IHN0
aWxsIHJlY2VpdmVzIGJvdW5kcyBjaGVja2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4ODIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IEluZGV4ZWRJdGVyYXRvciBzdHJ1Y3QgdG8g
V1RGIHRoYXQgd3JhcHMgYQorICAgICAgICBWZWN0b3IgdHlwZSBhbmQgaW5kZXggdG8gcHJvdmlk
ZSBwb2ludGVyIGxpa2Ugc2VtYW50aWNzCisgICAgICAgIHdoaWxlIHN0aWxsIHBlcmZvcm1pbmcg
cnVudGltZSBib3VuZHMgY2hlY2tpbmcsIGV2ZW4gaW4KKyAgICAgICAgcmVsZWFzZSBidWlsZHMu
IFdlIHN0b3JlIGEgc2ltcGxlIGluZGV4IGludG8gdGhlIHZlY3RvcgorICAgICAgICB3aGljaCBt
ZWFucyB0aGF0IHRoaXMgaXRlcmF0b3IgYWxsb3dzIHZlY3RvciByZXNpemluZworICAgICAgICBk
dXJpbmcgaXRlcmF0aW9uLiBJZiB0aGUgdmVjdG9yIGlzIHJlc2l6ZWQgc3VjaCB0aGF0IHRoZQor
ICAgICAgICBpdGVyYXRvciBpcyBvdXQgb2YgYm91bmRzLCB0aGVuIGFueSBhdHRlbXB0IHRvIGRl
cmVmZXJlbmNlCisgICAgICAgIHRoZSBpdGVyYXRvciB3aWxsIGNyYXNoIHNhZmVseS4gQW55IG90
aGVyIGVycm9ycywgaW5jbHVkaW5nCisgICAgICAgIG92ZXJmbG93cywgYW5kIG92ZXIgZXh0ZW5k
aW5nIHRoZSBpdGVyYXRvciB3aWxsIGxpa2V3aXNlCisgICAgICAgIGNyYXNoLgorCisgICAgICAg
IEZvciB0aGUgcHVycG9zZSBvZiByZXRhaW5pbmcgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQKKyAg
ICAgICAgYmVoYXZpb3VyLCB0aGUgaXRlcmF0b3IgY2FuIGJlIG1vdmVkIHRvIG1faW5kZXggPT0g
c2l6ZSgpCisgICAgICAgIGFzIHRoYXQgaXMgdGhlIHN0YW5kYXJkICJlbmQiIHRlcm1pbmF0b3Ig
Zm9yIHRoZXNlIHR5cGVzLgorICAgICAgICBBdHRlbXB0aW5nIHRvIGRlcmVmZXJlbmNlIGF0IHRo
YXQgcG9pbnQgd2lsbCBzdGlsbCBjcmFzaAorICAgICAgICByYXRoZXIgdGhhbiBwZXJmb3JtIGFu
IHVuc2FmZSBtZW1vcnkgb3BlcmF0aW9uLgorCisgICAgICAgIEluIG9yZGVyIHRvIG1haW50YWlu
IHRoZSB2YWxpZGl0eSBvZiBhbGwgdGhlIGJvdW5kcyBjaGVja2luZywKKyAgICAgICAgd2UgcGVy
Zm9ybSBmdWxsIGludGVnZXIgcmFuZ2UgY2hlY2tpbmcgcHJpb3IgdG8gYW55IG11dGF0aW9uCisg
ICAgICAgIG9mIHRoZSBpdGVyYXRvciBsb2NhdGlvbi4gSWYgd2UgZGV0ZWN0IGFuIGFyaXRobWV0
aWMgb3ZlcmZsb3cKKyAgICAgICAgd2Ugd2lsbCBjcmFzaCByYXRoZXIgdGhhbiBhdHRlbXB0aW5n
IHRvIGNhcnJ5IG9uLgorCisgICAgICAgIEJ5IG5lY2Vzc2l0eSB0aGVyZSBhcmUgbWFueSBvdmVy
cmlkZXMgZm9yIG9wZXJhdG9yICsgYW5kIC0gYXMKKyAgICAgICAgd2Ugb3RoZXJ3aXNlIGhpdCBt
YW55IGRpZmZlcmVudCB0eXBlIHByb21vdGlvbiBhbWJpZ3VpdGllcyB3aGVuCisgICAgICAgIHBl
cmZvcm1pbmcgYXJpdGhtZXRpYyB3aXRoIGl0ZXJhdG9ycy4gVGhlc2UgYW1iaWd1aXRpZXMgYXJl
IGFsc28KKyAgICAgICAgZGlmZmVyZW50IGZvciAzMi0gdnMuIDY0LWJpdCwgc28gZHVwbGljYXRp
bmcgdGhlIGZ1bmN0aW9ucworICAgICAgICBhbmQgdGhlbiBmb3J3YXJkaW5nIHRvIHRoZSBjb3Jl
IGltcGxlbWVudGF0aW9ucyB0aGF0IHBlcmZvcm1lZAorICAgICAgICB0aGUgYm91bmRzIGNoZWNr
aW5nIGFuZCBtdXRhdGlvbiBzZWVtZWQgbGlrZSB0aGUgcmlnaHQgY2FsbC4KKworICAgICAgICAq
IFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9JbmRleGVkSXRl
cmF0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6SW5kZXhlZEl0
ZXJhdG9yKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvci0+KToKKyAg
ICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpJ
bmRleGVkSXRlcmF0b3I6OmdldCk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3Bl
cmF0b3IrKyk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3ItLSk6Cisg
ICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlw
ZSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IrPSk6CisgICAgICAg
IChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3ItPSk6CisgICAgICAgIChXVEY6OkluZGV4
ZWRJdGVyYXRvcjo6b3BlcmF0b3IrKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpv
cGVyYXRvci0pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6
OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVy
YXRvcjo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRv
cjw9KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcj4pOgorICAgICAg
ICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPj0pOgorICAgICAgICAoV1RGOjpJbmRl
eGVkSXRlcmF0b3I6Om9wZXJhdG9yIGNvbnN0X2l0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6SW5k
ZXhlZEl0ZXJhdG9yOjppc1NhZmVUb0NvbXBhcmUpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRl
cmF0b3I6OnVuc2FmZUdldCk6CisgICAgICAgIChXVEY6OmdldFB0cik6CisgICAgICAgIChXVEY6
Om9wZXJhdG9yLSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXVEY6Om9w
ZXJhdG9yPj0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpvcGVy
YXRvcj4pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3JTZWxlY3Rvcjo6bWFrZUl0ZXJh
dG9yKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yU2VsZWN0b3I6Om1ha2VDb25zdEl0
ZXJhdG9yKToKKyAgICAgICAgKiB3dGYvUmVmQ291bnRlZEFycmF5Lmg6CisgICAgICAgIChXVEY6
OlJlZkNvdW50ZWRBcnJheTo6UmVmQ291bnRlZEFycmF5KToKKyAgICAgICAgKiB3dGYvVmVjdG9y
Lmg6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6VmVjdG9y
OjpiZWdpbik6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6ZW5kKToKKyAgICAgICAgKFdURjo6T3Zl
cmZsb3dIYW5kbGVyPjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6PSk6CisgICAgICAgIChXVEY6
Ok92ZXJmbG93SGFuZGxlcj46OmZpbGwpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+
OjpleHBhbmRDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnRyeUV4
cGFuZENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6cmVzaXplKToK
KyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6c2hyaW5rKToKKyAgICAgICAgKFdURjo6
T3ZlcmZsb3dIYW5kbGVyPjo6Z3Jvdyk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46
OnJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnRyeVJl
c2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnNocmlua0Nh
cGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kKToKKyAgICAg
ICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6dHJ5QXBwZW5kKToKKyAgICAgICAgKFdURjo6T3Zl
cmZsb3dIYW5kbGVyPjo6YXBwZW5kU2xvd0Nhc2UpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hh
bmRsZXI+Ojp1bmNoZWNrZWRBcHBlbmQpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+
OjphcHBlbmRWZWN0b3IpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnQp
OgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnRWZWN0b3IpOgorICAgICAg
ICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUpOgorCiAyMDE0LTExLTE4ICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgSGF2ZSBWZWN0b3I6OmNhcGFjaXR5
KCkgcmV0dXJuIGFuIHVuc2lnbmVkIGluc3RlYWQgb2YgYSBzaXplX3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAz
MjFkNGE2MTVjZWJhZmI0Y2Q3MGI2NDgxMjRlZTgxMjYyMDMwNjI3Li44ZGQyZjBmZDgzM2I1Y2Jm
NjNkYTU2ODU4ZThmNDFjYjM4NTA0NzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIw
MTQtMTEtMTcgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtl
IHN1cmUgcmFuZ2UgYmFzZWQgaXRlcmF0aW9uIG9mIFZlY3Rvcjw+IHN0aWxsIHJlY2VpdmVzIGJv
dW5kcyBjaGVja2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM4ODIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhlcmUgYXJlIGEgZmV3IHVzZXMgb2YgYmVnaW4oKS9lbmQoKSB0aGF0IGV4cGxpY2l0
bHkgcmVxdWlyZSBwb2ludGVycywKKyAgICAgICAgc28gd2UgdXNlIGdldFB0cigpIHRvIGV4dHJh
Y3QgdGhlIHVuZGVybHlpbmcgcG9pbnRlciBnZW5lcmljYWxseS4KKworICAgICAgICAqIGJpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9u
ZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemVTdHJpbmcpOgorICAgICAgICAqIGVkaXRpbmcvVGV4
dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEJ1ZmZlcjo6aXNCYWRNYXRj
aCk6CisgICAgICAgICogcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9u
SGlnaGxpZ2h0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6Zm9udERhdGFGb3JD
aGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkRm9udERhdGE6OmNvbnRhaW5z
Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZEZvbnREYXRhOjppc0xvYWRp
bmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnZlcnRXT0ZGVG9TZm50KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFpbnRGaWxsTGF5
ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3ROYW1lZEdyaWRMaW5lQmVmb3JlUG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVSb3dFbmRDb2x1
bW5FbmROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbik6CisgICAg
ICAgICogc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omtlcm5pbmdG
b3JQYWlyT2ZTdHJpbmdzQW5kR2x5cGhzKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ5dGVTdHJl
YW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtOjphcHBlbmQpOgorICAg
ICAgICAqIHhtbC9YUGF0aE5vZGVTZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOb2Rl
U2V0OjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6Tm9kZVNldDo6ZW5kKToKKwog
MjAxNC0xMS0yMCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE3NjM5Ni4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCmluZGV4IDZjMjkz
Y2NmOThkNTY3MzI2ZGM0MmZhYmQ1ZGZhNDFkMjNmNmMyYzEuLjYzNWFjZDJjYmIzOGU3OGE2MDgz
YjYxZTU4ZGJhMWI0N2NiNzllOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApAQCAtMjM0LDkgKzIzNCw5IEBAIHZvaWQg
VW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3N5bWJvbFRhYmxlKTsKICAgICBm
b3IgKEZ1bmN0aW9uRXhwcmVzc2lvblZlY3Rvcjo6aXRlcmF0b3IgcHRyID0gdGhpc09iamVjdC0+
bV9mdW5jdGlvbkRlY2xzLmJlZ2luKCksIGVuZCA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25EZWNs
cy5lbmQoKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0cik7
CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKFdURjo6Z2V0UHRyKHB0cikpOwogICAgIGZvciAoRnVu
Y3Rpb25FeHByZXNzaW9uVmVjdG9yOjppdGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0
aW9uRXhwcnMuYmVnaW4oKSwgZW5kID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkV4cHJzLmVuZCgp
OyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQocHRyKTsKKyAgICAg
ICAgdmlzaXRvci5hcHBlbmQoV1RGOjpnZXRQdHIocHRyKSk7CiAgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXModGhpc09iamVjdC0+bV9jb25zdGFudFJlZ2lzdGVycy5kYXRhKCksIHRoaXNPYmplY3Qt
Pm1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKICAgICBpZiAodGhpc09iamVjdC0+bV9yYXJl
RGF0YSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgZW5kID0gdGhpc09iamVjdC0+bV9y
YXJlRGF0YS0+bV9yZWdleHBzLnNpemUoKTsgaSAhPSBlbmQ7IGkrKykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAK
aW5kZXggYjIxMzRlZjdhNTA5YjczNjllM2QyYzA1NjYyYzIxYjg0NzA3ZmY1Yy4uNWUxZjQ2MTI5
MWFjZTI2MDkzYjEzMTdkYWY4NGNlOTVkM2QxYmZmYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTIy
NjMsOCArMjI2Myw4IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb21wbGV4UG9wU2Nv
cGVzKFJlZ2lzdGVySUQqIHNjb3BlLCBDb250cm9sRmxvd0NvbnRlCiAgICAgICAgICAgICBpbnQg
dG9wU2NvcGVJbmRleCA9IC0xOwogICAgICAgICAgICAgaW50IGJvdHRvbVNjb3BlSW5kZXggPSAt
MTsKICAgICAgICAgICAgIGlmIChmbGlwU2NvcGVzKSB7Ci0gICAgICAgICAgICAgICAgdG9wU2Nv
cGVJbmRleCA9IHRvcFNjb3BlIC0gbV9zY29wZUNvbnRleHRTdGFjay5iZWdpbigpOwotICAgICAg
ICAgICAgICAgIGJvdHRvbVNjb3BlSW5kZXggPSBib3R0b21TY29wZSAtIG1fc2NvcGVDb250ZXh0
U3RhY2suYmVnaW4oKTsKKyAgICAgICAgICAgICAgICB0b3BTY29wZUluZGV4ID0gdG9wU2NvcGUg
LSBtX3Njb3BlQ29udGV4dFN0YWNrLmRhdGEoKTsKKyAgICAgICAgICAgICAgICBib3R0b21TY29w
ZUluZGV4ID0gYm90dG9tU2NvcGUgLSBtX3Njb3BlQ29udGV4dFN0YWNrLmRhdGEoKTsKICAgICAg
ICAgICAgICAgICBzYXZlZFNjb3BlQ29udGV4dFN0YWNrID0gbV9zY29wZUNvbnRleHRTdGFjazsK
ICAgICAgICAgICAgICAgICBtX3Njb3BlQ29udGV4dFN0YWNrLnNocmluayhmaW5hbGx5Q29udGV4
dC5zY29wZUNvbnRleHRTdGFja1NpemUpOwogICAgICAgICAgICAgfQpAQCAtMjMwOCw3ICsyMzA4
LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMoUmVnaXN0
ZXJJRCogc2NvcGUsIENvbnRyb2xGbG93Q29udGUKICAgICAgICAgICAgIGlmIChmbGlwU2NvcGVz
KSB7CiAgICAgICAgICAgICAgICAgbV9zY29wZUNvbnRleHRTdGFjayA9IHNhdmVkU2NvcGVDb250
ZXh0U3RhY2s7CiAgICAgICAgICAgICAgICAgdG9wU2NvcGUgPSAmbV9zY29wZUNvbnRleHRTdGFj
a1t0b3BTY29wZUluZGV4XTsgLy8gYXNzZXJ0IGl0J3Mgd2l0aGluIGJvdW5kcwotICAgICAgICAg
ICAgICAgIGJvdHRvbVNjb3BlID0gbV9zY29wZUNvbnRleHRTdGFjay5iZWdpbigpICsgYm90dG9t
U2NvcGVJbmRleDsgLy8gZG9uJ3QgYXNzZXJ0LCBzaW5jZSBpdCB0aGUgaW5kZXggbWlnaHQgYmUg
LTEuCisgICAgICAgICAgICAgICAgYm90dG9tU2NvcGUgPSBtX3Njb3BlQ29udGV4dFN0YWNrLmRh
dGEoKSArIGJvdHRvbVNjb3BlSW5kZXg7IC8vIGRvbid0IGFzc2VydCwgc2luY2UgaXQgdGhlIGlu
ZGV4IG1pZ2h0IGJlIC0xLgogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGZsaXBTd2l0
Y2hlcykKICAgICAgICAgICAgICAgICBtX3N3aXRjaENvbnRleHRTdGFjayA9IHNhdmVkU3dpdGNo
Q29udGV4dFN0YWNrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAppbmRleCBmMDcyNGRmNDcwMzk0OWIzMGQyNGUzNmFhODJlNzc4YTVjYjliZjcz
Li4zYmUxOGVhNmM2Y2I3ZjM2ZjQ4ZTIwYjU5ZjcyM2VjYzUxNGI5ZDNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtNDkxMCw3ICs0
OTEwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEludEp1bXAoCiAgICAgYWRk
QnJhbmNoKAogICAgICAgICBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFs
LCB2YWx1ZSwgSW1tMzIodGFibGUuY3RpT2Zmc2V0cy5zaXplKCkpKSwKICAgICAgICAgZGF0YS0+
ZmFsbFRocm91Z2guYmxvY2spOwotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cih0YWJsZS5j
dGlPZmZzZXRzLmJlZ2luKCkpLCBzY3JhdGNoKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1Q
dHIodGFibGUuY3RpT2Zmc2V0cy5kYXRhKCkpLCBzY3JhdGNoKTsKICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjpCYXNlSW5kZXgoc2NyYXRjaCwgdmFsdWUsIEpJVENvbXBpbGVyOjp0aW1l
c1B0cigpKSwgc2NyYXRjaCk7CiAgICAgbV9qaXQuanVtcChzY3JhdGNoKTsKICAgICBkYXRhLT5k
aWRVc2VKdW1wVGFibGUgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYmJyZXZpYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
YnJldmlhdGlvbnMuaAppbmRleCBmYzdjYjFiMjU0MzI2OTRhYWVlOGZiZjMxNTNlNmUwOGE4MzMy
ZjM5Li43YjFhMWNlN2IzODM3ZTgxNGNiYTJiM2VjYzNhMDdiMDE4ZDlhZTMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaApAQCAtMTIwLDcgKzEyMCw3
IEBAIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kU3RyaW5nKExDb250ZXh0IGNvbnRleHQsIGNvbnN0
IGNoYXIqIHN0cmluZywgdW5zaWduZWQgbGVuCiBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZFN0cmlu
ZyhMQ29udGV4dCBjb250ZXh0LCBjb25zdCBjaGFyKiBzdHJpbmcpIHsgcmV0dXJuIG1kU3RyaW5n
KGNvbnRleHQsIHN0cmluZywgc3RkOjpzdHJsZW4oc3RyaW5nKSk7IH0KIHN0YXRpYyBpbmxpbmUg
TFZhbHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0LCBMVmFsdWUqIGFyZ3MsIHVuc2lnbmVkIG51
bUFyZ3MpIHsgcmV0dXJuIGxsdm0tPk1ETm9kZUluQ29udGV4dChjb250ZXh0LCBhcmdzLCBudW1B
cmdzKTsgfQogdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KLXN0YXRpYyBpbmxpbmUgTFZh
bHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0LCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpIHsg
cmV0dXJuIG1kTm9kZShjb250ZXh0LCBjb25zdF9jYXN0PExWYWx1ZSo+KHZlY3Rvci5iZWdpbigp
KSwgdmVjdG9yLnNpemUoKSk7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4
dCBjb250ZXh0LCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpIHsgcmV0dXJuIG1kTm9kZShjb250
ZXh0LCBjb25zdF9jYXN0PExWYWx1ZSo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpKTsg
fQogc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQpIHsgcmV0dXJu
IG1kTm9kZShjb250ZXh0LCAwLCAwKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExD
b250ZXh0IGNvbnRleHQsIExWYWx1ZSBhcmcxKSB7IHJldHVybiBtZE5vZGUoY29udGV4dCwgJmFy
ZzEsIDEpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwg
TFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyKQpAQCAtMjg4LDcgKzI4OCw3IEBAIHN0YXRpYyBpbmxp
bmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIGNv
bnN0IExWYWx1ZSoKIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+CiBpbmxpbmUgTFZhbHVl
IGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IFZlY3Rv
clR5cGUmIHZlY3RvcikKIHsKLSAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9u
LCB2ZWN0b3IuYmVnaW4oKSwgdmVjdG9yLnNpemUoKSk7CisgICAgcmV0dXJuIGJ1aWxkQ2FsbChi
dWlsZGVyLCBmdW5jdGlvbiwgdmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUoKSk7CiB9CiBzdGF0
aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0
aW9uKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0
YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAppbmRleCA2
OTE5YWVhYjAwYTFiMjVjNDc1YmJmOWRkMjVjNjg4ZjBhYTU4YTcyLi40NGFmY2E0Y2JhZDhiM2U1
NTMzNDEyOWFjOWM5YjBkZWZkOTU2MWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnREYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnREYXRhLmNwcApAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgRGF0YTo6cGVyZm9ybUFzc2Vy
dGlvbnMoVk0mIHZtKQogICAgIFZlY3RvcjxpbnQ+IHRlc3RWZWN0b3I7CiAgICAgdGVzdFZlY3Rv
ci5yZXNpemUoNDIpOwogICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8dWludDMyX3QqPigmdGVzdFZl
Y3Rvcilbc2l6ZW9mKHZvaWQqKS9zaXplb2YodWludDMyX3QpICsgMV0gPT0gNDIpOwotICAgIEFT
U0VSVChiaXR3aXNlX2Nhc3Q8aW50Kio+KCZ0ZXN0VmVjdG9yKVswXSA9PSB0ZXN0VmVjdG9yLmJl
Z2luKCkpOworICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50Kio+KCZ0ZXN0VmVjdG9yKVswXSA9
PSB0ZXN0VmVjdG9yLmRhdGEoKSk7CiAjZW5kaWYKIAogICAgIEFTU0VSVChTdHJpbmdJbXBsOjpz
X2hhc2hGbGFnOEJpdEJ1ZmZlciA9PSAzMik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuaAppbmRleCA0NTJmNzA0NmYzMDIyZDM4ODEwOWFlYmRjODQzODRlMWFhMjJmZmExLi4wMWZj
Y2RiN2UzOGFjNWE2MDIyYzY4Yzk3YjhkOGViM2IwY2VjMTgwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyLmgKQEAgLTEzMCwxMSArMTMwLDggQEAgc3RydWN0IFNjb3BlIHsKICAg
ICB7CiAgICAgICAgIGlmIChyaHMubV9sYWJlbHMpIHsKICAgICAgICAgICAgIG1fbGFiZWxzID0g
YWRvcHRQdHIobmV3IExhYmVsU3RhY2spOwotCi0gICAgICAgICAgICB0eXBlZGVmIExhYmVsU3Rh
Y2s6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAgICAgICAgaXRlcmF0b3IgZW5kID0g
cmhzLm1fbGFiZWxzLT5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoaXRlcmF0b3IgaXQgPSByaHMu
bV9sYWJlbHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICAgICBtX2xh
YmVscy0+YXBwZW5kKFNjb3BlTGFiZWxJbmZvKGl0LT5tX2lkZW50LCBpdC0+bV9pc0xvb3ApKTsK
KyAgICAgICAgICAgIGZvciAoYXV0byBsYWJlbCA6ICpyaHMubV9sYWJlbHMpCisgICAgICAgICAg
ICAgICAgbV9sYWJlbHMtPmFwcGVuZChTY29wZUxhYmVsSW5mbyhsYWJlbC5tX2lkZW50LCBsYWJl
bC5tX2lzTG9vcCkpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVOb2RlLmNwcAppbmRleCAyNjVjZGRkMGVmNzg4MzNmNjFiNTcx
MTE5Y2ZkNzcyMGZkNDZkMTU3Li42OTJjN2I4NmYzYzNhMjU0MjFiYjEwMDgyZGY2ZTA4ZGViNDBm
MGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZU5v
ZGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlTm9kZS5j
cHAKQEAgLTE1NCw2ICsxNTQsNyBAQCB2b2lkIFByb2ZpbGVOb2RlOjpkZWJ1Z1ByaW50UmVjdXJz
aXZlbHkoaW50IGluZGVudExldmVsLCBjb25zdCBQcm9maWxlU3VidHJlZURhdAogICAgIC8vIFBy
aW50IGNoaWxkcmVuJ3MgbmFtZXMgYW5kIGluZm9ybWF0aW9uCiAgICAgZm9yIChTdGFja0l0ZXJh
dG9yIGN1cnJlbnRDaGlsZCA9IG1fY2hpbGRyZW4uYmVnaW4oKTsgY3VycmVudENoaWxkICE9IG1f
Y2hpbGRyZW4uZW5kKCk7ICsrY3VycmVudENoaWxkKQogICAgICAgICAoKmN1cnJlbnRDaGlsZCkt
PmRlYnVnUHJpbnRSZWN1cnNpdmVseShpbmRlbnRMZXZlbCwgZGF0YSk7CisKIH0KIAogLy8gcHJp
bnQgdGhlIHByb2ZpbGVkIGRhdGEgaW4gYSBmb3JtYXQgdGhhdCBtYXRjaGVzIHRoZSB0b29sIHNh
bXBsZSdzIG91dHB1dC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAK
aW5kZXggY2M2MzAyMTdkZjdmZDI1YWRlNGM0YmIzOTg1NzRkNjdkNWE3NDU2OS4uNzljZDY3YTY3
ODE3YmRkZmFlZGRmM2M1MDY4NmM0ODJjOTIwNDUwNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAKQEAgLTM1Miw3ICszNTIsNyBAQCBib29sIEpTQXJyYXk6OnNl
dExlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5n
dGgsIGJvbwogICAgICAgICAgICAgLy8gcHJvcGVydGllcywgc28gd2UgaGF2ZSB0byBwZXJmb3Jt
IGRlbGV0aW9uIHdpdGggY2F1dGlvbiwgaWYgbm90IHdlIGNhbgogICAgICAgICAgICAgLy8gZGVs
ZXRlIHZhbHVlcyBpbiBhbnkgb3JkZXIuCiAgICAgICAgICAgICBpZiAobWFwLT5zcGFyc2VNb2Rl
KCkpIHsKLSAgICAgICAgICAgICAgICBxc29ydChrZXlzLmJlZ2luKCksIGtleXMuc2l6ZSgpLCBz
aXplb2YodW5zaWduZWQpLCBjb21wYXJlS2V5c0ZvclFTb3J0KTsKKyAgICAgICAgICAgICAgICBx
c29ydChrZXlzLmRhdGEoKSwga2V5cy5zaXplKCksIHNpemVvZih1bnNpZ25lZCksIGNvbXBhcmVL
ZXlzRm9yUVNvcnQpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBrZXlzLnNpemUoKTsK
ICAgICAgICAgICAgICAgICB3aGlsZSAoaSkgewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbmRleCA9IGtleXNbLS1pXTsKQEAgLTExOTEsMTMgKzExOTEsMTMgQEAgdm9pZCBKU0FycmF5
Ojpzb3J0Q29tcGFjdGVkVmVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgQ29udGlndW91c0RhdGE8U3Rv
cmFnZVR5cGU+IGQKICAgICAgICAgCiAjaWYgSEFWRShNRVJHRVNPUlQpCiAgICAgaWYgKGlzU29y
dGluZ1ByaW1pdGl2ZVZhbHVlcykKLSAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVl
cy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9y
UVNvcnQpOworICAgICAgICBxc29ydCh2YWx1ZXMuZGF0YSgpLCB2YWx1ZXMuc2l6ZSgpLCBzaXpl
b2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICAgICBl
bHNlCi0gICAgICAgIG1lcmdlc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6
ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAg
ICAgIG1lcmdlc29ydCh2YWx1ZXMuZGF0YSgpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVT
dHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICNlbHNlCiAgICAgLy8g
RklYTUU6IFRoZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBz
dGFibGUgc29ydC4KICAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3Rh
YmxlIHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0
LgotICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVT
dHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICBxc29ydCh2YWx1
ZXMuZGF0YSgpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFy
ZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICNlbmRpZgogICAgIAogICAgIC8vIElmIHRoZSB0b1N0
cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBz
dG9yYWdlLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVU
cmVlTm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5o
CmluZGV4IDg4ZDU3ZjNkZDRlNzk3NjlkMWQwNmMzYTg1OTEwMWI1NTVjNmE4M2YuLmRkM2MxMjFk
MGViYjE2ZThhNTI0NjFmYWFjZGJiYjRkOTg3ZDcyYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgVmVjdG9yPE1hcEVudHJ5Kj4gZW50cmllczsKICAgICAgICAgZm9yIChNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi0+YmVnaW4oKTsgaXQgIT0gbV9jaGlsZHJlbi0+ZW5kKCk7
ICsraXQpCiAgICAgICAgICAgICBlbnRyaWVzLmFwcGVuZCgmKml0KTsKLSAgICAgICAgcXNvcnQo
ZW50cmllcy5iZWdpbigpLCBlbnRyaWVzLnNpemUoKSwgc2l6ZW9mKE1hcEVudHJ5KiksIGNvbXBh
cmVFbnRyaWVzKTsKKyAgICAgICAgcXNvcnQoZW50cmllcy5kYXRhKCksIGVudHJpZXMuc2l6ZSgp
LCBzaXplb2YoTWFwRW50cnkqKSwgY29tcGFyZUVudHJpZXMpOwogCiAgICAgICAgIC8vIEl0ZXJh
dGUgb3ZlciB0aGUgY2hpbGRyZW4gaW4gc2FtcGxlLWZyZXF1ZW5jeSBvcmRlci4KICAgICAgICAg
Zm9yIChzaXplX3QgZSA9IDA7IGUgPCBlbnRyaWVzLnNpemUoKTsgKytlKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCmluZGV4IGUzYTNhOTMyY2U3ZWQ3MzhmMTk4NmIyYmYy
Yjc0M2UwNDIzYTNiMjUuLmQyNjhlNTllMTJiYjRlODM2OGNlMzkyMDY4NzhhYzgxNjJlM2I0MmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCkBAIC0yMjMsNyArMjIzLDcg
QEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAg
ICBpZiAoY2hhckNsYXNzLT5tX3Jhbmdlcy5zaXplKCkpIHsKICAgICAgICAgICAgIHVuc2lnbmVk
IG1hdGNoSW5kZXggPSAwOwogICAgICAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7Ci0gICAgICAg
ICAgICBtYXRjaENoYXJhY3RlckNsYXNzUmFuZ2UoY2hhcmFjdGVyLCBmYWlsdXJlcywgbWF0Y2hE
ZXN0LCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLmJlZ2luKCksIGNoYXJDbGFzcy0+bV9yYW5nZXMuc2l6
ZSgpLCAmbWF0Y2hJbmRleCwgY2hhckNsYXNzLT5tX21hdGNoZXMuYmVnaW4oKSwgY2hhckNsYXNz
LT5tX21hdGNoZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3NSYW5n
ZShjaGFyYWN0ZXIsIGZhaWx1cmVzLCBtYXRjaERlc3QsIGNoYXJDbGFzcy0+bV9yYW5nZXMuZGF0
YSgpLCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUoKSwgJm1hdGNoSW5kZXgsIGNoYXJDbGFzcy0+
bV9tYXRjaGVzLmRhdGEoKSwgY2hhckNsYXNzLT5tX21hdGNoZXMuc2l6ZSgpKTsKICAgICAgICAg
ICAgIHdoaWxlIChtYXRjaEluZGV4IDwgY2hhckNsYXNzLT5tX21hdGNoZXMuc2l6ZSgpKQogICAg
ICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNoYXJhY3Rlciwg
SW1tMzIoKHVuc2lnbmVkIHNob3J0KWNoYXJDbGFzcy0+bV9tYXRjaGVzW21hdGNoSW5kZXgrK10p
KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGZmNDhk
YTBjYzUzMTI4MmExMmQwZDUxMDZjNjYwMzVmMTU1ZDkxNTYuLjFiYTVjZmQ3ODk4ZmQ5ZTk2NTk1
YmZkNWE0Nzc0ZmVmMWViZjRmODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtOTgsNiArOTgsNyBAQAogCQlBNzQ4NzQ1MjE3QTBCREFFMDBGQTA0Q0IgLyog
U2l4Q2hhcmFjdGVySGFzaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNzQ4NzQ0RjE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5j
cHAgKi87IH07CiAJCUE3NDg3NDUzMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNo
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzQ4NzQ1
MDE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5oICovOyB9OwogCQlBNzQ4NzQ1
NDE3QTBCREFFMDBGQTA0Q0IgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzQ4NzQ1MTE3QTBCREFFMDBGQTA0
Q0IgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0LmggKi87IH07CisJCUE3REMyRjA0MUEwOUEyMkQw
MDcyRjRFMyAvKiBJbmRleGVkSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3REMyRjAzMUEwOTlERTMwMDcyRjRFMyAvKiBJbmRleGVkSXRl
cmF0b3IuaCAqLzsgfTsKIAkJQTdFNjQzQzYxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXByZXNzaW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTY0
M0M0MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21wcmVzc2lvbi5jcHAgKi87IH07CiAJCUE3RTY0M0M3
MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21wcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdFNjQzQzUxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXBy
ZXNzaW9uLmggKi87IH07CiAJCUE4NzZEQkQ4MTUxODE2RTUwMERBREI5NSAvKiBQbGF0Zm9ybS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3NkRCRDcx
NTE4MTZFNTAwREFEQjk1IC8qIFBsYXRmb3JtLmggKi87IH07CkBAIC0zODksNiArMzkwLDcgQEAK
IAkJQTc0ODc0NEYxN0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l4Q2hhcmFjdGVySGFzaC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NDg3NDUwMTdBMEJEQUUwMEZBMDRDQiAvKiBT
aXhDaGFyYWN0ZXJIYXNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpeENo
YXJhY3Rlckhhc2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc0ODc0NTExN0Ew
QkRBRTAwRkEwNENCIC8qIFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdHJpbmdIYXNoRHVtcENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTdEQzJGMDMxQTA5OURFMzAwNzJGNEUzIC8qIEluZGV4ZWRJdGVyYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGVkSXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTdFNjQzQzQxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXByZXNzaW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXByZXNzaW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdFNjQzQzUxN0M1NDIzQjAwM0JCMTZCIC8qIENv
bXByZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXByZXNzaW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4NzZEQkQ3MTUxODE2RTUwMERBREI5
NSAvKiBQbGF0Zm9ybS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9y
bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODkyLDYgKzg5NCw3IEBACiAJCQkJ
OTc0Q0ZDOEQxNkE0RjMyNzAwNkQ1NDA0IC8qIFdlYWtQdHIuaCAqLywKIAkJCQlBOEE0NzM3QTE1
MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5jcHAgKi8sCiAJCQkJQThBNDczN0IxNTFB
ODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCAqLywKKwkJCQlBN0RDMkYwMzFBMDk5REUz
MDA3MkY0RTMgLyogSW5kZXhlZEl0ZXJhdG9yLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHd0ZjsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMDY1LDYgKzEwNjgsNyBAQAogCQkJCUE4
QTQ3M0FEMTUxQTgyNUIwMDQxMjNGRiAvKiBjYWNoZWQtcG93ZXJzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzQ1RTE1MUE4MjVCMDA0MTIzRkYgLyogQ2hhcmFjdGVyTmFtZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3Mzk0MTUxQTgyNUIwMDQxMjNGRiAvKiBDaGVja2VkQXJpdGhtZXRp
Yy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTdEQzJGMDQxQTA5QTIyRDAwNzJGNEUzIC8qIEluZGV4
ZWRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOTUxNTFBODI1QjAwNDEyM0ZG
IC8qIENoZWNrZWRCb29sZWFuLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1RjE1MUE4MjVC
MDA0MTIzRkYgLyogQ29sbGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzRFREU2MTY5NjE0
OTYwMEY2NTA0MSAvKiBDb21tYVByaW50ZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvSW5kZXhlZEl0ZXJhdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9JbmRleGVk
SXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZTZlMTlhYjBlZGRhYWYwMGQzN2EyNzcyNzEyMjJhNmRi
ZmNlZjUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvSW5kZXhlZEl0ZXJhdG9y
LmgKQEAgLTAsMCArMSw0ODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdURl9JbmRleGVkSXRlcmF0b3JfaAorI2RlZmluZSBXVEZfSW5k
ZXhlZEl0ZXJhdG9yX2gKKworbmFtZXNwYWNlIFdURiB7CisKKyNkZWZpbmUgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVyhjaGVjaykgZG8ge1wKKyAgICBpZiAoIShjaGVjaykpXAorICAgICAgICBP
dmVyZmxvd0hhbmRsZXI6Om92ZXJmbG93ZWQoKTtcCisgICAgfSB3aGlsZSAoMCkKKwordGVtcGxh
dGUgPHR5cGVuYW1lIFZlY3RvclR5cGUsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlciA9IENyYXNoT25PdmVyZmxvdz4gc3RydWN0IEluZGV4ZWRJdGVyYXRvciB7CisgICAgdHlw
ZWRlZiBzdHJ1Y3QgSW5kZXhlZEl0ZXJhdG9yPGNvbnN0IFZlY3RvclR5cGUsIGNvbnN0IFQsIE92
ZXJmbG93SGFuZGxlcj4gY29uc3RfaXRlcmF0b3I7CisKKyAgICB0eXBlZGVmIFQgVmFsdWVUeXBl
OworICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKKyAgICB0eXBlZGVmIFZh
bHVlVHlwZSB2YWx1ZV90eXBlOworICAgIHR5cGVkZWYgVmFsdWVUeXBlKiBwb2ludGVyOworICAg
IHR5cGVkZWYgVmFsdWVUeXBlJiByZWZlcmVuY2U7CisgICAgdHlwZWRlZiBzdGQ6OmJpZGlyZWN0
aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgSW5kZXhlZEl0ZXJh
dG9yKCkKKyAgICAgICAgOiBtX3ZlY3RvcihudWxscHRyKQorICAgICAgICAsIG1fcG9zaXRpb24o
MCkKKyAgICB7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yKFZlY3RvclR5cGUmIHZlY3Rv
ciwgVmFsdWVUeXBlKiBwb3NpdGlvbikKKyAgICAgICAgOiBtX3ZlY3RvcigmdmVjdG9yKQorICAg
ICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24gLSB2ZWN0b3IuZGF0YSgpKQorICAgIHsKKyAgICAg
ICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uIDw9IHZlY3Rvci5zaXplKCkp
OworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvcihjb25zdCBJbmRleGVkSXRlcmF0b3ImIG90
aGVyKQorICAgICAgICA6IG1fdmVjdG9yKG90aGVyLm1fdmVjdG9yKQorICAgICAgICAsIG1fcG9z
aXRpb24ob3RoZXIubV9wb3NpdGlvbikKKyAgICB7CisgICAgfQorCisgICAgVmFsdWVUeXBlKiBv
cGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJm1fdmVjdG9yLT5hdChtX3Bvc2l0aW9uKTsgfQor
ICAgIFZhbHVlVHlwZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3ItPmF0KG1f
cG9zaXRpb24pOyB9CisgICAgVmFsdWVUeXBlKiBnZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
SU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uIDw9IG1fdmVjdG9yLT5zaXplKCkp
OworICAgICAgICByZXR1cm4gbV92ZWN0b3ItPmRhdGEoKSArIG1fcG9zaXRpb247CisgICAgfQor
CisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICB7CisgICAgICAgIElOREVY
RURfSVRFUkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA8IG1fdmVjdG9yLT5zaXplKCkpOworICAg
ICAgICBtX3Bvc2l0aW9uKys7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJ
bmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpCisgICAgeworICAgICAgICBJTkRFWEVEX0lU
RVJBVE9SX09WRVJGTE9XKG1fcG9zaXRpb24gPCBtX3ZlY3Rvci0+c2l6ZSgpKTsKKyAgICAgICAg
SW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAgIG1fcG9zaXRpb24rKzsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJh
dG9yLS0oKQorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0
aW9uID4gMCk7CisgICAgICAgIG1fcG9zaXRpb24tLTsKKyAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0tKGludCkKKyAgICB7CisgICAg
ICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA+IDApOworICAgICAgICBJ
bmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgbV9wb3NpdGlvbi0tOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVy
YXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIg
aW50ZWdlciB0eXBlcy4KKyAgICB0eXBlZGVmIHNpemVfdCAoSW5kZXhlZEl0ZXJhdG9yOjoqVW5z
cGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmVjdG9yID8gJkluZGV4ZWRJdGVyYXRvcjo6bV9wb3NpdGlvbiA6IG51
bGxwdHI7IH0KKworCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvcis9KGxvbmcgaW5jcmVt
ZW50KQorICAgIHsKKyAgICAgICAgaWYgKGluY3JlbWVudCA8IDApIHsKKyAgICAgICAgICAgIElO
REVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaW5jcmVtZW50ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50MzJfdD46Om1heCgpKTsKKyAgICAgICAgICAgIHJldHVybiAoKnRoaXMpIC09IHN0YXRpY19j
YXN0PHNpemVfdD4oLWluY3JlbWVudCk7CisgICAgICAgIH0KKyAgICAgICAgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVygoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIG1fcG9z
aXRpb24pID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmNyZW1lbnQpKTsKKyAgICAgICAgbV9wb3Np
dGlvbiArPSBpbmNyZW1lbnQ7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9w
b3NpdGlvbiA8PSBtX3ZlY3Rvci0+c2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAg
IH0KKworICAgIEluZGV4ZWRJdGVyYXRvciYgb3BlcmF0b3ItPShsb25nIGRlY3JlbWVudCkKKyAg
ICB7CisgICAgICAgIGlmIChkZWNyZW1lbnQgPCAwKSB7CisgICAgICAgICAgICBJTkRFWEVEX0lU
RVJBVE9SX09WRVJGTE9XKGRlY3JlbWVudCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+
OjptYXgoKSk7CisgICAgICAgICAgICByZXR1cm4gKCp0aGlzKSArPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KC1kZWNyZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9P
VkVSRkxPVyhzdGF0aWNfY2FzdDxzaXplX3Q+KGRlY3JlbWVudCkgPD0gbV9wb3NpdGlvbik7Cisg
ICAgICAgIG1fcG9zaXRpb24gLT0gZGVjcmVtZW50OworICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvcis9KHNpemVfdCBpbmNyZW1lbnQp
CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKChzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpIC0gbV9wb3NpdGlvbikgPiBpbmNyZW1lbnQpOworICAgICAg
ICBtX3Bvc2l0aW9uICs9IGluY3JlbWVudDsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVS
RkxPVyhtX3Bvc2l0aW9uIDw9IG1fdmVjdG9yLT5zaXplKCkpOworICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvci09KHNpemVfdCBkZWNy
ZW1lbnQpCisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGRlY3JlbWVu
dCA8PSBtX3Bvc2l0aW9uKTsKKyAgICAgICAgbV9wb3NpdGlvbiAtPSBkZWNyZW1lbnQ7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJhdG9y
Kz0oaW50MzJfdCBpbmNyZW1lbnQpCisgICAgeworICAgICAgICBpZiAoaW5jcmVtZW50IDwgMCkg
eworICAgICAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpbmNyZW1lbnQgIT0gc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpOworICAgICAgICAgICAgcmV0dXJuICgq
dGhpcykgLT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtaW5jcmVtZW50KTsKKyAgICAgICAgfQorICAg
ICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVf
dD46Om1heCgpIC0gbV9wb3NpdGlvbikgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluY3JlbWVudCkp
OworICAgICAgICBtX3Bvc2l0aW9uICs9IGluY3JlbWVudDsKKyAgICAgICAgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uIDw9IG1fdmVjdG9yLT5zaXplKCkpOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvci09KGlu
dDMyX3QgZGVjcmVtZW50KQorICAgIHsKKyAgICAgICAgaWYgKGRlY3JlbWVudCA8IDApIHsKKyAg
ICAgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coZGVjcmVtZW50ICE9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKTsKKyAgICAgICAgICAgIHJldHVybiAoKnRoaXMp
ICs9IHN0YXRpY19jYXN0PHNpemVfdD4oLWRlY3JlbWVudCk7CisgICAgICAgIH0KKworICAgICAg
ICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKHN0YXRpY19jYXN0PHNpemVfdD4oZGVjcmVtZW50
KSA8PSBtX3Bvc2l0aW9uKTsKKyAgICAgICAgbV9wb3NpdGlvbiAtPSBkZWNyZW1lbnQ7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3Ir
KHNpemVfdCBpbmNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3Ig
cmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBpbmNyZW1lbnQ7CisgICAg
fQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLShzaXplX3QgZGVjcmVtZW50KSBjb25z
dAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAg
IHJldHVybiByZXN1bHQgLT0gZGVjcmVtZW50OworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRv
ciBvcGVyYXRvcisoaW50MzJfdCBpbmNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRl
eGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBpbmNy
ZW1lbnQ7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLShpbnQzMl90IGRl
Y3JlbWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRo
aXMpOworICAgICAgICByZXR1cm4gcmVzdWx0IC09IGRlY3JlbWVudDsKKyAgICB9CisKKyAgICBJ
bmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKHVuc2lnbmVkIGxvbmcgbG9uZyBpbmNyZW1lbnQpIGNv
bnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGluY3JlbWVudCk7CisgICAg
fQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLSh1bnNpZ25lZCBsb25nIGxvbmcgZGVj
cmVtZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhp
cyk7CisgICAgICAgIHJldHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihkZWNyZW1l
bnQpOworICAgIH0KKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKGxvbmcgbG9uZyBpbmNy
ZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlz
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGluY3JlbWVu
dCk7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLShsb25nIGxvbmcgZGVj
cmVtZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhp
cyk7CisgICAgICAgIHJldHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihkZWNyZW1l
bnQpOworICAgIH0KKworI2lmIF9fU0laRU9GX1NJWkVfVF9fICE9IF9fU0laRU9GX0lOVF9fCisg
ICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yKyh1bnNpZ25lZCBpbmNyZW1lbnQpIGNvbnN0Cisg
ICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGluY3JlbWVudCk7CisgICAgfQorCisg
ICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLSh1bnNpZ25lZCBkZWNyZW1lbnQpIGNvbnN0Cisg
ICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlY3JlbWVudCk7CisgICAgfQorI2Vu
ZGlmCisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKGxvbmcgaW5jcmVtZW50KSBjb25z
dAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAg
IHJldHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmNyZW1lbnQpOworICAgIH0K
KworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0obG9uZyBkZWNyZW1lbnQpIGNvbnN0Cisg
ICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlY3JlbWVudCk7CisgICAgfQorCisg
ICAgcHRyZGlmZl90IG9wZXJhdG9yLShjb25zdCBjb25zdF9pdGVyYXRvciYgcmlnaHQpIGNvbnN0
CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1fdmVjdG9yID09IHJp
Z2h0Lm1fdmVjdG9yKTsKKyAgICAgICAgcmV0dXJuIG1fcG9zaXRpb24gLSByaWdodC5tX3Bvc2l0
aW9uOworICAgIH0KKworICAgIHB0cmRpZmZfdCBvcGVyYXRvci0oY29uc3QgVmFsdWVUeXBlKiBy
aWdodCkgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cocmln
aHQgPj0gbV92ZWN0b3ItPmRhdGEoKSk7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZM
T1cobV9wb3NpdGlvbiA+PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHJpZ2h0IC0gbV92ZWN0b3ItPmRh
dGEoKSkpOworICAgICAgICByZXR1cm4gZ2V0KCkgLSByaWdodDsKKyAgICB9CisKKyAgICB2b2lk
IG9wZXJhdG9yPShjb25zdCBJbmRleGVkSXRlcmF0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAg
bV92ZWN0b3IgPSBvdGhlci5tX3ZlY3RvcjsKKyAgICAgICAgbV9wb3NpdGlvbiA9IG90aGVyLm1f
cG9zaXRpb247CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZM
T1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA9
PSBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
Y29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVu
c2FmZUdldCgpICE9IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhF
RF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0
dXJuIHVuc2FmZUdldCgpID09IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVu
c2FmZUdldCgpICE9IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZh
bHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09W
RVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5zYWZlR2V0
KCkgPCBvdGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgVmFsdWVUeXBl
KiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1co
aXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA8PSBv
dGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBjb25zdF9pdGVyYXRvciYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlz
U2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPCBvdGhl
ci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgY29uc3Rf
aXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9P
VkVSRkxPVyhzYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQo
KSA8PSBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPihjb25z
dCBJbmRleGVkSXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9J
VEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJu
IHVuc2FmZUdldCgpID4gb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAg
ICAgIHJldHVybiB1bnNhZmVHZXQoKSA+PSBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAg
ICBib29sIG9wZXJhdG9yPihjb25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsK
KyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpID4gb3RoZXI7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvcj49KGNvbnN0IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJ
TkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAg
ICByZXR1cm4gdW5zYWZlR2V0KCkgPj0gb3RoZXI7CisgICAgfQorCisgICAgb3BlcmF0b3IgY29u
c3RfaXRlcmF0b3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3RfaXRlcmF0b3IgcmVzdWx0
OworICAgICAgICByZXN1bHQubV92ZWN0b3IgPSBtX3ZlY3RvcjsKKyAgICAgICAgcmVzdWx0Lm1f
cG9zaXRpb24gPSBtX3Bvc2l0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIFZlY3RvclR5cGUqIG1fdmVjdG9yOworICAgIHNpemVfdCBtX3Bvc2l0aW9uOworCisgICAg
Ym9vbCBpc1NhZmVUb0NvbXBhcmUoY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiAhbV92ZWN0b3IgfHwgIW90aGVyLm1fdmVj
dG9yOworICAgIH0KKworICAgIGJvb2wgaXNTYWZlVG9Db21wYXJlKGNvbnN0IFZhbHVlVHlwZSog
dmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGlmICghbV92ZWN0b3IpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgc2l6ZV90IGRlbHRhID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pih2YWx1ZSAtIG1f
dmVjdG9yLT5kYXRhKCkpOworICAgICAgICByZXR1cm4gZGVsdGEgPD0gbV92ZWN0b3ItPnNpemUo
KTsKKyAgICB9CisKKyAgICBWYWx1ZVR5cGUqIHVuc2FmZUdldCgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoIW1fdmVjdG9yKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiBnZXQoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgdHlwZW5hbWUg
SW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPjo6VmFsdWVUeXBl
KiBnZXRQdHIoSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiBw
KQoreworICAgIHJldHVybiBwLmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgcHRyZGlm
Zl90IG9wZXJhdG9yLShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRv
cjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIElOREVYRURf
SVRFUkFUT1JfT1ZFUkZMT1cobGVmdCA+PSByaWdodC5tX3ZlY3Rvci0+ZGF0YSgpKTsKKyAgICBJ
TkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGxlZnQgPD0gcmlnaHQubV92ZWN0b3ItPmVuZCgpLmdl
dCgpKTsKKyAgICByZXR1cm4gbGVmdCAtIHJpZ2h0LmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Citp
bmxpbmUgcHRyZGlmZl90IG9wZXJhdG9yLShWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJ
dGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIElO
REVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobGVmdCA+PSByaWdodC5tX3ZlY3Rvci0+ZGF0YSgpKTsK
KyAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGxlZnQgPD0gcmlnaHQubV92ZWN0b3ItPmVu
ZCgpLmdldCgpKTsKKyAgICByZXR1cm4gbGVmdCAtIHJpZ2h0LmdldCgpOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXI+CitpbmxpbmUgcHRyZGlmZl90IG9wZXJhdG9yLShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNv
bnN0IEluZGV4ZWRJdGVyYXRvcjxjb25zdCBULCBjb25zdCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFu
ZGxlcj4mIHJpZ2h0KQoreworICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobGVmdCA+PSBy
aWdodC5tX3ZlY3Rvci0+ZGF0YSgpKTsKKyAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGxl
ZnQgPD0gcmlnaHQubV92ZWN0b3ItPmVuZCgpLmdldCgpKTsKKyAgICByZXR1cm4gbGVmdCAtIHJp
Z2h0LmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBl
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFZhbHVl
VHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dI
YW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID09IGxlZnQ7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25z
dCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkK
K3sKKyAgICByZXR1cm4gcmlnaHQgPT0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJv
b2wgb3BlcmF0b3IhPShWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBW
YWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCAh
PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZh
bHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZs
b3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ICE9IGxlZnQ7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPD0oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJ
bmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sK
KyAgICByZXR1cm4gcmlnaHQgPj0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wg
b3BlcmF0b3I8PShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxU
LCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdo
dCA+PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBl
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KFZhbHVl
VHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dI
YW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0IDw9IGxlZnQ7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25z
dCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkK
K3sKKyAgICByZXR1cm4gcmlnaHQgPD0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJv
b2wgb3BlcmF0b3I8KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZh
bHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID4g
bGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZhbHVl
VHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dI
YW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID4gbGVmdDsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I+KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhl
ZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAg
cmV0dXJuIHJpZ2h0IDwgbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0
b3I+KGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVl
VHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0IDwgbGVm
dDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFZlY3RvclR5cGUsIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4gc3RydWN0IEluZGV4ZWRJdGVyYXRvclNlbGVjdG9yIHsKKyAgICB0eXBlZGVmIHR5
cGVuYW1lIFZlY3RvclR5cGU6OlZhbHVlVHlwZSBWYWx1ZVR5cGU7CisgICAgdHlwZWRlZiBJbmRl
eGVkSXRlcmF0b3I8VmVjdG9yVHlwZSwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+IGl0ZXJh
dG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3I6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0
X2l0ZXJhdG9yOworICAgIHN0YXRpYyBpdGVyYXRvciBtYWtlSXRlcmF0b3IoVmVjdG9yVHlwZSYg
dmVjdG9yLCBWYWx1ZVR5cGUqIHApIHsgcmV0dXJuIGl0ZXJhdG9yKHZlY3RvciwgcCk7IH0KKyAg
ICBzdGF0aWMgY29uc3RfaXRlcmF0b3IgbWFrZUNvbnN0SXRlcmF0b3IoY29uc3QgVmVjdG9yVHlw
ZSYgdmVjdG9yLCBjb25zdCBWYWx1ZVR5cGUqIHApIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHZl
Y3RvciwgcCk7IH0KK307CisKKyN1bmRlZiBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XCisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaCBi
L1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCmluZGV4IGE1NWQ3YWVlYWI4NGI5YzQ5
NTE5NmU4ZTIzMGExZGMxNzg1MTkzYWIuLjgxMWU5ZmZjZWEzMzdhNmM3ZDhiMjkxNjMwZTJhZmRm
OGU1NjYzOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCkBAIC04Myw3ICs4Myw3IEBAIHB1
YmxpYzoKICAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5yZWZDb3VudCA9IDE7
CiAgICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+bGVuZ3RoID0gb3RoZXIuc2l6
ZSgpOwogICAgICAgICBBU1NFUlQoSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5sZW5ndGgg
PT0gb3RoZXIuc2l6ZSgpKTsKLSAgICAgICAgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD46OnVuaW5p
dGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpLCBtX2RhdGEpOworICAgICAg
ICBWZWN0b3JUeXBlT3BlcmF0aW9uczxUPjo6dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90aGVy
LmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuZW5kKCkpLCBtX2RhdGEpOwogICAgIH0KICAgICAKICAg
ICBSZWZDb3VudGVkQXJyYXkmIG9wZXJhdG9yPShjb25zdCBSZWZDb3VudGVkQXJyYXkmIG90aGVy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9W
ZWN0b3IuaAppbmRleCAyNzQ1NjhhNjkxYzY0YTAzNDIzYTRmMmI3MzQ4NzdlNjIwNzJkOTFlLi40
YWFhNDhhYzI0YTQyZmU5OWE4MDhlYTdiMWVkMmI4ZDA4MjJjMDA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9WZWN0b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaApAQCAtMjgs
NiArMjgsOCBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0
aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvR2V0
UHRyLmg+CisjaW5jbHVkZSA8d3RmL0luZGV4ZWRJdGVyYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9N
YWxsb2NQdHIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CkBAIC01NTQsMTQgKzU1NiwxNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IDAsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciA9
IENyYQogY2xhc3MgVmVjdG9yIDogcHJpdmF0ZSBWZWN0b3JCdWZmZXI8VCwgaW5saW5lQ2FwYWNp
dHk+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHByaXZhdGU6CisKICAgICB0eXBl
ZGVmIFZlY3RvckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eT4gQmFzZTsKICAgICB0eXBlZGVmIFZl
Y3RvclR5cGVPcGVyYXRpb25zPFQ+IFR5cGVPcGVyYXRpb25zOworICAgIHR5cGVkZWYgSW5kZXhl
ZEl0ZXJhdG9yU2VsZWN0b3I8VmVjdG9yLCBPdmVyZmxvd0hhbmRsZXI+IEl0ZXJhdG9yU2VsZWN0
b3I7CiAKIHB1YmxpYzoKICAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOwogCi0gICAgdHlwZWRlZiBU
KiBpdGVyYXRvcjsKLSAgICB0eXBlZGVmIGNvbnN0IFQqIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5
cGVkZWYgdHlwZW5hbWUgSXRlcmF0b3JTZWxlY3Rvcjo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAg
dHlwZWRlZiB0eXBlbmFtZSBJdGVyYXRvclNlbGVjdG9yOjpjb25zdF9pdGVyYXRvciBjb25zdF9p
dGVyYXRvcjsKKwogICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiBy
ZXZlcnNlX2l0ZXJhdG9yOwogICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0
X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogCkBAIC01NzQsMTQgKzU3OSwxNCBA
QCBwdWJsaWM6CiAgICAgICAgIDogQmFzZShzaXplLCBzaXplKQogICAgIHsKICAgICAgICAgaWYg
KGJlZ2luKCkpCi0gICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShiZWdpbigp
LCBlbmQoKSk7CisgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShnZXRQdHIo
YmVnaW4oKSksIGdldFB0cihlbmQoKSkpOwogICAgIH0KIAogICAgIFZlY3Rvcih1bnNpZ25lZCBz
aXplLCBjb25zdCBUJiB2YWwpCiAgICAgICAgIDogQmFzZShzaXplLCBzaXplKQogICAgIHsKICAg
ICAgICAgaWYgKGJlZ2luKCkpCi0gICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFs
aXplZEZpbGwoYmVnaW4oKSwgZW5kKCksIHZhbCk7CisgICAgICAgICAgICBUeXBlT3BlcmF0aW9u
czo6dW5pbml0aWFsaXplZEZpbGwoZ2V0UHRyKGJlZ2luKCkpLCBnZXRQdHIoZW5kKCkpLCB2YWwp
OwogICAgIH0KIAogICAgIFZlY3RvcihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4gaW5pdGlhbGl6
ZXJMaXN0KQpAQCAtNjQ1LDEwICs2NTAsMTAgQEAgcHVibGljOgogICAgIGNvbnN0IFQqIGRhdGEo
KSBjb25zdCB7IHJldHVybiBCYXNlOjpidWZmZXIoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qg
ZGF0YU1lbW9yeU9mZnNldCgpIHsgcmV0dXJuIEJhc2U6OmJ1ZmZlck1lbW9yeU9mZnNldCgpOyB9
CiAKLSAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGRhdGEoKTsgfQotICAgIGl0ZXJhdG9y
IGVuZCgpIHsgcmV0dXJuIGJlZ2luKCkgKyBtX3NpemU7IH0KLSAgICBjb25zdF9pdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIGRhdGEoKTsgfQotICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgKyBtX3NpemU7IH0KKyAgICBpdGVyYXRvciBiZWdpbigp
IHsgcmV0dXJuIEl0ZXJhdG9yU2VsZWN0b3I6Om1ha2VJdGVyYXRvcigqdGhpcywgZGF0YSgpKTsg
fQorICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGJlZ2luKCkgKyBzaXplKCk7IH0KKyAgICBj
b25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIEl0ZXJhdG9yU2VsZWN0b3I6Om1h
a2VDb25zdEl0ZXJhdG9yKCp0aGlzLCBkYXRhKCkpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSArIHNpemUoKTsgfQogCiAgICAgcmV2ZXJzZV9pdGVy
YXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogICAgIHJl
dmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7
IH0KQEAgLTY4Myw2ICs2ODgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKCkgeyBzaHJp
bmtDYXBhY2l0eSgwKTsgfQogCisgICAgdm9pZCBhcHBlbmQoY29uc3RfaXRlcmF0b3IsIHVuc2ln
bmVkKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIGFwcGVuZChjb25zdCBVKiwgdW5z
aWduZWQpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKFUmJik7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCB1bmNoZWNrZWRBcHBlbmQoVSYmIHZhbCk7CkBAIC03
NDYsNyArNzUyLDcgQEAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+
OjpWZWN0b3IoY29uc3QgVmVjdG9yJiBvdGhlcikKICAgICA6IEJhc2Uob3RoZXIuY2FwYWNpdHko
KSwgb3RoZXIuc2l6ZSgpKQogewogICAgIGlmIChiZWdpbigpKQotICAgICAgICBUeXBlT3BlcmF0
aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCksIGJlZ2lu
KCkpOworICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90
aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyPgpAQCAtNzU1LDcgKzc2MSw3IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6VmVjdG9yKGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFj
aXR5CiAgICAgOiBCYXNlKG90aGVyLmNhcGFjaXR5KCksIG90aGVyLnNpemUoKSkKIHsKICAgICBp
ZiAoYmVnaW4oKSkKLSAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90
aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpLCBiZWdpbigpKTsKKyAgICAgICAgVHlwZU9wZXJhdGlv
bnM6OnVuaW5pdGlhbGl6ZWRDb3B5KGdldFB0cihvdGhlci5iZWdpbigpKSwgZ2V0UHRyKG90aGVy
LmVuZCgpKSwgZ2V0UHRyKGJlZ2luKCkpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5z
aWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KQEAgLTc3Miw4
ICs3NzgsOCBAQCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj4mIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYQogICAgICAgICBBU1NFUlQoYmVnaW4o
KSk7CiAgICAgfQogICAgIAotICAgIHN0ZDo6Y29weShvdGhlci5iZWdpbigpLCBvdGhlci5iZWdp
bigpICsgc2l6ZSgpLCBiZWdpbigpKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXpl
ZENvcHkob3RoZXIuYmVnaW4oKSArIHNpemUoKSwgb3RoZXIuZW5kKCksIGVuZCgpKTsKKyAgICBz
dGQ6OmNvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuYmVnaW4oKSArIHNp
emUoKSksIGdldFB0cihiZWdpbigpKSk7CisgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6
ZWRDb3B5KGdldFB0cihvdGhlci5iZWdpbigpICsgc2l6ZSgpKSwgZ2V0UHRyKG90aGVyLmVuZCgp
KSwgZ2V0UHRyKGVuZCgpKSk7CiAgICAgbV9zaXplID0gb3RoZXIuc2l6ZSgpOwogCiAgICAgcmV0
dXJuICp0aGlzOwpAQCAtNzk3LDkgKzgwMyw5IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyPiYgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhCiAg
ICAgICAgIHJlc2VydmVDYXBhY2l0eShvdGhlci5zaXplKCkpOwogICAgICAgICBBU1NFUlQoYmVn
aW4oKSk7CiAgICAgfQotICAgIAotICAgIHN0ZDo6Y29weShvdGhlci5iZWdpbigpLCBvdGhlci5i
ZWdpbigpICsgc2l6ZSgpLCBiZWdpbigpKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFs
aXplZENvcHkob3RoZXIuYmVnaW4oKSArIHNpemUoKSwgb3RoZXIuZW5kKCksIGVuZCgpKTsKKwor
ICAgIHN0ZDo6Y29weShnZXRQdHIob3RoZXIuYmVnaW4oKSksIGdldFB0cihvdGhlci5iZWdpbigp
ICsgc2l6ZSgpKSwgZ2V0UHRyKGJlZ2luKCkpKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0
aWFsaXplZENvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkgKyBzaXplKCkpLCBnZXRQdHIob3RoZXIu
ZW5kKCkpLCBnZXRQdHIoZW5kKCkpKTsKICAgICBtX3NpemUgPSBvdGhlci5zaXplKCk7CiAKICAg
ICByZXR1cm4gKnRoaXM7CkBAIC04NTksOCArODY1LDggQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmZpbGwoY29uc3QgVCYgdmFsLCB1bnNpZ25lZCBu
ZXcKICAgICAgICAgQVNTRVJUKGJlZ2luKCkpOwogICAgIH0KICAgICAKLSAgICBzdGQ6OmZpbGwo
YmVnaW4oKSwgZW5kKCksIHZhbCk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRG
aWxsKGVuZCgpLCBiZWdpbigpICsgbmV3U2l6ZSwgdmFsKTsKKyAgICBzdGQ6OmZpbGwoZ2V0UHRy
KGJlZ2luKCkpLCBnZXRQdHIoZW5kKCkpLCB2YWwpOworICAgIFR5cGVPcGVyYXRpb25zOjp1bmlu
aXRpYWxpemVkRmlsbChnZXRQdHIoZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkgKyBuZXdTaXplLCB2
YWwpOwogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiB9CiAKQEAgLTg4MSwxMyArODg3LDEzIEBAIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpleHBhbmRDYXBh
Y2l0eSh1bnNpZ25lZCBuZXdNaW5DCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogVCogVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpleHBhbmRDYXBhY2l0eSh1bnNpZ25lZCBuZXdN
aW5DYXBhY2l0eSwgVCogcHRyKQogewotICAgIGlmIChwdHIgPCBiZWdpbigpIHx8IHB0ciA+PSBl
bmQoKSkgeworICAgIGlmIChwdHIgPCBnZXRQdHIoYmVnaW4oKSkgfHwgcHRyID49IGdldFB0cihl
bmQoKSkpIHsKICAgICAgICAgZXhwYW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpOwogICAgICAg
ICByZXR1cm4gcHRyOwogICAgIH0KLSAgICB1bnNpZ25lZCBpbmRleCA9IHB0ciAtIGJlZ2luKCk7
CisgICAgdW5zaWduZWQgaW5kZXggPSBwdHIgLSBnZXRQdHIoYmVnaW4oKSk7CiAgICAgZXhwYW5k
Q2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpOwotICAgIHJldHVybiBiZWdpbigpICsgaW5kZXg7Cisg
ICAgcmV0dXJuIGdldFB0cihiZWdpbigpKSArIGluZGV4OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgpA
QCAtODk5LDE1ICs5MDUsMTUgQEAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlcj46OnRyeUV4cGFuZENhcGFjaXR5KHVuc2lnbmVkIG5ld00KIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXI+CiBjb25zdCBUKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46
OnRyeUV4cGFuZENhcGFjaXR5KHVuc2lnbmVkIG5ld01pbkNhcGFjaXR5LCBjb25zdCBUKiBwdHIp
CiB7Ci0gICAgaWYgKHB0ciA8IGJlZ2luKCkgfHwgcHRyID49IGVuZCgpKSB7CisgICAgaWYgKHB0
ciA8IGdldFB0cihiZWdpbigpKSB8fCBwdHIgPj0gZ2V0UHRyKGVuZCgpKSkgewogICAgICAgICBp
ZiAoIXRyeUV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5KSkKICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KLSAgICB1bnNpZ25lZCBpbmRleCA9IHB0
ciAtIGJlZ2luKCk7CisgICAgdW5zaWduZWQgaW5kZXggPSBwdHIgLSBnZXRQdHIoYmVnaW4oKSk7
CiAgICAgaWYgKCF0cnlFeHBhbmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0eSkpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBiZWdpbigpICsgaW5kZXg7CisgICAgcmV0dXJuIGdldFB0cihi
ZWdpbigpKSArIGluZGV4OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgpAQCAtOTIxLDEyICs5MjcsMTIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIGlubGluZSB2b2lkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVzaXplKHVuc2lnbmVkIHNp
emUpCiB7CiAgICAgaWYgKHNpemUgPD0gbV9zaXplKQotICAgICAgICBUeXBlT3BlcmF0aW9uczo6
ZGVzdHJ1Y3QoYmVnaW4oKSArIHNpemUsIGVuZCgpKTsKKyAgICAgICAgVHlwZU9wZXJhdGlvbnM6
OmRlc3RydWN0KGdldFB0cihiZWdpbigpKSArIHNpemUsIGdldFB0cihlbmQoKSkpOwogICAgIGVs
c2UgewogICAgICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgICAgICBleHBhbmRD
YXBhY2l0eShzaXplKTsKICAgICAgICAgaWYgKGJlZ2luKCkpCi0gICAgICAgICAgICBUeXBlT3Bl
cmF0aW9uczo6aW5pdGlhbGl6ZShlbmQoKSwgYmVnaW4oKSArIHNpemUpOworICAgICAgICAgICAg
VHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoZ2V0UHRyKGVuZCgpKSwgZ2V0UHRyKGJlZ2luKCkp
ICsgc2l6ZSk7CiAgICAgfQogICAgIAogICAgIG1fc2l6ZSA9IHNpemU7CkBAIC05NDMsNyArOTQ5
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlcj4KIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXI+OjpzaHJpbmsodW5zaWduZWQgc2l6ZSkKIHsKICAgICBBU1NFUlQoc2l6ZSA8
PSBtX3NpemUpOwotICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChiZWdpbigpICsgc2l6ZSwg
ZW5kKCkpOworICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChnZXRQdHIoYmVnaW4oKSkgKyBz
aXplLCBnZXRQdHIoZW5kKCkpKTsKICAgICBtX3NpemUgPSBzaXplOwogfQogCkBAIC05NTQsNyAr
OTYwLDcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46
Omdyb3codW5zaWduZWQgc2l6ZSkKICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAg
IGV4cGFuZENhcGFjaXR5KHNpemUpOwogICAgIGlmIChiZWdpbigpKQotICAgICAgICBUeXBlT3Bl
cmF0aW9uczo6aW5pdGlhbGl6ZShlbmQoKSwgYmVnaW4oKSArIHNpemUpOworICAgICAgICBUeXBl
T3BlcmF0aW9uczo6aW5pdGlhbGl6ZShnZXRQdHIoZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkgKyBz
aXplKTsKICAgICBtX3NpemUgPSBzaXplOwogfQogCkBAIC05NjMsMTEgKzk2OSwxMSBAQCB2b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVzZXJ2ZUNhcGFj
aXR5KHVuc2lnbmVkIG5ld0NhcAogewogICAgIGlmIChuZXdDYXBhY2l0eSA8PSBjYXBhY2l0eSgp
KQogICAgICAgICByZXR1cm47Ci0gICAgVCogb2xkQnVmZmVyID0gYmVnaW4oKTsKLSAgICBUKiBv
bGRFbmQgPSBlbmQoKTsKKyAgICBUKiBvbGRCdWZmZXIgPSBnZXRQdHIoYmVnaW4oKSk7CisgICAg
VCogb2xkRW5kID0gZ2V0UHRyKGVuZCgpKTsKICAgICBCYXNlOjphbGxvY2F0ZUJ1ZmZlcihuZXdD
YXBhY2l0eSk7CiAgICAgQVNTRVJUKGJlZ2luKCkpOwotICAgIFR5cGVPcGVyYXRpb25zOjptb3Zl
KG9sZEJ1ZmZlciwgb2xkRW5kLCBiZWdpbigpKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShv
bGRCdWZmZXIsIG9sZEVuZCwgZ2V0UHRyKGJlZ2luKCkpKTsKICAgICBCYXNlOjpkZWFsbG9jYXRl
QnVmZmVyKG9sZEJ1ZmZlcik7CiB9CiAKQEAgLTk3NiwxMiArOTgyLDEyIEBAIGJvb2wgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojp0cnlSZXNlcnZlQ2FwYWNpdHko
dW5zaWduZWQgbmV3CiB7CiAgICAgaWYgKG5ld0NhcGFjaXR5IDw9IGNhcGFjaXR5KCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIFQqIG9sZEJ1ZmZlciA9IGJlZ2luKCk7Ci0gICAgVCogb2xk
RW5kID0gZW5kKCk7CisgICAgVCogb2xkQnVmZmVyID0gZ2V0UHRyKGJlZ2luKCkpOworICAgIFQq
IG9sZEVuZCA9IGdldFB0cihlbmQoKSk7CiAgICAgaWYgKCFCYXNlOjp0cnlBbGxvY2F0ZUJ1ZmZl
cihuZXdDYXBhY2l0eSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBBU1NFUlQoYmVnaW4o
KSk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkp
OworICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBnZXRQdHIoYmVn
aW4oKSkpOwogICAgIEJhc2U6OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KQEAgLTEwMDQsMTcgKzEwMTAsMTcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnNocmlua0NhcGFjaXR5KHVuc2lnbmVkIG5ld0Nh
cGEKICAgICBpZiAobmV3Q2FwYWNpdHkgPCBzaXplKCkpIAogICAgICAgICBzaHJpbmsobmV3Q2Fw
YWNpdHkpOwogCi0gICAgVCogb2xkQnVmZmVyID0gYmVnaW4oKTsKKyAgICBUKiBvbGRCdWZmZXIg
PSBnZXRQdHIoYmVnaW4oKSk7CiAgICAgaWYgKG5ld0NhcGFjaXR5ID4gMCkgewogICAgICAgICBp
ZiAoQmFzZTo6c2hvdWxkUmVhbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSkpIHsKICAgICAgICAg
ICAgIEJhc2U6OnJlYWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgVCogb2xkRW5kID0gZW5kKCk7CisgICAgICAgIFQq
IG9sZEVuZCA9IGdldFB0cihlbmQoKSk7CiAgICAgICAgIEJhc2U6OmFsbG9jYXRlQnVmZmVyKG5l
d0NhcGFjaXR5KTsKLSAgICAgICAgaWYgKGJlZ2luKCkgIT0gb2xkQnVmZmVyKQotICAgICAgICAg
ICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOworICAg
ICAgICBpZiAoZ2V0UHRyKGJlZ2luKCkpICE9IG9sZEJ1ZmZlcikKKyAgICAgICAgICAgIFR5cGVP
cGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBnZXRQdHIoYmVnaW4oKSkpOwogICAg
IH0KIAogICAgIEJhc2U6OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKQEAgLTEwMzQsMTEg
KzEwNDAsMTcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
cj46OmFwcGVuZChjb25zdCBVKiBkYXRhLCB1bnNpZ25lZAogICAgIH0KICAgICBpZiAobmV3U2l6
ZSA8IG1fc2l6ZSkKICAgICAgICAgQ1JBU0goKTsKLSAgICBUKiBkZXN0ID0gZW5kKCk7CisgICAg
VCogZGVzdCA9IGdldFB0cihlbmQoKSk7CiAgICAgVmVjdG9yQ29waWVyPHN0ZDo6aXNfdHJpdmlh
bDxUPjo6dmFsdWUsIFU+Ojp1bmluaXRpYWxpemVkQ29weShkYXRhLCAmZGF0YVtkYXRhU2l6ZV0s
IGRlc3QpOwogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Cit2b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kKGNvbnN0
X2l0ZXJhdG9yIGRhdGEsIHVuc2lnbmVkIGRhdGFTaXplKQoreworICAgIGFwcGVuZChnZXRQdHIo
ZGF0YSksIGRhdGFTaXplKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUg
VT4KIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojp0cnlB
cHBlbmQoY29uc3QgVSogZGF0YSwgdW5zaWduZWQgZGF0YVNpemUpCiB7CkBAIC0xMDUxLDcgKzEw
NjMsNyBAQCBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6
dHJ5QXBwZW5kKGNvbnN0IFUqIGRhdGEsIHVuc2lnbgogICAgIH0KICAgICBpZiAobmV3U2l6ZSA8
IG1fc2l6ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFQqIGRlc3QgPSBlbmQoKTsKKyAg
ICBUKiBkZXN0ID0gZ2V0UHRyKGVuZCgpKTsKICAgICBWZWN0b3JDb3BpZXI8c3RkOjppc190cml2
aWFsPFQ+Ojp2YWx1ZSwgVT46OnVuaW5pdGlhbGl6ZWRDb3B5KGRhdGEsICZkYXRhW2RhdGFTaXpl
XSwgZGVzdCk7CiAgICAgbV9zaXplID0gbmV3U2l6ZTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEw
NjEsNyArMTA3Myw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHRlbXBsYXRlCiBBTFdBWVNfSU5MSU5FIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmQoVSYm
IHZhbHVlKQogewogICAgIGlmIChzaXplKCkgIT0gY2FwYWNpdHkoKSkgewotICAgICAgICBuZXcg
KE5vdE51bGwsIGVuZCgpKSBUKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgICAgICBuZXcg
KE5vdE51bGwsIGdldFB0cihlbmQoKSkpIFQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CiAgICAg
ICAgICsrbV9zaXplOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA3OCw3ICsxMDkwLDcg
QEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmFwcGVu
ZFNsb3dDYXNlKFUmJiB2YWx1ZSkKICAgICBwdHIgPSBleHBhbmRDYXBhY2l0eShzaXplKCkgKyAx
LCBwdHIpOwogICAgIEFTU0VSVChiZWdpbigpKTsKIAotICAgIG5ldyAoTm90TnVsbCwgZW5kKCkp
IFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKKyAgICBuZXcgKE5vdE51bGwsIGdldFB0cihlbmQo
KSkpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKICAgICArK21fc2l6ZTsKIH0KIApAQCAtMTA5
MSwxNCArMTEwMywxNCBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlcj46OnVuY2hlY2tlZEFwcGVuZChVJiYgdmFsdQogICAgIEFTU0VSVChzaXpl
KCkgPCBjYXBhY2l0eSgpKTsKIAogICAgIGF1dG8gcHRyID0gc3RkOjphZGRyZXNzb2YodmFsdWUp
OwotICAgIG5ldyAoTm90TnVsbCwgZW5kKCkpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKKyAg
ICBuZXcgKE5vdE51bGwsIGdldFB0cihlbmQoKSkpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsK
ICAgICArK21fc2l6ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUgVSwg
dW5zaWduZWQgb3RoZXJDYXBhY2l0eT4KIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kVmVjdG9yKGNvbnN0IFZlY3RvcjxVLCBvdGhl
ckNhcGFjaXR5PiYgdmFsKQogewotICAgIGFwcGVuZCh2YWwuYmVnaW4oKSwgdmFsLnNpemUoKSk7
CisgICAgYXBwZW5kKGdldFB0cih2YWwuYmVnaW4oKSksIHZhbC5zaXplKCkpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgpAQCAtMTExMiw4ICsxMTI0LDggQEAgdm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46Omluc2VydCh1bnNp
Z25lZCBwb3NpdGlvbiwgY29uc3QKICAgICB9CiAgICAgaWYgKG5ld1NpemUgPCBtX3NpemUpCiAg
ICAgICAgIENSQVNIKCk7Ci0gICAgVCogc3BvdCA9IGJlZ2luKCkgKyBwb3NpdGlvbjsKLSAgICBU
eXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGVuZCgpLCBzcG90ICsgZGF0YVNp
emUpOworICAgIFQqIHNwb3QgPSBnZXRQdHIoYmVnaW4oKSkgKyBwb3NpdGlvbjsKKyAgICBUeXBl
T3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGdldFB0cihlbmQoKSksIHNwb3QgKyBk
YXRhU2l6ZSk7CiAgICAgVmVjdG9yQ29waWVyPHN0ZDo6aXNfdHJpdmlhbDxUPjo6dmFsdWUsIFU+
Ojp1bmluaXRpYWxpemVkQ29weShkYXRhLCAmZGF0YVtkYXRhU2l6ZV0sIHNwb3QpOwogICAgIG1f
c2l6ZSA9IG5ld1NpemU7CiB9CkBAIC0xMTI5LDggKzExNDEsOCBAQCBpbmxpbmUgdm9pZCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46Omluc2VydCh1bnNpZ25lZCBw
b3NpdGlvbgogICAgICAgICBBU1NFUlQoYmVnaW4oKSk7CiAgICAgfQogCi0gICAgVCogc3BvdCA9
IGJlZ2luKCkgKyBwb3NpdGlvbjsKLSAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5n
KHNwb3QsIGVuZCgpLCBzcG90ICsgMSk7CisgICAgVCogc3BvdCA9IGdldFB0cihiZWdpbigpKSAr
IHBvc2l0aW9uOworICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCwgZ2V0
UHRyKGVuZCgpKSwgc3BvdCArIDEpOwogICAgIG5ldyAoTm90TnVsbCwgc3BvdCkgVChzdGQ6OmZv
cndhcmQ8VT4oKnB0cikpOwogICAgICsrbV9zaXplOwogfQpAQCAtMTEzOCwxNiArMTE1MCwxNiBA
QCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46
Omluc2VydCh1bnNpZ25lZCBwb3NpdGlvbgogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5h
bWUgVSwgdW5zaWduZWQgYz4KIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyPjo6aW5zZXJ0VmVjdG9yKHVuc2lnbmVkIHBvc2l0aW9uLCBjb25zdCBW
ZWN0b3I8VSwgYz4mIHZhbCkKIHsKLSAgICBpbnNlcnQocG9zaXRpb24sIHZhbC5iZWdpbigpLCB2
YWwuc2l6ZSgpKTsKKyAgICBpbnNlcnQocG9zaXRpb24sIGdldFB0cih2YWwuYmVnaW4oKSksIHZh
bC5zaXplKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUodW5zaWduZWQgcG9zaXRpb24p
CiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24gPCBzaXpl
KCkpOwotICAgIFQqIHNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247CisgICAgVCogc3BvdCA9IGdl
dFB0cihiZWdpbigpKSArIHBvc2l0aW9uOwogICAgIHNwb3QtPn5UKCk7Ci0gICAgVHlwZU9wZXJh
dGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90ICsgMSwgZW5kKCksIHNwb3QpOworICAgIFR5cGVP
cGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCArIDEsIGdldFB0cihlbmQoKSksIHNwb3Qp
OwogICAgIC0tbV9zaXplOwogfQogCkBAIC0xMTU2LDEwICsxMTY4LDEwIEBAIGlubGluZSB2b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlKHVuc2ln
bmVkIHBvc2l0aW9uCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9z
aXRpb24gPD0gc2l6ZSgpKTsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihw
b3NpdGlvbiArIGxlbmd0aCA8PSBzaXplKCkpOwotICAgIFQqIGJlZ2luU3BvdCA9IGJlZ2luKCkg
KyBwb3NpdGlvbjsKKyAgICBUKiBiZWdpblNwb3QgPSBnZXRQdHIoYmVnaW4oKSkgKyBwb3NpdGlv
bjsKICAgICBUKiBlbmRTcG90ID0gYmVnaW5TcG90ICsgbGVuZ3RoOwogICAgIFR5cGVPcGVyYXRp
b25zOjpkZXN0cnVjdChiZWdpblNwb3QsIGVuZFNwb3QpOyAKLSAgICBUeXBlT3BlcmF0aW9uczo6
bW92ZU92ZXJsYXBwaW5nKGVuZFNwb3QsIGVuZCgpLCBiZWdpblNwb3QpOworICAgIFR5cGVPcGVy
YXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoZW5kU3BvdCwgZ2V0UHRyKGVuZCgpKSwgYmVnaW5TcG90
KTsKICAgICBtX3NpemUgLT0gbGVuZ3RoOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCAwY2YwOWUxZjVlYzk4
YTg1MTQ0Y2M3MjJkMmE2Y2M0YWU0ZjkzODk4Li4zZWU4MDY4YTNhNzZhNGE0M2FjNjQzMjMyNzcy
NjQzYzE2MTQ5ZDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTE0MzcsOCArMTQzNyw4IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIGlmIChidWZmZXIuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgICAgICBjb25zdCB1aW50OF90KiBwdHIgPSBidWZmZXIuYmVnaW4oKTsKLSAg
ICAgICAgY29uc3QgdWludDhfdCogZW5kID0gYnVmZmVyLmVuZCgpOworICAgICAgICBjb25zdCB1
aW50OF90KiBwdHIgPSBnZXRQdHIoYnVmZmVyLmJlZ2luKCkpOworICAgICAgICBjb25zdCB1aW50
OF90KiBlbmQgPSBnZXRQdHIoYnVmZmVyLmVuZCgpKTsKICAgICAgICAgdWludDMyX3QgdmVyc2lv
bjsKICAgICAgICAgaWYgKCFyZWFkTGl0dGxlRW5kaWFuKHB0ciwgZW5kLCB2ZXJzaW9uKSB8fCB2
ZXJzaW9uID4gQ3VycmVudFZlcnNpb24pCiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggMmQ5Yjc5ZTEzYWJmOTYw
YTYxNGI5NmQyNzA2NjBlNWYzNWUzNDE3Zi4uZTkyZmIyZjc5MGJlNGM1YzE2NzZjNjk4YzViZTFi
YTY1ZTFhNjkxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAt
MjA3MywxMSArMjA3MywxMSBAQCBpbmxpbmUgYm9vbCBTZWFyY2hCdWZmZXI6OmlzQmFkTWF0Y2go
Y29uc3QgVUNoYXIqIG1hdGNoLCBzaXplX3QgbWF0Y2hMZW5ndGgpIGNvbgogICAgIC8vIGNyZWF0
aW5nIGEgbmV3IG9uZSBlYWNoIHRpbWUuCiAgICAgbm9ybWFsaXplQ2hhcmFjdGVycyhtYXRjaCwg
bWF0Y2hMZW5ndGgsIG1fbm9ybWFsaXplZE1hdGNoKTsKIAotICAgIGNvbnN0IFVDaGFyKiBhID0g
bV9ub3JtYWxpemVkVGFyZ2V0LmJlZ2luKCk7Ci0gICAgY29uc3QgVUNoYXIqIGFFbmQgPSBtX25v
cm1hbGl6ZWRUYXJnZXQuZW5kKCk7CisgICAgY29uc3QgVUNoYXIqIGEgPSBnZXRQdHIobV9ub3Jt
YWxpemVkVGFyZ2V0LmJlZ2luKCkpOworICAgIGNvbnN0IFVDaGFyKiBhRW5kID0gZ2V0UHRyKG1f
bm9ybWFsaXplZFRhcmdldC5lbmQoKSk7CiAKLSAgICBjb25zdCBVQ2hhciogYiA9IG1fbm9ybWFs
aXplZE1hdGNoLmJlZ2luKCk7Ci0gICAgY29uc3QgVUNoYXIqIGJFbmQgPSBtX25vcm1hbGl6ZWRN
YXRjaC5lbmQoKTsKKyAgICBjb25zdCBVQ2hhciogYiA9IGdldFB0cihtX25vcm1hbGl6ZWRNYXRj
aC5iZWdpbigpKTsKKyAgICBjb25zdCBVQ2hhciogYkVuZCA9IGdldFB0cihtX25vcm1hbGl6ZWRN
YXRjaC5lbmQoKSk7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAvLyBTa2lwIHJ1bnMg
b2Ygbm9uLWthbmEtbGV0dGVyIGNoYXJhY3RlcnMuIFRoaXMgaXMgbmVjZXNzYXJ5IHNvIHdlIGNh
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXIubW0KaW5kZXggMDA5OGM3NjMxM2Y0Y2M2NjBlOTY4YTkwZDNlOTM4YThiMWJiYzlkZS4u
MjA2MmZkM2UxMjEzZDg2NzE3OTZlYjczOWU4YjU2YzdlMmI3YTU5OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCkBAIC01
NTUsNyArNTU1LDcgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpidWlsZFNlbGVj
dGlvbkhpZ2hsaWdodCgpCiAKICAgICAgICAgaWYgKCFjZ1JlY3RzLmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgQ0dSZWN0IHZpc2libGVSZWN0ID0gbWFpbkZyYW1lVmlldy0+dmlzaWJsZUNvbnRl
bnRSZWN0KCk7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxp
Z2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRo
U3R5bGVBbmREaXJlY3Rpb24obnVsbHB0ciwgY2dSZWN0cy5iZWdpbigpLCBjZ1JlY3RzLnNpemUo
KSwgdmlzaWJsZVJlY3QsIERESGlnaGxpZ2h0Tm9PdXRsaW5lV2l0aEFycm93LCBZRVMsIE5TV3Jp
dGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxE
REhpZ2hsaWdodFJlZj4gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGlnaGxpZ2h0Q3JlYXRlV2l0
aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCBjZ1JlY3Rz
LmRhdGEoKSwgY2dSZWN0cy5zaXplKCksIHZpc2libGVSZWN0LCBEREhpZ2hsaWdodE5vT3V0bGlu
ZVdpdGhBcnJvdywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVTKSk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIG5ld1BvdGVudGlhbEhpZ2hsaWdodHMuYWRkKEhpZ2hs
aWdodDo6Y3JlYXRlRm9yU2VsZWN0aW9uKCp0aGlzLCBkZEhpZ2hsaWdodCwgc2VsZWN0aW9uUmFu
Z2UpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwCmluZGV4IGQxYjkyYjdiNjA5YjQ1MTk5Yzg0YTQ2
YWVlOWZkYjZjNGY3Y2ZlYzUuLjUwM2IwZThkOWJiZjI5MDZjZTczYmViZWJhMDFiZDYwM2VjNzk5
OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRl
ZEZvbnREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdt
ZW50ZWRGb250RGF0YS5jcHAKQEAgLTM5LDggKzM5LDggQEAgU2VnbWVudGVkRm9udERhdGE6On5T
ZWdtZW50ZWRGb250RGF0YSgpCiAKIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBTZWdtZW50ZWRGb250
RGF0YTo6Zm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAogewotICAgIFZlY3Rv
cjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYW5nZXMuZW5kKCk7Ci0g
ICAgZm9yIChWZWN0b3I8Rm9udERhdGFSYW5nZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yYW5n
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgYXV0byBlbmQgPSBtX3Jhbmdlcy5l
bmQoKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKICAgICAgICAgaWYgKGl0LT5mcm9tKCkgPD0gYyAmJiBpdC0+dG8oKSA+PSBjKQogICAg
ICAgICAgICAgcmV0dXJuIGl0LT5mb250RGF0YSgpLmdldCgpOwogICAgIH0KQEAgLTQ5LDggKzQ5
LDggQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIFNlZ21lbnRlZEZvbnREYXRhOjpmb250RGF0YUZv
ckNoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0CiAKIGJvb2wgU2VnbWVudGVkRm9udERhdGE6OmNv
bnRhaW5zQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKIHsKLSAgICBWZWN0b3I8Rm9udERhdGFS
YW5nZT46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwotICAgIGZvciAoVmVj
dG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgIGF1dG8gZW5kID0gbV9yYW5nZXMuZW5kKCk7CisgICAg
Zm9yIChhdXRvIGl0ID0gbV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgIGlmIChjID49IGl0LT5mcm9tKCkgJiYgYyA8PSBpdC0+dG8oKSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KQEAgLTc2LDggKzc2LDggQEAgYm9vbCBTZWdtZW50ZWRGb250RGF0
YTo6aXNDdXN0b21Gb250KCkgY29uc3QKIAogYm9vbCBTZWdtZW50ZWRGb250RGF0YTo6aXNMb2Fk
aW5nKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8Rm9udERhdGFSYW5nZT46OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPEZvbnREYXRhUmFuZ2U+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewor
ICAgIGF1dG8gZW5kID0gbV9yYW5nZXMuZW5kKCk7CisgICAgZm9yIChhdXRvIGl0ID0gbV9yYW5n
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGlmIChpdC0+Zm9udERhdGEo
KS0+aXNMb2FkaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAKaW5k
ZXggMDUxODcxYWM2YzYwZmI2NDM5MjgzMGFhYzZhZDM4NTJhOTRkNDQ3Ni4uZGQwOTYzYTc1MDFh
ZDJlZTA2MzFhNWUxNmQ3OTUxMTExMjIzOWQ1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcApAQCAtMjAwLDcgKzIwMCw3IEBA
IGJvb2wgY29udmVydFdPRkZUb1NmbnQoU2hhcmVkQnVmZmVyKiB3b2ZmLCBWZWN0b3I8Y2hhcj4m
IHNmbnQpCiAgICAgICAgICAgICB1TG9uZ2YgZGVzdExlbiA9IHRhYmxlT3JpZ0xlbmd0aDsKICAg
ICAgICAgICAgIGlmICghc2ZudC50cnlSZXNlcnZlQ2FwYWNpdHkoc2ZudC5zaXplKCkgKyB0YWJs
ZU9yaWdMZW5ndGgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IEJ5dGVmKiBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxCeXRlZio+KHNmbnQuZW5kKCkpOworICAg
ICAgICAgICAgQnl0ZWYqIGRlc3QgPSByZWludGVycHJldF9jYXN0PEJ5dGVmKj4oZ2V0UHRyKHNm
bnQuZW5kKCkpKTsKICAgICAgICAgICAgIHNmbnQuZ3JvdyhzZm50LnNpemUoKSArIHRhYmxlT3Jp
Z0xlbmd0aCk7CiAgICAgICAgICAgICBpZiAodW5jb21wcmVzcyhkZXN0LCAmZGVzdExlbiwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBCeXRlZio+KHdvZmYtPmRhdGEoKSArIHRhYmxlT2Zmc2V0KSwg
dGFibGVDb21wTGVuZ3RoKSAhPSBaX09LKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRp
ZW50Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
ZGllbnRDYWlyby5jcHAKaW5kZXggNTAyMmM1MGM3ZWU4MjVlMjQwZjBlNzEyMjQ3YzdlZjE2NDhm
MzhiZC4uNzUxNmIwYWNkMTVhYWZkMTJhMzU2YWZmNGQ1MGE2YzRhYTAyNGYyMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRD
YWlyby5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgY2Fpcm9fcGF0dGVybl90KiBHcmFkaWVudDo6cGxh
dGZvcm1HcmFkaWVudChmbG9hdCBnbG9iYWxBbHBoYSkKICAgICBlbHNlCiAgICAgICAgIG1fZ3Jh
ZGllbnQgPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9saW5lYXIobV9wMC54KCksIG1fcDAueSgpLCBt
X3AxLngoKSwgbV9wMS55KCkpOwogCi0gICAgVmVjdG9yPENvbG9yU3RvcD46Oml0ZXJhdG9yIHN0
b3BJdGVyYXRvciA9IG1fc3RvcHMuYmVnaW4oKTsKKyAgICBhdXRvIHN0b3BJdGVyYXRvciA9IG1f
c3RvcHMuYmVnaW4oKTsKICAgICB3aGlsZSAoc3RvcEl0ZXJhdG9yICE9IG1fc3RvcHMuZW5kKCkp
IHsKICAgICAgICAgY2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKG1fZ3JhZGllbnQs
IHN0b3BJdGVyYXRvci0+c3RvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0b3BJdGVyYXRvci0+cmVkLCBzdG9wSXRlcmF0b3ItPmdyZWVuLCBzdG9wSXRlcmF0
b3ItPmJsdWUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCmluZGV4IGRlNDU1MDk0YTBiY2Y3
YzlkZDNiMzllNGY4OGUwMmM1MDlkZWVjODUuLjA3MzQ4MDgxN2YyYjk3YjFmNGVhOWNkNDRhMTZk
Y2RhNWE1YmViMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCkBAIC0xNDUsNyArMTQ1
LDcgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3Qg
Y2xlYXJCZWZvcmVGcmFtZSkKICAgICAvLyBhbHdheXMgdXNlIEltYWdlU291cmNlOjpjbGVhcih0
cnVlLCAuLi4pIHRvIGNvbXBsZXRlbHkgZnJlZSB0aGUgbWVtb3J5IGluCiAgICAgLy8gdGhpcyBj
YXNlLgogICAgIGNsZWFyQmVmb3JlRnJhbWUgPSBzdGQ6Om1pbihjbGVhckJlZm9yZUZyYW1lLCBt
X2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpIC0gMSk7Ci0gICAgY29uc3QgVmVjdG9yPEltYWdlRnJh
bWU+OjppdGVyYXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBjbGVhckJlZm9y
ZUZyYW1lKTsKKyAgICBjb25zdCBhdXRvIGVuZCA9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigp
ICsgY2xlYXJCZWZvcmVGcmFtZTsKIAogICAgIC8vIFdlIG5lZWQgdG8gcHJlc2VydmUgZnJhbWVz
IHN1Y2ggdGhhdDoKICAgICAvLyAgICogV2UgZG9uJ3QgY2xlYXIgfGVuZHwKQEAgLTE2NSwxNCAr
MTY1LDE0IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6
ZV90IGNsZWFyQmVmb3JlRnJhbWUpCiAgICAgLy8gICAqIElmIHRoZSBmcmFtZSBpcyBwYXJ0aWFs
LCB3ZSdyZSBkZWNvZGluZyBpdCwgc28gZG9uJ3QgY2xlYXIgaXQ7IGlmIGl0CiAgICAgLy8gICAg
IGhhcyBhIGRpc3Bvc2FsIG1ldGhvZCBvdGhlciB0aGFuIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91
cywgc3RvcAogICAgIC8vICAgICBzY2FubmluZywgYXMgd2UnbGwgb25seSBuZWVkIHRoaXMgZnJh
bWUgd2hlbiBkZWNvZGluZyB0aGUgbmV4dCBvbmUuCi0gICAgVmVjdG9yPEltYWdlRnJhbWU+Ojpp
dGVyYXRvciBpKGVuZCk7CisgICAgY29uc3QgYXV0byBpID0gZW5kOwogICAgIGZvciAoOyAoaSAh
PSBtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSkgJiYgKChpLT5zdGF0dXMoKSA9PSBJbWFnZUZy
YW1lOjpGcmFtZUVtcHR5KSB8fCAoaS0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpE
aXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpKTsgLS1pKSB7CiAgICAgICAgIGlmICgoaS0+c3RhdHVz
KCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkgJiYgKGkgIT0gZW5kKSkKICAgICAgICAg
ICAgIGktPmNsZWFyUGl4ZWxEYXRhKCk7CiAgICAgfQogCiAgICAgLy8gTm93IHxpfCBob2xkcyB0
aGUgbGFzdCBmcmFtZSB3ZSBuZWVkIHRvIHByZXNlcnZlOyBjbGVhciBwcmlvciBmcmFtZXMuCi0g
ICAgZm9yIChWZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGoobV9mcmFtZUJ1ZmZlckNhY2hl
LmJlZ2luKCkpOyBqICE9IGk7ICsraikgeworICAgIGZvciAoYXV0byBqID0gbV9mcmFtZUJ1ZmZl
ckNhY2hlLmJlZ2luKCk7IGogIT0gaTsgKytqKSB7CiAgICAgICAgIEFTU0VSVChqLT5zdGF0dXMo
KSAhPSBJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOwogICAgICAgICBpZiAoai0+c3RhdHVzKCkg
IT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkKICAgICAgICAgICAgIGotPmNsZWFyUGl4ZWxEYXRh
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGU0OGViOWI2NzVk
YzlkMjE3NTk5MjRjODgwNWFmYTBiODliNDk4MzcuLmU5ZmI1ZmEzY2RhMTQ3MWVjNmViYWJiNzRh
OTYwMWVmZjRjMzU0M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBA
IC0xNTc3LDggKzE1NzcsOCBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRGaWxsTGF5ZXJzKGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBDb2xvciYgYywgY29ucwogICAgICAgICBjb250
ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEpOwogICAgIH0KIAotICAgIFZlY3Rvcjxjb25z
dCBGaWxsTGF5ZXIqPjo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciB0b3BMYXllciA9IGxheWVycy5y
ZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8Y29uc3QgRmlsbExheWVyKj46OmNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IgaXQgPSBsYXllcnMucmJlZ2luKCk7IGl0ICE9IHRvcExheWVyOyArK2l0KQorICAg
IGF1dG8gdG9wTGF5ZXIgPSBsYXllcnMucmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IGxheWVy
cy5yYmVnaW4oKTsgaXQgIT0gdG9wTGF5ZXI7ICsraXQpCiAgICAgICAgIHBhaW50RmlsbExheWVy
KHBhaW50SW5mbywgYywgKml0LCByZWN0LCBibGVlZEF2b2lkYW5jZSwgb3AsIGJhY2tncm91bmRP
YmplY3QsIGJhc2VCZ0NvbG9yVXNhZ2UpOwogCiAgICAgaWYgKHNob3VsZERyYXdCYWNrZ3JvdW5k
SW5TZXBhcmF0ZUJ1ZmZlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwCmluZGV4IGNjZGMyYTNkYzZkYTJkNjUzNGE3
ZWI2MzUwOWU2YjQzYmFhMWZkNzEuLmRjMDk1MDk5YzA0ZTNhODJjNDNjM2UwMjZjZGRlYWRlOGQ1
YmUzMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVz
b2x2ZWRQb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dy
aWRSZXNvbHZlZFBvc2l0aW9uLmNwcApAQCAtMjk1LDcgKzI5NSw3IEBAIHN0YXRpYyBpbmxpbmUg
dW5zaWduZWQgZmlyc3ROYW1lZEdyaWRMaW5lQmVmb3JlUG9zaXRpb24odW5zaWduZWQgcG9zaXRp
b24sIGNvbnN0CiAgICAgLy8gYWxyZWFkeSBjb252ZXJ0ZWQgdG8gYW4gaW5kZXggaW4gb3VyIGdy
aWQgcmVwcmVzZW50YXRpb24gKGllIG9uZSB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBncmlkIGxpbmUg
dG8gYWNjb3VudCBmb3IKICAgICAvLyB0aGUgc2lkZSkuCiAgICAgdW5zaWduZWQgZmlyc3RMaW5l
QmVmb3JlUG9zaXRpb25JbmRleCA9IDA7Ci0gICAgY29uc3QgdW5zaWduZWQqIGZpcnN0TGluZUJl
Zm9yZVBvc2l0aW9uID0gc3RkOjpsb3dlcl9ib3VuZChncmlkTGluZXMuYmVnaW4oKSwgZ3JpZExp
bmVzLmVuZCgpLCBwb3NpdGlvbik7CisgICAgYXV0byBmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiA9
IHN0ZDo6bG93ZXJfYm91bmQoZ3JpZExpbmVzLmJlZ2luKCksIGdyaWRMaW5lcy5lbmQoKSwgcG9z
aXRpb24pOwogICAgIGlmIChmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiAhPSBncmlkTGluZXMuZW5k
KCkpIHsKICAgICAgICAgaWYgKCpmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiA+IHBvc2l0aW9uICYm
IGZpcnN0TGluZUJlZm9yZVBvc2l0aW9uICE9IGdyaWRMaW5lcy5iZWdpbigpKQogICAgICAgICAg
ICAgLS1maXJzdExpbmVCZWZvcmVQb3NpdGlvbjsKQEAgLTMxNiw5ICszMTYsOCBAQCBzdGQ6OnVu
aXF1ZV9wdHI8R3JpZFNwYW4+IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlUm93U3RhcnRD
b2x1bW5TdGFydE5hbWVkRwogCiBzdGQ6OnVuaXF1ZV9wdHI8R3JpZFNwYW4+IEdyaWRSZXNvbHZl
ZFBvc2l0aW9uOjpyZXNvbHZlUm93RW5kQ29sdW1uRW5kTmFtZWRHcmlkTGluZVBvc2l0aW9uQWdh
aW5zdE9wcG9zaXRlUG9zaXRpb24oY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIHJlc29sdmVk
T3Bwb3NpdGVQb3NpdGlvbiwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgVmVj
dG9yPHVuc2lnbmVkPiYgZ3JpZExpbmVzKQogewotICAgIEFTU0VSVChncmlkTGluZXMuc2l6ZSgp
KTsKICAgICB1bnNpZ25lZCBmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb25JbmRleCA9IGdy
aWRMaW5lcy5zaXplKCkgLSAxOwotICAgIGNvbnN0IHVuc2lnbmVkKiBmaXJzdExpbmVBZnRlck9w
cG9zaXRlUG9zaXRpb24gPSBzdGQ6OnVwcGVyX2JvdW5kKGdyaWRMaW5lcy5iZWdpbigpLCBncmlk
TGluZXMuZW5kKCksIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CisgICAgYXV0byBmaXJzdExp
bmVBZnRlck9wcG9zaXRlUG9zaXRpb24gPSBzdGQ6OnVwcGVyX2JvdW5kKGdyaWRMaW5lcy5iZWdp
bigpLCBncmlkTGluZXMuZW5kKCksIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CiAgICAgaWYg
KGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbiAhPSBncmlkTGluZXMuZW5kKCkpCiAgICAg
ICAgIGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbkluZGV4ID0gZmlyc3RMaW5lQWZ0ZXJP
cHBvc2l0ZVBvc2l0aW9uIC0gZ3JpZExpbmVzLmJlZ2luKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Rm9udEVsZW1lbnQuY3BwCmluZGV4IGMzM2ZmYjc3YjZkOGY5OTU3YjEyNmYxYmYzOTE3YTg1N2Zk
ZmI1MGUuLmEwYmY1MDE5MWI2YWI5NTgxNjE4ZDk1M2MwODkwZDIxMmViN2IzNjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcApAQCAtMjUyLDMxICsyNTIsMzEgQEAgc3RhdGlj
IGlubGluZSBmbG9hdCBrZXJuaW5nRm9yUGFpck9mU3RyaW5nc0FuZEdseXBocyhjb25zdCBTVkdL
ZXJuaW5nTWFwJiBrZXJuaW4KIHsKICAgICBpZiAoIWcxLmlzRW1wdHkoKSAmJiBrZXJuaW5nTWFw
LmdseXBoTWFwLmNvbnRhaW5zKGcxKSkgewogICAgICAgICBTVkdLZXJuaW5nVmVjdG9yKiBrZXJu
aW5nVmVjdG9yID0ga2VybmluZ01hcC5nbHlwaE1hcC5nZXQoZzEpOwotICAgICAgICBTVkdLZXJu
aW5nVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGtlcm5pbmdWZWN0b3ItPmVuZCgpIC0gMTsK
LSAgICAgICAgY29uc3QgU1ZHS2VybmluZ1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBr
ZXJuaW5nVmVjdG9yLT5iZWdpbigpIC0gMTsKLSAgICAgICAgZm9yICg7IGl0ICE9IGJlZ2luOyAt
LWl0KSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2hlcyh1MiwgZzIsICppdCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGl0LT5rZXJuaW5nOworICAgICAgICBzaXplX3QgaXQgPSBrZXJuaW5nVmVj
dG9yLT5zaXplKCk7CisgICAgICAgIHdoaWxlIChpdC0tID4gMCkgeworICAgICAgICAgICAgYXV0
byYgdmFsdWUgPSBrZXJuaW5nVmVjdG9yLT5hdChpdCk7CisgICAgICAgICAgICBpZiAobWF0Y2hl
cyh1MiwgZzIsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUua2VybmluZzsK
ICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghdTEuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlm
IChrZXJuaW5nTWFwLnVuaWNvZGVNYXAuY29udGFpbnModTEpKSB7CiAgICAgICAgICAgICBTVkdL
ZXJuaW5nVmVjdG9yKiBrZXJuaW5nVmVjdG9yID0ga2VybmluZ01hcC51bmljb2RlTWFwLmdldCh1
MSk7Ci0gICAgICAgICAgICBTVkdLZXJuaW5nVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGtl
cm5pbmdWZWN0b3ItPmVuZCgpIC0gMTsKLSAgICAgICAgICAgIGNvbnN0IFNWR0tlcm5pbmdWZWN0
b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0ga2VybmluZ1ZlY3Rvci0+YmVnaW4oKSAtIDE7Ci0g
ICAgICAgICAgICBmb3IgKDsgaXQgIT0gYmVnaW47IC0taXQpIHsKLSAgICAgICAgICAgICAgICBp
ZiAobWF0Y2hlcyh1MiwgZzIsICppdCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdC0+
a2VybmluZzsKKyAgICAgICAgICAgIHNpemVfdCBpdCA9IGtlcm5pbmdWZWN0b3ItPnNpemUoKTsK
KyAgICAgICAgICAgIHdoaWxlIChpdC0tID4gMCkgeworICAgICAgICAgICAgICAgIGF1dG8mIHZh
bHVlID0ga2VybmluZ1ZlY3Rvci0+YXQoaXQpOworICAgICAgICAgICAgICAgIGlmIChtYXRjaGVz
KHUyLCBnMiwgdmFsdWUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUua2Vybmlu
ZzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICgha2VybmluZ01hcC5r
ZXJuaW5nVW5pY29kZVJhbmdlTWFwLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgVmVjdG9yPFNW
R0tlcm5pbmdQYWlyPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBrZXJuaW5nTWFwLmtlcm5pbmdVbmlj
b2RlUmFuZ2VNYXAuZW5kKCkgLSAxOwotICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0tlcm5p
bmdQYWlyPjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2Rl
UmFuZ2VNYXAuYmVnaW4oKSAtIDE7Ci0gICAgICAgICAgICBmb3IgKDsgaXQgIT0gYmVnaW47IC0t
aXQpIHsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyh1MSwgdTIsIGcyLCAqaXQpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gaXQtPmtlcm5pbmc7CisgICAgICAgICAgICBzaXplX3Qg
aXQgPSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VNYXAuc2l6ZSgpOworICAgICAgICAg
ICAgd2hpbGUgKGl0LS0gPiAwKSB7CisgICAgICAgICAgICAgICAgYXV0byYgdmFsdWUgPSBrZXJu
aW5nTWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VNYXBbaXRdOworICAgICAgICAgICAgICAgIGlmICht
YXRjaGVzKHUxLCB1MiwgZzIsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZh
bHVlLmtlcm5pbmc7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oCmluZGV4IDlkOWQyYTJiMjNjNjAwZmViYjUzNDBjYmNk
ZDFiNjFkZGMzYjlmMTUuLmI5OTk1NTQ5NDM5YWM5NjRhYjNlNjdhMzBmMGQ4OWQ4YzM1OGFjYTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oCkBAIC02MCw4ICs2MCw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZCh1bnNpZ25lZCBjaGFyIGJ5dGUpIHsgbV9kYXRhLmFw
cGVuZChieXRlKTsgfQogICAgIHZvaWQgYXBwZW5kKFNWR1BhdGhCeXRlU3RyZWFtKiBvdGhlcikK
ICAgICB7Ci0gICAgICAgIGZvciAoRGF0YUl0ZXJhdG9yIGl0ID0gb3RoZXItPmJlZ2luKCk7IGl0
ICE9IG90aGVyLT5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgIGFwcGVuZCgqaXQpOworICAgICAg
ICBmb3IgKGF1dG8mIGJ5dGUgOiAqb3RoZXIpCisgICAgICAgICAgICBhcHBlbmQoYnl0ZSk7CiAg
ICAgfQogICAgIHZvaWQgY2xlYXIoKSB7IG1fZGF0YS5jbGVhcigpOyB9CiAgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gIW1fZGF0YS5zaXplKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aE5v
ZGVTZXQuaAppbmRleCAzZDg5YjhkNTA4N2E4NmNmZWFmZmMwMTQwYjY5NDc2MmMwOTVkZGRmLi5k
YWYyYjkzZDUxYjVhZjZiNzM0ZjVmOWE3NjU0MTM2OWUwNDE0YTJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQ
YXRoTm9kZVNldC5oCkBAIC02NCw4ICs2NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgICAgIHZvaWQgbWFya1N1YnRyZWVzRGlzam9pbnQoYm9vbCBkaXNqb2ludCkgeyBtX3N1YnRy
ZWVzQXJlRGlzam9pbnQgPSBkaXNqb2ludDsgfQogICAgICAgICAgICAgYm9vbCBzdWJ0cmVlc0Fy
ZURpc2pvaW50KCkgY29uc3QgeyByZXR1cm4gbV9zdWJ0cmVlc0FyZURpc2pvaW50IHx8IG1fbm9k
ZXMuc2l6ZSgpIDwgMjsgfQogCi0gICAgICAgICAgICBjb25zdCBSZWZQdHI8Tm9kZT4qIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gbV9ub2Rlcy5iZWdpbigpOyB9Ci0gICAgICAgICAgICBjb25zdCBS
ZWZQdHI8Tm9kZT4qIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuZW5kKCk7IH0KKyAgICAg
ICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4+OjppdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fbm9kZXMuYmVnaW4oKTsgfQorICAgICAgICAgICAgY29uc3QgVmVjdG9yPFJl
ZlB0cjxOb2RlPj46Oml0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuZW5kKCk7
IH0KIAogICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgdm9pZCB0cmF2ZXJzYWxTb3J0KCkg
Y29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241999</attachid>
            <date>2014-11-20 15:59:38 -0800</date>
            <delta_ts>2014-11-21 15:16:16 -0800</delta_ts>
            <desc>sigh, another attempt to fix GIFDecoder</desc>
            <filename>bug-138821-20141120155952.patch</filename>
            <type>text/plain</type>
            <size>69872</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2NDA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
NmJhYmRjYzI2MGE1NDNlYzYzNGVmY2MzMWUyNjE4ZDJiY2NjMDg2Li5lMTgyMGM2ODIwZTcyZmZl
OTViNmY2N2I3ODBkNjYyNjJkZjNlOGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNiBAQAorMjAxNC0xMS0xNyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3Rp
bGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGVyZSBhcmUgYSBmZXcgdXNlcyBvZiBiZWdpbigpL2VuZCgp
IHRoYXQgZXhwbGljaXRseSByZXF1aXJlIHBvaW50ZXJzLAorICAgICAgICBzbyB3ZSB1c2UgZ2V0
UHRyKCkgdG8gZXh0cmFjdCB0aGUgdW5kZXJseWluZyBwb2ludGVyIGdlbmVyaWNhbGx5LgorCisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRDb21wbGV4UG9wU2NvcGVzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVt
cCk6CisgICAgICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6RlRM
OjptZE5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkQ2FsbCk6CisgICAgICAgICogbGxp
bnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBlcmZvcm1Bc3Nl
cnRpb25zKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlNjb3Bl
OjpTY29wZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwOgorICAgICAgICAo
SlNDOjpQcm9maWxlTm9kZTo6ZGVidWdQcmludFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3Rvcik6
CisgICAgICAgICogdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2Zp
bGVUcmVlTm9kZTo6ZHVtcEludGVybmFsKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgor
ICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjptYXRjaENoYXJhY3RlckNsYXNzKToK
KwogMjAxNC0xMS0yMCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAog
ICAgICAgICBSZW5hbWUgU3RyaW5nLnByb3RvdHlwZS5jb250YWlucyB0byBTdHJpbmcucHJvdG90
eXBlLmluY2x1ZGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCmluZGV4IDU1MWE2YjZkOTY5MzhmOGJjM2I2MDNhMTNlMTAwZDg2NGMxZGI4
M2UuLjI3MTg5MzNiMjUzZGVkMjJkMzJiMjRkNzhkZTQwMDVjNjJkMTdmYWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsOTggQEAKKzIwMTQtMTEtMTcgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKwor
ICAgICAgICBNYWtlIHN1cmUgcmFuZ2UgYmFzZWQgaXRlcmF0aW9uIG9mIFZlY3Rvcjw+IHN0aWxs
IHJlY2VpdmVzIGJvdW5kcyBjaGVja2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM4ODIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IEluZGV4ZWRJdGVyYXRvciBzdHJ1Y3QgdG8gV1RG
IHRoYXQgd3JhcHMgYQorICAgICAgICBWZWN0b3IgdHlwZSBhbmQgaW5kZXggdG8gcHJvdmlkZSBw
b2ludGVyIGxpa2Ugc2VtYW50aWNzCisgICAgICAgIHdoaWxlIHN0aWxsIHBlcmZvcm1pbmcgcnVu
dGltZSBib3VuZHMgY2hlY2tpbmcsIGV2ZW4gaW4KKyAgICAgICAgcmVsZWFzZSBidWlsZHMuIFdl
IHN0b3JlIGEgc2ltcGxlIGluZGV4IGludG8gdGhlIHZlY3RvcgorICAgICAgICB3aGljaCBtZWFu
cyB0aGF0IHRoaXMgaXRlcmF0b3IgYWxsb3dzIHZlY3RvciByZXNpemluZworICAgICAgICBkdXJp
bmcgaXRlcmF0aW9uLiBJZiB0aGUgdmVjdG9yIGlzIHJlc2l6ZWQgc3VjaCB0aGF0IHRoZQorICAg
ICAgICBpdGVyYXRvciBpcyBvdXQgb2YgYm91bmRzLCB0aGVuIGFueSBhdHRlbXB0IHRvIGRlcmVm
ZXJlbmNlCisgICAgICAgIHRoZSBpdGVyYXRvciB3aWxsIGNyYXNoIHNhZmVseS4gQW55IG90aGVy
IGVycm9ycywgaW5jbHVkaW5nCisgICAgICAgIG92ZXJmbG93cywgYW5kIG92ZXIgZXh0ZW5kaW5n
IHRoZSBpdGVyYXRvciB3aWxsIGxpa2V3aXNlCisgICAgICAgIGNyYXNoLgorCisgICAgICAgIEZv
ciB0aGUgcHVycG9zZSBvZiByZXRhaW5pbmcgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQKKyAgICAg
ICAgYmVoYXZpb3VyLCB0aGUgaXRlcmF0b3IgY2FuIGJlIG1vdmVkIHRvIG1faW5kZXggPT0gc2l6
ZSgpCisgICAgICAgIGFzIHRoYXQgaXMgdGhlIHN0YW5kYXJkICJlbmQiIHRlcm1pbmF0b3IgZm9y
IHRoZXNlIHR5cGVzLgorICAgICAgICBBdHRlbXB0aW5nIHRvIGRlcmVmZXJlbmNlIGF0IHRoYXQg
cG9pbnQgd2lsbCBzdGlsbCBjcmFzaAorICAgICAgICByYXRoZXIgdGhhbiBwZXJmb3JtIGFuIHVu
c2FmZSBtZW1vcnkgb3BlcmF0aW9uLgorCisgICAgICAgIEluIG9yZGVyIHRvIG1haW50YWluIHRo
ZSB2YWxpZGl0eSBvZiBhbGwgdGhlIGJvdW5kcyBjaGVja2luZywKKyAgICAgICAgd2UgcGVyZm9y
bSBmdWxsIGludGVnZXIgcmFuZ2UgY2hlY2tpbmcgcHJpb3IgdG8gYW55IG11dGF0aW9uCisgICAg
ICAgIG9mIHRoZSBpdGVyYXRvciBsb2NhdGlvbi4gSWYgd2UgZGV0ZWN0IGFuIGFyaXRobWV0aWMg
b3ZlcmZsb3cKKyAgICAgICAgd2Ugd2lsbCBjcmFzaCByYXRoZXIgdGhhbiBhdHRlbXB0aW5nIHRv
IGNhcnJ5IG9uLgorCisgICAgICAgIEJ5IG5lY2Vzc2l0eSB0aGVyZSBhcmUgbWFueSBvdmVycmlk
ZXMgZm9yIG9wZXJhdG9yICsgYW5kIC0gYXMKKyAgICAgICAgd2Ugb3RoZXJ3aXNlIGhpdCBtYW55
IGRpZmZlcmVudCB0eXBlIHByb21vdGlvbiBhbWJpZ3VpdGllcyB3aGVuCisgICAgICAgIHBlcmZv
cm1pbmcgYXJpdGhtZXRpYyB3aXRoIGl0ZXJhdG9ycy4gVGhlc2UgYW1iaWd1aXRpZXMgYXJlIGFs
c28KKyAgICAgICAgZGlmZmVyZW50IGZvciAzMi0gdnMuIDY0LWJpdCwgc28gZHVwbGljYXRpbmcg
dGhlIGZ1bmN0aW9ucworICAgICAgICBhbmQgdGhlbiBmb3J3YXJkaW5nIHRvIHRoZSBjb3JlIGlt
cGxlbWVudGF0aW9ucyB0aGF0IHBlcmZvcm1lZAorICAgICAgICB0aGUgYm91bmRzIGNoZWNraW5n
IGFuZCBtdXRhdGlvbiBzZWVtZWQgbGlrZSB0aGUgcmlnaHQgY2FsbC4KKworICAgICAgICAqIFdU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9JbmRleGVkSXRlcmF0
b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6SW5kZXhlZEl0ZXJh
dG9yKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvci0+KToKKyAgICAg
ICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpJbmRl
eGVkSXRlcmF0b3I6OmdldCk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0
b3IrKyk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3ItLSk6CisgICAg
ICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSk6
CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IrPSk6CisgICAgICAgIChX
VEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3ItPSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJ
dGVyYXRvcjo6b3BlcmF0b3IrKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVy
YXRvci0pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPSk6CisgICAg
ICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6Oklu
ZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRv
cjo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcjw9
KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcj4pOgorICAgICAgICAo
V1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPj0pOgorICAgICAgICAoV1RGOjpJbmRleGVk
SXRlcmF0b3I6Om9wZXJhdG9yIGNvbnN0X2l0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6SW5kZXhl
ZEl0ZXJhdG9yOjppc1NhZmVUb0NvbXBhcmUpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0
b3I6OnVuc2FmZUdldCk6CisgICAgICAgIChXVEY6OmdldFB0cik6CisgICAgICAgIChXVEY6Om9w
ZXJhdG9yLSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpvcGVy
YXRvciE9KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXVEY6Om9wZXJh
dG9yPj0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpvcGVyYXRv
cj4pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3JTZWxlY3Rvcjo6bWFrZUl0ZXJhdG9y
KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yU2VsZWN0b3I6Om1ha2VDb25zdEl0ZXJh
dG9yKToKKyAgICAgICAgKiB3dGYvUmVmQ291bnRlZEFycmF5Lmg6CisgICAgICAgIChXVEY6OlJl
ZkNvdW50ZWRBcnJheTo6UmVmQ291bnRlZEFycmF5KToKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6
CisgICAgICAgIChXVEY6OlZlY3Rvcjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjpi
ZWdpbik6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6ZW5kKToKKyAgICAgICAgKFdURjo6T3ZlcmZs
b3dIYW5kbGVyPjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6PSk6CisgICAgICAgIChXVEY6Ok92
ZXJmbG93SGFuZGxlcj46OmZpbGwpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+Ojpl
eHBhbmRDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnRyeUV4cGFu
ZENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6cmVzaXplKToKKyAg
ICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6c2hyaW5rKToKKyAgICAgICAgKFdURjo6T3Zl
cmZsb3dIYW5kbGVyPjo6Z3Jvdyk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnJl
c2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnRyeVJlc2Vy
dmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnNocmlua0NhcGFj
aXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kKToKKyAgICAgICAg
KFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6dHJ5QXBwZW5kKToKKyAgICAgICAgKFdURjo6T3ZlcmZs
b3dIYW5kbGVyPjo6YXBwZW5kU2xvd0Nhc2UpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRs
ZXI+Ojp1bmNoZWNrZWRBcHBlbmQpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+Ojph
cHBlbmRWZWN0b3IpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnQpOgor
ICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnRWZWN0b3IpOgorICAgICAgICAo
V1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUpOgorCiAyMDE0LTExLTE4ICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgSGF2ZSBWZWN0b3I6OmNhcGFjaXR5KCkg
cmV0dXJuIGFuIHVuc2lnbmVkIGluc3RlYWQgb2YgYSBzaXplX3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2NjJj
NTRhN2UyNGZhYTRlODllNTFhYzVlZjdjZGMyZDdkZjM0ZmQyLi5mZGEzNjc3NDFkYzBkOTE4YjM1
NWQxNTU5YzU5MGI2MGZkY2U1MzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTQt
MTEtMTcgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIHN1
cmUgcmFuZ2UgYmFzZWQgaXRlcmF0aW9uIG9mIFZlY3Rvcjw+IHN0aWxsIHJlY2VpdmVzIGJvdW5k
cyBjaGVja2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM4ODIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlcmUgYXJlIGEgZmV3IHVzZXMgb2YgYmVnaW4oKS9lbmQoKSB0aGF0IGV4cGxpY2l0bHkg
cmVxdWlyZSBwb2ludGVycywKKyAgICAgICAgc28gd2UgdXNlIGdldFB0cigpIHRvIGV4dHJhY3Qg
dGhlIHVuZGVybHlpbmcgcG9pbnRlciBnZW5lcmljYWxseS4KKworICAgICAgICAqIGJpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURl
c2VyaWFsaXplcjo6ZGVzZXJpYWxpemVTdHJpbmcpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0
ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEJ1ZmZlcjo6aXNCYWRNYXRjaCk6
CisgICAgICAgICogcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9uSGln
aGxpZ2h0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6Zm9udERhdGFGb3JDaGFy
YWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkRm9udERhdGE6OmNvbnRhaW5zQ2hh
cmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZEZvbnREYXRhOjppc0xvYWRpbmcp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnZlcnRXT0ZGVG9TZm50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFpbnRGaWxsTGF5ZXJz
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Zmlyc3ROYW1lZEdyaWRMaW5lQmVmb3JlUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVSb3dFbmRDb2x1bW5F
bmROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbik6CisgICAgICAg
ICogc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omtlcm5pbmdGb3JQ
YWlyT2ZTdHJpbmdzQW5kR2x5cGhzKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ5dGVTdHJlYW0u
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtOjphcHBlbmQpOgorICAgICAg
ICAqIHhtbC9YUGF0aE5vZGVTZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOb2RlU2V0
OjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6Tm9kZVNldDo6ZW5kKToKKwogMjAx
NC0xMS0xOSAgQWRhIENoYW4gIDxhZGFjaGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSB3
YXkgdG8gbXV0ZSBhbiBBdWRpb0NvbnRleHQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAppbmRleCA2YzI5M2NjZjk4ZDU2NzMy
NmRjNDJmYWJkNWRmYTQxZDIzZjZjMmMxLi42MzVhY2QyY2JiMzhlNzhhNjA4M2I2MWU1OGRiYTFi
NDdjYjc5ZTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5jcHAKQEAgLTIzNCw5ICsyMzQsOSBAQCB2b2lkIFVubGlua2VkQ29k
ZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9zeW1ib2xUYWJsZSk7CiAgICAgZm9yIChGdW5jdGlv
bkV4cHJlc3Npb25WZWN0b3I6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25E
ZWNscy5iZWdpbigpLCBlbmQgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbHMuZW5kKCk7IHB0
ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICB2aXNpdG9yLmFwcGVuZChwdHIpOworICAgICAgICB2
aXNpdG9yLmFwcGVuZChXVEY6OmdldFB0cihwdHIpKTsKICAgICBmb3IgKEZ1bmN0aW9uRXhwcmVz
c2lvblZlY3Rvcjo6aXRlcmF0b3IgcHRyID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkV4cHJzLmJl
Z2luKCksIGVuZCA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25FeHBycy5lbmQoKTsgcHRyICE9IGVu
ZDsgKytwdHIpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0cik7CisgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKFdURjo6Z2V0UHRyKHB0cikpOwogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNP
YmplY3QtPm1fY29uc3RhbnRSZWdpc3RlcnMuZGF0YSgpLCB0aGlzT2JqZWN0LT5tX2NvbnN0YW50
UmVnaXN0ZXJzLnNpemUoKSk7CiAgICAgaWYgKHRoaXNPYmplY3QtPm1fcmFyZURhdGEpIHsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDAsIGVuZCA9IHRoaXNPYmplY3QtPm1fcmFyZURhdGEtPm1f
cmVnZXhwcy5zaXplKCk7IGkgIT0gZW5kOyBpKyspCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IGIyMTM0
ZWY3YTUwOWI3MzY5ZTNkMmMwNTY2MmMyMWI4NDcwN2ZmNWMuLjVlMWY0NjEyOTFhY2UyNjA5M2Ix
MzE3ZGFmODRjZTk1ZDNkMWJmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0yMjYzLDggKzIyNjMs
OCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleFBvcFNjb3BlcyhSZWdpc3Rl
cklEKiBzY29wZSwgQ29udHJvbEZsb3dDb250ZQogICAgICAgICAgICAgaW50IHRvcFNjb3BlSW5k
ZXggPSAtMTsKICAgICAgICAgICAgIGludCBib3R0b21TY29wZUluZGV4ID0gLTE7CiAgICAgICAg
ICAgICBpZiAoZmxpcFNjb3BlcykgewotICAgICAgICAgICAgICAgIHRvcFNjb3BlSW5kZXggPSB0
b3BTY29wZSAtIG1fc2NvcGVDb250ZXh0U3RhY2suYmVnaW4oKTsKLSAgICAgICAgICAgICAgICBi
b3R0b21TY29wZUluZGV4ID0gYm90dG9tU2NvcGUgLSBtX3Njb3BlQ29udGV4dFN0YWNrLmJlZ2lu
KCk7CisgICAgICAgICAgICAgICAgdG9wU2NvcGVJbmRleCA9IHRvcFNjb3BlIC0gbV9zY29wZUNv
bnRleHRTdGFjay5kYXRhKCk7CisgICAgICAgICAgICAgICAgYm90dG9tU2NvcGVJbmRleCA9IGJv
dHRvbVNjb3BlIC0gbV9zY29wZUNvbnRleHRTdGFjay5kYXRhKCk7CiAgICAgICAgICAgICAgICAg
c2F2ZWRTY29wZUNvbnRleHRTdGFjayA9IG1fc2NvcGVDb250ZXh0U3RhY2s7CiAgICAgICAgICAg
ICAgICAgbV9zY29wZUNvbnRleHRTdGFjay5zaHJpbmsoZmluYWxseUNvbnRleHQuc2NvcGVDb250
ZXh0U3RhY2tTaXplKTsKICAgICAgICAgICAgIH0KQEAgLTIzMDgsNyArMjMwOCw3IEBAIHZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb21wbGV4UG9wU2NvcGVzKFJlZ2lzdGVySUQqIHNjb3Bl
LCBDb250cm9sRmxvd0NvbnRlCiAgICAgICAgICAgICBpZiAoZmxpcFNjb3BlcykgewogICAgICAg
ICAgICAgICAgIG1fc2NvcGVDb250ZXh0U3RhY2sgPSBzYXZlZFNjb3BlQ29udGV4dFN0YWNrOwog
ICAgICAgICAgICAgICAgIHRvcFNjb3BlID0gJm1fc2NvcGVDb250ZXh0U3RhY2tbdG9wU2NvcGVJ
bmRleF07IC8vIGFzc2VydCBpdCdzIHdpdGhpbiBib3VuZHMKLSAgICAgICAgICAgICAgICBib3R0
b21TY29wZSA9IG1fc2NvcGVDb250ZXh0U3RhY2suYmVnaW4oKSArIGJvdHRvbVNjb3BlSW5kZXg7
IC8vIGRvbid0IGFzc2VydCwgc2luY2UgaXQgdGhlIGluZGV4IG1pZ2h0IGJlIC0xLgorICAgICAg
ICAgICAgICAgIGJvdHRvbVNjb3BlID0gbV9zY29wZUNvbnRleHRTdGFjay5kYXRhKCkgKyBib3R0
b21TY29wZUluZGV4OyAvLyBkb24ndCBhc3NlcnQsIHNpbmNlIGl0IHRoZSBpbmRleCBtaWdodCBi
ZSAtMS4KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChmbGlwU3dpdGNoZXMpCiAgICAg
ICAgICAgICAgICAgbV9zd2l0Y2hDb250ZXh0U3RhY2sgPSBzYXZlZFN3aXRjaENvbnRleHRTdGFj
azsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAK
aW5kZXggZjA3MjRkZjQ3MDM5NDliMzBkMjRlMzZhYTgyZTc3OGE1Y2I5YmY3My4uM2JlMThlYTZj
NmNiN2YzNmY0OGUyMGI1OWY3MjNlY2M1MTRiOWQzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTQ5MTAsNyArNDkxMCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbnRKdW1wKAogICAgIGFkZEJyYW5jaCgKICAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWUsIElt
bTMyKHRhYmxlLmN0aU9mZnNldHMuc2l6ZSgpKSksCiAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdo
LmJsb2NrKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIodGFibGUuY3RpT2Zmc2V0cy5i
ZWdpbigpKSwgc2NyYXRjaCk7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHRhYmxlLmN0
aU9mZnNldHMuZGF0YSgpKSwgc2NyYXRjaCk7CiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxl
cjo6QmFzZUluZGV4KHNjcmF0Y2gsIHZhbHVlLCBKSVRDb21waWxlcjo6dGltZXNQdHIoKSksIHNj
cmF0Y2gpOwogICAgIG1faml0Lmp1bXAoc2NyYXRjaCk7CiAgICAgZGF0YS0+ZGlkVXNlSnVtcFRh
YmxlID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJi
cmV2aWF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25z
LmgKaW5kZXggZmM3Y2IxYjI1NDMyNjk0YWFlZThmYmYzMTUzZTZlMDhhODMzMmYzOS4uN2IxYTFj
ZTdiMzgzN2U4MTRjYmEyYjNlY2MzYTA3YjAxOGQ5YWUzMCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgKQEAgLTEyMCw3ICsxMjAsNyBAQCBzdGF0aWMg
aW5saW5lIExWYWx1ZSBtZFN0cmluZyhMQ29udGV4dCBjb250ZXh0LCBjb25zdCBjaGFyKiBzdHJp
bmcsIHVuc2lnbmVkIGxlbgogc3RhdGljIGlubGluZSBMVmFsdWUgbWRTdHJpbmcoTENvbnRleHQg
Y29udGV4dCwgY29uc3QgY2hhciogc3RyaW5nKSB7IHJldHVybiBtZFN0cmluZyhjb250ZXh0LCBz
dHJpbmcsIHN0ZDo6c3RybGVuKHN0cmluZykpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5v
ZGUoTENvbnRleHQgY29udGV4dCwgTFZhbHVlKiBhcmdzLCB1bnNpZ25lZCBudW1BcmdzKSB7IHJl
dHVybiBsbHZtLT5NRE5vZGVJbkNvbnRleHQoY29udGV4dCwgYXJncywgbnVtQXJncyk7IH0KIHRl
bXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUo
TENvbnRleHQgY29udGV4dCwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKSB7IHJldHVybiBtZE5v
ZGUoY29udGV4dCwgY29uc3RfY2FzdDxMVmFsdWUqPih2ZWN0b3IuYmVnaW4oKSksIHZlY3Rvci5z
aXplKCkpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwg
Y29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKSB7IHJldHVybiBtZE5vZGUoY29udGV4dCwgY29uc3Rf
Y2FzdDxMVmFsdWUqPih2ZWN0b3IuZGF0YSgpKSwgdmVjdG9yLnNpemUoKSk7IH0KIHN0YXRpYyBp
bmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0KSB7IHJldHVybiBtZE5vZGUoY29u
dGV4dCwgMCwgMCk7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4dCBjb250
ZXh0LCBMVmFsdWUgYXJnMSkgeyByZXR1cm4gbWROb2RlKGNvbnRleHQsICZhcmcxLCAxKTsgfQog
c3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQsIExWYWx1ZSBhcmcx
LCBMVmFsdWUgYXJnMikKQEAgLTI4OCw3ICsyODgsNyBAQCBzdGF0aWMgaW5saW5lIExWYWx1ZSBi
dWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBMVmFsdWUq
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPgogaW5saW5lIExWYWx1ZSBidWlsZENhbGwo
TEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0
b3IpCiB7Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgdmVjdG9yLmJl
Z2luKCksIHZlY3Rvci5zaXplKCkpOworICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVu
Y3Rpb24sIHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCkpOwogfQogc3RhdGljIGlubGluZSBM
VmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbikKIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKaW5kZXggNjkxOWFlYWIwMGEx
YjI1YzQ3NWJiZjlkZDI1YzY4OGYwYWE1OGE3Mi4uNDRhZmNhNGNiYWQ4YjNlNTUzMzQxMjlhYzlj
OWIwZGVmZDk1NjFlOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5j
cHAKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKFZNJiB2
bSkKICAgICBWZWN0b3I8aW50PiB0ZXN0VmVjdG9yOwogICAgIHRlc3RWZWN0b3IucmVzaXplKDQy
KTsKICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnQzMl90Kj4oJnRlc3RWZWN0b3IpW3NpemVv
Zih2b2lkKikvc2l6ZW9mKHVpbnQzMl90KSArIDFdID09IDQyKTsKLSAgICBBU1NFUlQoYml0d2lz
ZV9jYXN0PGludCoqPigmdGVzdFZlY3RvcilbMF0gPT0gdGVzdFZlY3Rvci5iZWdpbigpKTsKKyAg
ICBBU1NFUlQoYml0d2lzZV9jYXN0PGludCoqPigmdGVzdFZlY3RvcilbMF0gPT0gdGVzdFZlY3Rv
ci5kYXRhKCkpOwogI2VuZGlmCiAKICAgICBBU1NFUlQoU3RyaW5nSW1wbDo6c19oYXNoRmxhZzhC
aXRCdWZmZXIgPT0gMzIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKaW5kZXgg
NDUyZjcwNDZmMzAyMmQzODgxMDlhZWJkYzg0Mzg0ZTFhYTIyZmZhMS4uMDFmY2NkYjdlMzhhYzVh
NjAyMmM2OGM5N2I4ZDhlYjNiMGNlYzE4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlci5oCkBAIC0xMzAsMTEgKzEzMCw4IEBAIHN0cnVjdCBTY29wZSB7CiAgICAgewogICAgICAg
ICBpZiAocmhzLm1fbGFiZWxzKSB7CiAgICAgICAgICAgICBtX2xhYmVscyA9IGFkb3B0UHRyKG5l
dyBMYWJlbFN0YWNrKTsKLQotICAgICAgICAgICAgdHlwZWRlZiBMYWJlbFN0YWNrOjpjb25zdF9p
dGVyYXRvciBpdGVyYXRvcjsKLSAgICAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IHJocy5tX2xhYmVs
cy0+ZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gcmhzLm1fbGFiZWxzLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgbV9sYWJlbHMtPmFwcGVu
ZChTY29wZUxhYmVsSW5mbyhpdC0+bV9pZGVudCwgaXQtPm1faXNMb29wKSk7CisgICAgICAgICAg
ICBmb3IgKGF1dG8gbGFiZWwgOiAqcmhzLm1fbGFiZWxzKQorICAgICAgICAgICAgICAgIG1fbGFi
ZWxzLT5hcHBlbmQoU2NvcGVMYWJlbEluZm8obGFiZWwubV9pZGVudCwgbGFiZWwubV9pc0xvb3Ap
KTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVOb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxl
ci9Qcm9maWxlTm9kZS5jcHAKaW5kZXggMjY1Y2RkZDBlZjc4ODMzZjYxYjU3MTExOWNmZDc3MjBm
ZDQ2ZDE1Ny4uNjkyYzdiODZmM2MzYTI1NDIxYmIxMDA4MmRmNmUwOGRlYjQwZjBmMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVOb2RlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwCkBAIC0xNTQs
NiArMTU0LDcgQEAgdm9pZCBQcm9maWxlTm9kZTo6ZGVidWdQcmludFJlY3Vyc2l2ZWx5KGludCBp
bmRlbnRMZXZlbCwgY29uc3QgUHJvZmlsZVN1YnRyZWVEYXQKICAgICAvLyBQcmludCBjaGlsZHJl
bidzIG5hbWVzIGFuZCBpbmZvcm1hdGlvbgogICAgIGZvciAoU3RhY2tJdGVyYXRvciBjdXJyZW50
Q2hpbGQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGN1cnJlbnRDaGlsZCAhPSBtX2NoaWxkcmVuLmVu
ZCgpOyArK2N1cnJlbnRDaGlsZCkKICAgICAgICAgKCpjdXJyZW50Q2hpbGQpLT5kZWJ1Z1ByaW50
UmVjdXJzaXZlbHkoaW5kZW50TGV2ZWwsIGRhdGEpOworCiB9CiAKIC8vIHByaW50IHRoZSBwcm9m
aWxlZCBkYXRhIGluIGEgZm9ybWF0IHRoYXQgbWF0Y2hlcyB0aGUgdG9vbCBzYW1wbGUncyBvdXRw
dXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCmluZGV4IGNjNjMw
MjE3ZGY3ZmQyNWFkZTRjNGJiMzk4NTc0ZDY3ZDVhNzQ1NjkuLjc5Y2Q2N2E2NzgxN2JkZGZhZWRk
ZjNjNTA2ODZjNDgyYzkyMDQ1MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCkBAIC0zNTIsNyArMzUyLDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGhXaXRo
QXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib28KICAg
ICAgICAgICAgIC8vIHByb3BlcnRpZXMsIHNvIHdlIGhhdmUgdG8gcGVyZm9ybSBkZWxldGlvbiB3
aXRoIGNhdXRpb24sIGlmIG5vdCB3ZSBjYW4KICAgICAgICAgICAgIC8vIGRlbGV0ZSB2YWx1ZXMg
aW4gYW55IG9yZGVyLgogICAgICAgICAgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgcXNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLnNpemUoKSwgc2l6ZW9mKHVuc2ln
bmVkKSwgY29tcGFyZUtleXNGb3JRU29ydCk7CisgICAgICAgICAgICAgICAgcXNvcnQoa2V5cy5k
YXRhKCksIGtleXMuc2l6ZSgpLCBzaXplb2YodW5zaWduZWQpLCBjb21wYXJlS2V5c0ZvclFTb3J0
KTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpID0ga2V5cy5zaXplKCk7CiAgICAgICAgICAg
ICAgICAgd2hpbGUgKGkpIHsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBr
ZXlzWy0taV07CkBAIC0xMTkxLDEzICsxMTkxLDEzIEBAIHZvaWQgSlNBcnJheTo6c29ydENvbXBh
Y3RlZFZlY3RvcihFeGVjU3RhdGUqIGV4ZWMsIENvbnRpZ3VvdXNEYXRhPFN0b3JhZ2VUeXBlPiBk
CiAgICAgICAgIAogI2lmIEhBVkUoTUVSR0VTT1JUKQogICAgIGlmIChpc1NvcnRpbmdQcmltaXRp
dmVWYWx1ZXMpCi0gICAgICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBz
aXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAg
ICAgICAgcXNvcnQodmFsdWVzLmRhdGEoKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3Ry
aW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CiAgICAgZWxzZQotICAgICAg
ICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0
cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBtZXJnZXNv
cnQodmFsdWVzLmRhdGEoKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciks
IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CiAjZWxzZQogICAgIC8vIEZJWE1FOiBUaGUg
cXNvcnQgbGlicmFyeSBmdW5jdGlvbiBpcyBsaWtlbHkgdG8gbm90IGJlIGEgc3RhYmxlIHNvcnQu
CiAgICAgLy8gRUNNQVNjcmlwdC0yNjIgZG9lcyBub3Qgc3BlY2lmeSBhIHN0YWJsZSBzb3J0LCBi
dXQgaW4gcHJhY3RpY2UsIGJyb3dzZXJzIHBlcmZvcm0gYSBzdGFibGUgc29ydC4KLSAgICBxc29y
dCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciks
IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAgcXNvcnQodmFsdWVzLmRhdGEoKSwg
dmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1Bh
aXJGb3JRU29ydCk7CiAjZW5kaWYKICAgICAKICAgICAvLyBJZiB0aGUgdG9TdHJpbmcgZnVuY3Rp
b24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvciB2ZWN0b3Igc3RvcmFnZSwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAppbmRleCA4OGQ1
N2YzZGQ0ZTc5NzY5ZDFkMDZjM2E4NTkxMDFiNTU1YzZhODNmLi5kZDNjMTIxZDBlYmIxNmU4YTUy
NDYxZmFhY2RiYmI0ZDk4N2Q3MmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L1Byb2ZpbGVUcmVlTm9kZS5oCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIFZl
Y3RvcjxNYXBFbnRyeSo+IGVudHJpZXM7CiAgICAgICAgIGZvciAoTWFwOjppdGVyYXRvciBpdCA9
IG1fY2hpbGRyZW4tPmJlZ2luKCk7IGl0ICE9IG1fY2hpbGRyZW4tPmVuZCgpOyArK2l0KQogICAg
ICAgICAgICAgZW50cmllcy5hcHBlbmQoJippdCk7Ci0gICAgICAgIHFzb3J0KGVudHJpZXMuYmVn
aW4oKSwgZW50cmllcy5zaXplKCksIHNpemVvZihNYXBFbnRyeSopLCBjb21wYXJlRW50cmllcyk7
CisgICAgICAgIHFzb3J0KGVudHJpZXMuZGF0YSgpLCBlbnRyaWVzLnNpemUoKSwgc2l6ZW9mKE1h
cEVudHJ5KiksIGNvbXBhcmVFbnRyaWVzKTsKIAogICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhl
IGNoaWxkcmVuIGluIHNhbXBsZS1mcmVxdWVuY3kgb3JkZXIuCiAgICAgICAgIGZvciAoc2l6ZV90
IGUgPSAwOyBlIDwgZW50cmllcy5zaXplKCk7ICsrZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFy
ci9ZYXJySklULmNwcAppbmRleCBlM2EzYTkzMmNlN2VkNzM4ZjE5ODZiMmJmMmI3NDNlMDQyM2Ez
YjI1Li5kMjY4ZTU5ZTEyYmI0ZTgzNjhjZTM5MjA2ODc4YWM4MTYyZTNiNDJmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcApAQCAtMjIzLDcgKzIyMyw3IEBAIGNsYXNzIFlh
cnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgaWYgKGNoYXJD
bGFzcy0+bV9yYW5nZXMuc2l6ZSgpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBtYXRjaEluZGV4
ID0gMDsKICAgICAgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwotICAgICAgICAgICAgbWF0Y2hD
aGFyYWN0ZXJDbGFzc1JhbmdlKGNoYXJhY3RlciwgZmFpbHVyZXMsIG1hdGNoRGVzdCwgY2hhckNs
YXNzLT5tX3Jhbmdlcy5iZWdpbigpLCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUoKSwgJm1hdGNo
SW5kZXgsIGNoYXJDbGFzcy0+bV9tYXRjaGVzLmJlZ2luKCksIGNoYXJDbGFzcy0+bV9tYXRjaGVz
LnNpemUoKSk7CisgICAgICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzUmFuZ2UoY2hhcmFjdGVy
LCBmYWlsdXJlcywgbWF0Y2hEZXN0LCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLmRhdGEoKSwgY2hhckNs
YXNzLT5tX3Jhbmdlcy5zaXplKCksICZtYXRjaEluZGV4LCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5k
YXRhKCksIGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNpemUoKSk7CiAgICAgICAgICAgICB3aGlsZSAo
bWF0Y2hJbmRleCA8IGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNpemUoKSkKICAgICAgICAgICAgICAg
ICBtYXRjaERlc3QuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKCh1bnNp
Z25lZCBzaG9ydCljaGFyQ2xhc3MtPm1fbWF0Y2hlc1ttYXRjaEluZGV4KytdKSkpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmZjQ4ZGEwY2M1MzEyODJh
MTJkMGQ1MTA2YzY2MDM1ZjE1NWQ5MTU2Li4xYmE1Y2ZkNzg5OGZkOWU5NjU5NWJmZDVhNDc3NGZl
ZjFlYmY0ZjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTk4LDYgKzk4LDcgQEAKIAkJQTc0ODc0NTIxN0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rl
ckhhc2guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTc0ODc0NEYxN0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guY3BwICovOyB9Owog
CQlBNzQ4NzQ1MzE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc0ODc0NTAxN0EwQkRBRTAw
RkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guaCAqLzsgfTsKIAkJQTc0ODc0NTQxN0EwQkRBRTAw
RkEwNENCIC8qIFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc0ODc0NTExN0EwQkRBRTAwRkEwNENCIC8qIFN0cmlu
Z0hhc2hEdW1wQ29udGV4dC5oICovOyB9OworCQlBN0RDMkYwNDFBMDlBMjJEMDA3MkY0RTMgLyog
SW5kZXhlZEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBN0RDMkYwMzFBMDk5REUzMDA3MkY0RTMgLyogSW5kZXhlZEl0ZXJhdG9yLmggKi87
IH07CiAJCUE3RTY0M0M2MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21wcmVzc2lvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0U2NDNDNDE3QzU0MjNC
MDAzQkIxNkIgLyogQ29tcHJlc3Npb24uY3BwICovOyB9OwogCQlBN0U2NDNDNzE3QzU0MjNCMDAz
QkIxNkIgLyogQ29tcHJlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3RTY0M0M1MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21wcmVzc2lvbi5oICov
OyB9OwogCQlBODc2REJEODE1MTgxNkU1MDBEQURCOTUgLyogUGxhdGZvcm0uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzZEQkQ3MTUxODE2RTUwMERB
REI5NSAvKiBQbGF0Zm9ybS5oICovOyB9OwpAQCAtMzg5LDYgKzM5MCw3IEBACiAJCUE3NDg3NDRG
MTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpeENoYXJhY3Rlckhhc2guY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNzQ4NzQ1MDE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVy
SGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaXhDaGFyYWN0ZXJIYXNo
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NDg3NDUxMTdBMEJEQUUwMEZBMDRD
QiAvKiBTdHJpbmdIYXNoRHVtcENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3RyaW5nSGFzaER1bXBDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUE3REMyRjAzMUEwOTlERTMwMDcyRjRFMyAvKiBJbmRleGVkSXRlcmF0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5kZXhlZEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE3RTY0M0M0MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21wcmVzc2lvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21wcmVzc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE3RTY0M0M1MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21wcmVzc2lvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wcmVzc2lvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBODc2REJENzE1MTgxNkU1MDBEQURCOTUgLyogUGxhdGZv
cm0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm0uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg5Miw2ICs4OTQsNyBAQAogCQkJCTk3NENGQzhEMTZB
NEYzMjcwMDZENTQwNCAvKiBXZWFrUHRyLmggKi8sCiAJCQkJQThBNDczN0ExNTFBODI1QjAwNDEy
M0ZGIC8qIFdURlRocmVhZERhdGEuY3BwICovLAogCQkJCUE4QTQ3MzdCMTUxQTgyNUIwMDQxMjNG
RiAvKiBXVEZUaHJlYWREYXRhLmggKi8sCisJCQkJQTdEQzJGMDMxQTA5OURFMzAwNzJGNEUzIC8q
IEluZGV4ZWRJdGVyYXRvci5oICovLAogCQkJKTsKIAkJCXBhdGggPSB3dGY7CiAJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwpAQCAtMTA2NSw2ICsxMDY4LDcgQEAKIAkJCQlBOEE0NzNBRDE1MUE4
MjVCMDA0MTIzRkYgLyogY2FjaGVkLXBvd2Vycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
NUUxNTFBODI1QjAwNDEyM0ZGIC8qIENoYXJhY3Rlck5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzM5NDE1MUE4MjVCMDA0MTIzRkYgLyogQ2hlY2tlZEFyaXRobWV0aWMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUE3REMyRjA0MUEwOUEyMkQwMDcyRjRFMyAvKiBJbmRleGVkSXRlcmF0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3Mzk1MTUxQTgyNUIwMDQxMjNGRiAvKiBDaGVja2Vk
Qm9vbGVhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NUYxNTFBODI1QjAwNDEyM0ZGIC8q
IENvbGxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM0RURFNjE2OTYxNDk2MDBGNjUwNDEg
LyogQ29tbWFQcmludGVyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL0luZGV4ZWRJdGVyYXRvci5oIGIvU291cmNlL1dURi93dGYvSW5kZXhlZEl0ZXJhdG9yLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNGU2ZTE5YWIwZWRkYWFmMDBkMzdhMjc3MjcxMjIyYTZkYmZjZWY1MgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL0luZGV4ZWRJdGVyYXRvci5oCkBAIC0wLDAg
KzEsNDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXVEZfSW5kZXhlZEl0ZXJhdG9yX2gKKyNkZWZpbmUgV1RGX0luZGV4ZWRJdGVyYXRv
cl9oCisKK25hbWVzcGFjZSBXVEYgeworCisjZGVmaW5lIElOREVYRURfSVRFUkFUT1JfT1ZFUkZM
T1coY2hlY2spIGRvIHtcCisgICAgaWYgKCEoY2hlY2spKVwKKyAgICAgICAgT3ZlcmZsb3dIYW5k
bGVyOjpvdmVyZmxvd2VkKCk7XAorICAgIH0gd2hpbGUgKDApCisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBWZWN0b3JUeXBlLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIgPSBDcmFz
aE9uT3ZlcmZsb3c+IHN0cnVjdCBJbmRleGVkSXRlcmF0b3IgeworICAgIHR5cGVkZWYgc3RydWN0
IEluZGV4ZWRJdGVyYXRvcjxjb25zdCBWZWN0b3JUeXBlLCBjb25zdCBULCBPdmVyZmxvd0hhbmRs
ZXI+IGNvbnN0X2l0ZXJhdG9yOworCisgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CisgICAgdHlwZWRlZiBWYWx1ZVR5cGUgdmFs
dWVfdHlwZTsKKyAgICB0eXBlZGVmIFZhbHVlVHlwZSogcG9pbnRlcjsKKyAgICB0eXBlZGVmIFZh
bHVlVHlwZSYgcmVmZXJlbmNlOworICAgIHR5cGVkZWYgc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKworICAgIEluZGV4ZWRJdGVyYXRvcigpCisgICAg
ICAgIDogbV92ZWN0b3IobnVsbHB0cikKKyAgICAgICAgLCBtX3Bvc2l0aW9uKDApCisgICAgewor
ICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvcihWZWN0b3JUeXBlJiB2ZWN0b3IsIFZhbHVlVHlw
ZSogcG9zaXRpb24pCisgICAgICAgIDogbV92ZWN0b3IoJnZlY3RvcikKKyAgICAgICAgLCBtX3Bv
c2l0aW9uKHBvc2l0aW9uIC0gdmVjdG9yLmRhdGEoKSkKKyAgICB7CisgICAgICAgIElOREVYRURf
SVRFUkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA8PSB2ZWN0b3Iuc2l6ZSgpKTsKKyAgICB9CisK
KyAgICBJbmRleGVkSXRlcmF0b3IoY29uc3QgSW5kZXhlZEl0ZXJhdG9yJiBvdGhlcikKKyAgICAg
ICAgOiBtX3ZlY3RvcihvdGhlci5tX3ZlY3RvcikKKyAgICAgICAgLCBtX3Bvc2l0aW9uKG90aGVy
Lm1fcG9zaXRpb24pCisgICAgeworICAgIH0KKworICAgIFZhbHVlVHlwZSogb3BlcmF0b3ItPigp
IGNvbnN0IHsgcmV0dXJuICZtX3ZlY3Rvci0+YXQobV9wb3NpdGlvbik7IH0KKyAgICBWYWx1ZVR5
cGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLT5hdChtX3Bvc2l0aW9uKTsg
fQorICAgIFZhbHVlVHlwZSogZ2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRF
UkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA8PSBtX3ZlY3Rvci0+c2l6ZSgpKTsKKyAgICAgICAg
cmV0dXJuIG1fdmVjdG9yLT5kYXRhKCkgKyBtX3Bvc2l0aW9uOworICAgIH0KKworICAgIEluZGV4
ZWRJdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9S
X09WRVJGTE9XKG1fcG9zaXRpb24gPCBtX3ZlY3Rvci0+c2l6ZSgpKTsKKyAgICAgICAgbV9wb3Np
dGlvbisrOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJh
dG9yIG9wZXJhdG9yKysoaW50KQorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVS
RkxPVyhtX3Bvc2l0aW9uIDwgbV92ZWN0b3ItPnNpemUoKSk7CisgICAgICAgIEluZGV4ZWRJdGVy
YXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICBtX3Bvc2l0aW9uKys7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvci0tKCkKKyAg
ICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA+IDApOwor
ICAgICAgICBtX3Bvc2l0aW9uLS07CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAg
ICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpCisgICAgeworICAgICAgICBJTkRFWEVE
X0lURVJBVE9SX09WRVJGTE9XKG1fcG9zaXRpb24gPiAwKTsKKyAgICAgICAgSW5kZXhlZEl0ZXJh
dG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAgIG1fcG9zaXRpb24tLTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNvbnZlcnNpb24gb3BlcmF0b3IgYWxsb3dz
IGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBidXQgbm90IHRvIG90aGVyIGludGVnZXIgdHlw
ZXMuCisgICAgdHlwZWRlZiBzaXplX3QgKEluZGV4ZWRJdGVyYXRvcjo6KlVuc3BlY2lmaWVkQm9v
bFR5cGUpOworICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3ZlY3RvciA/ICZJbmRleGVkSXRlcmF0b3I6Om1fcG9zaXRpb24gOiBudWxscHRyOyB9CisK
KworICAgIEluZGV4ZWRJdGVyYXRvciYgb3BlcmF0b3IrPShsb25nIGluY3JlbWVudCkKKyAgICB7
CisgICAgICAgIGlmIChpbmNyZW1lbnQgPCAwKSB7CisgICAgICAgICAgICBJTkRFWEVEX0lURVJB
VE9SX09WRVJGTE9XKGluY3JlbWVudCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+Ojpt
YXgoKSk7CisgICAgICAgICAgICByZXR1cm4gKCp0aGlzKSAtPSBzdGF0aWNfY2FzdDxzaXplX3Q+
KC1pbmNyZW1lbnQpOworICAgICAgICB9CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZM
T1coKHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLSBtX3Bvc2l0aW9uKSA+IHN0
YXRpY19jYXN0PHNpemVfdD4oaW5jcmVtZW50KSk7CisgICAgICAgIG1fcG9zaXRpb24gKz0gaW5j
cmVtZW50OworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1fcG9zaXRpb24gPD0g
bV92ZWN0b3ItPnNpemUoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJ
bmRleGVkSXRlcmF0b3ImIG9wZXJhdG9yLT0obG9uZyBkZWNyZW1lbnQpCisgICAgeworICAgICAg
ICBpZiAoZGVjcmVtZW50IDwgMCkgeworICAgICAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVS
RkxPVyhkZWNyZW1lbnQgIT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpOwor
ICAgICAgICAgICAgcmV0dXJuICgqdGhpcykgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtZGVjcmVt
ZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coc3Rh
dGljX2Nhc3Q8c2l6ZV90PihkZWNyZW1lbnQpIDw9IG1fcG9zaXRpb24pOworICAgICAgICBtX3Bv
c2l0aW9uIC09IGRlY3JlbWVudDsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAg
IEluZGV4ZWRJdGVyYXRvciYgb3BlcmF0b3IrPShzaXplX3QgaW5jcmVtZW50KQorICAgIHsKKyAg
ICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVygoc3RkOjpudW1lcmljX2xpbWl0czxzaXpl
X3Q+OjptYXgoKSAtIG1fcG9zaXRpb24pID4gaW5jcmVtZW50KTsKKyAgICAgICAgbV9wb3NpdGlv
biArPSBpbmNyZW1lbnQ7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9wb3Np
dGlvbiA8PSBtX3ZlY3Rvci0+c2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0K
KworICAgIEluZGV4ZWRJdGVyYXRvciYgb3BlcmF0b3ItPShzaXplX3QgZGVjcmVtZW50KQorICAg
IHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhkZWNyZW1lbnQgPD0gbV9wb3Np
dGlvbik7CisgICAgICAgIG1fcG9zaXRpb24gLT0gZGVjcmVtZW50OworICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvcis9KGludDMyX3Qg
aW5jcmVtZW50KQorICAgIHsKKyAgICAgICAgaWYgKGluY3JlbWVudCA8IDApIHsKKyAgICAgICAg
ICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaW5jcmVtZW50ICE9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50MzJfdD46Om1heCgpKTsKKyAgICAgICAgICAgIHJldHVybiAoKnRoaXMpIC09IHN0
YXRpY19jYXN0PHNpemVfdD4oLWluY3JlbWVudCk7CisgICAgICAgIH0KKyAgICAgICAgSU5ERVhF
RF9JVEVSQVRPUl9PVkVSRkxPVygoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAt
IG1fcG9zaXRpb24pID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmNyZW1lbnQpKTsKKyAgICAgICAg
bV9wb3NpdGlvbiArPSBpbmNyZW1lbnQ7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZM
T1cobV9wb3NpdGlvbiA8PSBtX3ZlY3Rvci0+c2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciYgb3BlcmF0b3ItPShpbnQzMl90IGRlY3Jl
bWVudCkKKyAgICB7CisgICAgICAgIGlmIChkZWNyZW1lbnQgPCAwKSB7CisgICAgICAgICAgICBJ
TkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGRlY3JlbWVudCAhPSBzdGQ6Om51bWVyaWNfbGltaXRz
PGludDMyX3Q+OjptYXgoKSk7CisgICAgICAgICAgICByZXR1cm4gKCp0aGlzKSArPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KC1kZWNyZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgSU5ERVhFRF9J
VEVSQVRPUl9PVkVSRkxPVyhzdGF0aWNfY2FzdDxzaXplX3Q+KGRlY3JlbWVudCkgPD0gbV9wb3Np
dGlvbik7CisgICAgICAgIG1fcG9zaXRpb24gLT0gZGVjcmVtZW50OworICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yKyhzaXplX3QgaW5j
cmVtZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhp
cyk7CisgICAgICAgIHJldHVybiByZXN1bHQgKz0gaW5jcmVtZW50OworICAgIH0KKworICAgIElu
ZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0oc2l6ZV90IGRlY3JlbWVudCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICByZXR1cm4gcmVz
dWx0IC09IGRlY3JlbWVudDsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3Ir
KGludDMyX3QgaW5jcmVtZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9y
IHJlc3VsdCgqdGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQgKz0gaW5jcmVtZW50OworICAg
IH0KKworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0oaW50MzJfdCBkZWNyZW1lbnQpIGNv
bnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdCAtPSBkZWNyZW1lbnQ7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJh
dG9yIG9wZXJhdG9yKyh1bnNpZ25lZCBsb25nIGxvbmcgaW5jcmVtZW50KSBjb25zdAorICAgIHsK
KyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmNyZW1lbnQpOworICAgIH0KKworICAgIElu
ZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0odW5zaWduZWQgbG9uZyBsb25nIGRlY3JlbWVudCkgY29u
c3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAgICAg
ICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19jYXN0PHNpemVfdD4oZGVjcmVtZW50KTsKKyAgICB9
CisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yKyhsb25nIGxvbmcgaW5jcmVtZW50KSBjb25z
dAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAg
IHJldHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmNyZW1lbnQpOworICAgIH0K
KworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0obG9uZyBsb25nIGRlY3JlbWVudCkgY29u
c3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAgICAg
ICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19jYXN0PHNpemVfdD4oZGVjcmVtZW50KTsKKyAgICB9
CisKKyNpZiBfX1NJWkVPRl9TSVpFX1RfXyAhPSBfX1NJWkVPRl9JTlRfXworICAgIEluZGV4ZWRJ
dGVyYXRvciBvcGVyYXRvcisodW5zaWduZWQgaW5jcmVtZW50KSBjb25zdAorICAgIHsKKyAgICAg
ICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQg
Kz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmNyZW1lbnQpOworICAgIH0KKworICAgIEluZGV4ZWRJ
dGVyYXRvciBvcGVyYXRvci0odW5zaWduZWQgZGVjcmVtZW50KSBjb25zdAorICAgIHsKKyAgICAg
ICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQg
Kz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihkZWNyZW1lbnQpOworICAgIH0KKyNlbmRpZgorCisgICAg
SW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yKyhsb25nIGluY3JlbWVudCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICByZXR1cm4gcmVz
dWx0ICs9IHN0YXRpY19jYXN0PHNpemVfdD4oaW5jcmVtZW50KTsKKyAgICB9CisKKyAgICBJbmRl
eGVkSXRlcmF0b3Igb3BlcmF0b3ItKGxvbmcgZGVjcmVtZW50KSBjb25zdAorICAgIHsKKyAgICAg
ICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQg
Kz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihkZWNyZW1lbnQpOworICAgIH0KKworICAgIHB0cmRpZmZf
dCBvcGVyYXRvci0oY29uc3QgY29uc3RfaXRlcmF0b3ImIHJpZ2h0KSBjb25zdAorICAgIHsKKyAg
ICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3ZlY3RvciA9PSByaWdodC5tX3ZlY3Rv
cik7CisgICAgICAgIHJldHVybiBtX3Bvc2l0aW9uIC0gcmlnaHQubV9wb3NpdGlvbjsKKyAgICB9
CisKKyAgICBwdHJkaWZmX3Qgb3BlcmF0b3ItKGNvbnN0IFZhbHVlVHlwZSogcmlnaHQpIGNvbnN0
CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKHJpZ2h0ID49IG1fdmVj
dG9yLT5kYXRhKCkpOworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1fcG9zaXRp
b24gPj0gc3RhdGljX2Nhc3Q8c2l6ZV90PihyaWdodCAtIG1fdmVjdG9yLT5kYXRhKCkpKTsKKyAg
ICAgICAgcmV0dXJuIGdldCgpIC0gcmlnaHQ7CisgICAgfQorCisgICAgdm9pZCBvcGVyYXRvcj0o
Y29uc3QgSW5kZXhlZEl0ZXJhdG9yJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fdmVjdG9yID0g
b3RoZXIubV92ZWN0b3I7CisgICAgICAgIG1fcG9zaXRpb24gPSBvdGhlci5tX3Bvc2l0aW9uOwor
ICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlzU2FmZVRv
Q29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPT0gb3RoZXIudW5z
YWZlR2V0KCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGNvbnN0X2l0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZM
T1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSAh
PSBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
VmFsdWVUeXBlKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1Jf
T1ZFUkZMT1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVH
ZXQoKSA9PSBvdGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVmFsdWVU
eXBlKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZM
T1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSAh
PSBvdGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBWYWx1ZVR5cGUqIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpc1Nh
ZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpIDwgb3RoZXI7
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFZhbHVlVHlwZSogb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlzU2FmZVRvQ29t
cGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPD0gb3RoZXI7CisgICAg
fQorCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBh
cmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpIDwgb3RoZXIudW5zYWZlR2V0
KCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coc2Fm
ZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPD0gb3RoZXIu
dW5zYWZlR2V0KCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgSW5kZXhlZEl0
ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZF
UkZMT1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQo
KSA+IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+PShjb25z
dCBjb25zdF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lU
RVJBVE9SX09WRVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4g
dW5zYWZlR2V0KCkgPj0gb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvcj4oY29uc3QgVmFsdWVUeXBlKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVY
RURfSVRFUkFUT1JfT1ZFUkZMT1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJl
dHVybiB1bnNhZmVHZXQoKSA+IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+PShj
b25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVu
c2FmZUdldCgpID49IG90aGVyOworICAgIH0KKworICAgIG9wZXJhdG9yIGNvbnN0X2l0ZXJhdG9y
KCkgY29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fdmVjdG9yID0gbV92ZWN0b3I7CisgICAgICAgIHJlc3VsdC5tX3Bvc2l0aW9uID0g
bV9wb3NpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBWZWN0b3JU
eXBlKiBtX3ZlY3RvcjsKKyAgICBzaXplX3QgbV9wb3NpdGlvbjsKKworICAgIGJvb2wgaXNTYWZl
VG9Db21wYXJlKGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChtX3ZlY3RvciA9PSBvdGhlci5tX3ZlY3RvcikKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICByZXR1cm4gIW1fdmVjdG9yIHx8ICFvdGhlci5tX3ZlY3RvcjsKKyAgICB9
CisKKyAgICBib29sIGlzU2FmZVRvQ29tcGFyZShjb25zdCBWYWx1ZVR5cGUqIHZhbHVlKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBpZiAoIW1fdmVjdG9yKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IHNpemVfdCBkZWx0YSA9IHN0YXRpY19jYXN0PHNpemVfdD4odmFsdWUgLSBtX3ZlY3Rvci0+ZGF0
YSgpKTsKKyAgICAgICAgcmV0dXJuIGRlbHRhIDw9IG1fdmVjdG9yLT5zaXplKCk7CisgICAgfQor
CisgICAgVmFsdWVUeXBlKiB1bnNhZmVHZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFt
X3ZlY3RvcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZ2V0
KCk7CisgICAgfQorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlw
ZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIHR5cGVuYW1lIEluZGV4ZWRJdGVy
YXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj46OlZhbHVlVHlwZSogZ2V0UHRyKElu
ZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4gcCkKK3sKKyAgICBy
ZXR1cm4gcC5nZXQoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVl
VHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIHB0cmRpZmZfdCBvcGVyYXRv
ci0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVU
eXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICBJTkRFWEVEX0lURVJBVE9SX09W
RVJGTE9XKGxlZnQgPj0gcmlnaHQubV92ZWN0b3ItPmRhdGEoKSk7CisgICAgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVyhsZWZ0IDw9IHJpZ2h0Lm1fdmVjdG9yLT5lbmQoKS5nZXQoKSk7CisgICAg
cmV0dXJuIGxlZnQgLSByaWdodC5nZXQoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIHB0cmRp
ZmZfdCBvcGVyYXRvci0oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwg
VmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICBJTkRFWEVEX0lURVJB
VE9SX09WRVJGTE9XKGxlZnQgPj0gcmlnaHQubV92ZWN0b3ItPmRhdGEoKSk7CisgICAgSU5ERVhF
RF9JVEVSQVRPUl9PVkVSRkxPVyhsZWZ0IDw9IHJpZ2h0Lm1fdmVjdG9yLT5lbmQoKS5nZXQoKSk7
CisgICAgcmV0dXJuIGxlZnQgLSByaWdodC5nZXQoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5l
IHB0cmRpZmZfdCBvcGVyYXRvci0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVk
SXRlcmF0b3I8Y29uc3QgVCwgY29uc3QgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdo
dCkKK3sKKyAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGxlZnQgPj0gcmlnaHQubV92ZWN0
b3ItPmRhdGEoKSk7CisgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhsZWZ0IDw9IHJpZ2h0
Lm1fdmVjdG9yLT5lbmQoKS5nZXQoKSk7CisgICAgcmV0dXJuIGxlZnQgLSByaWdodC5nZXQoKTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShWYWx1ZVR5cGUqIGxlZnQs
IGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJp
Z2h0KQoreworICAgIHJldHVybiByaWdodCA9PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Citpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0
ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0
dXJuIHJpZ2h0ID09IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBW
YWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9y
IT0oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBP
dmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgIT0gbGVmdDsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWYWx1ZVR5cGUqIGxl
ZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4m
IHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCAhPSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Citp
bmxpbmUgYm9vbCBvcGVyYXRvcjw9KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJh
dG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJu
IHJpZ2h0ID49IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1
ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPD0o
Y29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBl
LCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPj0gbGVmdDsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I+PShWYWx1ZVR5cGUqIGxlZnQs
IGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJp
Z2h0KQoreworICAgIHJldHVybiByaWdodCA8PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Citpbmxp
bmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0
ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0
dXJuIHJpZ2h0IDw9IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBW
YWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9y
PChWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92
ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA+IGxlZnQ7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBWYWx1ZVR5cGUqIGxlZnQs
IGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJp
Z2h0KQoreworICAgIHJldHVybiByaWdodCA+IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGlu
ZSBib29sIG9wZXJhdG9yPihWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxU
LCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdo
dCA8IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUs
IHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBW
YWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJm
bG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA8IGxlZnQ7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBWZWN0b3JUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0
cnVjdCBJbmRleGVkSXRlcmF0b3JTZWxlY3RvciB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBWZWN0
b3JUeXBlOjpWYWx1ZVR5cGUgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgSW5kZXhlZEl0ZXJhdG9y
PFZlY3RvclR5cGUsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiBpdGVyYXRvcjsKKyAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsK
KyAgICBzdGF0aWMgaXRlcmF0b3IgbWFrZUl0ZXJhdG9yKFZlY3RvclR5cGUmIHZlY3RvciwgVmFs
dWVUeXBlKiBwKSB7IHJldHVybiBpdGVyYXRvcih2ZWN0b3IsIHApOyB9CisgICAgc3RhdGljIGNv
bnN0X2l0ZXJhdG9yIG1ha2VDb25zdEl0ZXJhdG9yKGNvbnN0IFZlY3RvclR5cGUmIHZlY3Rvciwg
Y29uc3QgVmFsdWVUeXBlKiBwKSB7IHJldHVybiBjb25zdF9pdGVyYXRvcih2ZWN0b3IsIHApOyB9
Cit9OworCisjdW5kZWYgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVworCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5LmggYi9Tb3VyY2UvV1RG
L3d0Zi9SZWZDb3VudGVkQXJyYXkuaAppbmRleCBhNTVkN2FlZWFiODRiOWM0OTUxOTZlOGUyMzBh
MWRjMTc4NTE5M2FiLi44MTFlOWZmY2VhMzM3YTZjN2Q4YjI5MTYzMGUyYWZkZjhlNTY2MzkwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaApAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+cmVmQ291bnQgPSAxOwogICAgICAgICBI
ZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSktPmxlbmd0aCA9IG90aGVyLnNpemUoKTsKICAgICAg
ICAgQVNTRVJUKEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+bGVuZ3RoID09IG90aGVyLnNp
emUoKSk7Ci0gICAgICAgIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+Ojp1bmluaXRpYWxpemVkQ29w
eShvdGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSwgbV9kYXRhKTsKKyAgICAgICAgVmVjdG9yVHlw
ZU9wZXJhdGlvbnM8VD46OnVuaW5pdGlhbGl6ZWRDb3B5KGdldFB0cihvdGhlci5iZWdpbigpKSwg
Z2V0UHRyKG90aGVyLmVuZCgpKSwgbV9kYXRhKTsKICAgICB9CiAgICAgCiAgICAgUmVmQ291bnRl
ZEFycmF5JiBvcGVyYXRvcj0oY29uc3QgUmVmQ291bnRlZEFycmF5JiBvdGhlcikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oIGIvU291cmNlL1dURi93dGYvVmVjdG9yLmgKaW5k
ZXggMjc0NTY4YTY5MWM2NGEwMzQyM2E0ZjJiNzM0ODc3ZTYyMDcyZDkxZS4uNGFhYTQ4YWMyNGE0
MmZlOTlhODA4ZWE3YjFlZDJiOGQwODIyYzAwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
VmVjdG9yLmgKKysrIGIvU291cmNlL1dURi93dGYvVmVjdG9yLmgKQEAgLTI4LDYgKzI4LDggQEAK
ICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgog
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9JbmRleGVkSXRlcmF0b3IuaD4KICNpbmNsdWRlIDx3dGYvTWFsbG9jUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgpAQCAtNTU0LDE0ICs1NTYsMTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQg
aW5saW5lQ2FwYWNpdHkgPSAwLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIgPSBDcmEKIGNsYXNz
IFZlY3RvciA6IHByaXZhdGUgVmVjdG9yQnVmZmVyPFQsIGlubGluZUNhcGFjaXR5PiB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwcml2YXRlOgorCiAgICAgdHlwZWRlZiBWZWN0b3JC
dWZmZXI8VCwgaW5saW5lQ2FwYWNpdHk+IEJhc2U7CiAgICAgdHlwZWRlZiBWZWN0b3JUeXBlT3Bl
cmF0aW9uczxUPiBUeXBlT3BlcmF0aW9uczsKKyAgICB0eXBlZGVmIEluZGV4ZWRJdGVyYXRvclNl
bGVjdG9yPFZlY3RvciwgT3ZlcmZsb3dIYW5kbGVyPiBJdGVyYXRvclNlbGVjdG9yOwogCiBwdWJs
aWM6CiAgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKIAotICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7
Ci0gICAgdHlwZWRlZiBjb25zdCBUKiBjb25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIHR5cGVu
YW1lIEl0ZXJhdG9yU2VsZWN0b3I6Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlw
ZW5hbWUgSXRlcmF0b3JTZWxlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisK
ICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVy
YXRvcjsKICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4g
Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKIApAQCAtNTc0LDE0ICs1NzksMTQgQEAgcHVibGljOgog
ICAgICAgICA6IEJhc2Uoc2l6ZSwgc2l6ZSkKICAgICB7CiAgICAgICAgIGlmIChiZWdpbigpKQot
ICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoYmVnaW4oKSwgZW5kKCkpOwor
ICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoZ2V0UHRyKGJlZ2luKCkpLCBn
ZXRQdHIoZW5kKCkpKTsKICAgICB9CiAKICAgICBWZWN0b3IodW5zaWduZWQgc2l6ZSwgY29uc3Qg
VCYgdmFsKQogICAgICAgICA6IEJhc2Uoc2l6ZSwgc2l6ZSkKICAgICB7CiAgICAgICAgIGlmIChi
ZWdpbigpKQotICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRGaWxsKGJl
Z2luKCksIGVuZCgpLCB2YWwpOworICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlh
bGl6ZWRGaWxsKGdldFB0cihiZWdpbigpKSwgZ2V0UHRyKGVuZCgpKSwgdmFsKTsKICAgICB9CiAK
ICAgICBWZWN0b3Ioc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IGluaXRpYWxpemVyTGlzdCkKQEAg
LTY0NSwxMCArNjUwLDEwIEBAIHB1YmxpYzoKICAgICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gQmFzZTo6YnVmZmVyKCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGRhdGFNZW1vcnlP
ZmZzZXQoKSB7IHJldHVybiBCYXNlOjpidWZmZXJNZW1vcnlPZmZzZXQoKTsgfQogCi0gICAgaXRl
cmF0b3IgYmVnaW4oKSB7IHJldHVybiBkYXRhKCk7IH0KLSAgICBpdGVyYXRvciBlbmQoKSB7IHJl
dHVybiBiZWdpbigpICsgbV9zaXplOyB9Ci0gICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25z
dCB7IHJldHVybiBkYXRhKCk7IH0KLSAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBiZWdpbigpICsgbV9zaXplOyB9CisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBJ
dGVyYXRvclNlbGVjdG9yOjptYWtlSXRlcmF0b3IoKnRoaXMsIGRhdGEoKSk7IH0KKyAgICBpdGVy
YXRvciBlbmQoKSB7IHJldHVybiBiZWdpbigpICsgc2l6ZSgpOyB9CisgICAgY29uc3RfaXRlcmF0
b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBJdGVyYXRvclNlbGVjdG9yOjptYWtlQ29uc3RJdGVy
YXRvcigqdGhpcywgZGF0YSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIGJlZ2luKCkgKyBzaXplKCk7IH0KIAogICAgIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2lu
KCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICAgICByZXZlcnNlX2l0ZXJh
dG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CkBAIC02ODMs
NiArNjg4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhcigpIHsgc2hyaW5rQ2FwYWNpdHko
MCk7IH0KIAorICAgIHZvaWQgYXBwZW5kKGNvbnN0X2l0ZXJhdG9yLCB1bnNpZ25lZCk7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCBhcHBlbmQoY29uc3QgVSosIHVuc2lnbmVkKTsKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIGFwcGVuZChVJiYpOwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IHZvaWQgdW5jaGVja2VkQXBwZW5kKFUmJiB2YWwpOwpAQCAtNzQ2LDcgKzc1Miw3
IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6VmVjdG9yKGNv
bnN0IFZlY3RvciYgb3RoZXIpCiAgICAgOiBCYXNlKG90aGVyLmNhcGFjaXR5KCksIG90aGVyLnNp
emUoKSkKIHsKICAgICBpZiAoYmVnaW4oKSkKLSAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5p
dGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpLCBiZWdpbigpKTsKKyAgICAg
ICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KGdldFB0cihvdGhlci5iZWdpbigp
KSwgZ2V0UHRyKG90aGVyLmVuZCgpKSwgZ2V0UHRyKGJlZ2luKCkpKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlcj4KQEAgLTc1NSw3ICs3NjEsNyBAQCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlcj46OlZlY3Rvcihjb25zdCBWZWN0b3I8VCwgb3RoZXJDYXBhY2l0eQogICAgIDog
QmFzZShvdGhlci5jYXBhY2l0eSgpLCBvdGhlci5zaXplKCkpCiB7CiAgICAgaWYgKGJlZ2luKCkp
Ci0gICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigp
LCBvdGhlci5lbmQoKSwgYmVnaW4oKSk7CisgICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRp
YWxpemVkQ29weShnZXRQdHIob3RoZXIuYmVnaW4oKSksIGdldFB0cihvdGhlci5lbmQoKSksIGdl
dFB0cihiZWdpbigpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGlu
ZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CkBAIC03NzIsOCArNzc4LDggQEAg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+JiBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGEKICAgICAgICAgQVNTRVJUKGJlZ2luKCkpOwogICAgIH0K
ICAgICAKLSAgICBzdGQ6OmNvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuYmVnaW4oKSArIHNpemUo
KSwgYmVnaW4oKSk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVy
LmJlZ2luKCkgKyBzaXplKCksIG90aGVyLmVuZCgpLCBlbmQoKSk7CisgICAgc3RkOjpjb3B5KGdl
dFB0cihvdGhlci5iZWdpbigpKSwgZ2V0UHRyKG90aGVyLmJlZ2luKCkgKyBzaXplKCkpLCBnZXRQ
dHIoYmVnaW4oKSkpOworICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShnZXRQ
dHIob3RoZXIuYmVnaW4oKSArIHNpemUoKSksIGdldFB0cihvdGhlci5lbmQoKSksIGdldFB0cihl
bmQoKSkpOwogICAgIG1fc2l6ZSA9IG90aGVyLnNpemUoKTsKIAogICAgIHJldHVybiAqdGhpczsK
QEAgLTc5Nyw5ICs4MDMsOSBAQCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlcj4mIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYQogICAgICAgICByZXNl
cnZlQ2FwYWNpdHkob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgQVNTRVJUKGJlZ2luKCkpOwogICAg
IH0KLSAgICAKLSAgICBzdGQ6OmNvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuYmVnaW4oKSArIHNp
emUoKSwgYmVnaW4oKSk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90
aGVyLmJlZ2luKCkgKyBzaXplKCksIG90aGVyLmVuZCgpLCBlbmQoKSk7CisKKyAgICBzdGQ6OmNv
cHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuYmVnaW4oKSArIHNpemUoKSks
IGdldFB0cihiZWdpbigpKSk7CisgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5
KGdldFB0cihvdGhlci5iZWdpbigpICsgc2l6ZSgpKSwgZ2V0UHRyKG90aGVyLmVuZCgpKSwgZ2V0
UHRyKGVuZCgpKSk7CiAgICAgbV9zaXplID0gb3RoZXIuc2l6ZSgpOwogCiAgICAgcmV0dXJuICp0
aGlzOwpAQCAtODU5LDggKzg2NSw4IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXI+OjpmaWxsKGNvbnN0IFQmIHZhbCwgdW5zaWduZWQgbmV3CiAgICAgICAg
IEFTU0VSVChiZWdpbigpKTsKICAgICB9CiAgICAgCi0gICAgc3RkOjpmaWxsKGJlZ2luKCksIGVu
ZCgpLCB2YWwpOwotICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkRmlsbChlbmQoKSwg
YmVnaW4oKSArIG5ld1NpemUsIHZhbCk7CisgICAgc3RkOjpmaWxsKGdldFB0cihiZWdpbigpKSwg
Z2V0UHRyKGVuZCgpKSwgdmFsKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZEZp
bGwoZ2V0UHRyKGVuZCgpKSwgZ2V0UHRyKGJlZ2luKCkpICsgbmV3U2l6ZSwgdmFsKTsKICAgICBt
X3NpemUgPSBuZXdTaXplOwogfQogCkBAIC04ODEsMTMgKzg4NywxMyBAQCB2b2lkIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6ZXhwYW5kQ2FwYWNpdHkodW5zaWdu
ZWQgbmV3TWluQwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHks
IHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIFQqIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyPjo6ZXhwYW5kQ2FwYWNpdHkodW5zaWduZWQgbmV3TWluQ2FwYWNpdHks
IFQqIHB0cikKIHsKLSAgICBpZiAocHRyIDwgYmVnaW4oKSB8fCBwdHIgPj0gZW5kKCkpIHsKKyAg
ICBpZiAocHRyIDwgZ2V0UHRyKGJlZ2luKCkpIHx8IHB0ciA+PSBnZXRQdHIoZW5kKCkpKSB7CiAg
ICAgICAgIGV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5KTsKICAgICAgICAgcmV0dXJuIHB0
cjsKICAgICB9Ci0gICAgdW5zaWduZWQgaW5kZXggPSBwdHIgLSBiZWdpbigpOworICAgIHVuc2ln
bmVkIGluZGV4ID0gcHRyIC0gZ2V0UHRyKGJlZ2luKCkpOwogICAgIGV4cGFuZENhcGFjaXR5KG5l
d01pbkNhcGFjaXR5KTsKLSAgICByZXR1cm4gYmVnaW4oKSArIGluZGV4OworICAgIHJldHVybiBn
ZXRQdHIoYmVnaW4oKSkgKyBpbmRleDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWdu
ZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KQEAgLTg5OSwxNSAr
OTA1LDE1IEBAIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+
Ojp0cnlFeHBhbmRDYXBhY2l0eSh1bnNpZ25lZCBuZXdNCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1
bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogY29uc3Qg
VCogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojp0cnlFeHBhbmRD
YXBhY2l0eSh1bnNpZ25lZCBuZXdNaW5DYXBhY2l0eSwgY29uc3QgVCogcHRyKQogewotICAgIGlm
IChwdHIgPCBiZWdpbigpIHx8IHB0ciA+PSBlbmQoKSkgeworICAgIGlmIChwdHIgPCBnZXRQdHIo
YmVnaW4oKSkgfHwgcHRyID49IGdldFB0cihlbmQoKSkpIHsKICAgICAgICAgaWYgKCF0cnlFeHBh
bmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0eSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgcmV0dXJuIHB0cjsKICAgICB9Ci0gICAgdW5zaWduZWQgaW5kZXggPSBwdHIgLSBiZWdpbigp
OworICAgIHVuc2lnbmVkIGluZGV4ID0gcHRyIC0gZ2V0UHRyKGJlZ2luKCkpOwogICAgIGlmICgh
dHJ5RXhwYW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICByZXR1cm4gYmVnaW4oKSArIGluZGV4OworICAgIHJldHVybiBnZXRQdHIoYmVnaW4oKSkgKyBp
bmRleDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHks
IHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KQEAgLTkyMSwx
MiArOTI3LDEyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CiBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnJlc2l6ZSh1bnNpZ25lZCBzaXplKQogewogICAg
IGlmIChzaXplIDw9IG1fc2l6ZSkKLSAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0KGJl
Z2luKCkgKyBzaXplLCBlbmQoKSk7CisgICAgICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChn
ZXRQdHIoYmVnaW4oKSkgKyBzaXplLCBnZXRQdHIoZW5kKCkpKTsKICAgICBlbHNlIHsKICAgICAg
ICAgaWYgKHNpemUgPiBjYXBhY2l0eSgpKQogICAgICAgICAgICAgZXhwYW5kQ2FwYWNpdHkoc2l6
ZSk7CiAgICAgICAgIGlmIChiZWdpbigpKQotICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6Omlu
aXRpYWxpemUoZW5kKCksIGJlZ2luKCkgKyBzaXplKTsKKyAgICAgICAgICAgIFR5cGVPcGVyYXRp
b25zOjppbml0aWFsaXplKGdldFB0cihlbmQoKSksIGdldFB0cihiZWdpbigpKSArIHNpemUpOwog
ICAgIH0KICAgICAKICAgICBtX3NpemUgPSBzaXplOwpAQCAtOTQzLDcgKzk0OSw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXI+CiB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
Pjo6c2hyaW5rKHVuc2lnbmVkIHNpemUpCiB7CiAgICAgQVNTRVJUKHNpemUgPD0gbV9zaXplKTsK
LSAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QoYmVnaW4oKSArIHNpemUsIGVuZCgpKTsKKyAg
ICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QoZ2V0UHRyKGJlZ2luKCkpICsgc2l6ZSwgZ2V0UHRy
KGVuZCgpKSk7CiAgICAgbV9zaXplID0gc2l6ZTsKIH0KIApAQCAtOTU0LDcgKzk2MCw3IEBAIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojpncm93KHVuc2ln
bmVkIHNpemUpCiAgICAgaWYgKHNpemUgPiBjYXBhY2l0eSgpKQogICAgICAgICBleHBhbmRDYXBh
Y2l0eShzaXplKTsKICAgICBpZiAoYmVnaW4oKSkKLSAgICAgICAgVHlwZU9wZXJhdGlvbnM6Omlu
aXRpYWxpemUoZW5kKCksIGJlZ2luKCkgKyBzaXplKTsKKyAgICAgICAgVHlwZU9wZXJhdGlvbnM6
OmluaXRpYWxpemUoZ2V0UHRyKGVuZCgpKSwgZ2V0UHRyKGJlZ2luKCkpICsgc2l6ZSk7CiAgICAg
bV9zaXplID0gc2l6ZTsKIH0KIApAQCAtOTYzLDExICs5NjksMTEgQEAgdm9pZCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnJlc2VydmVDYXBhY2l0eSh1bnNpZ25l
ZCBuZXdDYXAKIHsKICAgICBpZiAobmV3Q2FwYWNpdHkgPD0gY2FwYWNpdHkoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIFQqIG9sZEJ1ZmZlciA9IGJlZ2luKCk7Ci0gICAgVCogb2xkRW5kID0gZW5k
KCk7CisgICAgVCogb2xkQnVmZmVyID0gZ2V0UHRyKGJlZ2luKCkpOworICAgIFQqIG9sZEVuZCA9
IGdldFB0cihlbmQoKSk7CiAgICAgQmFzZTo6YWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpOwog
ICAgIEFTU0VSVChiZWdpbigpKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShvbGRCdWZmZXIs
IG9sZEVuZCwgYmVnaW4oKSk7CisgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBv
bGRFbmQsIGdldFB0cihiZWdpbigpKSk7CiAgICAgQmFzZTo6ZGVhbGxvY2F0ZUJ1ZmZlcihvbGRC
dWZmZXIpOwogfQogCkBAIC05NzYsMTIgKzk4MiwxMiBAQCBib29sIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6dHJ5UmVzZXJ2ZUNhcGFjaXR5KHVuc2lnbmVkIG5l
dwogewogICAgIGlmIChuZXdDYXBhY2l0eSA8PSBjYXBhY2l0eSgpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBUKiBvbGRCdWZmZXIgPSBiZWdpbigpOwotICAgIFQqIG9sZEVuZCA9IGVuZCgp
OworICAgIFQqIG9sZEJ1ZmZlciA9IGdldFB0cihiZWdpbigpKTsKKyAgICBUKiBvbGRFbmQgPSBn
ZXRQdHIoZW5kKCkpOwogICAgIGlmICghQmFzZTo6dHJ5QWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNp
dHkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgQVNTRVJUKGJlZ2luKCkpOwotICAgIFR5
cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBiZWdpbigpKTsKKyAgICBUeXBl
T3BlcmF0aW9uczo6bW92ZShvbGRCdWZmZXIsIG9sZEVuZCwgZ2V0UHRyKGJlZ2luKCkpKTsKICAg
ICBCYXNlOjpkZWFsbG9jYXRlQnVmZmVyKG9sZEJ1ZmZlcik7CiAgICAgcmV0dXJuIHRydWU7CiB9
CkBAIC0xMDA0LDE3ICsxMDEwLDE3IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXI+OjpzaHJpbmtDYXBhY2l0eSh1bnNpZ25lZCBuZXdDYXBhCiAgICAgaWYg
KG5ld0NhcGFjaXR5IDwgc2l6ZSgpKSAKICAgICAgICAgc2hyaW5rKG5ld0NhcGFjaXR5KTsKIAot
ICAgIFQqIG9sZEJ1ZmZlciA9IGJlZ2luKCk7CisgICAgVCogb2xkQnVmZmVyID0gZ2V0UHRyKGJl
Z2luKCkpOwogICAgIGlmIChuZXdDYXBhY2l0eSA+IDApIHsKICAgICAgICAgaWYgKEJhc2U6OnNo
b3VsZFJlYWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpKSB7CiAgICAgICAgICAgICBCYXNlOjpy
ZWFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIFQqIG9sZEVuZCA9IGVuZCgpOworICAgICAgICBUKiBvbGRFbmQgPSBn
ZXRQdHIoZW5kKCkpOwogICAgICAgICBCYXNlOjphbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSk7
Ci0gICAgICAgIGlmIChiZWdpbigpICE9IG9sZEJ1ZmZlcikKLSAgICAgICAgICAgIFR5cGVPcGVy
YXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBiZWdpbigpKTsKKyAgICAgICAgaWYgKGdl
dFB0cihiZWdpbigpKSAhPSBvbGRCdWZmZXIpCisgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6
bW92ZShvbGRCdWZmZXIsIG9sZEVuZCwgZ2V0UHRyKGJlZ2luKCkpKTsKICAgICB9CiAKICAgICBC
YXNlOjpkZWFsbG9jYXRlQnVmZmVyKG9sZEJ1ZmZlcik7CkBAIC0xMDM0LDExICsxMDQwLDE3IEBA
IHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmQo
Y29uc3QgVSogZGF0YSwgdW5zaWduZWQKICAgICB9CiAgICAgaWYgKG5ld1NpemUgPCBtX3NpemUp
CiAgICAgICAgIENSQVNIKCk7Ci0gICAgVCogZGVzdCA9IGVuZCgpOworICAgIFQqIGRlc3QgPSBn
ZXRQdHIoZW5kKCkpOwogICAgIFZlY3RvckNvcGllcjxzdGQ6OmlzX3RyaXZpYWw8VD46OnZhbHVl
LCBVPjo6dW5pbml0aWFsaXplZENvcHkoZGF0YSwgJmRhdGFbZGF0YVNpemVdLCBkZXN0KTsKICAg
ICBtX3NpemUgPSBuZXdTaXplOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBp
bmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgordm9pZCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmFwcGVuZChjb25zdF9pdGVyYXRvciBk
YXRhLCB1bnNpZ25lZCBkYXRhU2l6ZSkKK3sKKyAgICBhcHBlbmQoZ2V0UHRyKGRhdGEpLCBkYXRh
U2l6ZSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CiBib29sIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6dHJ5QXBwZW5kKGNvbnN0
IFUqIGRhdGEsIHVuc2lnbmVkIGRhdGFTaXplKQogewpAQCAtMTA1MSw3ICsxMDYzLDcgQEAgYm9v
bCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnRyeUFwcGVuZChj
b25zdCBVKiBkYXRhLCB1bnNpZ24KICAgICB9CiAgICAgaWYgKG5ld1NpemUgPCBtX3NpemUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBUKiBkZXN0ID0gZW5kKCk7CisgICAgVCogZGVzdCA9
IGdldFB0cihlbmQoKSk7CiAgICAgVmVjdG9yQ29waWVyPHN0ZDo6aXNfdHJpdmlhbDxUPjo6dmFs
dWUsIFU+Ojp1bmluaXRpYWxpemVkQ29weShkYXRhLCAmZGF0YVtkYXRhU2l6ZV0sIGRlc3QpOwog
ICAgIG1fc2l6ZSA9IG5ld1NpemU7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDYxLDcgKzEwNzMs
NyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyPiB0ZW1wbGF0ZQogQUxXQVlTX0lOTElORSB2b2lkIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kKFUmJiB2YWx1ZSkKIHsK
ICAgICBpZiAoc2l6ZSgpICE9IGNhcGFjaXR5KCkpIHsKLSAgICAgICAgbmV3IChOb3ROdWxsLCBl
bmQoKSkgVChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICAgICAgbmV3IChOb3ROdWxsLCBn
ZXRQdHIoZW5kKCkpKSBUKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwogICAgICAgICArK21fc2l6
ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwNzgsNyArMTA5MCw3IEBAIHZvaWQgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmRTbG93Q2FzZShV
JiYgdmFsdWUpCiAgICAgcHRyID0gZXhwYW5kQ2FwYWNpdHkoc2l6ZSgpICsgMSwgcHRyKTsKICAg
ICBBU1NFUlQoYmVnaW4oKSk7CiAKLSAgICBuZXcgKE5vdE51bGwsIGVuZCgpKSBUKHN0ZDo6Zm9y
d2FyZDxVPigqcHRyKSk7CisgICAgbmV3IChOb3ROdWxsLCBnZXRQdHIoZW5kKCkpKSBUKHN0ZDo6
Zm9yd2FyZDxVPigqcHRyKSk7CiAgICAgKyttX3NpemU7CiB9CiAKQEAgLTEwOTEsMTQgKzExMDMs
MTQgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXI+Ojp1bmNoZWNrZWRBcHBlbmQoVSYmIHZhbHUKICAgICBBU1NFUlQoc2l6ZSgpIDwgY2FwYWNp
dHkoKSk7CiAKICAgICBhdXRvIHB0ciA9IHN0ZDo6YWRkcmVzc29mKHZhbHVlKTsKLSAgICBuZXcg
KE5vdE51bGwsIGVuZCgpKSBUKHN0ZDo6Zm9yd2FyZDxVPigqcHRyKSk7CisgICAgbmV3IChOb3RO
dWxsLCBnZXRQdHIoZW5kKCkpKSBUKHN0ZDo6Zm9yd2FyZDxVPigqcHRyKSk7CiAgICAgKyttX3Np
emU7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHRlbXBsYXRlPHR5cGVuYW1lIFUsIHVuc2lnbmVkIG90
aGVyQ2FwYWNpdHk+CiBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlcj46OmFwcGVuZFZlY3Rvcihjb25zdCBWZWN0b3I8VSwgb3RoZXJDYXBhY2l0eT4m
IHZhbCkKIHsKLSAgICBhcHBlbmQodmFsLmJlZ2luKCksIHZhbC5zaXplKCkpOworICAgIGFwcGVu
ZChnZXRQdHIodmFsLmJlZ2luKCkpLCB2YWwuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4g
dGVtcGxhdGU8dHlwZW5hbWUgVT4KQEAgLTExMTIsOCArMTEyNCw4IEBAIHZvaWQgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnQodW5zaWduZWQgcG9zaXRp
b24sIGNvbnN0CiAgICAgfQogICAgIGlmIChuZXdTaXplIDwgbV9zaXplKQogICAgICAgICBDUkFT
SCgpOwotICAgIFQqIHNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247Ci0gICAgVHlwZU9wZXJhdGlv
bnM6Om1vdmVPdmVybGFwcGluZyhzcG90LCBlbmQoKSwgc3BvdCArIGRhdGFTaXplKTsKKyAgICBU
KiBzcG90ID0gZ2V0UHRyKGJlZ2luKCkpICsgcG9zaXRpb247CisgICAgVHlwZU9wZXJhdGlvbnM6
Om1vdmVPdmVybGFwcGluZyhzcG90LCBnZXRQdHIoZW5kKCkpLCBzcG90ICsgZGF0YVNpemUpOwog
ICAgIFZlY3RvckNvcGllcjxzdGQ6OmlzX3RyaXZpYWw8VD46OnZhbHVlLCBVPjo6dW5pbml0aWFs
aXplZENvcHkoZGF0YSwgJmRhdGFbZGF0YVNpemVdLCBzcG90KTsKICAgICBtX3NpemUgPSBuZXdT
aXplOwogfQpAQCAtMTEyOSw4ICsxMTQxLDggQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnQodW5zaWduZWQgcG9zaXRpb24KICAg
ICAgICAgQVNTRVJUKGJlZ2luKCkpOwogICAgIH0KIAotICAgIFQqIHNwb3QgPSBiZWdpbigpICsg
cG9zaXRpb247Ci0gICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90LCBlbmQo
KSwgc3BvdCArIDEpOworICAgIFQqIHNwb3QgPSBnZXRQdHIoYmVnaW4oKSkgKyBwb3NpdGlvbjsK
KyAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGdldFB0cihlbmQoKSks
IHNwb3QgKyAxKTsKICAgICBuZXcgKE5vdE51bGwsIHNwb3QpIFQoc3RkOjpmb3J3YXJkPFU+KCpw
dHIpKTsKICAgICArK21fc2l6ZTsKIH0KQEAgLTExMzgsMTYgKzExNTAsMTYgQEAgaW5saW5lIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnQodW5z
aWduZWQgcG9zaXRpb24KIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHRlbXBsYXRlPHR5cGVuYW1lIFUsIHVuc2ln
bmVkIGM+CiBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlcj46Omluc2VydFZlY3Rvcih1bnNpZ25lZCBwb3NpdGlvbiwgY29uc3QgVmVjdG9yPFUsIGM+
JiB2YWwpCiB7Ci0gICAgaW5zZXJ0KHBvc2l0aW9uLCB2YWwuYmVnaW4oKSwgdmFsLnNpemUoKSk7
CisgICAgaW5zZXJ0KHBvc2l0aW9uLCBnZXRQdHIodmFsLmJlZ2luKCkpLCB2YWwuc2l6ZSgpKTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlcj4KIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlKHVuc2lnbmVkIHBvc2l0aW9uKQogewogICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0aW9uIDwgc2l6ZSgpKTsKLSAgICBU
KiBzcG90ID0gYmVnaW4oKSArIHBvc2l0aW9uOworICAgIFQqIHNwb3QgPSBnZXRQdHIoYmVnaW4o
KSkgKyBwb3NpdGlvbjsKICAgICBzcG90LT5+VCgpOwotICAgIFR5cGVPcGVyYXRpb25zOjptb3Zl
T3ZlcmxhcHBpbmcoc3BvdCArIDEsIGVuZCgpLCBzcG90KTsKKyAgICBUeXBlT3BlcmF0aW9uczo6
bW92ZU92ZXJsYXBwaW5nKHNwb3QgKyAxLCBnZXRQdHIoZW5kKCkpLCBzcG90KTsKICAgICAtLW1f
c2l6ZTsKIH0KIApAQCAtMTE1NiwxMCArMTE2OCwxMCBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnJlbW92ZSh1bnNpZ25lZCBwb3NpdGlv
bgogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0aW9uIDw9IHNp
emUoKSk7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24gKyBs
ZW5ndGggPD0gc2l6ZSgpKTsKLSAgICBUKiBiZWdpblNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247
CisgICAgVCogYmVnaW5TcG90ID0gZ2V0UHRyKGJlZ2luKCkpICsgcG9zaXRpb247CiAgICAgVCog
ZW5kU3BvdCA9IGJlZ2luU3BvdCArIGxlbmd0aDsKICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1
Y3QoYmVnaW5TcG90LCBlbmRTcG90KTsgCi0gICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFw
cGluZyhlbmRTcG90LCBlbmQoKSwgYmVnaW5TcG90KTsKKyAgICBUeXBlT3BlcmF0aW9uczo6bW92
ZU92ZXJsYXBwaW5nKGVuZFNwb3QsIGdldFB0cihlbmQoKSksIGJlZ2luU3BvdCk7CiAgICAgbV9z
aXplIC09IGxlbmd0aDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggMGNmMDllMWY1ZWM5OGE4NTE0NGNjNzIy
ZDJhNmNjNGFlNGY5Mzg5OC4uM2VlODA2OGEzYTc2YTRhNDNhYzY0MzIzMjc3MjY0M2MxNjE0OWQ3
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCkBAIC0xNDM3LDggKzE0MzcsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAg
ICAgICAgY29uc3QgdWludDhfdCogcHRyID0gYnVmZmVyLmJlZ2luKCk7Ci0gICAgICAgIGNvbnN0
IHVpbnQ4X3QqIGVuZCA9IGJ1ZmZlci5lbmQoKTsKKyAgICAgICAgY29uc3QgdWludDhfdCogcHRy
ID0gZ2V0UHRyKGJ1ZmZlci5iZWdpbigpKTsKKyAgICAgICAgY29uc3QgdWludDhfdCogZW5kID0g
Z2V0UHRyKGJ1ZmZlci5lbmQoKSk7CiAgICAgICAgIHVpbnQzMl90IHZlcnNpb247CiAgICAgICAg
IGlmICghcmVhZExpdHRsZUVuZGlhbihwdHIsIGVuZCwgdmVyc2lvbikgfHwgdmVyc2lvbiA+IEN1
cnJlbnRWZXJzaW9uKQogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IDJkOWI3OWUxM2FiZjk2MGE2MTRiOTZkMjcw
NjYwZTVmMzVlMzQxN2YuLmU5MmZiMmY3OTBiZTRjNWMxNjc2YzY5OGM1YmUxYmE2NWUxYTY5MWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTIwNzMsMTEgKzIw
NzMsMTEgQEAgaW5saW5lIGJvb2wgU2VhcmNoQnVmZmVyOjppc0JhZE1hdGNoKGNvbnN0IFVDaGFy
KiBtYXRjaCwgc2l6ZV90IG1hdGNoTGVuZ3RoKSBjb24KICAgICAvLyBjcmVhdGluZyBhIG5ldyBv
bmUgZWFjaCB0aW1lLgogICAgIG5vcm1hbGl6ZUNoYXJhY3RlcnMobWF0Y2gsIG1hdGNoTGVuZ3Ro
LCBtX25vcm1hbGl6ZWRNYXRjaCk7CiAKLSAgICBjb25zdCBVQ2hhciogYSA9IG1fbm9ybWFsaXpl
ZFRhcmdldC5iZWdpbigpOwotICAgIGNvbnN0IFVDaGFyKiBhRW5kID0gbV9ub3JtYWxpemVkVGFy
Z2V0LmVuZCgpOworICAgIGNvbnN0IFVDaGFyKiBhID0gZ2V0UHRyKG1fbm9ybWFsaXplZFRhcmdl
dC5iZWdpbigpKTsKKyAgICBjb25zdCBVQ2hhciogYUVuZCA9IGdldFB0cihtX25vcm1hbGl6ZWRU
YXJnZXQuZW5kKCkpOwogCi0gICAgY29uc3QgVUNoYXIqIGIgPSBtX25vcm1hbGl6ZWRNYXRjaC5i
ZWdpbigpOwotICAgIGNvbnN0IFVDaGFyKiBiRW5kID0gbV9ub3JtYWxpemVkTWF0Y2guZW5kKCk7
CisgICAgY29uc3QgVUNoYXIqIGIgPSBnZXRQdHIobV9ub3JtYWxpemVkTWF0Y2guYmVnaW4oKSk7
CisgICAgY29uc3QgVUNoYXIqIGJFbmQgPSBnZXRQdHIobV9ub3JtYWxpemVkTWF0Y2guZW5kKCkp
OwogCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgLy8gU2tpcCBydW5zIG9mIG5vbi1rYW5h
LWxldHRlciBjaGFyYWN0ZXJzLiBUaGlzIGlzIG5lY2Vzc2FyeSBzbyB3ZSBjYW4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCmlu
ZGV4IDAwOThjNzYzMTNmNGNjNjYwZTk2OGE5MGQzZTkzOGE4YjFiYmM5ZGUuLjIwNjJmZDNlMTIx
M2Q4NjcxNzk2ZWI3MzllOGI1NmM3ZTJiN2E1OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQpAQCAtNTU1LDcgKzU1NSw3
IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGln
aHQoKQogCiAgICAgICAgIGlmICghY2dSZWN0cy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIENH
UmVjdCB2aXNpYmxlUmVjdCA9IG1haW5GcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwot
ICAgICAgICAgICAgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCA9IGFkb3B0
Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlQW5kRGly
ZWN0aW9uKG51bGxwdHIsIGNnUmVjdHMuYmVnaW4oKSwgY2dSZWN0cy5zaXplKCksIHZpc2libGVS
ZWN0LCBEREhpZ2hsaWdodE5vT3V0bGluZVdpdGhBcnJvdywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rp
b25OYXR1cmFsLCBOTywgWUVTKSk7CisgICAgICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRS
ZWY+IGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlz
aWJsZVJlY3RXaXRoU3R5bGVBbmREaXJlY3Rpb24obnVsbHB0ciwgY2dSZWN0cy5kYXRhKCksIGNn
UmVjdHMuc2l6ZSgpLCB2aXNpYmxlUmVjdCwgRERIaWdobGlnaHROb091dGxpbmVXaXRoQXJyb3cs
IFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0
ZUZvclNlbGVjdGlvbigqdGhpcywgZGRIaWdobGlnaHQsIHNlbGVjdGlvblJhbmdlKSk7CiAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21l
bnRlZEZvbnREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21l
bnRlZEZvbnREYXRhLmNwcAppbmRleCBkMWI5MmI3YjYwOWI0NTE5OWM4NGE0NmFlZTlmZGI2YzRm
N2NmZWM1Li41MDNiMGU4ZDliYmYyOTA2Y2U3M2JlYmViYTAxYmQ2MDNlYzc5OTkzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERh
dGEuY3BwCkBAIC0zOSw4ICszOSw4IEBAIFNlZ21lbnRlZEZvbnREYXRhOjp+U2VnbWVudGVkRm9u
dERhdGEoKQogCiBjb25zdCBTaW1wbGVGb250RGF0YSogU2VnbWVudGVkRm9udERhdGE6OmZvbnRE
YXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKIHsKLSAgICBWZWN0b3I8Rm9udERhdGFS
YW5nZT46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwotICAgIGZvciAoVmVj
dG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgIGF1dG8gZW5kID0gbV9yYW5nZXMuZW5kKCk7CisgICAg
Zm9yIChhdXRvIGl0ID0gbV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgIGlmIChpdC0+ZnJvbSgpIDw9IGMgJiYgaXQtPnRvKCkgPj0gYykKICAgICAgICAgICAgIHJl
dHVybiBpdC0+Zm9udERhdGEoKS5nZXQoKTsKICAgICB9CkBAIC00OSw4ICs0OSw4IEBAIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBTZWdtZW50ZWRGb250RGF0YTo6Zm9udERhdGFGb3JDaGFyYWN0ZXIo
VUNoYXIzMiBjKSBjb25zdAogCiBib29sIFNlZ21lbnRlZEZvbnREYXRhOjpjb250YWluc0NoYXJh
Y3RlcihVQ2hhcjMyIGMpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxGb250RGF0
YVJhbmdlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICBhdXRvIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOworICAgIGZvciAoYXV0byBp
dCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoYyA+
PSBpdC0+ZnJvbSgpICYmIGMgPD0gaXQtPnRvKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CkBAIC03Niw4ICs3Niw4IEBAIGJvb2wgU2VnbWVudGVkRm9udERhdGE6OmlzQ3VzdG9t
Rm9udCgpIGNvbnN0CiAKIGJvb2wgU2VnbWVudGVkRm9udERhdGE6OmlzTG9hZGluZygpIGNvbnN0
CiB7Ci0gICAgVmVjdG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jh
bmdlcy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBhdXRvIGVu
ZCA9IG1fcmFuZ2VzLmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoaXQtPmZvbnREYXRhKCktPmlzTG9hZGlu
ZygpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCmluZGV4IDA1MTg3MWFj
NmM2MGZiNjQzOTI4MzBhYWM2YWQzODUyYTk0ZDQ0NzYuLmRkMDk2M2E3NTAxYWQyZWUwNjMxYTVl
MTZkNzk1MTExMTIyMzlkNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAKQEAgLTIwMCw3ICsyMDAsNyBAQCBib29sIGNvbnZl
cnRXT0ZGVG9TZm50KFNoYXJlZEJ1ZmZlciogd29mZiwgVmVjdG9yPGNoYXI+JiBzZm50KQogICAg
ICAgICAgICAgdUxvbmdmIGRlc3RMZW4gPSB0YWJsZU9yaWdMZW5ndGg7CiAgICAgICAgICAgICBp
ZiAoIXNmbnQudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNmbnQuc2l6ZSgpICsgdGFibGVPcmlnTGVuZ3Ro
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBCeXRlZiogZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Qnl0ZWYqPihzZm50LmVuZCgpKTsKKyAgICAgICAgICAgIEJ5
dGVmKiBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxCeXRlZio+KGdldFB0cihzZm50LmVuZCgpKSk7
CiAgICAgICAgICAgICBzZm50Lmdyb3coc2ZudC5zaXplKCkgKyB0YWJsZU9yaWdMZW5ndGgpOwog
ICAgICAgICAgICAgaWYgKHVuY29tcHJlc3MoZGVzdCwgJmRlc3RMZW4sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgQnl0ZWYqPih3b2ZmLT5kYXRhKCkgKyB0YWJsZU9mZnNldCksIHRhYmxlQ29tcExl
bmd0aCkgIT0gWl9PSykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8u
Y3BwCmluZGV4IDUwMjJjNTBjN2VlODI1ZTI0MGYwZTcxMjI0N2M3ZWYxNjQ4ZjM4YmQuLjc1MTZi
MGFjZDE1YWFmZDEyYTM1NmFmZjRkNTBhNmM0YWEwMjRmMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCkBA
IC01OSw3ICs1OSw3IEBAIGNhaXJvX3BhdHRlcm5fdCogR3JhZGllbnQ6OnBsYXRmb3JtR3JhZGll
bnQoZmxvYXQgZ2xvYmFsQWxwaGEpCiAgICAgZWxzZQogICAgICAgICBtX2dyYWRpZW50ID0gY2Fp
cm9fcGF0dGVybl9jcmVhdGVfbGluZWFyKG1fcDAueCgpLCBtX3AwLnkoKSwgbV9wMS54KCksIG1f
cDEueSgpKTsKIAotICAgIFZlY3RvcjxDb2xvclN0b3A+OjppdGVyYXRvciBzdG9wSXRlcmF0b3Ig
PSBtX3N0b3BzLmJlZ2luKCk7CisgICAgYXV0byBzdG9wSXRlcmF0b3IgPSBtX3N0b3BzLmJlZ2lu
KCk7CiAgICAgd2hpbGUgKHN0b3BJdGVyYXRvciAhPSBtX3N0b3BzLmVuZCgpKSB7CiAgICAgICAg
IGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShtX2dyYWRpZW50LCBzdG9wSXRlcmF0
b3ItPnN0b3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9w
SXRlcmF0b3ItPnJlZCwgc3RvcEl0ZXJhdG9yLT5ncmVlbiwgc3RvcEl0ZXJhdG9yLT5ibHVlLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJ
RkltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAppbmRleCBkZTQ1NTA5NGEwYmNmN2M5ZGQzYjM5ZTRm
ODhlMDJjNTA5ZGVlYzg1Li4zYTkzMWRkYmFkNGZiYTVlZTlhZGU4YjZmYWI3MDRlYjVhZTAwM2Ey
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYv
R0lGSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIHZvaWQg
R0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3Jl
RnJhbWUpCiAgICAgLy8gYWx3YXlzIHVzZSBJbWFnZVNvdXJjZTo6Y2xlYXIodHJ1ZSwgLi4uKSB0
byBjb21wbGV0ZWx5IGZyZWUgdGhlIG1lbW9yeSBpbgogICAgIC8vIHRoaXMgY2FzZS4KICAgICBj
bGVhckJlZm9yZUZyYW1lID0gc3RkOjptaW4oY2xlYXJCZWZvcmVGcmFtZSwgbV9mcmFtZUJ1ZmZl
ckNhY2hlLnNpemUoKSAtIDEpOwotICAgIGNvbnN0IFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0
b3IgZW5kKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpICsgY2xlYXJCZWZvcmVGcmFtZSk7Cisg
ICAgY29uc3QgYXV0byBlbmQgPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSArIGNsZWFyQmVm
b3JlRnJhbWU7CiAKICAgICAvLyBXZSBuZWVkIHRvIHByZXNlcnZlIGZyYW1lcyBzdWNoIHRoYXQ6
CiAgICAgLy8gICAqIFdlIGRvbid0IGNsZWFyIHxlbmR8CkBAIC0xNjUsMTQgKzE2NSwxNCBAQCB2
b2lkIEdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJl
Zm9yZUZyYW1lKQogICAgIC8vICAgKiBJZiB0aGUgZnJhbWUgaXMgcGFydGlhbCwgd2UncmUgZGVj
b2RpbmcgaXQsIHNvIGRvbid0IGNsZWFyIGl0OyBpZiBpdAogICAgIC8vICAgICBoYXMgYSBkaXNw
b3NhbCBtZXRob2Qgb3RoZXIgdGhhbiBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMsIHN0b3AKICAg
ICAvLyAgICAgc2Nhbm5pbmcsIGFzIHdlJ2xsIG9ubHkgbmVlZCB0aGlzIGZyYW1lIHdoZW4gZGVj
b2RpbmcgdGhlIG5leHQgb25lLgotICAgIFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0b3IgaShl
bmQpOworICAgIGF1dG8gaSA9IGVuZDsKICAgICBmb3IgKDsgKGkgIT0gbV9mcmFtZUJ1ZmZlckNh
Y2hlLmJlZ2luKCkpICYmICgoaS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkg
fHwgKGktPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0ZVBy
ZXZpb3VzKSk7IC0taSkgewogICAgICAgICBpZiAoKGktPnN0YXR1cygpID09IEltYWdlRnJhbWU6
OkZyYW1lQ29tcGxldGUpICYmIChpICE9IGVuZCkpCiAgICAgICAgICAgICBpLT5jbGVhclBpeGVs
RGF0YSgpOwogICAgIH0KIAogICAgIC8vIE5vdyB8aXwgaG9sZHMgdGhlIGxhc3QgZnJhbWUgd2Ug
bmVlZCB0byBwcmVzZXJ2ZTsgY2xlYXIgcHJpb3IgZnJhbWVzLgotICAgIGZvciAoVmVjdG9yPElt
YWdlRnJhbWU+OjppdGVyYXRvciBqKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKTsgaiAhPSBp
OyArK2opIHsKKyAgICBmb3IgKGF1dG8gaiA9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpOyBq
ICE9IGk7ICsraikgewogICAgICAgICBBU1NFUlQoai0+c3RhdHVzKCkgIT0gSW1hZ2VGcmFtZTo6
RnJhbWVQYXJ0aWFsKTsKICAgICAgICAgaWYgKGotPnN0YXR1cygpICE9IEltYWdlRnJhbWU6OkZy
YW1lRW1wdHkpCiAgICAgICAgICAgICBqLT5jbGVhclBpeGVsRGF0YSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCBlNDhlYjliNjc1ZGM5ZDIxNzU5OTI0Yzg4MDVh
ZmEwYjg5YjQ5ODM3Li5lOWZiNWZhM2NkYTE0NzFlYzZlYmFiYjc0YTk2MDFlZmY0YzM1NDNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtMTU3Nyw4ICsxNTc3LDgg
QEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50RmlsbExheWVycyhjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgQ29sb3ImIGMsIGNvbnMKICAgICAgICAgY29udGV4dC0+YmVnaW5UcmFuc3Bh
cmVuY3lMYXllcigxKTsKICAgICB9CiAKLSAgICBWZWN0b3I8Y29uc3QgRmlsbExheWVyKj46OmNv
bnN0X3JldmVyc2VfaXRlcmF0b3IgdG9wTGF5ZXIgPSBsYXllcnMucmVuZCgpOwotICAgIGZvciAo
VmVjdG9yPGNvbnN0IEZpbGxMYXllcio+Ojpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGl0ID0gbGF5
ZXJzLnJiZWdpbigpOyBpdCAhPSB0b3BMYXllcjsgKytpdCkKKyAgICBhdXRvIHRvcExheWVyID0g
bGF5ZXJzLnJlbmQoKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBsYXllcnMucmJlZ2luKCk7IGl0ICE9
IHRvcExheWVyOyArK2l0KQogICAgICAgICBwYWludEZpbGxMYXllcihwYWludEluZm8sIGMsICpp
dCwgcmVjdCwgYmxlZWRBdm9pZGFuY2UsIG9wLCBiYWNrZ3JvdW5kT2JqZWN0LCBiYXNlQmdDb2xv
clVzYWdlKTsKIAogICAgIGlmIChzaG91bGREcmF3QmFja2dyb3VuZEluU2VwYXJhdGVCdWZmZXIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVk
UG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRSZXNvbHZl
ZFBvc2l0aW9uLmNwcAppbmRleCBjY2RjMmEzZGM2ZGEyZDY1MzRhN2ViNjM1MDllNmI0M2JhYTFm
ZDcxLi5kYzA5NTA5OWMwNGUzYTgyYzQzYzNlMDI2Y2RkZWFkZThkNWJlMzA3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlv
bi5jcHAKQEAgLTI5NSw3ICsyOTUsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGZpcnN0TmFt
ZWRHcmlkTGluZUJlZm9yZVBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uLCBjb25zdAogICAgIC8v
IGFscmVhZHkgY29udmVydGVkIHRvIGFuIGluZGV4IGluIG91ciBncmlkIHJlcHJlc2VudGF0aW9u
IChpZSBvbmUgd2FzIHJlbW92ZWQgZnJvbSB0aGUgZ3JpZCBsaW5lIHRvIGFjY291bnQgZm9yCiAg
ICAgLy8gdGhlIHNpZGUpLgogICAgIHVuc2lnbmVkIGZpcnN0TGluZUJlZm9yZVBvc2l0aW9uSW5k
ZXggPSAwOwotICAgIGNvbnN0IHVuc2lnbmVkKiBmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiA9IHN0
ZDo6bG93ZXJfYm91bmQoZ3JpZExpbmVzLmJlZ2luKCksIGdyaWRMaW5lcy5lbmQoKSwgcG9zaXRp
b24pOworICAgIGF1dG8gZmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gPSBzdGQ6Omxvd2VyX2JvdW5k
KGdyaWRMaW5lcy5iZWdpbigpLCBncmlkTGluZXMuZW5kKCksIHBvc2l0aW9uKTsKICAgICBpZiAo
Zmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gIT0gZ3JpZExpbmVzLmVuZCgpKSB7CiAgICAgICAgIGlm
ICgqZmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gPiBwb3NpdGlvbiAmJiBmaXJzdExpbmVCZWZvcmVQ
b3NpdGlvbiAhPSBncmlkTGluZXMuYmVnaW4oKSkKICAgICAgICAgICAgIC0tZmlyc3RMaW5lQmVm
b3JlUG9zaXRpb247CkBAIC0zMTYsOSArMzE2LDggQEAgc3RkOjp1bmlxdWVfcHRyPEdyaWRTcGFu
PiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZVJvd1N0YXJ0Q29sdW1uU3RhcnROYW1lZEcK
IAogc3RkOjp1bmlxdWVfcHRyPEdyaWRTcGFuPiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2
ZVJvd0VuZENvbHVtbkVuZE5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0
aW9uKGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24s
IGNvbnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGdy
aWRMaW5lcykKIHsKLSAgICBBU1NFUlQoZ3JpZExpbmVzLnNpemUoKSk7CiAgICAgdW5zaWduZWQg
Zmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uSW5kZXggPSBncmlkTGluZXMuc2l6ZSgpIC0g
MTsKLSAgICBjb25zdCB1bnNpZ25lZCogZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uID0g
c3RkOjp1cHBlcl9ib3VuZChncmlkTGluZXMuYmVnaW4oKSwgZ3JpZExpbmVzLmVuZCgpLCByZXNv
bHZlZE9wcG9zaXRlUG9zaXRpb24pOworICAgIGF1dG8gZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBv
c2l0aW9uID0gc3RkOjp1cHBlcl9ib3VuZChncmlkTGluZXMuYmVnaW4oKSwgZ3JpZExpbmVzLmVu
ZCgpLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pOwogICAgIGlmIChmaXJzdExpbmVBZnRlck9w
cG9zaXRlUG9zaXRpb24gIT0gZ3JpZExpbmVzLmVuZCgpKQogICAgICAgICBmaXJzdExpbmVBZnRl
ck9wcG9zaXRlUG9zaXRpb25JbmRleCA9IGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbiAt
IGdyaWRMaW5lcy5iZWdpbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Rm9udEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcApp
bmRleCBjMzNmZmI3N2I2ZDhmOTk1N2IxMjZmMWJmMzkxN2E4NTdmZGZiNTBlLi5hMGJmNTAxOTFi
NmFiOTU4MTYxOGQ5NTNjMDg5MGQyMTJlYjdiMzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250
RWxlbWVudC5jcHAKQEAgLTI1MiwzMSArMjUyLDMxIEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQga2Vy
bmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMoY29uc3QgU1ZHS2VybmluZ01hcCYga2Vybmlu
CiB7CiAgICAgaWYgKCFnMS5pc0VtcHR5KCkgJiYga2VybmluZ01hcC5nbHlwaE1hcC5jb250YWlu
cyhnMSkpIHsKICAgICAgICAgU1ZHS2VybmluZ1ZlY3Rvcioga2VybmluZ1ZlY3RvciA9IGtlcm5p
bmdNYXAuZ2x5cGhNYXAuZ2V0KGcxKTsKLSAgICAgICAgU1ZHS2VybmluZ1ZlY3Rvcjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBrZXJuaW5nVmVjdG9yLT5lbmQoKSAtIDE7Ci0gICAgICAgIGNvbnN0IFNW
R0tlcm5pbmdWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0ga2VybmluZ1ZlY3Rvci0+YmVn
aW4oKSAtIDE7Ci0gICAgICAgIGZvciAoOyBpdCAhPSBiZWdpbjsgLS1pdCkgewotICAgICAgICAg
ICAgaWYgKG1hdGNoZXModTIsIGcyLCAqaXQpKQotICAgICAgICAgICAgICAgIHJldHVybiBpdC0+
a2VybmluZzsKKyAgICAgICAgc2l6ZV90IGl0ID0ga2VybmluZ1ZlY3Rvci0+c2l6ZSgpOworICAg
ICAgICB3aGlsZSAoaXQtLSA+IDApIHsKKyAgICAgICAgICAgIGF1dG8mIHZhbHVlID0ga2Vybmlu
Z1ZlY3Rvci0+YXQoaXQpOworICAgICAgICAgICAgaWYgKG1hdGNoZXModTIsIGcyLCB2YWx1ZSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmtlcm5pbmc7CiAgICAgICAgIH0KICAgICB9
CiAKICAgICBpZiAoIXUxLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoa2VybmluZ01hcC51bmlj
b2RlTWFwLmNvbnRhaW5zKHUxKSkgewogICAgICAgICAgICAgU1ZHS2VybmluZ1ZlY3Rvcioga2Vy
bmluZ1ZlY3RvciA9IGtlcm5pbmdNYXAudW5pY29kZU1hcC5nZXQodTEpOwotICAgICAgICAgICAg
U1ZHS2VybmluZ1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBrZXJuaW5nVmVjdG9yLT5lbmQo
KSAtIDE7Ci0gICAgICAgICAgICBjb25zdCBTVkdLZXJuaW5nVmVjdG9yOjpjb25zdF9pdGVyYXRv
ciBiZWdpbiA9IGtlcm5pbmdWZWN0b3ItPmJlZ2luKCkgLSAxOwotICAgICAgICAgICAgZm9yICg7
IGl0ICE9IGJlZ2luOyAtLWl0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoZXModTIsIGcy
LCAqaXQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQtPmtlcm5pbmc7CisgICAgICAg
ICAgICBzaXplX3QgaXQgPSBrZXJuaW5nVmVjdG9yLT5zaXplKCk7CisgICAgICAgICAgICB3aGls
ZSAoaXQtLSA+IDApIHsKKyAgICAgICAgICAgICAgICBhdXRvJiB2YWx1ZSA9IGtlcm5pbmdWZWN0
b3ItPmF0KGl0KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyh1MiwgZzIsIHZhbHVlKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmtlcm5pbmc7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWtlcm5pbmdNYXAua2VybmluZ1VuaWNvZGVSYW5n
ZU1hcC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxTVkdLZXJuaW5nUGFpcj46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0ga2VybmluZ01hcC5rZXJuaW5nVW5pY29kZVJhbmdlTWFwLmVuZCgp
IC0gMTsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTVkdLZXJuaW5nUGFpcj46OmNvbnN0X2l0
ZXJhdG9yIGJlZ2luID0ga2VybmluZ01hcC5rZXJuaW5nVW5pY29kZVJhbmdlTWFwLmJlZ2luKCkg
LSAxOwotICAgICAgICAgICAgZm9yICg7IGl0ICE9IGJlZ2luOyAtLWl0KSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1hdGNoZXModTEsIHUyLCBnMiwgKml0KSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGl0LT5rZXJuaW5nOworICAgICAgICAgICAgc2l6ZV90IGl0ID0ga2VybmluZ01hcC5r
ZXJuaW5nVW5pY29kZVJhbmdlTWFwLnNpemUoKTsKKyAgICAgICAgICAgIHdoaWxlIChpdC0tID4g
MCkgeworICAgICAgICAgICAgICAgIGF1dG8mIHZhbHVlID0ga2VybmluZ01hcC5rZXJuaW5nVW5p
Y29kZVJhbmdlTWFwW2l0XTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyh1MSwgdTIsIGcy
LCB2YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5rZXJuaW5nOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVT
dHJlYW0uaAppbmRleCA5ZDlkMmEyYjIzYzYwMGZlYmI1MzQwY2JjZGQxYjYxZGRjM2I5ZjE1Li5i
OTk5NTU0OTQzOWFjOTY0YWIzZTY3YTMwZjBkODlkOGMzNThhY2EyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaApAQCAtNjAsOCArNjAsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBhcHBlbmQodW5zaWduZWQgY2hhciBieXRlKSB7IG1fZGF0YS5hcHBlbmQoYnl0ZSk7IH0KICAg
ICB2b2lkIGFwcGVuZChTVkdQYXRoQnl0ZVN0cmVhbSogb3RoZXIpCiAgICAgewotICAgICAgICBm
b3IgKERhdGFJdGVyYXRvciBpdCA9IG90aGVyLT5iZWdpbigpOyBpdCAhPSBvdGhlci0+ZW5kKCk7
ICsraXQpCi0gICAgICAgICAgICBhcHBlbmQoKml0KTsKKyAgICAgICAgZm9yIChhdXRvJiBieXRl
IDogKm90aGVyKQorICAgICAgICAgICAgYXBwZW5kKGJ5dGUpOwogICAgIH0KICAgICB2b2lkIGNs
ZWFyKCkgeyBtX2RhdGEuY2xlYXIoKTsgfQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuICFtX2RhdGEuc2l6ZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBh
dGhOb2RlU2V0LmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmgKaW5kZXggM2Q4
OWI4ZDUwODdhODZjZmVhZmZjMDE0MGI2OTQ3NjJjMDk1ZGRkZi4uZGFmMmI5M2Q1MWI1YWY2Yjcz
NGY1ZjlhNzY1NDEzNjllMDQxNGEyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQ
YXRoTm9kZVNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQuaApAQCAt
NjQsOCArNjQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICB2b2lkIG1hcmtT
dWJ0cmVlc0Rpc2pvaW50KGJvb2wgZGlzam9pbnQpIHsgbV9zdWJ0cmVlc0FyZURpc2pvaW50ID0g
ZGlzam9pbnQ7IH0KICAgICAgICAgICAgIGJvb2wgc3VidHJlZXNBcmVEaXNqb2ludCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3VidHJlZXNBcmVEaXNqb2ludCB8fCBtX25vZGVzLnNpemUoKSA8IDI7IH0K
IAotICAgICAgICAgICAgY29uc3QgUmVmUHRyPE5vZGU+KiBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fbm9kZXMuYmVnaW4oKTsgfQotICAgICAgICAgICAgY29uc3QgUmVmUHRyPE5vZGU+KiBlbmQo
KSBjb25zdCB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CisgICAgICAgICAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPE5vZGU+Pjo6aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX25vZGVz
LmJlZ2luKCk7IH0KKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4+OjppdGVy
YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CiAKICAgICAgICAgcHJp
dmF0ZToKICAgICAgICAgICAgIHZvaWQgdHJhdmVyc2FsU29ydCgpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242077</attachid>
            <date>2014-11-21 15:16:21 -0800</date>
            <delta_ts>2014-11-21 15:38:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138821-20141121151637.patch</filename>
            <type>text/plain</type>
            <size>70980</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2NDU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
YWZmMmRhMWRkMGNmYTIwOTZhOGY1NTFhOWVjMDljZDI5MTU5YzZkLi4xMGVjNjM1ZWMyMTE4OWNi
OTQ5MGVmY2VkZDQ2OTZkNWNkMTdkY2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNiBAQAorMjAxNC0xMS0xNyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3Rp
bGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGVyZSBhcmUgYSBmZXcgdXNlcyBvZiBiZWdpbigpL2VuZCgp
IHRoYXQgZXhwbGljaXRseSByZXF1aXJlIHBvaW50ZXJzLAorICAgICAgICBzbyB3ZSB1c2UgZ2V0
UHRyKCkgdG8gZXh0cmFjdCB0aGUgdW5kZXJseWluZyBwb2ludGVyIGdlbmVyaWNhbGx5LgorCisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRDb21wbGV4UG9wU2NvcGVzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVt
cCk6CisgICAgICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6RlRM
OjptZE5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkQ2FsbCk6CisgICAgICAgICogbGxp
bnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBlcmZvcm1Bc3Nl
cnRpb25zKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlNjb3Bl
OjpTY29wZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwOgorICAgICAgICAo
SlNDOjpQcm9maWxlTm9kZTo6ZGVidWdQcmludFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3Rvcik6
CisgICAgICAgICogdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2Zp
bGVUcmVlTm9kZTo6ZHVtcEludGVybmFsKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgor
ICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjptYXRjaENoYXJhY3RlckNsYXNzKToK
KwogMjAxNC0xMS0yMSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFtKU0NdIERpc2FibGUgdmVyaWZ5SGVhcApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA1NTFhNmI2ZDk2OTM4ZjhiYzNi
NjAzYTEzZTEwMGQ4NjRjMWRiODNlLi4yNzE4OTMzYjI1M2RlZDIyZDMyYjI0ZDc4ZGU0MDA1YzYy
ZDE3ZmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RG
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDE0LTExLTE3ICBPbGl2ZXIgSHVudCAgPG9s
aXZlckBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBzdXJlIHJhbmdlIGJhc2VkIGl0ZXJhdGlv
biBvZiBWZWN0b3I8PiBzdGlsbCByZWNlaXZlcyBib3VuZHMgY2hlY2tpbmcKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODgyMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5ldyBJbmRleGVkSXRl
cmF0b3Igc3RydWN0IHRvIFdURiB0aGF0IHdyYXBzIGEKKyAgICAgICAgVmVjdG9yIHR5cGUgYW5k
IGluZGV4IHRvIHByb3ZpZGUgcG9pbnRlciBsaWtlIHNlbWFudGljcworICAgICAgICB3aGlsZSBz
dGlsbCBwZXJmb3JtaW5nIHJ1bnRpbWUgYm91bmRzIGNoZWNraW5nLCBldmVuIGluCisgICAgICAg
IHJlbGVhc2UgYnVpbGRzLiBXZSBzdG9yZSBhIHNpbXBsZSBpbmRleCBpbnRvIHRoZSB2ZWN0b3IK
KyAgICAgICAgd2hpY2ggbWVhbnMgdGhhdCB0aGlzIGl0ZXJhdG9yIGFsbG93cyB2ZWN0b3IgcmVz
aXppbmcKKyAgICAgICAgZHVyaW5nIGl0ZXJhdGlvbi4gSWYgdGhlIHZlY3RvciBpcyByZXNpemVk
IHN1Y2ggdGhhdCB0aGUKKyAgICAgICAgaXRlcmF0b3IgaXMgb3V0IG9mIGJvdW5kcywgdGhlbiBh
bnkgYXR0ZW1wdCB0byBkZXJlZmVyZW5jZQorICAgICAgICB0aGUgaXRlcmF0b3Igd2lsbCBjcmFz
aCBzYWZlbHkuIEFueSBvdGhlciBlcnJvcnMsIGluY2x1ZGluZworICAgICAgICBvdmVyZmxvd3Ms
IGFuZCBvdmVyIGV4dGVuZGluZyB0aGUgaXRlcmF0b3Igd2lsbCBsaWtld2lzZQorICAgICAgICBj
cmFzaC4KKworICAgICAgICBGb3IgdGhlIHB1cnBvc2Ugb2YgcmV0YWluaW5nIHNlbWFudGljYWxs
eSBlcXVpdmFsZW50CisgICAgICAgIGJlaGF2aW91ciwgdGhlIGl0ZXJhdG9yIGNhbiBiZSBtb3Zl
ZCB0byBtX2luZGV4ID09IHNpemUoKQorICAgICAgICBhcyB0aGF0IGlzIHRoZSBzdGFuZGFyZCAi
ZW5kIiB0ZXJtaW5hdG9yIGZvciB0aGVzZSB0eXBlcy4KKyAgICAgICAgQXR0ZW1wdGluZyB0byBk
ZXJlZmVyZW5jZSBhdCB0aGF0IHBvaW50IHdpbGwgc3RpbGwgY3Jhc2gKKyAgICAgICAgcmF0aGVy
IHRoYW4gcGVyZm9ybSBhbiB1bnNhZmUgbWVtb3J5IG9wZXJhdGlvbi4KKworICAgICAgICBJbiBv
cmRlciB0byBtYWludGFpbiB0aGUgdmFsaWRpdHkgb2YgYWxsIHRoZSBib3VuZHMgY2hlY2tpbmcs
CisgICAgICAgIHdlIHBlcmZvcm0gZnVsbCBpbnRlZ2VyIHJhbmdlIGNoZWNraW5nIHByaW9yIHRv
IGFueSBtdXRhdGlvbgorICAgICAgICBvZiB0aGUgaXRlcmF0b3IgbG9jYXRpb24uIElmIHdlIGRl
dGVjdCBhbiBhcml0aG1ldGljIG92ZXJmbG93CisgICAgICAgIHdlIHdpbGwgY3Jhc2ggcmF0aGVy
IHRoYW4gYXR0ZW1wdGluZyB0byBjYXJyeSBvbi4KKworICAgICAgICBCeSBuZWNlc3NpdHkgdGhl
cmUgYXJlIG1hbnkgb3ZlcnJpZGVzIGZvciBvcGVyYXRvciArIGFuZCAtIGFzCisgICAgICAgIHdl
IG90aGVyd2lzZSBoaXQgbWFueSBkaWZmZXJlbnQgdHlwZSBwcm9tb3Rpb24gYW1iaWd1aXRpZXMg
d2hlbgorICAgICAgICBwZXJmb3JtaW5nIGFyaXRobWV0aWMgd2l0aCBpdGVyYXRvcnMuIFRoZXNl
IGFtYmlndWl0aWVzIGFyZSBhbHNvCisgICAgICAgIGRpZmZlcmVudCBmb3IgMzItIHZzLiA2NC1i
aXQsIHNvIGR1cGxpY2F0aW5nIHRoZSBmdW5jdGlvbnMKKyAgICAgICAgYW5kIHRoZW4gZm9yd2Fy
ZGluZyB0byB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBwZXJmb3JtZWQKKyAgICAgICAg
dGhlIGJvdW5kcyBjaGVja2luZyBhbmQgbXV0YXRpb24gc2VlbWVkIGxpa2UgdGhlIHJpZ2h0IGNh
bGwuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiB3dGYvSW5kZXhlZEl0ZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpJbmRleGVkSXRl
cmF0b3I6OkluZGV4ZWRJdGVyYXRvcik6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6
b3BlcmF0b3ItPik6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IqKToK
KyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpnZXQpOgorICAgICAgICAoV1RGOjpJbmRl
eGVkSXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6
Om9wZXJhdG9yLS0pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yIFVu
c3BlY2lmaWVkQm9vbFR5cGUpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJh
dG9yKz0pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yLT0pOgorICAg
ICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yKyk6CisgICAgICAgIChXVEY6Oklu
ZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9y
OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPT0p
OgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAo
V1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPCk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJ
dGVyYXRvcjo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3Bl
cmF0b3I+KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcj49KToKKyAg
ICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvciBjb25zdF9pdGVyYXRvcik6Cisg
ICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6aXNTYWZlVG9Db21wYXJlKToKKyAgICAgICAg
KFdURjo6SW5kZXhlZEl0ZXJhdG9yOjp1bnNhZmVHZXQpOgorICAgICAgICAoV1RGOjpnZXRQdHIp
OgorICAgICAgICAoV1RGOjpvcGVyYXRvci0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKFdURjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPD0pOgor
ICAgICAgICAoV1RGOjpvcGVyYXRvcj49KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8KToKKyAg
ICAgICAgKFdURjo6b3BlcmF0b3I+KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yU2Vs
ZWN0b3I6Om1ha2VJdGVyYXRvcik6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvclNlbGVj
dG9yOjptYWtlQ29uc3RJdGVyYXRvcik6CisgICAgICAgICogd3RmL1JlZkNvdW50ZWRBcnJheS5o
OgorICAgICAgICAoV1RGOjpSZWZDb3VudGVkQXJyYXk6OlJlZkNvdW50ZWRBcnJheSk6CisgICAg
ICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAoV1RGOjpWZWN0b3I6OlZlY3Rvcik6CisgICAg
ICAgIChXVEY6OlZlY3Rvcjo6YmVnaW4pOgorICAgICAgICAoV1RGOjpWZWN0b3I6OmVuZCk6Cisg
ICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OlZlY3Rvcik6CisgICAgICAgIChXVEY6Oj0p
OgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpmaWxsKToKKyAgICAgICAgKFdURjo6
T3ZlcmZsb3dIYW5kbGVyPjo6ZXhwYW5kQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpPdmVyZmxv
d0hhbmRsZXI+Ojp0cnlFeHBhbmRDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFu
ZGxlcj46OnJlc2l6ZSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnNocmluayk6
CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46Omdyb3cpOgorICAgICAgICAoV1RGOjpP
dmVyZmxvd0hhbmRsZXI+OjpyZXNlcnZlQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpPdmVyZmxv
d0hhbmRsZXI+Ojp0cnlSZXNlcnZlQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hh
bmRsZXI+OjpzaHJpbmtDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46
OmFwcGVuZCk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnRyeUFwcGVuZCk6Cisg
ICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OmFwcGVuZFNsb3dDYXNlKToKKyAgICAgICAg
KFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6dW5jaGVja2VkQXBwZW5kKToKKyAgICAgICAgKFdURjo6
T3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kVmVjdG9yKToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dI
YW5kbGVyPjo6aW5zZXJ0KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6aW5zZXJ0
VmVjdG9yKToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlKToKKwogMjAx
NC0xMS0xOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEhhdmUg
VmVjdG9yOjpjYXBhY2l0eSgpIHJldHVybiBhbiB1bnNpZ25lZCBpbnN0ZWFkIG9mIGEgc2l6ZV90
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggZTE5MmQ0OGU3ZmEzZWFjNGZlMTQ1YTAwOThkMzg2Yjc3YWY5OThhOS4u
ZGNhMGFjNWYyMzI0YWJjMmViZjEwYzVjNjcyMDZhNzlhNDMyYTQ0NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDM4IEBACisyMDE0LTExLTE3ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+
CisKKyAgICAgICAgTWFrZSBzdXJlIHJhbmdlIGJhc2VkIGl0ZXJhdGlvbiBvZiBWZWN0b3I8PiBz
dGlsbCByZWNlaXZlcyBib3VuZHMgY2hlY2tpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODgyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoZXJlIGFyZSBhIGZldyB1c2VzIG9mIGJlZ2luKCkvZW5k
KCkgdGhhdCBleHBsaWNpdGx5IHJlcXVpcmUgcG9pbnRlcnMsCisgICAgICAgIHNvIHdlIHVzZSBn
ZXRQdHIoKSB0byBleHRyYWN0IHRoZSB1bmRlcmx5aW5nIHBvaW50ZXIgZ2VuZXJpY2FsbHkuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplU3RyaW5nKToKKyAgICAg
ICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hC
dWZmZXI6OmlzQmFkTWF0Y2gpOgorICAgICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
OjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
U2VnbWVudGVkRm9udERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkRm9udERh
dGE6OmZvbnREYXRhRm9yQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZEZv
bnREYXRhOjpjb250YWluc0NoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRG
b250RGF0YTo6aXNMb2FkaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmls
ZUZvcm1hdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0V09GRlRvU2ZudCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OnBhaW50RmlsbExheWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0dyaWRSZXNv
bHZlZFBvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0TmFtZWRHcmlkTGluZUJl
Zm9yZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjpy
ZXNvbHZlUm93RW5kQ29sdW1uRW5kTmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRl
UG9zaXRpb24pOgorICAgICAgICAqIHN2Zy9TVkdGb250RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjprZXJuaW5nRm9yUGFpck9mU3RyaW5nc0FuZEdseXBocyk6CisgICAgICAgICogc3Zn
L1NWR1BhdGhCeXRlU3RyZWFtLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVh
bTo6YXBwZW5kKToKKyAgICAgICAgKiB4bWwvWFBhdGhOb2RlU2V0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aDo6Tm9kZVNldDo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Ok5v
ZGVTZXQ6OmVuZCk6CisKIDIwMTQtMTEtMjEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KIAogICAgICAgICBSZWdyZXNzaW9uKHIxNzUzODEpOiAtd2Via2l0LW1hc2stYm94LWltYWdl
IGlzIGJyb2tlbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5jcHAKaW5kZXggNmMyOTNjY2Y5OGQ1NjczMjZkYzQyZmFiZDVkZmE0MWQy
M2Y2YzJjMS4uNjM1YWNkMmNiYjM4ZTc4YTYwODNiNjFlNThkYmExYjQ3Y2I3OWU5YSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwCkBAIC0yMzQsOSArMjM0LDkgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fc3ltYm9sVGFibGUpOwogICAgIGZvciAoRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9y
OjppdGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbHMuYmVnaW4oKSwgZW5k
ID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkRlY2xzLmVuZCgpOyBwdHIgIT0gZW5kOyArK3B0cikK
LSAgICAgICAgdmlzaXRvci5hcHBlbmQocHRyKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoV1RG
OjpnZXRQdHIocHRyKSk7CiAgICAgZm9yIChGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I6Oml0ZXJh
dG9yIHB0ciA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25FeHBycy5iZWdpbigpLCBlbmQgPSB0aGlz
T2JqZWN0LT5tX2Z1bmN0aW9uRXhwcnMuZW5kKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAg
ICB2aXNpdG9yLmFwcGVuZChwdHIpOworICAgICAgICB2aXNpdG9yLmFwcGVuZChXVEY6OmdldFB0
cihwdHIpKTsKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5tX2NvbnN0YW50
UmVnaXN0ZXJzLmRhdGEoKSwgdGhpc09iamVjdC0+bV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkp
OwogICAgIGlmICh0aGlzT2JqZWN0LT5tX3JhcmVEYXRhKSB7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwLCBlbmQgPSB0aGlzT2JqZWN0LT5tX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOyBp
ICE9IGVuZDsgaSsrKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCBiMjEzNGVmN2E1MDliNzM2OWUzZDJj
MDU2NjJjMjFiODQ3MDdmZjVjLi41ZTFmNDYxMjkxYWNlMjYwOTNiMTMxN2RhZjg0Y2U5NWQzZDFi
ZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMjI2Myw4ICsyMjYzLDggQEAgdm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMoUmVnaXN0ZXJJRCogc2NvcGUsIENvbnRy
b2xGbG93Q29udGUKICAgICAgICAgICAgIGludCB0b3BTY29wZUluZGV4ID0gLTE7CiAgICAgICAg
ICAgICBpbnQgYm90dG9tU2NvcGVJbmRleCA9IC0xOwogICAgICAgICAgICAgaWYgKGZsaXBTY29w
ZXMpIHsKLSAgICAgICAgICAgICAgICB0b3BTY29wZUluZGV4ID0gdG9wU2NvcGUgLSBtX3Njb3Bl
Q29udGV4dFN0YWNrLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgYm90dG9tU2NvcGVJbmRleCA9
IGJvdHRvbVNjb3BlIC0gbV9zY29wZUNvbnRleHRTdGFjay5iZWdpbigpOworICAgICAgICAgICAg
ICAgIHRvcFNjb3BlSW5kZXggPSB0b3BTY29wZSAtIG1fc2NvcGVDb250ZXh0U3RhY2suZGF0YSgp
OworICAgICAgICAgICAgICAgIGJvdHRvbVNjb3BlSW5kZXggPSBib3R0b21TY29wZSAtIG1fc2Nv
cGVDb250ZXh0U3RhY2suZGF0YSgpOwogICAgICAgICAgICAgICAgIHNhdmVkU2NvcGVDb250ZXh0
U3RhY2sgPSBtX3Njb3BlQ29udGV4dFN0YWNrOwogICAgICAgICAgICAgICAgIG1fc2NvcGVDb250
ZXh0U3RhY2suc2hyaW5rKGZpbmFsbHlDb250ZXh0LnNjb3BlQ29udGV4dFN0YWNrU2l6ZSk7CiAg
ICAgICAgICAgICB9CkBAIC0yMzA4LDcgKzIzMDgsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0Q29tcGxleFBvcFNjb3BlcyhSZWdpc3RlcklEKiBzY29wZSwgQ29udHJvbEZsb3dDb250
ZQogICAgICAgICAgICAgaWYgKGZsaXBTY29wZXMpIHsKICAgICAgICAgICAgICAgICBtX3Njb3Bl
Q29udGV4dFN0YWNrID0gc2F2ZWRTY29wZUNvbnRleHRTdGFjazsKICAgICAgICAgICAgICAgICB0
b3BTY29wZSA9ICZtX3Njb3BlQ29udGV4dFN0YWNrW3RvcFNjb3BlSW5kZXhdOyAvLyBhc3NlcnQg
aXQncyB3aXRoaW4gYm91bmRzCi0gICAgICAgICAgICAgICAgYm90dG9tU2NvcGUgPSBtX3Njb3Bl
Q29udGV4dFN0YWNrLmJlZ2luKCkgKyBib3R0b21TY29wZUluZGV4OyAvLyBkb24ndCBhc3NlcnQs
IHNpbmNlIGl0IHRoZSBpbmRleCBtaWdodCBiZSAtMS4KKyAgICAgICAgICAgICAgICBib3R0b21T
Y29wZSA9IG1fc2NvcGVDb250ZXh0U3RhY2suZGF0YSgpICsgYm90dG9tU2NvcGVJbmRleDsgLy8g
ZG9uJ3QgYXNzZXJ0LCBzaW5jZSBpdCB0aGUgaW5kZXggbWlnaHQgYmUgLTEuCiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBpZiAoZmxpcFN3aXRjaGVzKQogICAgICAgICAgICAgICAgIG1fc3dp
dGNoQ29udGV4dFN0YWNrID0gc2F2ZWRTd2l0Y2hDb250ZXh0U3RhY2s7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IGYwNzI0ZGY0NzAz
OTQ5YjMwZDI0ZTM2YWE4MmU3NzhhNWNiOWJmNzMuLjNiZTE4ZWE2YzZjYjdmMzZmNDhlMjBiNTlm
NzIzZWNjNTE0YjlkM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCkBAIC00OTEwLDcgKzQ5MTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0U3dpdGNoSW50SnVtcCgKICAgICBhZGRCcmFuY2goCiAgICAgICAgIG1faml0LmJyYW5j
aDMyKEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsIHZhbHVlLCBJbW0zMih0YWJsZS5jdGlPZmZz
ZXRzLnNpemUoKSkpLAogICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayk7Ci0gICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tUHRyKHRhYmxlLmN0aU9mZnNldHMuYmVnaW4oKSksIHNjcmF0Y2gp
OworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cih0YWJsZS5jdGlPZmZzZXRzLmRhdGEoKSks
IHNjcmF0Y2gpOwogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkJhc2VJbmRleChzY3Jh
dGNoLCB2YWx1ZSwgSklUQ29tcGlsZXI6OnRpbWVzUHRyKCkpLCBzY3JhdGNoKTsKICAgICBtX2pp
dC5qdW1wKHNjcmF0Y2gpOwogICAgIGRhdGEtPmRpZFVzZUp1bXBUYWJsZSA9IHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCmluZGV4IGZjN2NiMWIy
NTQzMjY5NGFhZWU4ZmJmMzE1M2U2ZTA4YTgzMzJmMzkuLjdiMWExY2U3YjM4MzdlODE0Y2JhMmIz
ZWNjM2EwN2IwMThkOWFlMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQWJicmV2aWF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJi
cmV2aWF0aW9ucy5oCkBAIC0xMjAsNyArMTIwLDcgQEAgc3RhdGljIGlubGluZSBMVmFsdWUgbWRT
dHJpbmcoTENvbnRleHQgY29udGV4dCwgY29uc3QgY2hhciogc3RyaW5nLCB1bnNpZ25lZCBsZW4K
IHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kU3RyaW5nKExDb250ZXh0IGNvbnRleHQsIGNvbnN0IGNo
YXIqIHN0cmluZykgeyByZXR1cm4gbWRTdHJpbmcoY29udGV4dCwgc3RyaW5nLCBzdGQ6OnN0cmxl
bihzdHJpbmcpKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRl
eHQsIExWYWx1ZSogYXJncywgdW5zaWduZWQgbnVtQXJncykgeyByZXR1cm4gbGx2bS0+TUROb2Rl
SW5Db250ZXh0KGNvbnRleHQsIGFyZ3MsIG51bUFyZ3MpOyB9CiB0ZW1wbGF0ZTx0eXBlbmFtZSBW
ZWN0b3JUeXBlPgotc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQs
IGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvcikgeyByZXR1cm4gbWROb2RlKGNvbnRleHQsIGNvbnN0
X2Nhc3Q8TFZhbHVlKj4odmVjdG9yLmJlZ2luKCkpLCB2ZWN0b3Iuc2l6ZSgpKTsgfQorc3RhdGlj
IGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQsIGNvbnN0IFZlY3RvclR5cGUm
IHZlY3RvcikgeyByZXR1cm4gbWROb2RlKGNvbnRleHQsIGNvbnN0X2Nhc3Q8TFZhbHVlKj4odmVj
dG9yLmRhdGEoKSksIHZlY3Rvci5zaXplKCkpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5v
ZGUoTENvbnRleHQgY29udGV4dCkgeyByZXR1cm4gbWROb2RlKGNvbnRleHQsIDAsIDApOyB9CiBz
dGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwgTFZhbHVlIGFyZzEp
IHsgcmV0dXJuIG1kTm9kZShjb250ZXh0LCAmYXJnMSwgMSk7IH0KIHN0YXRpYyBpbmxpbmUgTFZh
bHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0LCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIpCkBA
IC0yODgsNyArMjg4LDcgQEAgc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVy
IGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgY29uc3QgTFZhbHVlKgogdGVtcGxhdGU8dHlwZW5h
bWUgVmVjdG9yVHlwZT4KIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIs
IExWYWx1ZSBmdW5jdGlvbiwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKQogewotICAgIHJldHVy
biBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIHZlY3Rvci5iZWdpbigpLCB2ZWN0b3Iuc2l6
ZSgpKTsKKyAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCB2ZWN0b3IuZGF0
YSgpLCB2ZWN0b3Iuc2l6ZSgpKTsKIH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChM
QnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24pCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludERhdGEuY3BwCmluZGV4IDY5MTlhZWFiMDBhMWIyNWM0NzViYmY5ZGQyNWM2
ODhmMGFhNThhNzIuLjQ0YWZjYTRjYmFkOGIzZTU1MzM0MTI5YWM5YzliMGRlZmQ5NTYxZTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCkBAIC0xNjEsNyArMTYx
LDcgQEAgdm9pZCBEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyhWTSYgdm0pCiAgICAgVmVjdG9yPGlu
dD4gdGVzdFZlY3RvcjsKICAgICB0ZXN0VmVjdG9yLnJlc2l6ZSg0Mik7CiAgICAgQVNTRVJUKGJp
dHdpc2VfY2FzdDx1aW50MzJfdCo+KCZ0ZXN0VmVjdG9yKVtzaXplb2Yodm9pZCopL3NpemVvZih1
aW50MzJfdCkgKyAxXSA9PSA0Mik7Ci0gICAgQVNTRVJUKGJpdHdpc2VfY2FzdDxpbnQqKj4oJnRl
c3RWZWN0b3IpWzBdID09IHRlc3RWZWN0b3IuYmVnaW4oKSk7CisgICAgQVNTRVJUKGJpdHdpc2Vf
Y2FzdDxpbnQqKj4oJnRlc3RWZWN0b3IpWzBdID09IHRlc3RWZWN0b3IuZGF0YSgpKTsKICNlbmRp
ZgogCiAgICAgQVNTRVJUKFN0cmluZ0ltcGw6OnNfaGFzaEZsYWc4Qml0QnVmZmVyID09IDMyKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCmluZGV4IDQ1MmY3MDQ2ZjMwMjJkMzg4
MTA5YWViZGM4NDM4NGUxYWEyMmZmYTEuLjAxZmNjZGI3ZTM4YWM1YTYwMjJjNjhjOTdiOGQ4ZWIz
YjBjZWMxODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaApAQCAtMTMwLDEx
ICsxMzAsOCBAQCBzdHJ1Y3QgU2NvcGUgewogICAgIHsKICAgICAgICAgaWYgKHJocy5tX2xhYmVs
cykgewogICAgICAgICAgICAgbV9sYWJlbHMgPSBhZG9wdFB0cihuZXcgTGFiZWxTdGFjayk7Ci0K
LSAgICAgICAgICAgIHR5cGVkZWYgTGFiZWxTdGFjazo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7
Ci0gICAgICAgICAgICBpdGVyYXRvciBlbmQgPSByaHMubV9sYWJlbHMtPmVuZCgpOwotICAgICAg
ICAgICAgZm9yIChpdGVyYXRvciBpdCA9IHJocy5tX2xhYmVscy0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICAgICAgICAgIG1fbGFiZWxzLT5hcHBlbmQoU2NvcGVMYWJlbEluZm8o
aXQtPm1faWRlbnQsIGl0LT5tX2lzTG9vcCkpOworICAgICAgICAgICAgZm9yIChhdXRvIGxhYmVs
IDogKnJocy5tX2xhYmVscykKKyAgICAgICAgICAgICAgICBtX2xhYmVscy0+YXBwZW5kKFNjb3Bl
TGFiZWxJbmZvKGxhYmVsLm1faWRlbnQsIGxhYmVsLm1faXNMb29wKSk7CiAgICAgICAgIH0KICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKaW5kZXggY2M2
MzAyMTdkZjdmZDI1YWRlNGM0YmIzOTg1NzRkNjdkNWE3NDU2OS4uNzljZDY3YTY3ODE3YmRkZmFl
ZGRmM2M1MDY4NmM0ODJjOTIwNDUwNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5jcHAKQEAgLTM1Miw3ICszNTIsNyBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aFdp
dGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvbwog
ICAgICAgICAgICAgLy8gcHJvcGVydGllcywgc28gd2UgaGF2ZSB0byBwZXJmb3JtIGRlbGV0aW9u
IHdpdGggY2F1dGlvbiwgaWYgbm90IHdlIGNhbgogICAgICAgICAgICAgLy8gZGVsZXRlIHZhbHVl
cyBpbiBhbnkgb3JkZXIuCiAgICAgICAgICAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkpIHsKLSAg
ICAgICAgICAgICAgICBxc29ydChrZXlzLmJlZ2luKCksIGtleXMuc2l6ZSgpLCBzaXplb2YodW5z
aWduZWQpLCBjb21wYXJlS2V5c0ZvclFTb3J0KTsKKyAgICAgICAgICAgICAgICBxc29ydChrZXlz
LmRhdGEoKSwga2V5cy5zaXplKCksIHNpemVvZih1bnNpZ25lZCksIGNvbXBhcmVLZXlzRm9yUVNv
cnQpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBrZXlzLnNpemUoKTsKICAgICAgICAg
ICAgICAgICB3aGlsZSAoaSkgewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IGtleXNbLS1pXTsKQEAgLTExOTEsMTMgKzExOTEsMTMgQEAgdm9pZCBKU0FycmF5Ojpzb3J0Q29t
cGFjdGVkVmVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgQ29udGlndW91c0RhdGE8U3RvcmFnZVR5cGU+
IGQKICAgICAgICAgCiAjaWYgSEFWRShNRVJHRVNPUlQpCiAgICAgaWYgKGlzU29ydGluZ1ByaW1p
dGl2ZVZhbHVlcykKLSAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCks
IHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwor
ICAgICAgICBxc29ydCh2YWx1ZXMuZGF0YSgpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVT
dHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICAgICBlbHNlCi0gICAg
ICAgIG1lcmdlc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVl
U3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAgICAgIG1lcmdl
c29ydCh2YWx1ZXMuZGF0YSgpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWly
KSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICNlbHNlCiAgICAgLy8gRklYTUU6IFRo
ZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBzdGFibGUgc29y
dC4KICAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQs
IGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0LgotICAgIHFz
b3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWly
KSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICBxc29ydCh2YWx1ZXMuZGF0YSgp
LCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5n
UGFpckZvclFTb3J0KTsKICNlbmRpZgogICAgIAogICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5j
dGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCmluZGV4IDg4
ZDU3ZjNkZDRlNzk3NjlkMWQwNmMzYTg1OTEwMWI1NTVjNmE4M2YuLmRkM2MxMjFkMGViYjE2ZThh
NTI0NjFmYWFjZGJiYjRkOTg3ZDcyYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9v
bHMvUHJvZmlsZVRyZWVOb2RlLmgKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
VmVjdG9yPE1hcEVudHJ5Kj4gZW50cmllczsKICAgICAgICAgZm9yIChNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9jaGlsZHJlbi0+YmVnaW4oKTsgaXQgIT0gbV9jaGlsZHJlbi0+ZW5kKCk7ICsraXQpCiAg
ICAgICAgICAgICBlbnRyaWVzLmFwcGVuZCgmKml0KTsKLSAgICAgICAgcXNvcnQoZW50cmllcy5i
ZWdpbigpLCBlbnRyaWVzLnNpemUoKSwgc2l6ZW9mKE1hcEVudHJ5KiksIGNvbXBhcmVFbnRyaWVz
KTsKKyAgICAgICAgcXNvcnQoZW50cmllcy5kYXRhKCksIGVudHJpZXMuc2l6ZSgpLCBzaXplb2Yo
TWFwRW50cnkqKSwgY29tcGFyZUVudHJpZXMpOwogCiAgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciB0
aGUgY2hpbGRyZW4gaW4gc2FtcGxlLWZyZXF1ZW5jeSBvcmRlci4KICAgICAgICAgZm9yIChzaXpl
X3QgZSA9IDA7IGUgPCBlbnRyaWVzLnNpemUoKTsgKytlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95
YXJyL1lhcnJKSVQuY3BwCmluZGV4IGUzYTNhOTMyY2U3ZWQ3MzhmMTk4NmIyYmYyYjc0M2UwNDIz
YTNiMjUuLmQyNjhlNTllMTJiYjRlODM2OGNlMzkyMDY4NzhhYzgxNjJlM2I0MmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCkBAIC0yMjMsNyArMjIzLDcgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBpZiAoY2hh
ckNsYXNzLT5tX3Jhbmdlcy5zaXplKCkpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIG1hdGNoSW5k
ZXggPSAwOwogICAgICAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7Ci0gICAgICAgICAgICBtYXRj
aENoYXJhY3RlckNsYXNzUmFuZ2UoY2hhcmFjdGVyLCBmYWlsdXJlcywgbWF0Y2hEZXN0LCBjaGFy
Q2xhc3MtPm1fcmFuZ2VzLmJlZ2luKCksIGNoYXJDbGFzcy0+bV9yYW5nZXMuc2l6ZSgpLCAmbWF0
Y2hJbmRleCwgY2hhckNsYXNzLT5tX21hdGNoZXMuYmVnaW4oKSwgY2hhckNsYXNzLT5tX21hdGNo
ZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3NSYW5nZShjaGFyYWN0
ZXIsIGZhaWx1cmVzLCBtYXRjaERlc3QsIGNoYXJDbGFzcy0+bV9yYW5nZXMuZGF0YSgpLCBjaGFy
Q2xhc3MtPm1fcmFuZ2VzLnNpemUoKSwgJm1hdGNoSW5kZXgsIGNoYXJDbGFzcy0+bV9tYXRjaGVz
LmRhdGEoKSwgY2hhckNsYXNzLT5tX21hdGNoZXMuc2l6ZSgpKTsKICAgICAgICAgICAgIHdoaWxl
IChtYXRjaEluZGV4IDwgY2hhckNsYXNzLT5tX21hdGNoZXMuc2l6ZSgpKQogICAgICAgICAgICAg
ICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoKHVu
c2lnbmVkIHNob3J0KWNoYXJDbGFzcy0+bV9tYXRjaGVzW21hdGNoSW5kZXgrK10pKSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ogYi9Tb3VyY2UvV1RG
L1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCmluZGV4IDJmM2FjMjA5YzUyNmMwMzRmZjQwYWU1ZTM2
NDQ0MjZmNmJhYjZiOTYuLmQxMDkzZDM2ZGQ3NTAwZjI1YTJlMTMzYmU1MTZlYzczZTFiNWZhMGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oKKysrIGIvU291
cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagpAQCAtMjE4LDYgKzIxOCw3IEBACiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSGFzaFRhYmxlLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlx3dGZcSGFzaFRyYWl0cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cd3RmXEhleE51bWJlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3Rm
XEluZGV4ZWRJdGVyYXRvci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEl0
ZXJhdG9yQWRhcHRvcnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxJdGVy
YXRvclJhbmdlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcTGlzdEhhc2hT
ZXQuaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ou
ZmlsdGVycyBiL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVycwppbmRl
eCA1OTUzYTBmNDJhZmQ3NTA3NmJmOTg1ZDU5ODMwZDliZWM4NjM1Zjc1Li4wMTA4OWNiOTBiZGM1
MDA0YTcwZjBkNDgxMjIwNzk4OGEyNDIyMjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi52
Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dURi9XVEYudmN4cHJvai9X
VEYudmN4cHJvai5maWx0ZXJzCkBAIC00NjcsNiArNDY3LDkgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxIZXhOdW1iZXIuaCI+CiAgICAgICA8RmlsdGVyPnd0ZjwvRmlsdGVyPgog
ICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEluZGV4ZWRJ
dGVyYXRvci5oIj4KKyAgICAgIDxGaWx0ZXI+d3RmPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSXRlcmF0b3JBZGFwdG9ycy5oIj4KICAg
ICAgIDxGaWx0ZXI+d3RmPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmZjQ4ZGEwY2M1MzEyODJhMTJkMGQ1MTA2
YzY2MDM1ZjE1NWQ5MTU2Li4xYmE1Y2ZkNzg5OGZkOWU5NjU5NWJmZDVhNDc3NGZlZjFlYmY0Zjgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk4LDYgKzk4
LDcgQEAKIAkJQTc0ODc0NTIxN0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc0ODc0NEYx
N0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guY3BwICovOyB9OwogCQlBNzQ4NzQ1
MzE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc0ODc0NTAxN0EwQkRBRTAwRkEwNENCIC8q
IFNpeENoYXJhY3Rlckhhc2guaCAqLzsgfTsKIAkJQTc0ODc0NTQxN0EwQkRBRTAwRkEwNENCIC8q
IFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc0ODc0NTExN0EwQkRBRTAwRkEwNENCIC8qIFN0cmluZ0hhc2hEdW1w
Q29udGV4dC5oICovOyB9OworCQlBN0RDMkYwNDFBMDlBMjJEMDA3MkY0RTMgLyogSW5kZXhlZEl0
ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0RDMkYwMzFBMDk5REUzMDA3MkY0RTMgLyogSW5kZXhlZEl0ZXJhdG9yLmggKi87IH07CiAJCUE3
RTY0M0M2MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21wcmVzc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0U2NDNDNDE3QzU0MjNCMDAzQkIxNkIg
LyogQ29tcHJlc3Npb24uY3BwICovOyB9OwogCQlBN0U2NDNDNzE3QzU0MjNCMDAzQkIxNkIgLyog
Q29tcHJlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3RTY0M0M1MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21wcmVzc2lvbi5oICovOyB9OwogCQlB
ODc2REJEODE1MTgxNkU1MDBEQURCOTUgLyogUGxhdGZvcm0uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzZEQkQ3MTUxODE2RTUwMERBREI5NSAvKiBQ
bGF0Zm9ybS5oICovOyB9OwpAQCAtMzg5LDYgKzM5MCw3IEBACiAJCUE3NDg3NDRGMTdBMEJEQUUw
MEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNpeENoYXJhY3Rlckhhc2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBNzQ4NzQ1MDE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaXhDaGFyYWN0ZXJIYXNoLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NDg3NDUxMTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJp
bmdIYXNoRHVtcENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Ry
aW5nSGFzaER1bXBDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3REMy
RjAzMUEwOTlERTMwMDcyRjRFMyAvKiBJbmRleGVkSXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW5kZXhlZEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3RTY0M0M0
MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21wcmVzc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb21wcmVzc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3RTY0M0M1MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21wcmVzc2lvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBODc2REJENzE1MTgxNkU1MDBEQURCOTUgLyogUGxhdGZvcm0uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm0uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTg5Miw2ICs4OTQsNyBAQAogCQkJCTk3NENGQzhEMTZBNEYzMjcwMDZE
NTQwNCAvKiBXZWFrUHRyLmggKi8sCiAJCQkJQThBNDczN0ExNTFBODI1QjAwNDEyM0ZGIC8qIFdU
RlRocmVhZERhdGEuY3BwICovLAogCQkJCUE4QTQ3MzdCMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZU
aHJlYWREYXRhLmggKi8sCisJCQkJQTdEQzJGMDMxQTA5OURFMzAwNzJGNEUzIC8qIEluZGV4ZWRJ
dGVyYXRvci5oICovLAogCQkJKTsKIAkJCXBhdGggPSB3dGY7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMTA2NSw2ICsxMDY4LDcgQEAKIAkJCQlBOEE0NzNBRDE1MUE4MjVCMDA0MTIz
RkYgLyogY2FjaGVkLXBvd2Vycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NUUxNTFBODI1
QjAwNDEyM0ZGIC8qIENoYXJhY3Rlck5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM5
NDE1MUE4MjVCMDA0MTIzRkYgLyogQ2hlY2tlZEFyaXRobWV0aWMuaCBpbiBIZWFkZXJzICovLAor
CQkJCUE3REMyRjA0MUEwOUEyMkQwMDcyRjRFMyAvKiBJbmRleGVkSXRlcmF0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3Mzk1MTUxQTgyNUIwMDQxMjNGRiAvKiBDaGVja2VkQm9vbGVhbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NUYxNTFBODI1QjAwNDEyM0ZGIC8qIENvbGxhdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM0RURFNjE2OTYxNDk2MDBGNjUwNDEgLyogQ29tbWFQ
cmludGVyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0luZGV4
ZWRJdGVyYXRvci5oIGIvU291cmNlL1dURi93dGYvSW5kZXhlZEl0ZXJhdG9yLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzg5NDhjNTI3OGRhZTBiNTlmMjM3NjZkMDcwOWE5OWQ0ODFmMjY1MgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XVEYvd3RmL0luZGV4ZWRJdGVyYXRvci5oCkBAIC0wLDAgKzEsNDk1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBX
VEZfSW5kZXhlZEl0ZXJhdG9yX2gKKyNkZWZpbmUgV1RGX0luZGV4ZWRJdGVyYXRvcl9oCisKK25h
bWVzcGFjZSBXVEYgeworCisjZGVmaW5lIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coY2hlY2sp
IGRvIHtcCisgICAgaWYgKCEoY2hlY2spKVwKKyAgICAgICAgT3ZlcmZsb3dIYW5kbGVyOjpvdmVy
Zmxvd2VkKCk7XAorfSB3aGlsZSAoMCkKKwordGVtcGxhdGUgPHR5cGVuYW1lIFZlY3RvclR5cGUs
IHR5cGVuYW1lIFQsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciA9IENyYXNoT25PdmVyZmxvdz4g
c3RydWN0IEluZGV4ZWRJdGVyYXRvciB7CisgICAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhlZEl0ZXJh
dG9yPGNvbnN0IFZlY3RvclR5cGUsIGNvbnN0IFQsIE92ZXJmbG93SGFuZGxlcj4gY29uc3RfaXRl
cmF0b3I7CisKKyAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgcHRyZGlmZl90
IGRpZmZlcmVuY2VfdHlwZTsKKyAgICB0eXBlZGVmIFZhbHVlVHlwZSB2YWx1ZV90eXBlOworICAg
IHR5cGVkZWYgVmFsdWVUeXBlKiBwb2ludGVyOworICAgIHR5cGVkZWYgVmFsdWVUeXBlJiByZWZl
cmVuY2U7CisgICAgdHlwZWRlZiBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJh
dG9yX2NhdGVnb3J5OworCisgICAgSW5kZXhlZEl0ZXJhdG9yKCkKKyAgICAgICAgOiBtX3ZlY3Rv
cihudWxscHRyKQorICAgICAgICAsIG1fcG9zaXRpb24oMCkKKyAgICB7CisgICAgfQorCisgICAg
SW5kZXhlZEl0ZXJhdG9yKFZlY3RvclR5cGUmIHZlY3RvciwgVmFsdWVUeXBlKiBwb3NpdGlvbikK
KyAgICAgICAgOiBtX3ZlY3RvcigmdmVjdG9yKQorICAgICAgICAsIG1fcG9zaXRpb24ocG9zaXRp
b24gLSB2ZWN0b3IuZGF0YSgpKQorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVS
RkxPVyhtX3Bvc2l0aW9uIDw9IHZlY3Rvci5zaXplKCkpOworICAgIH0KKworICAgIEluZGV4ZWRJ
dGVyYXRvcihjb25zdCBJbmRleGVkSXRlcmF0b3ImIG90aGVyKQorICAgICAgICA6IG1fdmVjdG9y
KG90aGVyLm1fdmVjdG9yKQorICAgICAgICAsIG1fcG9zaXRpb24ob3RoZXIubV9wb3NpdGlvbikK
KyAgICB7CisgICAgfQorCisgICAgVmFsdWVUeXBlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1
cm4gJm1fdmVjdG9yLT5hdChtX3Bvc2l0aW9uKTsgfQorICAgIFZhbHVlVHlwZSYgb3BlcmF0b3Iq
KCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3ItPmF0KG1fcG9zaXRpb24pOyB9CisgICAgVmFsdWVU
eXBlKiBnZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxP
VyhtX3Bvc2l0aW9uIDw9IG1fdmVjdG9yLT5zaXplKCkpOworICAgICAgICByZXR1cm4gbV92ZWN0
b3ItPmRhdGEoKSArIG1fcG9zaXRpb247CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBv
cGVyYXRvcisrKCkKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9w
b3NpdGlvbiA8IG1fdmVjdG9yLT5zaXplKCkpOworICAgICAgICBtX3Bvc2l0aW9uKys7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3Ir
KyhpbnQpCisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1fcG9zaXRp
b24gPCBtX3ZlY3Rvci0+c2l6ZSgpKTsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgq
dGhpcyk7CisgICAgICAgIG1fcG9zaXRpb24rKzsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJhdG9yLS0oKQorICAgIHsKKyAgICAgICAg
SU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uID4gMCk7CisgICAgICAgIG1fcG9z
aXRpb24tLTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIEluZGV4ZWRJdGVy
YXRvciBvcGVyYXRvci0tKGludCkKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZF
UkZMT1cobV9wb3NpdGlvbiA+IDApOworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0
aGlzKTsKKyAgICAgICAgbV9wb3NpdGlvbi0tOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKworICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQgY29u
dmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KKyAgICB0eXBl
ZGVmIHNpemVfdCAoSW5kZXhlZEl0ZXJhdG9yOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CisgICAg
b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yID8g
JkluZGV4ZWRJdGVyYXRvcjo6bV9wb3NpdGlvbiA6IG51bGxwdHI7IH0KKworCisgICAgSW5kZXhl
ZEl0ZXJhdG9yJiBvcGVyYXRvcis9KGxvbmcgaW5jcmVtZW50KQorICAgIHsKKyAgICAgICAgaWYg
KGluY3JlbWVudCA8IDApIHsKKyAgICAgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1co
aW5jcmVtZW50ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKTsKKyAgICAg
ICAgICAgIHJldHVybiAoKnRoaXMpIC09IHN0YXRpY19jYXN0PHNpemVfdD4oLWluY3JlbWVudCk7
CisgICAgICAgIH0KKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVygoc3RkOjpudW1l
cmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIG1fcG9zaXRpb24pID4gc3RhdGljX2Nhc3Q8c2l6
ZV90PihpbmNyZW1lbnQpKTsKKyAgICAgICAgbV9wb3NpdGlvbiArPSBpbmNyZW1lbnQ7CisgICAg
ICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA8PSBtX3ZlY3Rvci0+c2l6
ZSgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRv
ciYgb3BlcmF0b3ItPShsb25nIGRlY3JlbWVudCkKKyAgICB7CisgICAgICAgIGlmIChkZWNyZW1l
bnQgPCAwKSB7CisgICAgICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGRlY3JlbWVu
dCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSk7CisgICAgICAgICAgICBy
ZXR1cm4gKCp0aGlzKSArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KC1kZWNyZW1lbnQpOworICAgICAg
ICB9CisKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhzdGF0aWNfY2FzdDxzaXpl
X3Q+KGRlY3JlbWVudCkgPD0gbV9wb3NpdGlvbik7CisgICAgICAgIG1fcG9zaXRpb24gLT0gZGVj
cmVtZW50OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJh
dG9yJiBvcGVyYXRvcis9KHNpemVfdCBpbmNyZW1lbnQpCisgICAgeworICAgICAgICBJTkRFWEVE
X0lURVJBVE9SX09WRVJGTE9XKChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC0g
bV9wb3NpdGlvbikgPiBpbmNyZW1lbnQpOworICAgICAgICBtX3Bvc2l0aW9uICs9IGluY3JlbWVu
dDsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uIDw9IG1fdmVj
dG9yLT5zaXplKCkpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgSW5kZXhl
ZEl0ZXJhdG9yJiBvcGVyYXRvci09KHNpemVfdCBkZWNyZW1lbnQpCisgICAgeworICAgICAgICBJ
TkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGRlY3JlbWVudCA8PSBtX3Bvc2l0aW9uKTsKKyAgICAg
ICAgbV9wb3NpdGlvbiAtPSBkZWNyZW1lbnQ7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9
CisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJhdG9yKz0oaW50MzJfdCBpbmNyZW1lbnQpCisg
ICAgeworICAgICAgICBpZiAoaW5jcmVtZW50IDwgMCkgeworICAgICAgICAgICAgSU5ERVhFRF9J
VEVSQVRPUl9PVkVSRkxPVyhpbmNyZW1lbnQgIT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90
Pjo6bWluKCkpOworICAgICAgICAgICAgcmV0dXJuICgqdGhpcykgLT0gc3RhdGljX2Nhc3Q8c2l6
ZV90PigtaW5jcmVtZW50KTsKKyAgICAgICAgfQorICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09W
RVJGTE9XKChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC0gbV9wb3NpdGlvbikg
PiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluY3JlbWVudCkpOworICAgICAgICBtX3Bvc2l0aW9uICs9
IGluY3JlbWVudDsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9u
IDw9IG1fdmVjdG9yLT5zaXplKCkpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisg
ICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvci09KGludDMyX3QgZGVjcmVtZW50KQorICAgIHsK
KyAgICAgICAgaWYgKGRlY3JlbWVudCA8IDApIHsKKyAgICAgICAgICAgIElOREVYRURfSVRFUkFU
T1JfT1ZFUkZMT1coZGVjcmVtZW50ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1p
bigpKTsKKyAgICAgICAgICAgIHJldHVybiAoKnRoaXMpICs9IHN0YXRpY19jYXN0PHNpemVfdD4o
LWRlY3JlbWVudCk7CisgICAgICAgIH0KKworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJG
TE9XKHN0YXRpY19jYXN0PHNpemVfdD4oZGVjcmVtZW50KSA8PSBtX3Bvc2l0aW9uKTsKKyAgICAg
ICAgbV9wb3NpdGlvbiAtPSBkZWNyZW1lbnQ7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9
CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKHNpemVfdCBpbmNyZW1lbnQpIGNvbnN0
CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdCArPSBpbmNyZW1lbnQ7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9y
IG9wZXJhdG9yLShzaXplX3QgZGVjcmVtZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgSW5kZXhl
ZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQgLT0gZGVjcmVt
ZW50OworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvcisoaW50MzJfdCBpbmNy
ZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlz
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBpbmNyZW1lbnQ7CisgICAgfQorCisgICAgSW5k
ZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLShpbnQzMl90IGRlY3JlbWVudCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICByZXR1cm4gcmVz
dWx0IC09IGRlY3JlbWVudDsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3Ir
KHVuc2lnbmVkIGxvbmcgbG9uZyBpbmNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRl
eGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVS
RkxPVyhpbmNyZW1lbnQgPD0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmNyZW1lbnQpOwor
ICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0odW5zaWduZWQgbG9uZyBsb25n
IGRlY3JlbWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQo
KnRoaXMpOworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGRlY3JlbWVudCA8PSBz
dGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlY3JlbWVudCk7CisgICAgfQorICAgIEluZGV4ZWRJ
dGVyYXRvciBvcGVyYXRvcisobG9uZyBsb25nIGluY3JlbWVudCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICBpZiAoaW5jcmVtZW50
IDwgMCkgeworICAgICAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpbmNyZW1lbnQg
IT0gc3RkOjpudW1lcmljX2xpbWl0czxsb25nIGxvbmc+OjptaW4oKSk7CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0IC0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigtaW5jcmVtZW50
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmcgbG9uZz4oaW5jcmVtZW50KTsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Ig
b3BlcmF0b3ItKGxvbmcgbG9uZyBkZWNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRl
eGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgaWYgKGRlY3JlbWVudCA8IDApIHsK
KyAgICAgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coZGVjcmVtZW50ICE9IHN0ZDo6
bnVtZXJpY19saW1pdHM8bG9uZyBsb25nPjo6bWluKCkpOworICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdCArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oLWRlY3JlbWVudCk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
IGxvbmc+KGRlY3JlbWVudCk7CisgICAgfQorCisjaWYgX19TSVpFT0ZfU0laRV9UX18gIT0gX19T
SVpFT0ZfSU5UX18KKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKHVuc2lnbmVkIGluY3Jl
bWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMp
OworICAgICAgICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19jYXN0PHNpemVfdD4oaW5jcmVtZW50
KTsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3ItKHVuc2lnbmVkIGRlY3Jl
bWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMp
OworICAgICAgICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19jYXN0PHNpemVfdD4oZGVjcmVtZW50
KTsKKyAgICB9CisjZW5kaWYKKworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvcisobG9uZyBp
bmNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0
aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGluY3Jl
bWVudCk7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLShsb25nIGRlY3Jl
bWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMp
OworICAgICAgICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19jYXN0PHNpemVfdD4oZGVjcmVtZW50
KTsKKyAgICB9CisKKyAgICBwdHJkaWZmX3Qgb3BlcmF0b3ItKGNvbnN0IGNvbnN0X2l0ZXJhdG9y
JiByaWdodCkgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1co
bV92ZWN0b3IgPT0gcmlnaHQubV92ZWN0b3IpOworICAgICAgICByZXR1cm4gbV9wb3NpdGlvbiAt
IHJpZ2h0Lm1fcG9zaXRpb247CisgICAgfQorCisgICAgcHRyZGlmZl90IG9wZXJhdG9yLShjb25z
dCBWYWx1ZVR5cGUqIHJpZ2h0KSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRP
Ul9PVkVSRkxPVyhyaWdodCA+PSBtX3ZlY3Rvci0+ZGF0YSgpKTsKKyAgICAgICAgSU5ERVhFRF9J
VEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uID49IHN0YXRpY19jYXN0PHNpemVfdD4ocmlnaHQg
LSBtX3ZlY3Rvci0+ZGF0YSgpKSk7CisgICAgICAgIHJldHVybiBnZXQoKSAtIHJpZ2h0OworICAg
IH0KKworICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IEluZGV4ZWRJdGVyYXRvciYgb3RoZXIpCisg
ICAgeworICAgICAgICBtX3ZlY3RvciA9IG90aGVyLm1fdmVjdG9yOworICAgICAgICBtX3Bvc2l0
aW9uID0gb3RoZXIubV9wb3NpdGlvbjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9J
VEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJu
IHVuc2FmZUdldCgpID09IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOworICAg
ICAgICByZXR1cm4gdW5zYWZlR2V0KCkgIT0gb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikp
OworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPT0gb3RoZXI7CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOworICAg
ICAgICByZXR1cm4gdW5zYWZlR2V0KCkgIT0gb3RoZXI7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvcjwoY29uc3QgVmFsdWVUeXBlKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVY
RURfSVRFUkFUT1JfT1ZFUkZMT1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJl
dHVybiB1bnNhZmVHZXQoKSA8IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8PShj
b25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVS
QVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVu
c2FmZUdldCgpIDw9IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGNv
bnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFU
T1JfT1ZFUkZMT1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNh
ZmVHZXQoKSA8IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8
PShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRF
WEVEX0lURVJBVE9SX09WRVJGTE9XKHNhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0
dXJuIHVuc2FmZUdldCgpIDw9IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3I+KGNvbnN0IEluZGV4ZWRJdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOwor
ICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPiBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUo
b3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpID49IG90aGVyLnVuc2FmZUdldCgp
OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFZhbHVlVHlwZSogb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlzU2FmZVRvQ29t
cGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPiBvdGhlcjsKKyAgICB9
CisKKyAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgVmFsdWVUeXBlKiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaXNTYWZlVG9Db21wYXJlKG90
aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA+PSBvdGhlcjsKKyAgICB9CisKKyAg
ICBvcGVyYXRvciBjb25zdF9pdGVyYXRvcigpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdF9p
dGVyYXRvciByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZlY3RvciA9IG1fdmVjdG9yOworICAg
ICAgICByZXN1bHQubV9wb3NpdGlvbiA9IG1fcG9zaXRpb247CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorCisgICAgVmVjdG9yVHlwZSogbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fcG9z
aXRpb247CisKKyAgICBib29sIGlzU2FmZVRvQ29tcGFyZShjb25zdCBjb25zdF9pdGVyYXRvciYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV92ZWN0b3IgPT0gb3RoZXIubV92ZWN0
b3IpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuICFtX3ZlY3RvciB8
fCAhb3RoZXIubV92ZWN0b3I7CisgICAgfQorCisgICAgYm9vbCBpc1NhZmVUb0NvbXBhcmUoY29u
c3QgVmFsdWVUeXBlKiB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFtX3ZlY3RvcikKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBzaXplX3QgZGVsdGEgPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KHZhbHVlIC0gbV92ZWN0b3ItPmRhdGEoKSk7CisgICAgICAgIHJldHVybiBkZWx0YSA8PSBt
X3ZlY3Rvci0+c2l6ZSgpOworICAgIH0KKworICAgIFZhbHVlVHlwZSogdW5zYWZlR2V0KCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmICghbV92ZWN0b3IpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIGdldCgpOworICAgIH0KK307CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lu
bGluZSB0eXBlbmFtZSBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRs
ZXI+OjpWYWx1ZVR5cGUqIGdldFB0cihJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVy
Zmxvd0hhbmRsZXI+IHApCit7CisgICAgcmV0dXJuIHAuZ2V0KCk7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4K
K2lubGluZSBwdHJkaWZmX3Qgb3BlcmF0b3ItKGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3Qg
SW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7
CisgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhsZWZ0ID49IHJpZ2h0Lm1fdmVjdG9yLT5k
YXRhKCkpOworICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobGVmdCA8PSByaWdodC5tX3Zl
Y3Rvci0+ZW5kKCkuZ2V0KCkpOworICAgIHJldHVybiBsZWZ0IC0gcmlnaHQuZ2V0KCk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4KK2lubGluZSBwdHJkaWZmX3Qgb3BlcmF0b3ItKFZhbHVlVHlwZSogbGVmdCwg
Y29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmln
aHQpCit7CisgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhsZWZ0ID49IHJpZ2h0Lm1fdmVj
dG9yLT5kYXRhKCkpOworICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobGVmdCA8PSByaWdo
dC5tX3ZlY3Rvci0+ZW5kKCkuZ2V0KCkpOworICAgIHJldHVybiBsZWZ0IC0gcmlnaHQuZ2V0KCk7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBwdHJkaWZmX3Qgb3BlcmF0b3ItKGNvbnN0IFZhbHVl
VHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPGNvbnN0IFQsIGNvbnN0IFZhbHVlVHlw
ZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVS
RkxPVyhsZWZ0ID49IHJpZ2h0Lm1fdmVjdG9yLT5kYXRhKCkpOworICAgIElOREVYRURfSVRFUkFU
T1JfT1ZFUkZMT1cobGVmdCA8PSByaWdodC5tX3ZlY3Rvci0+ZW5kKCkuZ2V0KCkpOworICAgIHJl
dHVybiBsZWZ0IC0gcmlnaHQuZ2V0KCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBl
bmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9w
ZXJhdG9yPT0oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVU
eXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPT0gbGVm
dDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWYWx1ZVR5
cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFu
ZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA9PSBsZWZ0OworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhl
ZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAg
cmV0dXJuIHJpZ2h0ICE9IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFs
dWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgIT0g
bGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I8PShWYWx1ZVR5cGUq
IGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxl
cj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA+PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+
CitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5k
ZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7Cisg
ICAgcmV0dXJuIHJpZ2h0ID49IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBl
bmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9w
ZXJhdG9yPj0oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVU
eXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPD0gbGVm
dDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBWYWx1ZVR5
cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFu
ZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA8PSBsZWZ0OworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVk
SXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICBy
ZXR1cm4gcmlnaHQgPiBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRv
cjwoY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVU
eXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPiBsZWZ0
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oVmFsdWVUeXBlKiBsZWZ0
LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiBy
aWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPCBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Citpbmxp
bmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRl
cmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1
cm4gcmlnaHQgPCBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmVjdG9yVHlwZSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiBzdHJ1Y3QgSW5kZXhlZEl0ZXJhdG9yU2VsZWN0b3Igewor
ICAgIHR5cGVkZWYgdHlwZW5hbWUgVmVjdG9yVHlwZTo6VmFsdWVUeXBlIFZhbHVlVHlwZTsKKyAg
ICB0eXBlZGVmIEluZGV4ZWRJdGVyYXRvcjxWZWN0b3JUeXBlLCBWYWx1ZVR5cGUsIE92ZXJmbG93
SGFuZGxlcj4gaXRlcmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcjo6Y29uc3Rf
aXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgc3RhdGljIGl0ZXJhdG9yIG1ha2VJdGVyYXRv
cihWZWN0b3JUeXBlJiB2ZWN0b3IsIFZhbHVlVHlwZSogcCkgeyByZXR1cm4gaXRlcmF0b3IodmVj
dG9yLCBwKTsgfQorICAgIHN0YXRpYyBjb25zdF9pdGVyYXRvciBtYWtlQ29uc3RJdGVyYXRvcihj
b25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IsIGNvbnN0IFZhbHVlVHlwZSogcCkgeyByZXR1cm4gY29u
c3RfaXRlcmF0b3IodmVjdG9yLCBwKTsgfQorfTsKKworI3VuZGVmIElOREVYRURfSVRFUkFUT1Jf
T1ZFUkZMT1cKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JlZkNv
dW50ZWRBcnJheS5oIGIvU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5LmgKaW5kZXggYTU1
ZDdhZWVhYjg0YjljNDk1MTk2ZThlMjMwYTFkYzE3ODUxOTNhYi4uODExZTlmZmNlYTMzN2E2Yzdk
OGIyOTE2MzBlMmFmZGY4ZTU2NjM5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmVmQ291
bnRlZEFycmF5LmgKKysrIGIvU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5LmgKQEAgLTgz
LDcgKzgzLDcgQEAgcHVibGljOgogICAgICAgICBIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSkt
PnJlZkNvdW50ID0gMTsKICAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5sZW5n
dGggPSBvdGhlci5zaXplKCk7CiAgICAgICAgIEFTU0VSVChIZWFkZXI6OmZyb21QYXlsb2FkKG1f
ZGF0YSktPmxlbmd0aCA9PSBvdGhlci5zaXplKCkpOwotICAgICAgICBWZWN0b3JUeXBlT3BlcmF0
aW9uczxUPjo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCksIG1f
ZGF0YSk7CisgICAgICAgIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+Ojp1bmluaXRpYWxpemVkQ29w
eShnZXRQdHIob3RoZXIuYmVnaW4oKSksIGdldFB0cihvdGhlci5lbmQoKSksIG1fZGF0YSk7CiAg
ICAgfQogICAgIAogICAgIFJlZkNvdW50ZWRBcnJheSYgb3BlcmF0b3I9KGNvbnN0IFJlZkNvdW50
ZWRBcnJheSYgb3RoZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaCBiL1Nv
dXJjZS9XVEYvd3RmL1ZlY3Rvci5oCmluZGV4IDI3NDU2OGE2OTFjNjRhMDM0MjNhNGYyYjczNDg3
N2U2MjA3MmQ5MWUuLjRhYWE0OGFjMjRhNDJmZTk5YTgwOGVhN2IxZWQyYjhkMDgyMmMwMDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1Zl
Y3Rvci5oCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3
dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvSW5kZXhlZEl0ZXJhdG9yLmg+CiAj
aW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgog
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTU1NCwxNCArNTU2LDE3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5ID0gMCwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyID0gQ3JhCiBjbGFzcyBWZWN0b3IgOiBwcml2YXRlIFZlY3RvckJ1ZmZlcjxU
LCBpbmxpbmVDYXBhY2l0eT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHJpdmF0
ZToKKwogICAgIHR5cGVkZWYgVmVjdG9yQnVmZmVyPFQsIGlubGluZUNhcGFjaXR5PiBCYXNlOwog
ICAgIHR5cGVkZWYgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD4gVHlwZU9wZXJhdGlvbnM7CisgICAg
dHlwZWRlZiBJbmRleGVkSXRlcmF0b3JTZWxlY3RvcjxWZWN0b3IsIE92ZXJmbG93SGFuZGxlcj4g
SXRlcmF0b3JTZWxlY3RvcjsKIAogcHVibGljOgogICAgIHR5cGVkZWYgVCBWYWx1ZVR5cGU7CiAK
LSAgICB0eXBlZGVmIFQqIGl0ZXJhdG9yOwotICAgIHR5cGVkZWYgY29uc3QgVCogY29uc3RfaXRl
cmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBJdGVyYXRvclNlbGVjdG9yOjppdGVyYXRvciBp
dGVyYXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEl0ZXJhdG9yU2VsZWN0b3I6OmNvbnN0X2l0
ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworCiAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0
b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CiAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2Vf
aXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAKQEAgLTU3
NCwxNCArNTc5LDE0IEBAIHB1YmxpYzoKICAgICAgICAgOiBCYXNlKHNpemUsIHNpemUpCiAgICAg
ewogICAgICAgICBpZiAoYmVnaW4oKSkKLSAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0
aWFsaXplKGJlZ2luKCksIGVuZCgpKTsKKyAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0
aWFsaXplKGdldFB0cihiZWdpbigpKSwgZ2V0UHRyKGVuZCgpKSk7CiAgICAgfQogCiAgICAgVmVj
dG9yKHVuc2lnbmVkIHNpemUsIGNvbnN0IFQmIHZhbCkKICAgICAgICAgOiBCYXNlKHNpemUsIHNp
emUpCiAgICAgewogICAgICAgICBpZiAoYmVnaW4oKSkKLSAgICAgICAgICAgIFR5cGVPcGVyYXRp
b25zOjp1bmluaXRpYWxpemVkRmlsbChiZWdpbigpLCBlbmQoKSwgdmFsKTsKKyAgICAgICAgICAg
IFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkRmlsbChnZXRQdHIoYmVnaW4oKSksIGdldFB0
cihlbmQoKSksIHZhbCk7CiAgICAgfQogCiAgICAgVmVjdG9yKHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxUPiBpbml0aWFsaXplckxpc3QpCkBAIC02NDUsMTAgKzY1MCwxMCBAQCBwdWJsaWM6CiAgICAg
Y29uc3QgVCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIEJhc2U6OmJ1ZmZlcigpOyB9CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBkYXRhTWVtb3J5T2Zmc2V0KCkgeyByZXR1cm4gQmFzZTo6YnVmZmVyTWVt
b3J5T2Zmc2V0KCk7IH0KIAotICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gZGF0YSgpOyB9
Ci0gICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gYmVnaW4oKSArIG1fc2l6ZTsgfQotICAgIGNv
bnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gZGF0YSgpOyB9Ci0gICAgY29uc3Rf
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSArIG1fc2l6ZTsgfQorICAgIGl0
ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gSXRlcmF0b3JTZWxlY3Rvcjo6bWFrZUl0ZXJhdG9yKCp0
aGlzLCBkYXRhKCkpOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gYmVnaW4oKSArIHNp
emUoKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gSXRlcmF0
b3JTZWxlY3Rvcjo6bWFrZUNvbnN0SXRlcmF0b3IoKnRoaXMsIGRhdGEoKSk7IH0KKyAgICBjb25z
dF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBiZWdpbigpICsgc2l6ZSgpOyB9CiAKICAg
ICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5k
KCkpOyB9CiAgICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVy
YXRvcihiZWdpbigpKTsgfQpAQCAtNjgzLDYgKzY4OCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
Y2xlYXIoKSB7IHNocmlua0NhcGFjaXR5KDApOyB9CiAKKyAgICB2b2lkIGFwcGVuZChjb25zdF9p
dGVyYXRvciwgdW5zaWduZWQpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5k
KGNvbnN0IFUqLCB1bnNpZ25lZCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCBhcHBl
bmQoVSYmKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIHVuY2hlY2tlZEFwcGVuZChV
JiYgdmFsKTsKQEAgLTc0Niw3ICs3NTIsNyBAQCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlcj46OlZlY3Rvcihjb25zdCBWZWN0b3ImIG90aGVyKQogICAgIDogQmFzZShv
dGhlci5jYXBhY2l0eSgpLCBvdGhlci5zaXplKCkpCiB7CiAgICAgaWYgKGJlZ2luKCkpCi0gICAg
ICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpLCBvdGhl
ci5lbmQoKSwgYmVnaW4oKSk7CisgICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVk
Q29weShnZXRQdHIob3RoZXIuYmVnaW4oKSksIGdldFB0cihvdGhlci5lbmQoKSksIGdldFB0cihi
ZWdpbigpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CkBAIC03NTUsNyArNzYxLDcgQEAgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpWZWN0b3IoY29uc3QgVmVjdG9y
PFQsIG90aGVyQ2FwYWNpdHkKICAgICA6IEJhc2Uob3RoZXIuY2FwYWNpdHkoKSwgb3RoZXIuc2l6
ZSgpKQogewogICAgIGlmIChiZWdpbigpKQotICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0
aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCksIGJlZ2luKCkpOworICAgICAg
ICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkp
LCBnZXRQdHIob3RoZXIuZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyPgpAQCAtNzcyLDggKzc3OCw4IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyPiYgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhCiAgICAgICAg
IEFTU0VSVChiZWdpbigpKTsKICAgICB9CiAgICAgCi0gICAgc3RkOjpjb3B5KG90aGVyLmJlZ2lu
KCksIG90aGVyLmJlZ2luKCkgKyBzaXplKCksIGJlZ2luKCkpOwotICAgIFR5cGVPcGVyYXRpb25z
Ojp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpICsgc2l6ZSgpLCBvdGhlci5lbmQoKSwg
ZW5kKCkpOworICAgIHN0ZDo6Y29weShnZXRQdHIob3RoZXIuYmVnaW4oKSksIGdldFB0cihvdGhl
ci5iZWdpbigpICsgc2l6ZSgpKSwgZ2V0UHRyKGJlZ2luKCkpKTsKKyAgICBUeXBlT3BlcmF0aW9u
czo6dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkgKyBzaXplKCkpLCBnZXRQ
dHIob3RoZXIuZW5kKCkpLCBnZXRQdHIoZW5kKCkpKTsKICAgICBtX3NpemUgPSBvdGhlci5zaXpl
KCk7CiAKICAgICByZXR1cm4gKnRoaXM7CkBAIC03OTcsOSArODAzLDkgQEAgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+JiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGEKICAgICAgICAgcmVzZXJ2ZUNhcGFjaXR5KG90aGVyLnNpemUoKSk7CiAgICAg
ICAgIEFTU0VSVChiZWdpbigpKTsKICAgICB9Ci0gICAgCi0gICAgc3RkOjpjb3B5KG90aGVyLmJl
Z2luKCksIG90aGVyLmJlZ2luKCkgKyBzaXplKCksIGJlZ2luKCkpOwotICAgIFR5cGVPcGVyYXRp
b25zOjp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpICsgc2l6ZSgpLCBvdGhlci5lbmQo
KSwgZW5kKCkpOworCisgICAgc3RkOjpjb3B5KGdldFB0cihvdGhlci5iZWdpbigpKSwgZ2V0UHRy
KG90aGVyLmJlZ2luKCkgKyBzaXplKCkpLCBnZXRQdHIoYmVnaW4oKSkpOworICAgIFR5cGVPcGVy
YXRpb25zOjp1bmluaXRpYWxpemVkQ29weShnZXRQdHIob3RoZXIuYmVnaW4oKSArIHNpemUoKSks
IGdldFB0cihvdGhlci5lbmQoKSksIGdldFB0cihlbmQoKSkpOwogICAgIG1fc2l6ZSA9IG90aGVy
LnNpemUoKTsKIAogICAgIHJldHVybiAqdGhpczsKQEAgLTg1OSw4ICs4NjUsOCBAQCB2b2lkIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6ZmlsbChjb25zdCBUJiB2
YWwsIHVuc2lnbmVkIG5ldwogICAgICAgICBBU1NFUlQoYmVnaW4oKSk7CiAgICAgfQogICAgIAot
ICAgIHN0ZDo6ZmlsbChiZWdpbigpLCBlbmQoKSwgdmFsKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6
dW5pbml0aWFsaXplZEZpbGwoZW5kKCksIGJlZ2luKCkgKyBuZXdTaXplLCB2YWwpOworICAgIHN0
ZDo6ZmlsbChnZXRQdHIoYmVnaW4oKSksIGdldFB0cihlbmQoKSksIHZhbCk7CisgICAgVHlwZU9w
ZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRGaWxsKGdldFB0cihlbmQoKSksIGdldFB0cihiZWdpbigp
KSArIG5ld1NpemUsIHZhbCk7CiAgICAgbV9zaXplID0gbmV3U2l6ZTsKIH0KIApAQCAtODgxLDEz
ICs4ODcsMTMgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
cj46OmV4cGFuZENhcGFjaXR5KHVuc2lnbmVkIG5ld01pbkMKIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CiBUKiBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmV4cGFuZENhcGFjaXR5
KHVuc2lnbmVkIG5ld01pbkNhcGFjaXR5LCBUKiBwdHIpCiB7Ci0gICAgaWYgKHB0ciA8IGJlZ2lu
KCkgfHwgcHRyID49IGVuZCgpKSB7CisgICAgaWYgKHB0ciA8IGdldFB0cihiZWdpbigpKSB8fCBw
dHIgPj0gZ2V0UHRyKGVuZCgpKSkgewogICAgICAgICBleHBhbmRDYXBhY2l0eShuZXdNaW5DYXBh
Y2l0eSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQotICAgIHVuc2lnbmVkIGluZGV4ID0g
cHRyIC0gYmVnaW4oKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IHB0ciAtIGdldFB0cihiZWdpbigp
KTsKICAgICBleHBhbmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0eSk7Ci0gICAgcmV0dXJuIGJlZ2lu
KCkgKyBpbmRleDsKKyAgICByZXR1cm4gZ2V0UHRyKGJlZ2luKCkpICsgaW5kZXg7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXI+CkBAIC04OTksMTUgKzkwNSwxNSBAQCBib29sIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6dHJ5RXhwYW5kQ2FwYWNpdHkodW5zaWduZWQgbmV3
TQogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlcj4KIGNvbnN0IFQqIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyPjo6dHJ5RXhwYW5kQ2FwYWNpdHkodW5zaWduZWQgbmV3TWluQ2FwYWNpdHks
IGNvbnN0IFQqIHB0cikKIHsKLSAgICBpZiAocHRyIDwgYmVnaW4oKSB8fCBwdHIgPj0gZW5kKCkp
IHsKKyAgICBpZiAocHRyIDwgZ2V0UHRyKGJlZ2luKCkpIHx8IHB0ciA+PSBnZXRQdHIoZW5kKCkp
KSB7CiAgICAgICAgIGlmICghdHJ5RXhwYW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpKQogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQotICAgIHVuc2ln
bmVkIGluZGV4ID0gcHRyIC0gYmVnaW4oKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IHB0ciAtIGdl
dFB0cihiZWdpbigpKTsKICAgICBpZiAoIXRyeUV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGJlZ2luKCkgKyBpbmRleDsKKyAgICBy
ZXR1cm4gZ2V0UHRyKGJlZ2luKCkpICsgaW5kZXg7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHRlbXBs
YXRlPHR5cGVuYW1lIFU+CkBAIC05MjEsMTIgKzkyNywxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogaW5s
aW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpyZXNp
emUodW5zaWduZWQgc2l6ZSkKIHsKICAgICBpZiAoc2l6ZSA8PSBtX3NpemUpCi0gICAgICAgIFR5
cGVPcGVyYXRpb25zOjpkZXN0cnVjdChiZWdpbigpICsgc2l6ZSwgZW5kKCkpOworICAgICAgICBU
eXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QoZ2V0UHRyKGJlZ2luKCkpICsgc2l6ZSwgZ2V0UHRyKGVu
ZCgpKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChzaXplID4gY2FwYWNpdHkoKSkKICAgICAg
ICAgICAgIGV4cGFuZENhcGFjaXR5KHNpemUpOwogICAgICAgICBpZiAoYmVnaW4oKSkKLSAgICAg
ICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0aWFsaXplKGVuZCgpLCBiZWdpbigpICsgc2l6ZSk7
CisgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShnZXRQdHIoZW5kKCkpLCBn
ZXRQdHIoYmVnaW4oKSkgKyBzaXplKTsKICAgICB9CiAgICAgCiAgICAgbV9zaXplID0gc2l6ZTsK
QEAgLTk0Myw3ICs5NDksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVD
YXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnNocmluayh1bnNpZ25lZCBzaXplKQogewogICAg
IEFTU0VSVChzaXplIDw9IG1fc2l6ZSk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0KGJl
Z2luKCkgKyBzaXplLCBlbmQoKSk7CisgICAgVHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0KGdldFB0
cihiZWdpbigpKSArIHNpemUsIGdldFB0cihlbmQoKSkpOwogICAgIG1fc2l6ZSA9IHNpemU7CiB9
CiAKQEAgLTk1NCw3ICs5NjAsNyBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyPjo6Z3Jvdyh1bnNpZ25lZCBzaXplKQogICAgIGlmIChzaXplID4gY2FwYWNp
dHkoKSkKICAgICAgICAgZXhwYW5kQ2FwYWNpdHkoc2l6ZSk7CiAgICAgaWYgKGJlZ2luKCkpCi0g
ICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0aWFsaXplKGVuZCgpLCBiZWdpbigpICsgc2l6ZSk7
CisgICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0aWFsaXplKGdldFB0cihlbmQoKSksIGdldFB0
cihiZWdpbigpKSArIHNpemUpOwogICAgIG1fc2l6ZSA9IHNpemU7CiB9CiAKQEAgLTk2MywxMSAr
OTY5LDExIEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+
OjpyZXNlcnZlQ2FwYWNpdHkodW5zaWduZWQgbmV3Q2FwCiB7CiAgICAgaWYgKG5ld0NhcGFjaXR5
IDw9IGNhcGFjaXR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBUKiBvbGRCdWZmZXIgPSBiZWdp
bigpOwotICAgIFQqIG9sZEVuZCA9IGVuZCgpOworICAgIFQqIG9sZEJ1ZmZlciA9IGdldFB0cihi
ZWdpbigpKTsKKyAgICBUKiBvbGRFbmQgPSBnZXRQdHIoZW5kKCkpOwogICAgIEJhc2U6OmFsbG9j
YXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKICAgICBBU1NFUlQoYmVnaW4oKSk7Ci0gICAgVHlwZU9w
ZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOworICAgIFR5cGVPcGVy
YXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBnZXRQdHIoYmVnaW4oKSkpOwogICAgIEJh
c2U6OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKIH0KIApAQCAtOTc2LDEyICs5ODIsMTIg
QEAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnRyeVJl
c2VydmVDYXBhY2l0eSh1bnNpZ25lZCBuZXcKIHsKICAgICBpZiAobmV3Q2FwYWNpdHkgPD0gY2Fw
YWNpdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgVCogb2xkQnVmZmVyID0gYmVnaW4o
KTsKLSAgICBUKiBvbGRFbmQgPSBlbmQoKTsKKyAgICBUKiBvbGRCdWZmZXIgPSBnZXRQdHIoYmVn
aW4oKSk7CisgICAgVCogb2xkRW5kID0gZ2V0UHRyKGVuZCgpKTsKICAgICBpZiAoIUJhc2U6OnRy
eUFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IEFTU0VSVChiZWdpbigpKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShvbGRCdWZmZXIsIG9s
ZEVuZCwgYmVnaW4oKSk7CisgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRF
bmQsIGdldFB0cihiZWdpbigpKSk7CiAgICAgQmFzZTo6ZGVhbGxvY2F0ZUJ1ZmZlcihvbGRCdWZm
ZXIpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTAwNCwxNyArMTAxMCwxNyBAQCB2b2lkIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6c2hyaW5rQ2FwYWNpdHko
dW5zaWduZWQgbmV3Q2FwYQogICAgIGlmIChuZXdDYXBhY2l0eSA8IHNpemUoKSkgCiAgICAgICAg
IHNocmluayhuZXdDYXBhY2l0eSk7CiAKLSAgICBUKiBvbGRCdWZmZXIgPSBiZWdpbigpOworICAg
IFQqIG9sZEJ1ZmZlciA9IGdldFB0cihiZWdpbigpKTsKICAgICBpZiAobmV3Q2FwYWNpdHkgPiAw
KSB7CiAgICAgICAgIGlmIChCYXNlOjpzaG91bGRSZWFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5
KSkgewogICAgICAgICAgICAgQmFzZTo6cmVhbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBUKiBvbGRFbmQgPSBlbmQo
KTsKKyAgICAgICAgVCogb2xkRW5kID0gZ2V0UHRyKGVuZCgpKTsKICAgICAgICAgQmFzZTo6YWxs
b2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpOwotICAgICAgICBpZiAoYmVnaW4oKSAhPSBvbGRCdWZm
ZXIpCi0gICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShvbGRCdWZmZXIsIG9sZEVuZCwg
YmVnaW4oKSk7CisgICAgICAgIGlmIChnZXRQdHIoYmVnaW4oKSkgIT0gb2xkQnVmZmVyKQorICAg
ICAgICAgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGdldFB0cihi
ZWdpbigpKSk7CiAgICAgfQogCiAgICAgQmFzZTo6ZGVhbGxvY2F0ZUJ1ZmZlcihvbGRCdWZmZXIp
OwpAQCAtMTAzNCwxMSArMTA0MCwxNyBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kKGNvbnN0IFUqIGRhdGEsIHVuc2lnbmVkCiAgICAgfQog
ICAgIGlmIChuZXdTaXplIDwgbV9zaXplKQogICAgICAgICBDUkFTSCgpOwotICAgIFQqIGRlc3Qg
PSBlbmQoKTsKKyAgICBUKiBkZXN0ID0gZ2V0UHRyKGVuZCgpKTsKICAgICBWZWN0b3JDb3BpZXI8
c3RkOjppc190cml2aWFsPFQ+Ojp2YWx1ZSwgVT46OnVuaW5pdGlhbGl6ZWRDb3B5KGRhdGEsICZk
YXRhW2RhdGFTaXplXSwgZGVzdCk7CiAgICAgbV9zaXplID0gbmV3U2l6ZTsKIH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4KK3ZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+
OjphcHBlbmQoY29uc3RfaXRlcmF0b3IgZGF0YSwgdW5zaWduZWQgZGF0YVNpemUpCit7CisgICAg
YXBwZW5kKGdldFB0cihkYXRhKSwgZGF0YVNpemUpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPgogYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlcj46OnRyeUFwcGVuZChjb25zdCBVKiBkYXRhLCB1bnNpZ25lZCBkYXRhU2l6ZSkKIHsK
QEAgLTEwNTEsNyArMTA2Myw3IEBAIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXI+Ojp0cnlBcHBlbmQoY29uc3QgVSogZGF0YSwgdW5zaWduCiAgICAgfQogICAg
IGlmIChuZXdTaXplIDwgbV9zaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgVCogZGVz
dCA9IGVuZCgpOworICAgIFQqIGRlc3QgPSBnZXRQdHIoZW5kKCkpOwogICAgIFZlY3RvckNvcGll
cjxzdGQ6OmlzX3RyaXZpYWw8VD46OnZhbHVlLCBVPjo6dW5pbml0aWFsaXplZENvcHkoZGF0YSwg
JmRhdGFbZGF0YVNpemVdLCBkZXN0KTsKICAgICBtX3NpemUgPSBuZXdTaXplOwogICAgIHJldHVy
biB0cnVlOwpAQCAtMTA2MSw3ICsxMDczLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWdu
ZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGUKIEFM
V0FZU19JTkxJTkUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
cj46OmFwcGVuZChVJiYgdmFsdWUpCiB7CiAgICAgaWYgKHNpemUoKSAhPSBjYXBhY2l0eSgpKSB7
Ci0gICAgICAgIG5ldyAoTm90TnVsbCwgZW5kKCkpIFQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
CisgICAgICAgIG5ldyAoTm90TnVsbCwgZ2V0UHRyKGVuZCgpKSkgVChzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpKTsKICAgICAgICAgKyttX3NpemU7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0x
MDc4LDcgKzEwOTAsNyBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyPjo6YXBwZW5kU2xvd0Nhc2UoVSYmIHZhbHVlKQogICAgIHB0ciA9IGV4cGFuZENhcGFj
aXR5KHNpemUoKSArIDEsIHB0cik7CiAgICAgQVNTRVJUKGJlZ2luKCkpOwogCi0gICAgbmV3IChO
b3ROdWxsLCBlbmQoKSkgVChzdGQ6OmZvcndhcmQ8VT4oKnB0cikpOworICAgIG5ldyAoTm90TnVs
bCwgZ2V0UHRyKGVuZCgpKSkgVChzdGQ6OmZvcndhcmQ8VT4oKnB0cikpOwogICAgICsrbV9zaXpl
OwogfQogCkBAIC0xMDkxLDE0ICsxMTAzLDE0IEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6dW5jaGVja2VkQXBwZW5kKFUmJiB2YWx1CiAg
ICAgQVNTRVJUKHNpemUoKSA8IGNhcGFjaXR5KCkpOwogCiAgICAgYXV0byBwdHIgPSBzdGQ6OmFk
ZHJlc3NvZih2YWx1ZSk7Ci0gICAgbmV3IChOb3ROdWxsLCBlbmQoKSkgVChzdGQ6OmZvcndhcmQ8
VT4oKnB0cikpOworICAgIG5ldyAoTm90TnVsbCwgZ2V0UHRyKGVuZCgpKSkgVChzdGQ6OmZvcndh
cmQ8VT4oKnB0cikpOwogICAgICsrbV9zaXplOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1
bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiB0ZW1wbGF0
ZTx0eXBlbmFtZSBVLCB1bnNpZ25lZCBvdGhlckNhcGFjaXR5PgogaW5saW5lIHZvaWQgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmRWZWN0b3IoY29uc3Qg
VmVjdG9yPFUsIG90aGVyQ2FwYWNpdHk+JiB2YWwpCiB7Ci0gICAgYXBwZW5kKHZhbC5iZWdpbigp
LCB2YWwuc2l6ZSgpKTsKKyAgICBhcHBlbmQoZ2V0UHRyKHZhbC5iZWdpbigpKSwgdmFsLnNpemUo
KSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CkBAIC0xMTEyLDgg
KzExMjQsOCBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
Pjo6aW5zZXJ0KHVuc2lnbmVkIHBvc2l0aW9uLCBjb25zdAogICAgIH0KICAgICBpZiAobmV3U2l6
ZSA8IG1fc2l6ZSkKICAgICAgICAgQ1JBU0goKTsKLSAgICBUKiBzcG90ID0gYmVnaW4oKSArIHBv
c2l0aW9uOwotICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCwgZW5kKCks
IHNwb3QgKyBkYXRhU2l6ZSk7CisgICAgVCogc3BvdCA9IGdldFB0cihiZWdpbigpKSArIHBvc2l0
aW9uOworICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCwgZ2V0UHRyKGVu
ZCgpKSwgc3BvdCArIGRhdGFTaXplKTsKICAgICBWZWN0b3JDb3BpZXI8c3RkOjppc190cml2aWFs
PFQ+Ojp2YWx1ZSwgVT46OnVuaW5pdGlhbGl6ZWRDb3B5KGRhdGEsICZkYXRhW2RhdGFTaXplXSwg
c3BvdCk7CiAgICAgbV9zaXplID0gbmV3U2l6ZTsKIH0KQEAgLTExMjksOCArMTE0MSw4IEBAIGlu
bGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6aW5z
ZXJ0KHVuc2lnbmVkIHBvc2l0aW9uCiAgICAgICAgIEFTU0VSVChiZWdpbigpKTsKICAgICB9CiAK
LSAgICBUKiBzcG90ID0gYmVnaW4oKSArIHBvc2l0aW9uOwotICAgIFR5cGVPcGVyYXRpb25zOjpt
b3ZlT3ZlcmxhcHBpbmcoc3BvdCwgZW5kKCksIHNwb3QgKyAxKTsKKyAgICBUKiBzcG90ID0gZ2V0
UHRyKGJlZ2luKCkpICsgcG9zaXRpb247CisgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFw
cGluZyhzcG90LCBnZXRQdHIoZW5kKCkpLCBzcG90ICsgMSk7CiAgICAgbmV3IChOb3ROdWxsLCBz
cG90KSBUKHN0ZDo6Zm9yd2FyZDxVPigqcHRyKSk7CiAgICAgKyttX3NpemU7CiB9CkBAIC0xMTM4
LDE2ICsxMTUwLDE2IEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyPjo6aW5zZXJ0KHVuc2lnbmVkIHBvc2l0aW9uCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiB0
ZW1wbGF0ZTx0eXBlbmFtZSBVLCB1bnNpZ25lZCBjPgogaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnRWZWN0b3IodW5zaWduZWQgcG9z
aXRpb24sIGNvbnN0IFZlY3RvcjxVLCBjPiYgdmFsKQogewotICAgIGluc2VydChwb3NpdGlvbiwg
dmFsLmJlZ2luKCksIHZhbC5zaXplKCkpOworICAgIGluc2VydChwb3NpdGlvbiwgZ2V0UHRyKHZh
bC5iZWdpbigpKSwgdmFsLnNpemUoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2ln
bmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CiBpbmxpbmUgdm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnJlbW92ZSh1bnNp
Z25lZCBwb3NpdGlvbikKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihw
b3NpdGlvbiA8IHNpemUoKSk7Ci0gICAgVCogc3BvdCA9IGJlZ2luKCkgKyBwb3NpdGlvbjsKKyAg
ICBUKiBzcG90ID0gZ2V0UHRyKGJlZ2luKCkpICsgcG9zaXRpb247CiAgICAgc3BvdC0+flQoKTsK
LSAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QgKyAxLCBlbmQoKSwgc3Bv
dCk7CisgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90ICsgMSwgZ2V0UHRy
KGVuZCgpKSwgc3BvdCk7CiAgICAgLS1tX3NpemU7CiB9CiAKQEAgLTExNTYsMTAgKzExNjgsMTAg
QEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+
OjpyZW1vdmUodW5zaWduZWQgcG9zaXRpb24KIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihwb3NpdGlvbiA8PSBzaXplKCkpOwogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKHBvc2l0aW9uICsgbGVuZ3RoIDw9IHNpemUoKSk7Ci0gICAgVCogYmVnaW5T
cG90ID0gYmVnaW4oKSArIHBvc2l0aW9uOworICAgIFQqIGJlZ2luU3BvdCA9IGdldFB0cihiZWdp
bigpKSArIHBvc2l0aW9uOwogICAgIFQqIGVuZFNwb3QgPSBiZWdpblNwb3QgKyBsZW5ndGg7CiAg
ICAgVHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0KGJlZ2luU3BvdCwgZW5kU3BvdCk7IAotICAgIFR5
cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoZW5kU3BvdCwgZW5kKCksIGJlZ2luU3BvdCk7
CisgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhlbmRTcG90LCBnZXRQdHIoZW5k
KCkpLCBiZWdpblNwb3QpOwogICAgIG1fc2l6ZSAtPSBsZW5ndGg7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4
IDBjZjA5ZTFmNWVjOThhODUxNDRjYzcyMmQyYTZjYzRhZTRmOTM4OTguLjNlZTgwNjhhM2E3NmE0
YTQzYWM2NDMyMzI3NzI2NDNjMTYxNDlkNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMTQzNyw4ICsxNDM3LDgg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIHB0ciA9IGJ1ZmZl
ci5iZWdpbigpOwotICAgICAgICBjb25zdCB1aW50OF90KiBlbmQgPSBidWZmZXIuZW5kKCk7Cisg
ICAgICAgIGNvbnN0IHVpbnQ4X3QqIHB0ciA9IGdldFB0cihidWZmZXIuYmVnaW4oKSk7CisgICAg
ICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IGdldFB0cihidWZmZXIuZW5kKCkpOwogICAgICAgICB1
aW50MzJfdCB2ZXJzaW9uOwogICAgICAgICBpZiAoIXJlYWRMaXR0bGVFbmRpYW4ocHRyLCBlbmQs
IHZlcnNpb24pIHx8IHZlcnNpb24gPiBDdXJyZW50VmVyc2lvbikKICAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJh
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCAy
ZDliNzllMTNhYmY5NjBhNjE0Yjk2ZDI3MDY2MGU1ZjM1ZTM0MTdmLi5lOTJmYjJmNzkwYmU0YzVj
MTY3NmM2OThjNWJlMWJhNjVlMWE2OTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRl
cmF0b3IuY3BwCkBAIC0yMDczLDExICsyMDczLDExIEBAIGlubGluZSBib29sIFNlYXJjaEJ1ZmZl
cjo6aXNCYWRNYXRjaChjb25zdCBVQ2hhciogbWF0Y2gsIHNpemVfdCBtYXRjaExlbmd0aCkgY29u
CiAgICAgLy8gY3JlYXRpbmcgYSBuZXcgb25lIGVhY2ggdGltZS4KICAgICBub3JtYWxpemVDaGFy
YWN0ZXJzKG1hdGNoLCBtYXRjaExlbmd0aCwgbV9ub3JtYWxpemVkTWF0Y2gpOwogCi0gICAgY29u
c3QgVUNoYXIqIGEgPSBtX25vcm1hbGl6ZWRUYXJnZXQuYmVnaW4oKTsKLSAgICBjb25zdCBVQ2hh
ciogYUVuZCA9IG1fbm9ybWFsaXplZFRhcmdldC5lbmQoKTsKKyAgICBjb25zdCBVQ2hhciogYSA9
IGdldFB0cihtX25vcm1hbGl6ZWRUYXJnZXQuYmVnaW4oKSk7CisgICAgY29uc3QgVUNoYXIqIGFF
bmQgPSBnZXRQdHIobV9ub3JtYWxpemVkVGFyZ2V0LmVuZCgpKTsKIAotICAgIGNvbnN0IFVDaGFy
KiBiID0gbV9ub3JtYWxpemVkTWF0Y2guYmVnaW4oKTsKLSAgICBjb25zdCBVQ2hhciogYkVuZCA9
IG1fbm9ybWFsaXplZE1hdGNoLmVuZCgpOworICAgIGNvbnN0IFVDaGFyKiBiID0gZ2V0UHRyKG1f
bm9ybWFsaXplZE1hdGNoLmJlZ2luKCkpOworICAgIGNvbnN0IFVDaGFyKiBiRW5kID0gZ2V0UHRy
KG1fbm9ybWFsaXplZE1hdGNoLmVuZCgpKTsKIAogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAg
IC8vIFNraXAgcnVucyBvZiBub24ta2FuYS1sZXR0ZXIgY2hhcmFjdGVycy4gVGhpcyBpcyBuZWNl
c3Nhcnkgc28gd2UgY2FuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlci5tbQppbmRleCAwMDk4Yzc2MzEzZjRjYzY2MGU5NjhhOTBkM2U5
MzhhOGIxYmJjOWRlLi4yMDYyZmQzZTEyMTNkODY3MTc5NmViNzM5ZThiNTZjN2UyYjdhNTk5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXIubW0KQEAgLTU1NSw3ICs1NTUsNyBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6OmJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KCkKIAogICAgICAgICBpZiAoIWNnUmVjdHMuaXNF
bXB0eSgpKSB7CiAgICAgICAgICAgICBDR1JlY3QgdmlzaWJsZVJlY3QgPSBtYWluRnJhbWVWaWV3
LT52aXNpYmxlQ29udGVudFJlY3QoKTsKLSAgICAgICAgICAgIFJldGFpblB0cjxEREhpZ2hsaWdo
dFJlZj4gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5W
aXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCBjZ1JlY3RzLmJlZ2luKCks
IGNnUmVjdHMuc2l6ZSgpLCB2aXNpYmxlUmVjdCwgRERIaWdobGlnaHROb091dGxpbmVXaXRoQXJy
b3csIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOworICAgICAgICAg
ICAgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCA9IGFkb3B0Q0YoRERIaWdo
bGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlQW5kRGlyZWN0aW9uKG51
bGxwdHIsIGNnUmVjdHMuZGF0YSgpLCBjZ1JlY3RzLnNpemUoKSwgdmlzaWJsZVJlY3QsIERESGln
aGxpZ2h0Tm9PdXRsaW5lV2l0aEFycm93LCBZRVMsIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWws
IE5PLCBZRVMpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbmV3UG90ZW50aWFsSGlnaGxp
Z2h0cy5hZGQoSGlnaGxpZ2h0OjpjcmVhdGVGb3JTZWxlY3Rpb24oKnRoaXMsIGRkSGlnaGxpZ2h0
LCBzZWxlY3Rpb25SYW5nZSkpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHAKaW5kZXggZDFiOTJiN2I2
MDliNDUxOTljODRhNDZhZWU5ZmRiNmM0ZjdjZmVjNS4uNTAzYjBlOGQ5YmJmMjkwNmNlNzNiZWJl
YmEwMWJkNjAzZWM3OTk5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNwcApAQCAtMzksOCArMzksOCBAQCBTZWdtZW50
ZWRGb250RGF0YTo6flNlZ21lbnRlZEZvbnREYXRhKCkKIAogY29uc3QgU2ltcGxlRm9udERhdGEq
IFNlZ21lbnRlZEZvbnREYXRhOjpmb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0
CiB7Ci0gICAgVmVjdG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jh
bmdlcy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBhdXRvIGVu
ZCA9IG1fcmFuZ2VzLmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoaXQtPmZyb20oKSA8PSBjICYmIGl0LT50
bygpID49IGMpCiAgICAgICAgICAgICByZXR1cm4gaXQtPmZvbnREYXRhKCkuZ2V0KCk7CiAgICAg
fQpAQCAtNDksOCArNDksOCBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogU2VnbWVudGVkRm9udERh
dGE6OmZvbnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKIAogYm9vbCBTZWdtZW50
ZWRGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAogewotICAgIFZl
Y3RvcjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYW5nZXMuZW5kKCk7
Ci0gICAgZm9yIChWZWN0b3I8Rm9udERhdGFSYW5nZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9y
YW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgYXV0byBlbmQgPSBtX3Jhbmdl
cy5lbmQoKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKICAgICAgICAgaWYgKGMgPj0gaXQtPmZyb20oKSAmJiBjIDw9IGl0LT50bygpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNzYsOCArNzYsOCBAQCBib29sIFNl
Z21lbnRlZEZvbnREYXRhOjppc0N1c3RvbUZvbnQoKSBjb25zdAogCiBib29sIFNlZ21lbnRlZEZv
bnREYXRhOjppc0xvYWRpbmcoKSBjb25zdAogewotICAgIFZlY3RvcjxGb250RGF0YVJhbmdlPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYW5nZXMuZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8Rm9u
dERhdGFSYW5nZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgYXV0byBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsKKyAgICBmb3IgKGF1
dG8gaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgaWYg
KGl0LT5mb250RGF0YSgpLT5pc0xvYWRpbmcoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dPRkZG
aWxlRm9ybWF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxl
Rm9ybWF0LmNwcAppbmRleCAwNTE4NzFhYzZjNjBmYjY0MzkyODMwYWFjNmFkMzg1MmE5NGQ0NDc2
Li5kZDA5NjNhNzUwMWFkMmVlMDYzMWE1ZTE2ZDc5NTExMTEyMjM5ZDU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCkBAIC0y
MDAsNyArMjAwLDcgQEAgYm9vbCBjb252ZXJ0V09GRlRvU2ZudChTaGFyZWRCdWZmZXIqIHdvZmYs
IFZlY3RvcjxjaGFyPiYgc2ZudCkKICAgICAgICAgICAgIHVMb25nZiBkZXN0TGVuID0gdGFibGVP
cmlnTGVuZ3RoOwogICAgICAgICAgICAgaWYgKCFzZm50LnRyeVJlc2VydmVDYXBhY2l0eShzZm50
LnNpemUoKSArIHRhYmxlT3JpZ0xlbmd0aCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgQnl0ZWYqIGRlc3QgPSByZWludGVycHJldF9jYXN0PEJ5dGVmKj4oc2Zu
dC5lbmQoKSk7CisgICAgICAgICAgICBCeXRlZiogZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Qnl0
ZWYqPihnZXRQdHIoc2ZudC5lbmQoKSkpOwogICAgICAgICAgICAgc2ZudC5ncm93KHNmbnQuc2l6
ZSgpICsgdGFibGVPcmlnTGVuZ3RoKTsKICAgICAgICAgICAgIGlmICh1bmNvbXByZXNzKGRlc3Qs
ICZkZXN0TGVuLCByZWludGVycHJldF9jYXN0PGNvbnN0IEJ5dGVmKj4od29mZi0+ZGF0YSgpICsg
dGFibGVPZmZzZXQpLCB0YWJsZUNvbXBMZW5ndGgpICE9IFpfT0spCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAppbmRleCA1MDIyYzUwYzdlZTgyNWUyNDBmMGU3
MTIyNDdjN2VmMTY0OGYzOGJkLi43NTE2YjBhY2QxNWFhZmQxMmEzNTZhZmY0ZDUwYTZjNGFhMDI0
ZjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFkaWVudENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFkaWVudENhaXJvLmNwcApAQCAtNTksNyArNTksNyBAQCBjYWlyb19wYXR0ZXJuX3Qq
IEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KGZsb2F0IGdsb2JhbEFscGhhKQogICAgIGVsc2UK
ICAgICAgICAgbV9ncmFkaWVudCA9IGNhaXJvX3BhdHRlcm5fY3JlYXRlX2xpbmVhcihtX3AwLngo
KSwgbV9wMC55KCksIG1fcDEueCgpLCBtX3AxLnkoKSk7CiAKLSAgICBWZWN0b3I8Q29sb3JTdG9w
Pjo6aXRlcmF0b3Igc3RvcEl0ZXJhdG9yID0gbV9zdG9wcy5iZWdpbigpOworICAgIGF1dG8gc3Rv
cEl0ZXJhdG9yID0gbV9zdG9wcy5iZWdpbigpOwogICAgIHdoaWxlIChzdG9wSXRlcmF0b3IgIT0g
bV9zdG9wcy5lbmQoKSkgewogICAgICAgICBjYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3Jn
YmEobV9ncmFkaWVudCwgc3RvcEl0ZXJhdG9yLT5zdG9wLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RvcEl0ZXJhdG9yLT5yZWQsIHN0b3BJdGVyYXRvci0+Z3Jl
ZW4sIHN0b3BJdGVyYXRvci0+Ymx1ZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKaW5kZXgg
ZGU0NTUwOTRhMGJjZjdjOWRkM2IzOWU0Zjg4ZTAyYzUwOWRlZWM4NS4uM2E5MzFkZGJhZDRmYmE1
ZWU5YWRlOGI2ZmFiNzA0ZWI1YWUwMDNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAK
QEAgLTE0NSw3ICsxNDUsNyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZl
ckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKQogICAgIC8vIGFsd2F5cyB1c2UgSW1hZ2VT
b3VyY2U6OmNsZWFyKHRydWUsIC4uLikgdG8gY29tcGxldGVseSBmcmVlIHRoZSBtZW1vcnkgaW4K
ICAgICAvLyB0aGlzIGNhc2UuCiAgICAgY2xlYXJCZWZvcmVGcmFtZSA9IHN0ZDo6bWluKGNsZWFy
QmVmb3JlRnJhbWUsIG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgLSAxKTsKLSAgICBjb25zdCBW
ZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGVuZChtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4o
KSArIGNsZWFyQmVmb3JlRnJhbWUpOworICAgIGNvbnN0IGF1dG8gZW5kID0gbV9mcmFtZUJ1ZmZl
ckNhY2hlLmJlZ2luKCkgKyBjbGVhckJlZm9yZUZyYW1lOwogCiAgICAgLy8gV2UgbmVlZCB0byBw
cmVzZXJ2ZSBmcmFtZXMgc3VjaCB0aGF0OgogICAgIC8vICAgKiBXZSBkb24ndCBjbGVhciB8ZW5k
fApAQCAtMTY1LDE0ICsxNjUsMTQgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVC
dWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkKICAgICAvLyAgICogSWYgdGhlIGZy
YW1lIGlzIHBhcnRpYWwsIHdlJ3JlIGRlY29kaW5nIGl0LCBzbyBkb24ndCBjbGVhciBpdDsgaWYg
aXQKICAgICAvLyAgICAgaGFzIGEgZGlzcG9zYWwgbWV0aG9kIG90aGVyIHRoYW4gRGlzcG9zZU92
ZXJ3cml0ZVByZXZpb3VzLCBzdG9wCiAgICAgLy8gICAgIHNjYW5uaW5nLCBhcyB3ZSdsbCBvbmx5
IG5lZWQgdGhpcyBmcmFtZSB3aGVuIGRlY29kaW5nIHRoZSBuZXh0IG9uZS4KLSAgICBWZWN0b3I8
SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGkoZW5kKTsKKyAgICBhdXRvIGkgPSBlbmQ7CiAgICAgZm9y
ICg7IChpICE9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKSAmJiAoKGktPnN0YXR1cygpID09
IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHx8IChpLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdl
RnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cykpOyAtLWkpIHsKICAgICAgICAgaWYgKChp
LT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKSAmJiAoaSAhPSBlbmQpKQog
ICAgICAgICAgICAgaS0+Y2xlYXJQaXhlbERhdGEoKTsKICAgICB9CiAKICAgICAvLyBOb3cgfGl8
IGhvbGRzIHRoZSBsYXN0IGZyYW1lIHdlIG5lZWQgdG8gcHJlc2VydmU7IGNsZWFyIHByaW9yIGZy
YW1lcy4KLSAgICBmb3IgKFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0b3IgaihtX2ZyYW1lQnVm
ZmVyQ2FjaGUuYmVnaW4oKSk7IGogIT0gaTsgKytqKSB7CisgICAgZm9yIChhdXRvIGogPSBtX2Zy
YW1lQnVmZmVyQ2FjaGUuYmVnaW4oKTsgaiAhPSBpOyArK2opIHsKICAgICAgICAgQVNTRVJUKGot
PnN0YXR1cygpICE9IEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIGlmIChqLT5z
dGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KQogICAgICAgICAgICAgai0+Y2xlYXJQ
aXhlbERhdGEoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggZTQ4
ZWI5YjY3NWRjOWQyMTc1OTkyNGM4ODA1YWZhMGI4OWI0OTgzNy4uZTlmYjVmYTNjZGExNDcxZWM2
ZWJhYmI3NGE5NjAxZWZmNGMzNTQzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAKQEAgLTE1NzcsOCArMTU3Nyw4IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEZpbGxMYXll
cnMoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IENvbG9yJiBjLCBjb25zCiAgICAg
ICAgIGNvbnRleHQtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoMSk7CiAgICAgfQogCi0gICAgVmVj
dG9yPGNvbnN0IEZpbGxMYXllcio+Ojpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHRvcExheWVyID0g
bGF5ZXJzLnJlbmQoKTsKLSAgICBmb3IgKFZlY3Rvcjxjb25zdCBGaWxsTGF5ZXIqPjo6Y29uc3Rf
cmV2ZXJzZV9pdGVyYXRvciBpdCA9IGxheWVycy5yYmVnaW4oKTsgaXQgIT0gdG9wTGF5ZXI7ICsr
aXQpCisgICAgYXV0byB0b3BMYXllciA9IGxheWVycy5yZW5kKCk7CisgICAgZm9yIChhdXRvIGl0
ID0gbGF5ZXJzLnJiZWdpbigpOyBpdCAhPSB0b3BMYXllcjsgKytpdCkKICAgICAgICAgcGFpbnRG
aWxsTGF5ZXIocGFpbnRJbmZvLCBjLCAqaXQsIHJlY3QsIGJsZWVkQXZvaWRhbmNlLCBvcCwgYmFj
a2dyb3VuZE9iamVjdCwgYmFzZUJnQ29sb3JVc2FnZSk7CiAKICAgICBpZiAoc2hvdWxkRHJhd0Jh
Y2tncm91bmRJblNlcGFyYXRlQnVmZmVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHAKaW5kZXggY2NkYzJhM2RjNmRh
MmQ2NTM0YTdlYjYzNTA5ZTZiNDNiYWExZmQ3MS4uZGMwOTUwOTljMDRlM2E4MmM0M2MzZTAyNmNk
ZGVhZGU4ZDViZTMwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwCkBAIC0yOTUsNyArMjk1LDcgQEAgc3RhdGlj
IGlubGluZSB1bnNpZ25lZCBmaXJzdE5hbWVkR3JpZExpbmVCZWZvcmVQb3NpdGlvbih1bnNpZ25l
ZCBwb3NpdGlvbiwgY29uc3QKICAgICAvLyBhbHJlYWR5IGNvbnZlcnRlZCB0byBhbiBpbmRleCBp
biBvdXIgZ3JpZCByZXByZXNlbnRhdGlvbiAoaWUgb25lIHdhcyByZW1vdmVkIGZyb20gdGhlIGdy
aWQgbGluZSB0byBhY2NvdW50IGZvcgogICAgIC8vIHRoZSBzaWRlKS4KICAgICB1bnNpZ25lZCBm
aXJzdExpbmVCZWZvcmVQb3NpdGlvbkluZGV4ID0gMDsKLSAgICBjb25zdCB1bnNpZ25lZCogZmly
c3RMaW5lQmVmb3JlUG9zaXRpb24gPSBzdGQ6Omxvd2VyX2JvdW5kKGdyaWRMaW5lcy5iZWdpbigp
LCBncmlkTGluZXMuZW5kKCksIHBvc2l0aW9uKTsKKyAgICBhdXRvIGZpcnN0TGluZUJlZm9yZVBv
c2l0aW9uID0gc3RkOjpsb3dlcl9ib3VuZChncmlkTGluZXMuYmVnaW4oKSwgZ3JpZExpbmVzLmVu
ZCgpLCBwb3NpdGlvbik7CiAgICAgaWYgKGZpcnN0TGluZUJlZm9yZVBvc2l0aW9uICE9IGdyaWRM
aW5lcy5lbmQoKSkgewogICAgICAgICBpZiAoKmZpcnN0TGluZUJlZm9yZVBvc2l0aW9uID4gcG9z
aXRpb24gJiYgZmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gIT0gZ3JpZExpbmVzLmJlZ2luKCkpCiAg
ICAgICAgICAgICAtLWZpcnN0TGluZUJlZm9yZVBvc2l0aW9uOwpAQCAtMzE2LDkgKzMxNiw4IEBA
IHN0ZDo6dW5pcXVlX3B0cjxHcmlkU3Bhbj4gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVS
b3dTdGFydENvbHVtblN0YXJ0TmFtZWRHCiAKIHN0ZDo6dW5pcXVlX3B0cjxHcmlkU3Bhbj4gR3Jp
ZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVSb3dFbmRDb2x1bW5FbmROYW1lZEdyaWRMaW5lUG9z
aXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYg
cmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBj
b25zdCBWZWN0b3I8dW5zaWduZWQ+JiBncmlkTGluZXMpCiB7Ci0gICAgQVNTRVJUKGdyaWRMaW5l
cy5zaXplKCkpOwogICAgIHVuc2lnbmVkIGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbklu
ZGV4ID0gZ3JpZExpbmVzLnNpemUoKSAtIDE7Ci0gICAgY29uc3QgdW5zaWduZWQqIGZpcnN0TGlu
ZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbiA9IHN0ZDo6dXBwZXJfYm91bmQoZ3JpZExpbmVzLmJlZ2lu
KCksIGdyaWRMaW5lcy5lbmQoKSwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKTsKKyAgICBhdXRv
IGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbiA9IHN0ZDo6dXBwZXJfYm91bmQoZ3JpZExp
bmVzLmJlZ2luKCksIGdyaWRMaW5lcy5lbmQoKSwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKTsK
ICAgICBpZiAoZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uICE9IGdyaWRMaW5lcy5lbmQo
KSkKICAgICAgICAgZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uSW5kZXggPSBmaXJzdExp
bmVBZnRlck9wcG9zaXRlUG9zaXRpb24gLSBncmlkTGluZXMuYmVnaW4oKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGb250RWxlbWVudC5jcHAKaW5kZXggYzMzZmZiNzdiNmQ4Zjk5NTdiMTI2ZjFiZjM5
MTdhODU3ZmRmYjUwZS4uYTBiZjUwMTkxYjZhYjk1ODE2MThkOTUzYzA4OTBkMjEyZWI3YjM2MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwCkBAIC0yNTIsMzEgKzI1MiwzMSBA
QCBzdGF0aWMgaW5saW5lIGZsb2F0IGtlcm5pbmdGb3JQYWlyT2ZTdHJpbmdzQW5kR2x5cGhzKGNv
bnN0IFNWR0tlcm5pbmdNYXAmIGtlcm5pbgogewogICAgIGlmICghZzEuaXNFbXB0eSgpICYmIGtl
cm5pbmdNYXAuZ2x5cGhNYXAuY29udGFpbnMoZzEpKSB7CiAgICAgICAgIFNWR0tlcm5pbmdWZWN0
b3IqIGtlcm5pbmdWZWN0b3IgPSBrZXJuaW5nTWFwLmdseXBoTWFwLmdldChnMSk7Ci0gICAgICAg
IFNWR0tlcm5pbmdWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0ga2VybmluZ1ZlY3Rvci0+ZW5k
KCkgLSAxOwotICAgICAgICBjb25zdCBTVkdLZXJuaW5nVmVjdG9yOjpjb25zdF9pdGVyYXRvciBi
ZWdpbiA9IGtlcm5pbmdWZWN0b3ItPmJlZ2luKCkgLSAxOwotICAgICAgICBmb3IgKDsgaXQgIT0g
YmVnaW47IC0taXQpIHsKLSAgICAgICAgICAgIGlmIChtYXRjaGVzKHUyLCBnMiwgKml0KSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gaXQtPmtlcm5pbmc7CisgICAgICAgIHNpemVfdCBpdCA9IGtl
cm5pbmdWZWN0b3ItPnNpemUoKTsKKyAgICAgICAgd2hpbGUgKGl0LS0gPiAwKSB7CisgICAgICAg
ICAgICBhdXRvJiB2YWx1ZSA9IGtlcm5pbmdWZWN0b3ItPmF0KGl0KTsKKyAgICAgICAgICAgIGlm
IChtYXRjaGVzKHUyLCBnMiwgdmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5r
ZXJuaW5nOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCF1MS5pc0VtcHR5KCkpIHsKICAg
ICAgICAgaWYgKGtlcm5pbmdNYXAudW5pY29kZU1hcC5jb250YWlucyh1MSkpIHsKICAgICAgICAg
ICAgIFNWR0tlcm5pbmdWZWN0b3IqIGtlcm5pbmdWZWN0b3IgPSBrZXJuaW5nTWFwLnVuaWNvZGVN
YXAuZ2V0KHUxKTsKLSAgICAgICAgICAgIFNWR0tlcm5pbmdWZWN0b3I6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0ga2VybmluZ1ZlY3Rvci0+ZW5kKCkgLSAxOwotICAgICAgICAgICAgY29uc3QgU1ZHS2Vy
bmluZ1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBrZXJuaW5nVmVjdG9yLT5iZWdpbigp
IC0gMTsKLSAgICAgICAgICAgIGZvciAoOyBpdCAhPSBiZWdpbjsgLS1pdCkgewotICAgICAgICAg
ICAgICAgIGlmIChtYXRjaGVzKHUyLCBnMiwgKml0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGl0LT5rZXJuaW5nOworICAgICAgICAgICAgc2l6ZV90IGl0ID0ga2VybmluZ1ZlY3Rvci0+
c2l6ZSgpOworICAgICAgICAgICAgd2hpbGUgKGl0LS0gPiAwKSB7CisgICAgICAgICAgICAgICAg
YXV0byYgdmFsdWUgPSBrZXJuaW5nVmVjdG9yLT5hdChpdCk7CisgICAgICAgICAgICAgICAgaWYg
KG1hdGNoZXModTIsIGcyLCB2YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1
ZS5rZXJuaW5nOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFrZXJu
aW5nTWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VNYXAuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBW
ZWN0b3I8U1ZHS2VybmluZ1BhaXI+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGtlcm5pbmdNYXAua2Vy
bmluZ1VuaWNvZGVSYW5nZU1hcC5lbmQoKSAtIDE7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8
U1ZHS2VybmluZ1BhaXI+Ojpjb25zdF9pdGVyYXRvciBiZWdpbiA9IGtlcm5pbmdNYXAua2Vybmlu
Z1VuaWNvZGVSYW5nZU1hcC5iZWdpbigpIC0gMTsKLSAgICAgICAgICAgIGZvciAoOyBpdCAhPSBi
ZWdpbjsgLS1pdCkgewotICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzKHUxLCB1MiwgZzIsICpp
dCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdC0+a2VybmluZzsKKyAgICAgICAgICAg
IHNpemVfdCBpdCA9IGtlcm5pbmdNYXAua2VybmluZ1VuaWNvZGVSYW5nZU1hcC5zaXplKCk7Cisg
ICAgICAgICAgICB3aGlsZSAoaXQtLSA+IDApIHsKKyAgICAgICAgICAgICAgICBhdXRvJiB2YWx1
ZSA9IGtlcm5pbmdNYXAua2VybmluZ1VuaWNvZGVSYW5nZU1hcFtpdF07CisgICAgICAgICAgICAg
ICAgaWYgKG1hdGNoZXModTEsIHUyLCBnMiwgdmFsdWUpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdmFsdWUua2VybmluZzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmgKaW5kZXggOWQ5ZDJhMmIyM2M2MDBmZWJi
NTM0MGNiY2RkMWI2MWRkYzNiOWYxNS4uYjk5OTU1NDk0MzlhYzk2NGFiM2U2N2EzMGYwZDg5ZDhj
MzU4YWNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFt
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmgKQEAgLTYwLDgg
KzYwLDggQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kKHVuc2lnbmVkIGNoYXIgYnl0ZSkgeyBt
X2RhdGEuYXBwZW5kKGJ5dGUpOyB9CiAgICAgdm9pZCBhcHBlbmQoU1ZHUGF0aEJ5dGVTdHJlYW0q
IG90aGVyKQogICAgIHsKLSAgICAgICAgZm9yIChEYXRhSXRlcmF0b3IgaXQgPSBvdGhlci0+YmVn
aW4oKTsgaXQgIT0gb3RoZXItPmVuZCgpOyArK2l0KQotICAgICAgICAgICAgYXBwZW5kKCppdCk7
CisgICAgICAgIGZvciAoYXV0byYgYnl0ZSA6ICpvdGhlcikKKyAgICAgICAgICAgIGFwcGVuZChi
eXRlKTsKICAgICB9CiAgICAgdm9pZCBjbGVhcigpIHsgbV9kYXRhLmNsZWFyKCk7IH0KICAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9kYXRhLnNpemUoKTsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9kZVNldC5oIGIvU291cmNlL1dlYkNvcmUveG1s
L1hQYXRoTm9kZVNldC5oCmluZGV4IDNkODliOGQ1MDg3YTg2Y2ZlYWZmYzAxNDBiNjk0NzYyYzA5
NWRkZGYuLmRhZjJiOTNkNTFiNWFmNmI3MzRmNWY5YTc2NTQxMzY5ZTA0MTRhMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvWFBhdGhOb2RlU2V0LmgKQEAgLTY0LDggKzY0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICAgICAgdm9pZCBtYXJrU3VidHJlZXNEaXNqb2ludChib29sIGRpc2pvaW50KSB7
IG1fc3VidHJlZXNBcmVEaXNqb2ludCA9IGRpc2pvaW50OyB9CiAgICAgICAgICAgICBib29sIHN1
YnRyZWVzQXJlRGlzam9pbnQoKSBjb25zdCB7IHJldHVybiBtX3N1YnRyZWVzQXJlRGlzam9pbnQg
fHwgbV9ub2Rlcy5zaXplKCkgPCAyOyB9CiAKLSAgICAgICAgICAgIGNvbnN0IFJlZlB0cjxOb2Rl
PiogYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX25vZGVzLmJlZ2luKCk7IH0KLSAgICAgICAgICAg
IGNvbnN0IFJlZlB0cjxOb2RlPiogZW5kKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rlcy5lbmQoKTsg
fQorICAgICAgICAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPj46Oml0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gbV9ub2Rlcy5iZWdpbigpOyB9CisgICAgICAgICAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPE5vZGU+Pjo6aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rl
cy5lbmQoKTsgfQogCiAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICB2b2lkIHRyYXZlcnNh
bFNvcnQoKSBjb25zdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242087</attachid>
            <date>2014-11-21 15:38:23 -0800</date>
            <delta_ts>2014-11-29 11:08:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138821-20141121153839.patch</filename>
            <type>text/plain</type>
            <size>71360</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2NDU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
YWZmMmRhMWRkMGNmYTIwOTZhOGY1NTFhOWVjMDljZDI5MTU5YzZkLi4xMGVjNjM1ZWMyMTE4OWNi
OTQ5MGVmY2VkZDQ2OTZkNWNkMTdkY2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNiBAQAorMjAxNC0xMS0xNyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3Rp
bGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGVyZSBhcmUgYSBmZXcgdXNlcyBvZiBiZWdpbigpL2VuZCgp
IHRoYXQgZXhwbGljaXRseSByZXF1aXJlIHBvaW50ZXJzLAorICAgICAgICBzbyB3ZSB1c2UgZ2V0
UHRyKCkgdG8gZXh0cmFjdCB0aGUgdW5kZXJseWluZyBwb2ludGVyIGdlbmVyaWNhbGx5LgorCisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRDb21wbGV4UG9wU2NvcGVzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVt
cCk6CisgICAgICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6RlRM
OjptZE5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkQ2FsbCk6CisgICAgICAgICogbGxp
bnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBlcmZvcm1Bc3Nl
cnRpb25zKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlNjb3Bl
OjpTY29wZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwOgorICAgICAgICAo
SlNDOjpQcm9maWxlTm9kZTo6ZGVidWdQcmludFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3Rvcik6
CisgICAgICAgICogdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2Zp
bGVUcmVlTm9kZTo6ZHVtcEludGVybmFsKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgor
ICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjptYXRjaENoYXJhY3RlckNsYXNzKToK
KwogMjAxNC0xMS0yMSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFtKU0NdIERpc2FibGUgdmVyaWZ5SGVhcApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA1NTFhNmI2ZDk2OTM4ZjhiYzNi
NjAzYTEzZTEwMGQ4NjRjMWRiODNlLi4yNzE4OTMzYjI1M2RlZDIyZDMyYjI0ZDc4ZGU0MDA1YzYy
ZDE3ZmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RG
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDE0LTExLTE3ICBPbGl2ZXIgSHVudCAgPG9s
aXZlckBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBzdXJlIHJhbmdlIGJhc2VkIGl0ZXJhdGlv
biBvZiBWZWN0b3I8PiBzdGlsbCByZWNlaXZlcyBib3VuZHMgY2hlY2tpbmcKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODgyMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5ldyBJbmRleGVkSXRl
cmF0b3Igc3RydWN0IHRvIFdURiB0aGF0IHdyYXBzIGEKKyAgICAgICAgVmVjdG9yIHR5cGUgYW5k
IGluZGV4IHRvIHByb3ZpZGUgcG9pbnRlciBsaWtlIHNlbWFudGljcworICAgICAgICB3aGlsZSBz
dGlsbCBwZXJmb3JtaW5nIHJ1bnRpbWUgYm91bmRzIGNoZWNraW5nLCBldmVuIGluCisgICAgICAg
IHJlbGVhc2UgYnVpbGRzLiBXZSBzdG9yZSBhIHNpbXBsZSBpbmRleCBpbnRvIHRoZSB2ZWN0b3IK
KyAgICAgICAgd2hpY2ggbWVhbnMgdGhhdCB0aGlzIGl0ZXJhdG9yIGFsbG93cyB2ZWN0b3IgcmVz
aXppbmcKKyAgICAgICAgZHVyaW5nIGl0ZXJhdGlvbi4gSWYgdGhlIHZlY3RvciBpcyByZXNpemVk
IHN1Y2ggdGhhdCB0aGUKKyAgICAgICAgaXRlcmF0b3IgaXMgb3V0IG9mIGJvdW5kcywgdGhlbiBh
bnkgYXR0ZW1wdCB0byBkZXJlZmVyZW5jZQorICAgICAgICB0aGUgaXRlcmF0b3Igd2lsbCBjcmFz
aCBzYWZlbHkuIEFueSBvdGhlciBlcnJvcnMsIGluY2x1ZGluZworICAgICAgICBvdmVyZmxvd3Ms
IGFuZCBvdmVyIGV4dGVuZGluZyB0aGUgaXRlcmF0b3Igd2lsbCBsaWtld2lzZQorICAgICAgICBj
cmFzaC4KKworICAgICAgICBGb3IgdGhlIHB1cnBvc2Ugb2YgcmV0YWluaW5nIHNlbWFudGljYWxs
eSBlcXVpdmFsZW50CisgICAgICAgIGJlaGF2aW91ciwgdGhlIGl0ZXJhdG9yIGNhbiBiZSBtb3Zl
ZCB0byBtX2luZGV4ID09IHNpemUoKQorICAgICAgICBhcyB0aGF0IGlzIHRoZSBzdGFuZGFyZCAi
ZW5kIiB0ZXJtaW5hdG9yIGZvciB0aGVzZSB0eXBlcy4KKyAgICAgICAgQXR0ZW1wdGluZyB0byBk
ZXJlZmVyZW5jZSBhdCB0aGF0IHBvaW50IHdpbGwgc3RpbGwgY3Jhc2gKKyAgICAgICAgcmF0aGVy
IHRoYW4gcGVyZm9ybSBhbiB1bnNhZmUgbWVtb3J5IG9wZXJhdGlvbi4KKworICAgICAgICBJbiBv
cmRlciB0byBtYWludGFpbiB0aGUgdmFsaWRpdHkgb2YgYWxsIHRoZSBib3VuZHMgY2hlY2tpbmcs
CisgICAgICAgIHdlIHBlcmZvcm0gZnVsbCBpbnRlZ2VyIHJhbmdlIGNoZWNraW5nIHByaW9yIHRv
IGFueSBtdXRhdGlvbgorICAgICAgICBvZiB0aGUgaXRlcmF0b3IgbG9jYXRpb24uIElmIHdlIGRl
dGVjdCBhbiBhcml0aG1ldGljIG92ZXJmbG93CisgICAgICAgIHdlIHdpbGwgY3Jhc2ggcmF0aGVy
IHRoYW4gYXR0ZW1wdGluZyB0byBjYXJyeSBvbi4KKworICAgICAgICBCeSBuZWNlc3NpdHkgdGhl
cmUgYXJlIG1hbnkgb3ZlcnJpZGVzIGZvciBvcGVyYXRvciArIGFuZCAtIGFzCisgICAgICAgIHdl
IG90aGVyd2lzZSBoaXQgbWFueSBkaWZmZXJlbnQgdHlwZSBwcm9tb3Rpb24gYW1iaWd1aXRpZXMg
d2hlbgorICAgICAgICBwZXJmb3JtaW5nIGFyaXRobWV0aWMgd2l0aCBpdGVyYXRvcnMuIFRoZXNl
IGFtYmlndWl0aWVzIGFyZSBhbHNvCisgICAgICAgIGRpZmZlcmVudCBmb3IgMzItIHZzLiA2NC1i
aXQsIHNvIGR1cGxpY2F0aW5nIHRoZSBmdW5jdGlvbnMKKyAgICAgICAgYW5kIHRoZW4gZm9yd2Fy
ZGluZyB0byB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBwZXJmb3JtZWQKKyAgICAgICAg
dGhlIGJvdW5kcyBjaGVja2luZyBhbmQgbXV0YXRpb24gc2VlbWVkIGxpa2UgdGhlIHJpZ2h0IGNh
bGwuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiB3dGYvSW5kZXhlZEl0ZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpJbmRleGVkSXRl
cmF0b3I6OkluZGV4ZWRJdGVyYXRvcik6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6
b3BlcmF0b3ItPik6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IqKToK
KyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpnZXQpOgorICAgICAgICAoV1RGOjpJbmRl
eGVkSXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6
Om9wZXJhdG9yLS0pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yIFVu
c3BlY2lmaWVkQm9vbFR5cGUpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJh
dG9yKz0pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yLT0pOgorICAg
ICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yKyk6CisgICAgICAgIChXVEY6Oklu
ZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9y
OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPT0p
OgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAo
V1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPCk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJ
dGVyYXRvcjo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3Bl
cmF0b3I+KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcj49KToKKyAg
ICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvciBjb25zdF9pdGVyYXRvcik6Cisg
ICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6aXNTYWZlVG9Db21wYXJlKToKKyAgICAgICAg
KFdURjo6SW5kZXhlZEl0ZXJhdG9yOjp1bnNhZmVHZXQpOgorICAgICAgICAoV1RGOjpnZXRQdHIp
OgorICAgICAgICAoV1RGOjpvcGVyYXRvci0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKFdURjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPD0pOgor
ICAgICAgICAoV1RGOjpvcGVyYXRvcj49KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8KToKKyAg
ICAgICAgKFdURjo6b3BlcmF0b3I+KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yU2Vs
ZWN0b3I6Om1ha2VJdGVyYXRvcik6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvclNlbGVj
dG9yOjptYWtlQ29uc3RJdGVyYXRvcik6CisgICAgICAgICogd3RmL1JlZkNvdW50ZWRBcnJheS5o
OgorICAgICAgICAoV1RGOjpSZWZDb3VudGVkQXJyYXk6OlJlZkNvdW50ZWRBcnJheSk6CisgICAg
ICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAoV1RGOjpWZWN0b3I6OlZlY3Rvcik6CisgICAg
ICAgIChXVEY6OlZlY3Rvcjo6YmVnaW4pOgorICAgICAgICAoV1RGOjpWZWN0b3I6OmVuZCk6Cisg
ICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OlZlY3Rvcik6CisgICAgICAgIChXVEY6Oj0p
OgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpmaWxsKToKKyAgICAgICAgKFdURjo6
T3ZlcmZsb3dIYW5kbGVyPjo6ZXhwYW5kQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpPdmVyZmxv
d0hhbmRsZXI+Ojp0cnlFeHBhbmRDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFu
ZGxlcj46OnJlc2l6ZSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnNocmluayk6
CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46Omdyb3cpOgorICAgICAgICAoV1RGOjpP
dmVyZmxvd0hhbmRsZXI+OjpyZXNlcnZlQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpPdmVyZmxv
d0hhbmRsZXI+Ojp0cnlSZXNlcnZlQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hh
bmRsZXI+OjpzaHJpbmtDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46
OmFwcGVuZCk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnRyeUFwcGVuZCk6Cisg
ICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OmFwcGVuZFNsb3dDYXNlKToKKyAgICAgICAg
KFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6dW5jaGVja2VkQXBwZW5kKToKKyAgICAgICAgKFdURjo6
T3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kVmVjdG9yKToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dI
YW5kbGVyPjo6aW5zZXJ0KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6aW5zZXJ0
VmVjdG9yKToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlKToKKwogMjAx
NC0xMS0xOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEhhdmUg
VmVjdG9yOjpjYXBhY2l0eSgpIHJldHVybiBhbiB1bnNpZ25lZCBpbnN0ZWFkIG9mIGEgc2l6ZV90
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggZTE5MmQ0OGU3ZmEzZWFjNGZlMTQ1YTAwOThkMzg2Yjc3YWY5OThhOS4u
ZGNhMGFjNWYyMzI0YWJjMmViZjEwYzVjNjcyMDZhNzlhNDMyYTQ0NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDM4IEBACisyMDE0LTExLTE3ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+
CisKKyAgICAgICAgTWFrZSBzdXJlIHJhbmdlIGJhc2VkIGl0ZXJhdGlvbiBvZiBWZWN0b3I8PiBz
dGlsbCByZWNlaXZlcyBib3VuZHMgY2hlY2tpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODgyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoZXJlIGFyZSBhIGZldyB1c2VzIG9mIGJlZ2luKCkvZW5k
KCkgdGhhdCBleHBsaWNpdGx5IHJlcXVpcmUgcG9pbnRlcnMsCisgICAgICAgIHNvIHdlIHVzZSBn
ZXRQdHIoKSB0byBleHRyYWN0IHRoZSB1bmRlcmx5aW5nIHBvaW50ZXIgZ2VuZXJpY2FsbHkuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplU3RyaW5nKToKKyAgICAg
ICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hC
dWZmZXI6OmlzQmFkTWF0Y2gpOgorICAgICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
OjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
U2VnbWVudGVkRm9udERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkRm9udERh
dGE6OmZvbnREYXRhRm9yQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZEZv
bnREYXRhOjpjb250YWluc0NoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRG
b250RGF0YTo6aXNMb2FkaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmls
ZUZvcm1hdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0V09GRlRvU2ZudCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OnBhaW50RmlsbExheWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0dyaWRSZXNv
bHZlZFBvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0TmFtZWRHcmlkTGluZUJl
Zm9yZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjpy
ZXNvbHZlUm93RW5kQ29sdW1uRW5kTmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRl
UG9zaXRpb24pOgorICAgICAgICAqIHN2Zy9TVkdGb250RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjprZXJuaW5nRm9yUGFpck9mU3RyaW5nc0FuZEdseXBocyk6CisgICAgICAgICogc3Zn
L1NWR1BhdGhCeXRlU3RyZWFtLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVh
bTo6YXBwZW5kKToKKyAgICAgICAgKiB4bWwvWFBhdGhOb2RlU2V0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aDo6Tm9kZVNldDo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Ok5v
ZGVTZXQ6OmVuZCk6CisKIDIwMTQtMTEtMjEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KIAogICAgICAgICBSZWdyZXNzaW9uKHIxNzUzODEpOiAtd2Via2l0LW1hc2stYm94LWltYWdl
IGlzIGJyb2tlbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5jcHAKaW5kZXggNmMyOTNjY2Y5OGQ1NjczMjZkYzQyZmFiZDVkZmE0MWQy
M2Y2YzJjMS4uNjM1YWNkMmNiYjM4ZTc4YTYwODNiNjFlNThkYmExYjQ3Y2I3OWU5YSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwCkBAIC0yMzQsOSArMjM0LDkgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fc3ltYm9sVGFibGUpOwogICAgIGZvciAoRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9y
OjppdGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbHMuYmVnaW4oKSwgZW5k
ID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkRlY2xzLmVuZCgpOyBwdHIgIT0gZW5kOyArK3B0cikK
LSAgICAgICAgdmlzaXRvci5hcHBlbmQocHRyKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoV1RG
OjpnZXRQdHIocHRyKSk7CiAgICAgZm9yIChGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I6Oml0ZXJh
dG9yIHB0ciA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25FeHBycy5iZWdpbigpLCBlbmQgPSB0aGlz
T2JqZWN0LT5tX2Z1bmN0aW9uRXhwcnMuZW5kKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAg
ICB2aXNpdG9yLmFwcGVuZChwdHIpOworICAgICAgICB2aXNpdG9yLmFwcGVuZChXVEY6OmdldFB0
cihwdHIpKTsKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5tX2NvbnN0YW50
UmVnaXN0ZXJzLmRhdGEoKSwgdGhpc09iamVjdC0+bV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkp
OwogICAgIGlmICh0aGlzT2JqZWN0LT5tX3JhcmVEYXRhKSB7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwLCBlbmQgPSB0aGlzT2JqZWN0LT5tX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOyBp
ICE9IGVuZDsgaSsrKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCBiMjEzNGVmN2E1MDliNzM2OWUzZDJj
MDU2NjJjMjFiODQ3MDdmZjVjLi41ZTFmNDYxMjkxYWNlMjYwOTNiMTMxN2RhZjg0Y2U5NWQzZDFi
ZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMjI2Myw4ICsyMjYzLDggQEAgdm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMoUmVnaXN0ZXJJRCogc2NvcGUsIENvbnRy
b2xGbG93Q29udGUKICAgICAgICAgICAgIGludCB0b3BTY29wZUluZGV4ID0gLTE7CiAgICAgICAg
ICAgICBpbnQgYm90dG9tU2NvcGVJbmRleCA9IC0xOwogICAgICAgICAgICAgaWYgKGZsaXBTY29w
ZXMpIHsKLSAgICAgICAgICAgICAgICB0b3BTY29wZUluZGV4ID0gdG9wU2NvcGUgLSBtX3Njb3Bl
Q29udGV4dFN0YWNrLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgYm90dG9tU2NvcGVJbmRleCA9
IGJvdHRvbVNjb3BlIC0gbV9zY29wZUNvbnRleHRTdGFjay5iZWdpbigpOworICAgICAgICAgICAg
ICAgIHRvcFNjb3BlSW5kZXggPSB0b3BTY29wZSAtIG1fc2NvcGVDb250ZXh0U3RhY2suZGF0YSgp
OworICAgICAgICAgICAgICAgIGJvdHRvbVNjb3BlSW5kZXggPSBib3R0b21TY29wZSAtIG1fc2Nv
cGVDb250ZXh0U3RhY2suZGF0YSgpOwogICAgICAgICAgICAgICAgIHNhdmVkU2NvcGVDb250ZXh0
U3RhY2sgPSBtX3Njb3BlQ29udGV4dFN0YWNrOwogICAgICAgICAgICAgICAgIG1fc2NvcGVDb250
ZXh0U3RhY2suc2hyaW5rKGZpbmFsbHlDb250ZXh0LnNjb3BlQ29udGV4dFN0YWNrU2l6ZSk7CiAg
ICAgICAgICAgICB9CkBAIC0yMzA4LDcgKzIzMDgsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0Q29tcGxleFBvcFNjb3BlcyhSZWdpc3RlcklEKiBzY29wZSwgQ29udHJvbEZsb3dDb250
ZQogICAgICAgICAgICAgaWYgKGZsaXBTY29wZXMpIHsKICAgICAgICAgICAgICAgICBtX3Njb3Bl
Q29udGV4dFN0YWNrID0gc2F2ZWRTY29wZUNvbnRleHRTdGFjazsKICAgICAgICAgICAgICAgICB0
b3BTY29wZSA9ICZtX3Njb3BlQ29udGV4dFN0YWNrW3RvcFNjb3BlSW5kZXhdOyAvLyBhc3NlcnQg
aXQncyB3aXRoaW4gYm91bmRzCi0gICAgICAgICAgICAgICAgYm90dG9tU2NvcGUgPSBtX3Njb3Bl
Q29udGV4dFN0YWNrLmJlZ2luKCkgKyBib3R0b21TY29wZUluZGV4OyAvLyBkb24ndCBhc3NlcnQs
IHNpbmNlIGl0IHRoZSBpbmRleCBtaWdodCBiZSAtMS4KKyAgICAgICAgICAgICAgICBib3R0b21T
Y29wZSA9IG1fc2NvcGVDb250ZXh0U3RhY2suZGF0YSgpICsgYm90dG9tU2NvcGVJbmRleDsgLy8g
ZG9uJ3QgYXNzZXJ0LCBzaW5jZSBpdCB0aGUgaW5kZXggbWlnaHQgYmUgLTEuCiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBpZiAoZmxpcFN3aXRjaGVzKQogICAgICAgICAgICAgICAgIG1fc3dp
dGNoQ29udGV4dFN0YWNrID0gc2F2ZWRTd2l0Y2hDb250ZXh0U3RhY2s7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IGYwNzI0ZGY0NzAz
OTQ5YjMwZDI0ZTM2YWE4MmU3NzhhNWNiOWJmNzMuLjNiZTE4ZWE2YzZjYjdmMzZmNDhlMjBiNTlm
NzIzZWNjNTE0YjlkM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCkBAIC00OTEwLDcgKzQ5MTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0U3dpdGNoSW50SnVtcCgKICAgICBhZGRCcmFuY2goCiAgICAgICAgIG1faml0LmJyYW5j
aDMyKEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsIHZhbHVlLCBJbW0zMih0YWJsZS5jdGlPZmZz
ZXRzLnNpemUoKSkpLAogICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayk7Ci0gICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tUHRyKHRhYmxlLmN0aU9mZnNldHMuYmVnaW4oKSksIHNjcmF0Y2gp
OworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cih0YWJsZS5jdGlPZmZzZXRzLmRhdGEoKSks
IHNjcmF0Y2gpOwogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkJhc2VJbmRleChzY3Jh
dGNoLCB2YWx1ZSwgSklUQ29tcGlsZXI6OnRpbWVzUHRyKCkpLCBzY3JhdGNoKTsKICAgICBtX2pp
dC5qdW1wKHNjcmF0Y2gpOwogICAgIGRhdGEtPmRpZFVzZUp1bXBUYWJsZSA9IHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCmluZGV4IGZjN2NiMWIy
NTQzMjY5NGFhZWU4ZmJmMzE1M2U2ZTA4YTgzMzJmMzkuLjdiMWExY2U3YjM4MzdlODE0Y2JhMmIz
ZWNjM2EwN2IwMThkOWFlMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQWJicmV2aWF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJi
cmV2aWF0aW9ucy5oCkBAIC0xMjAsNyArMTIwLDcgQEAgc3RhdGljIGlubGluZSBMVmFsdWUgbWRT
dHJpbmcoTENvbnRleHQgY29udGV4dCwgY29uc3QgY2hhciogc3RyaW5nLCB1bnNpZ25lZCBsZW4K
IHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kU3RyaW5nKExDb250ZXh0IGNvbnRleHQsIGNvbnN0IGNo
YXIqIHN0cmluZykgeyByZXR1cm4gbWRTdHJpbmcoY29udGV4dCwgc3RyaW5nLCBzdGQ6OnN0cmxl
bihzdHJpbmcpKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRl
eHQsIExWYWx1ZSogYXJncywgdW5zaWduZWQgbnVtQXJncykgeyByZXR1cm4gbGx2bS0+TUROb2Rl
SW5Db250ZXh0KGNvbnRleHQsIGFyZ3MsIG51bUFyZ3MpOyB9CiB0ZW1wbGF0ZTx0eXBlbmFtZSBW
ZWN0b3JUeXBlPgotc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQs
IGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvcikgeyByZXR1cm4gbWROb2RlKGNvbnRleHQsIGNvbnN0
X2Nhc3Q8TFZhbHVlKj4odmVjdG9yLmJlZ2luKCkpLCB2ZWN0b3Iuc2l6ZSgpKTsgfQorc3RhdGlj
IGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQsIGNvbnN0IFZlY3RvclR5cGUm
IHZlY3RvcikgeyByZXR1cm4gbWROb2RlKGNvbnRleHQsIGNvbnN0X2Nhc3Q8TFZhbHVlKj4odmVj
dG9yLmRhdGEoKSksIHZlY3Rvci5zaXplKCkpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5v
ZGUoTENvbnRleHQgY29udGV4dCkgeyByZXR1cm4gbWROb2RlKGNvbnRleHQsIDAsIDApOyB9CiBz
dGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwgTFZhbHVlIGFyZzEp
IHsgcmV0dXJuIG1kTm9kZShjb250ZXh0LCAmYXJnMSwgMSk7IH0KIHN0YXRpYyBpbmxpbmUgTFZh
bHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0LCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIpCkBA
IC0yODgsNyArMjg4LDcgQEAgc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVy
IGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgY29uc3QgTFZhbHVlKgogdGVtcGxhdGU8dHlwZW5h
bWUgVmVjdG9yVHlwZT4KIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIs
IExWYWx1ZSBmdW5jdGlvbiwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKQogewotICAgIHJldHVy
biBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIHZlY3Rvci5iZWdpbigpLCB2ZWN0b3Iuc2l6
ZSgpKTsKKyAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCB2ZWN0b3IuZGF0
YSgpLCB2ZWN0b3Iuc2l6ZSgpKTsKIH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChM
QnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24pCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludERhdGEuY3BwCmluZGV4IDY5MTlhZWFiMDBhMWIyNWM0NzViYmY5ZGQyNWM2
ODhmMGFhNThhNzIuLjQ0YWZjYTRjYmFkOGIzZTU1MzM0MTI5YWM5YzliMGRlZmQ5NTYxZTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCkBAIC0xNjEsNyArMTYx
LDcgQEAgdm9pZCBEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyhWTSYgdm0pCiAgICAgVmVjdG9yPGlu
dD4gdGVzdFZlY3RvcjsKICAgICB0ZXN0VmVjdG9yLnJlc2l6ZSg0Mik7CiAgICAgQVNTRVJUKGJp
dHdpc2VfY2FzdDx1aW50MzJfdCo+KCZ0ZXN0VmVjdG9yKVtzaXplb2Yodm9pZCopL3NpemVvZih1
aW50MzJfdCkgKyAxXSA9PSA0Mik7Ci0gICAgQVNTRVJUKGJpdHdpc2VfY2FzdDxpbnQqKj4oJnRl
c3RWZWN0b3IpWzBdID09IHRlc3RWZWN0b3IuYmVnaW4oKSk7CisgICAgQVNTRVJUKGJpdHdpc2Vf
Y2FzdDxpbnQqKj4oJnRlc3RWZWN0b3IpWzBdID09IHRlc3RWZWN0b3IuZGF0YSgpKTsKICNlbmRp
ZgogCiAgICAgQVNTRVJUKFN0cmluZ0ltcGw6OnNfaGFzaEZsYWc4Qml0QnVmZmVyID09IDMyKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCmluZGV4IDQ1MmY3MDQ2ZjMwMjJkMzg4
MTA5YWViZGM4NDM4NGUxYWEyMmZmYTEuLjAxZmNjZGI3ZTM4YWM1YTYwMjJjNjhjOTdiOGQ4ZWIz
YjBjZWMxODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaApAQCAtMTMwLDEx
ICsxMzAsOCBAQCBzdHJ1Y3QgU2NvcGUgewogICAgIHsKICAgICAgICAgaWYgKHJocy5tX2xhYmVs
cykgewogICAgICAgICAgICAgbV9sYWJlbHMgPSBhZG9wdFB0cihuZXcgTGFiZWxTdGFjayk7Ci0K
LSAgICAgICAgICAgIHR5cGVkZWYgTGFiZWxTdGFjazo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7
Ci0gICAgICAgICAgICBpdGVyYXRvciBlbmQgPSByaHMubV9sYWJlbHMtPmVuZCgpOwotICAgICAg
ICAgICAgZm9yIChpdGVyYXRvciBpdCA9IHJocy5tX2xhYmVscy0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICAgICAgICAgIG1fbGFiZWxzLT5hcHBlbmQoU2NvcGVMYWJlbEluZm8o
aXQtPm1faWRlbnQsIGl0LT5tX2lzTG9vcCkpOworICAgICAgICAgICAgZm9yIChhdXRvIGxhYmVs
IDogKnJocy5tX2xhYmVscykKKyAgICAgICAgICAgICAgICBtX2xhYmVscy0+YXBwZW5kKFNjb3Bl
TGFiZWxJbmZvKGxhYmVsLm1faWRlbnQsIGxhYmVsLm1faXNMb29wKSk7CiAgICAgICAgIH0KICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKaW5kZXggY2M2
MzAyMTdkZjdmZDI1YWRlNGM0YmIzOTg1NzRkNjdkNWE3NDU2OS4uNzljZDY3YTY3ODE3YmRkZmFl
ZGRmM2M1MDY4NmM0ODJjOTIwNDUwNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5jcHAKQEAgLTM1Miw3ICszNTIsNyBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aFdp
dGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvbwog
ICAgICAgICAgICAgLy8gcHJvcGVydGllcywgc28gd2UgaGF2ZSB0byBwZXJmb3JtIGRlbGV0aW9u
IHdpdGggY2F1dGlvbiwgaWYgbm90IHdlIGNhbgogICAgICAgICAgICAgLy8gZGVsZXRlIHZhbHVl
cyBpbiBhbnkgb3JkZXIuCiAgICAgICAgICAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkpIHsKLSAg
ICAgICAgICAgICAgICBxc29ydChrZXlzLmJlZ2luKCksIGtleXMuc2l6ZSgpLCBzaXplb2YodW5z
aWduZWQpLCBjb21wYXJlS2V5c0ZvclFTb3J0KTsKKyAgICAgICAgICAgICAgICBxc29ydChrZXlz
LmRhdGEoKSwga2V5cy5zaXplKCksIHNpemVvZih1bnNpZ25lZCksIGNvbXBhcmVLZXlzRm9yUVNv
cnQpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBrZXlzLnNpemUoKTsKICAgICAgICAg
ICAgICAgICB3aGlsZSAoaSkgewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IGtleXNbLS1pXTsKQEAgLTExOTEsMTMgKzExOTEsMTMgQEAgdm9pZCBKU0FycmF5Ojpzb3J0Q29t
cGFjdGVkVmVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgQ29udGlndW91c0RhdGE8U3RvcmFnZVR5cGU+
IGQKICAgICAgICAgCiAjaWYgSEFWRShNRVJHRVNPUlQpCiAgICAgaWYgKGlzU29ydGluZ1ByaW1p
dGl2ZVZhbHVlcykKLSAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCks
IHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwor
ICAgICAgICBxc29ydCh2YWx1ZXMuZGF0YSgpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVT
dHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICAgICBlbHNlCi0gICAg
ICAgIG1lcmdlc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVl
U3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAgICAgIG1lcmdl
c29ydCh2YWx1ZXMuZGF0YSgpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWly
KSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICNlbHNlCiAgICAgLy8gRklYTUU6IFRo
ZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBzdGFibGUgc29y
dC4KICAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQs
IGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0LgotICAgIHFz
b3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWly
KSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICBxc29ydCh2YWx1ZXMuZGF0YSgp
LCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5n
UGFpckZvclFTb3J0KTsKICNlbmRpZgogICAgIAogICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5j
dGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCmluZGV4IDg4
ZDU3ZjNkZDRlNzk3NjlkMWQwNmMzYTg1OTEwMWI1NTVjNmE4M2YuLmRkM2MxMjFkMGViYjE2ZThh
NTI0NjFmYWFjZGJiYjRkOTg3ZDcyYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9v
bHMvUHJvZmlsZVRyZWVOb2RlLmgKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
VmVjdG9yPE1hcEVudHJ5Kj4gZW50cmllczsKICAgICAgICAgZm9yIChNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9jaGlsZHJlbi0+YmVnaW4oKTsgaXQgIT0gbV9jaGlsZHJlbi0+ZW5kKCk7ICsraXQpCiAg
ICAgICAgICAgICBlbnRyaWVzLmFwcGVuZCgmKml0KTsKLSAgICAgICAgcXNvcnQoZW50cmllcy5i
ZWdpbigpLCBlbnRyaWVzLnNpemUoKSwgc2l6ZW9mKE1hcEVudHJ5KiksIGNvbXBhcmVFbnRyaWVz
KTsKKyAgICAgICAgcXNvcnQoZW50cmllcy5kYXRhKCksIGVudHJpZXMuc2l6ZSgpLCBzaXplb2Yo
TWFwRW50cnkqKSwgY29tcGFyZUVudHJpZXMpOwogCiAgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciB0
aGUgY2hpbGRyZW4gaW4gc2FtcGxlLWZyZXF1ZW5jeSBvcmRlci4KICAgICAgICAgZm9yIChzaXpl
X3QgZSA9IDA7IGUgPCBlbnRyaWVzLnNpemUoKTsgKytlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95
YXJyL1lhcnJKSVQuY3BwCmluZGV4IGUzYTNhOTMyY2U3ZWQ3MzhmMTk4NmIyYmYyYjc0M2UwNDIz
YTNiMjUuLmQyNjhlNTllMTJiYjRlODM2OGNlMzkyMDY4NzhhYzgxNjJlM2I0MmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCkBAIC0yMjMsNyArMjIzLDcgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBpZiAoY2hh
ckNsYXNzLT5tX3Jhbmdlcy5zaXplKCkpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIG1hdGNoSW5k
ZXggPSAwOwogICAgICAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7Ci0gICAgICAgICAgICBtYXRj
aENoYXJhY3RlckNsYXNzUmFuZ2UoY2hhcmFjdGVyLCBmYWlsdXJlcywgbWF0Y2hEZXN0LCBjaGFy
Q2xhc3MtPm1fcmFuZ2VzLmJlZ2luKCksIGNoYXJDbGFzcy0+bV9yYW5nZXMuc2l6ZSgpLCAmbWF0
Y2hJbmRleCwgY2hhckNsYXNzLT5tX21hdGNoZXMuYmVnaW4oKSwgY2hhckNsYXNzLT5tX21hdGNo
ZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3NSYW5nZShjaGFyYWN0
ZXIsIGZhaWx1cmVzLCBtYXRjaERlc3QsIGNoYXJDbGFzcy0+bV9yYW5nZXMuZGF0YSgpLCBjaGFy
Q2xhc3MtPm1fcmFuZ2VzLnNpemUoKSwgJm1hdGNoSW5kZXgsIGNoYXJDbGFzcy0+bV9tYXRjaGVz
LmRhdGEoKSwgY2hhckNsYXNzLT5tX21hdGNoZXMuc2l6ZSgpKTsKICAgICAgICAgICAgIHdoaWxl
IChtYXRjaEluZGV4IDwgY2hhckNsYXNzLT5tX21hdGNoZXMuc2l6ZSgpKQogICAgICAgICAgICAg
ICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoKHVu
c2lnbmVkIHNob3J0KWNoYXJDbGFzcy0+bV9tYXRjaGVzW21hdGNoSW5kZXgrK10pKSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ogYi9Tb3VyY2UvV1RG
L1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCmluZGV4IDJmM2FjMjA5YzUyNmMwMzRmZjQwYWU1ZTM2
NDQ0MjZmNmJhYjZiOTYuLmQxMDkzZDM2ZGQ3NTAwZjI1YTJlMTMzYmU1MTZlYzczZTFiNWZhMGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oKKysrIGIvU291
cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagpAQCAtMjE4LDYgKzIxOCw3IEBACiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSGFzaFRhYmxlLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlx3dGZcSGFzaFRyYWl0cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cd3RmXEhleE51bWJlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3Rm
XEluZGV4ZWRJdGVyYXRvci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEl0
ZXJhdG9yQWRhcHRvcnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxJdGVy
YXRvclJhbmdlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcTGlzdEhhc2hT
ZXQuaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ou
ZmlsdGVycyBiL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVycwppbmRl
eCA1OTUzYTBmNDJhZmQ3NTA3NmJmOTg1ZDU5ODMwZDliZWM4NjM1Zjc1Li4wMTA4OWNiOTBiZGM1
MDA0YTcwZjBkNDgxMjIwNzk4OGEyNDIyMjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi52
Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dURi9XVEYudmN4cHJvai9X
VEYudmN4cHJvai5maWx0ZXJzCkBAIC00NjcsNiArNDY3LDkgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxIZXhOdW1iZXIuaCI+CiAgICAgICA8RmlsdGVyPnd0ZjwvRmlsdGVyPgog
ICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEluZGV4ZWRJ
dGVyYXRvci5oIj4KKyAgICAgIDxGaWx0ZXI+d3RmPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSXRlcmF0b3JBZGFwdG9ycy5oIj4KICAg
ICAgIDxGaWx0ZXI+d3RmPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmZjQ4ZGEwY2M1MzEyODJhMTJkMGQ1MTA2
YzY2MDM1ZjE1NWQ5MTU2Li4xYmE1Y2ZkNzg5OGZkOWU5NjU5NWJmZDVhNDc3NGZlZjFlYmY0Zjgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk4LDYgKzk4
LDcgQEAKIAkJQTc0ODc0NTIxN0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc0ODc0NEYx
N0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guY3BwICovOyB9OwogCQlBNzQ4NzQ1
MzE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc0ODc0NTAxN0EwQkRBRTAwRkEwNENCIC8q
IFNpeENoYXJhY3Rlckhhc2guaCAqLzsgfTsKIAkJQTc0ODc0NTQxN0EwQkRBRTAwRkEwNENCIC8q
IFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc0ODc0NTExN0EwQkRBRTAwRkEwNENCIC8qIFN0cmluZ0hhc2hEdW1w
Q29udGV4dC5oICovOyB9OworCQlBN0RDMkYwNDFBMDlBMjJEMDA3MkY0RTMgLyogSW5kZXhlZEl0
ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0RDMkYwMzFBMDk5REUzMDA3MkY0RTMgLyogSW5kZXhlZEl0ZXJhdG9yLmggKi87IH07CiAJCUE3
RTY0M0M2MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21wcmVzc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0U2NDNDNDE3QzU0MjNCMDAzQkIxNkIg
LyogQ29tcHJlc3Npb24uY3BwICovOyB9OwogCQlBN0U2NDNDNzE3QzU0MjNCMDAzQkIxNkIgLyog
Q29tcHJlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3RTY0M0M1MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21wcmVzc2lvbi5oICovOyB9OwogCQlB
ODc2REJEODE1MTgxNkU1MDBEQURCOTUgLyogUGxhdGZvcm0uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzZEQkQ3MTUxODE2RTUwMERBREI5NSAvKiBQ
bGF0Zm9ybS5oICovOyB9OwpAQCAtMzg5LDYgKzM5MCw3IEBACiAJCUE3NDg3NDRGMTdBMEJEQUUw
MEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNpeENoYXJhY3Rlckhhc2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBNzQ4NzQ1MDE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaXhDaGFyYWN0ZXJIYXNoLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NDg3NDUxMTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJp
bmdIYXNoRHVtcENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Ry
aW5nSGFzaER1bXBDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3REMy
RjAzMUEwOTlERTMwMDcyRjRFMyAvKiBJbmRleGVkSXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW5kZXhlZEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3RTY0M0M0
MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21wcmVzc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb21wcmVzc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3RTY0M0M1MTdDNTQyM0IwMDNCQjE2QiAvKiBDb21wcmVzc2lvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBODc2REJENzE1MTgxNkU1MDBEQURCOTUgLyogUGxhdGZvcm0uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm0uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTg5Miw2ICs4OTQsNyBAQAogCQkJCTk3NENGQzhEMTZBNEYzMjcwMDZE
NTQwNCAvKiBXZWFrUHRyLmggKi8sCiAJCQkJQThBNDczN0ExNTFBODI1QjAwNDEyM0ZGIC8qIFdU
RlRocmVhZERhdGEuY3BwICovLAogCQkJCUE4QTQ3MzdCMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZU
aHJlYWREYXRhLmggKi8sCisJCQkJQTdEQzJGMDMxQTA5OURFMzAwNzJGNEUzIC8qIEluZGV4ZWRJ
dGVyYXRvci5oICovLAogCQkJKTsKIAkJCXBhdGggPSB3dGY7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMTA2NSw2ICsxMDY4LDcgQEAKIAkJCQlBOEE0NzNBRDE1MUE4MjVCMDA0MTIz
RkYgLyogY2FjaGVkLXBvd2Vycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NUUxNTFBODI1
QjAwNDEyM0ZGIC8qIENoYXJhY3Rlck5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM5
NDE1MUE4MjVCMDA0MTIzRkYgLyogQ2hlY2tlZEFyaXRobWV0aWMuaCBpbiBIZWFkZXJzICovLAor
CQkJCUE3REMyRjA0MUEwOUEyMkQwMDcyRjRFMyAvKiBJbmRleGVkSXRlcmF0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3Mzk1MTUxQTgyNUIwMDQxMjNGRiAvKiBDaGVja2VkQm9vbGVhbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NUYxNTFBODI1QjAwNDEyM0ZGIC8qIENvbGxhdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM0RURFNjE2OTYxNDk2MDBGNjUwNDEgLyogQ29tbWFQ
cmludGVyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0luZGV4
ZWRJdGVyYXRvci5oIGIvU291cmNlL1dURi93dGYvSW5kZXhlZEl0ZXJhdG9yLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTliY2NiOTBiNjkyN2MwMDFiMzk2NTExNWQ0YjVhNjU2NTgxNGZiNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XVEYvd3RmL0luZGV4ZWRJdGVyYXRvci5oCkBAIC0wLDAgKzEsNTAzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBX
VEZfSW5kZXhlZEl0ZXJhdG9yX2gKKyNkZWZpbmUgV1RGX0luZGV4ZWRJdGVyYXRvcl9oCisKK25h
bWVzcGFjZSBXVEYgeworCisjZGVmaW5lIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coY2hlY2sp
IGRvIHtcCisgICAgaWYgKCEoY2hlY2spKVwKKyAgICAgICAgT3ZlcmZsb3dIYW5kbGVyOjpvdmVy
Zmxvd2VkKCk7XAorfSB3aGlsZSAoMCkKKwordGVtcGxhdGUgPHR5cGVuYW1lIFZlY3RvclR5cGUs
IHR5cGVuYW1lIFQsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciA9IENyYXNoT25PdmVyZmxvdz4g
c3RydWN0IEluZGV4ZWRJdGVyYXRvciB7CisgICAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhlZEl0ZXJh
dG9yPGNvbnN0IFZlY3RvclR5cGUsIGNvbnN0IFQsIE92ZXJmbG93SGFuZGxlcj4gY29uc3RfaXRl
cmF0b3I7CisKKyAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgcHRyZGlmZl90
IGRpZmZlcmVuY2VfdHlwZTsKKyAgICB0eXBlZGVmIFZhbHVlVHlwZSB2YWx1ZV90eXBlOworICAg
IHR5cGVkZWYgVmFsdWVUeXBlKiBwb2ludGVyOworICAgIHR5cGVkZWYgVmFsdWVUeXBlJiByZWZl
cmVuY2U7CisgICAgdHlwZWRlZiBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJh
dG9yX2NhdGVnb3J5OworCisgICAgSW5kZXhlZEl0ZXJhdG9yKCkKKyAgICAgICAgOiBtX3ZlY3Rv
cihudWxscHRyKQorICAgICAgICAsIG1fcG9zaXRpb24oMCkKKyAgICB7CisgICAgfQorCisgICAg
SW5kZXhlZEl0ZXJhdG9yKFZlY3RvclR5cGUmIHZlY3RvciwgVmFsdWVUeXBlKiBwb3NpdGlvbikK
KyAgICAgICAgOiBtX3ZlY3RvcigmdmVjdG9yKQorICAgICAgICAsIG1fcG9zaXRpb24ocG9zaXRp
b24gLSB2ZWN0b3IuZGF0YSgpKQorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVS
RkxPVyhtX3Bvc2l0aW9uIDw9IHZlY3Rvci5zaXplKCkpOworICAgIH0KKworICAgIEluZGV4ZWRJ
dGVyYXRvcihjb25zdCBJbmRleGVkSXRlcmF0b3ImIG90aGVyKQorICAgICAgICA6IG1fdmVjdG9y
KG90aGVyLm1fdmVjdG9yKQorICAgICAgICAsIG1fcG9zaXRpb24ob3RoZXIubV9wb3NpdGlvbikK
KyAgICB7CisgICAgfQorCisgICAgVmFsdWVUeXBlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1
cm4gJm1fdmVjdG9yLT5hdChtX3Bvc2l0aW9uKTsgfQorICAgIFZhbHVlVHlwZSYgb3BlcmF0b3Iq
KCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3ItPmF0KG1fcG9zaXRpb24pOyB9CisgICAgVmFsdWVU
eXBlKiBnZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxP
VyhtX3Bvc2l0aW9uIDw9IG1fdmVjdG9yLT5zaXplKCkpOworICAgICAgICByZXR1cm4gbV92ZWN0
b3ItPmRhdGEoKSArIG1fcG9zaXRpb247CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBv
cGVyYXRvcisrKCkKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9w
b3NpdGlvbiA8IG1fdmVjdG9yLT5zaXplKCkpOworICAgICAgICBtX3Bvc2l0aW9uKys7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3Ir
KyhpbnQpCisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1fcG9zaXRp
b24gPCBtX3ZlY3Rvci0+c2l6ZSgpKTsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgq
dGhpcyk7CisgICAgICAgIG1fcG9zaXRpb24rKzsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJhdG9yLS0oKQorICAgIHsKKyAgICAgICAg
SU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uID4gMCk7CisgICAgICAgIG1fcG9z
aXRpb24tLTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIEluZGV4ZWRJdGVy
YXRvciBvcGVyYXRvci0tKGludCkKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZF
UkZMT1cobV9wb3NpdGlvbiA+IDApOworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0
aGlzKTsKKyAgICAgICAgbV9wb3NpdGlvbi0tOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKworICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQgY29u
dmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KKyAgICB0eXBl
ZGVmIHNpemVfdCAoSW5kZXhlZEl0ZXJhdG9yOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CisgICAg
b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yID8g
JkluZGV4ZWRJdGVyYXRvcjo6bV9wb3NpdGlvbiA6IG51bGxwdHI7IH0KKworCisgICAgSW5kZXhl
ZEl0ZXJhdG9yJiBvcGVyYXRvcis9KGxvbmcgaW5jcmVtZW50KQorICAgIHsKKyAgICAgICAgaWYg
KGluY3JlbWVudCA8IDApIHsKKyAgICAgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1co
aW5jcmVtZW50ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKTsKKyAgICAg
ICAgICAgIHJldHVybiAoKnRoaXMpIC09IHN0YXRpY19jYXN0PHNpemVfdD4oLWluY3JlbWVudCk7
CisgICAgICAgIH0KKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVygoc3RkOjpudW1l
cmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIG1fcG9zaXRpb24pID4gc3RhdGljX2Nhc3Q8c2l6
ZV90PihpbmNyZW1lbnQpKTsKKyAgICAgICAgbV9wb3NpdGlvbiArPSBpbmNyZW1lbnQ7CisgICAg
ICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA8PSBtX3ZlY3Rvci0+c2l6
ZSgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRv
ciYgb3BlcmF0b3ItPShsb25nIGRlY3JlbWVudCkKKyAgICB7CisgICAgICAgIGlmIChkZWNyZW1l
bnQgPCAwKSB7CisgICAgICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGRlY3JlbWVu
dCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSk7CisgICAgICAgICAgICBy
ZXR1cm4gKCp0aGlzKSArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KC1kZWNyZW1lbnQpOworICAgICAg
ICB9CisKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhzdGF0aWNfY2FzdDxzaXpl
X3Q+KGRlY3JlbWVudCkgPD0gbV9wb3NpdGlvbik7CisgICAgICAgIG1fcG9zaXRpb24gLT0gZGVj
cmVtZW50OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJh
dG9yJiBvcGVyYXRvcis9KHNpemVfdCBpbmNyZW1lbnQpCisgICAgeworICAgICAgICBJTkRFWEVE
X0lURVJBVE9SX09WRVJGTE9XKChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC0g
bV9wb3NpdGlvbikgPiBpbmNyZW1lbnQpOworICAgICAgICBtX3Bvc2l0aW9uICs9IGluY3JlbWVu
dDsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uIDw9IG1fdmVj
dG9yLT5zaXplKCkpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgSW5kZXhl
ZEl0ZXJhdG9yJiBvcGVyYXRvci09KHNpemVfdCBkZWNyZW1lbnQpCisgICAgeworICAgICAgICBJ
TkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGRlY3JlbWVudCA8PSBtX3Bvc2l0aW9uKTsKKyAgICAg
ICAgbV9wb3NpdGlvbiAtPSBkZWNyZW1lbnQ7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9
CisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJhdG9yKz0oaW50MzJfdCBpbmNyZW1lbnQpCisg
ICAgeworICAgICAgICBpZiAoaW5jcmVtZW50IDwgMCkgeworICAgICAgICAgICAgSU5ERVhFRF9J
VEVSQVRPUl9PVkVSRkxPVyhpbmNyZW1lbnQgIT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90
Pjo6bWluKCkpOworICAgICAgICAgICAgcmV0dXJuICgqdGhpcykgLT0gc3RhdGljX2Nhc3Q8c2l6
ZV90PigtaW5jcmVtZW50KTsKKyAgICAgICAgfQorICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09W
RVJGTE9XKChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC0gbV9wb3NpdGlvbikg
PiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluY3JlbWVudCkpOworICAgICAgICBtX3Bvc2l0aW9uICs9
IGluY3JlbWVudDsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9u
IDw9IG1fdmVjdG9yLT5zaXplKCkpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisg
ICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvci09KGludDMyX3QgZGVjcmVtZW50KQorICAgIHsK
KyAgICAgICAgaWYgKGRlY3JlbWVudCA8IDApIHsKKyAgICAgICAgICAgIElOREVYRURfSVRFUkFU
T1JfT1ZFUkZMT1coZGVjcmVtZW50ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1p
bigpKTsKKyAgICAgICAgICAgIHJldHVybiAoKnRoaXMpICs9IHN0YXRpY19jYXN0PHNpemVfdD4o
LWRlY3JlbWVudCk7CisgICAgICAgIH0KKworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJG
TE9XKHN0YXRpY19jYXN0PHNpemVfdD4oZGVjcmVtZW50KSA8PSBtX3Bvc2l0aW9uKTsKKyAgICAg
ICAgbV9wb3NpdGlvbiAtPSBkZWNyZW1lbnQ7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9
CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKHNpemVfdCBpbmNyZW1lbnQpIGNvbnN0
CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdCArPSBpbmNyZW1lbnQ7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9y
IG9wZXJhdG9yLShzaXplX3QgZGVjcmVtZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgSW5kZXhl
ZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQgLT0gZGVjcmVt
ZW50OworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvcisoaW50MzJfdCBpbmNy
ZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlz
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBpbmNyZW1lbnQ7CisgICAgfQorCisgICAgSW5k
ZXhlZEl0ZXJhdG9yIG9wZXJhdG9yLShpbnQzMl90IGRlY3JlbWVudCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICByZXR1cm4gcmVz
dWx0IC09IGRlY3JlbWVudDsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3Ir
KHVuc2lnbmVkIGxvbmcgbG9uZyBpbmNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRl
eGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVS
RkxPVyhpbmNyZW1lbnQgPD0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmNyZW1lbnQpOwor
ICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0odW5zaWduZWQgbG9uZyBsb25n
IGRlY3JlbWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQo
KnRoaXMpOworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGRlY3JlbWVudCA8PSBz
dGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlY3JlbWVudCk7CisgICAgfQorICAgIEluZGV4ZWRJ
dGVyYXRvciBvcGVyYXRvcisobG9uZyBsb25nIGluY3JlbWVudCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICBpZiAoaW5jcmVtZW50
IDwgMCkgeworICAgICAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpbmNyZW1lbnQg
IT0gc3RkOjpudW1lcmljX2xpbWl0czxsb25nIGxvbmc+OjptaW4oKSk7CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0IC0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigtaW5jcmVtZW50
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmcgbG9uZz4oaW5jcmVtZW50KTsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Ig
b3BlcmF0b3ItKGxvbmcgbG9uZyBkZWNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRl
eGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgaWYgKGRlY3JlbWVudCA8IDApIHsK
KyAgICAgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coZGVjcmVtZW50ICE9IHN0ZDo6
bnVtZXJpY19saW1pdHM8bG9uZyBsb25nPjo6bWluKCkpOworICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdCArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oLWRlY3JlbWVudCk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdCArPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
IGxvbmc+KGRlY3JlbWVudCk7CisgICAgfQorCisjaWYgX19TSVpFT0ZfU0laRV9UX18gIT0gX19T
SVpFT0ZfSU5UX18KKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKHVuc2lnbmVkIGluY3Jl
bWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMp
OworICAgICAgICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19jYXN0PHNpemVfdD4oaW5jcmVtZW50
KTsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3ItKHVuc2lnbmVkIGRlY3Jl
bWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMp
OworICAgICAgICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19jYXN0PHNpemVfdD4oZGVjcmVtZW50
KTsKKyAgICB9CisjZW5kaWYKKworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvcisobG9uZyBp
bmNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0
aGlzKTsKKyAgICAgICAgaWYgKGluY3JlbWVudCA8IDApIHsKKyAgICAgICAgICAgIElOREVYRURf
SVRFUkFUT1JfT1ZFUkZMT1coaW5jcmVtZW50ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8bG9uZz46
Om1pbigpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyBzdGF0aWNfY2FzdDxzaXplX3Q+
KC1pbmNyZW1lbnQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQgKz0gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihpbmNyZW1lbnQpOworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciBv
cGVyYXRvci0obG9uZyBkZWNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRl
cmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgaWYgKGRlY3JlbWVudCA8IDApIHsKKyAgICAg
ICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coZGVjcmVtZW50ICE9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8bG9uZz46Om1pbigpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyBzdGF0
aWNfY2FzdDxzaXplX3Q+KC1kZWNyZW1lbnQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBy
ZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihkZWNyZW1lbnQpOworICAgIH0KKworICAgIHB0
cmRpZmZfdCBvcGVyYXRvci0oY29uc3QgY29uc3RfaXRlcmF0b3ImIHJpZ2h0KSBjb25zdAorICAg
IHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3ZlY3RvciA9PSByaWdodC5t
X3ZlY3Rvcik7CisgICAgICAgIHJldHVybiBtX3Bvc2l0aW9uIC0gcmlnaHQubV9wb3NpdGlvbjsK
KyAgICB9CisKKyAgICBwdHJkaWZmX3Qgb3BlcmF0b3ItKGNvbnN0IFZhbHVlVHlwZSogcmlnaHQp
IGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKHJpZ2h0ID49
IG1fdmVjdG9yLT5kYXRhKCkpOworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1f
cG9zaXRpb24gPj0gc3RhdGljX2Nhc3Q8c2l6ZV90PihyaWdodCAtIG1fdmVjdG9yLT5kYXRhKCkp
KTsKKyAgICAgICAgcmV0dXJuIGdldCgpIC0gcmlnaHQ7CisgICAgfQorCisgICAgdm9pZCBvcGVy
YXRvcj0oY29uc3QgSW5kZXhlZEl0ZXJhdG9yJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fdmVj
dG9yID0gb3RoZXIubV92ZWN0b3I7CisgICAgICAgIG1fcG9zaXRpb24gPSBvdGhlci5tX3Bvc2l0
aW9uOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRvciYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlz
U2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPT0gb3Ro
ZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGNvbnN0
X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1Jf
T1ZFUkZMT1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVH
ZXQoKSAhPSBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgVmFsdWVUeXBlKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRF
UkFUT1JfT1ZFUkZMT1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1
bnNhZmVHZXQoKSA9PSBvdGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
VmFsdWVUeXBlKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1Jf
T1ZFUkZMT1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVH
ZXQoKSAhPSBvdGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBWYWx1ZVR5
cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxP
Vyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpIDwg
b3RoZXI7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFZhbHVlVHlwZSogb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlzU2Fm
ZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPD0gb3RoZXI7
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVU
b0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpIDwgb3RoZXIudW5z
YWZlR2V0KCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IGNvbnN0X2l0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZM
T1coc2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPD0g
b3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgSW5k
ZXhlZEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFU
T1JfT1ZFUkZMT1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNh
ZmVHZXQoKSA+IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+
PShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRF
WEVEX0lURVJBVE9SX09WRVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICBy
ZXR1cm4gdW5zYWZlR2V0KCkgPj0gb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvcj4oY29uc3QgVmFsdWVUeXBlKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAg
ICAgIHJldHVybiB1bnNhZmVHZXQoKSA+IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0
b3I+PShjb25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhF
RF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0
dXJuIHVuc2FmZUdldCgpID49IG90aGVyOworICAgIH0KKworICAgIG9wZXJhdG9yIGNvbnN0X2l0
ZXJhdG9yKCkgY29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fdmVjdG9yID0gbV92ZWN0b3I7CisgICAgICAgIHJlc3VsdC5tX3Bvc2l0
aW9uID0gbV9wb3NpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBW
ZWN0b3JUeXBlKiBtX3ZlY3RvcjsKKyAgICBzaXplX3QgbV9wb3NpdGlvbjsKKworICAgIGJvb2wg
aXNTYWZlVG9Db21wYXJlKGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChtX3ZlY3RvciA9PSBvdGhlci5tX3ZlY3RvcikKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICByZXR1cm4gIW1fdmVjdG9yIHx8ICFvdGhlci5tX3ZlY3RvcjsK
KyAgICB9CisKKyAgICBib29sIGlzU2FmZVRvQ29tcGFyZShjb25zdCBWYWx1ZVR5cGUqIHZhbHVl
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBpZiAoIW1fdmVjdG9yKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIHNpemVfdCBkZWx0YSA9IHN0YXRpY19jYXN0PHNpemVfdD4odmFsdWUgLSBtX3ZlY3Rv
ci0+ZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGRlbHRhIDw9IG1fdmVjdG9yLT5zaXplKCk7Cisg
ICAgfQorCisgICAgVmFsdWVUeXBlKiB1bnNhZmVHZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKCFtX3ZlY3RvcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1
cm4gZ2V0KCk7CisgICAgfQorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZh
bHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIHR5cGVuYW1lIEluZGV4
ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj46OlZhbHVlVHlwZSogZ2V0
UHRyKEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4gcCkKK3sK
KyAgICByZXR1cm4gcC5nZXQoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIHB0cmRpZmZfdCBv
cGVyYXRvci0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwg
VmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICBJTkRFWEVEX0lURVJB
VE9SX09WRVJGTE9XKGxlZnQgPj0gcmlnaHQubV92ZWN0b3ItPmRhdGEoKSk7CisgICAgSU5ERVhF
RF9JVEVSQVRPUl9PVkVSRkxPVyhsZWZ0IDw9IHJpZ2h0Lm1fdmVjdG9yLT5lbmQoKS5nZXQoKSk7
CisgICAgcmV0dXJuIGxlZnQgLSByaWdodC5nZXQoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5l
IHB0cmRpZmZfdCBvcGVyYXRvci0oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0
b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICBJTkRFWEVE
X0lURVJBVE9SX09WRVJGTE9XKGxlZnQgPj0gcmlnaHQubV92ZWN0b3ItPmRhdGEoKSk7CisgICAg
SU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhsZWZ0IDw9IHJpZ2h0Lm1fdmVjdG9yLT5lbmQoKS5n
ZXQoKSk7CisgICAgcmV0dXJuIGxlZnQgLSByaWdodC5nZXQoKTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgor
aW5saW5lIHB0cmRpZmZfdCBvcGVyYXRvci0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJ
bmRleGVkSXRlcmF0b3I8Y29uc3QgVCwgY29uc3QgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+
JiByaWdodCkKK3sKKyAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGxlZnQgPj0gcmlnaHQu
bV92ZWN0b3ItPmRhdGEoKSk7CisgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhsZWZ0IDw9
IHJpZ2h0Lm1fdmVjdG9yLT5lbmQoKS5nZXQoKSk7CisgICAgcmV0dXJuIGxlZnQgLSByaWdodC5n
ZXQoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShWYWx1ZVR5cGUq
IGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxl
cj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA9PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+
CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5k
ZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7Cisg
ICAgcmV0dXJuIHJpZ2h0ID09IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBl
bmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9w
ZXJhdG9yIT0oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVU
eXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgIT0gbGVm
dDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWYWx1ZVR5
cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFu
ZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCAhPSBsZWZ0OworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhl
ZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAg
cmV0dXJuIHJpZ2h0ID49IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJh
dG9yPD0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFs
dWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPj0g
bGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I+PShWYWx1ZVR5cGUq
IGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxl
cj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA8PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+
CitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5k
ZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7Cisg
ICAgcmV0dXJuIHJpZ2h0IDw9IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBl
bmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9w
ZXJhdG9yPChWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5
cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA+IGxlZnQ7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBWYWx1ZVR5cGUq
IGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxl
cj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA+IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4K
K2lubGluZSBib29sIG9wZXJhdG9yPihWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVy
YXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVy
biByaWdodCA8IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1
ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPihj
b25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUs
IE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA8IGxlZnQ7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWZWN0b3JUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXI+IHN0cnVjdCBJbmRleGVkSXRlcmF0b3JTZWxlY3RvciB7CisgICAgdHlwZWRlZiB0eXBlbmFt
ZSBWZWN0b3JUeXBlOjpWYWx1ZVR5cGUgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgSW5kZXhlZEl0
ZXJhdG9yPFZlY3RvclR5cGUsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiBpdGVyYXRvcjsK
KyAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVy
YXRvcjsKKyAgICBzdGF0aWMgaXRlcmF0b3IgbWFrZUl0ZXJhdG9yKFZlY3RvclR5cGUmIHZlY3Rv
ciwgVmFsdWVUeXBlKiBwKSB7IHJldHVybiBpdGVyYXRvcih2ZWN0b3IsIHApOyB9CisgICAgc3Rh
dGljIGNvbnN0X2l0ZXJhdG9yIG1ha2VDb25zdEl0ZXJhdG9yKGNvbnN0IFZlY3RvclR5cGUmIHZl
Y3RvciwgY29uc3QgVmFsdWVUeXBlKiBwKSB7IHJldHVybiBjb25zdF9pdGVyYXRvcih2ZWN0b3Is
IHApOyB9Cit9OworCisjdW5kZWYgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVworCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5LmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaAppbmRleCBhNTVkN2FlZWFiODRiOWM0OTUxOTZl
OGUyMzBhMWRjMTc4NTE5M2FiLi44MTFlOWZmY2VhMzM3YTZjN2Q4YjI5MTYzMGUyYWZkZjhlNTY2
MzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaApAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6
CiAgICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+cmVmQ291bnQgPSAxOwogICAg
ICAgICBIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSktPmxlbmd0aCA9IG90aGVyLnNpemUoKTsK
ICAgICAgICAgQVNTRVJUKEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+bGVuZ3RoID09IG90
aGVyLnNpemUoKSk7Ci0gICAgICAgIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+Ojp1bmluaXRpYWxp
emVkQ29weShvdGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSwgbV9kYXRhKTsKKyAgICAgICAgVmVj
dG9yVHlwZU9wZXJhdGlvbnM8VD46OnVuaW5pdGlhbGl6ZWRDb3B5KGdldFB0cihvdGhlci5iZWdp
bigpKSwgZ2V0UHRyKG90aGVyLmVuZCgpKSwgbV9kYXRhKTsKICAgICB9CiAgICAgCiAgICAgUmVm
Q291bnRlZEFycmF5JiBvcGVyYXRvcj0oY29uc3QgUmVmQ291bnRlZEFycmF5JiBvdGhlcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oIGIvU291cmNlL1dURi93dGYvVmVjdG9y
LmgKaW5kZXggMjc0NTY4YTY5MWM2NGEwMzQyM2E0ZjJiNzM0ODc3ZTYyMDcyZDkxZS4uNGFhYTQ4
YWMyNGE0MmZlOTlhODA4ZWE3YjFlZDJiOGQwODIyYzAwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvVmVjdG9yLmgKKysrIGIvU291cmNlL1dURi93dGYvVmVjdG9yLmgKQEAgLTI4LDYgKzI4
LDggQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRp
Yy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9JbmRleGVkSXRlcmF0b3IuaD4KICNpbmNsdWRlIDx3dGYvTWFsbG9j
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgpAQCAtNTU0LDE0ICs1NTYsMTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5z
aWduZWQgaW5saW5lQ2FwYWNpdHkgPSAwLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIgPSBDcmEK
IGNsYXNzIFZlY3RvciA6IHByaXZhdGUgVmVjdG9yQnVmZmVyPFQsIGlubGluZUNhcGFjaXR5PiB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwcml2YXRlOgorCiAgICAgdHlwZWRlZiBW
ZWN0b3JCdWZmZXI8VCwgaW5saW5lQ2FwYWNpdHk+IEJhc2U7CiAgICAgdHlwZWRlZiBWZWN0b3JU
eXBlT3BlcmF0aW9uczxUPiBUeXBlT3BlcmF0aW9uczsKKyAgICB0eXBlZGVmIEluZGV4ZWRJdGVy
YXRvclNlbGVjdG9yPFZlY3RvciwgT3ZlcmZsb3dIYW5kbGVyPiBJdGVyYXRvclNlbGVjdG9yOwog
CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKIAotICAgIHR5cGVkZWYgVCogaXRl
cmF0b3I7Ci0gICAgdHlwZWRlZiBjb25zdCBUKiBjb25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVm
IHR5cGVuYW1lIEl0ZXJhdG9yU2VsZWN0b3I6Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHR5cGVk
ZWYgdHlwZW5hbWUgSXRlcmF0b3JTZWxlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0
b3I7CisKICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJz
ZV9pdGVyYXRvcjsKICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVy
YXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKIApAQCAtNTc0LDE0ICs1NzksMTQgQEAgcHVi
bGljOgogICAgICAgICA6IEJhc2Uoc2l6ZSwgc2l6ZSkKICAgICB7CiAgICAgICAgIGlmIChiZWdp
bigpKQotICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoYmVnaW4oKSwgZW5k
KCkpOworICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoZ2V0UHRyKGJlZ2lu
KCkpLCBnZXRQdHIoZW5kKCkpKTsKICAgICB9CiAKICAgICBWZWN0b3IodW5zaWduZWQgc2l6ZSwg
Y29uc3QgVCYgdmFsKQogICAgICAgICA6IEJhc2Uoc2l6ZSwgc2l6ZSkKICAgICB7CiAgICAgICAg
IGlmIChiZWdpbigpKQotICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRG
aWxsKGJlZ2luKCksIGVuZCgpLCB2YWwpOworICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVu
aW5pdGlhbGl6ZWRGaWxsKGdldFB0cihiZWdpbigpKSwgZ2V0UHRyKGVuZCgpKSwgdmFsKTsKICAg
ICB9CiAKICAgICBWZWN0b3Ioc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IGluaXRpYWxpemVyTGlz
dCkKQEAgLTY0NSwxMCArNjUwLDEwIEBAIHB1YmxpYzoKICAgICBjb25zdCBUKiBkYXRhKCkgY29u
c3QgeyByZXR1cm4gQmFzZTo6YnVmZmVyKCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGRhdGFN
ZW1vcnlPZmZzZXQoKSB7IHJldHVybiBCYXNlOjpidWZmZXJNZW1vcnlPZmZzZXQoKTsgfQogCi0g
ICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBkYXRhKCk7IH0KLSAgICBpdGVyYXRvciBlbmQo
KSB7IHJldHVybiBiZWdpbigpICsgbV9zaXplOyB9Ci0gICAgY29uc3RfaXRlcmF0b3IgYmVnaW4o
KSBjb25zdCB7IHJldHVybiBkYXRhKCk7IH0KLSAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBiZWdpbigpICsgbV9zaXplOyB9CisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJl
dHVybiBJdGVyYXRvclNlbGVjdG9yOjptYWtlSXRlcmF0b3IoKnRoaXMsIGRhdGEoKSk7IH0KKyAg
ICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBiZWdpbigpICsgc2l6ZSgpOyB9CisgICAgY29uc3Rf
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBJdGVyYXRvclNlbGVjdG9yOjptYWtlQ29u
c3RJdGVyYXRvcigqdGhpcywgZGF0YSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNv
bnN0IHsgcmV0dXJuIGJlZ2luKCkgKyBzaXplKCk7IH0KIAogICAgIHJldmVyc2VfaXRlcmF0b3Ig
cmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICAgICByZXZlcnNl
X2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CkBA
IC02ODMsNiArNjg4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhcigpIHsgc2hyaW5rQ2Fw
YWNpdHkoMCk7IH0KIAorICAgIHZvaWQgYXBwZW5kKGNvbnN0X2l0ZXJhdG9yLCB1bnNpZ25lZCk7
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCBhcHBlbmQoY29uc3QgVSosIHVuc2lnbmVk
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIGFwcGVuZChVJiYpOwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+IHZvaWQgdW5jaGVja2VkQXBwZW5kKFUmJiB2YWwpOwpAQCAtNzQ2LDcg
Kzc1Miw3IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6VmVj
dG9yKGNvbnN0IFZlY3RvciYgb3RoZXIpCiAgICAgOiBCYXNlKG90aGVyLmNhcGFjaXR5KCksIG90
aGVyLnNpemUoKSkKIHsKICAgICBpZiAoYmVnaW4oKSkKLSAgICAgICAgVHlwZU9wZXJhdGlvbnM6
OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpLCBiZWdpbigpKTsK
KyAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KGdldFB0cihvdGhlci5i
ZWdpbigpKSwgZ2V0UHRyKG90aGVyLmVuZCgpKSwgZ2V0UHRyKGJlZ2luKCkpKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4KQEAgLTc1NSw3ICs3NjEsNyBAQCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlcj46OlZlY3Rvcihjb25zdCBWZWN0b3I8VCwgb3RoZXJDYXBhY2l0eQog
ICAgIDogQmFzZShvdGhlci5jYXBhY2l0eSgpLCBvdGhlci5zaXplKCkpCiB7CiAgICAgaWYgKGJl
Z2luKCkpCi0gICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShvdGhlci5i
ZWdpbigpLCBvdGhlci5lbmQoKSwgYmVnaW4oKSk7CisgICAgICAgIFR5cGVPcGVyYXRpb25zOjp1
bmluaXRpYWxpemVkQ29weShnZXRQdHIob3RoZXIuYmVnaW4oKSksIGdldFB0cihvdGhlci5lbmQo
KSksIGdldFB0cihiZWdpbigpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVk
IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CkBAIC03NzIsOCArNzc4
LDggQEAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+JiBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGEKICAgICAgICAgQVNTRVJUKGJlZ2luKCkpOwog
ICAgIH0KICAgICAKLSAgICBzdGQ6OmNvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuYmVnaW4oKSAr
IHNpemUoKSwgYmVnaW4oKSk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5
KG90aGVyLmJlZ2luKCkgKyBzaXplKCksIG90aGVyLmVuZCgpLCBlbmQoKSk7CisgICAgc3RkOjpj
b3B5KGdldFB0cihvdGhlci5iZWdpbigpKSwgZ2V0UHRyKG90aGVyLmJlZ2luKCkgKyBzaXplKCkp
LCBnZXRQdHIoYmVnaW4oKSkpOworICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29w
eShnZXRQdHIob3RoZXIuYmVnaW4oKSArIHNpemUoKSksIGdldFB0cihvdGhlci5lbmQoKSksIGdl
dFB0cihlbmQoKSkpOwogICAgIG1fc2l6ZSA9IG90aGVyLnNpemUoKTsKIAogICAgIHJldHVybiAq
dGhpczsKQEAgLTc5Nyw5ICs4MDMsOSBAQCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlcj4mIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYQogICAgICAg
ICByZXNlcnZlQ2FwYWNpdHkob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgQVNTRVJUKGJlZ2luKCkp
OwogICAgIH0KLSAgICAKLSAgICBzdGQ6OmNvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuYmVnaW4o
KSArIHNpemUoKSwgYmVnaW4oKSk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRD
b3B5KG90aGVyLmJlZ2luKCkgKyBzaXplKCksIG90aGVyLmVuZCgpLCBlbmQoKSk7CisKKyAgICBz
dGQ6OmNvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuYmVnaW4oKSArIHNp
emUoKSksIGdldFB0cihiZWdpbigpKSk7CisgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6
ZWRDb3B5KGdldFB0cihvdGhlci5iZWdpbigpICsgc2l6ZSgpKSwgZ2V0UHRyKG90aGVyLmVuZCgp
KSwgZ2V0UHRyKGVuZCgpKSk7CiAgICAgbV9zaXplID0gb3RoZXIuc2l6ZSgpOwogCiAgICAgcmV0
dXJuICp0aGlzOwpAQCAtODU5LDggKzg2NSw4IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpmaWxsKGNvbnN0IFQmIHZhbCwgdW5zaWduZWQgbmV3CiAg
ICAgICAgIEFTU0VSVChiZWdpbigpKTsKICAgICB9CiAgICAgCi0gICAgc3RkOjpmaWxsKGJlZ2lu
KCksIGVuZCgpLCB2YWwpOwotICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkRmlsbChl
bmQoKSwgYmVnaW4oKSArIG5ld1NpemUsIHZhbCk7CisgICAgc3RkOjpmaWxsKGdldFB0cihiZWdp
bigpKSwgZ2V0UHRyKGVuZCgpKSwgdmFsKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFs
aXplZEZpbGwoZ2V0UHRyKGVuZCgpKSwgZ2V0UHRyKGJlZ2luKCkpICsgbmV3U2l6ZSwgdmFsKTsK
ICAgICBtX3NpemUgPSBuZXdTaXplOwogfQogCkBAIC04ODEsMTMgKzg4NywxMyBAQCB2b2lkIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6ZXhwYW5kQ2FwYWNpdHko
dW5zaWduZWQgbmV3TWluQwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIFQqIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6ZXhwYW5kQ2FwYWNpdHkodW5zaWduZWQgbmV3TWluQ2Fw
YWNpdHksIFQqIHB0cikKIHsKLSAgICBpZiAocHRyIDwgYmVnaW4oKSB8fCBwdHIgPj0gZW5kKCkp
IHsKKyAgICBpZiAocHRyIDwgZ2V0UHRyKGJlZ2luKCkpIHx8IHB0ciA+PSBnZXRQdHIoZW5kKCkp
KSB7CiAgICAgICAgIGV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5KTsKICAgICAgICAgcmV0
dXJuIHB0cjsKICAgICB9Ci0gICAgdW5zaWduZWQgaW5kZXggPSBwdHIgLSBiZWdpbigpOworICAg
IHVuc2lnbmVkIGluZGV4ID0gcHRyIC0gZ2V0UHRyKGJlZ2luKCkpOwogICAgIGV4cGFuZENhcGFj
aXR5KG5ld01pbkNhcGFjaXR5KTsKLSAgICByZXR1cm4gYmVnaW4oKSArIGluZGV4OworICAgIHJl
dHVybiBnZXRQdHIoYmVnaW4oKSkgKyBpbmRleDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KQEAgLTg5
OSwxNSArOTA1LDE1IEBAIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXI+Ojp0cnlFeHBhbmRDYXBhY2l0eSh1bnNpZ25lZCBuZXdNCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgog
Y29uc3QgVCogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojp0cnlF
eHBhbmRDYXBhY2l0eSh1bnNpZ25lZCBuZXdNaW5DYXBhY2l0eSwgY29uc3QgVCogcHRyKQogewot
ICAgIGlmIChwdHIgPCBiZWdpbigpIHx8IHB0ciA+PSBlbmQoKSkgeworICAgIGlmIChwdHIgPCBn
ZXRQdHIoYmVnaW4oKSkgfHwgcHRyID49IGdldFB0cihlbmQoKSkpIHsKICAgICAgICAgaWYgKCF0
cnlFeHBhbmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0eSkpCiAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9Ci0gICAgdW5zaWduZWQgaW5kZXggPSBwdHIgLSBi
ZWdpbigpOworICAgIHVuc2lnbmVkIGluZGV4ID0gcHRyIC0gZ2V0UHRyKGJlZ2luKCkpOwogICAg
IGlmICghdHJ5RXhwYW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpKQogICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gYmVnaW4oKSArIGluZGV4OworICAgIHJldHVybiBnZXRQdHIoYmVnaW4o
KSkgKyBpbmRleDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KQEAg
LTkyMSwxMiArOTI3LDEyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNh
cGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CiBpbmxpbmUgdm9pZCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnJlc2l6ZSh1bnNpZ25lZCBzaXplKQog
ewogICAgIGlmIChzaXplIDw9IG1fc2l6ZSkKLSAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmRlc3Ry
dWN0KGJlZ2luKCkgKyBzaXplLCBlbmQoKSk7CisgICAgICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0
cnVjdChnZXRQdHIoYmVnaW4oKSkgKyBzaXplLCBnZXRQdHIoZW5kKCkpKTsKICAgICBlbHNlIHsK
ICAgICAgICAgaWYgKHNpemUgPiBjYXBhY2l0eSgpKQogICAgICAgICAgICAgZXhwYW5kQ2FwYWNp
dHkoc2l6ZSk7CiAgICAgICAgIGlmIChiZWdpbigpKQotICAgICAgICAgICAgVHlwZU9wZXJhdGlv
bnM6OmluaXRpYWxpemUoZW5kKCksIGJlZ2luKCkgKyBzaXplKTsKKyAgICAgICAgICAgIFR5cGVP
cGVyYXRpb25zOjppbml0aWFsaXplKGdldFB0cihlbmQoKSksIGdldFB0cihiZWdpbigpKSArIHNp
emUpOwogICAgIH0KICAgICAKICAgICBtX3NpemUgPSBzaXplOwpAQCAtOTQzLDcgKzk0OSw3IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXI+CiB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyPjo6c2hyaW5rKHVuc2lnbmVkIHNpemUpCiB7CiAgICAgQVNTRVJUKHNpemUgPD0gbV9z
aXplKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QoYmVnaW4oKSArIHNpemUsIGVuZCgp
KTsKKyAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QoZ2V0UHRyKGJlZ2luKCkpICsgc2l6ZSwg
Z2V0UHRyKGVuZCgpKSk7CiAgICAgbV9zaXplID0gc2l6ZTsKIH0KIApAQCAtOTU0LDcgKzk2MCw3
IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojpncm93
KHVuc2lnbmVkIHNpemUpCiAgICAgaWYgKHNpemUgPiBjYXBhY2l0eSgpKQogICAgICAgICBleHBh
bmRDYXBhY2l0eShzaXplKTsKICAgICBpZiAoYmVnaW4oKSkKLSAgICAgICAgVHlwZU9wZXJhdGlv
bnM6OmluaXRpYWxpemUoZW5kKCksIGJlZ2luKCkgKyBzaXplKTsKKyAgICAgICAgVHlwZU9wZXJh
dGlvbnM6OmluaXRpYWxpemUoZ2V0UHRyKGVuZCgpKSwgZ2V0UHRyKGJlZ2luKCkpICsgc2l6ZSk7
CiAgICAgbV9zaXplID0gc2l6ZTsKIH0KIApAQCAtOTYzLDExICs5NjksMTEgQEAgdm9pZCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnJlc2VydmVDYXBhY2l0eSh1
bnNpZ25lZCBuZXdDYXAKIHsKICAgICBpZiAobmV3Q2FwYWNpdHkgPD0gY2FwYWNpdHkoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIFQqIG9sZEJ1ZmZlciA9IGJlZ2luKCk7Ci0gICAgVCogb2xkRW5k
ID0gZW5kKCk7CisgICAgVCogb2xkQnVmZmVyID0gZ2V0UHRyKGJlZ2luKCkpOworICAgIFQqIG9s
ZEVuZCA9IGdldFB0cihlbmQoKSk7CiAgICAgQmFzZTo6YWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNp
dHkpOwogICAgIEFTU0VSVChiZWdpbigpKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShvbGRC
dWZmZXIsIG9sZEVuZCwgYmVnaW4oKSk7CisgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVm
ZmVyLCBvbGRFbmQsIGdldFB0cihiZWdpbigpKSk7CiAgICAgQmFzZTo6ZGVhbGxvY2F0ZUJ1ZmZl
cihvbGRCdWZmZXIpOwogfQogCkBAIC05NzYsMTIgKzk4MiwxMiBAQCBib29sIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6dHJ5UmVzZXJ2ZUNhcGFjaXR5KHVuc2ln
bmVkIG5ldwogewogICAgIGlmIChuZXdDYXBhY2l0eSA8PSBjYXBhY2l0eSgpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBUKiBvbGRCdWZmZXIgPSBiZWdpbigpOwotICAgIFQqIG9sZEVuZCA9
IGVuZCgpOworICAgIFQqIG9sZEJ1ZmZlciA9IGdldFB0cihiZWdpbigpKTsKKyAgICBUKiBvbGRF
bmQgPSBnZXRQdHIoZW5kKCkpOwogICAgIGlmICghQmFzZTo6dHJ5QWxsb2NhdGVCdWZmZXIobmV3
Q2FwYWNpdHkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgQVNTRVJUKGJlZ2luKCkpOwot
ICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBiZWdpbigpKTsKKyAg
ICBUeXBlT3BlcmF0aW9uczo6bW92ZShvbGRCdWZmZXIsIG9sZEVuZCwgZ2V0UHRyKGJlZ2luKCkp
KTsKICAgICBCYXNlOjpkZWFsbG9jYXRlQnVmZmVyKG9sZEJ1ZmZlcik7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC0xMDA0LDE3ICsxMDEwLDE3IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpzaHJpbmtDYXBhY2l0eSh1bnNpZ25lZCBuZXdDYXBhCiAg
ICAgaWYgKG5ld0NhcGFjaXR5IDwgc2l6ZSgpKSAKICAgICAgICAgc2hyaW5rKG5ld0NhcGFjaXR5
KTsKIAotICAgIFQqIG9sZEJ1ZmZlciA9IGJlZ2luKCk7CisgICAgVCogb2xkQnVmZmVyID0gZ2V0
UHRyKGJlZ2luKCkpOwogICAgIGlmIChuZXdDYXBhY2l0eSA+IDApIHsKICAgICAgICAgaWYgKEJh
c2U6OnNob3VsZFJlYWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpKSB7CiAgICAgICAgICAgICBC
YXNlOjpyZWFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIFQqIG9sZEVuZCA9IGVuZCgpOworICAgICAgICBUKiBvbGRF
bmQgPSBnZXRQdHIoZW5kKCkpOwogICAgICAgICBCYXNlOjphbGxvY2F0ZUJ1ZmZlcihuZXdDYXBh
Y2l0eSk7Ci0gICAgICAgIGlmIChiZWdpbigpICE9IG9sZEJ1ZmZlcikKLSAgICAgICAgICAgIFR5
cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBiZWdpbigpKTsKKyAgICAgICAg
aWYgKGdldFB0cihiZWdpbigpKSAhPSBvbGRCdWZmZXIpCisgICAgICAgICAgICBUeXBlT3BlcmF0
aW9uczo6bW92ZShvbGRCdWZmZXIsIG9sZEVuZCwgZ2V0UHRyKGJlZ2luKCkpKTsKICAgICB9CiAK
ICAgICBCYXNlOjpkZWFsbG9jYXRlQnVmZmVyKG9sZEJ1ZmZlcik7CkBAIC0xMDM0LDExICsxMDQw
LDE3IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojph
cHBlbmQoY29uc3QgVSogZGF0YSwgdW5zaWduZWQKICAgICB9CiAgICAgaWYgKG5ld1NpemUgPCBt
X3NpemUpCiAgICAgICAgIENSQVNIKCk7Ci0gICAgVCogZGVzdCA9IGVuZCgpOworICAgIFQqIGRl
c3QgPSBnZXRQdHIoZW5kKCkpOwogICAgIFZlY3RvckNvcGllcjxzdGQ6OmlzX3RyaXZpYWw8VD46
OnZhbHVlLCBVPjo6dW5pbml0aWFsaXplZENvcHkoZGF0YSwgJmRhdGFbZGF0YVNpemVdLCBkZXN0
KTsKICAgICBtX3NpemUgPSBuZXdTaXplOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNp
Z25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgordm9pZCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmFwcGVuZChjb25zdF9pdGVy
YXRvciBkYXRhLCB1bnNpZ25lZCBkYXRhU2l6ZSkKK3sKKyAgICBhcHBlbmQoZ2V0UHRyKGRhdGEp
LCBkYXRhU2l6ZSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNh
cGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CiBi
b29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6dHJ5QXBwZW5k
KGNvbnN0IFUqIGRhdGEsIHVuc2lnbmVkIGRhdGFTaXplKQogewpAQCAtMTA1MSw3ICsxMDYzLDcg
QEAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnRyeUFw
cGVuZChjb25zdCBVKiBkYXRhLCB1bnNpZ24KICAgICB9CiAgICAgaWYgKG5ld1NpemUgPCBtX3Np
emUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBUKiBkZXN0ID0gZW5kKCk7CisgICAgVCog
ZGVzdCA9IGdldFB0cihlbmQoKSk7CiAgICAgVmVjdG9yQ29waWVyPHN0ZDo6aXNfdHJpdmlhbDxU
Pjo6dmFsdWUsIFU+Ojp1bmluaXRpYWxpemVkQ29weShkYXRhLCAmZGF0YVtkYXRhU2l6ZV0sIGRl
c3QpOwogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDYxLDcg
KzEwNzMsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwg
dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiB0ZW1wbGF0ZQogQUxXQVlTX0lOTElORSB2b2lkIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kKFUmJiB2YWx1
ZSkKIHsKICAgICBpZiAoc2l6ZSgpICE9IGNhcGFjaXR5KCkpIHsKLSAgICAgICAgbmV3IChOb3RO
dWxsLCBlbmQoKSkgVChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICAgICAgbmV3IChOb3RO
dWxsLCBnZXRQdHIoZW5kKCkpKSBUKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwogICAgICAgICAr
K21fc2l6ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwNzgsNyArMTA5MCw3IEBAIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmRTbG93
Q2FzZShVJiYgdmFsdWUpCiAgICAgcHRyID0gZXhwYW5kQ2FwYWNpdHkoc2l6ZSgpICsgMSwgcHRy
KTsKICAgICBBU1NFUlQoYmVnaW4oKSk7CiAKLSAgICBuZXcgKE5vdE51bGwsIGVuZCgpKSBUKHN0
ZDo6Zm9yd2FyZDxVPigqcHRyKSk7CisgICAgbmV3IChOb3ROdWxsLCBnZXRQdHIoZW5kKCkpKSBU
KHN0ZDo6Zm9yd2FyZDxVPigqcHRyKSk7CiAgICAgKyttX3NpemU7CiB9CiAKQEAgLTEwOTEsMTQg
KzExMDMsMTQgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXI+Ojp1bmNoZWNrZWRBcHBlbmQoVSYmIHZhbHUKICAgICBBU1NFUlQoc2l6ZSgpIDwg
Y2FwYWNpdHkoKSk7CiAKICAgICBhdXRvIHB0ciA9IHN0ZDo6YWRkcmVzc29mKHZhbHVlKTsKLSAg
ICBuZXcgKE5vdE51bGwsIGVuZCgpKSBUKHN0ZDo6Zm9yd2FyZDxVPigqcHRyKSk7CisgICAgbmV3
IChOb3ROdWxsLCBnZXRQdHIoZW5kKCkpKSBUKHN0ZDo6Zm9yd2FyZDxVPigqcHRyKSk7CiAgICAg
KyttX3NpemU7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHRlbXBsYXRlPHR5cGVuYW1lIFUsIHVuc2ln
bmVkIG90aGVyQ2FwYWNpdHk+CiBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlcj46OmFwcGVuZFZlY3Rvcihjb25zdCBWZWN0b3I8VSwgb3RoZXJDYXBh
Y2l0eT4mIHZhbCkKIHsKLSAgICBhcHBlbmQodmFsLmJlZ2luKCksIHZhbC5zaXplKCkpOworICAg
IGFwcGVuZChnZXRQdHIodmFsLmJlZ2luKCkpLCB2YWwuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KQEAgLTExMTIsOCArMTEyNCw4IEBAIHZvaWQgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnQodW5zaWduZWQg
cG9zaXRpb24sIGNvbnN0CiAgICAgfQogICAgIGlmIChuZXdTaXplIDwgbV9zaXplKQogICAgICAg
ICBDUkFTSCgpOwotICAgIFQqIHNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247Ci0gICAgVHlwZU9w
ZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90LCBlbmQoKSwgc3BvdCArIGRhdGFTaXplKTsK
KyAgICBUKiBzcG90ID0gZ2V0UHRyKGJlZ2luKCkpICsgcG9zaXRpb247CisgICAgVHlwZU9wZXJh
dGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90LCBnZXRQdHIoZW5kKCkpLCBzcG90ICsgZGF0YVNp
emUpOwogICAgIFZlY3RvckNvcGllcjxzdGQ6OmlzX3RyaXZpYWw8VD46OnZhbHVlLCBVPjo6dW5p
bml0aWFsaXplZENvcHkoZGF0YSwgJmRhdGFbZGF0YVNpemVdLCBzcG90KTsKICAgICBtX3NpemUg
PSBuZXdTaXplOwogfQpAQCAtMTEyOSw4ICsxMTQxLDggQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnQodW5zaWduZWQgcG9zaXRp
b24KICAgICAgICAgQVNTRVJUKGJlZ2luKCkpOwogICAgIH0KIAotICAgIFQqIHNwb3QgPSBiZWdp
bigpICsgcG9zaXRpb247Ci0gICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90
LCBlbmQoKSwgc3BvdCArIDEpOworICAgIFQqIHNwb3QgPSBnZXRQdHIoYmVnaW4oKSkgKyBwb3Np
dGlvbjsKKyAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGdldFB0cihl
bmQoKSksIHNwb3QgKyAxKTsKICAgICBuZXcgKE5vdE51bGwsIHNwb3QpIFQoc3RkOjpmb3J3YXJk
PFU+KCpwdHIpKTsKICAgICArK21fc2l6ZTsKIH0KQEAgLTExMzgsMTYgKzExNTAsMTYgQEAgaW5s
aW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjppbnNl
cnQodW5zaWduZWQgcG9zaXRpb24KIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGlu
ZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHRlbXBsYXRlPHR5cGVuYW1lIFUs
IHVuc2lnbmVkIGM+CiBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlcj46Omluc2VydFZlY3Rvcih1bnNpZ25lZCBwb3NpdGlvbiwgY29uc3QgVmVjdG9y
PFUsIGM+JiB2YWwpCiB7Ci0gICAgaW5zZXJ0KHBvc2l0aW9uLCB2YWwuYmVnaW4oKSwgdmFsLnNp
emUoKSk7CisgICAgaW5zZXJ0KHBvc2l0aW9uLCBnZXRQdHIodmFsLmJlZ2luKCkpLCB2YWwuc2l6
ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHks
IHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlKHVuc2lnbmVkIHBvc2l0aW9uKQogewog
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0aW9uIDwgc2l6ZSgpKTsK
LSAgICBUKiBzcG90ID0gYmVnaW4oKSArIHBvc2l0aW9uOworICAgIFQqIHNwb3QgPSBnZXRQdHIo
YmVnaW4oKSkgKyBwb3NpdGlvbjsKICAgICBzcG90LT5+VCgpOwotICAgIFR5cGVPcGVyYXRpb25z
Ojptb3ZlT3ZlcmxhcHBpbmcoc3BvdCArIDEsIGVuZCgpLCBzcG90KTsKKyAgICBUeXBlT3BlcmF0
aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QgKyAxLCBnZXRQdHIoZW5kKCkpLCBzcG90KTsKICAg
ICAtLW1fc2l6ZTsKIH0KIApAQCAtMTE1NiwxMCArMTE2OCwxMCBAQCBpbmxpbmUgdm9pZCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnJlbW92ZSh1bnNpZ25lZCBw
b3NpdGlvbgogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0aW9u
IDw9IHNpemUoKSk7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRp
b24gKyBsZW5ndGggPD0gc2l6ZSgpKTsKLSAgICBUKiBiZWdpblNwb3QgPSBiZWdpbigpICsgcG9z
aXRpb247CisgICAgVCogYmVnaW5TcG90ID0gZ2V0UHRyKGJlZ2luKCkpICsgcG9zaXRpb247CiAg
ICAgVCogZW5kU3BvdCA9IGJlZ2luU3BvdCArIGxlbmd0aDsKICAgICBUeXBlT3BlcmF0aW9uczo6
ZGVzdHJ1Y3QoYmVnaW5TcG90LCBlbmRTcG90KTsgCi0gICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVP
dmVybGFwcGluZyhlbmRTcG90LCBlbmQoKSwgYmVnaW5TcG90KTsKKyAgICBUeXBlT3BlcmF0aW9u
czo6bW92ZU92ZXJsYXBwaW5nKGVuZFNwb3QsIGdldFB0cihlbmQoKSksIGJlZ2luU3BvdCk7CiAg
ICAgbV9zaXplIC09IGxlbmd0aDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggMGNmMDllMWY1ZWM5OGE4NTE0
NGNjNzIyZDJhNmNjNGFlNGY5Mzg5OC4uM2VlODA2OGEzYTc2YTRhNDNhYzY0MzIzMjc3MjY0M2Mx
NjE0OWQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwCkBAIC0xNDM3LDggKzE0MzcsOCBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKLSAgICAgICAgY29uc3QgdWludDhfdCogcHRyID0gYnVmZmVyLmJlZ2luKCk7Ci0gICAgICAg
IGNvbnN0IHVpbnQ4X3QqIGVuZCA9IGJ1ZmZlci5lbmQoKTsKKyAgICAgICAgY29uc3QgdWludDhf
dCogcHRyID0gZ2V0UHRyKGJ1ZmZlci5iZWdpbigpKTsKKyAgICAgICAgY29uc3QgdWludDhfdCog
ZW5kID0gZ2V0UHRyKGJ1ZmZlci5lbmQoKSk7CiAgICAgICAgIHVpbnQzMl90IHZlcnNpb247CiAg
ICAgICAgIGlmICghcmVhZExpdHRsZUVuZGlhbihwdHIsIGVuZCwgdmVyc2lvbikgfHwgdmVyc2lv
biA+IEN1cnJlbnRWZXJzaW9uKQogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IDJkOWI3OWUxM2FiZjk2MGE2MTRi
OTZkMjcwNjYwZTVmMzVlMzQxN2YuLmU5MmZiMmY3OTBiZTRjNWMxNjc2YzY5OGM1YmUxYmE2NWUx
YTY5MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTIwNzMs
MTEgKzIwNzMsMTEgQEAgaW5saW5lIGJvb2wgU2VhcmNoQnVmZmVyOjppc0JhZE1hdGNoKGNvbnN0
IFVDaGFyKiBtYXRjaCwgc2l6ZV90IG1hdGNoTGVuZ3RoKSBjb24KICAgICAvLyBjcmVhdGluZyBh
IG5ldyBvbmUgZWFjaCB0aW1lLgogICAgIG5vcm1hbGl6ZUNoYXJhY3RlcnMobWF0Y2gsIG1hdGNo
TGVuZ3RoLCBtX25vcm1hbGl6ZWRNYXRjaCk7CiAKLSAgICBjb25zdCBVQ2hhciogYSA9IG1fbm9y
bWFsaXplZFRhcmdldC5iZWdpbigpOwotICAgIGNvbnN0IFVDaGFyKiBhRW5kID0gbV9ub3JtYWxp
emVkVGFyZ2V0LmVuZCgpOworICAgIGNvbnN0IFVDaGFyKiBhID0gZ2V0UHRyKG1fbm9ybWFsaXpl
ZFRhcmdldC5iZWdpbigpKTsKKyAgICBjb25zdCBVQ2hhciogYUVuZCA9IGdldFB0cihtX25vcm1h
bGl6ZWRUYXJnZXQuZW5kKCkpOwogCi0gICAgY29uc3QgVUNoYXIqIGIgPSBtX25vcm1hbGl6ZWRN
YXRjaC5iZWdpbigpOwotICAgIGNvbnN0IFVDaGFyKiBiRW5kID0gbV9ub3JtYWxpemVkTWF0Y2gu
ZW5kKCk7CisgICAgY29uc3QgVUNoYXIqIGIgPSBnZXRQdHIobV9ub3JtYWxpemVkTWF0Y2guYmVn
aW4oKSk7CisgICAgY29uc3QgVUNoYXIqIGJFbmQgPSBnZXRQdHIobV9ub3JtYWxpemVkTWF0Y2gu
ZW5kKCkpOwogCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgLy8gU2tpcCBydW5zIG9mIG5v
bi1rYW5hLWxldHRlciBjaGFyYWN0ZXJzLiBUaGlzIGlzIG5lY2Vzc2FyeSBzbyB3ZSBjYW4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
Lm1tCmluZGV4IDAwOThjNzYzMTNmNGNjNjYwZTk2OGE5MGQzZTkzOGE4YjFiYmM5ZGUuLjIwNjJm
ZDNlMTIxM2Q4NjcxNzk2ZWI3MzllOGI1NmM3ZTJiN2E1OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQpAQCAtNTU1LDcg
KzU1NSw3IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25I
aWdobGlnaHQoKQogCiAgICAgICAgIGlmICghY2dSZWN0cy5pc0VtcHR5KCkpIHsKICAgICAgICAg
ICAgIENHUmVjdCB2aXNpYmxlUmVjdCA9IG1haW5GcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVj
dCgpOwotICAgICAgICAgICAgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCA9
IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxl
QW5kRGlyZWN0aW9uKG51bGxwdHIsIGNnUmVjdHMuYmVnaW4oKSwgY2dSZWN0cy5zaXplKCksIHZp
c2libGVSZWN0LCBEREhpZ2hsaWdodE5vT3V0bGluZVdpdGhBcnJvdywgWUVTLCBOU1dyaXRpbmdE
aXJlY3Rpb25OYXR1cmFsLCBOTywgWUVTKSk7CisgICAgICAgICAgICBSZXRhaW5QdHI8RERIaWdo
bGlnaHRSZWY+IGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0
c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVBbmREaXJlY3Rpb24obnVsbHB0ciwgY2dSZWN0cy5kYXRh
KCksIGNnUmVjdHMuc2l6ZSgpLCB2aXNpYmxlUmVjdCwgRERIaWdobGlnaHROb091dGxpbmVXaXRo
QXJyb3csIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6
OmNyZWF0ZUZvclNlbGVjdGlvbigqdGhpcywgZGRIaWdobGlnaHQsIHNlbGVjdGlvblJhbmdlKSk7
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NlZ21lbnRlZEZvbnREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NlZ21lbnRlZEZvbnREYXRhLmNwcAppbmRleCBkMWI5MmI3YjYwOWI0NTE5OWM4NGE0NmFlZTlm
ZGI2YzRmN2NmZWM1Li41MDNiMGU4ZDliYmYyOTA2Y2U3M2JlYmViYTAxYmQ2MDNlYzc5OTkzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250
RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVk
Rm9udERhdGEuY3BwCkBAIC0zOSw4ICszOSw4IEBAIFNlZ21lbnRlZEZvbnREYXRhOjp+U2VnbWVu
dGVkRm9udERhdGEoKQogCiBjb25zdCBTaW1wbGVGb250RGF0YSogU2VnbWVudGVkRm9udERhdGE6
OmZvbnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKIHsKLSAgICBWZWN0b3I8Rm9u
dERhdGFSYW5nZT46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwotICAgIGZv
ciAoVmVjdG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIGF1dG8gZW5kID0gbV9yYW5nZXMuZW5kKCk7
CisgICAgZm9yIChhdXRvIGl0ID0gbV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CiAgICAgICAgIGlmIChpdC0+ZnJvbSgpIDw9IGMgJiYgaXQtPnRvKCkgPj0gYykKICAgICAgICAg
ICAgIHJldHVybiBpdC0+Zm9udERhdGEoKS5nZXQoKTsKICAgICB9CkBAIC00OSw4ICs0OSw4IEBA
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBTZWdtZW50ZWRGb250RGF0YTo6Zm9udERhdGFGb3JDaGFy
YWN0ZXIoVUNoYXIzMiBjKSBjb25zdAogCiBib29sIFNlZ21lbnRlZEZvbnREYXRhOjpjb250YWlu
c0NoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPEZvbnREYXRhUmFuZ2U+
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxG
b250RGF0YVJhbmdlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICBhdXRvIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOworICAgIGZvciAo
YXV0byBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBp
ZiAoYyA+PSBpdC0+ZnJvbSgpICYmIGMgPD0gaXQtPnRvKCkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CkBAIC03Niw4ICs3Niw4IEBAIGJvb2wgU2VnbWVudGVkRm9udERhdGE6Omlz
Q3VzdG9tRm9udCgpIGNvbnN0CiAKIGJvb2wgU2VnbWVudGVkRm9udERhdGE6OmlzTG9hZGluZygp
IGNvbnN0CiB7Ci0gICAgVmVjdG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3Jhbmdlcy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxGb250RGF0YVJhbmdlPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBh
dXRvIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IG1fcmFuZ2VzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoaXQtPmZvbnREYXRhKCktPmlz
TG9hZGluZygpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCmluZGV4IDA1
MTg3MWFjNmM2MGZiNjQzOTI4MzBhYWM2YWQzODUyYTk0ZDQ0NzYuLmRkMDk2M2E3NTAxYWQyZWUw
NjMxYTVlMTZkNzk1MTExMTIyMzlkNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAKQEAgLTIwMCw3ICsyMDAsNyBAQCBib29s
IGNvbnZlcnRXT0ZGVG9TZm50KFNoYXJlZEJ1ZmZlciogd29mZiwgVmVjdG9yPGNoYXI+JiBzZm50
KQogICAgICAgICAgICAgdUxvbmdmIGRlc3RMZW4gPSB0YWJsZU9yaWdMZW5ndGg7CiAgICAgICAg
ICAgICBpZiAoIXNmbnQudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNmbnQuc2l6ZSgpICsgdGFibGVPcmln
TGVuZ3RoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBCeXRl
ZiogZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Qnl0ZWYqPihzZm50LmVuZCgpKTsKKyAgICAgICAg
ICAgIEJ5dGVmKiBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxCeXRlZio+KGdldFB0cihzZm50LmVu
ZCgpKSk7CiAgICAgICAgICAgICBzZm50Lmdyb3coc2ZudC5zaXplKCkgKyB0YWJsZU9yaWdMZW5n
dGgpOwogICAgICAgICAgICAgaWYgKHVuY29tcHJlc3MoZGVzdCwgJmRlc3RMZW4sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgQnl0ZWYqPih3b2ZmLT5kYXRhKCkgKyB0YWJsZU9mZnNldCksIHRhYmxl
Q29tcExlbmd0aCkgIT0gWl9PSykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENh
aXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50
Q2Fpcm8uY3BwCmluZGV4IDUwMjJjNTBjN2VlODI1ZTI0MGYwZTcxMjI0N2M3ZWYxNjQ4ZjM4YmQu
Ljc1MTZiMGFjZDE1YWFmZDEyYTM1NmFmZjRkNTBhNmM0YWEwMjRmMjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8u
Y3BwCkBAIC01OSw3ICs1OSw3IEBAIGNhaXJvX3BhdHRlcm5fdCogR3JhZGllbnQ6OnBsYXRmb3Jt
R3JhZGllbnQoZmxvYXQgZ2xvYmFsQWxwaGEpCiAgICAgZWxzZQogICAgICAgICBtX2dyYWRpZW50
ID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfbGluZWFyKG1fcDAueCgpLCBtX3AwLnkoKSwgbV9wMS54
KCksIG1fcDEueSgpKTsKIAotICAgIFZlY3RvcjxDb2xvclN0b3A+OjppdGVyYXRvciBzdG9wSXRl
cmF0b3IgPSBtX3N0b3BzLmJlZ2luKCk7CisgICAgYXV0byBzdG9wSXRlcmF0b3IgPSBtX3N0b3Bz
LmJlZ2luKCk7CiAgICAgd2hpbGUgKHN0b3BJdGVyYXRvciAhPSBtX3N0b3BzLmVuZCgpKSB7CiAg
ICAgICAgIGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShtX2dyYWRpZW50LCBzdG9w
SXRlcmF0b3ItPnN0b3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdG9wSXRlcmF0b3ItPnJlZCwgc3RvcEl0ZXJhdG9yLT5ncmVlbiwgc3RvcEl0ZXJhdG9yLT5i
bHVlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAppbmRleCBkZTQ1NTA5NGEwYmNmN2M5ZGQz
YjM5ZTRmODhlMDJjNTA5ZGVlYzg1Li4zYTkzMWRkYmFkNGZiYTVlZTlhZGU4YjZmYWI3MDRlYjVh
ZTAwM2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBA
IHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFy
QmVmb3JlRnJhbWUpCiAgICAgLy8gYWx3YXlzIHVzZSBJbWFnZVNvdXJjZTo6Y2xlYXIodHJ1ZSwg
Li4uKSB0byBjb21wbGV0ZWx5IGZyZWUgdGhlIG1lbW9yeSBpbgogICAgIC8vIHRoaXMgY2FzZS4K
ICAgICBjbGVhckJlZm9yZUZyYW1lID0gc3RkOjptaW4oY2xlYXJCZWZvcmVGcmFtZSwgbV9mcmFt
ZUJ1ZmZlckNhY2hlLnNpemUoKSAtIDEpOwotICAgIGNvbnN0IFZlY3RvcjxJbWFnZUZyYW1lPjo6
aXRlcmF0b3IgZW5kKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpICsgY2xlYXJCZWZvcmVGcmFt
ZSk7CisgICAgY29uc3QgYXV0byBlbmQgPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSArIGNs
ZWFyQmVmb3JlRnJhbWU7CiAKICAgICAvLyBXZSBuZWVkIHRvIHByZXNlcnZlIGZyYW1lcyBzdWNo
IHRoYXQ6CiAgICAgLy8gICAqIFdlIGRvbid0IGNsZWFyIHxlbmR8CkBAIC0xNjUsMTQgKzE2NSwx
NCBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBj
bGVhckJlZm9yZUZyYW1lKQogICAgIC8vICAgKiBJZiB0aGUgZnJhbWUgaXMgcGFydGlhbCwgd2Un
cmUgZGVjb2RpbmcgaXQsIHNvIGRvbid0IGNsZWFyIGl0OyBpZiBpdAogICAgIC8vICAgICBoYXMg
YSBkaXNwb3NhbCBtZXRob2Qgb3RoZXIgdGhhbiBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMsIHN0
b3AKICAgICAvLyAgICAgc2Nhbm5pbmcsIGFzIHdlJ2xsIG9ubHkgbmVlZCB0aGlzIGZyYW1lIHdo
ZW4gZGVjb2RpbmcgdGhlIG5leHQgb25lLgotICAgIFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0
b3IgaShlbmQpOworICAgIGF1dG8gaSA9IGVuZDsKICAgICBmb3IgKDsgKGkgIT0gbV9mcmFtZUJ1
ZmZlckNhY2hlLmJlZ2luKCkpICYmICgoaS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVF
bXB0eSkgfHwgKGktPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3
cml0ZVByZXZpb3VzKSk7IC0taSkgewogICAgICAgICBpZiAoKGktPnN0YXR1cygpID09IEltYWdl
RnJhbWU6OkZyYW1lQ29tcGxldGUpICYmIChpICE9IGVuZCkpCiAgICAgICAgICAgICBpLT5jbGVh
clBpeGVsRGF0YSgpOwogICAgIH0KIAogICAgIC8vIE5vdyB8aXwgaG9sZHMgdGhlIGxhc3QgZnJh
bWUgd2UgbmVlZCB0byBwcmVzZXJ2ZTsgY2xlYXIgcHJpb3IgZnJhbWVzLgotICAgIGZvciAoVmVj
dG9yPEltYWdlRnJhbWU+OjppdGVyYXRvciBqKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKTsg
aiAhPSBpOyArK2opIHsKKyAgICBmb3IgKGF1dG8gaiA9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdp
bigpOyBqICE9IGk7ICsraikgewogICAgICAgICBBU1NFUlQoai0+c3RhdHVzKCkgIT0gSW1hZ2VG
cmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAgaWYgKGotPnN0YXR1cygpICE9IEltYWdlRnJh
bWU6OkZyYW1lRW1wdHkpCiAgICAgICAgICAgICBqLT5jbGVhclBpeGVsRGF0YSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCBlNDhlYjliNjc1ZGM5ZDIxNzU5OTI0
Yzg4MDVhZmEwYjg5YjQ5ODM3Li5lOWZiNWZhM2NkYTE0NzFlYzZlYmFiYjc0YTk2MDFlZmY0YzM1
NDNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtMTU3Nyw4ICsx
NTc3LDggQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50RmlsbExheWVycyhjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgQ29sb3ImIGMsIGNvbnMKICAgICAgICAgY29udGV4dC0+YmVnaW5U
cmFuc3BhcmVuY3lMYXllcigxKTsKICAgICB9CiAKLSAgICBWZWN0b3I8Y29uc3QgRmlsbExheWVy
Kj46OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgdG9wTGF5ZXIgPSBsYXllcnMucmVuZCgpOwotICAg
IGZvciAoVmVjdG9yPGNvbnN0IEZpbGxMYXllcio+Ojpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGl0
ID0gbGF5ZXJzLnJiZWdpbigpOyBpdCAhPSB0b3BMYXllcjsgKytpdCkKKyAgICBhdXRvIHRvcExh
eWVyID0gbGF5ZXJzLnJlbmQoKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBsYXllcnMucmJlZ2luKCk7
IGl0ICE9IHRvcExheWVyOyArK2l0KQogICAgICAgICBwYWludEZpbGxMYXllcihwYWludEluZm8s
IGMsICppdCwgcmVjdCwgYmxlZWRBdm9pZGFuY2UsIG9wLCBiYWNrZ3JvdW5kT2JqZWN0LCBiYXNl
QmdDb2xvclVzYWdlKTsKIAogICAgIGlmIChzaG91bGREcmF3QmFja2dyb3VuZEluU2VwYXJhdGVC
dWZmZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJl
c29sdmVkUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRS
ZXNvbHZlZFBvc2l0aW9uLmNwcAppbmRleCBjY2RjMmEzZGM2ZGEyZDY1MzRhN2ViNjM1MDllNmI0
M2JhYTFmZDcxLi5kYzA5NTA5OWMwNGUzYTgyYzQzYzNlMDI2Y2RkZWFkZThkNWJlMzA3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQ
b3NpdGlvbi5jcHAKQEAgLTI5NSw3ICsyOTUsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGZp
cnN0TmFtZWRHcmlkTGluZUJlZm9yZVBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uLCBjb25zdAog
ICAgIC8vIGFscmVhZHkgY29udmVydGVkIHRvIGFuIGluZGV4IGluIG91ciBncmlkIHJlcHJlc2Vu
dGF0aW9uIChpZSBvbmUgd2FzIHJlbW92ZWQgZnJvbSB0aGUgZ3JpZCBsaW5lIHRvIGFjY291bnQg
Zm9yCiAgICAgLy8gdGhlIHNpZGUpLgogICAgIHVuc2lnbmVkIGZpcnN0TGluZUJlZm9yZVBvc2l0
aW9uSW5kZXggPSAwOwotICAgIGNvbnN0IHVuc2lnbmVkKiBmaXJzdExpbmVCZWZvcmVQb3NpdGlv
biA9IHN0ZDo6bG93ZXJfYm91bmQoZ3JpZExpbmVzLmJlZ2luKCksIGdyaWRMaW5lcy5lbmQoKSwg
cG9zaXRpb24pOworICAgIGF1dG8gZmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gPSBzdGQ6Omxvd2Vy
X2JvdW5kKGdyaWRMaW5lcy5iZWdpbigpLCBncmlkTGluZXMuZW5kKCksIHBvc2l0aW9uKTsKICAg
ICBpZiAoZmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gIT0gZ3JpZExpbmVzLmVuZCgpKSB7CiAgICAg
ICAgIGlmICgqZmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gPiBwb3NpdGlvbiAmJiBmaXJzdExpbmVC
ZWZvcmVQb3NpdGlvbiAhPSBncmlkTGluZXMuYmVnaW4oKSkKICAgICAgICAgICAgIC0tZmlyc3RM
aW5lQmVmb3JlUG9zaXRpb247CkBAIC0zMTYsOSArMzE2LDggQEAgc3RkOjp1bmlxdWVfcHRyPEdy
aWRTcGFuPiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZVJvd1N0YXJ0Q29sdW1uU3RhcnRO
YW1lZEcKIAogc3RkOjp1bmlxdWVfcHRyPEdyaWRTcGFuPiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6
cmVzb2x2ZVJvd0VuZENvbHVtbkVuZE5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0
ZVBvc2l0aW9uKGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNvbHZlZE9wcG9zaXRlUG9z
aXRpb24sIGNvbnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFZlY3Rvcjx1bnNpZ25l
ZD4mIGdyaWRMaW5lcykKIHsKLSAgICBBU1NFUlQoZ3JpZExpbmVzLnNpemUoKSk7CiAgICAgdW5z
aWduZWQgZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uSW5kZXggPSBncmlkTGluZXMuc2l6
ZSgpIC0gMTsKLSAgICBjb25zdCB1bnNpZ25lZCogZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0
aW9uID0gc3RkOjp1cHBlcl9ib3VuZChncmlkTGluZXMuYmVnaW4oKSwgZ3JpZExpbmVzLmVuZCgp
LCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pOworICAgIGF1dG8gZmlyc3RMaW5lQWZ0ZXJPcHBv
c2l0ZVBvc2l0aW9uID0gc3RkOjp1cHBlcl9ib3VuZChncmlkTGluZXMuYmVnaW4oKSwgZ3JpZExp
bmVzLmVuZCgpLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pOwogICAgIGlmIChmaXJzdExpbmVB
ZnRlck9wcG9zaXRlUG9zaXRpb24gIT0gZ3JpZExpbmVzLmVuZCgpKQogICAgICAgICBmaXJzdExp
bmVBZnRlck9wcG9zaXRlUG9zaXRpb25JbmRleCA9IGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3Np
dGlvbiAtIGdyaWRMaW5lcy5iZWdpbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRm9udEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50
LmNwcAppbmRleCBjMzNmZmI3N2I2ZDhmOTk1N2IxMjZmMWJmMzkxN2E4NTdmZGZiNTBlLi5hMGJm
NTAxOTFiNmFiOTU4MTYxOGQ5NTNjMDg5MGQyMTJlYjdiMzYyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGb250RWxlbWVudC5jcHAKQEAgLTI1MiwzMSArMjUyLDMxIEBAIHN0YXRpYyBpbmxpbmUgZmxv
YXQga2VybmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMoY29uc3QgU1ZHS2VybmluZ01hcCYg
a2VybmluCiB7CiAgICAgaWYgKCFnMS5pc0VtcHR5KCkgJiYga2VybmluZ01hcC5nbHlwaE1hcC5j
b250YWlucyhnMSkpIHsKICAgICAgICAgU1ZHS2VybmluZ1ZlY3Rvcioga2VybmluZ1ZlY3RvciA9
IGtlcm5pbmdNYXAuZ2x5cGhNYXAuZ2V0KGcxKTsKLSAgICAgICAgU1ZHS2VybmluZ1ZlY3Rvcjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBrZXJuaW5nVmVjdG9yLT5lbmQoKSAtIDE7Ci0gICAgICAgIGNv
bnN0IFNWR0tlcm5pbmdWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0ga2VybmluZ1ZlY3Rv
ci0+YmVnaW4oKSAtIDE7Ci0gICAgICAgIGZvciAoOyBpdCAhPSBiZWdpbjsgLS1pdCkgewotICAg
ICAgICAgICAgaWYgKG1hdGNoZXModTIsIGcyLCAqaXQpKQotICAgICAgICAgICAgICAgIHJldHVy
biBpdC0+a2VybmluZzsKKyAgICAgICAgc2l6ZV90IGl0ID0ga2VybmluZ1ZlY3Rvci0+c2l6ZSgp
OworICAgICAgICB3aGlsZSAoaXQtLSA+IDApIHsKKyAgICAgICAgICAgIGF1dG8mIHZhbHVlID0g
a2VybmluZ1ZlY3Rvci0+YXQoaXQpOworICAgICAgICAgICAgaWYgKG1hdGNoZXModTIsIGcyLCB2
YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmtlcm5pbmc7CiAgICAgICAgIH0K
ICAgICB9CiAKICAgICBpZiAoIXUxLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoa2VybmluZ01h
cC51bmljb2RlTWFwLmNvbnRhaW5zKHUxKSkgewogICAgICAgICAgICAgU1ZHS2VybmluZ1ZlY3Rv
cioga2VybmluZ1ZlY3RvciA9IGtlcm5pbmdNYXAudW5pY29kZU1hcC5nZXQodTEpOwotICAgICAg
ICAgICAgU1ZHS2VybmluZ1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBrZXJuaW5nVmVjdG9y
LT5lbmQoKSAtIDE7Ci0gICAgICAgICAgICBjb25zdCBTVkdLZXJuaW5nVmVjdG9yOjpjb25zdF9p
dGVyYXRvciBiZWdpbiA9IGtlcm5pbmdWZWN0b3ItPmJlZ2luKCkgLSAxOwotICAgICAgICAgICAg
Zm9yICg7IGl0ICE9IGJlZ2luOyAtLWl0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMo
dTIsIGcyLCAqaXQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQtPmtlcm5pbmc7Cisg
ICAgICAgICAgICBzaXplX3QgaXQgPSBrZXJuaW5nVmVjdG9yLT5zaXplKCk7CisgICAgICAgICAg
ICB3aGlsZSAoaXQtLSA+IDApIHsKKyAgICAgICAgICAgICAgICBhdXRvJiB2YWx1ZSA9IGtlcm5p
bmdWZWN0b3ItPmF0KGl0KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyh1MiwgZzIsIHZh
bHVlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmtlcm5pbmc7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWtlcm5pbmdNYXAua2VybmluZ1VuaWNv
ZGVSYW5nZU1hcC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxTVkdLZXJuaW5nUGFp
cj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0ga2VybmluZ01hcC5rZXJuaW5nVW5pY29kZVJhbmdlTWFw
LmVuZCgpIC0gMTsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTVkdLZXJuaW5nUGFpcj46OmNv
bnN0X2l0ZXJhdG9yIGJlZ2luID0ga2VybmluZ01hcC5rZXJuaW5nVW5pY29kZVJhbmdlTWFwLmJl
Z2luKCkgLSAxOwotICAgICAgICAgICAgZm9yICg7IGl0ICE9IGJlZ2luOyAtLWl0KSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1hdGNoZXModTEsIHUyLCBnMiwgKml0KSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGl0LT5rZXJuaW5nOworICAgICAgICAgICAgc2l6ZV90IGl0ID0ga2Vybmlu
Z01hcC5rZXJuaW5nVW5pY29kZVJhbmdlTWFwLnNpemUoKTsKKyAgICAgICAgICAgIHdoaWxlIChp
dC0tID4gMCkgeworICAgICAgICAgICAgICAgIGF1dG8mIHZhbHVlID0ga2VybmluZ01hcC5rZXJu
aW5nVW5pY29kZVJhbmdlTWFwW2l0XTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyh1MSwg
dTIsIGcyLCB2YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5rZXJuaW5n
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aEJ5dGVTdHJlYW0uaAppbmRleCA5ZDlkMmEyYjIzYzYwMGZlYmI1MzQwY2JjZGQxYjYxZGRjM2I5
ZjE1Li5iOTk5NTU0OTQzOWFjOTY0YWIzZTY3YTMwZjBkODlkOGMzNThhY2EyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaApAQCAtNjAsOCArNjAsOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBhcHBlbmQodW5zaWduZWQgY2hhciBieXRlKSB7IG1fZGF0YS5hcHBlbmQoYnl0ZSk7
IH0KICAgICB2b2lkIGFwcGVuZChTVkdQYXRoQnl0ZVN0cmVhbSogb3RoZXIpCiAgICAgewotICAg
ICAgICBmb3IgKERhdGFJdGVyYXRvciBpdCA9IG90aGVyLT5iZWdpbigpOyBpdCAhPSBvdGhlci0+
ZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBhcHBlbmQoKml0KTsKKyAgICAgICAgZm9yIChhdXRv
JiBieXRlIDogKm90aGVyKQorICAgICAgICAgICAgYXBwZW5kKGJ5dGUpOwogICAgIH0KICAgICB2
b2lkIGNsZWFyKCkgeyBtX2RhdGEuY2xlYXIoKTsgfQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuICFtX2RhdGEuc2l6ZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94
bWwvWFBhdGhOb2RlU2V0LmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmgKaW5k
ZXggM2Q4OWI4ZDUwODdhODZjZmVhZmZjMDE0MGI2OTQ3NjJjMDk1ZGRkZi4uZGFmMmI5M2Q1MWI1
YWY2YjczNGY1ZjlhNzY1NDEzNjllMDQxNGEyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
eG1sL1hQYXRoTm9kZVNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQu
aApAQCAtNjQsOCArNjQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICB2b2lk
IG1hcmtTdWJ0cmVlc0Rpc2pvaW50KGJvb2wgZGlzam9pbnQpIHsgbV9zdWJ0cmVlc0FyZURpc2pv
aW50ID0gZGlzam9pbnQ7IH0KICAgICAgICAgICAgIGJvb2wgc3VidHJlZXNBcmVEaXNqb2ludCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3VidHJlZXNBcmVEaXNqb2ludCB8fCBtX25vZGVzLnNpemUoKSA8
IDI7IH0KIAotICAgICAgICAgICAgY29uc3QgUmVmUHRyPE5vZGU+KiBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIG1fbm9kZXMuYmVnaW4oKTsgfQotICAgICAgICAgICAgY29uc3QgUmVmUHRyPE5vZGU+
KiBlbmQoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CisgICAgICAgICAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPE5vZGU+Pjo6aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBt
X25vZGVzLmJlZ2luKCk7IH0KKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4+
OjppdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CiAKICAgICAg
ICAgcHJpdmF0ZToKICAgICAgICAgICAgIHZvaWQgdHJhdmVyc2FsU29ydCgpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242275</attachid>
            <date>2014-11-29 11:08:56 -0800</date>
            <delta_ts>2014-12-03 11:13:13 -0800</delta_ts>
            <desc>sigh, webkit-patch was waiting for me to say yes before uploading...</desc>
            <filename>bug-138821-20141129110922.patch</filename>
            <type>text/plain</type>
            <size>71470</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2NTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
YjMzODk5ZWI1N2IwMTc5OTUwNGE5ZWEzYTM0ODE3M2U3YTM1NjRiLi42ODBkM2I5N2UzZDQ3N2Qx
MjY1ODJjMzEzZWQzNWVjMTgwYmFkNThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNiBAQAorMjAxNC0xMS0xNyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3Rp
bGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGVyZSBhcmUgYSBmZXcgdXNlcyBvZiBiZWdpbigpL2VuZCgp
IHRoYXQgZXhwbGljaXRseSByZXF1aXJlIHBvaW50ZXJzLAorICAgICAgICBzbyB3ZSB1c2UgZ2V0
UHRyKCkgdG8gZXh0cmFjdCB0aGUgdW5kZXJseWluZyBwb2ludGVyIGdlbmVyaWNhbGx5LgorCisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRDb21wbGV4UG9wU2NvcGVzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVt
cCk6CisgICAgICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6RlRM
OjptZE5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkQ2FsbCk6CisgICAgICAgICogbGxp
bnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBlcmZvcm1Bc3Nl
cnRpb25zKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlNjb3Bl
OjpTY29wZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwOgorICAgICAgICAo
SlNDOjpQcm9maWxlTm9kZTo6ZGVidWdQcmludFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3Rvcik6
CisgICAgICAgICogdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2Zp
bGVUcmVlTm9kZTo6ZHVtcEludGVybmFsKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgor
ICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjptYXRjaENoYXJhY3RlckNsYXNzKToK
KwogMjAxNC0xMS0yOCAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgog
CiAgICAgICAgIFVzZSBzdGQ6OnVuaXF1ZV9wdHI8PnxtYWtlX3VuaXF1ZTw+IGluIGZ0bCwgYnl0
ZWNvZGUgb2YgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCmluZGV4IGVkODA4MTAwYTU1NTdmMjcyMTQyMTA2NDAwNjE3ZGNjNmQyYzc0
MDYuLjQ3YTUzYjM4NGMzZmRiMTNmMDA1OWQ3YzU0NzA0MTE5ZWY2YTA2NWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsOTggQEAKKzIwMTQtMTEtMTcgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKwor
ICAgICAgICBNYWtlIHN1cmUgcmFuZ2UgYmFzZWQgaXRlcmF0aW9uIG9mIFZlY3Rvcjw+IHN0aWxs
IHJlY2VpdmVzIGJvdW5kcyBjaGVja2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM4ODIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IEluZGV4ZWRJdGVyYXRvciBzdHJ1Y3QgdG8gV1RG
IHRoYXQgd3JhcHMgYQorICAgICAgICBWZWN0b3IgdHlwZSBhbmQgaW5kZXggdG8gcHJvdmlkZSBw
b2ludGVyIGxpa2Ugc2VtYW50aWNzCisgICAgICAgIHdoaWxlIHN0aWxsIHBlcmZvcm1pbmcgcnVu
dGltZSBib3VuZHMgY2hlY2tpbmcsIGV2ZW4gaW4KKyAgICAgICAgcmVsZWFzZSBidWlsZHMuIFdl
IHN0b3JlIGEgc2ltcGxlIGluZGV4IGludG8gdGhlIHZlY3RvcgorICAgICAgICB3aGljaCBtZWFu
cyB0aGF0IHRoaXMgaXRlcmF0b3IgYWxsb3dzIHZlY3RvciByZXNpemluZworICAgICAgICBkdXJp
bmcgaXRlcmF0aW9uLiBJZiB0aGUgdmVjdG9yIGlzIHJlc2l6ZWQgc3VjaCB0aGF0IHRoZQorICAg
ICAgICBpdGVyYXRvciBpcyBvdXQgb2YgYm91bmRzLCB0aGVuIGFueSBhdHRlbXB0IHRvIGRlcmVm
ZXJlbmNlCisgICAgICAgIHRoZSBpdGVyYXRvciB3aWxsIGNyYXNoIHNhZmVseS4gQW55IG90aGVy
IGVycm9ycywgaW5jbHVkaW5nCisgICAgICAgIG92ZXJmbG93cywgYW5kIG92ZXIgZXh0ZW5kaW5n
IHRoZSBpdGVyYXRvciB3aWxsIGxpa2V3aXNlCisgICAgICAgIGNyYXNoLgorCisgICAgICAgIEZv
ciB0aGUgcHVycG9zZSBvZiByZXRhaW5pbmcgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQKKyAgICAg
ICAgYmVoYXZpb3VyLCB0aGUgaXRlcmF0b3IgY2FuIGJlIG1vdmVkIHRvIG1faW5kZXggPT0gc2l6
ZSgpCisgICAgICAgIGFzIHRoYXQgaXMgdGhlIHN0YW5kYXJkICJlbmQiIHRlcm1pbmF0b3IgZm9y
IHRoZXNlIHR5cGVzLgorICAgICAgICBBdHRlbXB0aW5nIHRvIGRlcmVmZXJlbmNlIGF0IHRoYXQg
cG9pbnQgd2lsbCBzdGlsbCBjcmFzaAorICAgICAgICByYXRoZXIgdGhhbiBwZXJmb3JtIGFuIHVu
c2FmZSBtZW1vcnkgb3BlcmF0aW9uLgorCisgICAgICAgIEluIG9yZGVyIHRvIG1haW50YWluIHRo
ZSB2YWxpZGl0eSBvZiBhbGwgdGhlIGJvdW5kcyBjaGVja2luZywKKyAgICAgICAgd2UgcGVyZm9y
bSBmdWxsIGludGVnZXIgcmFuZ2UgY2hlY2tpbmcgcHJpb3IgdG8gYW55IG11dGF0aW9uCisgICAg
ICAgIG9mIHRoZSBpdGVyYXRvciBsb2NhdGlvbi4gSWYgd2UgZGV0ZWN0IGFuIGFyaXRobWV0aWMg
b3ZlcmZsb3cKKyAgICAgICAgd2Ugd2lsbCBjcmFzaCByYXRoZXIgdGhhbiBhdHRlbXB0aW5nIHRv
IGNhcnJ5IG9uLgorCisgICAgICAgIEJ5IG5lY2Vzc2l0eSB0aGVyZSBhcmUgbWFueSBvdmVycmlk
ZXMgZm9yIG9wZXJhdG9yICsgYW5kIC0gYXMKKyAgICAgICAgd2Ugb3RoZXJ3aXNlIGhpdCBtYW55
IGRpZmZlcmVudCB0eXBlIHByb21vdGlvbiBhbWJpZ3VpdGllcyB3aGVuCisgICAgICAgIHBlcmZv
cm1pbmcgYXJpdGhtZXRpYyB3aXRoIGl0ZXJhdG9ycy4gVGhlc2UgYW1iaWd1aXRpZXMgYXJlIGFs
c28KKyAgICAgICAgZGlmZmVyZW50IGZvciAzMi0gdnMuIDY0LWJpdCwgc28gZHVwbGljYXRpbmcg
dGhlIGZ1bmN0aW9ucworICAgICAgICBhbmQgdGhlbiBmb3J3YXJkaW5nIHRvIHRoZSBjb3JlIGlt
cGxlbWVudGF0aW9ucyB0aGF0IHBlcmZvcm1lZAorICAgICAgICB0aGUgYm91bmRzIGNoZWNraW5n
IGFuZCBtdXRhdGlvbiBzZWVtZWQgbGlrZSB0aGUgcmlnaHQgY2FsbC4KKworICAgICAgICAqIFdU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9JbmRleGVkSXRlcmF0
b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6SW5kZXhlZEl0ZXJh
dG9yKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvci0+KToKKyAgICAg
ICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpJbmRl
eGVkSXRlcmF0b3I6OmdldCk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0
b3IrKyk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3ItLSk6CisgICAg
ICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSk6
CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IrPSk6CisgICAgICAgIChX
VEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3ItPSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJ
dGVyYXRvcjo6b3BlcmF0b3IrKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVy
YXRvci0pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPSk6CisgICAg
ICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6Oklu
ZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRv
cjo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcjw9
KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcj4pOgorICAgICAgICAo
V1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPj0pOgorICAgICAgICAoV1RGOjpJbmRleGVk
SXRlcmF0b3I6Om9wZXJhdG9yIGNvbnN0X2l0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6SW5kZXhl
ZEl0ZXJhdG9yOjppc1NhZmVUb0NvbXBhcmUpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0
b3I6OnVuc2FmZUdldCk6CisgICAgICAgIChXVEY6OmdldFB0cik6CisgICAgICAgIChXVEY6Om9w
ZXJhdG9yLSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpvcGVy
YXRvciE9KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXVEY6Om9wZXJh
dG9yPj0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpvcGVyYXRv
cj4pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3JTZWxlY3Rvcjo6bWFrZUl0ZXJhdG9y
KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yU2VsZWN0b3I6Om1ha2VDb25zdEl0ZXJh
dG9yKToKKyAgICAgICAgKiB3dGYvUmVmQ291bnRlZEFycmF5Lmg6CisgICAgICAgIChXVEY6OlJl
ZkNvdW50ZWRBcnJheTo6UmVmQ291bnRlZEFycmF5KToKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6
CisgICAgICAgIChXVEY6OlZlY3Rvcjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjpi
ZWdpbik6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6ZW5kKToKKyAgICAgICAgKFdURjo6T3ZlcmZs
b3dIYW5kbGVyPjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6PSk6CisgICAgICAgIChXVEY6Ok92
ZXJmbG93SGFuZGxlcj46OmZpbGwpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+Ojpl
eHBhbmRDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnRyeUV4cGFu
ZENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6cmVzaXplKToKKyAg
ICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6c2hyaW5rKToKKyAgICAgICAgKFdURjo6T3Zl
cmZsb3dIYW5kbGVyPjo6Z3Jvdyk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnJl
c2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnRyeVJlc2Vy
dmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnNocmlua0NhcGFj
aXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kKToKKyAgICAgICAg
KFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6dHJ5QXBwZW5kKToKKyAgICAgICAgKFdURjo6T3ZlcmZs
b3dIYW5kbGVyPjo6YXBwZW5kU2xvd0Nhc2UpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRs
ZXI+Ojp1bmNoZWNrZWRBcHBlbmQpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+Ojph
cHBlbmRWZWN0b3IpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnQpOgor
ICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnRWZWN0b3IpOgorICAgICAgICAo
V1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUpOgorCiAyMDE0LTExLTIxICBBbmRlcnMgQ2Fy
bHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHRoZSBUaW1lciBw
YXJhbWV0ZXJzIGZyb20gdGltZXIgY2FsbGJhY2tzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzJhMzY5NWVkNTBh
OTdlMjZmYTAxYTEzZWU3OGZlNzUwY2NlMDVjYy4uMGU3OWMwZDAzNWFlOTQwZDM3YTgxZTI4NzU5
YWI0ZTc4YmY5NmU4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE0LTExLTE3ICBP
bGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBzdXJlIHJhbmdl
IGJhc2VkIGl0ZXJhdGlvbiBvZiBWZWN0b3I8PiBzdGlsbCByZWNlaXZlcyBib3VuZHMgY2hlY2tp
bmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODgy
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXJl
IGFyZSBhIGZldyB1c2VzIG9mIGJlZ2luKCkvZW5kKCkgdGhhdCBleHBsaWNpdGx5IHJlcXVpcmUg
cG9pbnRlcnMsCisgICAgICAgIHNvIHdlIHVzZSBnZXRQdHIoKSB0byBleHRyYWN0IHRoZSB1bmRl
cmx5aW5nIHBvaW50ZXIgZ2VuZXJpY2FsbHkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6
ZXI6OmRlc2VyaWFsaXplU3RyaW5nKToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hCdWZmZXI6OmlzQmFkTWF0Y2gpOgorICAgICAg
ICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJD
b3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2VnbWVudGVkRm9udERhdGE6OmZvbnREYXRhRm9yQ2hhcmFjdGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZEZvbnREYXRhOjpjb250YWluc0NoYXJhY3Rlcik6
CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6aXNMb2FkaW5nKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjb252ZXJ0V09GRlRvU2ZudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBhaW50RmlsbExheWVycyk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmZpcnN0TmFtZWRHcmlkTGluZUJlZm9yZVBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlUm93RW5kQ29sdW1uRW5kTmFtZWRH
cmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24pOgorICAgICAgICAqIHN2Zy9T
VkdGb250RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjprZXJuaW5nRm9yUGFpck9mU3Ry
aW5nc0FuZEdseXBocyk6CisgICAgICAgICogc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbTo6YXBwZW5kKToKKyAgICAgICAgKiB4bWwv
WFBhdGhOb2RlU2V0Lmg6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6Tm9kZVNldDo6YmVnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Ok5vZGVTZXQ6OmVuZCk6CisKIDIwMTQtMTEtMjgg
IFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNb3ZlIHRoZSAnLXdlYmtp
dC1pbml0aWFsLWxldHRlcicsICctd2Via2l0LWxpbmUtYm94LWNvbnRhaW4nIGFuZCAnLXdlYmtp
dC10ZXh0LXN0cm9rZS13aWR0aCcgQ1NTIHByb3BlcnRpZXMgdG8gdGhlIG5ldyBTdHlsZUJ1aWxk
ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suY3BwCmluZGV4IDZjMjkzY2NmOThkNTY3MzI2ZGM0MmZhYmQ1ZGZhNDFkMjNmNmMyYzEu
LjYzNWFjZDJjYmIzOGU3OGE2MDgzYjYxZTU4ZGJhMWI0N2NiNzllOWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApAQCAt
MjM0LDkgKzIzNCw5IEBAIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5t
X3N5bWJvbFRhYmxlKTsKICAgICBmb3IgKEZ1bmN0aW9uRXhwcmVzc2lvblZlY3Rvcjo6aXRlcmF0
b3IgcHRyID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkRlY2xzLmJlZ2luKCksIGVuZCA9IHRoaXNP
YmplY3QtPm1fZnVuY3Rpb25EZWNscy5lbmQoKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAg
IHZpc2l0b3IuYXBwZW5kKHB0cik7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKFdURjo6Z2V0UHRy
KHB0cikpOwogICAgIGZvciAoRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yOjppdGVyYXRvciBwdHIg
PSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRXhwcnMuYmVnaW4oKSwgZW5kID0gdGhpc09iamVjdC0+
bV9mdW5jdGlvbkV4cHJzLmVuZCgpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgdmlzaXRv
ci5hcHBlbmQocHRyKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoV1RGOjpnZXRQdHIocHRyKSk7
CiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+bV9jb25zdGFudFJlZ2lzdGVy
cy5kYXRhKCksIHRoaXNPYmplY3QtPm1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKICAgICBp
ZiAodGhpc09iamVjdC0+bV9yYXJlRGF0YSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwg
ZW5kID0gdGhpc09iamVjdC0+bV9yYXJlRGF0YS0+bV9yZWdleHBzLnNpemUoKTsgaSAhPSBlbmQ7
IGkrKykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggNjZkZTJhZmJlMGQwMDgwMDUwYTE5YTg4YWM5ZTFj
YWQ1NGVjZWRiNS4uYTg1ZmI1M2YwZmQwMDZkOTFiODcwNjBlMDRhYTZkMjFjOWZiYzc2ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAKQEAgLTIyNzEsOCArMjI3MSw4IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRDb21wbGV4UG9wU2NvcGVzKFJlZ2lzdGVySUQqIHNjb3BlLCBDb250cm9sRmxvd0Nv
bnRlCiAgICAgICAgICAgICBpbnQgdG9wU2NvcGVJbmRleCA9IC0xOwogICAgICAgICAgICAgaW50
IGJvdHRvbVNjb3BlSW5kZXggPSAtMTsKICAgICAgICAgICAgIGlmIChmbGlwU2NvcGVzKSB7Ci0g
ICAgICAgICAgICAgICAgdG9wU2NvcGVJbmRleCA9IHRvcFNjb3BlIC0gbV9zY29wZUNvbnRleHRT
dGFjay5iZWdpbigpOwotICAgICAgICAgICAgICAgIGJvdHRvbVNjb3BlSW5kZXggPSBib3R0b21T
Y29wZSAtIG1fc2NvcGVDb250ZXh0U3RhY2suYmVnaW4oKTsKKyAgICAgICAgICAgICAgICB0b3BT
Y29wZUluZGV4ID0gdG9wU2NvcGUgLSBtX3Njb3BlQ29udGV4dFN0YWNrLmRhdGEoKTsKKyAgICAg
ICAgICAgICAgICBib3R0b21TY29wZUluZGV4ID0gYm90dG9tU2NvcGUgLSBtX3Njb3BlQ29udGV4
dFN0YWNrLmRhdGEoKTsKICAgICAgICAgICAgICAgICBzYXZlZFNjb3BlQ29udGV4dFN0YWNrID0g
bV9zY29wZUNvbnRleHRTdGFjazsKICAgICAgICAgICAgICAgICBtX3Njb3BlQ29udGV4dFN0YWNr
LnNocmluayhmaW5hbGx5Q29udGV4dC5zY29wZUNvbnRleHRTdGFja1NpemUpOwogICAgICAgICAg
ICAgfQpAQCAtMjMxNiw3ICsyMzE2LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENv
bXBsZXhQb3BTY29wZXMoUmVnaXN0ZXJJRCogc2NvcGUsIENvbnRyb2xGbG93Q29udGUKICAgICAg
ICAgICAgIGlmIChmbGlwU2NvcGVzKSB7CiAgICAgICAgICAgICAgICAgbV9zY29wZUNvbnRleHRT
dGFjayA9IHNhdmVkU2NvcGVDb250ZXh0U3RhY2s7CiAgICAgICAgICAgICAgICAgdG9wU2NvcGUg
PSAmbV9zY29wZUNvbnRleHRTdGFja1t0b3BTY29wZUluZGV4XTsgLy8gYXNzZXJ0IGl0J3Mgd2l0
aGluIGJvdW5kcwotICAgICAgICAgICAgICAgIGJvdHRvbVNjb3BlID0gbV9zY29wZUNvbnRleHRT
dGFjay5iZWdpbigpICsgYm90dG9tU2NvcGVJbmRleDsgLy8gZG9uJ3QgYXNzZXJ0LCBzaW5jZSBp
dCB0aGUgaW5kZXggbWlnaHQgYmUgLTEuCisgICAgICAgICAgICAgICAgYm90dG9tU2NvcGUgPSBt
X3Njb3BlQ29udGV4dFN0YWNrLmRhdGEoKSArIGJvdHRvbVNjb3BlSW5kZXg7IC8vIGRvbid0IGFz
c2VydCwgc2luY2UgaXQgdGhlIGluZGV4IG1pZ2h0IGJlIC0xLgogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKGZsaXBTd2l0Y2hlcykKICAgICAgICAgICAgICAgICBtX3N3aXRjaENvbnRl
eHRTdGFjayA9IHNhdmVkU3dpdGNoQ29udGV4dFN0YWNrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCBmMDcyNGRmNDcwMzk0OWIzMGQy
NGUzNmFhODJlNzc4YTVjYjliZjczLi4zYmUxOGVhNmM2Y2I3ZjM2ZjQ4ZTIwYjU5ZjcyM2VjYzUx
NGI5ZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcApAQCAtNDkxMCw3ICs0OTEwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3
aXRjaEludEp1bXAoCiAgICAgYWRkQnJhbmNoKAogICAgICAgICBtX2ppdC5icmFuY2gzMihKSVRD
b21waWxlcjo6QWJvdmVPckVxdWFsLCB2YWx1ZSwgSW1tMzIodGFibGUuY3RpT2Zmc2V0cy5zaXpl
KCkpKSwKICAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spOwotICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbVB0cih0YWJsZS5jdGlPZmZzZXRzLmJlZ2luKCkpLCBzY3JhdGNoKTsKKyAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIodGFibGUuY3RpT2Zmc2V0cy5kYXRhKCkpLCBzY3JhdGNo
KTsKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpCYXNlSW5kZXgoc2NyYXRjaCwgdmFs
dWUsIEpJVENvbXBpbGVyOjp0aW1lc1B0cigpKSwgc2NyYXRjaCk7CiAgICAgbV9qaXQuanVtcChz
Y3JhdGNoKTsKICAgICBkYXRhLT5kaWRVc2VKdW1wVGFibGUgPSB0cnVlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAppbmRleCBmYzdjYjFiMjU0MzI2OTRh
YWVlOGZiZjMxNTNlNmUwOGE4MzMyZjM5Li43YjFhMWNlN2IzODM3ZTgxNGNiYTJiM2VjYzNhMDdi
MDE4ZDlhZTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJl
dmlhdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlv
bnMuaApAQCAtMTIwLDcgKzEyMCw3IEBAIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kU3RyaW5nKExD
b250ZXh0IGNvbnRleHQsIGNvbnN0IGNoYXIqIHN0cmluZywgdW5zaWduZWQgbGVuCiBzdGF0aWMg
aW5saW5lIExWYWx1ZSBtZFN0cmluZyhMQ29udGV4dCBjb250ZXh0LCBjb25zdCBjaGFyKiBzdHJp
bmcpIHsgcmV0dXJuIG1kU3RyaW5nKGNvbnRleHQsIHN0cmluZywgc3RkOjpzdHJsZW4oc3RyaW5n
KSk7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0LCBMVmFs
dWUqIGFyZ3MsIHVuc2lnbmVkIG51bUFyZ3MpIHsgcmV0dXJuIGxsdm0tPk1ETm9kZUluQ29udGV4
dChjb250ZXh0LCBhcmdzLCBudW1BcmdzKTsgfQogdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlw
ZT4KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0LCBjb25zdCBW
ZWN0b3JUeXBlJiB2ZWN0b3IpIHsgcmV0dXJuIG1kTm9kZShjb250ZXh0LCBjb25zdF9jYXN0PExW
YWx1ZSo+KHZlY3Rvci5iZWdpbigpKSwgdmVjdG9yLnNpemUoKSk7IH0KK3N0YXRpYyBpbmxpbmUg
TFZhbHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0LCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3Ip
IHsgcmV0dXJuIG1kTm9kZShjb250ZXh0LCBjb25zdF9jYXN0PExWYWx1ZSo+KHZlY3Rvci5kYXRh
KCkpLCB2ZWN0b3Iuc2l6ZSgpKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250
ZXh0IGNvbnRleHQpIHsgcmV0dXJuIG1kTm9kZShjb250ZXh0LCAwLCAwKTsgfQogc3RhdGljIGlu
bGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQsIExWYWx1ZSBhcmcxKSB7IHJldHVy
biBtZE5vZGUoY29udGV4dCwgJmFyZzEsIDEpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5v
ZGUoTENvbnRleHQgY29udGV4dCwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyKQpAQCAtMjg4LDcg
KzI4OCw3IEBAIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVy
LCBMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IExWYWx1ZSoKIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3Rv
clR5cGU+CiBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUg
ZnVuY3Rpb24sIGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvcikKIHsKLSAgICByZXR1cm4gYnVpbGRD
YWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCB2ZWN0b3IuYmVnaW4oKSwgdmVjdG9yLnNpemUoKSk7Cisg
ICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgdmVjdG9yLmRhdGEoKSwgdmVj
dG9yLnNpemUoKSk7CiB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIg
YnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnREYXRhLmNwcAppbmRleCA2OTE5YWVhYjAwYTFiMjVjNDc1YmJmOWRkMjVjNjg4ZjBhYTU4
YTcyLi40NGFmY2E0Y2JhZDhiM2U1NTMzNDEyOWFjOWM5YjBkZWZkOTU2MWU4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcApAQCAtMTYxLDcgKzE2MSw3IEBAIHZv
aWQgRGF0YTo6cGVyZm9ybUFzc2VydGlvbnMoVk0mIHZtKQogICAgIFZlY3RvcjxpbnQ+IHRlc3RW
ZWN0b3I7CiAgICAgdGVzdFZlY3Rvci5yZXNpemUoNDIpOwogICAgIEFTU0VSVChiaXR3aXNlX2Nh
c3Q8dWludDMyX3QqPigmdGVzdFZlY3Rvcilbc2l6ZW9mKHZvaWQqKS9zaXplb2YodWludDMyX3Qp
ICsgMV0gPT0gNDIpOwotICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50Kio+KCZ0ZXN0VmVjdG9y
KVswXSA9PSB0ZXN0VmVjdG9yLmJlZ2luKCkpOworICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50
Kio+KCZ0ZXN0VmVjdG9yKVswXSA9PSB0ZXN0VmVjdG9yLmRhdGEoKSk7CiAjZW5kaWYKIAogICAg
IEFTU0VSVChTdHJpbmdJbXBsOjpzX2hhc2hGbGFnOEJpdEJ1ZmZlciA9PSAzMik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAppbmRleCA0NTJmNzA0NmYzMDIyZDM4ODEwOWFlYmRj
ODQzODRlMWFhMjJmZmExLi4wMWZjY2RiN2UzOGFjNWE2MDIyYzY4Yzk3YjhkOGViM2IwY2VjMTgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKQEAgLTEzMCwxMSArMTMwLDgg
QEAgc3RydWN0IFNjb3BlIHsKICAgICB7CiAgICAgICAgIGlmIChyaHMubV9sYWJlbHMpIHsKICAg
ICAgICAgICAgIG1fbGFiZWxzID0gYWRvcHRQdHIobmV3IExhYmVsU3RhY2spOwotCi0gICAgICAg
ICAgICB0eXBlZGVmIExhYmVsU3RhY2s6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAg
ICAgICAgaXRlcmF0b3IgZW5kID0gcmhzLm1fbGFiZWxzLT5lbmQoKTsKLSAgICAgICAgICAgIGZv
ciAoaXRlcmF0b3IgaXQgPSByaHMubV9sYWJlbHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgICAgICAgICBtX2xhYmVscy0+YXBwZW5kKFNjb3BlTGFiZWxJbmZvKGl0LT5tX2lk
ZW50LCBpdC0+bV9pc0xvb3ApKTsKKyAgICAgICAgICAgIGZvciAoYXV0byBsYWJlbCA6ICpyaHMu
bV9sYWJlbHMpCisgICAgICAgICAgICAgICAgbV9sYWJlbHMtPmFwcGVuZChTY29wZUxhYmVsSW5m
byhsYWJlbC5tX2lkZW50LCBsYWJlbC5tX2lzTG9vcCkpOwogICAgICAgICB9CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCmluZGV4IGNjNjMwMjE3ZGY3
ZmQyNWFkZTRjNGJiMzk4NTc0ZDY3ZDVhNzQ1NjkuLjc5Y2Q2N2E2NzgxN2JkZGZhZWRkZjNjNTA2
ODZjNDgyYzkyMDQ1MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCkBAIC0zNTIsNyArMzUyLDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlT
dG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib28KICAgICAgICAg
ICAgIC8vIHByb3BlcnRpZXMsIHNvIHdlIGhhdmUgdG8gcGVyZm9ybSBkZWxldGlvbiB3aXRoIGNh
dXRpb24sIGlmIG5vdCB3ZSBjYW4KICAgICAgICAgICAgIC8vIGRlbGV0ZSB2YWx1ZXMgaW4gYW55
IG9yZGVyLgogICAgICAgICAgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgcXNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLnNpemUoKSwgc2l6ZW9mKHVuc2lnbmVkKSwg
Y29tcGFyZUtleXNGb3JRU29ydCk7CisgICAgICAgICAgICAgICAgcXNvcnQoa2V5cy5kYXRhKCks
IGtleXMuc2l6ZSgpLCBzaXplb2YodW5zaWduZWQpLCBjb21wYXJlS2V5c0ZvclFTb3J0KTsKICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpID0ga2V5cy5zaXplKCk7CiAgICAgICAgICAgICAgICAg
d2hpbGUgKGkpIHsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBrZXlzWy0t
aV07CkBAIC0xMTkxLDEzICsxMTkxLDEzIEBAIHZvaWQgSlNBcnJheTo6c29ydENvbXBhY3RlZFZl
Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIENvbnRpZ3VvdXNEYXRhPFN0b3JhZ2VUeXBlPiBkCiAgICAg
ICAgIAogI2lmIEhBVkUoTUVSR0VTT1JUKQogICAgIGlmIChpc1NvcnRpbmdQcmltaXRpdmVWYWx1
ZXMpCi0gICAgICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2Yo
VmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICAgICAg
cXNvcnQodmFsdWVzLmRhdGEoKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFp
ciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CiAgICAgZWxzZQotICAgICAgICBtZXJn
ZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1Bh
aXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBtZXJnZXNvcnQodmFs
dWVzLmRhdGEoKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBh
cmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CiAjZWxzZQogICAgIC8vIEZJWE1FOiBUaGUgcXNvcnQg
bGlicmFyeSBmdW5jdGlvbiBpcyBsaWtlbHkgdG8gbm90IGJlIGEgc3RhYmxlIHNvcnQuCiAgICAg
Ly8gRUNNQVNjcmlwdC0yNjIgZG9lcyBub3Qgc3BlY2lmeSBhIHN0YWJsZSBzb3J0LCBidXQgaW4g
cHJhY3RpY2UsIGJyb3dzZXJzIHBlcmZvcm0gYSBzdGFibGUgc29ydC4KLSAgICBxc29ydCh2YWx1
ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBh
cmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAgcXNvcnQodmFsdWVzLmRhdGEoKSwgdmFsdWVz
LnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JR
U29ydCk7CiAjZW5kaWYKICAgICAKICAgICAvLyBJZiB0aGUgdG9TdHJpbmcgZnVuY3Rpb24gY2hh
bmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvciB2ZWN0b3Igc3RvcmFnZSwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAppbmRleCA4OGQ1N2YzZGQ0
ZTc5NzY5ZDFkMDZjM2E4NTkxMDFiNTU1YzZhODNmLi5kZDNjMTIxZDBlYmIxNmU4YTUyNDYxZmFh
Y2RiYmI0ZDk4N2Q3MmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
UHJvZmlsZVRyZWVOb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2Zp
bGVUcmVlTm9kZS5oCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIFZlY3RvcjxN
YXBFbnRyeSo+IGVudHJpZXM7CiAgICAgICAgIGZvciAoTWFwOjppdGVyYXRvciBpdCA9IG1fY2hp
bGRyZW4tPmJlZ2luKCk7IGl0ICE9IG1fY2hpbGRyZW4tPmVuZCgpOyArK2l0KQogICAgICAgICAg
ICAgZW50cmllcy5hcHBlbmQoJippdCk7Ci0gICAgICAgIHFzb3J0KGVudHJpZXMuYmVnaW4oKSwg
ZW50cmllcy5zaXplKCksIHNpemVvZihNYXBFbnRyeSopLCBjb21wYXJlRW50cmllcyk7CisgICAg
ICAgIHFzb3J0KGVudHJpZXMuZGF0YSgpLCBlbnRyaWVzLnNpemUoKSwgc2l6ZW9mKE1hcEVudHJ5
KiksIGNvbXBhcmVFbnRyaWVzKTsKIAogICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGNoaWxk
cmVuIGluIHNhbXBsZS1mcmVxdWVuY3kgb3JkZXIuCiAgICAgICAgIGZvciAoc2l6ZV90IGUgPSAw
OyBlIDwgZW50cmllcy5zaXplKCk7ICsrZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3lhcnIvWWFyckpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJy
SklULmNwcAppbmRleCBlM2EzYTkzMmNlN2VkNzM4ZjE5ODZiMmJmMmI3NDNlMDQyM2EzYjI1Li5k
MjY4ZTU5ZTEyYmI0ZTgzNjhjZTM5MjA2ODc4YWM4MTYyZTNiNDJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUveWFyci9ZYXJySklULmNwcApAQCAtMjIzLDcgKzIyMyw3IEBAIGNsYXNzIFlhcnJHZW5l
cmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgaWYgKGNoYXJDbGFzcy0+
bV9yYW5nZXMuc2l6ZSgpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBtYXRjaEluZGV4ID0gMDsK
ICAgICAgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwotICAgICAgICAgICAgbWF0Y2hDaGFyYWN0
ZXJDbGFzc1JhbmdlKGNoYXJhY3RlciwgZmFpbHVyZXMsIG1hdGNoRGVzdCwgY2hhckNsYXNzLT5t
X3Jhbmdlcy5iZWdpbigpLCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUoKSwgJm1hdGNoSW5kZXgs
IGNoYXJDbGFzcy0+bV9tYXRjaGVzLmJlZ2luKCksIGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNpemUo
KSk7CisgICAgICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzUmFuZ2UoY2hhcmFjdGVyLCBmYWls
dXJlcywgbWF0Y2hEZXN0LCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLmRhdGEoKSwgY2hhckNsYXNzLT5t
X3Jhbmdlcy5zaXplKCksICZtYXRjaEluZGV4LCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5kYXRhKCks
IGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNpemUoKSk7CiAgICAgICAgICAgICB3aGlsZSAobWF0Y2hJ
bmRleCA8IGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNpemUoKSkKICAgICAgICAgICAgICAgICBtYXRj
aERlc3QuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKCh1bnNpZ25lZCBz
aG9ydCljaGFyQ2xhc3MtPm1fbWF0Y2hlc1ttYXRjaEluZGV4KytdKSkpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qIGIvU291cmNlL1dURi9XVEYudmN4
cHJvai9XVEYudmN4cHJvagppbmRleCAyZjNhYzIwOWM1MjZjMDM0ZmY0MGFlNWUzNjQ0NDI2ZjZi
YWI2Yjk2Li5kMTA5M2QzNmRkNzUwMGYyNWEyZTEzM2JlNTE2ZWM3M2UxYjVmYTBkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCisrKyBiL1NvdXJjZS9XVEYv
V1RGLnZjeHByb2ovV1RGLnZjeHByb2oKQEAgLTIxOCw2ICsyMTgsNyBAQAogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cd3RmXEhhc2hUYWJsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cd3RmXEhhc2hUcmFpdHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0
ZlxIZXhOdW1iZXIuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxJbmRleGVk
SXRlcmF0b3IuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxJdGVyYXRvckFk
YXB0b3JzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSXRlcmF0b3JSYW5n
ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXExpc3RIYXNoU2V0LmgiIC8+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMg
Yi9Tb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMKaW5kZXggNTk1M2Ew
ZjQyYWZkNzUwNzZiZjk4NWQ1OTgzMGQ5YmVjODYzNWY3NS4uMDEwODljYjkwYmRjNTAwNGE3MGYw
ZDQ4MTIyMDc5ODhhMjQyMjI4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYudmN4cHJvai9X
VEYudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHBy
b2ouZmlsdGVycwpAQCAtNDY3LDYgKzQ2Nyw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
Llx3dGZcSGV4TnVtYmVyLmgiPgogICAgICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4KICAgICA8L0Ns
SW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxJbmRleGVkSXRlcmF0b3Iu
aCI+CisgICAgICA8RmlsdGVyPnd0ZjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEl0ZXJhdG9yQWRhcHRvcnMuaCI+CiAgICAgICA8Rmls
dGVyPnd0ZjwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggZmY0OGRhMGNjNTMxMjgyYTEyZDBkNTEwNmM2NjAzNWYx
NTVkOTE1Ni4uMWJhNWNmZDc4OThmZDllOTY1OTViZmQ1YTQ3NzRmZWYxZWJmNGY4MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05OCw2ICs5OCw3IEBACiAJ
CUE3NDg3NDUyMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NDg3NDRGMTdBMEJEQUUw
MEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCAqLzsgfTsKIAkJQTc0ODc0NTMxN0EwQkRB
RTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NDg3NDUwMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFy
YWN0ZXJIYXNoLmggKi87IH07CiAJCUE3NDg3NDU0MTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJpbmdI
YXNoRHVtcENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3NDg3NDUxMTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJpbmdIYXNoRHVtcENvbnRleHQu
aCAqLzsgfTsKKwkJQTdEQzJGMDQxQTA5QTIyRDAwNzJGNEUzIC8qIEluZGV4ZWRJdGVyYXRvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEQzJGMDMx
QTA5OURFMzAwNzJGNEUzIC8qIEluZGV4ZWRJdGVyYXRvci5oICovOyB9OwogCQlBN0U2NDNDNjE3
QzU0MjNCMDAzQkIxNkIgLyogQ29tcHJlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdFNjQzQzQxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXBy
ZXNzaW9uLmNwcCAqLzsgfTsKIAkJQTdFNjQzQzcxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXByZXNz
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0U2
NDNDNTE3QzU0MjNCMDAzQkIxNkIgLyogQ29tcHJlc3Npb24uaCAqLzsgfTsKIAkJQTg3NkRCRDgx
NTE4MTZFNTAwREFEQjk1IC8qIFBsYXRmb3JtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBODc2REJENzE1MTgxNkU1MDBEQURCOTUgLyogUGxhdGZvcm0u
aCAqLzsgfTsKQEAgLTM4OSw2ICszOTAsNyBAQAogCQlBNzQ4NzQ0RjE3QTBCREFFMDBGQTA0Q0Ig
LyogU2l4Q2hhcmFjdGVySGFzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTaXhDaGFyYWN0ZXJIYXNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTc0ODc0NTAxN0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2l4Q2hhcmFjdGVySGFzaC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNzQ4NzQ1MTE3QTBCREFFMDBGQTA0Q0IgLyogU3RyaW5nSGFzaER1
bXBDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ0hhc2hE
dW1wQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0RDMkYwMzFBMDk5
REUzMDA3MkY0RTMgLyogSW5kZXhlZEl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4ZWRJ
dGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0U2NDNDNDE3QzU0MjNC
MDAzQkIxNkIgLyogQ29tcHJlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ29tcHJlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
N0U2NDNDNTE3QzU0MjNCMDAzQkIxNkIgLyogQ29tcHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29tcHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTg3NkRCRDcxNTE4MTZFNTAwREFEQjk1IC8qIFBsYXRmb3JtLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC04OTIsNiArODk0LDcgQEAKIAkJCQk5NzRDRkM4RDE2QTRGMzI3MDA2RDU0MDQgLyog
V2Vha1B0ci5oICovLAogCQkJCUE4QTQ3MzdBMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWRE
YXRhLmNwcCAqLywKIAkJCQlBOEE0NzM3QjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0
YS5oICovLAorCQkJCUE3REMyRjAzMUEwOTlERTMwMDcyRjRFMyAvKiBJbmRleGVkSXRlcmF0b3Iu
aCAqLywKIAkJCSk7CiAJCQlwYXRoID0gd3RmOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
QEAgLTEwNjUsNiArMTA2OCw3IEBACiAJCQkJQThBNDczQUQxNTFBODI1QjAwNDEyM0ZGIC8qIGNh
Y2hlZC1wb3dlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDVFMTUxQTgyNUIwMDQxMjNG
RiAvKiBDaGFyYWN0ZXJOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOTQxNTFBODI1
QjAwNDEyM0ZGIC8qIENoZWNrZWRBcml0aG1ldGljLmggaW4gSGVhZGVycyAqLywKKwkJCQlBN0RD
MkYwNDFBMDlBMjJEMDA3MkY0RTMgLyogSW5kZXhlZEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzM5NTE1MUE4MjVCMDA0MTIzRkYgLyogQ2hlY2tlZEJvb2xlYW4uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3NDVGMTUxQTgyNUIwMDQxMjNGRiAvKiBDb2xsYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDNEVERTYxNjk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRlci5o
IGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9JbmRleGVkSXRlcmF0
b3IuaCBiL1NvdXJjZS9XVEYvd3RmL0luZGV4ZWRJdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVlY2E1
MTQ1OWJhZjdmNGY2NGJiYzI4ODU4ZTdhYmRhZDljOGJhMmIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9JbmRleGVkSXRlcmF0b3IuaApAQCAtMCwwICsxLDUwMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV1RGX0luZGV4
ZWRJdGVyYXRvcl9oCisjZGVmaW5lIFdURl9JbmRleGVkSXRlcmF0b3JfaAorCituYW1lc3BhY2Ug
V1RGIHsKKworI2RlZmluZSBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGNoZWNrKSBkbyB7XAor
ICAgIGlmICghKGNoZWNrKSlcCisgICAgICAgIE92ZXJmbG93SGFuZGxlcjo6b3ZlcmZsb3dlZCgp
O1wKK30gd2hpbGUgKDApCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWZWN0b3JUeXBlLCB0eXBlbmFt
ZSBULCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIgPSBDcmFzaE9uT3ZlcmZsb3c+IHN0cnVjdCBJ
bmRleGVkSXRlcmF0b3IgeworICAgIHR5cGVkZWYgc3RydWN0IEluZGV4ZWRJdGVyYXRvcjxjb25z
dCBWZWN0b3JUeXBlLCBjb25zdCBULCBPdmVyZmxvd0hhbmRsZXI+IGNvbnN0X2l0ZXJhdG9yOwor
CisgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJl
bmNlX3R5cGU7CisgICAgdHlwZWRlZiBWYWx1ZVR5cGUgdmFsdWVfdHlwZTsKKyAgICB0eXBlZGVm
IFZhbHVlVHlwZSogcG9pbnRlcjsKKyAgICB0eXBlZGVmIFZhbHVlVHlwZSYgcmVmZXJlbmNlOwor
ICAgIHR5cGVkZWYgc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl
Z29yeTsKKworICAgIEluZGV4ZWRJdGVyYXRvcigpCisgICAgICAgIDogbV92ZWN0b3IobnVsbHB0
cikKKyAgICAgICAgLCBtX3Bvc2l0aW9uKDApCisgICAgeworICAgIH0KKworICAgIEluZGV4ZWRJ
dGVyYXRvcihWZWN0b3JUeXBlJiB2ZWN0b3IsIFZhbHVlVHlwZSogcG9zaXRpb24pCisgICAgICAg
IDogbV92ZWN0b3IoJnZlY3RvcikKKyAgICAgICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uIC0gdmVj
dG9yLmRhdGEoKSkKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9w
b3NpdGlvbiA8PSB2ZWN0b3Iuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Io
Y29uc3QgSW5kZXhlZEl0ZXJhdG9yJiBvdGhlcikKKyAgICAgICAgOiBtX3ZlY3RvcihvdGhlci5t
X3ZlY3RvcikKKyAgICAgICAgLCBtX3Bvc2l0aW9uKG90aGVyLm1fcG9zaXRpb24pCisgICAgewor
ICAgIH0KKworICAgIFZhbHVlVHlwZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZtX3Zl
Y3Rvci0+YXQobV9wb3NpdGlvbik7IH0KKyAgICBWYWx1ZVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0
IHsgcmV0dXJuIG1fdmVjdG9yLT5hdChtX3Bvc2l0aW9uKTsgfQorICAgIFZhbHVlVHlwZSogZ2V0
KCkgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9wb3Np
dGlvbiA8PSBtX3ZlY3Rvci0+c2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yLT5kYXRh
KCkgKyBtX3Bvc2l0aW9uOworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciYgb3BlcmF0b3Ir
KygpCisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1fcG9zaXRpb24g
PCBtX3ZlY3Rvci0+c2l6ZSgpKTsKKyAgICAgICAgbV9wb3NpdGlvbisrOworICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KQor
ICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uIDwgbV92
ZWN0b3ItPnNpemUoKSk7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOwor
ICAgICAgICBtX3Bvc2l0aW9uKys7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg
ICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvci0tKCkKKyAgICB7CisgICAgICAgIElOREVYRURf
SVRFUkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA+IDApOworICAgICAgICBtX3Bvc2l0aW9uLS07
CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3Bl
cmF0b3ItLShpbnQpCisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1f
cG9zaXRpb24gPiAwKTsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7Cisg
ICAgICAgIG1fcG9zaXRpb24tLTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICAvLyBUaGlzIGNvbnZlcnNpb24gb3BlcmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24g
dG8gYm9vbCBidXQgbm90IHRvIG90aGVyIGludGVnZXIgdHlwZXMuCisgICAgdHlwZWRlZiBzaXpl
X3QgKEluZGV4ZWRJdGVyYXRvcjo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOworICAgIG9wZXJhdG9y
IFVuc3BlY2lmaWVkQm9vbFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3ZlY3RvciA/ICZJbmRleGVk
SXRlcmF0b3I6Om1fcG9zaXRpb24gOiBudWxscHRyOyB9CisKKworICAgIEluZGV4ZWRJdGVyYXRv
ciYgb3BlcmF0b3IrPShsb25nIGluY3JlbWVudCkKKyAgICB7CisgICAgICAgIGlmIChpbmNyZW1l
bnQgPCAwKSB7CisgICAgICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGluY3JlbWVu
dCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSk7CisgICAgICAgICAgICBy
ZXR1cm4gKCp0aGlzKSAtPSBzdGF0aWNfY2FzdDxzaXplX3Q+KC1pbmNyZW1lbnQpOworICAgICAg
ICB9CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coKHN0ZDo6bnVtZXJpY19saW1p
dHM8c2l6ZV90Pjo6bWF4KCkgLSBtX3Bvc2l0aW9uKSA+IHN0YXRpY19jYXN0PHNpemVfdD4oaW5j
cmVtZW50KSk7CisgICAgICAgIG1fcG9zaXRpb24gKz0gaW5jcmVtZW50OworICAgICAgICBJTkRF
WEVEX0lURVJBVE9SX09WRVJGTE9XKG1fcG9zaXRpb24gPD0gbV92ZWN0b3ItPnNpemUoKSk7Cisg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJh
dG9yLT0obG9uZyBkZWNyZW1lbnQpCisgICAgeworICAgICAgICBpZiAoZGVjcmVtZW50IDwgMCkg
eworICAgICAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhkZWNyZW1lbnQgIT0gc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpOworICAgICAgICAgICAgcmV0dXJuICgq
dGhpcykgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtZGVjcmVtZW50KTsKKyAgICAgICAgfQorCisg
ICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coc3RhdGljX2Nhc3Q8c2l6ZV90PihkZWNy
ZW1lbnQpIDw9IG1fcG9zaXRpb24pOworICAgICAgICBtX3Bvc2l0aW9uIC09IGRlY3JlbWVudDsK
KyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciYgb3Bl
cmF0b3IrPShzaXplX3QgaW5jcmVtZW50KQorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRP
Ul9PVkVSRkxPVygoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIG1fcG9zaXRp
b24pID4gaW5jcmVtZW50KTsKKyAgICAgICAgbV9wb3NpdGlvbiArPSBpbmNyZW1lbnQ7CisgICAg
ICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA8PSBtX3ZlY3Rvci0+c2l6
ZSgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRv
ciYgb3BlcmF0b3ItPShzaXplX3QgZGVjcmVtZW50KQorICAgIHsKKyAgICAgICAgSU5ERVhFRF9J
VEVSQVRPUl9PVkVSRkxPVyhkZWNyZW1lbnQgPD0gbV9wb3NpdGlvbik7CisgICAgICAgIG1fcG9z
aXRpb24gLT0gZGVjcmVtZW50OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAg
SW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvcis9KGludDMyX3QgaW5jcmVtZW50KQorICAgIHsKKyAg
ICAgICAgaWYgKGluY3JlbWVudCA8IDApIHsKKyAgICAgICAgICAgIElOREVYRURfSVRFUkFUT1Jf
T1ZFUkZMT1coaW5jcmVtZW50ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigp
KTsKKyAgICAgICAgICAgIHJldHVybiAoKnRoaXMpIC09IHN0YXRpY19jYXN0PHNpemVfdD4oLWlu
Y3JlbWVudCk7CisgICAgICAgIH0KKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVygo
c3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIG1fcG9zaXRpb24pID4gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihpbmNyZW1lbnQpKTsKKyAgICAgICAgbV9wb3NpdGlvbiArPSBpbmNyZW1l
bnQ7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA8PSBtX3Zl
Y3Rvci0+c2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIEluZGV4
ZWRJdGVyYXRvciYgb3BlcmF0b3ItPShpbnQzMl90IGRlY3JlbWVudCkKKyAgICB7CisgICAgICAg
IGlmIChkZWNyZW1lbnQgPCAwKSB7CisgICAgICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJG
TE9XKGRlY3JlbWVudCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSk7Cisg
ICAgICAgICAgICByZXR1cm4gKCp0aGlzKSArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KC1kZWNyZW1l
bnQpOworICAgICAgICB9CisKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhzdGF0
aWNfY2FzdDxzaXplX3Q+KGRlY3JlbWVudCkgPD0gbV9wb3NpdGlvbik7CisgICAgICAgIG1fcG9z
aXRpb24gLT0gZGVjcmVtZW50OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAg
SW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yKyhzaXplX3QgaW5jcmVtZW50KSBjb25zdAorICAgIHsK
KyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQgKz0gaW5jcmVtZW50OworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRv
ci0oc2l6ZV90IGRlY3JlbWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRv
ciByZXN1bHQoKnRoaXMpOworICAgICAgICByZXR1cm4gcmVzdWx0IC09IGRlY3JlbWVudDsKKyAg
ICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKGludDMyX3QgaW5jcmVtZW50KSBj
b25zdAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7CisgICAg
ICAgIHJldHVybiByZXN1bHQgKz0gaW5jcmVtZW50OworICAgIH0KKworICAgIEluZGV4ZWRJdGVy
YXRvciBvcGVyYXRvci0oaW50MzJfdCBkZWNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJ
bmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCAtPSBk
ZWNyZW1lbnQ7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yKyh1bnNpZ25l
ZCBsb25nIGxvbmcgaW5jcmVtZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJh
dG9yIHJlc3VsdCgqdGhpcyk7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaW5j
cmVtZW50IDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19jYXN0PHNpemVfdD4oaW5jcmVtZW50KTsKKyAgICB9CisK
KyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3ItKHVuc2lnbmVkIGxvbmcgbG9uZyBkZWNyZW1l
bnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsK
KyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhkZWNyZW1lbnQgPD0gc3RkOjpudW1l
cmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQgLT0gc3Rh
dGljX2Nhc3Q8c2l6ZV90PihkZWNyZW1lbnQpOworICAgIH0KKyAgICBJbmRleGVkSXRlcmF0b3Ig
b3BlcmF0b3IrKGxvbmcgbG9uZyBpbmNyZW1lbnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRl
eGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgaWYgKGluY3JlbWVudCA8IDApIHsK
KyAgICAgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaW5jcmVtZW50ICE9IHN0ZDo6
bnVtZXJpY19saW1pdHM8bG9uZyBsb25nPjo6bWluKCkpOworICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdCAtPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KC1pbmNyZW1lbnQpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u
ZyBsb25nPihpbmNyZW1lbnQpOworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRv
ci0obG9uZyBsb25nIGRlY3JlbWVudCkgY29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVy
YXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICBpZiAoZGVjcmVtZW50IDwgMCkgeworICAgICAg
ICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhkZWNyZW1lbnQgIT0gc3RkOjpudW1lcmlj
X2xpbWl0czxsb25nIGxvbmc+OjptaW4oKSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICs9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oLWRlY3JlbWVudCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHJlc3VsdCAtPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+
KGRlY3JlbWVudCk7CisgICAgfQorCisjaWYgX19TSVpFT0ZfU0laRV9UX18gIT0gX19TSVpFT0Zf
SU5UX18KKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKHVuc2lnbmVkIGluY3JlbWVudCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAg
ICAgICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19jYXN0PHNpemVfdD4oaW5jcmVtZW50KTsKKyAg
ICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3ItKHVuc2lnbmVkIGRlY3JlbWVudCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAg
ICAgICByZXR1cm4gcmVzdWx0IC09IHN0YXRpY19jYXN0PHNpemVfdD4oZGVjcmVtZW50KTsKKyAg
ICB9CisjZW5kaWYKKworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvcisobG9uZyBpbmNyZW1l
bnQpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsK
KyAgICAgICAgaWYgKGluY3JlbWVudCA8IDApIHsKKyAgICAgICAgICAgIElOREVYRURfSVRFUkFU
T1JfT1ZFUkZMT1coaW5jcmVtZW50ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8bG9uZz46Om1pbigp
KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQgLT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtaW5j
cmVtZW50KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19jYXN0
PHNpemVfdD4oaW5jcmVtZW50KTsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0
b3ItKGxvbmcgZGVjcmVtZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9y
IHJlc3VsdCgqdGhpcyk7CisgICAgICAgIGlmIChkZWNyZW1lbnQgPCAwKSB7CisgICAgICAgICAg
ICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGRlY3JlbWVudCAhPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGxvbmc+OjptaW4oKSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICs9IHN0YXRpY19j
YXN0PHNpemVfdD4oLWRlY3JlbWVudCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3Vs
dCAtPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlY3JlbWVudCk7CisgICAgfQorCisgICAgcHRyZGlm
Zl90IG9wZXJhdG9yLShjb25zdCBjb25zdF9pdGVyYXRvciYgcmlnaHQpIGNvbnN0CisgICAgewor
ICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKG1fdmVjdG9yID09IHJpZ2h0Lm1fdmVj
dG9yKTsKKyAgICAgICAgcmV0dXJuIG1fcG9zaXRpb24gLSByaWdodC5tX3Bvc2l0aW9uOworICAg
IH0KKworICAgIHB0cmRpZmZfdCBvcGVyYXRvci0oY29uc3QgVmFsdWVUeXBlKiByaWdodCkgY29u
c3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cocmlnaHQgPj0gbV92
ZWN0b3ItPmRhdGEoKSk7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9wb3Np
dGlvbiA+PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHJpZ2h0IC0gbV92ZWN0b3ItPmRhdGEoKSkpOwor
ICAgICAgICByZXR1cm4gZ2V0KCkgLSByaWdodDsKKyAgICB9CisKKyAgICB2b2lkIG9wZXJhdG9y
PShjb25zdCBJbmRleGVkSXRlcmF0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3Ig
PSBvdGhlci5tX3ZlY3RvcjsKKyAgICAgICAgbV9wb3NpdGlvbiA9IG90aGVyLm1fcG9zaXRpb247
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaXNTYWZl
VG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA9PSBvdGhlci51
bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRl
cmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVS
RkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgp
ICE9IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRP
Ul9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVuc2Fm
ZUdldCgpID09IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWYWx1
ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVS
RkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgp
ICE9IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZhbHVlVHlwZSog
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlz
U2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPCBvdGhl
cjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgVmFsdWVUeXBlKiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1coaXNTYWZlVG9D
b21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA8PSBvdGhlcjsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGlzU2FmZVRvQ29t
cGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPCBvdGhlci51bnNhZmVH
ZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgY29uc3RfaXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhz
YWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA8PSBvdGhl
ci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBJbmRleGVk
SXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9P
VkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdl
dCgpID4gb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj49KGNv
bnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIElOREVYRURf
SVRFUkFUT1JfT1ZFUkZMT1coaXNTYWZlVG9Db21wYXJlKG90aGVyKSk7CisgICAgICAgIHJldHVy
biB1bnNhZmVHZXQoKSA+PSBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9w
ZXJhdG9yPihjb25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5E
RVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhpc1NhZmVUb0NvbXBhcmUob3RoZXIpKTsKKyAgICAgICAg
cmV0dXJuIHVuc2FmZUdldCgpID4gb3RoZXI7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj49
KGNvbnN0IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBJTkRFWEVEX0lU
RVJBVE9SX09WRVJGTE9XKGlzU2FmZVRvQ29tcGFyZShvdGhlcikpOworICAgICAgICByZXR1cm4g
dW5zYWZlR2V0KCkgPj0gb3RoZXI7CisgICAgfQorCisgICAgb3BlcmF0b3IgY29uc3RfaXRlcmF0
b3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3RfaXRlcmF0b3IgcmVzdWx0OworICAgICAg
ICByZXN1bHQubV92ZWN0b3IgPSBtX3ZlY3RvcjsKKyAgICAgICAgcmVzdWx0Lm1fcG9zaXRpb24g
PSBtX3Bvc2l0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIFZlY3Rv
clR5cGUqIG1fdmVjdG9yOworICAgIHNpemVfdCBtX3Bvc2l0aW9uOworCisgICAgYm9vbCBpc1Nh
ZmVUb0NvbXBhcmUoY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIHJldHVybiAhbV92ZWN0b3IgfHwgIW90aGVyLm1fdmVjdG9yOworICAg
IH0KKworICAgIGJvb2wgaXNTYWZlVG9Db21wYXJlKGNvbnN0IFZhbHVlVHlwZSogdmFsdWUpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGlmICghbV92ZWN0b3IpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgc2l6ZV90IGRlbHRhID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pih2YWx1ZSAtIG1fdmVjdG9yLT5k
YXRhKCkpOworICAgICAgICByZXR1cm4gZGVsdGEgPD0gbV92ZWN0b3ItPnNpemUoKTsKKyAgICB9
CisKKyAgICBWYWx1ZVR5cGUqIHVuc2FmZUdldCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
IW1fdmVjdG9yKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBn
ZXQoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVU
eXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgdHlwZW5hbWUgSW5kZXhlZEl0
ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPjo6VmFsdWVUeXBlKiBnZXRQdHIo
SW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiBwKQoreworICAg
IHJldHVybiBwLmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFs
dWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgcHRyZGlmZl90IG9wZXJh
dG9yLShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1
ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIElOREVYRURfSVRFUkFUT1Jf
T1ZFUkZMT1cobGVmdCA+PSByaWdodC5tX3ZlY3Rvci0+ZGF0YSgpKTsKKyAgICBJTkRFWEVEX0lU
RVJBVE9SX09WRVJGTE9XKGxlZnQgPD0gcmlnaHQubV92ZWN0b3ItPmVuZCgpLmdldCgpKTsKKyAg
ICByZXR1cm4gbGVmdCAtIHJpZ2h0LmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgcHRy
ZGlmZl90IG9wZXJhdG9yLShWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxU
LCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIElOREVYRURfSVRF
UkFUT1JfT1ZFUkZMT1cobGVmdCA+PSByaWdodC5tX3ZlY3Rvci0+ZGF0YSgpKTsKKyAgICBJTkRF
WEVEX0lURVJBVE9SX09WRVJGTE9XKGxlZnQgPD0gcmlnaHQubV92ZWN0b3ItPmVuZCgpLmdldCgp
KTsKKyAgICByZXR1cm4gbGVmdCAtIHJpZ2h0LmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Citpbmxp
bmUgcHRyZGlmZl90IG9wZXJhdG9yLShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4
ZWRJdGVyYXRvcjxjb25zdCBULCBjb25zdCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJp
Z2h0KQoreworICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobGVmdCA+PSByaWdodC5tX3Zl
Y3Rvci0+ZGF0YSgpKTsKKyAgICBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGxlZnQgPD0gcmln
aHQubV92ZWN0b3ItPmVuZCgpLmdldCgpKTsKKyAgICByZXR1cm4gbGVmdCAtIHJpZ2h0LmdldCgp
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFZhbHVlVHlwZSogbGVm
dCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYg
cmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID09IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVk
SXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICBy
ZXR1cm4gcmlnaHQgPT0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0
b3IhPShWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUs
IE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCAhPSBsZWZ0Owor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZhbHVlVHlwZSog
bGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVy
PiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ICE9IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4K
K2lubGluZSBib29sIG9wZXJhdG9yPD0oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRl
cmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1
cm4gcmlnaHQgPj0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZh
bHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I8
PShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5
cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA+PSBsZWZ0
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KFZhbHVlVHlwZSogbGVm
dCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYg
cmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0IDw9IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lu
bGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVk
SXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICBy
ZXR1cm4gcmlnaHQgPD0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0
b3I8KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwg
T3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID4gbGVmdDsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZhbHVlVHlwZSogbGVm
dCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYg
cmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID4gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5s
aW5lIGJvb2wgb3BlcmF0b3I+KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9y
PFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJp
Z2h0IDwgbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlw
ZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0
IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3Zl
cmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0IDwgbGVmdDsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFZlY3RvclR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4g
c3RydWN0IEluZGV4ZWRJdGVyYXRvclNlbGVjdG9yIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFZl
Y3RvclR5cGU6OlZhbHVlVHlwZSBWYWx1ZVR5cGU7CisgICAgdHlwZWRlZiBJbmRleGVkSXRlcmF0
b3I8VmVjdG9yVHlwZSwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+IGl0ZXJhdG9yOworICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3I6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9y
OworICAgIHN0YXRpYyBpdGVyYXRvciBtYWtlSXRlcmF0b3IoVmVjdG9yVHlwZSYgdmVjdG9yLCBW
YWx1ZVR5cGUqIHApIHsgcmV0dXJuIGl0ZXJhdG9yKHZlY3RvciwgcCk7IH0KKyAgICBzdGF0aWMg
Y29uc3RfaXRlcmF0b3IgbWFrZUNvbnN0SXRlcmF0b3IoY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9y
LCBjb25zdCBWYWx1ZVR5cGUqIHApIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHZlY3RvciwgcCk7
IH0KK307CisKKyN1bmRlZiBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XCisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaCBiL1NvdXJjZS9X
VEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCmluZGV4IGE1NWQ3YWVlYWI4NGI5YzQ5NTE5NmU4ZTIz
MGExZGMxNzg1MTkzYWIuLjgxMWU5ZmZjZWEzMzdhNmM3ZDhiMjkxNjMwZTJhZmRmOGU1NjYzOTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAg
ICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5yZWZDb3VudCA9IDE7CiAgICAgICAg
IEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+bGVuZ3RoID0gb3RoZXIuc2l6ZSgpOwogICAg
ICAgICBBU1NFUlQoSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5sZW5ndGggPT0gb3RoZXIu
c2l6ZSgpKTsKLSAgICAgICAgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD46OnVuaW5pdGlhbGl6ZWRD
b3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpLCBtX2RhdGEpOworICAgICAgICBWZWN0b3JU
eXBlT3BlcmF0aW9uczxUPjo6dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkp
LCBnZXRQdHIob3RoZXIuZW5kKCkpLCBtX2RhdGEpOwogICAgIH0KICAgICAKICAgICBSZWZDb3Vu
dGVkQXJyYXkmIG9wZXJhdG9yPShjb25zdCBSZWZDb3VudGVkQXJyYXkmIG90aGVyKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvVmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaApp
bmRleCAyNzQ1NjhhNjkxYzY0YTAzNDIzYTRmMmI3MzQ4NzdlNjIwNzJkOTFlLi40YWFhNDhhYzI0
YTQyZmU5OWE4MDhlYTdiMWVkMmI4ZDA4MjJjMDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9WZWN0b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaApAQCAtMjgsNiArMjgsOCBA
QAogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+
CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Cisj
aW5jbHVkZSA8d3RmL0luZGV4ZWRJdGVyYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIu
aD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CkBAIC01NTQsMTQgKzU1NiwxNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25l
ZCBpbmxpbmVDYXBhY2l0eSA9IDAsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciA9IENyYQogY2xh
c3MgVmVjdG9yIDogcHJpdmF0ZSBWZWN0b3JCdWZmZXI8VCwgaW5saW5lQ2FwYWNpdHk+IHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHByaXZhdGU6CisKICAgICB0eXBlZGVmIFZlY3Rv
ckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eT4gQmFzZTsKICAgICB0eXBlZGVmIFZlY3RvclR5cGVP
cGVyYXRpb25zPFQ+IFR5cGVPcGVyYXRpb25zOworICAgIHR5cGVkZWYgSW5kZXhlZEl0ZXJhdG9y
U2VsZWN0b3I8VmVjdG9yLCBPdmVyZmxvd0hhbmRsZXI+IEl0ZXJhdG9yU2VsZWN0b3I7CiAKIHB1
YmxpYzoKICAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOwogCi0gICAgdHlwZWRlZiBUKiBpdGVyYXRv
cjsKLSAgICB0eXBlZGVmIGNvbnN0IFQqIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlw
ZW5hbWUgSXRlcmF0b3JTZWxlY3Rvcjo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgdHlwZWRlZiB0
eXBlbmFtZSBJdGVyYXRvclNlbGVjdG9yOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsK
KwogICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0
ZXJhdG9yOwogICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9y
PiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogCkBAIC01NzQsMTQgKzU3OSwxNCBAQCBwdWJsaWM6
CiAgICAgICAgIDogQmFzZShzaXplLCBzaXplKQogICAgIHsKICAgICAgICAgaWYgKGJlZ2luKCkp
Ci0gICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShiZWdpbigpLCBlbmQoKSk7
CisgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShnZXRQdHIoYmVnaW4oKSks
IGdldFB0cihlbmQoKSkpOwogICAgIH0KIAogICAgIFZlY3Rvcih1bnNpZ25lZCBzaXplLCBjb25z
dCBUJiB2YWwpCiAgICAgICAgIDogQmFzZShzaXplLCBzaXplKQogICAgIHsKICAgICAgICAgaWYg
KGJlZ2luKCkpCi0gICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZEZpbGwo
YmVnaW4oKSwgZW5kKCksIHZhbCk7CisgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0
aWFsaXplZEZpbGwoZ2V0UHRyKGJlZ2luKCkpLCBnZXRQdHIoZW5kKCkpLCB2YWwpOwogICAgIH0K
IAogICAgIFZlY3RvcihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4gaW5pdGlhbGl6ZXJMaXN0KQpA
QCAtNjQ1LDEwICs2NTAsMTAgQEAgcHVibGljOgogICAgIGNvbnN0IFQqIGRhdGEoKSBjb25zdCB7
IHJldHVybiBCYXNlOjpidWZmZXIoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgZGF0YU1lbW9y
eU9mZnNldCgpIHsgcmV0dXJuIEJhc2U6OmJ1ZmZlck1lbW9yeU9mZnNldCgpOyB9CiAKLSAgICBp
dGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGRhdGEoKTsgfQotICAgIGl0ZXJhdG9yIGVuZCgpIHsg
cmV0dXJuIGJlZ2luKCkgKyBtX3NpemU7IH0KLSAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIGRhdGEoKTsgfQotICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIGJlZ2luKCkgKyBtX3NpemU7IH0KKyAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJu
IEl0ZXJhdG9yU2VsZWN0b3I6Om1ha2VJdGVyYXRvcigqdGhpcywgZGF0YSgpKTsgfQorICAgIGl0
ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGJlZ2luKCkgKyBzaXplKCk7IH0KKyAgICBjb25zdF9pdGVy
YXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIEl0ZXJhdG9yU2VsZWN0b3I6Om1ha2VDb25zdEl0
ZXJhdG9yKCp0aGlzLCBkYXRhKCkpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gYmVnaW4oKSArIHNpemUoKTsgfQogCiAgICAgcmV2ZXJzZV9pdGVyYXRvciByYmVn
aW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogICAgIHJldmVyc2VfaXRl
cmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KQEAgLTY4
Myw2ICs2ODgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKCkgeyBzaHJpbmtDYXBhY2l0
eSgwKTsgfQogCisgICAgdm9pZCBhcHBlbmQoY29uc3RfaXRlcmF0b3IsIHVuc2lnbmVkKTsKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIGFwcGVuZChjb25zdCBVKiwgdW5zaWduZWQpOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKFUmJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4gdm9pZCB1bmNoZWNrZWRBcHBlbmQoVSYmIHZhbCk7CkBAIC03NDYsNyArNzUy
LDcgQEAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpWZWN0b3Io
Y29uc3QgVmVjdG9yJiBvdGhlcikKICAgICA6IEJhc2Uob3RoZXIuY2FwYWNpdHkoKSwgb3RoZXIu
c2l6ZSgpKQogewogICAgIGlmIChiZWdpbigpKQotICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5p
bml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCksIGJlZ2luKCkpOworICAg
ICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90aGVyLmJlZ2lu
KCkpLCBnZXRQdHIob3RoZXIuZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dI
YW5kbGVyPgpAQCAtNzU1LDcgKzc2MSw3IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyPjo6VmVjdG9yKGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFjaXR5CiAgICAg
OiBCYXNlKG90aGVyLmNhcGFjaXR5KCksIG90aGVyLnNpemUoKSkKIHsKICAgICBpZiAoYmVnaW4o
KSkKLSAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2lu
KCksIG90aGVyLmVuZCgpLCBiZWdpbigpKTsKKyAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5p
dGlhbGl6ZWRDb3B5KGdldFB0cihvdGhlci5iZWdpbigpKSwgZ2V0UHRyKG90aGVyLmVuZCgpKSwg
Z2V0UHRyKGJlZ2luKCkpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KQEAgLTc3Miw4ICs3NzgsOCBA
QCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj4mIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYQogICAgICAgICBBU1NFUlQoYmVnaW4oKSk7CiAgICAg
fQogICAgIAotICAgIHN0ZDo6Y29weShvdGhlci5iZWdpbigpLCBvdGhlci5iZWdpbigpICsgc2l6
ZSgpLCBiZWdpbigpKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkob3Ro
ZXIuYmVnaW4oKSArIHNpemUoKSwgb3RoZXIuZW5kKCksIGVuZCgpKTsKKyAgICBzdGQ6OmNvcHko
Z2V0UHRyKG90aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuYmVnaW4oKSArIHNpemUoKSksIGdl
dFB0cihiZWdpbigpKSk7CisgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KGdl
dFB0cihvdGhlci5iZWdpbigpICsgc2l6ZSgpKSwgZ2V0UHRyKG90aGVyLmVuZCgpKSwgZ2V0UHRy
KGVuZCgpKSk7CiAgICAgbV9zaXplID0gb3RoZXIuc2l6ZSgpOwogCiAgICAgcmV0dXJuICp0aGlz
OwpAQCAtNzk3LDkgKzgwMyw5IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyPiYgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhCiAgICAgICAgIHJl
c2VydmVDYXBhY2l0eShvdGhlci5zaXplKCkpOwogICAgICAgICBBU1NFUlQoYmVnaW4oKSk7CiAg
ICAgfQotICAgIAotICAgIHN0ZDo6Y29weShvdGhlci5iZWdpbigpLCBvdGhlci5iZWdpbigpICsg
c2l6ZSgpLCBiZWdpbigpKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHko
b3RoZXIuYmVnaW4oKSArIHNpemUoKSwgb3RoZXIuZW5kKCksIGVuZCgpKTsKKworICAgIHN0ZDo6
Y29weShnZXRQdHIob3RoZXIuYmVnaW4oKSksIGdldFB0cihvdGhlci5iZWdpbigpICsgc2l6ZSgp
KSwgZ2V0UHRyKGJlZ2luKCkpKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENv
cHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkgKyBzaXplKCkpLCBnZXRQdHIob3RoZXIuZW5kKCkpLCBn
ZXRQdHIoZW5kKCkpKTsKICAgICBtX3NpemUgPSBvdGhlci5zaXplKCk7CiAKICAgICByZXR1cm4g
KnRoaXM7CkBAIC04NTksOCArODY1LDggQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlcj46OmZpbGwoY29uc3QgVCYgdmFsLCB1bnNpZ25lZCBuZXcKICAgICAg
ICAgQVNTRVJUKGJlZ2luKCkpOwogICAgIH0KICAgICAKLSAgICBzdGQ6OmZpbGwoYmVnaW4oKSwg
ZW5kKCksIHZhbCk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRGaWxsKGVuZCgp
LCBiZWdpbigpICsgbmV3U2l6ZSwgdmFsKTsKKyAgICBzdGQ6OmZpbGwoZ2V0UHRyKGJlZ2luKCkp
LCBnZXRQdHIoZW5kKCkpLCB2YWwpOworICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVk
RmlsbChnZXRQdHIoZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkgKyBuZXdTaXplLCB2YWwpOwogICAg
IG1fc2l6ZSA9IG5ld1NpemU7CiB9CiAKQEAgLTg4MSwxMyArODg3LDEzIEBAIHZvaWQgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpleHBhbmRDYXBhY2l0eSh1bnNp
Z25lZCBuZXdNaW5DCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0
eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogVCogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXI+OjpleHBhbmRDYXBhY2l0eSh1bnNpZ25lZCBuZXdNaW5DYXBhY2l0
eSwgVCogcHRyKQogewotICAgIGlmIChwdHIgPCBiZWdpbigpIHx8IHB0ciA+PSBlbmQoKSkgewor
ICAgIGlmIChwdHIgPCBnZXRQdHIoYmVnaW4oKSkgfHwgcHRyID49IGdldFB0cihlbmQoKSkpIHsK
ICAgICAgICAgZXhwYW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpOwogICAgICAgICByZXR1cm4g
cHRyOwogICAgIH0KLSAgICB1bnNpZ25lZCBpbmRleCA9IHB0ciAtIGJlZ2luKCk7CisgICAgdW5z
aWduZWQgaW5kZXggPSBwdHIgLSBnZXRQdHIoYmVnaW4oKSk7CiAgICAgZXhwYW5kQ2FwYWNpdHko
bmV3TWluQ2FwYWNpdHkpOwotICAgIHJldHVybiBiZWdpbigpICsgaW5kZXg7CisgICAgcmV0dXJu
IGdldFB0cihiZWdpbigpKSArIGluZGV4OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNp
Z25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgpAQCAtODk5LDE1
ICs5MDUsMTUgQEAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
cj46OnRyeUV4cGFuZENhcGFjaXR5KHVuc2lnbmVkIG5ld00KIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CiBjb25z
dCBUKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnRyeUV4cGFu
ZENhcGFjaXR5KHVuc2lnbmVkIG5ld01pbkNhcGFjaXR5LCBjb25zdCBUKiBwdHIpCiB7Ci0gICAg
aWYgKHB0ciA8IGJlZ2luKCkgfHwgcHRyID49IGVuZCgpKSB7CisgICAgaWYgKHB0ciA8IGdldFB0
cihiZWdpbigpKSB8fCBwdHIgPj0gZ2V0UHRyKGVuZCgpKSkgewogICAgICAgICBpZiAoIXRyeUV4
cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5KSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICByZXR1cm4gcHRyOwogICAgIH0KLSAgICB1bnNpZ25lZCBpbmRleCA9IHB0ciAtIGJlZ2lu
KCk7CisgICAgdW5zaWduZWQgaW5kZXggPSBwdHIgLSBnZXRQdHIoYmVnaW4oKSk7CiAgICAgaWYg
KCF0cnlFeHBhbmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0eSkpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBiZWdpbigpICsgaW5kZXg7CisgICAgcmV0dXJuIGdldFB0cihiZWdpbigpKSAr
IGluZGV4OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0
eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgpAQCAtOTIx
LDEyICs5MjcsMTIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNp
dHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVzaXplKHVuc2lnbmVkIHNpemUpCiB7CiAg
ICAgaWYgKHNpemUgPD0gbV9zaXplKQotICAgICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3Qo
YmVnaW4oKSArIHNpemUsIGVuZCgpKTsKKyAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0
KGdldFB0cihiZWdpbigpKSArIHNpemUsIGdldFB0cihlbmQoKSkpOwogICAgIGVsc2UgewogICAg
ICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgICAgICBleHBhbmRDYXBhY2l0eShz
aXplKTsKICAgICAgICAgaWYgKGJlZ2luKCkpCi0gICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6
aW5pdGlhbGl6ZShlbmQoKSwgYmVnaW4oKSArIHNpemUpOworICAgICAgICAgICAgVHlwZU9wZXJh
dGlvbnM6OmluaXRpYWxpemUoZ2V0UHRyKGVuZCgpKSwgZ2V0UHRyKGJlZ2luKCkpICsgc2l6ZSk7
CiAgICAgfQogICAgIAogICAgIG1fc2l6ZSA9IHNpemU7CkBAIC05NDMsNyArOTQ5LDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4KIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXI+OjpzaHJpbmsodW5zaWduZWQgc2l6ZSkKIHsKICAgICBBU1NFUlQoc2l6ZSA8PSBtX3NpemUp
OwotICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChiZWdpbigpICsgc2l6ZSwgZW5kKCkpOwor
ICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChnZXRQdHIoYmVnaW4oKSkgKyBzaXplLCBnZXRQ
dHIoZW5kKCkpKTsKICAgICBtX3NpemUgPSBzaXplOwogfQogCkBAIC05NTQsNyArOTYwLDcgQEAg
dm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46Omdyb3codW5z
aWduZWQgc2l6ZSkKICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgIGV4cGFuZENh
cGFjaXR5KHNpemUpOwogICAgIGlmIChiZWdpbigpKQotICAgICAgICBUeXBlT3BlcmF0aW9uczo6
aW5pdGlhbGl6ZShlbmQoKSwgYmVnaW4oKSArIHNpemUpOworICAgICAgICBUeXBlT3BlcmF0aW9u
czo6aW5pdGlhbGl6ZShnZXRQdHIoZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkgKyBzaXplKTsKICAg
ICBtX3NpemUgPSBzaXplOwogfQogCkBAIC05NjMsMTEgKzk2OSwxMSBAQCB2b2lkIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVzZXJ2ZUNhcGFjaXR5KHVuc2ln
bmVkIG5ld0NhcAogewogICAgIGlmIChuZXdDYXBhY2l0eSA8PSBjYXBhY2l0eSgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgVCogb2xkQnVmZmVyID0gYmVnaW4oKTsKLSAgICBUKiBvbGRFbmQgPSBl
bmQoKTsKKyAgICBUKiBvbGRCdWZmZXIgPSBnZXRQdHIoYmVnaW4oKSk7CisgICAgVCogb2xkRW5k
ID0gZ2V0UHRyKGVuZCgpKTsKICAgICBCYXNlOjphbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSk7
CiAgICAgQVNTRVJUKGJlZ2luKCkpOwotICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZl
ciwgb2xkRW5kLCBiZWdpbigpKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShvbGRCdWZmZXIs
IG9sZEVuZCwgZ2V0UHRyKGJlZ2luKCkpKTsKICAgICBCYXNlOjpkZWFsbG9jYXRlQnVmZmVyKG9s
ZEJ1ZmZlcik7CiB9CiAKQEAgLTk3NiwxMiArOTgyLDEyIEBAIGJvb2wgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojp0cnlSZXNlcnZlQ2FwYWNpdHkodW5zaWduZWQg
bmV3CiB7CiAgICAgaWYgKG5ld0NhcGFjaXR5IDw9IGNhcGFjaXR5KCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIFQqIG9sZEJ1ZmZlciA9IGJlZ2luKCk7Ci0gICAgVCogb2xkRW5kID0gZW5k
KCk7CisgICAgVCogb2xkQnVmZmVyID0gZ2V0UHRyKGJlZ2luKCkpOworICAgIFQqIG9sZEVuZCA9
IGdldFB0cihlbmQoKSk7CiAgICAgaWYgKCFCYXNlOjp0cnlBbGxvY2F0ZUJ1ZmZlcihuZXdDYXBh
Y2l0eSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBBU1NFUlQoYmVnaW4oKSk7Ci0gICAg
VHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOworICAgIFR5
cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBnZXRQdHIoYmVnaW4oKSkpOwog
ICAgIEJhc2U6OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTEwMDQsMTcgKzEwMTAsMTcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlcj46OnNocmlua0NhcGFjaXR5KHVuc2lnbmVkIG5ld0NhcGEKICAgICBp
ZiAobmV3Q2FwYWNpdHkgPCBzaXplKCkpIAogICAgICAgICBzaHJpbmsobmV3Q2FwYWNpdHkpOwog
Ci0gICAgVCogb2xkQnVmZmVyID0gYmVnaW4oKTsKKyAgICBUKiBvbGRCdWZmZXIgPSBnZXRQdHIo
YmVnaW4oKSk7CiAgICAgaWYgKG5ld0NhcGFjaXR5ID4gMCkgewogICAgICAgICBpZiAoQmFzZTo6
c2hvdWxkUmVhbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSkpIHsKICAgICAgICAgICAgIEJhc2U6
OnJlYWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKLSAgICAgICAgVCogb2xkRW5kID0gZW5kKCk7CisgICAgICAgIFQqIG9sZEVuZCA9
IGdldFB0cihlbmQoKSk7CiAgICAgICAgIEJhc2U6OmFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5
KTsKLSAgICAgICAgaWYgKGJlZ2luKCkgIT0gb2xkQnVmZmVyKQotICAgICAgICAgICAgVHlwZU9w
ZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOworICAgICAgICBpZiAo
Z2V0UHRyKGJlZ2luKCkpICE9IG9sZEJ1ZmZlcikKKyAgICAgICAgICAgIFR5cGVPcGVyYXRpb25z
Ojptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBnZXRQdHIoYmVnaW4oKSkpOwogICAgIH0KIAogICAg
IEJhc2U6OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKQEAgLTEwMzQsMTEgKzEwNDAsMTcg
QEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmFwcGVu
ZChjb25zdCBVKiBkYXRhLCB1bnNpZ25lZAogICAgIH0KICAgICBpZiAobmV3U2l6ZSA8IG1fc2l6
ZSkKICAgICAgICAgQ1JBU0goKTsKLSAgICBUKiBkZXN0ID0gZW5kKCk7CisgICAgVCogZGVzdCA9
IGdldFB0cihlbmQoKSk7CiAgICAgVmVjdG9yQ29waWVyPHN0ZDo6aXNfdHJpdmlhbDxUPjo6dmFs
dWUsIFU+Ojp1bmluaXRpYWxpemVkQ29weShkYXRhLCAmZGF0YVtkYXRhU2l6ZV0sIGRlc3QpOwog
ICAgIG1fc2l6ZSA9IG5ld1NpemU7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVk
IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Cit2b2lkIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kKGNvbnN0X2l0ZXJhdG9y
IGRhdGEsIHVuc2lnbmVkIGRhdGFTaXplKQoreworICAgIGFwcGVuZChnZXRQdHIoZGF0YSksIGRh
dGFTaXplKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNp
dHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KIGJvb2wg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojp0cnlBcHBlbmQoY29u
c3QgVSogZGF0YSwgdW5zaWduZWQgZGF0YVNpemUpCiB7CkBAIC0xMDUxLDcgKzEwNjMsNyBAQCBi
b29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6dHJ5QXBwZW5k
KGNvbnN0IFUqIGRhdGEsIHVuc2lnbgogICAgIH0KICAgICBpZiAobmV3U2l6ZSA8IG1fc2l6ZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFQqIGRlc3QgPSBlbmQoKTsKKyAgICBUKiBkZXN0
ID0gZ2V0UHRyKGVuZCgpKTsKICAgICBWZWN0b3JDb3BpZXI8c3RkOjppc190cml2aWFsPFQ+Ojp2
YWx1ZSwgVT46OnVuaW5pdGlhbGl6ZWRDb3B5KGRhdGEsICZkYXRhW2RhdGFTaXplXSwgZGVzdCk7
CiAgICAgbV9zaXplID0gbmV3U2l6ZTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwNjEsNyArMTA3
Myw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBl
bmFtZSBPdmVyZmxvd0hhbmRsZXI+IHRlbXBsYXRlCiBBTFdBWVNfSU5MSU5FIHZvaWQgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmQoVSYmIHZhbHVlKQog
ewogICAgIGlmIChzaXplKCkgIT0gY2FwYWNpdHkoKSkgewotICAgICAgICBuZXcgKE5vdE51bGws
IGVuZCgpKSBUKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgICAgICBuZXcgKE5vdE51bGws
IGdldFB0cihlbmQoKSkpIFQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CiAgICAgICAgICsrbV9z
aXplOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA3OCw3ICsxMDkwLDcgQEAgdm9pZCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmFwcGVuZFNsb3dDYXNl
KFUmJiB2YWx1ZSkKICAgICBwdHIgPSBleHBhbmRDYXBhY2l0eShzaXplKCkgKyAxLCBwdHIpOwog
ICAgIEFTU0VSVChiZWdpbigpKTsKIAotICAgIG5ldyAoTm90TnVsbCwgZW5kKCkpIFQoc3RkOjpm
b3J3YXJkPFU+KCpwdHIpKTsKKyAgICBuZXcgKE5vdE51bGwsIGdldFB0cihlbmQoKSkpIFQoc3Rk
Ojpmb3J3YXJkPFU+KCpwdHIpKTsKICAgICArK21fc2l6ZTsKIH0KIApAQCAtMTA5MSwxNCArMTEw
MywxNCBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlcj46OnVuY2hlY2tlZEFwcGVuZChVJiYgdmFsdQogICAgIEFTU0VSVChzaXplKCkgPCBjYXBh
Y2l0eSgpKTsKIAogICAgIGF1dG8gcHRyID0gc3RkOjphZGRyZXNzb2YodmFsdWUpOwotICAgIG5l
dyAoTm90TnVsbCwgZW5kKCkpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKKyAgICBuZXcgKE5v
dE51bGwsIGdldFB0cihlbmQoKSkpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKICAgICArK21f
c2l6ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHks
IHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUgVSwgdW5zaWduZWQg
b3RoZXJDYXBhY2l0eT4KIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyPjo6YXBwZW5kVmVjdG9yKGNvbnN0IFZlY3RvcjxVLCBvdGhlckNhcGFjaXR5
PiYgdmFsKQogewotICAgIGFwcGVuZCh2YWwuYmVnaW4oKSwgdmFsLnNpemUoKSk7CisgICAgYXBw
ZW5kKGdldFB0cih2YWwuYmVnaW4oKSksIHZhbC5zaXplKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
PiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgpAQCAtMTExMiw4ICsxMTI0LDggQEAgdm9pZCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46Omluc2VydCh1bnNpZ25lZCBwb3Np
dGlvbiwgY29uc3QKICAgICB9CiAgICAgaWYgKG5ld1NpemUgPCBtX3NpemUpCiAgICAgICAgIENS
QVNIKCk7Ci0gICAgVCogc3BvdCA9IGJlZ2luKCkgKyBwb3NpdGlvbjsKLSAgICBUeXBlT3BlcmF0
aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGVuZCgpLCBzcG90ICsgZGF0YVNpemUpOworICAg
IFQqIHNwb3QgPSBnZXRQdHIoYmVnaW4oKSkgKyBwb3NpdGlvbjsKKyAgICBUeXBlT3BlcmF0aW9u
czo6bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGdldFB0cihlbmQoKSksIHNwb3QgKyBkYXRhU2l6ZSk7
CiAgICAgVmVjdG9yQ29waWVyPHN0ZDo6aXNfdHJpdmlhbDxUPjo6dmFsdWUsIFU+Ojp1bmluaXRp
YWxpemVkQ29weShkYXRhLCAmZGF0YVtkYXRhU2l6ZV0sIHNwb3QpOwogICAgIG1fc2l6ZSA9IG5l
d1NpemU7CiB9CkBAIC0xMTI5LDggKzExNDEsOCBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46Omluc2VydCh1bnNpZ25lZCBwb3NpdGlvbgog
ICAgICAgICBBU1NFUlQoYmVnaW4oKSk7CiAgICAgfQogCi0gICAgVCogc3BvdCA9IGJlZ2luKCkg
KyBwb3NpdGlvbjsKLSAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGVu
ZCgpLCBzcG90ICsgMSk7CisgICAgVCogc3BvdCA9IGdldFB0cihiZWdpbigpKSArIHBvc2l0aW9u
OworICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCwgZ2V0UHRyKGVuZCgp
KSwgc3BvdCArIDEpOwogICAgIG5ldyAoTm90TnVsbCwgc3BvdCkgVChzdGQ6OmZvcndhcmQ8VT4o
KnB0cikpOwogICAgICsrbV9zaXplOwogfQpAQCAtMTEzOCwxNiArMTE1MCwxNiBAQCBpbmxpbmUg
dm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46Omluc2VydCh1
bnNpZ25lZCBwb3NpdGlvbgogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUgVSwgdW5z
aWduZWQgYz4KIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyPjo6aW5zZXJ0VmVjdG9yKHVuc2lnbmVkIHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8VSwg
Yz4mIHZhbCkKIHsKLSAgICBpbnNlcnQocG9zaXRpb24sIHZhbC5iZWdpbigpLCB2YWwuc2l6ZSgp
KTsKKyAgICBpbnNlcnQocG9zaXRpb24sIGdldFB0cih2YWwuYmVnaW4oKSksIHZhbC5zaXplKCkp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUodW5zaWduZWQgcG9zaXRpb24pCiB7CiAgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24gPCBzaXplKCkpOwotICAg
IFQqIHNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247CisgICAgVCogc3BvdCA9IGdldFB0cihiZWdp
bigpKSArIHBvc2l0aW9uOwogICAgIHNwb3QtPn5UKCk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6Om1v
dmVPdmVybGFwcGluZyhzcG90ICsgMSwgZW5kKCksIHNwb3QpOworICAgIFR5cGVPcGVyYXRpb25z
Ojptb3ZlT3ZlcmxhcHBpbmcoc3BvdCArIDEsIGdldFB0cihlbmQoKSksIHNwb3QpOwogICAgIC0t
bV9zaXplOwogfQogCkBAIC0xMTU2LDEwICsxMTY4LDEwIEBAIGlubGluZSB2b2lkIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlKHVuc2lnbmVkIHBvc2l0
aW9uCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24gPD0g
c2l6ZSgpKTsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihwb3NpdGlvbiAr
IGxlbmd0aCA8PSBzaXplKCkpOwotICAgIFQqIGJlZ2luU3BvdCA9IGJlZ2luKCkgKyBwb3NpdGlv
bjsKKyAgICBUKiBiZWdpblNwb3QgPSBnZXRQdHIoYmVnaW4oKSkgKyBwb3NpdGlvbjsKICAgICBU
KiBlbmRTcG90ID0gYmVnaW5TcG90ICsgbGVuZ3RoOwogICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0
cnVjdChiZWdpblNwb3QsIGVuZFNwb3QpOyAKLSAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJs
YXBwaW5nKGVuZFNwb3QsIGVuZCgpLCBiZWdpblNwb3QpOworICAgIFR5cGVPcGVyYXRpb25zOjpt
b3ZlT3ZlcmxhcHBpbmcoZW5kU3BvdCwgZ2V0UHRyKGVuZCgpKSwgYmVnaW5TcG90KTsKICAgICBt
X3NpemUgLT0gbGVuZ3RoOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCAwY2YwOWUxZjVlYzk4YTg1MTQ0Y2M3
MjJkMmE2Y2M0YWU0ZjkzODk4Li4zZWU4MDY4YTNhNzZhNGE0M2FjNjQzMjMyNzcyNjQzYzE2MTQ5
ZDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAKQEAgLTE0MzcsOCArMTQzNyw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIGlmIChidWZmZXIuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
ICAgICAgICBjb25zdCB1aW50OF90KiBwdHIgPSBidWZmZXIuYmVnaW4oKTsKLSAgICAgICAgY29u
c3QgdWludDhfdCogZW5kID0gYnVmZmVyLmVuZCgpOworICAgICAgICBjb25zdCB1aW50OF90KiBw
dHIgPSBnZXRQdHIoYnVmZmVyLmJlZ2luKCkpOworICAgICAgICBjb25zdCB1aW50OF90KiBlbmQg
PSBnZXRQdHIoYnVmZmVyLmVuZCgpKTsKICAgICAgICAgdWludDMyX3QgdmVyc2lvbjsKICAgICAg
ICAgaWYgKCFyZWFkTGl0dGxlRW5kaWFuKHB0ciwgZW5kLCB2ZXJzaW9uKSB8fCB2ZXJzaW9uID4g
Q3VycmVudFZlcnNpb24pCiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggMmQ5Yjc5ZTEzYWJmOTYwYTYxNGI5NmQy
NzA2NjBlNWYzNWUzNDE3Zi4uZTkyZmIyZjc5MGJlNGM1YzE2NzZjNjk4YzViZTFiYTY1ZTFhNjkx
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMjA3MywxMSAr
MjA3MywxMSBAQCBpbmxpbmUgYm9vbCBTZWFyY2hCdWZmZXI6OmlzQmFkTWF0Y2goY29uc3QgVUNo
YXIqIG1hdGNoLCBzaXplX3QgbWF0Y2hMZW5ndGgpIGNvbgogICAgIC8vIGNyZWF0aW5nIGEgbmV3
IG9uZSBlYWNoIHRpbWUuCiAgICAgbm9ybWFsaXplQ2hhcmFjdGVycyhtYXRjaCwgbWF0Y2hMZW5n
dGgsIG1fbm9ybWFsaXplZE1hdGNoKTsKIAotICAgIGNvbnN0IFVDaGFyKiBhID0gbV9ub3JtYWxp
emVkVGFyZ2V0LmJlZ2luKCk7Ci0gICAgY29uc3QgVUNoYXIqIGFFbmQgPSBtX25vcm1hbGl6ZWRU
YXJnZXQuZW5kKCk7CisgICAgY29uc3QgVUNoYXIqIGEgPSBnZXRQdHIobV9ub3JtYWxpemVkVGFy
Z2V0LmJlZ2luKCkpOworICAgIGNvbnN0IFVDaGFyKiBhRW5kID0gZ2V0UHRyKG1fbm9ybWFsaXpl
ZFRhcmdldC5lbmQoKSk7CiAKLSAgICBjb25zdCBVQ2hhciogYiA9IG1fbm9ybWFsaXplZE1hdGNo
LmJlZ2luKCk7Ci0gICAgY29uc3QgVUNoYXIqIGJFbmQgPSBtX25vcm1hbGl6ZWRNYXRjaC5lbmQo
KTsKKyAgICBjb25zdCBVQ2hhciogYiA9IGdldFB0cihtX25vcm1hbGl6ZWRNYXRjaC5iZWdpbigp
KTsKKyAgICBjb25zdCBVQ2hhciogYkVuZCA9IGdldFB0cihtX25vcm1hbGl6ZWRNYXRjaC5lbmQo
KSk7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAvLyBTa2lwIHJ1bnMgb2Ygbm9uLWth
bmEtbGV0dGVyIGNoYXJhY3RlcnMuIFRoaXMgaXMgbmVjZXNzYXJ5IHNvIHdlIGNhbgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0K
aW5kZXggODQzYjhiZjVmM2JmZDMxYjE3OThhYTk0MGY5NGNlYWMxNDcxOWY2Ny4uZGVhM2Y4YjA0
MWE2MWMzYjcyMTc3NDNlZjg4NTA4NDRhNzI4NmE4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCkBAIC01NTUsNyArNTU1
LDcgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hs
aWdodCgpCiAKICAgICAgICAgaWYgKCFjZ1JlY3RzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
Q0dSZWN0IHZpc2libGVSZWN0ID0gbWFpbkZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7
Ci0gICAgICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0ID0gYWRv
cHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVBbmRE
aXJlY3Rpb24obnVsbHB0ciwgY2dSZWN0cy5iZWdpbigpLCBjZ1JlY3RzLnNpemUoKSwgdmlzaWJs
ZVJlY3QsIERESGlnaGxpZ2h0Tm9PdXRsaW5lV2l0aEFycm93LCBZRVMsIE5TV3JpdGluZ0RpcmVj
dGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxEREhpZ2hsaWdo
dFJlZj4gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5W
aXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCBjZ1JlY3RzLmRhdGEoKSwg
Y2dSZWN0cy5zaXplKCksIHZpc2libGVSZWN0LCBEREhpZ2hsaWdodE5vT3V0bGluZVdpdGhBcnJv
dywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVTKSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIG5ld1BvdGVudGlhbEhpZ2hsaWdodHMuYWRkKEhpZ2hsaWdodDo6Y3Jl
YXRlRm9yU2VsZWN0aW9uKCp0aGlzLCBkZEhpZ2hsaWdodCwgc2VsZWN0aW9uUmFuZ2UpKTsKICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2Vn
bWVudGVkRm9udERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2Vn
bWVudGVkRm9udERhdGEuY3BwCmluZGV4IGQxYjkyYjdiNjA5YjQ1MTk5Yzg0YTQ2YWVlOWZkYjZj
NGY3Y2ZlYzUuLjUwM2IwZThkOWJiZjI5MDZjZTczYmViZWJhMDFiZDYwM2VjNzk5OTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRh
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250
RGF0YS5jcHAKQEAgLTM5LDggKzM5LDggQEAgU2VnbWVudGVkRm9udERhdGE6On5TZWdtZW50ZWRG
b250RGF0YSgpCiAKIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBTZWdtZW50ZWRGb250RGF0YTo6Zm9u
dERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAogewotICAgIFZlY3RvcjxGb250RGF0
YVJhbmdlPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYW5nZXMuZW5kKCk7Ci0gICAgZm9yIChW
ZWN0b3I8Rm9udERhdGFSYW5nZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yYW5nZXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgYXV0byBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsKKyAg
ICBmb3IgKGF1dG8gaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgaWYgKGl0LT5mcm9tKCkgPD0gYyAmJiBpdC0+dG8oKSA+PSBjKQogICAgICAgICAgICAg
cmV0dXJuIGl0LT5mb250RGF0YSgpLmdldCgpOwogICAgIH0KQEAgLTQ5LDggKzQ5LDggQEAgY29u
c3QgU2ltcGxlRm9udERhdGEqIFNlZ21lbnRlZEZvbnREYXRhOjpmb250RGF0YUZvckNoYXJhY3Rl
cihVQ2hhcjMyIGMpIGNvbnN0CiAKIGJvb2wgU2VnbWVudGVkRm9udERhdGE6OmNvbnRhaW5zQ2hh
cmFjdGVyKFVDaGFyMzIgYykgY29uc3QKIHsKLSAgICBWZWN0b3I8Rm9udERhdGFSYW5nZT46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPEZvbnRE
YXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgIGF1dG8gZW5kID0gbV9yYW5nZXMuZW5kKCk7CisgICAgZm9yIChhdXRv
IGl0ID0gbV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGlmIChj
ID49IGl0LT5mcm9tKCkgJiYgYyA8PSBpdC0+dG8oKSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KQEAgLTc2LDggKzc2LDggQEAgYm9vbCBTZWdtZW50ZWRGb250RGF0YTo6aXNDdXN0
b21Gb250KCkgY29uc3QKIAogYm9vbCBTZWdtZW50ZWRGb250RGF0YTo6aXNMb2FkaW5nKCkgY29u
c3QKIHsKLSAgICBWZWN0b3I8Rm9udERhdGFSYW5nZT46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
cmFuZ2VzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIGF1dG8g
ZW5kID0gbV9yYW5nZXMuZW5kKCk7CisgICAgZm9yIChhdXRvIGl0ID0gbV9yYW5nZXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGlmIChpdC0+Zm9udERhdGEoKS0+aXNMb2Fk
aW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAKaW5kZXggMDUxODcx
YWM2YzYwZmI2NDM5MjgzMGFhYzZhZDM4NTJhOTRkNDQ3Ni4uZGQwOTYzYTc1MDFhZDJlZTA2MzFh
NWUxNmQ3OTUxMTExMjIzOWQ1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcApAQCAtMjAwLDcgKzIwMCw3IEBAIGJvb2wgY29u
dmVydFdPRkZUb1NmbnQoU2hhcmVkQnVmZmVyKiB3b2ZmLCBWZWN0b3I8Y2hhcj4mIHNmbnQpCiAg
ICAgICAgICAgICB1TG9uZ2YgZGVzdExlbiA9IHRhYmxlT3JpZ0xlbmd0aDsKICAgICAgICAgICAg
IGlmICghc2ZudC50cnlSZXNlcnZlQ2FwYWNpdHkoc2ZudC5zaXplKCkgKyB0YWJsZU9yaWdMZW5n
dGgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIEJ5dGVmKiBk
ZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxCeXRlZio+KHNmbnQuZW5kKCkpOworICAgICAgICAgICAg
Qnl0ZWYqIGRlc3QgPSByZWludGVycHJldF9jYXN0PEJ5dGVmKj4oZ2V0UHRyKHNmbnQuZW5kKCkp
KTsKICAgICAgICAgICAgIHNmbnQuZ3JvdyhzZm50LnNpemUoKSArIHRhYmxlT3JpZ0xlbmd0aCk7
CiAgICAgICAgICAgICBpZiAodW5jb21wcmVzcyhkZXN0LCAmZGVzdExlbiwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBCeXRlZio+KHdvZmYtPmRhdGEoKSArIHRhYmxlT2Zmc2V0KSwgdGFibGVDb21w
TGVuZ3RoKSAhPSBaX09LKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWly
by5jcHAKaW5kZXggNTAyMmM1MGM3ZWU4MjVlMjQwZjBlNzEyMjQ3YzdlZjE2NDhmMzhiZC4uNzUx
NmIwYWNkMTVhYWZkMTJhMzU2YWZmNGQ1MGE2YzRhYTAyNGYyMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAK
QEAgLTU5LDcgKzU5LDcgQEAgY2Fpcm9fcGF0dGVybl90KiBHcmFkaWVudDo6cGxhdGZvcm1HcmFk
aWVudChmbG9hdCBnbG9iYWxBbHBoYSkKICAgICBlbHNlCiAgICAgICAgIG1fZ3JhZGllbnQgPSBj
YWlyb19wYXR0ZXJuX2NyZWF0ZV9saW5lYXIobV9wMC54KCksIG1fcDAueSgpLCBtX3AxLngoKSwg
bV9wMS55KCkpOwogCi0gICAgVmVjdG9yPENvbG9yU3RvcD46Oml0ZXJhdG9yIHN0b3BJdGVyYXRv
ciA9IG1fc3RvcHMuYmVnaW4oKTsKKyAgICBhdXRvIHN0b3BJdGVyYXRvciA9IG1fc3RvcHMuYmVn
aW4oKTsKICAgICB3aGlsZSAoc3RvcEl0ZXJhdG9yICE9IG1fc3RvcHMuZW5kKCkpIHsKICAgICAg
ICAgY2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKG1fZ3JhZGllbnQsIHN0b3BJdGVy
YXRvci0+c3RvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
b3BJdGVyYXRvci0+cmVkLCBzdG9wSXRlcmF0b3ItPmdyZWVuLCBzdG9wSXRlcmF0b3ItPmJsdWUs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYv
R0lGSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCmluZGV4IGRlNDU1MDk0YTBiY2Y3YzlkZDNiMzll
NGY4OGUwMmM1MDlkZWVjODUuLjNhOTMxZGRiYWQ0ZmJhNWVlOWFkZThiNmZhYjcwNGViNWFlMDAz
YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dp
Zi9HSUZJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9p
ZCBHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZv
cmVGcmFtZSkKICAgICAvLyBhbHdheXMgdXNlIEltYWdlU291cmNlOjpjbGVhcih0cnVlLCAuLi4p
IHRvIGNvbXBsZXRlbHkgZnJlZSB0aGUgbWVtb3J5IGluCiAgICAgLy8gdGhpcyBjYXNlLgogICAg
IGNsZWFyQmVmb3JlRnJhbWUgPSBzdGQ6Om1pbihjbGVhckJlZm9yZUZyYW1lLCBtX2ZyYW1lQnVm
ZmVyQ2FjaGUuc2l6ZSgpIC0gMSk7Ci0gICAgY29uc3QgVmVjdG9yPEltYWdlRnJhbWU+OjppdGVy
YXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBjbGVhckJlZm9yZUZyYW1lKTsK
KyAgICBjb25zdCBhdXRvIGVuZCA9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpICsgY2xlYXJC
ZWZvcmVGcmFtZTsKIAogICAgIC8vIFdlIG5lZWQgdG8gcHJlc2VydmUgZnJhbWVzIHN1Y2ggdGhh
dDoKICAgICAvLyAgICogV2UgZG9uJ3QgY2xlYXIgfGVuZHwKQEAgLTE2NSwxNCArMTY1LDE0IEBA
IHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFy
QmVmb3JlRnJhbWUpCiAgICAgLy8gICAqIElmIHRoZSBmcmFtZSBpcyBwYXJ0aWFsLCB3ZSdyZSBk
ZWNvZGluZyBpdCwgc28gZG9uJ3QgY2xlYXIgaXQ7IGlmIGl0CiAgICAgLy8gICAgIGhhcyBhIGRp
c3Bvc2FsIG1ldGhvZCBvdGhlciB0aGFuIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cywgc3RvcAog
ICAgIC8vICAgICBzY2FubmluZywgYXMgd2UnbGwgb25seSBuZWVkIHRoaXMgZnJhbWUgd2hlbiBk
ZWNvZGluZyB0aGUgbmV4dCBvbmUuCi0gICAgVmVjdG9yPEltYWdlRnJhbWU+OjppdGVyYXRvciBp
KGVuZCk7CisgICAgYXV0byBpID0gZW5kOwogICAgIGZvciAoOyAoaSAhPSBtX2ZyYW1lQnVmZmVy
Q2FjaGUuYmVnaW4oKSkgJiYgKChpLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5
KSB8fCAoaS0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRl
UHJldmlvdXMpKTsgLS1pKSB7CiAgICAgICAgIGlmICgoaS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFt
ZTo6RnJhbWVDb21wbGV0ZSkgJiYgKGkgIT0gZW5kKSkKICAgICAgICAgICAgIGktPmNsZWFyUGl4
ZWxEYXRhKCk7CiAgICAgfQogCiAgICAgLy8gTm93IHxpfCBob2xkcyB0aGUgbGFzdCBmcmFtZSB3
ZSBuZWVkIHRvIHByZXNlcnZlOyBjbGVhciBwcmlvciBmcmFtZXMuCi0gICAgZm9yIChWZWN0b3I8
SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGoobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpOyBqICE9
IGk7ICsraikgeworICAgIGZvciAoYXV0byBqID0gbV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCk7
IGogIT0gaTsgKytqKSB7CiAgICAgICAgIEFTU0VSVChqLT5zdGF0dXMoKSAhPSBJbWFnZUZyYW1l
OjpGcmFtZVBhcnRpYWwpOwogICAgICAgICBpZiAoai0+c3RhdHVzKCkgIT0gSW1hZ2VGcmFtZTo6
RnJhbWVFbXB0eSkKICAgICAgICAgICAgIGotPmNsZWFyUGl4ZWxEYXRhKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGU0OGViOWI2NzVkYzlkMjE3NTk5MjRjODgw
NWFmYTBiODliNDk4MzcuLmU5ZmI1ZmEzY2RhMTQ3MWVjNmViYWJiNzRhOTYwMWVmZjRjMzU0M2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC0xNTc3LDggKzE1Nzcs
OCBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRGaWxsTGF5ZXJzKGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBDb2xvciYgYywgY29ucwogICAgICAgICBjb250ZXh0LT5iZWdpblRyYW5z
cGFyZW5jeUxheWVyKDEpOwogICAgIH0KIAotICAgIFZlY3Rvcjxjb25zdCBGaWxsTGF5ZXIqPjo6
Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciB0b3BMYXllciA9IGxheWVycy5yZW5kKCk7Ci0gICAgZm9y
IChWZWN0b3I8Y29uc3QgRmlsbExheWVyKj46OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgaXQgPSBs
YXllcnMucmJlZ2luKCk7IGl0ICE9IHRvcExheWVyOyArK2l0KQorICAgIGF1dG8gdG9wTGF5ZXIg
PSBsYXllcnMucmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IGxheWVycy5yYmVnaW4oKTsgaXQg
IT0gdG9wTGF5ZXI7ICsraXQpCiAgICAgICAgIHBhaW50RmlsbExheWVyKHBhaW50SW5mbywgYywg
Kml0LCByZWN0LCBibGVlZEF2b2lkYW5jZSwgb3AsIGJhY2tncm91bmRPYmplY3QsIGJhc2VCZ0Nv
bG9yVXNhZ2UpOwogCiAgICAgaWYgKHNob3VsZERyYXdCYWNrZ3JvdW5kSW5TZXBhcmF0ZUJ1ZmZl
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2
ZWRQb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29s
dmVkUG9zaXRpb24uY3BwCmluZGV4IGNjZGMyYTNkYzZkYTJkNjUzNGE3ZWI2MzUwOWU2YjQzYmFh
MWZkNzEuLmRjMDk1MDk5YzA0ZTNhODJjNDNjM2UwMjZjZGRlYWRlOGQ1YmUzMDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0
aW9uLmNwcApAQCAtMjk1LDcgKzI5NSw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZmlyc3RO
YW1lZEdyaWRMaW5lQmVmb3JlUG9zaXRpb24odW5zaWduZWQgcG9zaXRpb24sIGNvbnN0CiAgICAg
Ly8gYWxyZWFkeSBjb252ZXJ0ZWQgdG8gYW4gaW5kZXggaW4gb3VyIGdyaWQgcmVwcmVzZW50YXRp
b24gKGllIG9uZSB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBncmlkIGxpbmUgdG8gYWNjb3VudCBmb3IK
ICAgICAvLyB0aGUgc2lkZSkuCiAgICAgdW5zaWduZWQgZmlyc3RMaW5lQmVmb3JlUG9zaXRpb25J
bmRleCA9IDA7Ci0gICAgY29uc3QgdW5zaWduZWQqIGZpcnN0TGluZUJlZm9yZVBvc2l0aW9uID0g
c3RkOjpsb3dlcl9ib3VuZChncmlkTGluZXMuYmVnaW4oKSwgZ3JpZExpbmVzLmVuZCgpLCBwb3Np
dGlvbik7CisgICAgYXV0byBmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiA9IHN0ZDo6bG93ZXJfYm91
bmQoZ3JpZExpbmVzLmJlZ2luKCksIGdyaWRMaW5lcy5lbmQoKSwgcG9zaXRpb24pOwogICAgIGlm
IChmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiAhPSBncmlkTGluZXMuZW5kKCkpIHsKICAgICAgICAg
aWYgKCpmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiA+IHBvc2l0aW9uICYmIGZpcnN0TGluZUJlZm9y
ZVBvc2l0aW9uICE9IGdyaWRMaW5lcy5iZWdpbigpKQogICAgICAgICAgICAgLS1maXJzdExpbmVC
ZWZvcmVQb3NpdGlvbjsKQEAgLTMxNiw5ICszMTYsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8R3JpZFNw
YW4+IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlUm93U3RhcnRDb2x1bW5TdGFydE5hbWVk
RwogCiBzdGQ6OnVuaXF1ZV9wdHI8R3JpZFNwYW4+IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNv
bHZlUm93RW5kQ29sdW1uRW5kTmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9z
aXRpb24oY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlv
biwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYg
Z3JpZExpbmVzKQogewotICAgIEFTU0VSVChncmlkTGluZXMuc2l6ZSgpKTsKICAgICB1bnNpZ25l
ZCBmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb25JbmRleCA9IGdyaWRMaW5lcy5zaXplKCkg
LSAxOwotICAgIGNvbnN0IHVuc2lnbmVkKiBmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb24g
PSBzdGQ6OnVwcGVyX2JvdW5kKGdyaWRMaW5lcy5iZWdpbigpLCBncmlkTGluZXMuZW5kKCksIHJl
c29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CisgICAgYXV0byBmaXJzdExpbmVBZnRlck9wcG9zaXRl
UG9zaXRpb24gPSBzdGQ6OnVwcGVyX2JvdW5kKGdyaWRMaW5lcy5iZWdpbigpLCBncmlkTGluZXMu
ZW5kKCksIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CiAgICAgaWYgKGZpcnN0TGluZUFmdGVy
T3Bwb3NpdGVQb3NpdGlvbiAhPSBncmlkTGluZXMuZW5kKCkpCiAgICAgICAgIGZpcnN0TGluZUFm
dGVyT3Bwb3NpdGVQb3NpdGlvbkluZGV4ID0gZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9u
IC0gZ3JpZExpbmVzLmJlZ2luKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGb250RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3Bw
CmluZGV4IGMzM2ZmYjc3YjZkOGY5OTU3YjEyNmYxYmYzOTE3YTg1N2ZkZmI1MGUuLmEwYmY1MDE5
MWI2YWI5NTgxNjE4ZDk1M2MwODkwZDIxMmViN2IzNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zv
bnRFbGVtZW50LmNwcApAQCAtMjUyLDMxICsyNTIsMzEgQEAgc3RhdGljIGlubGluZSBmbG9hdCBr
ZXJuaW5nRm9yUGFpck9mU3RyaW5nc0FuZEdseXBocyhjb25zdCBTVkdLZXJuaW5nTWFwJiBrZXJu
aW4KIHsKICAgICBpZiAoIWcxLmlzRW1wdHkoKSAmJiBrZXJuaW5nTWFwLmdseXBoTWFwLmNvbnRh
aW5zKGcxKSkgewogICAgICAgICBTVkdLZXJuaW5nVmVjdG9yKiBrZXJuaW5nVmVjdG9yID0ga2Vy
bmluZ01hcC5nbHlwaE1hcC5nZXQoZzEpOwotICAgICAgICBTVkdLZXJuaW5nVmVjdG9yOjpjb25z
dF9pdGVyYXRvciBpdCA9IGtlcm5pbmdWZWN0b3ItPmVuZCgpIC0gMTsKLSAgICAgICAgY29uc3Qg
U1ZHS2VybmluZ1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBrZXJuaW5nVmVjdG9yLT5i
ZWdpbigpIC0gMTsKLSAgICAgICAgZm9yICg7IGl0ICE9IGJlZ2luOyAtLWl0KSB7Ci0gICAgICAg
ICAgICBpZiAobWF0Y2hlcyh1MiwgZzIsICppdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGl0
LT5rZXJuaW5nOworICAgICAgICBzaXplX3QgaXQgPSBrZXJuaW5nVmVjdG9yLT5zaXplKCk7Cisg
ICAgICAgIHdoaWxlIChpdC0tID4gMCkgeworICAgICAgICAgICAgYXV0byYgdmFsdWUgPSBrZXJu
aW5nVmVjdG9yLT5hdChpdCk7CisgICAgICAgICAgICBpZiAobWF0Y2hlcyh1MiwgZzIsIHZhbHVl
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUua2VybmluZzsKICAgICAgICAgfQogICAg
IH0KIAogICAgIGlmICghdTEuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChrZXJuaW5nTWFwLnVu
aWNvZGVNYXAuY29udGFpbnModTEpKSB7CiAgICAgICAgICAgICBTVkdLZXJuaW5nVmVjdG9yKiBr
ZXJuaW5nVmVjdG9yID0ga2VybmluZ01hcC51bmljb2RlTWFwLmdldCh1MSk7Ci0gICAgICAgICAg
ICBTVkdLZXJuaW5nVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGtlcm5pbmdWZWN0b3ItPmVu
ZCgpIC0gMTsKLSAgICAgICAgICAgIGNvbnN0IFNWR0tlcm5pbmdWZWN0b3I6OmNvbnN0X2l0ZXJh
dG9yIGJlZ2luID0ga2VybmluZ1ZlY3Rvci0+YmVnaW4oKSAtIDE7Ci0gICAgICAgICAgICBmb3Ig
KDsgaXQgIT0gYmVnaW47IC0taXQpIHsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyh1Miwg
ZzIsICppdCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdC0+a2VybmluZzsKKyAgICAg
ICAgICAgIHNpemVfdCBpdCA9IGtlcm5pbmdWZWN0b3ItPnNpemUoKTsKKyAgICAgICAgICAgIHdo
aWxlIChpdC0tID4gMCkgeworICAgICAgICAgICAgICAgIGF1dG8mIHZhbHVlID0ga2VybmluZ1Zl
Y3Rvci0+YXQoaXQpOworICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzKHUyLCBnMiwgdmFsdWUp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUua2VybmluZzsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICgha2VybmluZ01hcC5rZXJuaW5nVW5pY29kZVJh
bmdlTWFwLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgVmVjdG9yPFNWR0tlcm5pbmdQYWlyPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VNYXAuZW5k
KCkgLSAxOwotICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0tlcm5pbmdQYWlyPjo6Y29uc3Rf
aXRlcmF0b3IgYmVnaW4gPSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VNYXAuYmVnaW4o
KSAtIDE7Ci0gICAgICAgICAgICBmb3IgKDsgaXQgIT0gYmVnaW47IC0taXQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobWF0Y2hlcyh1MSwgdTIsIGcyLCAqaXQpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gaXQtPmtlcm5pbmc7CisgICAgICAgICAgICBzaXplX3QgaXQgPSBrZXJuaW5nTWFw
Lmtlcm5pbmdVbmljb2RlUmFuZ2VNYXAuc2l6ZSgpOworICAgICAgICAgICAgd2hpbGUgKGl0LS0g
PiAwKSB7CisgICAgICAgICAgICAgICAgYXV0byYgdmFsdWUgPSBrZXJuaW5nTWFwLmtlcm5pbmdV
bmljb2RlUmFuZ2VNYXBbaXRdOworICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzKHUxLCB1Miwg
ZzIsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmtlcm5pbmc7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0
ZVN0cmVhbS5oCmluZGV4IDlkOWQyYTJiMjNjNjAwZmViYjUzNDBjYmNkZDFiNjFkZGMzYjlmMTUu
LmI5OTk1NTQ5NDM5YWM5NjRhYjNlNjdhMzBmMGQ4OWQ4YzM1OGFjYTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oCkBAIC02MCw4ICs2MCw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIGFwcGVuZCh1bnNpZ25lZCBjaGFyIGJ5dGUpIHsgbV9kYXRhLmFwcGVuZChieXRlKTsgfQog
ICAgIHZvaWQgYXBwZW5kKFNWR1BhdGhCeXRlU3RyZWFtKiBvdGhlcikKICAgICB7Ci0gICAgICAg
IGZvciAoRGF0YUl0ZXJhdG9yIGl0ID0gb3RoZXItPmJlZ2luKCk7IGl0ICE9IG90aGVyLT5lbmQo
KTsgKytpdCkKLSAgICAgICAgICAgIGFwcGVuZCgqaXQpOworICAgICAgICBmb3IgKGF1dG8mIGJ5
dGUgOiAqb3RoZXIpCisgICAgICAgICAgICBhcHBlbmQoYnl0ZSk7CiAgICAgfQogICAgIHZvaWQg
Y2xlYXIoKSB7IG1fZGF0YS5jbGVhcigpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gIW1fZGF0YS5zaXplKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9Y
UGF0aE5vZGVTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQuaAppbmRleCAz
ZDg5YjhkNTA4N2E4NmNmZWFmZmMwMTQwYjY5NDc2MmMwOTVkZGRmLi5kYWYyYjkzZDUxYjVhZjZi
NzM0ZjVmOWE3NjU0MTM2OWUwNDE0YTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwv
WFBhdGhOb2RlU2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9kZVNldC5oCkBA
IC02NCw4ICs2NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHZvaWQgbWFy
a1N1YnRyZWVzRGlzam9pbnQoYm9vbCBkaXNqb2ludCkgeyBtX3N1YnRyZWVzQXJlRGlzam9pbnQg
PSBkaXNqb2ludDsgfQogICAgICAgICAgICAgYm9vbCBzdWJ0cmVlc0FyZURpc2pvaW50KCkgY29u
c3QgeyByZXR1cm4gbV9zdWJ0cmVlc0FyZURpc2pvaW50IHx8IG1fbm9kZXMuc2l6ZSgpIDwgMjsg
fQogCi0gICAgICAgICAgICBjb25zdCBSZWZQdHI8Tm9kZT4qIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9ub2Rlcy5iZWdpbigpOyB9Ci0gICAgICAgICAgICBjb25zdCBSZWZQdHI8Tm9kZT4qIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuZW5kKCk7IH0KKyAgICAgICAgICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8Tm9kZT4+OjppdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbm9k
ZXMuYmVnaW4oKTsgfQorICAgICAgICAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPj46Oml0
ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuZW5kKCk7IH0KIAogICAgICAgICBw
cml2YXRlOgogICAgICAgICAgICAgdm9pZCB0cmF2ZXJzYWxTb3J0KCkgY29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242506</attachid>
            <date>2014-12-03 11:13:19 -0800</date>
            <delta_ts>2014-12-03 11:58:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138821-20141203111351.patch</filename>
            <type>text/plain</type>
            <size>64862</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2NzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MTkwODZjMTlkYTVkNzNjZTRiM2M4N2U4YTdmNWM0MmNmNGNlMTVlLi5kMzg4NzI4ZDJiNmM3NDNh
YjU1MmQ2OTVkZjJlYzFlNDBhNzcyMWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMyBAQAorMjAxNC0xMi0wMyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3Rp
bGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgY29kZSB0byBkZWFsIHdpdGggc2xpZ2h0bHkgY2hh
bmdlZCBpdGVyYXRvciBzZW1hbnRpY3MuCisKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxk
cmVuKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbnRKdW1wKToKKyAgICAgICAgKiBmdGwvRlRMQWJicmV2
aWF0aW9ucy5oOgorICAgICAgICAoSlNDOjpGVEw6Om1kTm9kZSk6CisgICAgICAgIChKU0M6OkZU
TDo6YnVpbGRDYWxsKToKKyAgICAgICAgKiBsbGludC9MTEludERhdGEuY3BwOgorICAgICAgICAo
SlNDOjpMTEludDo6RGF0YTo6cGVyZm9ybUFzc2VydGlvbnMpOgorICAgICAgICAqIHBhcnNlci9Q
YXJzZXIuaDoKKyAgICAgICAgKEpTQzo6U2NvcGU6OlNjb3BlKToKKyAgICAgICAgKiBydW50aW1l
L0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3Rvcik6Cisg
ICAgICAgICogdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2ZpbGVU
cmVlTm9kZTo6ZHVtcEludGVybmFsKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAg
ICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjptYXRjaENoYXJhY3RlckNsYXNzKToKKwog
MjAxNC0xMi0wMyAgWnNvbHQgQm9yYmVseSAgPHpzYm9yYmVseS51LXN6ZWdlZEBwYXJ0bmVyLnNh
bXN1bmcuY29tPgogCiAgICAgICAgIFJlbW92ZSB1bnVzZWQgSlNDIHJ1bnRpbWUgb3B0aW9ucwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpp
bmRleCAzNGE3NDMxN2JiMGYxN2MxY2U1ZjQ0M2UyMTBhNmJkYmQ3MWU4YjBhLi40NzdhMGQ3NDRk
NzM0MGJlMjRjODNmMzA0Y2Y4NWZiNWVkYmU1YzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDE0
LTEyLTAzICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBz
dXJlIHJhbmdlIGJhc2VkIGl0ZXJhdGlvbiBvZiBWZWN0b3I8PiBzdGlsbCByZWNlaXZlcyBib3Vu
ZHMgY2hlY2tpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzODgyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBhIG5ldyBJbmRleGVkSXRlcmF0b3Igc3RydWN0IHRvIFdURiB0aGF0IHdyYXBzIGEK
KyAgICAgICAgVmVjdG9yIHR5cGUgYW5kIGluZGV4IHRvIHByb3ZpZGUgcG9pbnRlciBsaWtlIHNl
bWFudGljcworICAgICAgICB3aGlsZSBzdGlsbCBwZXJmb3JtaW5nIHJ1bnRpbWUgYm91bmRzIGNo
ZWNraW5nLCBldmVuIGluCisgICAgICAgIHJlbGVhc2UgYnVpbGRzLiBXZSBzdG9yZSBhIHNpbXBs
ZSBpbmRleCBpbnRvIHRoZSB2ZWN0b3IKKyAgICAgICAgd2hpY2ggbWVhbnMgdGhhdCB0aGlzIGl0
ZXJhdG9yIGFsbG93cyB2ZWN0b3IgcmVzaXppbmcKKyAgICAgICAgZHVyaW5nIGl0ZXJhdGlvbi4g
SWYgdGhlIHZlY3RvciBpcyByZXNpemVkIHN1Y2ggdGhhdCB0aGUKKyAgICAgICAgaXRlcmF0b3Ig
aXMgb3V0IG9mIGJvdW5kcywgdGhlbiBhbnkgYXR0ZW1wdCB0byBkZXJlZmVyZW5jZQorICAgICAg
ICB0aGUgaXRlcmF0b3Igd2lsbCBjcmFzaCBzYWZlbHkuCisKKyAgICAgICAgRm9yIHRoZSBwdXJw
b3NlIG9mIHJldGFpbmluZyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudAorICAgICAgICBiZWhhdmlv
dXIsIHRoZSBpdGVyYXRvciBjYW4gYmUgbW92ZWQgdG8gbV9pbmRleCA9PSBzaXplKCkKKyAgICAg
ICAgYXMgdGhhdCBpcyB0aGUgc3RhbmRhcmQgImVuZCIgdGVybWluYXRvciBmb3IgdGhlc2UgdHlw
ZXMuCisgICAgICAgIEF0dGVtcHRpbmcgdG8gZGVyZWZlcmVuY2UgYXQgdGhhdCBwb2ludCB3aWxs
IHN0aWxsIGNyYXNoCisgICAgICAgIHJhdGhlciB0aGFuIHBlcmZvcm0gYW4gdW5zYWZlIG1lbW9y
eSBvcGVyYXRpb24uCisKKyAgICAgICAgQnkgbmVjZXNzaXR5IHRoZXJlIGFyZSBtYW55IG92ZXJy
aWRlcyBmb3Igb3BlcmF0b3IgKyBhbmQgLSBhcworICAgICAgICB3ZSBvdGhlcndpc2UgaGl0IG1h
bnkgZGlmZmVyZW50IHR5cGUgcHJvbW90aW9uIGFtYmlndWl0aWVzIHdoZW4KKyAgICAgICAgcGVy
Zm9ybWluZyBhcml0aG1ldGljIHdpdGggaXRlcmF0b3JzLiBUaGVzZSBhbWJpZ3VpdGllcyBhcmUg
YWxzbworICAgICAgICBkaWZmZXJlbnQgZm9yIDMyLSB2cy4gNjQtYml0LCBzbyBkdXBsaWNhdGlu
ZyB0aGUgZnVuY3Rpb25zCisgICAgICAgIGFuZCB0aGVuIGZvcndhcmRpbmcgdG8gdGhlIGNvcmUg
aW1wbGVtZW50YXRpb25zIHRoYXQgcGVyZm9ybWVkCisgICAgICAgIHRoZSBib3VuZHMgY2hlY2tp
bmcgYW5kIG11dGF0aW9uIHNlZW1lZCBsaWtlIHRoZSByaWdodCBjYWxsLgorCisgICAgICAgICog
V1RGLnZjeHByb2ovV1RGLnZjeHByb2o6CisgICAgICAgICogV1RGLnZjeHByb2ovV1RGLnZjeHBy
b2ouZmlsdGVyczoKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiB3dGYvSW5kZXhlZEl0ZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpJbmRl
eGVkSXRlcmF0b3I6OkluZGV4ZWRJdGVyYXRvcik6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVy
YXRvcjo6b3BlcmF0b3ItPik6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0
b3IqKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpnZXQpOgorICAgICAgICAoV1RG
OjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRl
cmF0b3I6Om9wZXJhdG9yLS0pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJh
dG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6
Om9wZXJhdG9yLSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3I9KToK
KyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdU
Rjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0
ZXJhdG9yOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJh
dG9yPD0pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPik6CisgICAg
ICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3I+PSk6CisgICAgICAgIChXVEY6Oklu
ZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IgY29uc3RfaXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpJ
bmRleGVkSXRlcmF0b3I6OnVuc2FmZUdldCk6CisgICAgICAgIChXVEY6OmdldFB0cik6CisgICAg
ICAgIChXVEY6Om9wZXJhdG9yLSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoV1RGOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6CisgICAgICAg
IChXVEY6Om9wZXJhdG9yPj0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcjwpOgorICAgICAgICAo
V1RGOjpvcGVyYXRvcj4pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3JTZWxlY3Rvcjo6
bWFrZUl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yU2VsZWN0b3I6Om1h
a2VDb25zdEl0ZXJhdG9yKToKKyAgICAgICAgKiB3dGYvUmVmQ291bnRlZEFycmF5Lmg6CisgICAg
ICAgIChXVEY6OlJlZkNvdW50ZWRBcnJheTo6UmVmQ291bnRlZEFycmF5KToKKyAgICAgICAgKiB3
dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6VmVjdG9yKToKKyAgICAgICAgKFdU
Rjo6VmVjdG9yOjpiZWdpbik6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6ZW5kKToKKyAgICAgICAg
KFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6PSk6CisgICAg
ICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OmZpbGwpOgorICAgICAgICAoV1RGOjpPdmVyZmxv
d0hhbmRsZXI+OjpleHBhbmRDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxl
cj46OnRyeUV4cGFuZENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6
cmVzaXplKToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6c2hyaW5rKToKKyAgICAg
ICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6Z3Jvdyk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93
SGFuZGxlcj46OnJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxl
cj46OnRyeVJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46
OnNocmlua0NhcGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5k
KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6dHJ5QXBwZW5kKToKKyAgICAgICAg
KFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kU2xvd0Nhc2UpOgorICAgICAgICAoV1RGOjpP
dmVyZmxvd0hhbmRsZXI+Ojp1bmNoZWNrZWRBcHBlbmQpOgorICAgICAgICAoV1RGOjpPdmVyZmxv
d0hhbmRsZXI+OjphcHBlbmRWZWN0b3IpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+
OjppbnNlcnQpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnRWZWN0b3Ip
OgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUpOgorCiAyMDE0LTEyLTAy
ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSb2xsaW5nIG91dCBy
MTc2NTkyLCByMTc2NjAzLCByMTc2NjE2LCBhbmQgcjE3NjcwNSB1bnRpbCBidWlsZCBhbmQgcGVy
ZiBpc3N1ZXMgYXJlIHJlc29sdmVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDQ5YTNhODQ5NDZmZWJhZGUyMWYz
MmYwYTk2M2FiMWEzMTlhZTgxMDguLjQ4NTdmZGU3Zjc3ODZlOGRlYWU4MTA2MDNiZGM5Y2Y5MWE5
NjUyNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAxNC0xMi0wMyAgT2xpdmVyIEh1
bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBp
dGVyYXRpb24gb2YgVmVjdG9yPD4gc3RpbGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgdG8gZGVh
bCB3aXRoIGRpZmZlcmVudCBpdGVyYXRvciB0eXBlLgorCisgICAgICAgICogYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJp
YWxpemVyOjpkZXNlcmlhbGl6ZVN0cmluZyk6CisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoQnVmZmVyOjppc0JhZE1hdGNoKToKKyAg
ICAgICAgKiBwYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tOgorICAgICAgICAo
V2ViQ29yZTo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGln
aHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZEZvbnREYXRhOjpmb250RGF0YUZvckNoYXJhY3Rl
cik6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkRm9udERhdGE6OmlzTG9hZGluZyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29udmVydFdPRkZUb1NmbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnBs
YXRmb3JtR3JhZGllbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9H
SUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpj
bGVhckZyYW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwYWludEZpbGxMYXllcnMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpmaXJzdE5hbWVkR3JpZExpbmVCZWZvcmVQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZVJvd0VuZENvbHVtbkVuZE5hbWVkR3Jp
ZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKToKKyAgICAgICAgKiBzdmcvU1ZH
Rm9udEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6a2VybmluZ0ZvclBhaXJPZlN0cmlu
Z3NBbmRHbHlwaHMpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW06OmFwcGVuZCk6CisgICAgICAgICogeG1sL1hQ
YXRoTm9kZVNldC5oOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Ok5vZGVTZXQ6OmJlZ2luKToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOb2RlU2V0OjplbmQpOgorCiAyMDE0LTEyLTAzICBK
ZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIEhhbmcgd2hl
biBjYWxsaW5nIC1bQVZBc3NldCByZXNvbHZlZFVSTF0uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAppbmRleCA2YzI5M2NjZjk4
ZDU2NzMyNmRjNDJmYWJkNWRmYTQxZDIzZjZjMmMxLi42MzVhY2QyY2JiMzhlNzhhNjA4M2I2MWU1
OGRiYTFiNDdjYjc5ZTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKQEAgLTIzNCw5ICsyMzQsOSBAQCB2b2lkIFVubGlu
a2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9zeW1ib2xUYWJsZSk7CiAgICAgZm9yIChG
dW5jdGlvbkV4cHJlc3Npb25WZWN0b3I6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPm1fZnVu
Y3Rpb25EZWNscy5iZWdpbigpLCBlbmQgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbHMuZW5k
KCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICB2aXNpdG9yLmFwcGVuZChwdHIpOworICAg
ICAgICB2aXNpdG9yLmFwcGVuZChXVEY6OmdldFB0cihwdHIpKTsKICAgICBmb3IgKEZ1bmN0aW9u
RXhwcmVzc2lvblZlY3Rvcjo6aXRlcmF0b3IgcHRyID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkV4
cHJzLmJlZ2luKCksIGVuZCA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25FeHBycy5lbmQoKTsgcHRy
ICE9IGVuZDsgKytwdHIpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0cik7CisgICAgICAgIHZp
c2l0b3IuYXBwZW5kKFdURjo6Z2V0UHRyKHB0cikpOwogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVz
KHRoaXNPYmplY3QtPm1fY29uc3RhbnRSZWdpc3RlcnMuZGF0YSgpLCB0aGlzT2JqZWN0LT5tX2Nv
bnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CiAgICAgaWYgKHRoaXNPYmplY3QtPm1fcmFyZURhdGEp
IHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIGVuZCA9IHRoaXNPYmplY3QtPm1fcmFyZURh
dGEtPm1fcmVnZXhwcy5zaXplKCk7IGkgIT0gZW5kOyBpKyspCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4
IDY2ZGUyYWZiZTBkMDA4MDA1MGExOWE4OGFjOWUxY2FkNTRlY2VkYjUuLmE4NWZiNTNmMGZkMDA2
ZDkxYjg3MDYwZTA0YWE2ZDIxYzlmYmM3NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0yMjcxLDgg
KzIyNzEsOCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleFBvcFNjb3BlcyhS
ZWdpc3RlcklEKiBzY29wZSwgQ29udHJvbEZsb3dDb250ZQogICAgICAgICAgICAgaW50IHRvcFNj
b3BlSW5kZXggPSAtMTsKICAgICAgICAgICAgIGludCBib3R0b21TY29wZUluZGV4ID0gLTE7CiAg
ICAgICAgICAgICBpZiAoZmxpcFNjb3BlcykgewotICAgICAgICAgICAgICAgIHRvcFNjb3BlSW5k
ZXggPSB0b3BTY29wZSAtIG1fc2NvcGVDb250ZXh0U3RhY2suYmVnaW4oKTsKLSAgICAgICAgICAg
ICAgICBib3R0b21TY29wZUluZGV4ID0gYm90dG9tU2NvcGUgLSBtX3Njb3BlQ29udGV4dFN0YWNr
LmJlZ2luKCk7CisgICAgICAgICAgICAgICAgdG9wU2NvcGVJbmRleCA9IHRvcFNjb3BlIC0gbV9z
Y29wZUNvbnRleHRTdGFjay5kYXRhKCk7CisgICAgICAgICAgICAgICAgYm90dG9tU2NvcGVJbmRl
eCA9IGJvdHRvbVNjb3BlIC0gbV9zY29wZUNvbnRleHRTdGFjay5kYXRhKCk7CiAgICAgICAgICAg
ICAgICAgc2F2ZWRTY29wZUNvbnRleHRTdGFjayA9IG1fc2NvcGVDb250ZXh0U3RhY2s7CiAgICAg
ICAgICAgICAgICAgbV9zY29wZUNvbnRleHRTdGFjay5zaHJpbmsoZmluYWxseUNvbnRleHQuc2Nv
cGVDb250ZXh0U3RhY2tTaXplKTsKICAgICAgICAgICAgIH0KQEAgLTIzMTYsNyArMjMxNiw3IEBA
IHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb21wbGV4UG9wU2NvcGVzKFJlZ2lzdGVySUQq
IHNjb3BlLCBDb250cm9sRmxvd0NvbnRlCiAgICAgICAgICAgICBpZiAoZmxpcFNjb3Blcykgewog
ICAgICAgICAgICAgICAgIG1fc2NvcGVDb250ZXh0U3RhY2sgPSBzYXZlZFNjb3BlQ29udGV4dFN0
YWNrOwogICAgICAgICAgICAgICAgIHRvcFNjb3BlID0gJm1fc2NvcGVDb250ZXh0U3RhY2tbdG9w
U2NvcGVJbmRleF07IC8vIGFzc2VydCBpdCdzIHdpdGhpbiBib3VuZHMKLSAgICAgICAgICAgICAg
ICBib3R0b21TY29wZSA9IG1fc2NvcGVDb250ZXh0U3RhY2suYmVnaW4oKSArIGJvdHRvbVNjb3Bl
SW5kZXg7IC8vIGRvbid0IGFzc2VydCwgc2luY2UgaXQgdGhlIGluZGV4IG1pZ2h0IGJlIC0xLgor
ICAgICAgICAgICAgICAgIGJvdHRvbVNjb3BlID0gbV9zY29wZUNvbnRleHRTdGFjay5kYXRhKCkg
KyBib3R0b21TY29wZUluZGV4OyAvLyBkb24ndCBhc3NlcnQsIHNpbmNlIGl0IHRoZSBpbmRleCBt
aWdodCBiZSAtMS4KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChmbGlwU3dpdGNoZXMp
CiAgICAgICAgICAgICAgICAgbV9zd2l0Y2hDb250ZXh0U3RhY2sgPSBzYXZlZFN3aXRjaENvbnRl
eHRTdGFjazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKaW5kZXggZjA3MjRkZjQ3MDM5NDliMzBkMjRlMzZhYTgyZTc3OGE1Y2I5YmY3My4uM2Jl
MThlYTZjNmNiN2YzNmY0OGUyMGI1OWY3MjNlY2M1MTRiOWQzZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTQ5MTAsNyArNDkxMCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbnRKdW1wKAogICAgIGFkZEJyYW5j
aCgKICAgICAgICAgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgdmFs
dWUsIEltbTMyKHRhYmxlLmN0aU9mZnNldHMuc2l6ZSgpKSksCiAgICAgICAgIGRhdGEtPmZhbGxU
aHJvdWdoLmJsb2NrKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIodGFibGUuY3RpT2Zm
c2V0cy5iZWdpbigpKSwgc2NyYXRjaCk7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHRh
YmxlLmN0aU9mZnNldHMuZGF0YSgpKSwgc2NyYXRjaCk7CiAgICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6QmFzZUluZGV4KHNjcmF0Y2gsIHZhbHVlLCBKSVRDb21waWxlcjo6dGltZXNQdHIo
KSksIHNjcmF0Y2gpOwogICAgIG1faml0Lmp1bXAoc2NyYXRjaCk7CiAgICAgZGF0YS0+ZGlkVXNl
SnVtcFRhYmxlID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQWJicmV2aWF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZp
YXRpb25zLmgKaW5kZXggZmM3Y2IxYjI1NDMyNjk0YWFlZThmYmYzMTUzZTZlMDhhODMzMmYzOS4u
N2IxYTFjZTdiMzgzN2U4MTRjYmEyYjNlY2MzYTA3YjAxOGQ5YWUzMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgKQEAgLTEyMCw3ICsxMjAsNyBAQCBz
dGF0aWMgaW5saW5lIExWYWx1ZSBtZFN0cmluZyhMQ29udGV4dCBjb250ZXh0LCBjb25zdCBjaGFy
KiBzdHJpbmcsIHVuc2lnbmVkIGxlbgogc3RhdGljIGlubGluZSBMVmFsdWUgbWRTdHJpbmcoTENv
bnRleHQgY29udGV4dCwgY29uc3QgY2hhciogc3RyaW5nKSB7IHJldHVybiBtZFN0cmluZyhjb250
ZXh0LCBzdHJpbmcsIHN0ZDo6c3RybGVuKHN0cmluZykpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1
ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwgTFZhbHVlKiBhcmdzLCB1bnNpZ25lZCBudW1Bcmdz
KSB7IHJldHVybiBsbHZtLT5NRE5vZGVJbkNvbnRleHQoY29udGV4dCwgYXJncywgbnVtQXJncyk7
IH0KIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBt
ZE5vZGUoTENvbnRleHQgY29udGV4dCwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKSB7IHJldHVy
biBtZE5vZGUoY29udGV4dCwgY29uc3RfY2FzdDxMVmFsdWUqPih2ZWN0b3IuYmVnaW4oKSksIHZl
Y3Rvci5zaXplKCkpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29u
dGV4dCwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKSB7IHJldHVybiBtZE5vZGUoY29udGV4dCwg
Y29uc3RfY2FzdDxMVmFsdWUqPih2ZWN0b3IuZGF0YSgpKSwgdmVjdG9yLnNpemUoKSk7IH0KIHN0
YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0KSB7IHJldHVybiBtZE5v
ZGUoY29udGV4dCwgMCwgMCk7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4
dCBjb250ZXh0LCBMVmFsdWUgYXJnMSkgeyByZXR1cm4gbWROb2RlKGNvbnRleHQsICZhcmcxLCAx
KTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQsIExWYWx1
ZSBhcmcxLCBMVmFsdWUgYXJnMikKQEAgLTI4OCw3ICsyODgsNyBAQCBzdGF0aWMgaW5saW5lIExW
YWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBM
VmFsdWUqCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPgogaW5saW5lIExWYWx1ZSBidWls
ZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBWZWN0b3JUeXBl
JiB2ZWN0b3IpCiB7Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgdmVj
dG9yLmJlZ2luKCksIHZlY3Rvci5zaXplKCkpOworICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRl
ciwgZnVuY3Rpb24sIHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCkpOwogfQogc3RhdGljIGlu
bGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbikK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKaW5kZXggNjkxOWFl
YWIwMGExYjI1YzQ3NWJiZjlkZDI1YzY4OGYwYWE1OGE3Mi4uNDRhZmNhNGNiYWQ4YjNlNTUzMzQx
MjlhYzljOWIwZGVmZDk1NjFlOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
RGF0YS5jcHAKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRpb25z
KFZNJiB2bSkKICAgICBWZWN0b3I8aW50PiB0ZXN0VmVjdG9yOwogICAgIHRlc3RWZWN0b3IucmVz
aXplKDQyKTsKICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnQzMl90Kj4oJnRlc3RWZWN0b3Ip
W3NpemVvZih2b2lkKikvc2l6ZW9mKHVpbnQzMl90KSArIDFdID09IDQyKTsKLSAgICBBU1NFUlQo
Yml0d2lzZV9jYXN0PGludCoqPigmdGVzdFZlY3RvcilbMF0gPT0gdGVzdFZlY3Rvci5iZWdpbigp
KTsKKyAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGludCoqPigmdGVzdFZlY3RvcilbMF0gPT0gdGVz
dFZlY3Rvci5kYXRhKCkpOwogI2VuZGlmCiAKICAgICBBU1NFUlQoU3RyaW5nSW1wbDo6c19oYXNo
RmxhZzhCaXRCdWZmZXIgPT0gMzIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgK
aW5kZXggNDUyZjcwNDZmMzAyMmQzODgxMDlhZWJkYzg0Mzg0ZTFhYTIyZmZhMS4uMDFmY2NkYjdl
MzhhYzVhNjAyMmM2OGM5N2I4ZDhlYjNiMGNlYzE4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5oCkBAIC0xMzAsMTEgKzEzMCw4IEBAIHN0cnVjdCBTY29wZSB7CiAgICAgewog
ICAgICAgICBpZiAocmhzLm1fbGFiZWxzKSB7CiAgICAgICAgICAgICBtX2xhYmVscyA9IGFkb3B0
UHRyKG5ldyBMYWJlbFN0YWNrKTsKLQotICAgICAgICAgICAgdHlwZWRlZiBMYWJlbFN0YWNrOjpj
b25zdF9pdGVyYXRvciBpdGVyYXRvcjsKLSAgICAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IHJocy5t
X2xhYmVscy0+ZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gcmhzLm1fbGFi
ZWxzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgbV9sYWJlbHMt
PmFwcGVuZChTY29wZUxhYmVsSW5mbyhpdC0+bV9pZGVudCwgaXQtPm1faXNMb29wKSk7CisgICAg
ICAgICAgICBmb3IgKGF1dG8gbGFiZWwgOiAqcmhzLm1fbGFiZWxzKQorICAgICAgICAgICAgICAg
IG1fbGFiZWxzLT5hcHBlbmQoU2NvcGVMYWJlbEluZm8obGFiZWwubV9pZGVudCwgbGFiZWwubV9p
c0xvb3ApKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmNwcAppbmRleCBjYzYzMDIxN2RmN2ZkMjVhZGU0YzRiYjM5ODU3NGQ2N2Q1YTc0
NTY5Li43OWNkNjdhNjc4MTdiZGRmYWVkZGYzYzUwNjg2YzQ4MmM5MjA0NTA3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcApAQCAtMzUyLDcgKzM1Miw3IEBAIGJv
b2wgSlNBcnJheTo6c2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIG5ld0xlbmd0aCwgYm9vCiAgICAgICAgICAgICAvLyBwcm9wZXJ0aWVzLCBzbyB3ZSBo
YXZlIHRvIHBlcmZvcm0gZGVsZXRpb24gd2l0aCBjYXV0aW9uLCBpZiBub3Qgd2UgY2FuCiAgICAg
ICAgICAgICAvLyBkZWxldGUgdmFsdWVzIGluIGFueSBvcmRlci4KICAgICAgICAgICAgIGlmICht
YXAtPnNwYXJzZU1vZGUoKSkgewotICAgICAgICAgICAgICAgIHFzb3J0KGtleXMuYmVnaW4oKSwg
a2V5cy5zaXplKCksIHNpemVvZih1bnNpZ25lZCksIGNvbXBhcmVLZXlzRm9yUVNvcnQpOworICAg
ICAgICAgICAgICAgIHFzb3J0KGtleXMuZGF0YSgpLCBrZXlzLnNpemUoKSwgc2l6ZW9mKHVuc2ln
bmVkKSwgY29tcGFyZUtleXNGb3JRU29ydCk7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaSA9
IGtleXMuc2l6ZSgpOwogICAgICAgICAgICAgICAgIHdoaWxlIChpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0ga2V5c1stLWldOwpAQCAtMTE5MSwxMyArMTE5MSwxMyBA
QCB2b2lkIEpTQXJyYXk6OnNvcnRDb21wYWN0ZWRWZWN0b3IoRXhlY1N0YXRlKiBleGVjLCBDb250
aWd1b3VzRGF0YTxTdG9yYWdlVHlwZT4gZAogICAgICAgICAKICNpZiBIQVZFKE1FUkdFU09SVCkK
ICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQotICAgICAgICBxc29ydCh2YWx1ZXMu
YmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVC
eVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAgICAgIHFzb3J0KHZhbHVlcy5kYXRhKCksIHZhbHVl
cy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9y
UVNvcnQpOwogICAgIGVsc2UKLSAgICAgICAgbWVyZ2Vzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1
ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZv
clFTb3J0KTsKKyAgICAgICAgbWVyZ2Vzb3J0KHZhbHVlcy5kYXRhKCksIHZhbHVlcy5zaXplKCks
IHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwog
I2Vsc2UKICAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5
IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgogICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90
IHNwZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3Jt
IGEgc3RhYmxlIHNvcnQuCi0gICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCks
IHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwor
ICAgIHFzb3J0KHZhbHVlcy5kYXRhKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmlu
Z1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2VuZGlmCiAgICAgCiAgICAg
Ly8gSWYgdGhlIHRvU3RyaW5nIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUgYXJy
YXkgb3IgdmVjdG9yIHN0b3JhZ2UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvUHJvZmlsZVRyZWVOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJv
ZmlsZVRyZWVOb2RlLmgKaW5kZXggODhkNTdmM2RkNGU3OTc2OWQxZDA2YzNhODU5MTAxYjU1NWM2
YTgzZi4uZGQzYzEyMWQwZWJiMTZlOGE1MjQ2MWZhYWNkYmJiNGQ5ODdkNzJiMiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaApAQCAtODYsNyArODYs
NyBAQCBwcml2YXRlOgogICAgICAgICBWZWN0b3I8TWFwRW50cnkqPiBlbnRyaWVzOwogICAgICAg
ICBmb3IgKE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLT5iZWdpbigpOyBpdCAhPSBtX2No
aWxkcmVuLT5lbmQoKTsgKytpdCkKICAgICAgICAgICAgIGVudHJpZXMuYXBwZW5kKCYqaXQpOwot
ICAgICAgICBxc29ydChlbnRyaWVzLmJlZ2luKCksIGVudHJpZXMuc2l6ZSgpLCBzaXplb2YoTWFw
RW50cnkqKSwgY29tcGFyZUVudHJpZXMpOworICAgICAgICBxc29ydChlbnRyaWVzLmRhdGEoKSwg
ZW50cmllcy5zaXplKCksIHNpemVvZihNYXBFbnRyeSopLCBjb21wYXJlRW50cmllcyk7CiAKICAg
ICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBjaGlsZHJlbiBpbiBzYW1wbGUtZnJlcXVlbmN5IG9y
ZGVyLgogICAgICAgICBmb3IgKHNpemVfdCBlID0gMDsgZSA8IGVudHJpZXMuc2l6ZSgpOyArK2Up
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKaW5kZXggZTNhM2E5MzJjZTdl
ZDczOGYxOTg2YjJiZjJiNzQzZTA0MjNhM2IyNS4uZDI2OGU1OWUxMmJiNGU4MzY4Y2UzOTIwNjg3
OGFjODE2MmUzYjQyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFy
ckpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKQEAg
LTIyMyw3ICsyMjMsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2Vt
YmxlciB7CiAgICAgICAgIGlmIChjaGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUoKSkgewogICAgICAg
ICAgICAgdW5zaWduZWQgbWF0Y2hJbmRleCA9IDA7CiAgICAgICAgICAgICBKdW1wTGlzdCBmYWls
dXJlczsKLSAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3NSYW5nZShjaGFyYWN0ZXIsIGZh
aWx1cmVzLCBtYXRjaERlc3QsIGNoYXJDbGFzcy0+bV9yYW5nZXMuYmVnaW4oKSwgY2hhckNsYXNz
LT5tX3Jhbmdlcy5zaXplKCksICZtYXRjaEluZGV4LCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5iZWdp
bigpLCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5zaXplKCkpOworICAgICAgICAgICAgbWF0Y2hDaGFy
YWN0ZXJDbGFzc1JhbmdlKGNoYXJhY3RlciwgZmFpbHVyZXMsIG1hdGNoRGVzdCwgY2hhckNsYXNz
LT5tX3Jhbmdlcy5kYXRhKCksIGNoYXJDbGFzcy0+bV9yYW5nZXMuc2l6ZSgpLCAmbWF0Y2hJbmRl
eCwgY2hhckNsYXNzLT5tX21hdGNoZXMuZGF0YSgpLCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5zaXpl
KCkpOwogICAgICAgICAgICAgd2hpbGUgKG1hdGNoSW5kZXggPCBjaGFyQ2xhc3MtPm1fbWF0Y2hl
cy5zaXplKCkpCiAgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChicmFuY2gzMihFcXVh
bCwgY2hhcmFjdGVyLCBJbW0zMigodW5zaWduZWQgc2hvcnQpY2hhckNsYXNzLT5tX21hdGNoZXNb
bWF0Y2hJbmRleCsrXSkpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYudmN4cHJvai9X
VEYudmN4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oKaW5kZXggOWY4
YTBhZDRmMDY5ZTQ4MGM4N2EyMDQ5MDBkNzI3YTQyNjNmZGNiZC4uZTBkZmEwNWViNWMzNTIxYjA0
ZmY4NjAwNzlmZTNjMGZhNjFlNjhiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYudmN4cHJv
ai9XVEYudmN4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCkBA
IC0yMTksNiArMjE5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxIYXNoVGFi
bGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxIYXNoVHJhaXRzLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSGV4TnVtYmVyLmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSW5kZXhlZEl0ZXJhdG9yLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlx3dGZcSXRlcmF0b3JBZGFwdG9ycy5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cd3RmXEl0ZXJhdG9yUmFuZ2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxMaXN0SGFzaFNldC5oIiAvPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9X
VEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL1dURi9XVEYudmN4cHJvai9X
VEYudmN4cHJvai5maWx0ZXJzCmluZGV4IDU5NTNhMGY0MmFmZDc1MDc2YmY5ODVkNTk4MzBkOWJl
Yzg2MzVmNzUuLjAxMDg5Y2I5MGJkYzUwMDRhNzBmMGQ0ODEyMjA3OTg4YTI0MjIyOGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVycworKysgYi9T
b3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMKQEAgLTQ2Nyw2ICs0Njcs
OSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEhleE51bWJlci5oIj4KICAgICAg
IDxGaWx0ZXI+d3RmPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlx3dGZcSW5kZXhlZEl0ZXJhdG9yLmgiPgorICAgICAgPEZpbHRlcj53dGY8L0Zp
bHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxJ
dGVyYXRvckFkYXB0b3JzLmgiPgogICAgICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4KICAgICA8L0Ns
SW5jbHVkZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDRj
NzczMGFlNzZkZDkyNGQ3MjhlNWUxYmMyZWQ4ODFmOTI2NGM4NWMuLmQyMjI4Y2E3NjQ4MjdhMzE3
OWFkNGU0NDQzYmExZmUwMTRiMTBiOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTAwLDYgKzEwMCw3IEBACiAJCUE3NDg3NDUyMTdBMEJEQUUwMEZBMDRD
QiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3NDg3NDRGMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJI
YXNoLmNwcCAqLzsgfTsKIAkJQTc0ODc0NTMxN0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rl
ckhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
NDg3NDUwMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmggKi87IH07CiAJCUE3
NDg3NDU0MTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJpbmdIYXNoRHVtcENvbnRleHQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NDg3NDUxMTdBMEJEQUUw
MEZBMDRDQiAvKiBTdHJpbmdIYXNoRHVtcENvbnRleHQuaCAqLzsgfTsKKwkJQTdEQzJGMDQxQTA5
QTIyRDAwNzJGNEUzIC8qIEluZGV4ZWRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEQzJGMDMxQTA5OURFMzAwNzJGNEUzIC8qIEluZGV4
ZWRJdGVyYXRvci5oICovOyB9OwogCQlBN0U2NDNDNjE3QzU0MjNCMDAzQkIxNkIgLyogQ29tcHJl
c3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTdFNjQzQzQxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXByZXNzaW9uLmNwcCAqLzsgfTsKIAkJQTdF
NjQzQzcxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXByZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0U2NDNDNTE3QzU0MjNCMDAzQkIxNkIgLyog
Q29tcHJlc3Npb24uaCAqLzsgfTsKIAkJQTg3NkRCRDgxNTE4MTZFNTAwREFEQjk1IC8qIFBsYXRm
b3JtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODc2
REJENzE1MTgxNkU1MDBEQURCOTUgLyogUGxhdGZvcm0uaCAqLzsgfTsKQEAgLTM5Myw2ICszOTQs
NyBAQAogCQlBNzQ4NzQ0RjE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaXhDaGFyYWN0ZXJIYXNoLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc0ODc0NTAxN0EwQkRBRTAwRkEwNENC
IC8qIFNpeENoYXJhY3Rlckhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2l4Q2hhcmFjdGVySGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzQ4NzQ1
MTE3QTBCREFFMDBGQTA0Q0IgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBN0RDMkYwMzFBMDk5REUzMDA3MkY0RTMgLyogSW5kZXhlZEl0
ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4ZWRJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBN0U2NDNDNDE3QzU0MjNCMDAzQkIxNkIgLyogQ29tcHJlc3Npb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcHJlc3Npb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0U2NDNDNTE3QzU0MjNCMDAzQkIxNkIg
LyogQ29tcHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcHJl
c3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg3NkRCRDcxNTE4MTZFNTAw
REFEQjk1IC8qIFBsYXRmb3JtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBs
YXRmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04OTgsNiArOTAwLDcgQEAK
IAkJCQk5NzRDRkM4RDE2QTRGMzI3MDA2RDU0MDQgLyogV2Vha1B0ci5oICovLAogCQkJCUE4QTQ3
MzdBMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmNwcCAqLywKIAkJCQlBOEE0NzM3
QjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oICovLAorCQkJCUE3REMyRjAzMUEw
OTlERTMwMDcyRjRFMyAvKiBJbmRleGVkSXRlcmF0b3IuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0g
d3RmOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTEwNzEsNiArMTA3NCw3IEBACiAJ
CQkJQThBNDczQUQxNTFBODI1QjAwNDEyM0ZGIC8qIGNhY2hlZC1wb3dlcnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4QTQ3NDVFMTUxQTgyNUIwMDQxMjNGRiAvKiBDaGFyYWN0ZXJOYW1lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOTQxNTFBODI1QjAwNDEyM0ZGIC8qIENoZWNrZWRBcml0
aG1ldGljLmggaW4gSGVhZGVycyAqLywKKwkJCQlBN0RDMkYwNDFBMDlBMjJEMDA3MkY0RTMgLyog
SW5kZXhlZEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM5NTE1MUE4MjVCMDA0
MTIzRkYgLyogQ2hlY2tlZEJvb2xlYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDVGMTUx
QTgyNUIwMDQxMjNGRiAvKiBDb2xsYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDNEVERTYx
Njk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRlci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9JbmRleGVkSXRlcmF0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL0lu
ZGV4ZWRJdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmYzQwNzZmMGMwNzVkY2Y0ODQ2YWRkMWM0N2Ew
ZGQ5YTZiNmExMTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9JbmRleGVkSXRl
cmF0b3IuaApAQCAtMCwwICsxLDM1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV1RGX0luZGV4ZWRJdGVyYXRvcl9oCisjZGVmaW5lIFdU
Rl9JbmRleGVkSXRlcmF0b3JfaAorCituYW1lc3BhY2UgV1RGIHsKKworI2RlZmluZSBJTkRFWEVE
X0lURVJBVE9SX09WRVJGTE9XKGNoZWNrKSBkbyB7XAorICAgIGlmICghKGNoZWNrKSlcCisgICAg
ICAgIE92ZXJmbG93SGFuZGxlcjo6b3ZlcmZsb3dlZCgpO1wKK30gd2hpbGUgKDApCisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBWZWN0b3JUeXBlLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXIgPSBDcmFzaE9uT3ZlcmZsb3c+IHN0cnVjdCBJbmRleGVkSXRlcmF0b3IgeworICAgIHR5
cGVkZWYgc3RydWN0IEluZGV4ZWRJdGVyYXRvcjxjb25zdCBWZWN0b3JUeXBlLCBjb25zdCBULCBP
dmVyZmxvd0hhbmRsZXI+IGNvbnN0X2l0ZXJhdG9yOworCisgICAgdHlwZWRlZiBUIFZhbHVlVHlw
ZTsKKyAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CisgICAgdHlwZWRlZiBW
YWx1ZVR5cGUgdmFsdWVfdHlwZTsKKyAgICB0eXBlZGVmIFZhbHVlVHlwZSogcG9pbnRlcjsKKyAg
ICB0eXBlZGVmIFZhbHVlVHlwZSYgcmVmZXJlbmNlOworICAgIHR5cGVkZWYgc3RkOjpiaWRpcmVj
dGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKworICAgIEluZGV4ZWRJdGVy
YXRvcigpCisgICAgICAgIDogbV92ZWN0b3IobnVsbHB0cikKKyAgICAgICAgLCBtX3Bvc2l0aW9u
KDApCisgICAgeworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvcihWZWN0b3JUeXBlJiB2ZWN0
b3IsIFZhbHVlVHlwZSogcG9zaXRpb24pCisgICAgICAgIDogbV92ZWN0b3IoJnZlY3RvcikKKyAg
ICAgICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uIC0gdmVjdG9yLmRhdGEoKSkKKyAgICB7CisgICAg
fQorCisgICAgSW5kZXhlZEl0ZXJhdG9yKGNvbnN0IEluZGV4ZWRJdGVyYXRvciYgb3RoZXIpCisg
ICAgICAgIDogbV92ZWN0b3Iob3RoZXIubV92ZWN0b3IpCisgICAgICAgICwgbV9wb3NpdGlvbihv
dGhlci5tX3Bvc2l0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBWYWx1ZVR5cGUqIG9wZXJhdG9y
LT4oKSBjb25zdCB7IHJldHVybiAmbV92ZWN0b3ItPmF0KG1fcG9zaXRpb24pOyB9CisgICAgVmFs
dWVUeXBlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci0+YXQobV9wb3NpdGlv
bik7IH0KKyAgICBWYWx1ZVR5cGUqIGdldCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1f
dmVjdG9yKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIElOREVYRURfSVRF
UkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA8PSBtX3ZlY3Rvci0+c2l6ZSgpKTsKKyAgICAgICAg
cmV0dXJuIG1fdmVjdG9yLT5kYXRhKCkgKyBtX3Bvc2l0aW9uOworICAgIH0KKworICAgIEluZGV4
ZWRJdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgeworICAgICAgICBtX3Bvc2l0aW9uKys7Cisg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0
b3IrKyhpbnQpCisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsK
KyAgICAgICAgbV9wb3NpdGlvbisrOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIEluZGV4ZWRJdGVyYXRvciYgb3BlcmF0b3ItLSgpCisgICAgeworICAgICAgICBtX3Bvc2l0
aW9uLS07CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0
b3Igb3BlcmF0b3ItLShpbnQpCisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0
KCp0aGlzKTsKKyAgICAgICAgbV9wb3NpdGlvbi0tOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQg
Y29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KKyAgICB0
eXBlZGVmIHNpemVfdCAoSW5kZXhlZEl0ZXJhdG9yOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7Cisg
ICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9y
ID8gJkluZGV4ZWRJdGVyYXRvcjo6bV9wb3NpdGlvbiA6IG51bGxwdHI7IH0KKworI2lmIF9fU0la
RU9GX1NJWkVfVF9fICE9IF9fU0laRU9GX0lOVF9fIHx8IFBMQVRGT1JNKENPQ09BKQorI2RlZmlu
ZSBfVU5TSUdORURfSWZfRElGRkVSRU5UKG1hY3JvKSBtYWNybyh1bnNpZ25lZCkKKyNlbHNlCisj
ZGVmaW5lIF9VTlNJR05FRF9JZl9ESUZGRVJFTlQobWFjcm8pCisjZW5kaWYKKworI2RlZmluZSBG
T1JfRUFDSF9JTlRFR0VSX1RZUEUobWFjcm8pIFwKKyAgICBtYWNybyhzaXplX3QpIFwKKyAgICBt
YWNybyhpbnQzMl90KSBcCisgICAgbWFjcm8obG9uZykgXAorICAgIG1hY3JvKGxvbmcgbG9uZykg
XAorICAgIG1hY3JvKHVuc2lnbmVkIGxvbmcgbG9uZykgXAorICAgIG1hY3JvKGxvbmcgbG9uZykg
XAorICAgIF9VTlNJR05FRF9JZl9ESUZGRVJFTlQobWFjcm8pCisKKyNkZWZpbmUgTU9ESUZJRVJf
T1BTKHR5cGUpIFwKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJhdG9yKz0odHlwZSBpbmNyZW1l
bnQpIFwKKyAgICB7IFwKKyAgICAgICAgbV9wb3NpdGlvbiArPSBpbmNyZW1lbnQ7IFwKKyAgICAg
ICAgcmV0dXJuICp0aGlzOyBcCisgICAgfSBcCitcCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVy
YXRvci09KHR5cGUgZGVjcmVtZW50KSBcCisgICAgeyBcCisgICAgICAgIG1fcG9zaXRpb24gLT0g
ZGVjcmVtZW50OyBcCisgICAgICAgIHJldHVybiAqdGhpczsgXAorICAgIH0KKworICAgIEZPUl9F
QUNIX0lOVEVHRVJfVFlQRShNT0RJRklFUl9PUFMpCisKKyN1bmRlZiBNT0RJRklFUl9PUFMKKwor
I2RlZmluZSBBUklUSE1FVElDX09QUyh0eXBlKSBcCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJh
dG9yKyh0eXBlIGluY3JlbWVudCkgY29uc3QgXAorICAgIHsgXAorICAgICAgICBJbmRleGVkSXRl
cmF0b3IgcmVzdWx0KCp0aGlzKTsgXAorICAgICAgICByZXN1bHQubV9wb3NpdGlvbiArPSBpbmNy
ZW1lbnQ7IFwKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgIH0gXAorXAorICAgIEluZGV4
ZWRJdGVyYXRvciBvcGVyYXRvci0odHlwZSBkZWNyZW1lbnQpIGNvbnN0IFwKKyAgICB7IFwKKyAg
ICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7IFwKKyAgICAgICAgcmVzdWx0Lm1f
cG9zaXRpb24gLT0gZGVjcmVtZW50OyBcCisgICAgICAgIHJldHVybiByZXN1bHQ7IFwKKyAgICB9
CisKKworICAgIEZPUl9FQUNIX0lOVEVHRVJfVFlQRShBUklUSE1FVElDX09QUykKKworI3VuZGVm
IEFSSVRITUVUSUNfT1BTCisKKyAgICBwdHJkaWZmX3Qgb3BlcmF0b3ItKGNvbnN0IGNvbnN0X2l0
ZXJhdG9yJiByaWdodCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Bvc2l0aW9uIC0g
cmlnaHQubV9wb3NpdGlvbjsKKyAgICB9CisKKyAgICBwdHJkaWZmX3Qgb3BlcmF0b3ItKGNvbnN0
IFZhbHVlVHlwZSogcmlnaHQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZ2V0KCkgLSBy
aWdodDsKKyAgICB9CisKKyAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBJbmRleGVkSXRlcmF0b3Im
IG90aGVyKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IgPSBvdGhlci5tX3ZlY3RvcjsKKyAgICAg
ICAgbV9wb3NpdGlvbiA9IG90aGVyLm1fcG9zaXRpb247CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiB1bnNhZmVHZXQoKSA9PSBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpICE9IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0K
KworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpID09IG90aGVyOworICAgIH0KKworICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHVuc2FmZUdldCgpICE9IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0
b3I8KGNvbnN0IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
dW5zYWZlR2V0KCkgPCBvdGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3Qg
VmFsdWVUeXBlKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQo
KSA8PSBvdGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBjb25zdF9pdGVy
YXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPCBv
dGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgY29u
c3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdl
dCgpIDw9IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+KGNv
bnN0IEluZGV4ZWRJdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
dW5zYWZlR2V0KCkgPiBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJh
dG9yPj0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHVuc2FmZUdldCgpID49IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJv
b2wgb3BlcmF0b3I+KGNvbnN0IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gdW5zYWZlR2V0KCkgPiBvdGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
Pj0oY29uc3QgVmFsdWVUeXBlKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1
bnNhZmVHZXQoKSA+PSBvdGhlcjsKKyAgICB9CisKKyAgICBvcGVyYXRvciBjb25zdF9pdGVyYXRv
cigpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdF9pdGVyYXRvciByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX3ZlY3RvciA9IG1fdmVjdG9yOworICAgICAgICByZXN1bHQubV9wb3NpdGlvbiA9
IG1fcG9zaXRpb247CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgVmVjdG9y
VHlwZSogbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fcG9zaXRpb247CisKKyAgICBWYWx1ZVR5cGUq
IHVuc2FmZUdldCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fdmVjdG9yKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBnZXQoKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXI+CitpbmxpbmUgdHlwZW5hbWUgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlw
ZSwgT3ZlcmZsb3dIYW5kbGVyPjo6VmFsdWVUeXBlKiBnZXRQdHIoSW5kZXhlZEl0ZXJhdG9yPFQs
IFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiBwKQoreworICAgIHJldHVybiBwLmdldCgpOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgcHRyZGlmZl90IG9wZXJhdG9yLShjb25zdCBWYWx1ZVR5
cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFu
ZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiBsZWZ0IC0gcmlnaHQuZ2V0KCk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4KK2lubGluZSBwdHJkaWZmX3Qgb3BlcmF0b3ItKFZhbHVlVHlwZSogbGVmdCwgY29u
c3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQp
Cit7CisgICAgcmV0dXJuIGxlZnQgLSByaWdodC5nZXQoKTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5s
aW5lIHB0cmRpZmZfdCBvcGVyYXRvci0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRl
eGVkSXRlcmF0b3I8Y29uc3QgVCwgY29uc3QgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiBy
aWdodCkKK3sKKyAgICByZXR1cm4gbGVmdCAtIHJpZ2h0LmdldCgpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+
CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0
ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0
dXJuIHJpZ2h0ID09IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBW
YWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVU
eXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPT0gbGVm
dDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShWYWx1ZVR5cGUqIGxl
ZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4m
IHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCAhPSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Citp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhl
ZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAg
cmV0dXJuIHJpZ2h0ICE9IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJh
dG9yPD0oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBl
LCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPj0gbGVmdDsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBWYWx1ZVR5cGUq
IGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxl
cj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA+PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+
CitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0
ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0
dXJuIHJpZ2h0IDw9IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBW
YWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9y
Pj0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVU
eXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPD0gbGVm
dDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I8KFZhbHVlVHlwZSogbGVm
dCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYg
cmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID4gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5s
aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0
ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0
dXJuIHJpZ2h0ID4gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZh
bHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I+
KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3Zl
cmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0IDwgbGVmdDsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFZhbHVlVHlwZSogbGVmdCwg
Y29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmln
aHQpCit7CisgICAgcmV0dXJuIHJpZ2h0IDwgbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFZlY3RvclR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gc3RydWN0IEluZGV4ZWRJdGVy
YXRvclNlbGVjdG9yIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFZlY3RvclR5cGU6OlZhbHVlVHlw
ZSBWYWx1ZVR5cGU7CisgICAgdHlwZWRlZiBJbmRleGVkSXRlcmF0b3I8VmVjdG9yVHlwZSwgVmFs
dWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+IGl0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3I6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHN0YXRpYyBpdGVy
YXRvciBtYWtlSXRlcmF0b3IoVmVjdG9yVHlwZSYgdmVjdG9yLCBWYWx1ZVR5cGUqIHApIHsgcmV0
dXJuIGl0ZXJhdG9yKHZlY3RvciwgcCk7IH0KKyAgICBzdGF0aWMgY29uc3RfaXRlcmF0b3IgbWFr
ZUNvbnN0SXRlcmF0b3IoY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yLCBjb25zdCBWYWx1ZVR5cGUq
IHApIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHZlY3RvciwgcCk7IH0KK307CisKKyN1bmRlZiBJ
TkRFWEVEX0lURVJBVE9SX09WRVJGTE9XCisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaCBiL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRB
cnJheS5oCmluZGV4IGE1NWQ3YWVlYWI4NGI5YzQ5NTE5NmU4ZTIzMGExZGMxNzg1MTkzYWIuLjgx
MWU5ZmZjZWEzMzdhNmM3ZDhiMjkxNjMwZTJhZmRmOGU1NjYzOTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50
ZWRBcnJheS5oCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICAgICAgSGVhZGVyOjpmcm9t
UGF5bG9hZChtX2RhdGEpLT5yZWZDb3VudCA9IDE7CiAgICAgICAgIEhlYWRlcjo6ZnJvbVBheWxv
YWQobV9kYXRhKS0+bGVuZ3RoID0gb3RoZXIuc2l6ZSgpOwogICAgICAgICBBU1NFUlQoSGVhZGVy
Ojpmcm9tUGF5bG9hZChtX2RhdGEpLT5sZW5ndGggPT0gb3RoZXIuc2l6ZSgpKTsKLSAgICAgICAg
VmVjdG9yVHlwZU9wZXJhdGlvbnM8VD46OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCks
IG90aGVyLmVuZCgpLCBtX2RhdGEpOworICAgICAgICBWZWN0b3JUeXBlT3BlcmF0aW9uczxUPjo6
dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuZW5k
KCkpLCBtX2RhdGEpOwogICAgIH0KICAgICAKICAgICBSZWZDb3VudGVkQXJyYXkmIG9wZXJhdG9y
PShjb25zdCBSZWZDb3VudGVkQXJyYXkmIG90aGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvVmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAppbmRleCAyNzQ1NjhhNjkxYzY0
YTAzNDIzYTRmMmI3MzQ4NzdlNjIwNzJkOTFlLi40YWFhNDhhYzI0YTQyZmU5OWE4MDhlYTdiMWVk
MmI4ZDA4MjJjMDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9WZWN0b3IuaApAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgPHV0aWxp
dHk+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL0luZGV4
ZWRJdGVyYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4KICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC01NTQsMTQg
KzU1NiwxNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9
IDAsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciA9IENyYQogY2xhc3MgVmVjdG9yIDogcHJpdmF0
ZSBWZWN0b3JCdWZmZXI8VCwgaW5saW5lQ2FwYWNpdHk+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHByaXZhdGU6CisKICAgICB0eXBlZGVmIFZlY3RvckJ1ZmZlcjxULCBpbmxpbmVD
YXBhY2l0eT4gQmFzZTsKICAgICB0eXBlZGVmIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+IFR5cGVP
cGVyYXRpb25zOworICAgIHR5cGVkZWYgSW5kZXhlZEl0ZXJhdG9yU2VsZWN0b3I8VmVjdG9yLCBP
dmVyZmxvd0hhbmRsZXI+IEl0ZXJhdG9yU2VsZWN0b3I7CiAKIHB1YmxpYzoKICAgICB0eXBlZGVm
IFQgVmFsdWVUeXBlOwogCi0gICAgdHlwZWRlZiBUKiBpdGVyYXRvcjsKLSAgICB0eXBlZGVmIGNv
bnN0IFQqIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgSXRlcmF0b3JTZWxl
Y3Rvcjo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBJdGVyYXRvclNl
bGVjdG9yOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKwogICAgIHR5cGVkZWYgc3Rk
OjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwogICAgIHR5cGVk
ZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yOwogCkBAIC01NzQsMTQgKzU3OSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIDogQmFzZShz
aXplLCBzaXplKQogICAgIHsKICAgICAgICAgaWYgKGJlZ2luKCkpCi0gICAgICAgICAgICBUeXBl
T3BlcmF0aW9uczo6aW5pdGlhbGl6ZShiZWdpbigpLCBlbmQoKSk7CisgICAgICAgICAgICBUeXBl
T3BlcmF0aW9uczo6aW5pdGlhbGl6ZShnZXRQdHIoYmVnaW4oKSksIGdldFB0cihlbmQoKSkpOwog
ICAgIH0KIAogICAgIFZlY3Rvcih1bnNpZ25lZCBzaXplLCBjb25zdCBUJiB2YWwpCiAgICAgICAg
IDogQmFzZShzaXplLCBzaXplKQogICAgIHsKICAgICAgICAgaWYgKGJlZ2luKCkpCi0gICAgICAg
ICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZEZpbGwoYmVnaW4oKSwgZW5kKCksIHZh
bCk7CisgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZEZpbGwoZ2V0UHRy
KGJlZ2luKCkpLCBnZXRQdHIoZW5kKCkpLCB2YWwpOwogICAgIH0KIAogICAgIFZlY3RvcihzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8VD4gaW5pdGlhbGl6ZXJMaXN0KQpAQCAtNjQ1LDEwICs2NTAsMTAg
QEAgcHVibGljOgogICAgIGNvbnN0IFQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBCYXNlOjpidWZm
ZXIoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgZGF0YU1lbW9yeU9mZnNldCgpIHsgcmV0dXJu
IEJhc2U6OmJ1ZmZlck1lbW9yeU9mZnNldCgpOyB9CiAKLSAgICBpdGVyYXRvciBiZWdpbigpIHsg
cmV0dXJuIGRhdGEoKTsgfQotICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGJlZ2luKCkgKyBt
X3NpemU7IH0KLSAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGRhdGEo
KTsgfQotICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgKyBt
X3NpemU7IH0KKyAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIEl0ZXJhdG9yU2VsZWN0b3I6
Om1ha2VJdGVyYXRvcigqdGhpcywgZGF0YSgpKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0
dXJuIGJlZ2luKCkgKyBzaXplKCk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIEl0ZXJhdG9yU2VsZWN0b3I6Om1ha2VDb25zdEl0ZXJhdG9yKCp0aGlzLCBkYXRh
KCkpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSAr
IHNpemUoKTsgfQogCiAgICAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZl
cnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogICAgIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0
dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KQEAgLTY4Myw2ICs2ODgsNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGNsZWFyKCkgeyBzaHJpbmtDYXBhY2l0eSgwKTsgfQogCisgICAgdm9p
ZCBhcHBlbmQoY29uc3RfaXRlcmF0b3IsIHVuc2lnbmVkKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiB2b2lkIGFwcGVuZChjb25zdCBVKiwgdW5zaWduZWQpOwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IHZvaWQgYXBwZW5kKFUmJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCB1
bmNoZWNrZWRBcHBlbmQoVSYmIHZhbCk7CkBAIC03NDYsNyArNzUyLDcgQEAgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpWZWN0b3IoY29uc3QgVmVjdG9yJiBvdGhl
cikKICAgICA6IEJhc2Uob3RoZXIuY2FwYWNpdHkoKSwgb3RoZXIuc2l6ZSgpKQogewogICAgIGlm
IChiZWdpbigpKQotICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkob3Ro
ZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCksIGJlZ2luKCkpOworICAgICAgICBUeXBlT3BlcmF0aW9u
czo6dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIu
ZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNp
Z25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgpAQCAtNzU1LDcg
Kzc2MSw3IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6VmVj
dG9yKGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFjaXR5CiAgICAgOiBCYXNlKG90aGVyLmNhcGFj
aXR5KCksIG90aGVyLnNpemUoKSkKIHsKICAgICBpZiAoYmVnaW4oKSkKLSAgICAgICAgVHlwZU9w
ZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpLCBi
ZWdpbigpKTsKKyAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KGdldFB0
cihvdGhlci5iZWdpbigpKSwgZ2V0UHRyKG90aGVyLmVuZCgpKSwgZ2V0UHRyKGJlZ2luKCkpKTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlcj4KQEAgLTc3Miw4ICs3NzgsOCBAQCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj4mIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYQogICAgICAgICBBU1NFUlQoYmVnaW4oKSk7CiAgICAgfQogICAgIAotICAgIHN0ZDo6
Y29weShvdGhlci5iZWdpbigpLCBvdGhlci5iZWdpbigpICsgc2l6ZSgpLCBiZWdpbigpKTsKLSAg
ICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSArIHNpemUo
KSwgb3RoZXIuZW5kKCksIGVuZCgpKTsKKyAgICBzdGQ6OmNvcHkoZ2V0UHRyKG90aGVyLmJlZ2lu
KCkpLCBnZXRQdHIob3RoZXIuYmVnaW4oKSArIHNpemUoKSksIGdldFB0cihiZWdpbigpKSk7Cisg
ICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KGdldFB0cihvdGhlci5iZWdpbigp
ICsgc2l6ZSgpKSwgZ2V0UHRyKG90aGVyLmVuZCgpKSwgZ2V0UHRyKGVuZCgpKSk7CiAgICAgbV9z
aXplID0gb3RoZXIuc2l6ZSgpOwogCiAgICAgcmV0dXJuICp0aGlzOwpAQCAtNzk3LDkgKzgwMyw5
IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPiYgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhCiAgICAgICAgIHJlc2VydmVDYXBhY2l0eShvdGhl
ci5zaXplKCkpOwogICAgICAgICBBU1NFUlQoYmVnaW4oKSk7CiAgICAgfQotICAgIAotICAgIHN0
ZDo6Y29weShvdGhlci5iZWdpbigpLCBvdGhlci5iZWdpbigpICsgc2l6ZSgpLCBiZWdpbigpKTsK
LSAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSArIHNp
emUoKSwgb3RoZXIuZW5kKCksIGVuZCgpKTsKKworICAgIHN0ZDo6Y29weShnZXRQdHIob3RoZXIu
YmVnaW4oKSksIGdldFB0cihvdGhlci5iZWdpbigpICsgc2l6ZSgpKSwgZ2V0UHRyKGJlZ2luKCkp
KTsKKyAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90aGVyLmJl
Z2luKCkgKyBzaXplKCkpLCBnZXRQdHIob3RoZXIuZW5kKCkpLCBnZXRQdHIoZW5kKCkpKTsKICAg
ICBtX3NpemUgPSBvdGhlci5zaXplKCk7CiAKICAgICByZXR1cm4gKnRoaXM7CkBAIC04NTksOCAr
ODY1LDggQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46
OmZpbGwoY29uc3QgVCYgdmFsLCB1bnNpZ25lZCBuZXcKICAgICAgICAgQVNTRVJUKGJlZ2luKCkp
OwogICAgIH0KICAgICAKLSAgICBzdGQ6OmZpbGwoYmVnaW4oKSwgZW5kKCksIHZhbCk7Ci0gICAg
VHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRGaWxsKGVuZCgpLCBiZWdpbigpICsgbmV3U2l6
ZSwgdmFsKTsKKyAgICBzdGQ6OmZpbGwoZ2V0UHRyKGJlZ2luKCkpLCBnZXRQdHIoZW5kKCkpLCB2
YWwpOworICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkRmlsbChnZXRQdHIoZW5kKCkp
LCBnZXRQdHIoYmVnaW4oKSkgKyBuZXdTaXplLCB2YWwpOwogICAgIG1fc2l6ZSA9IG5ld1NpemU7
CiB9CiAKQEAgLTg4MSwxMyArODg3LDEzIEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXI+OjpleHBhbmRDYXBhY2l0eSh1bnNpZ25lZCBuZXdNaW5DCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyPgogVCogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+
OjpleHBhbmRDYXBhY2l0eSh1bnNpZ25lZCBuZXdNaW5DYXBhY2l0eSwgVCogcHRyKQogewotICAg
IGlmIChwdHIgPCBiZWdpbigpIHx8IHB0ciA+PSBlbmQoKSkgeworICAgIGlmIChwdHIgPCBnZXRQ
dHIoYmVnaW4oKSkgfHwgcHRyID49IGdldFB0cihlbmQoKSkpIHsKICAgICAgICAgZXhwYW5kQ2Fw
YWNpdHkobmV3TWluQ2FwYWNpdHkpOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KLSAgICB1
bnNpZ25lZCBpbmRleCA9IHB0ciAtIGJlZ2luKCk7CisgICAgdW5zaWduZWQgaW5kZXggPSBwdHIg
LSBnZXRQdHIoYmVnaW4oKSk7CiAgICAgZXhwYW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpOwot
ICAgIHJldHVybiBiZWdpbigpICsgaW5kZXg7CisgICAgcmV0dXJuIGdldFB0cihiZWdpbigpKSAr
IGluZGV4OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0
eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgpAQCAtODk5LDE1ICs5MDUsMTUgQEAgYm9vbCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnRyeUV4cGFuZENhcGFj
aXR5KHVuc2lnbmVkIG5ld00KIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNh
cGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CiBjb25zdCBUKiBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnRyeUV4cGFuZENhcGFjaXR5KHVuc2lnbmVk
IG5ld01pbkNhcGFjaXR5LCBjb25zdCBUKiBwdHIpCiB7Ci0gICAgaWYgKHB0ciA8IGJlZ2luKCkg
fHwgcHRyID49IGVuZCgpKSB7CisgICAgaWYgKHB0ciA8IGdldFB0cihiZWdpbigpKSB8fCBwdHIg
Pj0gZ2V0UHRyKGVuZCgpKSkgewogICAgICAgICBpZiAoIXRyeUV4cGFuZENhcGFjaXR5KG5ld01p
bkNhcGFjaXR5KSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gcHRyOwog
ICAgIH0KLSAgICB1bnNpZ25lZCBpbmRleCA9IHB0ciAtIGJlZ2luKCk7CisgICAgdW5zaWduZWQg
aW5kZXggPSBwdHIgLSBnZXRQdHIoYmVnaW4oKSk7CiAgICAgaWYgKCF0cnlFeHBhbmRDYXBhY2l0
eShuZXdNaW5DYXBhY2l0eSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBiZWdpbigp
ICsgaW5kZXg7CisgICAgcmV0dXJuIGdldFB0cihiZWdpbigpKSArIGluZGV4OwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgpAQCAtOTIxLDEyICs5MjcsMTIgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4KIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyPjo6cmVzaXplKHVuc2lnbmVkIHNpemUpCiB7CiAgICAgaWYgKHNpemUgPD0gbV9z
aXplKQotICAgICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QoYmVnaW4oKSArIHNpemUsIGVu
ZCgpKTsKKyAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0KGdldFB0cihiZWdpbigpKSAr
IHNpemUsIGdldFB0cihlbmQoKSkpOwogICAgIGVsc2UgewogICAgICAgICBpZiAoc2l6ZSA+IGNh
cGFjaXR5KCkpCiAgICAgICAgICAgICBleHBhbmRDYXBhY2l0eShzaXplKTsKICAgICAgICAgaWYg
KGJlZ2luKCkpCi0gICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShlbmQoKSwg
YmVnaW4oKSArIHNpemUpOworICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemUo
Z2V0UHRyKGVuZCgpKSwgZ2V0UHRyKGJlZ2luKCkpICsgc2l6ZSk7CiAgICAgfQogICAgIAogICAg
IG1fc2l6ZSA9IHNpemU7CkBAIC05NDMsNyArOTQ5LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIHZvaWQg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpzaHJpbmsodW5zaWdu
ZWQgc2l6ZSkKIHsKICAgICBBU1NFUlQoc2l6ZSA8PSBtX3NpemUpOwotICAgIFR5cGVPcGVyYXRp
b25zOjpkZXN0cnVjdChiZWdpbigpICsgc2l6ZSwgZW5kKCkpOworICAgIFR5cGVPcGVyYXRpb25z
OjpkZXN0cnVjdChnZXRQdHIoYmVnaW4oKSkgKyBzaXplLCBnZXRQdHIoZW5kKCkpKTsKICAgICBt
X3NpemUgPSBzaXplOwogfQogCkBAIC05NTQsNyArOTYwLDcgQEAgdm9pZCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46Omdyb3codW5zaWduZWQgc2l6ZSkKICAgICBp
ZiAoc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgIGV4cGFuZENhcGFjaXR5KHNpemUpOwogICAg
IGlmIChiZWdpbigpKQotICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShlbmQoKSwg
YmVnaW4oKSArIHNpemUpOworICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShnZXRQ
dHIoZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkgKyBzaXplKTsKICAgICBtX3NpemUgPSBzaXplOwog
fQogCkBAIC05NjMsMTEgKzk2OSwxMSBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyPjo6cmVzZXJ2ZUNhcGFjaXR5KHVuc2lnbmVkIG5ld0NhcAogewogICAg
IGlmIChuZXdDYXBhY2l0eSA8PSBjYXBhY2l0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgVCog
b2xkQnVmZmVyID0gYmVnaW4oKTsKLSAgICBUKiBvbGRFbmQgPSBlbmQoKTsKKyAgICBUKiBvbGRC
dWZmZXIgPSBnZXRQdHIoYmVnaW4oKSk7CisgICAgVCogb2xkRW5kID0gZ2V0UHRyKGVuZCgpKTsK
ICAgICBCYXNlOjphbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSk7CiAgICAgQVNTRVJUKGJlZ2lu
KCkpOwotICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBiZWdpbigp
KTsKKyAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShvbGRCdWZmZXIsIG9sZEVuZCwgZ2V0UHRyKGJl
Z2luKCkpKTsKICAgICBCYXNlOjpkZWFsbG9jYXRlQnVmZmVyKG9sZEJ1ZmZlcik7CiB9CiAKQEAg
LTk3NiwxMiArOTgyLDEyIEBAIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXI+Ojp0cnlSZXNlcnZlQ2FwYWNpdHkodW5zaWduZWQgbmV3CiB7CiAgICAgaWYgKG5l
d0NhcGFjaXR5IDw9IGNhcGFjaXR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIFQqIG9s
ZEJ1ZmZlciA9IGJlZ2luKCk7Ci0gICAgVCogb2xkRW5kID0gZW5kKCk7CisgICAgVCogb2xkQnVm
ZmVyID0gZ2V0UHRyKGJlZ2luKCkpOworICAgIFQqIG9sZEVuZCA9IGdldFB0cihlbmQoKSk7CiAg
ICAgaWYgKCFCYXNlOjp0cnlBbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBBU1NFUlQoYmVnaW4oKSk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6Om1v
dmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOworICAgIFR5cGVPcGVyYXRpb25zOjptb3Zl
KG9sZEJ1ZmZlciwgb2xkRW5kLCBnZXRQdHIoYmVnaW4oKSkpOwogICAgIEJhc2U6OmRlYWxsb2Nh
dGVCdWZmZXIob2xkQnVmZmVyKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEwMDQsMTcgKzEw
MTAsMTcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46
OnNocmlua0NhcGFjaXR5KHVuc2lnbmVkIG5ld0NhcGEKICAgICBpZiAobmV3Q2FwYWNpdHkgPCBz
aXplKCkpIAogICAgICAgICBzaHJpbmsobmV3Q2FwYWNpdHkpOwogCi0gICAgVCogb2xkQnVmZmVy
ID0gYmVnaW4oKTsKKyAgICBUKiBvbGRCdWZmZXIgPSBnZXRQdHIoYmVnaW4oKSk7CiAgICAgaWYg
KG5ld0NhcGFjaXR5ID4gMCkgewogICAgICAgICBpZiAoQmFzZTo6c2hvdWxkUmVhbGxvY2F0ZUJ1
ZmZlcihuZXdDYXBhY2l0eSkpIHsKICAgICAgICAgICAgIEJhc2U6OnJlYWxsb2NhdGVCdWZmZXIo
bmV3Q2FwYWNpdHkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
VCogb2xkRW5kID0gZW5kKCk7CisgICAgICAgIFQqIG9sZEVuZCA9IGdldFB0cihlbmQoKSk7CiAg
ICAgICAgIEJhc2U6OmFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKLSAgICAgICAgaWYgKGJl
Z2luKCkgIT0gb2xkQnVmZmVyKQotICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xk
QnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOworICAgICAgICBpZiAoZ2V0UHRyKGJlZ2luKCkpICE9
IG9sZEJ1ZmZlcikKKyAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwg
b2xkRW5kLCBnZXRQdHIoYmVnaW4oKSkpOwogICAgIH0KIAogICAgIEJhc2U6OmRlYWxsb2NhdGVC
dWZmZXIob2xkQnVmZmVyKTsKQEAgLTEwMzQsMTEgKzEwNDAsMTcgQEAgdm9pZCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmFwcGVuZChjb25zdCBVKiBkYXRhLCB1
bnNpZ25lZAogICAgIH0KICAgICBpZiAobmV3U2l6ZSA8IG1fc2l6ZSkKICAgICAgICAgQ1JBU0go
KTsKLSAgICBUKiBkZXN0ID0gZW5kKCk7CisgICAgVCogZGVzdCA9IGdldFB0cihlbmQoKSk7CiAg
ICAgVmVjdG9yQ29waWVyPHN0ZDo6aXNfdHJpdmlhbDxUPjo6dmFsdWUsIFU+Ojp1bmluaXRpYWxp
emVkQ29weShkYXRhLCAmZGF0YVtkYXRhU2l6ZV0sIGRlc3QpOwogICAgIG1fc2l6ZSA9IG5ld1Np
emU7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Cit2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kKGNvbnN0X2l0ZXJhdG9yIGRhdGEsIHVuc2lnbmVkIGRh
dGFTaXplKQoreworICAgIGFwcGVuZChnZXRQdHIoZGF0YSksIGRhdGFTaXplKTsKK30KKwogdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KIGJvb2wgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojp0cnlBcHBlbmQoY29uc3QgVSogZGF0YSwgdW5zaWdu
ZWQgZGF0YVNpemUpCiB7CkBAIC0xMDUxLDcgKzEwNjMsNyBAQCBib29sIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6dHJ5QXBwZW5kKGNvbnN0IFUqIGRhdGEsIHVu
c2lnbgogICAgIH0KICAgICBpZiAobmV3U2l6ZSA8IG1fc2l6ZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIFQqIGRlc3QgPSBlbmQoKTsKKyAgICBUKiBkZXN0ID0gZ2V0UHRyKGVuZCgpKTsK
ICAgICBWZWN0b3JDb3BpZXI8c3RkOjppc190cml2aWFsPFQ+Ojp2YWx1ZSwgVT46OnVuaW5pdGlh
bGl6ZWRDb3B5KGRhdGEsICZkYXRhW2RhdGFTaXplXSwgZGVzdCk7CiAgICAgbV9zaXplID0gbmV3
U2l6ZTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwNjEsNyArMTA3Myw3IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXI+IHRlbXBsYXRlCiBBTFdBWVNfSU5MSU5FIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmQoVSYmIHZhbHVlKQogewogICAgIGlmIChzaXplKCkg
IT0gY2FwYWNpdHkoKSkgewotICAgICAgICBuZXcgKE5vdE51bGwsIGVuZCgpKSBUKHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSkpOworICAgICAgICBuZXcgKE5vdE51bGwsIGdldFB0cihlbmQoKSkpIFQo
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CiAgICAgICAgICsrbV9zaXplOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtMTA3OCw3ICsxMDkwLDcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmFwcGVuZFNsb3dDYXNlKFUmJiB2YWx1ZSkKICAgICBw
dHIgPSBleHBhbmRDYXBhY2l0eShzaXplKCkgKyAxLCBwdHIpOwogICAgIEFTU0VSVChiZWdpbigp
KTsKIAotICAgIG5ldyAoTm90TnVsbCwgZW5kKCkpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsK
KyAgICBuZXcgKE5vdE51bGwsIGdldFB0cihlbmQoKSkpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIp
KTsKICAgICArK21fc2l6ZTsKIH0KIApAQCAtMTA5MSwxNCArMTEwMywxNCBAQCBpbmxpbmUgdm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnVuY2hlY2tlZEFw
cGVuZChVJiYgdmFsdQogICAgIEFTU0VSVChzaXplKCkgPCBjYXBhY2l0eSgpKTsKIAogICAgIGF1
dG8gcHRyID0gc3RkOjphZGRyZXNzb2YodmFsdWUpOwotICAgIG5ldyAoTm90TnVsbCwgZW5kKCkp
IFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKKyAgICBuZXcgKE5vdE51bGwsIGdldFB0cihlbmQo
KSkpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKICAgICArK21fc2l6ZTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUgVSwgdW5zaWduZWQgb3RoZXJDYXBhY2l0eT4KIGlu
bGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6YXBw
ZW5kVmVjdG9yKGNvbnN0IFZlY3RvcjxVLCBvdGhlckNhcGFjaXR5PiYgdmFsKQogewotICAgIGFw
cGVuZCh2YWwuYmVnaW4oKSwgdmFsLnNpemUoKSk7CisgICAgYXBwZW5kKGdldFB0cih2YWwuYmVn
aW4oKSksIHZhbC5zaXplKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBp
bmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgpAQCAtMTExMiw4ICsxMTI0LDggQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlcj46Omluc2VydCh1bnNpZ25lZCBwb3NpdGlvbiwgY29uc3QKICAgICB9
CiAgICAgaWYgKG5ld1NpemUgPCBtX3NpemUpCiAgICAgICAgIENSQVNIKCk7Ci0gICAgVCogc3Bv
dCA9IGJlZ2luKCkgKyBwb3NpdGlvbjsKLSAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBw
aW5nKHNwb3QsIGVuZCgpLCBzcG90ICsgZGF0YVNpemUpOworICAgIFQqIHNwb3QgPSBnZXRQdHIo
YmVnaW4oKSkgKyBwb3NpdGlvbjsKKyAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5n
KHNwb3QsIGdldFB0cihlbmQoKSksIHNwb3QgKyBkYXRhU2l6ZSk7CiAgICAgVmVjdG9yQ29waWVy
PHN0ZDo6aXNfdHJpdmlhbDxUPjo6dmFsdWUsIFU+Ojp1bmluaXRpYWxpemVkQ29weShkYXRhLCAm
ZGF0YVtkYXRhU2l6ZV0sIHNwb3QpOwogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiB9CkBAIC0xMTI5
LDggKzExNDEsOCBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlcj46Omluc2VydCh1bnNpZ25lZCBwb3NpdGlvbgogICAgICAgICBBU1NFUlQoYmVn
aW4oKSk7CiAgICAgfQogCi0gICAgVCogc3BvdCA9IGJlZ2luKCkgKyBwb3NpdGlvbjsKLSAgICBU
eXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGVuZCgpLCBzcG90ICsgMSk7Cisg
ICAgVCogc3BvdCA9IGdldFB0cihiZWdpbigpKSArIHBvc2l0aW9uOworICAgIFR5cGVPcGVyYXRp
b25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCwgZ2V0UHRyKGVuZCgpKSwgc3BvdCArIDEpOwogICAg
IG5ldyAoTm90TnVsbCwgc3BvdCkgVChzdGQ6OmZvcndhcmQ8VT4oKnB0cikpOwogICAgICsrbV9z
aXplOwogfQpAQCAtMTEzOCwxNiArMTE1MCwxNiBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46Omluc2VydCh1bnNpZ25lZCBwb3NpdGlvbgog
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUgVSwgdW5zaWduZWQgYz4KIGlubGluZSB2
b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6aW5zZXJ0VmVj
dG9yKHVuc2lnbmVkIHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8VSwgYz4mIHZhbCkKIHsKLSAgICBp
bnNlcnQocG9zaXRpb24sIHZhbC5iZWdpbigpLCB2YWwuc2l6ZSgpKTsKKyAgICBpbnNlcnQocG9z
aXRpb24sIGdldFB0cih2YWwuYmVnaW4oKSksIHZhbC5zaXplKCkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyPgogaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXI+OjpyZW1vdmUodW5zaWduZWQgcG9zaXRpb24pCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04ocG9zaXRpb24gPCBzaXplKCkpOwotICAgIFQqIHNwb3QgPSBiZWdpbigp
ICsgcG9zaXRpb247CisgICAgVCogc3BvdCA9IGdldFB0cihiZWdpbigpKSArIHBvc2l0aW9uOwog
ICAgIHNwb3QtPn5UKCk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90
ICsgMSwgZW5kKCksIHNwb3QpOworICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmco
c3BvdCArIDEsIGdldFB0cihlbmQoKSksIHNwb3QpOwogICAgIC0tbV9zaXplOwogfQogCkBAIC0x
MTU2LDEwICsxMTY4LDEwIEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlKHVuc2lnbmVkIHBvc2l0aW9uCiB7CiAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24gPD0gc2l6ZSgpKTsKICAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihwb3NpdGlvbiArIGxlbmd0aCA8PSBzaXplKCkp
OwotICAgIFQqIGJlZ2luU3BvdCA9IGJlZ2luKCkgKyBwb3NpdGlvbjsKKyAgICBUKiBiZWdpblNw
b3QgPSBnZXRQdHIoYmVnaW4oKSkgKyBwb3NpdGlvbjsKICAgICBUKiBlbmRTcG90ID0gYmVnaW5T
cG90ICsgbGVuZ3RoOwogICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChiZWdpblNwb3QsIGVu
ZFNwb3QpOyAKLSAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKGVuZFNwb3QsIGVu
ZCgpLCBiZWdpblNwb3QpOworICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoZW5k
U3BvdCwgZ2V0UHRyKGVuZCgpKSwgYmVnaW5TcG90KTsKICAgICBtX3NpemUgLT0gbGVuZ3RoOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAppbmRleCAwY2YwOWUxZjVlYzk4YTg1MTQ0Y2M3MjJkMmE2Y2M0YWU0ZjkzODk4
Li4zZWU4MDY4YTNhNzZhNGE0M2FjNjQzMjMyNzcyNjQzYzE2MTQ5ZDcxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAg
LTE0MzcsOCArMTQzNyw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChidWZmZXIuaXNF
bXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgICAgICBjb25zdCB1aW50
OF90KiBwdHIgPSBidWZmZXIuYmVnaW4oKTsKLSAgICAgICAgY29uc3QgdWludDhfdCogZW5kID0g
YnVmZmVyLmVuZCgpOworICAgICAgICBjb25zdCB1aW50OF90KiBwdHIgPSBnZXRQdHIoYnVmZmVy
LmJlZ2luKCkpOworICAgICAgICBjb25zdCB1aW50OF90KiBlbmQgPSBnZXRQdHIoYnVmZmVyLmVu
ZCgpKTsKICAgICAgICAgdWludDMyX3QgdmVyc2lvbjsKICAgICAgICAgaWYgKCFyZWFkTGl0dGxl
RW5kaWFuKHB0ciwgZW5kLCB2ZXJzaW9uKSB8fCB2ZXJzaW9uID4gQ3VycmVudFZlcnNpb24pCiAg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVy
YXRvci5jcHAKaW5kZXggMmQ5Yjc5ZTEzYWJmOTYwYTYxNGI5NmQyNzA2NjBlNWYzNWUzNDE3Zi4u
ZTkyZmIyZjc5MGJlNGM1YzE2NzZjNjk4YzViZTFiYTY1ZTFhNjkxZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMjA3MywxMSArMjA3MywxMSBAQCBpbmxpbmUg
Ym9vbCBTZWFyY2hCdWZmZXI6OmlzQmFkTWF0Y2goY29uc3QgVUNoYXIqIG1hdGNoLCBzaXplX3Qg
bWF0Y2hMZW5ndGgpIGNvbgogICAgIC8vIGNyZWF0aW5nIGEgbmV3IG9uZSBlYWNoIHRpbWUuCiAg
ICAgbm9ybWFsaXplQ2hhcmFjdGVycyhtYXRjaCwgbWF0Y2hMZW5ndGgsIG1fbm9ybWFsaXplZE1h
dGNoKTsKIAotICAgIGNvbnN0IFVDaGFyKiBhID0gbV9ub3JtYWxpemVkVGFyZ2V0LmJlZ2luKCk7
Ci0gICAgY29uc3QgVUNoYXIqIGFFbmQgPSBtX25vcm1hbGl6ZWRUYXJnZXQuZW5kKCk7CisgICAg
Y29uc3QgVUNoYXIqIGEgPSBnZXRQdHIobV9ub3JtYWxpemVkVGFyZ2V0LmJlZ2luKCkpOworICAg
IGNvbnN0IFVDaGFyKiBhRW5kID0gZ2V0UHRyKG1fbm9ybWFsaXplZFRhcmdldC5lbmQoKSk7CiAK
LSAgICBjb25zdCBVQ2hhciogYiA9IG1fbm9ybWFsaXplZE1hdGNoLmJlZ2luKCk7Ci0gICAgY29u
c3QgVUNoYXIqIGJFbmQgPSBtX25vcm1hbGl6ZWRNYXRjaC5lbmQoKTsKKyAgICBjb25zdCBVQ2hh
ciogYiA9IGdldFB0cihtX25vcm1hbGl6ZWRNYXRjaC5iZWdpbigpKTsKKyAgICBjb25zdCBVQ2hh
ciogYkVuZCA9IGdldFB0cihtX25vcm1hbGl6ZWRNYXRjaC5lbmQoKSk7CiAKICAgICB3aGlsZSAo
dHJ1ZSkgewogICAgICAgICAvLyBTa2lwIHJ1bnMgb2Ygbm9uLWthbmEtbGV0dGVyIGNoYXJhY3Rl
cnMuIFRoaXMgaXMgbmVjZXNzYXJ5IHNvIHdlIGNhbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KaW5kZXggZDUxY2E1OTlkOTUy
MjMyOGYzMjI4MTk2NzdlOWNhYzVlOTQ3MGZiMC4uNmNkMzRjZmY4OTI5Mzc0OTMzYTA3ZWRlZjRm
ZTkxODNlZjg5NTlhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCkBAIC01NDIsNyArNTQyLDcgQEAgdm9pZCBTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCgpCiAKICAgICAgICAg
aWYgKCFjZ1JlY3RzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQ0dSZWN0IHZpc2libGVSZWN0
ID0gbWFpbkZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICBSZXRh
aW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENy
ZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVBbmREaXJlY3Rpb24obnVsbHB0ciwg
Y2dSZWN0cy5iZWdpbigpLCBjZ1JlY3RzLnNpemUoKSwgdmlzaWJsZVJlY3QsIERESGlnaGxpZ2h0
U3R5bGVCdWJibGVOb25lIHwgRERIaWdobGlnaHRTdHlsZVN0YW5kYXJkSWNvbkFycm93IHwgRERI
aWdobGlnaHRTdHlsZUJ1dHRvblNob3dBbHdheXMsIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0
dXJhbCwgTk8sIFlFUykpOworICAgICAgICAgICAgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBk
ZEhpZ2hsaWdodCA9IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVS
ZWN0V2l0aFN0eWxlQW5kRGlyZWN0aW9uKG51bGxwdHIsIGNnUmVjdHMuZGF0YSgpLCBjZ1JlY3Rz
LnNpemUoKSwgdmlzaWJsZVJlY3QsIERESGlnaGxpZ2h0U3R5bGVCdWJibGVOb25lIHwgRERIaWdo
bGlnaHRTdHlsZVN0YW5kYXJkSWNvbkFycm93IHwgRERIaWdobGlnaHRTdHlsZUJ1dHRvblNob3dB
bHdheXMsIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6
OmNyZWF0ZUZvclNlbGVjdGlvbigqdGhpcywgZGRIaWdobGlnaHQsIHNlbGVjdGlvblJhbmdlKSk7
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NlZ21lbnRlZEZvbnREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NlZ21lbnRlZEZvbnREYXRhLmNwcAppbmRleCBkMWI5MmI3YjYwOWI0NTE5OWM4NGE0NmFlZTlm
ZGI2YzRmN2NmZWM1Li41MDNiMGU4ZDliYmYyOTA2Y2U3M2JlYmViYTAxYmQ2MDNlYzc5OTkzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250
RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVk
Rm9udERhdGEuY3BwCkBAIC0zOSw4ICszOSw4IEBAIFNlZ21lbnRlZEZvbnREYXRhOjp+U2VnbWVu
dGVkRm9udERhdGEoKQogCiBjb25zdCBTaW1wbGVGb250RGF0YSogU2VnbWVudGVkRm9udERhdGE6
OmZvbnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKIHsKLSAgICBWZWN0b3I8Rm9u
dERhdGFSYW5nZT46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwotICAgIGZv
ciAoVmVjdG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIGF1dG8gZW5kID0gbV9yYW5nZXMuZW5kKCk7
CisgICAgZm9yIChhdXRvIGl0ID0gbV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CiAgICAgICAgIGlmIChpdC0+ZnJvbSgpIDw9IGMgJiYgaXQtPnRvKCkgPj0gYykKICAgICAgICAg
ICAgIHJldHVybiBpdC0+Zm9udERhdGEoKS5nZXQoKTsKICAgICB9CkBAIC00OSw4ICs0OSw4IEBA
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBTZWdtZW50ZWRGb250RGF0YTo6Zm9udERhdGFGb3JDaGFy
YWN0ZXIoVUNoYXIzMiBjKSBjb25zdAogCiBib29sIFNlZ21lbnRlZEZvbnREYXRhOjpjb250YWlu
c0NoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPEZvbnREYXRhUmFuZ2U+
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxG
b250RGF0YVJhbmdlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICBhdXRvIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOworICAgIGZvciAo
YXV0byBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBp
ZiAoYyA+PSBpdC0+ZnJvbSgpICYmIGMgPD0gaXQtPnRvKCkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CkBAIC03Niw4ICs3Niw4IEBAIGJvb2wgU2VnbWVudGVkRm9udERhdGE6Omlz
Q3VzdG9tRm9udCgpIGNvbnN0CiAKIGJvb2wgU2VnbWVudGVkRm9udERhdGE6OmlzTG9hZGluZygp
IGNvbnN0CiB7Ci0gICAgVmVjdG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3Jhbmdlcy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxGb250RGF0YVJhbmdlPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBh
dXRvIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IG1fcmFuZ2VzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoaXQtPmZvbnREYXRhKCktPmlz
TG9hZGluZygpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCmluZGV4IDA1
MTg3MWFjNmM2MGZiNjQzOTI4MzBhYWM2YWQzODUyYTk0ZDQ0NzYuLmRkMDk2M2E3NTAxYWQyZWUw
NjMxYTVlMTZkNzk1MTExMTIyMzlkNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAKQEAgLTIwMCw3ICsyMDAsNyBAQCBib29s
IGNvbnZlcnRXT0ZGVG9TZm50KFNoYXJlZEJ1ZmZlciogd29mZiwgVmVjdG9yPGNoYXI+JiBzZm50
KQogICAgICAgICAgICAgdUxvbmdmIGRlc3RMZW4gPSB0YWJsZU9yaWdMZW5ndGg7CiAgICAgICAg
ICAgICBpZiAoIXNmbnQudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNmbnQuc2l6ZSgpICsgdGFibGVPcmln
TGVuZ3RoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBCeXRl
ZiogZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Qnl0ZWYqPihzZm50LmVuZCgpKTsKKyAgICAgICAg
ICAgIEJ5dGVmKiBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxCeXRlZio+KGdldFB0cihzZm50LmVu
ZCgpKSk7CiAgICAgICAgICAgICBzZm50Lmdyb3coc2ZudC5zaXplKCkgKyB0YWJsZU9yaWdMZW5n
dGgpOwogICAgICAgICAgICAgaWYgKHVuY29tcHJlc3MoZGVzdCwgJmRlc3RMZW4sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgQnl0ZWYqPih3b2ZmLT5kYXRhKCkgKyB0YWJsZU9mZnNldCksIHRhYmxl
Q29tcExlbmd0aCkgIT0gWl9PSykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENh
aXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50
Q2Fpcm8uY3BwCmluZGV4IDUwMjJjNTBjN2VlODI1ZTI0MGYwZTcxMjI0N2M3ZWYxNjQ4ZjM4YmQu
Ljc1MTZiMGFjZDE1YWFmZDEyYTM1NmFmZjRkNTBhNmM0YWEwMjRmMjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8u
Y3BwCkBAIC01OSw3ICs1OSw3IEBAIGNhaXJvX3BhdHRlcm5fdCogR3JhZGllbnQ6OnBsYXRmb3Jt
R3JhZGllbnQoZmxvYXQgZ2xvYmFsQWxwaGEpCiAgICAgZWxzZQogICAgICAgICBtX2dyYWRpZW50
ID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfbGluZWFyKG1fcDAueCgpLCBtX3AwLnkoKSwgbV9wMS54
KCksIG1fcDEueSgpKTsKIAotICAgIFZlY3RvcjxDb2xvclN0b3A+OjppdGVyYXRvciBzdG9wSXRl
cmF0b3IgPSBtX3N0b3BzLmJlZ2luKCk7CisgICAgYXV0byBzdG9wSXRlcmF0b3IgPSBtX3N0b3Bz
LmJlZ2luKCk7CiAgICAgd2hpbGUgKHN0b3BJdGVyYXRvciAhPSBtX3N0b3BzLmVuZCgpKSB7CiAg
ICAgICAgIGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShtX2dyYWRpZW50LCBzdG9w
SXRlcmF0b3ItPnN0b3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdG9wSXRlcmF0b3ItPnJlZCwgc3RvcEl0ZXJhdG9yLT5ncmVlbiwgc3RvcEl0ZXJhdG9yLT5i
bHVlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAppbmRleCBkZTQ1NTA5NGEwYmNmN2M5ZGQz
YjM5ZTRmODhlMDJjNTA5ZGVlYzg1Li4zYTkzMWRkYmFkNGZiYTVlZTlhZGU4YjZmYWI3MDRlYjVh
ZTAwM2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBA
IHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFy
QmVmb3JlRnJhbWUpCiAgICAgLy8gYWx3YXlzIHVzZSBJbWFnZVNvdXJjZTo6Y2xlYXIodHJ1ZSwg
Li4uKSB0byBjb21wbGV0ZWx5IGZyZWUgdGhlIG1lbW9yeSBpbgogICAgIC8vIHRoaXMgY2FzZS4K
ICAgICBjbGVhckJlZm9yZUZyYW1lID0gc3RkOjptaW4oY2xlYXJCZWZvcmVGcmFtZSwgbV9mcmFt
ZUJ1ZmZlckNhY2hlLnNpemUoKSAtIDEpOwotICAgIGNvbnN0IFZlY3RvcjxJbWFnZUZyYW1lPjo6
aXRlcmF0b3IgZW5kKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpICsgY2xlYXJCZWZvcmVGcmFt
ZSk7CisgICAgY29uc3QgYXV0byBlbmQgPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSArIGNs
ZWFyQmVmb3JlRnJhbWU7CiAKICAgICAvLyBXZSBuZWVkIHRvIHByZXNlcnZlIGZyYW1lcyBzdWNo
IHRoYXQ6CiAgICAgLy8gICAqIFdlIGRvbid0IGNsZWFyIHxlbmR8CkBAIC0xNjUsMTQgKzE2NSwx
NCBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBj
bGVhckJlZm9yZUZyYW1lKQogICAgIC8vICAgKiBJZiB0aGUgZnJhbWUgaXMgcGFydGlhbCwgd2Un
cmUgZGVjb2RpbmcgaXQsIHNvIGRvbid0IGNsZWFyIGl0OyBpZiBpdAogICAgIC8vICAgICBoYXMg
YSBkaXNwb3NhbCBtZXRob2Qgb3RoZXIgdGhhbiBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMsIHN0
b3AKICAgICAvLyAgICAgc2Nhbm5pbmcsIGFzIHdlJ2xsIG9ubHkgbmVlZCB0aGlzIGZyYW1lIHdo
ZW4gZGVjb2RpbmcgdGhlIG5leHQgb25lLgotICAgIFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0
b3IgaShlbmQpOworICAgIGF1dG8gaSA9IGVuZDsKICAgICBmb3IgKDsgKGkgIT0gbV9mcmFtZUJ1
ZmZlckNhY2hlLmJlZ2luKCkpICYmICgoaS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVF
bXB0eSkgfHwgKGktPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3
cml0ZVByZXZpb3VzKSk7IC0taSkgewogICAgICAgICBpZiAoKGktPnN0YXR1cygpID09IEltYWdl
RnJhbWU6OkZyYW1lQ29tcGxldGUpICYmIChpICE9IGVuZCkpCiAgICAgICAgICAgICBpLT5jbGVh
clBpeGVsRGF0YSgpOwogICAgIH0KIAogICAgIC8vIE5vdyB8aXwgaG9sZHMgdGhlIGxhc3QgZnJh
bWUgd2UgbmVlZCB0byBwcmVzZXJ2ZTsgY2xlYXIgcHJpb3IgZnJhbWVzLgotICAgIGZvciAoVmVj
dG9yPEltYWdlRnJhbWU+OjppdGVyYXRvciBqKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKTsg
aiAhPSBpOyArK2opIHsKKyAgICBmb3IgKGF1dG8gaiA9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdp
bigpOyBqICE9IGk7ICsraikgewogICAgICAgICBBU1NFUlQoai0+c3RhdHVzKCkgIT0gSW1hZ2VG
cmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAgaWYgKGotPnN0YXR1cygpICE9IEltYWdlRnJh
bWU6OkZyYW1lRW1wdHkpCiAgICAgICAgICAgICBqLT5jbGVhclBpeGVsRGF0YSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCBlNDhlYjliNjc1ZGM5ZDIxNzU5OTI0
Yzg4MDVhZmEwYjg5YjQ5ODM3Li5lOWZiNWZhM2NkYTE0NzFlYzZlYmFiYjc0YTk2MDFlZmY0YzM1
NDNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtMTU3Nyw4ICsx
NTc3LDggQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50RmlsbExheWVycyhjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgQ29sb3ImIGMsIGNvbnMKICAgICAgICAgY29udGV4dC0+YmVnaW5U
cmFuc3BhcmVuY3lMYXllcigxKTsKICAgICB9CiAKLSAgICBWZWN0b3I8Y29uc3QgRmlsbExheWVy
Kj46OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgdG9wTGF5ZXIgPSBsYXllcnMucmVuZCgpOwotICAg
IGZvciAoVmVjdG9yPGNvbnN0IEZpbGxMYXllcio+Ojpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGl0
ID0gbGF5ZXJzLnJiZWdpbigpOyBpdCAhPSB0b3BMYXllcjsgKytpdCkKKyAgICBhdXRvIHRvcExh
eWVyID0gbGF5ZXJzLnJlbmQoKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBsYXllcnMucmJlZ2luKCk7
IGl0ICE9IHRvcExheWVyOyArK2l0KQogICAgICAgICBwYWludEZpbGxMYXllcihwYWludEluZm8s
IGMsICppdCwgcmVjdCwgYmxlZWRBdm9pZGFuY2UsIG9wLCBiYWNrZ3JvdW5kT2JqZWN0LCBiYXNl
QmdDb2xvclVzYWdlKTsKIAogICAgIGlmIChzaG91bGREcmF3QmFja2dyb3VuZEluU2VwYXJhdGVC
dWZmZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJl
c29sdmVkUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRS
ZXNvbHZlZFBvc2l0aW9uLmNwcAppbmRleCBjY2RjMmEzZGM2ZGEyZDY1MzRhN2ViNjM1MDllNmI0
M2JhYTFmZDcxLi5kYzA5NTA5OWMwNGUzYTgyYzQzYzNlMDI2Y2RkZWFkZThkNWJlMzA3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQ
b3NpdGlvbi5jcHAKQEAgLTI5NSw3ICsyOTUsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGZp
cnN0TmFtZWRHcmlkTGluZUJlZm9yZVBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uLCBjb25zdAog
ICAgIC8vIGFscmVhZHkgY29udmVydGVkIHRvIGFuIGluZGV4IGluIG91ciBncmlkIHJlcHJlc2Vu
dGF0aW9uIChpZSBvbmUgd2FzIHJlbW92ZWQgZnJvbSB0aGUgZ3JpZCBsaW5lIHRvIGFjY291bnQg
Zm9yCiAgICAgLy8gdGhlIHNpZGUpLgogICAgIHVuc2lnbmVkIGZpcnN0TGluZUJlZm9yZVBvc2l0
aW9uSW5kZXggPSAwOwotICAgIGNvbnN0IHVuc2lnbmVkKiBmaXJzdExpbmVCZWZvcmVQb3NpdGlv
biA9IHN0ZDo6bG93ZXJfYm91bmQoZ3JpZExpbmVzLmJlZ2luKCksIGdyaWRMaW5lcy5lbmQoKSwg
cG9zaXRpb24pOworICAgIGF1dG8gZmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gPSBzdGQ6Omxvd2Vy
X2JvdW5kKGdyaWRMaW5lcy5iZWdpbigpLCBncmlkTGluZXMuZW5kKCksIHBvc2l0aW9uKTsKICAg
ICBpZiAoZmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gIT0gZ3JpZExpbmVzLmVuZCgpKSB7CiAgICAg
ICAgIGlmICgqZmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gPiBwb3NpdGlvbiAmJiBmaXJzdExpbmVC
ZWZvcmVQb3NpdGlvbiAhPSBncmlkTGluZXMuYmVnaW4oKSkKICAgICAgICAgICAgIC0tZmlyc3RM
aW5lQmVmb3JlUG9zaXRpb247CkBAIC0zMTYsOSArMzE2LDggQEAgc3RkOjp1bmlxdWVfcHRyPEdy
aWRTcGFuPiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZVJvd1N0YXJ0Q29sdW1uU3RhcnRO
YW1lZEcKIAogc3RkOjp1bmlxdWVfcHRyPEdyaWRTcGFuPiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6
cmVzb2x2ZVJvd0VuZENvbHVtbkVuZE5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0
ZVBvc2l0aW9uKGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNvbHZlZE9wcG9zaXRlUG9z
aXRpb24sIGNvbnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFZlY3Rvcjx1bnNpZ25l
ZD4mIGdyaWRMaW5lcykKIHsKLSAgICBBU1NFUlQoZ3JpZExpbmVzLnNpemUoKSk7CiAgICAgdW5z
aWduZWQgZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uSW5kZXggPSBncmlkTGluZXMuc2l6
ZSgpIC0gMTsKLSAgICBjb25zdCB1bnNpZ25lZCogZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0
aW9uID0gc3RkOjp1cHBlcl9ib3VuZChncmlkTGluZXMuYmVnaW4oKSwgZ3JpZExpbmVzLmVuZCgp
LCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pOworICAgIGF1dG8gZmlyc3RMaW5lQWZ0ZXJPcHBv
c2l0ZVBvc2l0aW9uID0gc3RkOjp1cHBlcl9ib3VuZChncmlkTGluZXMuYmVnaW4oKSwgZ3JpZExp
bmVzLmVuZCgpLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pOwogICAgIGlmIChmaXJzdExpbmVB
ZnRlck9wcG9zaXRlUG9zaXRpb24gIT0gZ3JpZExpbmVzLmVuZCgpKQogICAgICAgICBmaXJzdExp
bmVBZnRlck9wcG9zaXRlUG9zaXRpb25JbmRleCA9IGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3Np
dGlvbiAtIGdyaWRMaW5lcy5iZWdpbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRm9udEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50
LmNwcAppbmRleCBjMzNmZmI3N2I2ZDhmOTk1N2IxMjZmMWJmMzkxN2E4NTdmZGZiNTBlLi5hMGJm
NTAxOTFiNmFiOTU4MTYxOGQ5NTNjMDg5MGQyMTJlYjdiMzYyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGb250RWxlbWVudC5jcHAKQEAgLTI1MiwzMSArMjUyLDMxIEBAIHN0YXRpYyBpbmxpbmUgZmxv
YXQga2VybmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMoY29uc3QgU1ZHS2VybmluZ01hcCYg
a2VybmluCiB7CiAgICAgaWYgKCFnMS5pc0VtcHR5KCkgJiYga2VybmluZ01hcC5nbHlwaE1hcC5j
b250YWlucyhnMSkpIHsKICAgICAgICAgU1ZHS2VybmluZ1ZlY3Rvcioga2VybmluZ1ZlY3RvciA9
IGtlcm5pbmdNYXAuZ2x5cGhNYXAuZ2V0KGcxKTsKLSAgICAgICAgU1ZHS2VybmluZ1ZlY3Rvcjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBrZXJuaW5nVmVjdG9yLT5lbmQoKSAtIDE7Ci0gICAgICAgIGNv
bnN0IFNWR0tlcm5pbmdWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0ga2VybmluZ1ZlY3Rv
ci0+YmVnaW4oKSAtIDE7Ci0gICAgICAgIGZvciAoOyBpdCAhPSBiZWdpbjsgLS1pdCkgewotICAg
ICAgICAgICAgaWYgKG1hdGNoZXModTIsIGcyLCAqaXQpKQotICAgICAgICAgICAgICAgIHJldHVy
biBpdC0+a2VybmluZzsKKyAgICAgICAgc2l6ZV90IGl0ID0ga2VybmluZ1ZlY3Rvci0+c2l6ZSgp
OworICAgICAgICB3aGlsZSAoaXQtLSA+IDApIHsKKyAgICAgICAgICAgIGF1dG8mIHZhbHVlID0g
a2VybmluZ1ZlY3Rvci0+YXQoaXQpOworICAgICAgICAgICAgaWYgKG1hdGNoZXModTIsIGcyLCB2
YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmtlcm5pbmc7CiAgICAgICAgIH0K
ICAgICB9CiAKICAgICBpZiAoIXUxLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoa2VybmluZ01h
cC51bmljb2RlTWFwLmNvbnRhaW5zKHUxKSkgewogICAgICAgICAgICAgU1ZHS2VybmluZ1ZlY3Rv
cioga2VybmluZ1ZlY3RvciA9IGtlcm5pbmdNYXAudW5pY29kZU1hcC5nZXQodTEpOwotICAgICAg
ICAgICAgU1ZHS2VybmluZ1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBrZXJuaW5nVmVjdG9y
LT5lbmQoKSAtIDE7Ci0gICAgICAgICAgICBjb25zdCBTVkdLZXJuaW5nVmVjdG9yOjpjb25zdF9p
dGVyYXRvciBiZWdpbiA9IGtlcm5pbmdWZWN0b3ItPmJlZ2luKCkgLSAxOwotICAgICAgICAgICAg
Zm9yICg7IGl0ICE9IGJlZ2luOyAtLWl0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMo
dTIsIGcyLCAqaXQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQtPmtlcm5pbmc7Cisg
ICAgICAgICAgICBzaXplX3QgaXQgPSBrZXJuaW5nVmVjdG9yLT5zaXplKCk7CisgICAgICAgICAg
ICB3aGlsZSAoaXQtLSA+IDApIHsKKyAgICAgICAgICAgICAgICBhdXRvJiB2YWx1ZSA9IGtlcm5p
bmdWZWN0b3ItPmF0KGl0KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyh1MiwgZzIsIHZh
bHVlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmtlcm5pbmc7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWtlcm5pbmdNYXAua2VybmluZ1VuaWNv
ZGVSYW5nZU1hcC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxTVkdLZXJuaW5nUGFp
cj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0ga2VybmluZ01hcC5rZXJuaW5nVW5pY29kZVJhbmdlTWFw
LmVuZCgpIC0gMTsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTVkdLZXJuaW5nUGFpcj46OmNv
bnN0X2l0ZXJhdG9yIGJlZ2luID0ga2VybmluZ01hcC5rZXJuaW5nVW5pY29kZVJhbmdlTWFwLmJl
Z2luKCkgLSAxOwotICAgICAgICAgICAgZm9yICg7IGl0ICE9IGJlZ2luOyAtLWl0KSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1hdGNoZXModTEsIHUyLCBnMiwgKml0KSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGl0LT5rZXJuaW5nOworICAgICAgICAgICAgc2l6ZV90IGl0ID0ga2Vybmlu
Z01hcC5rZXJuaW5nVW5pY29kZVJhbmdlTWFwLnNpemUoKTsKKyAgICAgICAgICAgIHdoaWxlIChp
dC0tID4gMCkgeworICAgICAgICAgICAgICAgIGF1dG8mIHZhbHVlID0ga2VybmluZ01hcC5rZXJu
aW5nVW5pY29kZVJhbmdlTWFwW2l0XTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyh1MSwg
dTIsIGcyLCB2YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5rZXJuaW5n
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aEJ5dGVTdHJlYW0uaAppbmRleCA5ZDlkMmEyYjIzYzYwMGZlYmI1MzQwY2JjZGQxYjYxZGRjM2I5
ZjE1Li5iOTk5NTU0OTQzOWFjOTY0YWIzZTY3YTMwZjBkODlkOGMzNThhY2EyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaApAQCAtNjAsOCArNjAsOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBhcHBlbmQodW5zaWduZWQgY2hhciBieXRlKSB7IG1fZGF0YS5hcHBlbmQoYnl0ZSk7
IH0KICAgICB2b2lkIGFwcGVuZChTVkdQYXRoQnl0ZVN0cmVhbSogb3RoZXIpCiAgICAgewotICAg
ICAgICBmb3IgKERhdGFJdGVyYXRvciBpdCA9IG90aGVyLT5iZWdpbigpOyBpdCAhPSBvdGhlci0+
ZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBhcHBlbmQoKml0KTsKKyAgICAgICAgZm9yIChhdXRv
JiBieXRlIDogKm90aGVyKQorICAgICAgICAgICAgYXBwZW5kKGJ5dGUpOwogICAgIH0KICAgICB2
b2lkIGNsZWFyKCkgeyBtX2RhdGEuY2xlYXIoKTsgfQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuICFtX2RhdGEuc2l6ZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94
bWwvWFBhdGhOb2RlU2V0LmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmgKaW5k
ZXggM2Q4OWI4ZDUwODdhODZjZmVhZmZjMDE0MGI2OTQ3NjJjMDk1ZGRkZi4uZGFmMmI5M2Q1MWI1
YWY2YjczNGY1ZjlhNzY1NDEzNjllMDQxNGEyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
eG1sL1hQYXRoTm9kZVNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQu
aApAQCAtNjQsOCArNjQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICB2b2lk
IG1hcmtTdWJ0cmVlc0Rpc2pvaW50KGJvb2wgZGlzam9pbnQpIHsgbV9zdWJ0cmVlc0FyZURpc2pv
aW50ID0gZGlzam9pbnQ7IH0KICAgICAgICAgICAgIGJvb2wgc3VidHJlZXNBcmVEaXNqb2ludCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3VidHJlZXNBcmVEaXNqb2ludCB8fCBtX25vZGVzLnNpemUoKSA8
IDI7IH0KIAotICAgICAgICAgICAgY29uc3QgUmVmUHRyPE5vZGU+KiBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIG1fbm9kZXMuYmVnaW4oKTsgfQotICAgICAgICAgICAgY29uc3QgUmVmUHRyPE5vZGU+
KiBlbmQoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CisgICAgICAgICAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPE5vZGU+Pjo6aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBt
X25vZGVzLmJlZ2luKCk7IH0KKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4+
OjppdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CiAKICAgICAg
ICAgcHJpdmF0ZToKICAgICAgICAgICAgIHZvaWQgdHJhdmVyc2FsU29ydCgpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242511</attachid>
            <date>2014-12-03 11:58:36 -0800</date>
            <delta_ts>2014-12-13 13:55:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138821-20141203115908.patch</filename>
            <type>text/plain</type>
            <size>64838</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2NzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MTkwODZjMTlkYTVkNzNjZTRiM2M4N2U4YTdmNWM0MmNmNGNlMTVlLi5kMzg4NzI4ZDJiNmM3NDNh
YjU1MmQ2OTVkZjJlYzFlNDBhNzcyMWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMyBAQAorMjAxNC0xMi0wMyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3Rp
bGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgY29kZSB0byBkZWFsIHdpdGggc2xpZ2h0bHkgY2hh
bmdlZCBpdGVyYXRvciBzZW1hbnRpY3MuCisKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxk
cmVuKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbnRKdW1wKToKKyAgICAgICAgKiBmdGwvRlRMQWJicmV2
aWF0aW9ucy5oOgorICAgICAgICAoSlNDOjpGVEw6Om1kTm9kZSk6CisgICAgICAgIChKU0M6OkZU
TDo6YnVpbGRDYWxsKToKKyAgICAgICAgKiBsbGludC9MTEludERhdGEuY3BwOgorICAgICAgICAo
SlNDOjpMTEludDo6RGF0YTo6cGVyZm9ybUFzc2VydGlvbnMpOgorICAgICAgICAqIHBhcnNlci9Q
YXJzZXIuaDoKKyAgICAgICAgKEpTQzo6U2NvcGU6OlNjb3BlKToKKyAgICAgICAgKiBydW50aW1l
L0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3Rvcik6Cisg
ICAgICAgICogdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2ZpbGVU
cmVlTm9kZTo6ZHVtcEludGVybmFsKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAg
ICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjptYXRjaENoYXJhY3RlckNsYXNzKToKKwog
MjAxNC0xMi0wMyAgWnNvbHQgQm9yYmVseSAgPHpzYm9yYmVseS51LXN6ZWdlZEBwYXJ0bmVyLnNh
bXN1bmcuY29tPgogCiAgICAgICAgIFJlbW92ZSB1bnVzZWQgSlNDIHJ1bnRpbWUgb3B0aW9ucwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpp
bmRleCAzNGE3NDMxN2JiMGYxN2MxY2U1ZjQ0M2UyMTBhNmJkYmQ3MWU4YjBhLi40NzdhMGQ3NDRk
NzM0MGJlMjRjODNmMzA0Y2Y4NWZiNWVkYmU1YzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDE0
LTEyLTAzICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBz
dXJlIHJhbmdlIGJhc2VkIGl0ZXJhdGlvbiBvZiBWZWN0b3I8PiBzdGlsbCByZWNlaXZlcyBib3Vu
ZHMgY2hlY2tpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzODgyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBhIG5ldyBJbmRleGVkSXRlcmF0b3Igc3RydWN0IHRvIFdURiB0aGF0IHdyYXBzIGEK
KyAgICAgICAgVmVjdG9yIHR5cGUgYW5kIGluZGV4IHRvIHByb3ZpZGUgcG9pbnRlciBsaWtlIHNl
bWFudGljcworICAgICAgICB3aGlsZSBzdGlsbCBwZXJmb3JtaW5nIHJ1bnRpbWUgYm91bmRzIGNo
ZWNraW5nLCBldmVuIGluCisgICAgICAgIHJlbGVhc2UgYnVpbGRzLiBXZSBzdG9yZSBhIHNpbXBs
ZSBpbmRleCBpbnRvIHRoZSB2ZWN0b3IKKyAgICAgICAgd2hpY2ggbWVhbnMgdGhhdCB0aGlzIGl0
ZXJhdG9yIGFsbG93cyB2ZWN0b3IgcmVzaXppbmcKKyAgICAgICAgZHVyaW5nIGl0ZXJhdGlvbi4g
SWYgdGhlIHZlY3RvciBpcyByZXNpemVkIHN1Y2ggdGhhdCB0aGUKKyAgICAgICAgaXRlcmF0b3Ig
aXMgb3V0IG9mIGJvdW5kcywgdGhlbiBhbnkgYXR0ZW1wdCB0byBkZXJlZmVyZW5jZQorICAgICAg
ICB0aGUgaXRlcmF0b3Igd2lsbCBjcmFzaCBzYWZlbHkuCisKKyAgICAgICAgRm9yIHRoZSBwdXJw
b3NlIG9mIHJldGFpbmluZyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudAorICAgICAgICBiZWhhdmlv
dXIsIHRoZSBpdGVyYXRvciBjYW4gYmUgbW92ZWQgdG8gbV9pbmRleCA9PSBzaXplKCkKKyAgICAg
ICAgYXMgdGhhdCBpcyB0aGUgc3RhbmRhcmQgImVuZCIgdGVybWluYXRvciBmb3IgdGhlc2UgdHlw
ZXMuCisgICAgICAgIEF0dGVtcHRpbmcgdG8gZGVyZWZlcmVuY2UgYXQgdGhhdCBwb2ludCB3aWxs
IHN0aWxsIGNyYXNoCisgICAgICAgIHJhdGhlciB0aGFuIHBlcmZvcm0gYW4gdW5zYWZlIG1lbW9y
eSBvcGVyYXRpb24uCisKKyAgICAgICAgQnkgbmVjZXNzaXR5IHRoZXJlIGFyZSBtYW55IG92ZXJy
aWRlcyBmb3Igb3BlcmF0b3IgKyBhbmQgLSBhcworICAgICAgICB3ZSBvdGhlcndpc2UgaGl0IG1h
bnkgZGlmZmVyZW50IHR5cGUgcHJvbW90aW9uIGFtYmlndWl0aWVzIHdoZW4KKyAgICAgICAgcGVy
Zm9ybWluZyBhcml0aG1ldGljIHdpdGggaXRlcmF0b3JzLiBUaGVzZSBhbWJpZ3VpdGllcyBhcmUg
YWxzbworICAgICAgICBkaWZmZXJlbnQgZm9yIDMyLSB2cy4gNjQtYml0LCBzbyBkdXBsaWNhdGlu
ZyB0aGUgZnVuY3Rpb25zCisgICAgICAgIGFuZCB0aGVuIGZvcndhcmRpbmcgdG8gdGhlIGNvcmUg
aW1wbGVtZW50YXRpb25zIHRoYXQgcGVyZm9ybWVkCisgICAgICAgIHRoZSBib3VuZHMgY2hlY2tp
bmcgYW5kIG11dGF0aW9uIHNlZW1lZCBsaWtlIHRoZSByaWdodCBjYWxsLgorCisgICAgICAgICog
V1RGLnZjeHByb2ovV1RGLnZjeHByb2o6CisgICAgICAgICogV1RGLnZjeHByb2ovV1RGLnZjeHBy
b2ouZmlsdGVyczoKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiB3dGYvSW5kZXhlZEl0ZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpJbmRl
eGVkSXRlcmF0b3I6OkluZGV4ZWRJdGVyYXRvcik6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVy
YXRvcjo6b3BlcmF0b3ItPik6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0
b3IqKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpnZXQpOgorICAgICAgICAoV1RG
OjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRl
cmF0b3I6Om9wZXJhdG9yLS0pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJh
dG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6
Om9wZXJhdG9yLSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3I9KToK
KyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdU
Rjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0
ZXJhdG9yOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJh
dG9yPD0pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPik6CisgICAg
ICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3I+PSk6CisgICAgICAgIChXVEY6Oklu
ZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IgY29uc3RfaXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpJ
bmRleGVkSXRlcmF0b3I6OnVuc2FmZUdldCk6CisgICAgICAgIChXVEY6OmdldFB0cik6CisgICAg
ICAgIChXVEY6Om9wZXJhdG9yLSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoV1RGOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6CisgICAgICAg
IChXVEY6Om9wZXJhdG9yPj0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcjwpOgorICAgICAgICAo
V1RGOjpvcGVyYXRvcj4pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3JTZWxlY3Rvcjo6
bWFrZUl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yU2VsZWN0b3I6Om1h
a2VDb25zdEl0ZXJhdG9yKToKKyAgICAgICAgKiB3dGYvUmVmQ291bnRlZEFycmF5Lmg6CisgICAg
ICAgIChXVEY6OlJlZkNvdW50ZWRBcnJheTo6UmVmQ291bnRlZEFycmF5KToKKyAgICAgICAgKiB3
dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6VmVjdG9yKToKKyAgICAgICAgKFdU
Rjo6VmVjdG9yOjpiZWdpbik6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6ZW5kKToKKyAgICAgICAg
KFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6PSk6CisgICAg
ICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OmZpbGwpOgorICAgICAgICAoV1RGOjpPdmVyZmxv
d0hhbmRsZXI+OjpleHBhbmRDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxl
cj46OnRyeUV4cGFuZENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6
cmVzaXplKToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6c2hyaW5rKToKKyAgICAg
ICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6Z3Jvdyk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93
SGFuZGxlcj46OnJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxl
cj46OnRyeVJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46
OnNocmlua0NhcGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5k
KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6dHJ5QXBwZW5kKToKKyAgICAgICAg
KFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kU2xvd0Nhc2UpOgorICAgICAgICAoV1RGOjpP
dmVyZmxvd0hhbmRsZXI+Ojp1bmNoZWNrZWRBcHBlbmQpOgorICAgICAgICAoV1RGOjpPdmVyZmxv
d0hhbmRsZXI+OjphcHBlbmRWZWN0b3IpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+
OjppbnNlcnQpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnRWZWN0b3Ip
OgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUpOgorCiAyMDE0LTEyLTAy
ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSb2xsaW5nIG91dCBy
MTc2NTkyLCByMTc2NjAzLCByMTc2NjE2LCBhbmQgcjE3NjcwNSB1bnRpbCBidWlsZCBhbmQgcGVy
ZiBpc3N1ZXMgYXJlIHJlc29sdmVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDQ5YTNhODQ5NDZmZWJhZGUyMWYz
MmYwYTk2M2FiMWEzMTlhZTgxMDguLjQ4NTdmZGU3Zjc3ODZlOGRlYWU4MTA2MDNiZGM5Y2Y5MWE5
NjUyNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAxNC0xMi0wMyAgT2xpdmVyIEh1
bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBp
dGVyYXRpb24gb2YgVmVjdG9yPD4gc3RpbGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgdG8gZGVh
bCB3aXRoIGRpZmZlcmVudCBpdGVyYXRvciB0eXBlLgorCisgICAgICAgICogYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJp
YWxpemVyOjpkZXNlcmlhbGl6ZVN0cmluZyk6CisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoQnVmZmVyOjppc0JhZE1hdGNoKToKKyAg
ICAgICAgKiBwYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tOgorICAgICAgICAo
V2ViQ29yZTo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGln
aHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZEZvbnREYXRhOjpmb250RGF0YUZvckNoYXJhY3Rl
cik6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkRm9udERhdGE6OmlzTG9hZGluZyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29udmVydFdPRkZUb1NmbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnBs
YXRmb3JtR3JhZGllbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9H
SUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpj
bGVhckZyYW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwYWludEZpbGxMYXllcnMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpmaXJzdE5hbWVkR3JpZExpbmVCZWZvcmVQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZVJvd0VuZENvbHVtbkVuZE5hbWVkR3Jp
ZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKToKKyAgICAgICAgKiBzdmcvU1ZH
Rm9udEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6a2VybmluZ0ZvclBhaXJPZlN0cmlu
Z3NBbmRHbHlwaHMpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW06OmFwcGVuZCk6CisgICAgICAgICogeG1sL1hQ
YXRoTm9kZVNldC5oOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Ok5vZGVTZXQ6OmJlZ2luKToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOb2RlU2V0OjplbmQpOgorCiAyMDE0LTEyLTAzICBK
ZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIEhhbmcgd2hl
biBjYWxsaW5nIC1bQVZBc3NldCByZXNvbHZlZFVSTF0uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAppbmRleCA2YzI5M2NjZjk4
ZDU2NzMyNmRjNDJmYWJkNWRmYTQxZDIzZjZjMmMxLi42MzVhY2QyY2JiMzhlNzhhNjA4M2I2MWU1
OGRiYTFiNDdjYjc5ZTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKQEAgLTIzNCw5ICsyMzQsOSBAQCB2b2lkIFVubGlu
a2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9zeW1ib2xUYWJsZSk7CiAgICAgZm9yIChG
dW5jdGlvbkV4cHJlc3Npb25WZWN0b3I6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPm1fZnVu
Y3Rpb25EZWNscy5iZWdpbigpLCBlbmQgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbHMuZW5k
KCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICB2aXNpdG9yLmFwcGVuZChwdHIpOworICAg
ICAgICB2aXNpdG9yLmFwcGVuZChXVEY6OmdldFB0cihwdHIpKTsKICAgICBmb3IgKEZ1bmN0aW9u
RXhwcmVzc2lvblZlY3Rvcjo6aXRlcmF0b3IgcHRyID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkV4
cHJzLmJlZ2luKCksIGVuZCA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25FeHBycy5lbmQoKTsgcHRy
ICE9IGVuZDsgKytwdHIpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0cik7CisgICAgICAgIHZp
c2l0b3IuYXBwZW5kKFdURjo6Z2V0UHRyKHB0cikpOwogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVz
KHRoaXNPYmplY3QtPm1fY29uc3RhbnRSZWdpc3RlcnMuZGF0YSgpLCB0aGlzT2JqZWN0LT5tX2Nv
bnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CiAgICAgaWYgKHRoaXNPYmplY3QtPm1fcmFyZURhdGEp
IHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIGVuZCA9IHRoaXNPYmplY3QtPm1fcmFyZURh
dGEtPm1fcmVnZXhwcy5zaXplKCk7IGkgIT0gZW5kOyBpKyspCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4
IDY2ZGUyYWZiZTBkMDA4MDA1MGExOWE4OGFjOWUxY2FkNTRlY2VkYjUuLmE4NWZiNTNmMGZkMDA2
ZDkxYjg3MDYwZTA0YWE2ZDIxYzlmYmM3NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0yMjcxLDgg
KzIyNzEsOCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleFBvcFNjb3BlcyhS
ZWdpc3RlcklEKiBzY29wZSwgQ29udHJvbEZsb3dDb250ZQogICAgICAgICAgICAgaW50IHRvcFNj
b3BlSW5kZXggPSAtMTsKICAgICAgICAgICAgIGludCBib3R0b21TY29wZUluZGV4ID0gLTE7CiAg
ICAgICAgICAgICBpZiAoZmxpcFNjb3BlcykgewotICAgICAgICAgICAgICAgIHRvcFNjb3BlSW5k
ZXggPSB0b3BTY29wZSAtIG1fc2NvcGVDb250ZXh0U3RhY2suYmVnaW4oKTsKLSAgICAgICAgICAg
ICAgICBib3R0b21TY29wZUluZGV4ID0gYm90dG9tU2NvcGUgLSBtX3Njb3BlQ29udGV4dFN0YWNr
LmJlZ2luKCk7CisgICAgICAgICAgICAgICAgdG9wU2NvcGVJbmRleCA9IHRvcFNjb3BlIC0gbV9z
Y29wZUNvbnRleHRTdGFjay5kYXRhKCk7CisgICAgICAgICAgICAgICAgYm90dG9tU2NvcGVJbmRl
eCA9IGJvdHRvbVNjb3BlIC0gbV9zY29wZUNvbnRleHRTdGFjay5kYXRhKCk7CiAgICAgICAgICAg
ICAgICAgc2F2ZWRTY29wZUNvbnRleHRTdGFjayA9IG1fc2NvcGVDb250ZXh0U3RhY2s7CiAgICAg
ICAgICAgICAgICAgbV9zY29wZUNvbnRleHRTdGFjay5zaHJpbmsoZmluYWxseUNvbnRleHQuc2Nv
cGVDb250ZXh0U3RhY2tTaXplKTsKICAgICAgICAgICAgIH0KQEAgLTIzMTYsNyArMjMxNiw3IEBA
IHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb21wbGV4UG9wU2NvcGVzKFJlZ2lzdGVySUQq
IHNjb3BlLCBDb250cm9sRmxvd0NvbnRlCiAgICAgICAgICAgICBpZiAoZmxpcFNjb3Blcykgewog
ICAgICAgICAgICAgICAgIG1fc2NvcGVDb250ZXh0U3RhY2sgPSBzYXZlZFNjb3BlQ29udGV4dFN0
YWNrOwogICAgICAgICAgICAgICAgIHRvcFNjb3BlID0gJm1fc2NvcGVDb250ZXh0U3RhY2tbdG9w
U2NvcGVJbmRleF07IC8vIGFzc2VydCBpdCdzIHdpdGhpbiBib3VuZHMKLSAgICAgICAgICAgICAg
ICBib3R0b21TY29wZSA9IG1fc2NvcGVDb250ZXh0U3RhY2suYmVnaW4oKSArIGJvdHRvbVNjb3Bl
SW5kZXg7IC8vIGRvbid0IGFzc2VydCwgc2luY2UgaXQgdGhlIGluZGV4IG1pZ2h0IGJlIC0xLgor
ICAgICAgICAgICAgICAgIGJvdHRvbVNjb3BlID0gbV9zY29wZUNvbnRleHRTdGFjay5kYXRhKCkg
KyBib3R0b21TY29wZUluZGV4OyAvLyBkb24ndCBhc3NlcnQsIHNpbmNlIGl0IHRoZSBpbmRleCBt
aWdodCBiZSAtMS4KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChmbGlwU3dpdGNoZXMp
CiAgICAgICAgICAgICAgICAgbV9zd2l0Y2hDb250ZXh0U3RhY2sgPSBzYXZlZFN3aXRjaENvbnRl
eHRTdGFjazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKaW5kZXggZjA3MjRkZjQ3MDM5NDliMzBkMjRlMzZhYTgyZTc3OGE1Y2I5YmY3My4uM2Jl
MThlYTZjNmNiN2YzNmY0OGUyMGI1OWY3MjNlY2M1MTRiOWQzZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTQ5MTAsNyArNDkxMCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbnRKdW1wKAogICAgIGFkZEJyYW5j
aCgKICAgICAgICAgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgdmFs
dWUsIEltbTMyKHRhYmxlLmN0aU9mZnNldHMuc2l6ZSgpKSksCiAgICAgICAgIGRhdGEtPmZhbGxU
aHJvdWdoLmJsb2NrKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIodGFibGUuY3RpT2Zm
c2V0cy5iZWdpbigpKSwgc2NyYXRjaCk7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHRh
YmxlLmN0aU9mZnNldHMuZGF0YSgpKSwgc2NyYXRjaCk7CiAgICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6QmFzZUluZGV4KHNjcmF0Y2gsIHZhbHVlLCBKSVRDb21waWxlcjo6dGltZXNQdHIo
KSksIHNjcmF0Y2gpOwogICAgIG1faml0Lmp1bXAoc2NyYXRjaCk7CiAgICAgZGF0YS0+ZGlkVXNl
SnVtcFRhYmxlID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQWJicmV2aWF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZp
YXRpb25zLmgKaW5kZXggZmM3Y2IxYjI1NDMyNjk0YWFlZThmYmYzMTUzZTZlMDhhODMzMmYzOS4u
N2IxYTFjZTdiMzgzN2U4MTRjYmEyYjNlY2MzYTA3YjAxOGQ5YWUzMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgKQEAgLTEyMCw3ICsxMjAsNyBAQCBz
dGF0aWMgaW5saW5lIExWYWx1ZSBtZFN0cmluZyhMQ29udGV4dCBjb250ZXh0LCBjb25zdCBjaGFy
KiBzdHJpbmcsIHVuc2lnbmVkIGxlbgogc3RhdGljIGlubGluZSBMVmFsdWUgbWRTdHJpbmcoTENv
bnRleHQgY29udGV4dCwgY29uc3QgY2hhciogc3RyaW5nKSB7IHJldHVybiBtZFN0cmluZyhjb250
ZXh0LCBzdHJpbmcsIHN0ZDo6c3RybGVuKHN0cmluZykpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1
ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwgTFZhbHVlKiBhcmdzLCB1bnNpZ25lZCBudW1Bcmdz
KSB7IHJldHVybiBsbHZtLT5NRE5vZGVJbkNvbnRleHQoY29udGV4dCwgYXJncywgbnVtQXJncyk7
IH0KIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBt
ZE5vZGUoTENvbnRleHQgY29udGV4dCwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKSB7IHJldHVy
biBtZE5vZGUoY29udGV4dCwgY29uc3RfY2FzdDxMVmFsdWUqPih2ZWN0b3IuYmVnaW4oKSksIHZl
Y3Rvci5zaXplKCkpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29u
dGV4dCwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKSB7IHJldHVybiBtZE5vZGUoY29udGV4dCwg
Y29uc3RfY2FzdDxMVmFsdWUqPih2ZWN0b3IuZGF0YSgpKSwgdmVjdG9yLnNpemUoKSk7IH0KIHN0
YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0KSB7IHJldHVybiBtZE5v
ZGUoY29udGV4dCwgMCwgMCk7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4
dCBjb250ZXh0LCBMVmFsdWUgYXJnMSkgeyByZXR1cm4gbWROb2RlKGNvbnRleHQsICZhcmcxLCAx
KTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQsIExWYWx1
ZSBhcmcxLCBMVmFsdWUgYXJnMikKQEAgLTI4OCw3ICsyODgsNyBAQCBzdGF0aWMgaW5saW5lIExW
YWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBM
VmFsdWUqCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPgogaW5saW5lIExWYWx1ZSBidWls
ZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBWZWN0b3JUeXBl
JiB2ZWN0b3IpCiB7Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgdmVj
dG9yLmJlZ2luKCksIHZlY3Rvci5zaXplKCkpOworICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRl
ciwgZnVuY3Rpb24sIHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCkpOwogfQogc3RhdGljIGlu
bGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbikK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKaW5kZXggNjkxOWFl
YWIwMGExYjI1YzQ3NWJiZjlkZDI1YzY4OGYwYWE1OGE3Mi4uNDRhZmNhNGNiYWQ4YjNlNTUzMzQx
MjlhYzljOWIwZGVmZDk1NjFlOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
RGF0YS5jcHAKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRpb25z
KFZNJiB2bSkKICAgICBWZWN0b3I8aW50PiB0ZXN0VmVjdG9yOwogICAgIHRlc3RWZWN0b3IucmVz
aXplKDQyKTsKICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnQzMl90Kj4oJnRlc3RWZWN0b3Ip
W3NpemVvZih2b2lkKikvc2l6ZW9mKHVpbnQzMl90KSArIDFdID09IDQyKTsKLSAgICBBU1NFUlQo
Yml0d2lzZV9jYXN0PGludCoqPigmdGVzdFZlY3RvcilbMF0gPT0gdGVzdFZlY3Rvci5iZWdpbigp
KTsKKyAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGludCoqPigmdGVzdFZlY3RvcilbMF0gPT0gdGVz
dFZlY3Rvci5kYXRhKCkpOwogI2VuZGlmCiAKICAgICBBU1NFUlQoU3RyaW5nSW1wbDo6c19oYXNo
RmxhZzhCaXRCdWZmZXIgPT0gMzIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgK
aW5kZXggNDUyZjcwNDZmMzAyMmQzODgxMDlhZWJkYzg0Mzg0ZTFhYTIyZmZhMS4uMDFmY2NkYjdl
MzhhYzVhNjAyMmM2OGM5N2I4ZDhlYjNiMGNlYzE4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5oCkBAIC0xMzAsMTEgKzEzMCw4IEBAIHN0cnVjdCBTY29wZSB7CiAgICAgewog
ICAgICAgICBpZiAocmhzLm1fbGFiZWxzKSB7CiAgICAgICAgICAgICBtX2xhYmVscyA9IGFkb3B0
UHRyKG5ldyBMYWJlbFN0YWNrKTsKLQotICAgICAgICAgICAgdHlwZWRlZiBMYWJlbFN0YWNrOjpj
b25zdF9pdGVyYXRvciBpdGVyYXRvcjsKLSAgICAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IHJocy5t
X2xhYmVscy0+ZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gcmhzLm1fbGFi
ZWxzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgbV9sYWJlbHMt
PmFwcGVuZChTY29wZUxhYmVsSW5mbyhpdC0+bV9pZGVudCwgaXQtPm1faXNMb29wKSk7CisgICAg
ICAgICAgICBmb3IgKGF1dG8gbGFiZWwgOiAqcmhzLm1fbGFiZWxzKQorICAgICAgICAgICAgICAg
IG1fbGFiZWxzLT5hcHBlbmQoU2NvcGVMYWJlbEluZm8obGFiZWwubV9pZGVudCwgbGFiZWwubV9p
c0xvb3ApKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmNwcAppbmRleCBjYzYzMDIxN2RmN2ZkMjVhZGU0YzRiYjM5ODU3NGQ2N2Q1YTc0
NTY5Li43OWNkNjdhNjc4MTdiZGRmYWVkZGYzYzUwNjg2YzQ4MmM5MjA0NTA3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcApAQCAtMzUyLDcgKzM1Miw3IEBAIGJv
b2wgSlNBcnJheTo6c2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIG5ld0xlbmd0aCwgYm9vCiAgICAgICAgICAgICAvLyBwcm9wZXJ0aWVzLCBzbyB3ZSBo
YXZlIHRvIHBlcmZvcm0gZGVsZXRpb24gd2l0aCBjYXV0aW9uLCBpZiBub3Qgd2UgY2FuCiAgICAg
ICAgICAgICAvLyBkZWxldGUgdmFsdWVzIGluIGFueSBvcmRlci4KICAgICAgICAgICAgIGlmICht
YXAtPnNwYXJzZU1vZGUoKSkgewotICAgICAgICAgICAgICAgIHFzb3J0KGtleXMuYmVnaW4oKSwg
a2V5cy5zaXplKCksIHNpemVvZih1bnNpZ25lZCksIGNvbXBhcmVLZXlzRm9yUVNvcnQpOworICAg
ICAgICAgICAgICAgIHFzb3J0KGtleXMuZGF0YSgpLCBrZXlzLnNpemUoKSwgc2l6ZW9mKHVuc2ln
bmVkKSwgY29tcGFyZUtleXNGb3JRU29ydCk7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaSA9
IGtleXMuc2l6ZSgpOwogICAgICAgICAgICAgICAgIHdoaWxlIChpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0ga2V5c1stLWldOwpAQCAtMTE5MSwxMyArMTE5MSwxMyBA
QCB2b2lkIEpTQXJyYXk6OnNvcnRDb21wYWN0ZWRWZWN0b3IoRXhlY1N0YXRlKiBleGVjLCBDb250
aWd1b3VzRGF0YTxTdG9yYWdlVHlwZT4gZAogICAgICAgICAKICNpZiBIQVZFKE1FUkdFU09SVCkK
ICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQotICAgICAgICBxc29ydCh2YWx1ZXMu
YmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVC
eVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAgICAgIHFzb3J0KHZhbHVlcy5kYXRhKCksIHZhbHVl
cy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9y
UVNvcnQpOwogICAgIGVsc2UKLSAgICAgICAgbWVyZ2Vzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1
ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZv
clFTb3J0KTsKKyAgICAgICAgbWVyZ2Vzb3J0KHZhbHVlcy5kYXRhKCksIHZhbHVlcy5zaXplKCks
IHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwog
I2Vsc2UKICAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5
IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgogICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90
IHNwZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3Jt
IGEgc3RhYmxlIHNvcnQuCi0gICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCks
IHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwor
ICAgIHFzb3J0KHZhbHVlcy5kYXRhKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmlu
Z1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2VuZGlmCiAgICAgCiAgICAg
Ly8gSWYgdGhlIHRvU3RyaW5nIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUgYXJy
YXkgb3IgdmVjdG9yIHN0b3JhZ2UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvUHJvZmlsZVRyZWVOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJv
ZmlsZVRyZWVOb2RlLmgKaW5kZXggODhkNTdmM2RkNGU3OTc2OWQxZDA2YzNhODU5MTAxYjU1NWM2
YTgzZi4uZGQzYzEyMWQwZWJiMTZlOGE1MjQ2MWZhYWNkYmJiNGQ5ODdkNzJiMiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaApAQCAtODYsNyArODYs
NyBAQCBwcml2YXRlOgogICAgICAgICBWZWN0b3I8TWFwRW50cnkqPiBlbnRyaWVzOwogICAgICAg
ICBmb3IgKE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLT5iZWdpbigpOyBpdCAhPSBtX2No
aWxkcmVuLT5lbmQoKTsgKytpdCkKICAgICAgICAgICAgIGVudHJpZXMuYXBwZW5kKCYqaXQpOwot
ICAgICAgICBxc29ydChlbnRyaWVzLmJlZ2luKCksIGVudHJpZXMuc2l6ZSgpLCBzaXplb2YoTWFw
RW50cnkqKSwgY29tcGFyZUVudHJpZXMpOworICAgICAgICBxc29ydChlbnRyaWVzLmRhdGEoKSwg
ZW50cmllcy5zaXplKCksIHNpemVvZihNYXBFbnRyeSopLCBjb21wYXJlRW50cmllcyk7CiAKICAg
ICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBjaGlsZHJlbiBpbiBzYW1wbGUtZnJlcXVlbmN5IG9y
ZGVyLgogICAgICAgICBmb3IgKHNpemVfdCBlID0gMDsgZSA8IGVudHJpZXMuc2l6ZSgpOyArK2Up
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKaW5kZXggZTNhM2E5MzJjZTdl
ZDczOGYxOTg2YjJiZjJiNzQzZTA0MjNhM2IyNS4uZDI2OGU1OWUxMmJiNGU4MzY4Y2UzOTIwNjg3
OGFjODE2MmUzYjQyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFy
ckpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKQEAg
LTIyMyw3ICsyMjMsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2Vt
YmxlciB7CiAgICAgICAgIGlmIChjaGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUoKSkgewogICAgICAg
ICAgICAgdW5zaWduZWQgbWF0Y2hJbmRleCA9IDA7CiAgICAgICAgICAgICBKdW1wTGlzdCBmYWls
dXJlczsKLSAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3NSYW5nZShjaGFyYWN0ZXIsIGZh
aWx1cmVzLCBtYXRjaERlc3QsIGNoYXJDbGFzcy0+bV9yYW5nZXMuYmVnaW4oKSwgY2hhckNsYXNz
LT5tX3Jhbmdlcy5zaXplKCksICZtYXRjaEluZGV4LCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5iZWdp
bigpLCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5zaXplKCkpOworICAgICAgICAgICAgbWF0Y2hDaGFy
YWN0ZXJDbGFzc1JhbmdlKGNoYXJhY3RlciwgZmFpbHVyZXMsIG1hdGNoRGVzdCwgY2hhckNsYXNz
LT5tX3Jhbmdlcy5kYXRhKCksIGNoYXJDbGFzcy0+bV9yYW5nZXMuc2l6ZSgpLCAmbWF0Y2hJbmRl
eCwgY2hhckNsYXNzLT5tX21hdGNoZXMuZGF0YSgpLCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5zaXpl
KCkpOwogICAgICAgICAgICAgd2hpbGUgKG1hdGNoSW5kZXggPCBjaGFyQ2xhc3MtPm1fbWF0Y2hl
cy5zaXplKCkpCiAgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChicmFuY2gzMihFcXVh
bCwgY2hhcmFjdGVyLCBJbW0zMigodW5zaWduZWQgc2hvcnQpY2hhckNsYXNzLT5tX21hdGNoZXNb
bWF0Y2hJbmRleCsrXSkpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYudmN4cHJvai9X
VEYudmN4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oKaW5kZXggOWY4
YTBhZDRmMDY5ZTQ4MGM4N2EyMDQ5MDBkNzI3YTQyNjNmZGNiZC4uZTBkZmEwNWViNWMzNTIxYjA0
ZmY4NjAwNzlmZTNjMGZhNjFlNjhiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYudmN4cHJv
ai9XVEYudmN4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCkBA
IC0yMTksNiArMjE5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxIYXNoVGFi
bGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxIYXNoVHJhaXRzLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSGV4TnVtYmVyLmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSW5kZXhlZEl0ZXJhdG9yLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlx3dGZcSXRlcmF0b3JBZGFwdG9ycy5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cd3RmXEl0ZXJhdG9yUmFuZ2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxMaXN0SGFzaFNldC5oIiAvPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9X
VEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL1dURi9XVEYudmN4cHJvai9X
VEYudmN4cHJvai5maWx0ZXJzCmluZGV4IDU5NTNhMGY0MmFmZDc1MDc2YmY5ODVkNTk4MzBkOWJl
Yzg2MzVmNzUuLjAxMDg5Y2I5MGJkYzUwMDRhNzBmMGQ0ODEyMjA3OTg4YTI0MjIyOGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVycworKysgYi9T
b3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMKQEAgLTQ2Nyw2ICs0Njcs
OSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEhleE51bWJlci5oIj4KICAgICAg
IDxGaWx0ZXI+d3RmPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlx3dGZcSW5kZXhlZEl0ZXJhdG9yLmgiPgorICAgICAgPEZpbHRlcj53dGY8L0Zp
bHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxJ
dGVyYXRvckFkYXB0b3JzLmgiPgogICAgICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4KICAgICA8L0Ns
SW5jbHVkZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDRj
NzczMGFlNzZkZDkyNGQ3MjhlNWUxYmMyZWQ4ODFmOTI2NGM4NWMuLmQyMjI4Y2E3NjQ4MjdhMzE3
OWFkNGU0NDQzYmExZmUwMTRiMTBiOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTAwLDYgKzEwMCw3IEBACiAJCUE3NDg3NDUyMTdBMEJEQUUwMEZBMDRD
QiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3NDg3NDRGMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJI
YXNoLmNwcCAqLzsgfTsKIAkJQTc0ODc0NTMxN0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rl
ckhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
NDg3NDUwMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmggKi87IH07CiAJCUE3
NDg3NDU0MTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJpbmdIYXNoRHVtcENvbnRleHQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NDg3NDUxMTdBMEJEQUUw
MEZBMDRDQiAvKiBTdHJpbmdIYXNoRHVtcENvbnRleHQuaCAqLzsgfTsKKwkJQTdEQzJGMDQxQTA5
QTIyRDAwNzJGNEUzIC8qIEluZGV4ZWRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEQzJGMDMxQTA5OURFMzAwNzJGNEUzIC8qIEluZGV4
ZWRJdGVyYXRvci5oICovOyB9OwogCQlBN0U2NDNDNjE3QzU0MjNCMDAzQkIxNkIgLyogQ29tcHJl
c3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTdFNjQzQzQxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXByZXNzaW9uLmNwcCAqLzsgfTsKIAkJQTdF
NjQzQzcxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXByZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0U2NDNDNTE3QzU0MjNCMDAzQkIxNkIgLyog
Q29tcHJlc3Npb24uaCAqLzsgfTsKIAkJQTg3NkRCRDgxNTE4MTZFNTAwREFEQjk1IC8qIFBsYXRm
b3JtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODc2
REJENzE1MTgxNkU1MDBEQURCOTUgLyogUGxhdGZvcm0uaCAqLzsgfTsKQEAgLTM5Myw2ICszOTQs
NyBAQAogCQlBNzQ4NzQ0RjE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaXhDaGFyYWN0ZXJIYXNoLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc0ODc0NTAxN0EwQkRBRTAwRkEwNENC
IC8qIFNpeENoYXJhY3Rlckhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2l4Q2hhcmFjdGVySGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzQ4NzQ1
MTE3QTBCREFFMDBGQTA0Q0IgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBN0RDMkYwMzFBMDk5REUzMDA3MkY0RTMgLyogSW5kZXhlZEl0
ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4ZWRJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBN0U2NDNDNDE3QzU0MjNCMDAzQkIxNkIgLyogQ29tcHJlc3Npb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcHJlc3Npb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0U2NDNDNTE3QzU0MjNCMDAzQkIxNkIg
LyogQ29tcHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcHJl
c3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg3NkRCRDcxNTE4MTZFNTAw
REFEQjk1IC8qIFBsYXRmb3JtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBs
YXRmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04OTgsNiArOTAwLDcgQEAK
IAkJCQk5NzRDRkM4RDE2QTRGMzI3MDA2RDU0MDQgLyogV2Vha1B0ci5oICovLAogCQkJCUE4QTQ3
MzdBMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmNwcCAqLywKIAkJCQlBOEE0NzM3
QjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oICovLAorCQkJCUE3REMyRjAzMUEw
OTlERTMwMDcyRjRFMyAvKiBJbmRleGVkSXRlcmF0b3IuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0g
d3RmOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTEwNzEsNiArMTA3NCw3IEBACiAJ
CQkJQThBNDczQUQxNTFBODI1QjAwNDEyM0ZGIC8qIGNhY2hlZC1wb3dlcnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4QTQ3NDVFMTUxQTgyNUIwMDQxMjNGRiAvKiBDaGFyYWN0ZXJOYW1lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOTQxNTFBODI1QjAwNDEyM0ZGIC8qIENoZWNrZWRBcml0
aG1ldGljLmggaW4gSGVhZGVycyAqLywKKwkJCQlBN0RDMkYwNDFBMDlBMjJEMDA3MkY0RTMgLyog
SW5kZXhlZEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM5NTE1MUE4MjVCMDA0
MTIzRkYgLyogQ2hlY2tlZEJvb2xlYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDVGMTUx
QTgyNUIwMDQxMjNGRiAvKiBDb2xsYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDNEVERTYx
Njk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRlci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9JbmRleGVkSXRlcmF0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL0lu
ZGV4ZWRJdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQxMjI0NGM4Yjg4ZWM3ZjEwZjBlMWU1MzAxMDRj
YjdkYjFkYWZkN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9JbmRleGVkSXRl
cmF0b3IuaApAQCAtMCwwICsxLDM1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV1RGX0luZGV4ZWRJdGVyYXRvcl9oCisjZGVmaW5lIFdU
Rl9JbmRleGVkSXRlcmF0b3JfaAorCituYW1lc3BhY2UgV1RGIHsKKworI2RlZmluZSBJTkRFWEVE
X0lURVJBVE9SX09WRVJGTE9XKGNoZWNrKSBkbyB7XAorICAgIGlmICghKGNoZWNrKSlcCisgICAg
ICAgIE92ZXJmbG93SGFuZGxlcjo6b3ZlcmZsb3dlZCgpO1wKK30gd2hpbGUgKDApCisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBWZWN0b3JUeXBlLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXIgPSBDcmFzaE9uT3ZlcmZsb3c+IHN0cnVjdCBJbmRleGVkSXRlcmF0b3IgeworICAgIHR5
cGVkZWYgc3RydWN0IEluZGV4ZWRJdGVyYXRvcjxjb25zdCBWZWN0b3JUeXBlLCBjb25zdCBULCBP
dmVyZmxvd0hhbmRsZXI+IGNvbnN0X2l0ZXJhdG9yOworCisgICAgdHlwZWRlZiBUIFZhbHVlVHlw
ZTsKKyAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CisgICAgdHlwZWRlZiBW
YWx1ZVR5cGUgdmFsdWVfdHlwZTsKKyAgICB0eXBlZGVmIFZhbHVlVHlwZSogcG9pbnRlcjsKKyAg
ICB0eXBlZGVmIFZhbHVlVHlwZSYgcmVmZXJlbmNlOworICAgIHR5cGVkZWYgc3RkOjpiaWRpcmVj
dGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKworICAgIEluZGV4ZWRJdGVy
YXRvcigpCisgICAgICAgIDogbV92ZWN0b3IobnVsbHB0cikKKyAgICAgICAgLCBtX3Bvc2l0aW9u
KDApCisgICAgeworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvcihWZWN0b3JUeXBlJiB2ZWN0
b3IsIFZhbHVlVHlwZSogcG9zaXRpb24pCisgICAgICAgIDogbV92ZWN0b3IoJnZlY3RvcikKKyAg
ICAgICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uIC0gdmVjdG9yLmRhdGEoKSkKKyAgICB7CisgICAg
fQorCisgICAgSW5kZXhlZEl0ZXJhdG9yKGNvbnN0IEluZGV4ZWRJdGVyYXRvciYgb3RoZXIpCisg
ICAgICAgIDogbV92ZWN0b3Iob3RoZXIubV92ZWN0b3IpCisgICAgICAgICwgbV9wb3NpdGlvbihv
dGhlci5tX3Bvc2l0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBWYWx1ZVR5cGUqIG9wZXJhdG9y
LT4oKSBjb25zdCB7IHJldHVybiAmbV92ZWN0b3ItPmF0KG1fcG9zaXRpb24pOyB9CisgICAgVmFs
dWVUeXBlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci0+YXQobV9wb3NpdGlv
bik7IH0KKyAgICBWYWx1ZVR5cGUqIGdldCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1f
dmVjdG9yKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIElOREVYRURfSVRF
UkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA8PSBtX3ZlY3Rvci0+c2l6ZSgpKTsKKyAgICAgICAg
cmV0dXJuIG1fdmVjdG9yLT5kYXRhKCkgKyBtX3Bvc2l0aW9uOworICAgIH0KKworICAgIEluZGV4
ZWRJdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgeworICAgICAgICBtX3Bvc2l0aW9uKys7Cisg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0
b3IrKyhpbnQpCisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsK
KyAgICAgICAgbV9wb3NpdGlvbisrOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIEluZGV4ZWRJdGVyYXRvciYgb3BlcmF0b3ItLSgpCisgICAgeworICAgICAgICBtX3Bvc2l0
aW9uLS07CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0
b3Igb3BlcmF0b3ItLShpbnQpCisgICAgeworICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0
KCp0aGlzKTsKKyAgICAgICAgbV9wb3NpdGlvbi0tOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQg
Y29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KKyAgICB0
eXBlZGVmIHNpemVfdCAoSW5kZXhlZEl0ZXJhdG9yOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7Cisg
ICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9y
ID8gJkluZGV4ZWRJdGVyYXRvcjo6bV9wb3NpdGlvbiA6IG51bGxwdHI7IH0KKworI2lmIF9fU0la
RU9GX1NJWkVfVF9fICE9IF9fU0laRU9GX0lOVF9fIHx8IFBMQVRGT1JNKENPQ09BKQorI2RlZmlu
ZSBfVU5TSUdORURfSWZfRElGRkVSRU5UKG1hY3JvKSBtYWNybyh1bnNpZ25lZCkKKyNlbHNlCisj
ZGVmaW5lIF9VTlNJR05FRF9JZl9ESUZGRVJFTlQobWFjcm8pCisjZW5kaWYKKworI2RlZmluZSBG
T1JfRUFDSF9JTlRFR0VSX1RZUEUobWFjcm8pIFwKKyAgICBtYWNybyhzaXplX3QpIFwKKyAgICBt
YWNybyhpbnQzMl90KSBcCisgICAgbWFjcm8obG9uZykgXAorICAgIG1hY3JvKGxvbmcgbG9uZykg
XAorICAgIG1hY3JvKHVuc2lnbmVkIGxvbmcgbG9uZykgXAorICAgIF9VTlNJR05FRF9JZl9ESUZG
RVJFTlQobWFjcm8pCisKKyNkZWZpbmUgTU9ESUZJRVJfT1BTKHR5cGUpIFwKKyAgICBJbmRleGVk
SXRlcmF0b3ImIG9wZXJhdG9yKz0odHlwZSBpbmNyZW1lbnQpIFwKKyAgICB7IFwKKyAgICAgICAg
bV9wb3NpdGlvbiArPSBpbmNyZW1lbnQ7IFwKKyAgICAgICAgcmV0dXJuICp0aGlzOyBcCisgICAg
fSBcCitcCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvci09KHR5cGUgZGVjcmVtZW50KSBc
CisgICAgeyBcCisgICAgICAgIG1fcG9zaXRpb24gLT0gZGVjcmVtZW50OyBcCisgICAgICAgIHJl
dHVybiAqdGhpczsgXAorICAgIH0KKworICAgIEZPUl9FQUNIX0lOVEVHRVJfVFlQRShNT0RJRklF
Ul9PUFMpCisKKyN1bmRlZiBNT0RJRklFUl9PUFMKKworI2RlZmluZSBBUklUSE1FVElDX09QUyh0
eXBlKSBcCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9yKyh0eXBlIGluY3JlbWVudCkgY29u
c3QgXAorICAgIHsgXAorICAgICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsgXAor
ICAgICAgICByZXN1bHQubV9wb3NpdGlvbiArPSBpbmNyZW1lbnQ7IFwKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsgXAorICAgIH0gXAorXAorICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0odHlw
ZSBkZWNyZW1lbnQpIGNvbnN0IFwKKyAgICB7IFwKKyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJl
c3VsdCgqdGhpcyk7IFwKKyAgICAgICAgcmVzdWx0Lm1fcG9zaXRpb24gLT0gZGVjcmVtZW50OyBc
CisgICAgICAgIHJldHVybiByZXN1bHQ7IFwKKyAgICB9CisKKworICAgIEZPUl9FQUNIX0lOVEVH
RVJfVFlQRShBUklUSE1FVElDX09QUykKKworI3VuZGVmIEFSSVRITUVUSUNfT1BTCisKKyAgICBw
dHJkaWZmX3Qgb3BlcmF0b3ItKGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiByaWdodCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3Bvc2l0aW9uIC0gcmlnaHQubV9wb3NpdGlvbjsKKyAgICB9
CisKKyAgICBwdHJkaWZmX3Qgb3BlcmF0b3ItKGNvbnN0IFZhbHVlVHlwZSogcmlnaHQpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gZ2V0KCkgLSByaWdodDsKKyAgICB9CisKKyAgICB2b2lk
IG9wZXJhdG9yPShjb25zdCBJbmRleGVkSXRlcmF0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAg
bV92ZWN0b3IgPSBvdGhlci5tX3ZlY3RvcjsKKyAgICAgICAgbV9wb3NpdGlvbiA9IG90aGVyLm1f
cG9zaXRpb247CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA9PSBv
dGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29u
c3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdl
dCgpICE9IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuc2Fm
ZUdldCgpID09IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWYWx1
ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpICE9
IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZhbHVlVHlwZSogb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPCBvdGhlcjsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgVmFsdWVUeXBlKiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA8PSBvdGhlcjsKKyAgICB9CisKKyAg
ICBib29sIG9wZXJhdG9yPChjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPCBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9
CisKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpIDw9IG90aGVyLnVuc2FmZUdldCgp
OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEluZGV4ZWRJdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPiBvdGhlci51bnNh
ZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgY29uc3RfaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpID49IG90
aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFZhbHVl
VHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPiBv
dGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgVmFsdWVUeXBlKiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA+PSBvdGhlcjsKKyAg
ICB9CisKKyAgICBvcGVyYXRvciBjb25zdF9pdGVyYXRvcigpIGNvbnN0CisgICAgeworICAgICAg
ICBjb25zdF9pdGVyYXRvciByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZlY3RvciA9IG1fdmVj
dG9yOworICAgICAgICByZXN1bHQubV9wb3NpdGlvbiA9IG1fcG9zaXRpb247CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgVmVjdG9yVHlwZSogbV92ZWN0b3I7CisgICAgc2l6
ZV90IG1fcG9zaXRpb247CisKKyAgICBWYWx1ZVR5cGUqIHVuc2FmZUdldCgpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoIW1fdmVjdG9yKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBnZXQoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgdHlw
ZW5hbWUgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPjo6VmFs
dWVUeXBlKiBnZXRQdHIoSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5k
bGVyPiBwKQoreworICAgIHJldHVybiBwLmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUg
cHRyZGlmZl90IG9wZXJhdG9yLShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJ
dGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJl
dHVybiBsZWZ0IC0gcmlnaHQuZ2V0KCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBl
bmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBwdHJkaWZm
X3Qgb3BlcmF0b3ItKFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZh
bHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIGxlZnQgLSBy
aWdodC5nZXQoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlw
ZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIHB0cmRpZmZfdCBvcGVyYXRvci0o
Y29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8Y29uc3QgVCwgY29u
c3QgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gbGVm
dCAtIHJpZ2h0LmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFs
dWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3Zl
cmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID09IGxlZnQ7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0
LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiBy
aWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPT0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRv
cjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiBy
aWdodCAhPSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVU
eXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwg
T3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ICE9IGxlZnQ7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPD0oVmFsdWVUeXBlKiBsZWZ0LCBj
b25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdo
dCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPj0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5l
IGJvb2wgb3BlcmF0b3I8PShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVy
YXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVy
biByaWdodCA+PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFs
dWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj49
KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3Zl
cmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0IDw9IGxlZnQ7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0
LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiBy
aWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPD0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5s
aW5lIGJvb2wgb3BlcmF0b3I8KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9y
PFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJp
Z2h0ID4gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlw
ZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0
IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3Zl
cmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID4gbGVmdDsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I+KFZhbHVlVHlwZSogbGVmdCwgY29uc3Qg
SW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7
CisgICAgcmV0dXJuIHJpZ2h0IDwgbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wg
b3BlcmF0b3I+KGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQs
IFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0
IDwgbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFZlY3RvclR5cGUsIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlcj4gc3RydWN0IEluZGV4ZWRJdGVyYXRvclNlbGVjdG9yIHsKKyAgICB0eXBl
ZGVmIHR5cGVuYW1lIFZlY3RvclR5cGU6OlZhbHVlVHlwZSBWYWx1ZVR5cGU7CisgICAgdHlwZWRl
ZiBJbmRleGVkSXRlcmF0b3I8VmVjdG9yVHlwZSwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+
IGl0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3I6OmNvbnN0X2l0ZXJhdG9y
IGNvbnN0X2l0ZXJhdG9yOworICAgIHN0YXRpYyBpdGVyYXRvciBtYWtlSXRlcmF0b3IoVmVjdG9y
VHlwZSYgdmVjdG9yLCBWYWx1ZVR5cGUqIHApIHsgcmV0dXJuIGl0ZXJhdG9yKHZlY3RvciwgcCk7
IH0KKyAgICBzdGF0aWMgY29uc3RfaXRlcmF0b3IgbWFrZUNvbnN0SXRlcmF0b3IoY29uc3QgVmVj
dG9yVHlwZSYgdmVjdG9yLCBjb25zdCBWYWx1ZVR5cGUqIHApIHsgcmV0dXJuIGNvbnN0X2l0ZXJh
dG9yKHZlY3RvciwgcCk7IH0KK307CisKKyN1bmRlZiBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9X
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJy
YXkuaCBiL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCmluZGV4IGE1NWQ3YWVlYWI4
NGI5YzQ5NTE5NmU4ZTIzMGExZGMxNzg1MTkzYWIuLjgxMWU5ZmZjZWEzMzdhNmM3ZDhiMjkxNjMw
ZTJhZmRmOGU1NjYzOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJh
eS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCkBAIC04Myw3ICs4Myw3
IEBAIHB1YmxpYzoKICAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5yZWZDb3Vu
dCA9IDE7CiAgICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+bGVuZ3RoID0gb3Ro
ZXIuc2l6ZSgpOwogICAgICAgICBBU1NFUlQoSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5s
ZW5ndGggPT0gb3RoZXIuc2l6ZSgpKTsKLSAgICAgICAgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD46
OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpLCBtX2RhdGEpOwor
ICAgICAgICBWZWN0b3JUeXBlT3BlcmF0aW9uczxUPjo6dW5pbml0aWFsaXplZENvcHkoZ2V0UHRy
KG90aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuZW5kKCkpLCBtX2RhdGEpOwogICAgIH0KICAg
ICAKICAgICBSZWZDb3VudGVkQXJyYXkmIG9wZXJhdG9yPShjb25zdCBSZWZDb3VudGVkQXJyYXkm
IG90aGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVmVjdG9yLmggYi9Tb3VyY2UvV1RG
L3d0Zi9WZWN0b3IuaAppbmRleCAyNzQ1NjhhNjkxYzY0YTAzNDIzYTRmMmI3MzQ4NzdlNjIwNzJk
OTFlLi40YWFhNDhhYzI0YTQyZmU5OWE4MDhlYTdiMWVkMmI4ZDA4MjJjMDA2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaApA
QCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8d3RmL0NoZWNr
ZWRBcml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL0luZGV4ZWRJdGVyYXRvci5oPgogI2luY2x1ZGUg
PHd0Zi9NYWxsb2NQdHIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC01NTQsMTQgKzU1NiwxNyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IDAsIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlciA9IENyYQogY2xhc3MgVmVjdG9yIDogcHJpdmF0ZSBWZWN0b3JCdWZmZXI8VCwgaW5saW5l
Q2FwYWNpdHk+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHByaXZhdGU6CisKICAg
ICB0eXBlZGVmIFZlY3RvckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eT4gQmFzZTsKICAgICB0eXBl
ZGVmIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+IFR5cGVPcGVyYXRpb25zOworICAgIHR5cGVkZWYg
SW5kZXhlZEl0ZXJhdG9yU2VsZWN0b3I8VmVjdG9yLCBPdmVyZmxvd0hhbmRsZXI+IEl0ZXJhdG9y
U2VsZWN0b3I7CiAKIHB1YmxpYzoKICAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOwogCi0gICAgdHlw
ZWRlZiBUKiBpdGVyYXRvcjsKLSAgICB0eXBlZGVmIGNvbnN0IFQqIGNvbnN0X2l0ZXJhdG9yOwor
ICAgIHR5cGVkZWYgdHlwZW5hbWUgSXRlcmF0b3JTZWxlY3Rvcjo6aXRlcmF0b3IgaXRlcmF0b3I7
CisgICAgdHlwZWRlZiB0eXBlbmFtZSBJdGVyYXRvclNlbGVjdG9yOjpjb25zdF9pdGVyYXRvciBj
b25zdF9pdGVyYXRvcjsKKwogICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJh
dG9yPiByZXZlcnNlX2l0ZXJhdG9yOwogICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9y
PGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogCkBAIC01NzQsMTQgKzU3
OSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIDogQmFzZShzaXplLCBzaXplKQogICAgIHsKICAgICAg
ICAgaWYgKGJlZ2luKCkpCi0gICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShi
ZWdpbigpLCBlbmQoKSk7CisgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShn
ZXRQdHIoYmVnaW4oKSksIGdldFB0cihlbmQoKSkpOwogICAgIH0KIAogICAgIFZlY3Rvcih1bnNp
Z25lZCBzaXplLCBjb25zdCBUJiB2YWwpCiAgICAgICAgIDogQmFzZShzaXplLCBzaXplKQogICAg
IHsKICAgICAgICAgaWYgKGJlZ2luKCkpCi0gICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5p
bml0aWFsaXplZEZpbGwoYmVnaW4oKSwgZW5kKCksIHZhbCk7CisgICAgICAgICAgICBUeXBlT3Bl
cmF0aW9uczo6dW5pbml0aWFsaXplZEZpbGwoZ2V0UHRyKGJlZ2luKCkpLCBnZXRQdHIoZW5kKCkp
LCB2YWwpOwogICAgIH0KIAogICAgIFZlY3RvcihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4gaW5p
dGlhbGl6ZXJMaXN0KQpAQCAtNjQ1LDEwICs2NTAsMTAgQEAgcHVibGljOgogICAgIGNvbnN0IFQq
IGRhdGEoKSBjb25zdCB7IHJldHVybiBCYXNlOjpidWZmZXIoKTsgfQogICAgIHN0YXRpYyBwdHJk
aWZmX3QgZGF0YU1lbW9yeU9mZnNldCgpIHsgcmV0dXJuIEJhc2U6OmJ1ZmZlck1lbW9yeU9mZnNl
dCgpOyB9CiAKLSAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGRhdGEoKTsgfQotICAgIGl0
ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGJlZ2luKCkgKyBtX3NpemU7IH0KLSAgICBjb25zdF9pdGVy
YXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGRhdGEoKTsgfQotICAgIGNvbnN0X2l0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgKyBtX3NpemU7IH0KKyAgICBpdGVyYXRvciBi
ZWdpbigpIHsgcmV0dXJuIEl0ZXJhdG9yU2VsZWN0b3I6Om1ha2VJdGVyYXRvcigqdGhpcywgZGF0
YSgpKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGJlZ2luKCkgKyBzaXplKCk7IH0K
KyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIEl0ZXJhdG9yU2VsZWN0
b3I6Om1ha2VDb25zdEl0ZXJhdG9yKCp0aGlzLCBkYXRhKCkpOyB9CisgICAgY29uc3RfaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSArIHNpemUoKTsgfQogCiAgICAgcmV2ZXJz
ZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQog
ICAgIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVn
aW4oKSk7IH0KQEAgLTY4Myw2ICs2ODgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKCkg
eyBzaHJpbmtDYXBhY2l0eSgwKTsgfQogCisgICAgdm9pZCBhcHBlbmQoY29uc3RfaXRlcmF0b3Is
IHVuc2lnbmVkKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIGFwcGVuZChjb25zdCBV
KiwgdW5zaWduZWQpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKFUmJik7
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCB1bmNoZWNrZWRBcHBlbmQoVSYmIHZhbCk7
CkBAIC03NDYsNyArNzUyLDcgQEAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXI+OjpWZWN0b3IoY29uc3QgVmVjdG9yJiBvdGhlcikKICAgICA6IEJhc2Uob3RoZXIuY2Fw
YWNpdHkoKSwgb3RoZXIuc2l6ZSgpKQogewogICAgIGlmIChiZWdpbigpKQotICAgICAgICBUeXBl
T3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCks
IGJlZ2luKCkpOworICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkoZ2V0
UHRyKG90aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgpAQCAtNzU1LDcgKzc2MSw3IEBAIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6VmVjdG9yKGNvbnN0IFZlY3RvcjxULCBvdGhl
ckNhcGFjaXR5CiAgICAgOiBCYXNlKG90aGVyLmNhcGFjaXR5KCksIG90aGVyLnNpemUoKSkKIHsK
ICAgICBpZiAoYmVnaW4oKSkKLSAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRD
b3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpLCBiZWdpbigpKTsKKyAgICAgICAgVHlwZU9w
ZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KGdldFB0cihvdGhlci5iZWdpbigpKSwgZ2V0UHRy
KG90aGVyLmVuZCgpKSwgZ2V0UHRyKGJlZ2luKCkpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KQEAg
LTc3Miw4ICs3NzgsOCBAQCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
cj4mIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYQogICAgICAgICBBU1NFUlQo
YmVnaW4oKSk7CiAgICAgfQogICAgIAotICAgIHN0ZDo6Y29weShvdGhlci5iZWdpbigpLCBvdGhl
ci5iZWdpbigpICsgc2l6ZSgpLCBiZWdpbigpKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0
aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSArIHNpemUoKSwgb3RoZXIuZW5kKCksIGVuZCgpKTsK
KyAgICBzdGQ6OmNvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuYmVnaW4o
KSArIHNpemUoKSksIGdldFB0cihiZWdpbigpKSk7CisgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5p
dGlhbGl6ZWRDb3B5KGdldFB0cihvdGhlci5iZWdpbigpICsgc2l6ZSgpKSwgZ2V0UHRyKG90aGVy
LmVuZCgpKSwgZ2V0UHRyKGVuZCgpKSk7CiAgICAgbV9zaXplID0gb3RoZXIuc2l6ZSgpOwogCiAg
ICAgcmV0dXJuICp0aGlzOwpAQCAtNzk3LDkgKzgwMyw5IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyPiYgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhCiAgICAgICAgIHJlc2VydmVDYXBhY2l0eShvdGhlci5zaXplKCkpOwogICAgICAgICBBU1NF
UlQoYmVnaW4oKSk7CiAgICAgfQotICAgIAotICAgIHN0ZDo6Y29weShvdGhlci5iZWdpbigpLCBv
dGhlci5iZWdpbigpICsgc2l6ZSgpLCBiZWdpbigpKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6dW5p
bml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSArIHNpemUoKSwgb3RoZXIuZW5kKCksIGVuZCgp
KTsKKworICAgIHN0ZDo6Y29weShnZXRQdHIob3RoZXIuYmVnaW4oKSksIGdldFB0cihvdGhlci5i
ZWdpbigpICsgc2l6ZSgpKSwgZ2V0UHRyKGJlZ2luKCkpKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6
dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkgKyBzaXplKCkpLCBnZXRQdHIo
b3RoZXIuZW5kKCkpLCBnZXRQdHIoZW5kKCkpKTsKICAgICBtX3NpemUgPSBvdGhlci5zaXplKCk7
CiAKICAgICByZXR1cm4gKnRoaXM7CkBAIC04NTksOCArODY1LDggQEAgdm9pZCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmZpbGwoY29uc3QgVCYgdmFsLCB1bnNp
Z25lZCBuZXcKICAgICAgICAgQVNTRVJUKGJlZ2luKCkpOwogICAgIH0KICAgICAKLSAgICBzdGQ6
OmZpbGwoYmVnaW4oKSwgZW5kKCksIHZhbCk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlh
bGl6ZWRGaWxsKGVuZCgpLCBiZWdpbigpICsgbmV3U2l6ZSwgdmFsKTsKKyAgICBzdGQ6OmZpbGwo
Z2V0UHRyKGJlZ2luKCkpLCBnZXRQdHIoZW5kKCkpLCB2YWwpOworICAgIFR5cGVPcGVyYXRpb25z
Ojp1bmluaXRpYWxpemVkRmlsbChnZXRQdHIoZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkgKyBuZXdT
aXplLCB2YWwpOwogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiB9CiAKQEAgLTg4MSwxMyArODg3LDEz
IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpleHBh
bmRDYXBhY2l0eSh1bnNpZ25lZCBuZXdNaW5DCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25l
ZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogVCogVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpleHBhbmRDYXBhY2l0eSh1bnNpZ25l
ZCBuZXdNaW5DYXBhY2l0eSwgVCogcHRyKQogewotICAgIGlmIChwdHIgPCBiZWdpbigpIHx8IHB0
ciA+PSBlbmQoKSkgeworICAgIGlmIChwdHIgPCBnZXRQdHIoYmVnaW4oKSkgfHwgcHRyID49IGdl
dFB0cihlbmQoKSkpIHsKICAgICAgICAgZXhwYW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpOwog
ICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KLSAgICB1bnNpZ25lZCBpbmRleCA9IHB0ciAtIGJl
Z2luKCk7CisgICAgdW5zaWduZWQgaW5kZXggPSBwdHIgLSBnZXRQdHIoYmVnaW4oKSk7CiAgICAg
ZXhwYW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpOwotICAgIHJldHVybiBiZWdpbigpICsgaW5k
ZXg7CisgICAgcmV0dXJuIGdldFB0cihiZWdpbigpKSArIGluZGV4OwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyPgpAQCAtODk5LDE1ICs5MDUsMTUgQEAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlcj46OnRyeUV4cGFuZENhcGFjaXR5KHVuc2lnbmVkIG5ld00KIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXI+CiBjb25zdCBUKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlcj46OnRyeUV4cGFuZENhcGFjaXR5KHVuc2lnbmVkIG5ld01pbkNhcGFjaXR5LCBjb25zdCBU
KiBwdHIpCiB7Ci0gICAgaWYgKHB0ciA8IGJlZ2luKCkgfHwgcHRyID49IGVuZCgpKSB7CisgICAg
aWYgKHB0ciA8IGdldFB0cihiZWdpbigpKSB8fCBwdHIgPj0gZ2V0UHRyKGVuZCgpKSkgewogICAg
ICAgICBpZiAoIXRyeUV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5KSkKICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KLSAgICB1bnNpZ25lZCBpbmRl
eCA9IHB0ciAtIGJlZ2luKCk7CisgICAgdW5zaWduZWQgaW5kZXggPSBwdHIgLSBnZXRQdHIoYmVn
aW4oKSk7CiAgICAgaWYgKCF0cnlFeHBhbmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0eSkpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIHJldHVybiBiZWdpbigpICsgaW5kZXg7CisgICAgcmV0dXJuIGdl
dFB0cihiZWdpbigpKSArIGluZGV4OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25l
ZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgpAQCAtOTIxLDEyICs5MjcsMTIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWdu
ZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIGlubGluZSB2b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVzaXplKHVuc2ln
bmVkIHNpemUpCiB7CiAgICAgaWYgKHNpemUgPD0gbV9zaXplKQotICAgICAgICBUeXBlT3BlcmF0
aW9uczo6ZGVzdHJ1Y3QoYmVnaW4oKSArIHNpemUsIGVuZCgpKTsKKyAgICAgICAgVHlwZU9wZXJh
dGlvbnM6OmRlc3RydWN0KGdldFB0cihiZWdpbigpKSArIHNpemUsIGdldFB0cihlbmQoKSkpOwog
ICAgIGVsc2UgewogICAgICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgICAgICBl
eHBhbmRDYXBhY2l0eShzaXplKTsKICAgICAgICAgaWYgKGJlZ2luKCkpCi0gICAgICAgICAgICBU
eXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShlbmQoKSwgYmVnaW4oKSArIHNpemUpOworICAgICAg
ICAgICAgVHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoZ2V0UHRyKGVuZCgpKSwgZ2V0UHRyKGJl
Z2luKCkpICsgc2l6ZSk7CiAgICAgfQogICAgIAogICAgIG1fc2l6ZSA9IHNpemU7CkBAIC05NDMs
NyArOTQ5LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHks
IHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXI+OjpzaHJpbmsodW5zaWduZWQgc2l6ZSkKIHsKICAgICBBU1NFUlQo
c2l6ZSA8PSBtX3NpemUpOwotICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChiZWdpbigpICsg
c2l6ZSwgZW5kKCkpOworICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChnZXRQdHIoYmVnaW4o
KSkgKyBzaXplLCBnZXRQdHIoZW5kKCkpKTsKICAgICBtX3NpemUgPSBzaXplOwogfQogCkBAIC05
NTQsNyArOTYwLDcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlcj46Omdyb3codW5zaWduZWQgc2l6ZSkKICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5KCkpCiAg
ICAgICAgIGV4cGFuZENhcGFjaXR5KHNpemUpOwogICAgIGlmIChiZWdpbigpKQotICAgICAgICBU
eXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShlbmQoKSwgYmVnaW4oKSArIHNpemUpOworICAgICAg
ICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShnZXRQdHIoZW5kKCkpLCBnZXRQdHIoYmVnaW4o
KSkgKyBzaXplKTsKICAgICBtX3NpemUgPSBzaXplOwogfQogCkBAIC05NjMsMTEgKzk2OSwxMSBA
QCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVzZXJ2
ZUNhcGFjaXR5KHVuc2lnbmVkIG5ld0NhcAogewogICAgIGlmIChuZXdDYXBhY2l0eSA8PSBjYXBh
Y2l0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgVCogb2xkQnVmZmVyID0gYmVnaW4oKTsKLSAg
ICBUKiBvbGRFbmQgPSBlbmQoKTsKKyAgICBUKiBvbGRCdWZmZXIgPSBnZXRQdHIoYmVnaW4oKSk7
CisgICAgVCogb2xkRW5kID0gZ2V0UHRyKGVuZCgpKTsKICAgICBCYXNlOjphbGxvY2F0ZUJ1ZmZl
cihuZXdDYXBhY2l0eSk7CiAgICAgQVNTRVJUKGJlZ2luKCkpOwotICAgIFR5cGVPcGVyYXRpb25z
Ojptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBiZWdpbigpKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6
bW92ZShvbGRCdWZmZXIsIG9sZEVuZCwgZ2V0UHRyKGJlZ2luKCkpKTsKICAgICBCYXNlOjpkZWFs
bG9jYXRlQnVmZmVyKG9sZEJ1ZmZlcik7CiB9CiAKQEAgLTk3NiwxMiArOTgyLDEyIEBAIGJvb2wg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojp0cnlSZXNlcnZlQ2Fw
YWNpdHkodW5zaWduZWQgbmV3CiB7CiAgICAgaWYgKG5ld0NhcGFjaXR5IDw9IGNhcGFjaXR5KCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIFQqIG9sZEJ1ZmZlciA9IGJlZ2luKCk7Ci0gICAg
VCogb2xkRW5kID0gZW5kKCk7CisgICAgVCogb2xkQnVmZmVyID0gZ2V0UHRyKGJlZ2luKCkpOwor
ICAgIFQqIG9sZEVuZCA9IGdldFB0cihlbmQoKSk7CiAgICAgaWYgKCFCYXNlOjp0cnlBbGxvY2F0
ZUJ1ZmZlcihuZXdDYXBhY2l0eSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBBU1NFUlQo
YmVnaW4oKSk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJl
Z2luKCkpOworICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBnZXRQ
dHIoYmVnaW4oKSkpOwogICAgIEJhc2U6OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEwMDQsMTcgKzEwMTAsMTcgQEAgdm9pZCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnNocmlua0NhcGFjaXR5KHVuc2lnbmVk
IG5ld0NhcGEKICAgICBpZiAobmV3Q2FwYWNpdHkgPCBzaXplKCkpIAogICAgICAgICBzaHJpbmso
bmV3Q2FwYWNpdHkpOwogCi0gICAgVCogb2xkQnVmZmVyID0gYmVnaW4oKTsKKyAgICBUKiBvbGRC
dWZmZXIgPSBnZXRQdHIoYmVnaW4oKSk7CiAgICAgaWYgKG5ld0NhcGFjaXR5ID4gMCkgewogICAg
ICAgICBpZiAoQmFzZTo6c2hvdWxkUmVhbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSkpIHsKICAg
ICAgICAgICAgIEJhc2U6OnJlYWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgVCogb2xkRW5kID0gZW5kKCk7CisgICAg
ICAgIFQqIG9sZEVuZCA9IGdldFB0cihlbmQoKSk7CiAgICAgICAgIEJhc2U6OmFsbG9jYXRlQnVm
ZmVyKG5ld0NhcGFjaXR5KTsKLSAgICAgICAgaWYgKGJlZ2luKCkgIT0gb2xkQnVmZmVyKQotICAg
ICAgICAgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkp
OworICAgICAgICBpZiAoZ2V0UHRyKGJlZ2luKCkpICE9IG9sZEJ1ZmZlcikKKyAgICAgICAgICAg
IFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBnZXRQdHIoYmVnaW4oKSkp
OwogICAgIH0KIAogICAgIEJhc2U6OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKQEAgLTEw
MzQsMTEgKzEwNDAsMTcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlcj46OmFwcGVuZChjb25zdCBVKiBkYXRhLCB1bnNpZ25lZAogICAgIH0KICAgICBpZiAo
bmV3U2l6ZSA8IG1fc2l6ZSkKICAgICAgICAgQ1JBU0goKTsKLSAgICBUKiBkZXN0ID0gZW5kKCk7
CisgICAgVCogZGVzdCA9IGdldFB0cihlbmQoKSk7CiAgICAgVmVjdG9yQ29waWVyPHN0ZDo6aXNf
dHJpdmlhbDxUPjo6dmFsdWUsIFU+Ojp1bmluaXRpYWxpemVkQ29weShkYXRhLCAmZGF0YVtkYXRh
U2l6ZV0sIGRlc3QpOwogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+
Cit2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5k
KGNvbnN0X2l0ZXJhdG9yIGRhdGEsIHVuc2lnbmVkIGRhdGFTaXplKQoreworICAgIGFwcGVuZChn
ZXRQdHIoZGF0YSksIGRhdGFTaXplKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWdu
ZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+
Ojp0cnlBcHBlbmQoY29uc3QgVSogZGF0YSwgdW5zaWduZWQgZGF0YVNpemUpCiB7CkBAIC0xMDUx
LDcgKzEwNjMsNyBAQCBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyPjo6dHJ5QXBwZW5kKGNvbnN0IFUqIGRhdGEsIHVuc2lnbgogICAgIH0KICAgICBpZiAobmV3
U2l6ZSA8IG1fc2l6ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFQqIGRlc3QgPSBlbmQo
KTsKKyAgICBUKiBkZXN0ID0gZ2V0UHRyKGVuZCgpKTsKICAgICBWZWN0b3JDb3BpZXI8c3RkOjpp
c190cml2aWFsPFQ+Ojp2YWx1ZSwgVT46OnVuaW5pdGlhbGl6ZWRDb3B5KGRhdGEsICZkYXRhW2Rh
dGFTaXplXSwgZGVzdCk7CiAgICAgbV9zaXplID0gbmV3U2l6ZTsKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTEwNjEsNyArMTA3Myw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGlu
ZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHRlbXBsYXRlCiBBTFdBWVNfSU5M
SU5FIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjphcHBl
bmQoVSYmIHZhbHVlKQogewogICAgIGlmIChzaXplKCkgIT0gY2FwYWNpdHkoKSkgewotICAgICAg
ICBuZXcgKE5vdE51bGwsIGVuZCgpKSBUKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgICAg
ICBuZXcgKE5vdE51bGwsIGdldFB0cihlbmQoKSkpIFQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
CiAgICAgICAgICsrbV9zaXplOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA3OCw3ICsx
MDkwLDcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46
OmFwcGVuZFNsb3dDYXNlKFUmJiB2YWx1ZSkKICAgICBwdHIgPSBleHBhbmRDYXBhY2l0eShzaXpl
KCkgKyAxLCBwdHIpOwogICAgIEFTU0VSVChiZWdpbigpKTsKIAotICAgIG5ldyAoTm90TnVsbCwg
ZW5kKCkpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKKyAgICBuZXcgKE5vdE51bGwsIGdldFB0
cihlbmQoKSkpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKICAgICArK21fc2l6ZTsKIH0KIApA
QCAtMTA5MSwxNCArMTEwMywxNCBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlcj46OnVuY2hlY2tlZEFwcGVuZChVJiYgdmFsdQogICAgIEFTU0VS
VChzaXplKCkgPCBjYXBhY2l0eSgpKTsKIAogICAgIGF1dG8gcHRyID0gc3RkOjphZGRyZXNzb2Yo
dmFsdWUpOwotICAgIG5ldyAoTm90TnVsbCwgZW5kKCkpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIp
KTsKKyAgICBuZXcgKE5vdE51bGwsIGdldFB0cihlbmQoKSkpIFQoc3RkOjpmb3J3YXJkPFU+KCpw
dHIpKTsKICAgICArK21fc2l6ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5h
bWUgVSwgdW5zaWduZWQgb3RoZXJDYXBhY2l0eT4KIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kVmVjdG9yKGNvbnN0IFZlY3RvcjxV
LCBvdGhlckNhcGFjaXR5PiYgdmFsKQogewotICAgIGFwcGVuZCh2YWwuYmVnaW4oKSwgdmFsLnNp
emUoKSk7CisgICAgYXBwZW5kKGdldFB0cih2YWwuYmVnaW4oKSksIHZhbC5zaXplKCkpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgpAQCAtMTExMiw4ICsxMTI0LDgg
QEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46Omluc2Vy
dCh1bnNpZ25lZCBwb3NpdGlvbiwgY29uc3QKICAgICB9CiAgICAgaWYgKG5ld1NpemUgPCBtX3Np
emUpCiAgICAgICAgIENSQVNIKCk7Ci0gICAgVCogc3BvdCA9IGJlZ2luKCkgKyBwb3NpdGlvbjsK
LSAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGVuZCgpLCBzcG90ICsg
ZGF0YVNpemUpOworICAgIFQqIHNwb3QgPSBnZXRQdHIoYmVnaW4oKSkgKyBwb3NpdGlvbjsKKyAg
ICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGdldFB0cihlbmQoKSksIHNw
b3QgKyBkYXRhU2l6ZSk7CiAgICAgVmVjdG9yQ29waWVyPHN0ZDo6aXNfdHJpdmlhbDxUPjo6dmFs
dWUsIFU+Ojp1bmluaXRpYWxpemVkQ29weShkYXRhLCAmZGF0YVtkYXRhU2l6ZV0sIHNwb3QpOwog
ICAgIG1fc2l6ZSA9IG5ld1NpemU7CiB9CkBAIC0xMTI5LDggKzExNDEsOCBAQCBpbmxpbmUgdm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46Omluc2VydCh1bnNp
Z25lZCBwb3NpdGlvbgogICAgICAgICBBU1NFUlQoYmVnaW4oKSk7CiAgICAgfQogCi0gICAgVCog
c3BvdCA9IGJlZ2luKCkgKyBwb3NpdGlvbjsKLSAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJs
YXBwaW5nKHNwb3QsIGVuZCgpLCBzcG90ICsgMSk7CisgICAgVCogc3BvdCA9IGdldFB0cihiZWdp
bigpKSArIHBvc2l0aW9uOworICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3Bv
dCwgZ2V0UHRyKGVuZCgpKSwgc3BvdCArIDEpOwogICAgIG5ldyAoTm90TnVsbCwgc3BvdCkgVChz
dGQ6OmZvcndhcmQ8VT4oKnB0cikpOwogICAgICsrbV9zaXplOwogfQpAQCAtMTEzOCwxNiArMTE1
MCwxNiBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlcj46Omluc2VydCh1bnNpZ25lZCBwb3NpdGlvbgogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5z
aWduZWQgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8
dHlwZW5hbWUgVSwgdW5zaWduZWQgYz4KIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6aW5zZXJ0VmVjdG9yKHVuc2lnbmVkIHBvc2l0aW9uLCBj
b25zdCBWZWN0b3I8VSwgYz4mIHZhbCkKIHsKLSAgICBpbnNlcnQocG9zaXRpb24sIHZhbC5iZWdp
bigpLCB2YWwuc2l6ZSgpKTsKKyAgICBpbnNlcnQocG9zaXRpb24sIGdldFB0cih2YWwuYmVnaW4o
KSksIHZhbC5zaXplKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogaW5saW5lIHZvaWQgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUodW5zaWduZWQgcG9z
aXRpb24pCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24g
PCBzaXplKCkpOwotICAgIFQqIHNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247CisgICAgVCogc3Bv
dCA9IGdldFB0cihiZWdpbigpKSArIHBvc2l0aW9uOwogICAgIHNwb3QtPn5UKCk7Ci0gICAgVHlw
ZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90ICsgMSwgZW5kKCksIHNwb3QpOworICAg
IFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCArIDEsIGdldFB0cihlbmQoKSks
IHNwb3QpOwogICAgIC0tbV9zaXplOwogfQogCkBAIC0xMTU2LDEwICsxMTY4LDEwIEBAIGlubGlu
ZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3Zl
KHVuc2lnbmVkIHBvc2l0aW9uCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04ocG9zaXRpb24gPD0gc2l6ZSgpKTsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihwb3NpdGlvbiArIGxlbmd0aCA8PSBzaXplKCkpOwotICAgIFQqIGJlZ2luU3BvdCA9IGJl
Z2luKCkgKyBwb3NpdGlvbjsKKyAgICBUKiBiZWdpblNwb3QgPSBnZXRQdHIoYmVnaW4oKSkgKyBw
b3NpdGlvbjsKICAgICBUKiBlbmRTcG90ID0gYmVnaW5TcG90ICsgbGVuZ3RoOwogICAgIFR5cGVP
cGVyYXRpb25zOjpkZXN0cnVjdChiZWdpblNwb3QsIGVuZFNwb3QpOyAKLSAgICBUeXBlT3BlcmF0
aW9uczo6bW92ZU92ZXJsYXBwaW5nKGVuZFNwb3QsIGVuZCgpLCBiZWdpblNwb3QpOworICAgIFR5
cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoZW5kU3BvdCwgZ2V0UHRyKGVuZCgpKSwgYmVn
aW5TcG90KTsKICAgICBtX3NpemUgLT0gbGVuZ3RoOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCAwY2YwOWUx
ZjVlYzk4YTg1MTQ0Y2M3MjJkMmE2Y2M0YWU0ZjkzODk4Li4zZWU4MDY4YTNhNzZhNGE0M2FjNjQz
MjMyNzcyNjQzYzE2MTQ5ZDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTE0MzcsOCArMTQzNyw4IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIGlmIChidWZmZXIuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotICAgICAgICBjb25zdCB1aW50OF90KiBwdHIgPSBidWZmZXIuYmVnaW4o
KTsKLSAgICAgICAgY29uc3QgdWludDhfdCogZW5kID0gYnVmZmVyLmVuZCgpOworICAgICAgICBj
b25zdCB1aW50OF90KiBwdHIgPSBnZXRQdHIoYnVmZmVyLmJlZ2luKCkpOworICAgICAgICBjb25z
dCB1aW50OF90KiBlbmQgPSBnZXRQdHIoYnVmZmVyLmVuZCgpKTsKICAgICAgICAgdWludDMyX3Qg
dmVyc2lvbjsKICAgICAgICAgaWYgKCFyZWFkTGl0dGxlRW5kaWFuKHB0ciwgZW5kLCB2ZXJzaW9u
KSB8fCB2ZXJzaW9uID4gQ3VycmVudFZlcnNpb24pCiAgICAgICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggMmQ5Yjc5ZTEz
YWJmOTYwYTYxNGI5NmQyNzA2NjBlNWYzNWUzNDE3Zi4uZTkyZmIyZjc5MGJlNGM1YzE2NzZjNjk4
YzViZTFiYTY1ZTFhNjkxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNw
cApAQCAtMjA3MywxMSArMjA3MywxMSBAQCBpbmxpbmUgYm9vbCBTZWFyY2hCdWZmZXI6OmlzQmFk
TWF0Y2goY29uc3QgVUNoYXIqIG1hdGNoLCBzaXplX3QgbWF0Y2hMZW5ndGgpIGNvbgogICAgIC8v
IGNyZWF0aW5nIGEgbmV3IG9uZSBlYWNoIHRpbWUuCiAgICAgbm9ybWFsaXplQ2hhcmFjdGVycyht
YXRjaCwgbWF0Y2hMZW5ndGgsIG1fbm9ybWFsaXplZE1hdGNoKTsKIAotICAgIGNvbnN0IFVDaGFy
KiBhID0gbV9ub3JtYWxpemVkVGFyZ2V0LmJlZ2luKCk7Ci0gICAgY29uc3QgVUNoYXIqIGFFbmQg
PSBtX25vcm1hbGl6ZWRUYXJnZXQuZW5kKCk7CisgICAgY29uc3QgVUNoYXIqIGEgPSBnZXRQdHIo
bV9ub3JtYWxpemVkVGFyZ2V0LmJlZ2luKCkpOworICAgIGNvbnN0IFVDaGFyKiBhRW5kID0gZ2V0
UHRyKG1fbm9ybWFsaXplZFRhcmdldC5lbmQoKSk7CiAKLSAgICBjb25zdCBVQ2hhciogYiA9IG1f
bm9ybWFsaXplZE1hdGNoLmJlZ2luKCk7Ci0gICAgY29uc3QgVUNoYXIqIGJFbmQgPSBtX25vcm1h
bGl6ZWRNYXRjaC5lbmQoKTsKKyAgICBjb25zdCBVQ2hhciogYiA9IGdldFB0cihtX25vcm1hbGl6
ZWRNYXRjaC5iZWdpbigpKTsKKyAgICBjb25zdCBVQ2hhciogYkVuZCA9IGdldFB0cihtX25vcm1h
bGl6ZWRNYXRjaC5lbmQoKSk7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAvLyBTa2lw
IHJ1bnMgb2Ygbm9uLWthbmEtbGV0dGVyIGNoYXJhY3RlcnMuIFRoaXMgaXMgbmVjZXNzYXJ5IHNv
IHdlIGNhbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW0KaW5kZXggZDUxY2E1OTlkOTUyMjMyOGYzMjI4MTk2NzdlOWNhYzVlOTQ3
MGZiMC4uNmNkMzRjZmY4OTI5Mzc0OTMzYTA3ZWRlZjRmZTkxODNlZjg5NTlhNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1t
CkBAIC01NDIsNyArNTQyLDcgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpidWls
ZFNlbGVjdGlvbkhpZ2hsaWdodCgpCiAKICAgICAgICAgaWYgKCFjZ1JlY3RzLmlzRW1wdHkoKSkg
ewogICAgICAgICAgICAgQ0dSZWN0IHZpc2libGVSZWN0ID0gbWFpbkZyYW1lVmlldy0+dmlzaWJs
ZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRk
SGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJl
Y3RXaXRoU3R5bGVBbmREaXJlY3Rpb24obnVsbHB0ciwgY2dSZWN0cy5iZWdpbigpLCBjZ1JlY3Rz
LnNpemUoKSwgdmlzaWJsZVJlY3QsIERESGlnaGxpZ2h0U3R5bGVCdWJibGVOb25lIHwgRERIaWdo
bGlnaHRTdHlsZVN0YW5kYXJkSWNvbkFycm93IHwgRERIaWdobGlnaHRTdHlsZUJ1dHRvblNob3dB
bHdheXMsIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOworICAgICAg
ICAgICAgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCA9IGFkb3B0Q0YoRERI
aWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlQW5kRGlyZWN0aW9u
KG51bGxwdHIsIGNnUmVjdHMuZGF0YSgpLCBjZ1JlY3RzLnNpemUoKSwgdmlzaWJsZVJlY3QsIERE
SGlnaGxpZ2h0U3R5bGVCdWJibGVOb25lIHwgRERIaWdobGlnaHRTdHlsZVN0YW5kYXJkSWNvbkFy
cm93IHwgRERIaWdobGlnaHRTdHlsZUJ1dHRvblNob3dBbHdheXMsIFlFUywgTlNXcml0aW5nRGly
ZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBuZXdQ
b3RlbnRpYWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZvclNlbGVjdGlvbigqdGhp
cywgZGRIaWdobGlnaHQsIHNlbGVjdGlvblJhbmdlKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNwcApp
bmRleCBkMWI5MmI3YjYwOWI0NTE5OWM4NGE0NmFlZTlmZGI2YzRmN2NmZWM1Li41MDNiMGU4ZDli
YmYyOTA2Y2U3M2JlYmViYTAxYmQ2MDNlYzc5OTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwCkBAIC0zOSw4ICsz
OSw4IEBAIFNlZ21lbnRlZEZvbnREYXRhOjp+U2VnbWVudGVkRm9udERhdGEoKQogCiBjb25zdCBT
aW1wbGVGb250RGF0YSogU2VnbWVudGVkRm9udERhdGE6OmZvbnREYXRhRm9yQ2hhcmFjdGVyKFVD
aGFyMzIgYykgY29uc3QKIHsKLSAgICBWZWN0b3I8Rm9udERhdGFSYW5nZT46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPEZvbnREYXRhUmFuZ2U+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgIGF1dG8gZW5kID0gbV9yYW5nZXMuZW5kKCk7CisgICAgZm9yIChhdXRvIGl0ID0gbV9y
YW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGlmIChpdC0+ZnJvbSgp
IDw9IGMgJiYgaXQtPnRvKCkgPj0gYykKICAgICAgICAgICAgIHJldHVybiBpdC0+Zm9udERhdGEo
KS5nZXQoKTsKICAgICB9CkBAIC00OSw4ICs0OSw4IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBT
ZWdtZW50ZWRGb250RGF0YTo6Zm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAog
CiBib29sIFNlZ21lbnRlZEZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcihVQ2hhcjMyIGMpIGNv
bnN0CiB7Ci0gICAgVmVjdG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3Jhbmdlcy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBhdXRv
IGVuZCA9IG1fcmFuZ2VzLmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IG1fcmFuZ2VzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoYyA+PSBpdC0+ZnJvbSgpICYmIGMg
PD0gaXQtPnRvKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03Niw4ICs3
Niw4IEBAIGJvb2wgU2VnbWVudGVkRm9udERhdGE6OmlzQ3VzdG9tRm9udCgpIGNvbnN0CiAKIGJv
b2wgU2VnbWVudGVkRm9udERhdGE6OmlzTG9hZGluZygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPEZv
bnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsKLSAgICBm
b3IgKFZlY3RvcjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jhbmdlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBhdXRvIGVuZCA9IG1fcmFuZ2VzLmVuZCgp
OworICAgIGZvciAoYXV0byBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewogICAgICAgICBpZiAoaXQtPmZvbnREYXRhKCktPmlzTG9hZGluZygpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCmluZGV4IDA1MTg3MWFjNmM2MGZiNjQzOTI4MzBhYWM2
YWQzODUyYTk0ZDQ0NzYuLmRkMDk2M2E3NTAxYWQyZWUwNjMxYTVlMTZkNzk1MTExMTIyMzlkNTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9y
bWF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZv
cm1hdC5jcHAKQEAgLTIwMCw3ICsyMDAsNyBAQCBib29sIGNvbnZlcnRXT0ZGVG9TZm50KFNoYXJl
ZEJ1ZmZlciogd29mZiwgVmVjdG9yPGNoYXI+JiBzZm50KQogICAgICAgICAgICAgdUxvbmdmIGRl
c3RMZW4gPSB0YWJsZU9yaWdMZW5ndGg7CiAgICAgICAgICAgICBpZiAoIXNmbnQudHJ5UmVzZXJ2
ZUNhcGFjaXR5KHNmbnQuc2l6ZSgpICsgdGFibGVPcmlnTGVuZ3RoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBCeXRlZiogZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Qnl0ZWYqPihzZm50LmVuZCgpKTsKKyAgICAgICAgICAgIEJ5dGVmKiBkZXN0ID0gcmVpbnRl
cnByZXRfY2FzdDxCeXRlZio+KGdldFB0cihzZm50LmVuZCgpKSk7CiAgICAgICAgICAgICBzZm50
Lmdyb3coc2ZudC5zaXplKCkgKyB0YWJsZU9yaWdMZW5ndGgpOwogICAgICAgICAgICAgaWYgKHVu
Y29tcHJlc3MoZGVzdCwgJmRlc3RMZW4sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQnl0ZWYqPih3
b2ZmLT5kYXRhKCkgKyB0YWJsZU9mZnNldCksIHRhYmxlQ29tcExlbmd0aCkgIT0gWl9PSykKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCmluZGV4IDUwMjJjNTBj
N2VlODI1ZTI0MGYwZTcxMjI0N2M3ZWYxNjQ4ZjM4YmQuLjc1MTZiMGFjZDE1YWFmZDEyYTM1NmFm
ZjRkNTBhNmM0YWEwMjRmMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCkBAIC01OSw3ICs1OSw3IEBAIGNh
aXJvX3BhdHRlcm5fdCogR3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQoZmxvYXQgZ2xvYmFsQWxw
aGEpCiAgICAgZWxzZQogICAgICAgICBtX2dyYWRpZW50ID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVf
bGluZWFyKG1fcDAueCgpLCBtX3AwLnkoKSwgbV9wMS54KCksIG1fcDEueSgpKTsKIAotICAgIFZl
Y3RvcjxDb2xvclN0b3A+OjppdGVyYXRvciBzdG9wSXRlcmF0b3IgPSBtX3N0b3BzLmJlZ2luKCk7
CisgICAgYXV0byBzdG9wSXRlcmF0b3IgPSBtX3N0b3BzLmJlZ2luKCk7CiAgICAgd2hpbGUgKHN0
b3BJdGVyYXRvciAhPSBtX3N0b3BzLmVuZCgpKSB7CiAgICAgICAgIGNhaXJvX3BhdHRlcm5fYWRk
X2NvbG9yX3N0b3BfcmdiYShtX2dyYWRpZW50LCBzdG9wSXRlcmF0b3ItPnN0b3AsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wSXRlcmF0b3ItPnJlZCwgc3Rv
cEl0ZXJhdG9yLT5ncmVlbiwgc3RvcEl0ZXJhdG9yLT5ibHVlLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNv
ZGVyLmNwcAppbmRleCBkZTQ1NTA5NGEwYmNmN2M5ZGQzYjM5ZTRmODhlMDJjNTA5ZGVlYzg1Li4z
YTkzMWRkYmFkNGZiYTVlZTlhZGU4YjZmYWI3MDRlYjVhZTAwM2EyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1h
Z2VEZWNvZGVyLmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpj
bGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCiAgICAgLy8gYWx3
YXlzIHVzZSBJbWFnZVNvdXJjZTo6Y2xlYXIodHJ1ZSwgLi4uKSB0byBjb21wbGV0ZWx5IGZyZWUg
dGhlIG1lbW9yeSBpbgogICAgIC8vIHRoaXMgY2FzZS4KICAgICBjbGVhckJlZm9yZUZyYW1lID0g
c3RkOjptaW4oY2xlYXJCZWZvcmVGcmFtZSwgbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKSAtIDEp
OwotICAgIGNvbnN0IFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0b3IgZW5kKG1fZnJhbWVCdWZm
ZXJDYWNoZS5iZWdpbigpICsgY2xlYXJCZWZvcmVGcmFtZSk7CisgICAgY29uc3QgYXV0byBlbmQg
PSBtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSArIGNsZWFyQmVmb3JlRnJhbWU7CiAKICAgICAv
LyBXZSBuZWVkIHRvIHByZXNlcnZlIGZyYW1lcyBzdWNoIHRoYXQ6CiAgICAgLy8gICAqIFdlIGRv
bid0IGNsZWFyIHxlbmR8CkBAIC0xNjUsMTQgKzE2NSwxNCBAQCB2b2lkIEdJRkltYWdlRGVjb2Rl
cjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKQogICAgIC8v
ICAgKiBJZiB0aGUgZnJhbWUgaXMgcGFydGlhbCwgd2UncmUgZGVjb2RpbmcgaXQsIHNvIGRvbid0
IGNsZWFyIGl0OyBpZiBpdAogICAgIC8vICAgICBoYXMgYSBkaXNwb3NhbCBtZXRob2Qgb3RoZXIg
dGhhbiBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMsIHN0b3AKICAgICAvLyAgICAgc2Nhbm5pbmcs
IGFzIHdlJ2xsIG9ubHkgbmVlZCB0aGlzIGZyYW1lIHdoZW4gZGVjb2RpbmcgdGhlIG5leHQgb25l
LgotICAgIFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0b3IgaShlbmQpOworICAgIGF1dG8gaSA9
IGVuZDsKICAgICBmb3IgKDsgKGkgIT0gbV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpICYmICgo
aS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgfHwgKGktPmRpc3Bvc2FsTWV0
aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzKSk7IC0taSkgewog
ICAgICAgICBpZiAoKGktPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpICYm
IChpICE9IGVuZCkpCiAgICAgICAgICAgICBpLT5jbGVhclBpeGVsRGF0YSgpOwogICAgIH0KIAog
ICAgIC8vIE5vdyB8aXwgaG9sZHMgdGhlIGxhc3QgZnJhbWUgd2UgbmVlZCB0byBwcmVzZXJ2ZTsg
Y2xlYXIgcHJpb3IgZnJhbWVzLgotICAgIGZvciAoVmVjdG9yPEltYWdlRnJhbWU+OjppdGVyYXRv
ciBqKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKTsgaiAhPSBpOyArK2opIHsKKyAgICBmb3Ig
KGF1dG8gaiA9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpOyBqICE9IGk7ICsraikgewogICAg
ICAgICBBU1NFUlQoai0+c3RhdHVzKCkgIT0gSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAg
ICAgICAgaWYgKGotPnN0YXR1cygpICE9IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCiAgICAgICAg
ICAgICBqLT5jbGVhclBpeGVsRGF0YSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcAppbmRleCBlNDhlYjliNjc1ZGM5ZDIxNzU5OTI0Yzg4MDVhZmEwYjg5YjQ5ODM3Li5lOWZi
NWZhM2NkYTE0NzFlYzZlYmFiYjc0YTk2MDFlZmY0YzM1NDNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtMTU3Nyw4ICsxNTc3LDggQEAgdm9pZCBSZW5kZXJCb3g6
OnBhaW50RmlsbExheWVycyhjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgQ29sb3Im
IGMsIGNvbnMKICAgICAgICAgY29udGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcigxKTsKICAg
ICB9CiAKLSAgICBWZWN0b3I8Y29uc3QgRmlsbExheWVyKj46OmNvbnN0X3JldmVyc2VfaXRlcmF0
b3IgdG9wTGF5ZXIgPSBsYXllcnMucmVuZCgpOwotICAgIGZvciAoVmVjdG9yPGNvbnN0IEZpbGxM
YXllcio+Ojpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGl0ID0gbGF5ZXJzLnJiZWdpbigpOyBpdCAh
PSB0b3BMYXllcjsgKytpdCkKKyAgICBhdXRvIHRvcExheWVyID0gbGF5ZXJzLnJlbmQoKTsKKyAg
ICBmb3IgKGF1dG8gaXQgPSBsYXllcnMucmJlZ2luKCk7IGl0ICE9IHRvcExheWVyOyArK2l0KQog
ICAgICAgICBwYWludEZpbGxMYXllcihwYWludEluZm8sIGMsICppdCwgcmVjdCwgYmxlZWRBdm9p
ZGFuY2UsIG9wLCBiYWNrZ3JvdW5kT2JqZWN0LCBiYXNlQmdDb2xvclVzYWdlKTsKIAogICAgIGlm
IChzaG91bGREcmF3QmFja2dyb3VuZEluU2VwYXJhdGVCdWZmZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcAppbmRl
eCBjY2RjMmEzZGM2ZGEyZDY1MzRhN2ViNjM1MDllNmI0M2JhYTFmZDcxLi5kYzA5NTA5OWMwNGUz
YTgyYzQzYzNlMDI2Y2RkZWFkZThkNWJlMzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHAKQEAgLTI5NSw3ICsy
OTUsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGZpcnN0TmFtZWRHcmlkTGluZUJlZm9yZVBv
c2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uLCBjb25zdAogICAgIC8vIGFscmVhZHkgY29udmVydGVk
IHRvIGFuIGluZGV4IGluIG91ciBncmlkIHJlcHJlc2VudGF0aW9uIChpZSBvbmUgd2FzIHJlbW92
ZWQgZnJvbSB0aGUgZ3JpZCBsaW5lIHRvIGFjY291bnQgZm9yCiAgICAgLy8gdGhlIHNpZGUpLgog
ICAgIHVuc2lnbmVkIGZpcnN0TGluZUJlZm9yZVBvc2l0aW9uSW5kZXggPSAwOwotICAgIGNvbnN0
IHVuc2lnbmVkKiBmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiA9IHN0ZDo6bG93ZXJfYm91bmQoZ3Jp
ZExpbmVzLmJlZ2luKCksIGdyaWRMaW5lcy5lbmQoKSwgcG9zaXRpb24pOworICAgIGF1dG8gZmly
c3RMaW5lQmVmb3JlUG9zaXRpb24gPSBzdGQ6Omxvd2VyX2JvdW5kKGdyaWRMaW5lcy5iZWdpbigp
LCBncmlkTGluZXMuZW5kKCksIHBvc2l0aW9uKTsKICAgICBpZiAoZmlyc3RMaW5lQmVmb3JlUG9z
aXRpb24gIT0gZ3JpZExpbmVzLmVuZCgpKSB7CiAgICAgICAgIGlmICgqZmlyc3RMaW5lQmVmb3Jl
UG9zaXRpb24gPiBwb3NpdGlvbiAmJiBmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiAhPSBncmlkTGlu
ZXMuYmVnaW4oKSkKICAgICAgICAgICAgIC0tZmlyc3RMaW5lQmVmb3JlUG9zaXRpb247CkBAIC0z
MTYsOSArMzE2LDggQEAgc3RkOjp1bmlxdWVfcHRyPEdyaWRTcGFuPiBHcmlkUmVzb2x2ZWRQb3Np
dGlvbjo6cmVzb2x2ZVJvd1N0YXJ0Q29sdW1uU3RhcnROYW1lZEcKIAogc3RkOjp1bmlxdWVfcHRy
PEdyaWRTcGFuPiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZVJvd0VuZENvbHVtbkVuZE5h
bWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGNvbnN0IEdyaWRSZXNv
bHZlZFBvc2l0aW9uJiByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIGNvbnN0IEdyaWRQb3NpdGlv
biYgcG9zaXRpb24sIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGdyaWRMaW5lcykKIHsKLSAgICBB
U1NFUlQoZ3JpZExpbmVzLnNpemUoKSk7CiAgICAgdW5zaWduZWQgZmlyc3RMaW5lQWZ0ZXJPcHBv
c2l0ZVBvc2l0aW9uSW5kZXggPSBncmlkTGluZXMuc2l6ZSgpIC0gMTsKLSAgICBjb25zdCB1bnNp
Z25lZCogZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uID0gc3RkOjp1cHBlcl9ib3VuZChn
cmlkTGluZXMuYmVnaW4oKSwgZ3JpZExpbmVzLmVuZCgpLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRp
b24pOworICAgIGF1dG8gZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uID0gc3RkOjp1cHBl
cl9ib3VuZChncmlkTGluZXMuYmVnaW4oKSwgZ3JpZExpbmVzLmVuZCgpLCByZXNvbHZlZE9wcG9z
aXRlUG9zaXRpb24pOwogICAgIGlmIChmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb24gIT0g
Z3JpZExpbmVzLmVuZCgpKQogICAgICAgICBmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb25J
bmRleCA9IGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbiAtIGdyaWRMaW5lcy5iZWdpbigp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcAppbmRleCBjMzNmZmI3N2I2ZDhm
OTk1N2IxMjZmMWJmMzkxN2E4NTdmZGZiNTBlLi5hMGJmNTAxOTFiNmFiOTU4MTYxOGQ5NTNjMDg5
MGQyMTJlYjdiMzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAKQEAgLTI1
MiwzMSArMjUyLDMxIEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQga2VybmluZ0ZvclBhaXJPZlN0cmlu
Z3NBbmRHbHlwaHMoY29uc3QgU1ZHS2VybmluZ01hcCYga2VybmluCiB7CiAgICAgaWYgKCFnMS5p
c0VtcHR5KCkgJiYga2VybmluZ01hcC5nbHlwaE1hcC5jb250YWlucyhnMSkpIHsKICAgICAgICAg
U1ZHS2VybmluZ1ZlY3Rvcioga2VybmluZ1ZlY3RvciA9IGtlcm5pbmdNYXAuZ2x5cGhNYXAuZ2V0
KGcxKTsKLSAgICAgICAgU1ZHS2VybmluZ1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBrZXJu
aW5nVmVjdG9yLT5lbmQoKSAtIDE7Ci0gICAgICAgIGNvbnN0IFNWR0tlcm5pbmdWZWN0b3I6OmNv
bnN0X2l0ZXJhdG9yIGJlZ2luID0ga2VybmluZ1ZlY3Rvci0+YmVnaW4oKSAtIDE7Ci0gICAgICAg
IGZvciAoOyBpdCAhPSBiZWdpbjsgLS1pdCkgewotICAgICAgICAgICAgaWYgKG1hdGNoZXModTIs
IGcyLCAqaXQpKQotICAgICAgICAgICAgICAgIHJldHVybiBpdC0+a2VybmluZzsKKyAgICAgICAg
c2l6ZV90IGl0ID0ga2VybmluZ1ZlY3Rvci0+c2l6ZSgpOworICAgICAgICB3aGlsZSAoaXQtLSA+
IDApIHsKKyAgICAgICAgICAgIGF1dG8mIHZhbHVlID0ga2VybmluZ1ZlY3Rvci0+YXQoaXQpOwor
ICAgICAgICAgICAgaWYgKG1hdGNoZXModTIsIGcyLCB2YWx1ZSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHZhbHVlLmtlcm5pbmc7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoIXUxLmlz
RW1wdHkoKSkgewogICAgICAgICBpZiAoa2VybmluZ01hcC51bmljb2RlTWFwLmNvbnRhaW5zKHUx
KSkgewogICAgICAgICAgICAgU1ZHS2VybmluZ1ZlY3Rvcioga2VybmluZ1ZlY3RvciA9IGtlcm5p
bmdNYXAudW5pY29kZU1hcC5nZXQodTEpOwotICAgICAgICAgICAgU1ZHS2VybmluZ1ZlY3Rvcjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBrZXJuaW5nVmVjdG9yLT5lbmQoKSAtIDE7Ci0gICAgICAgICAg
ICBjb25zdCBTVkdLZXJuaW5nVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbiA9IGtlcm5pbmdW
ZWN0b3ItPmJlZ2luKCkgLSAxOwotICAgICAgICAgICAgZm9yICg7IGl0ICE9IGJlZ2luOyAtLWl0
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoZXModTIsIGcyLCAqaXQpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gaXQtPmtlcm5pbmc7CisgICAgICAgICAgICBzaXplX3QgaXQgPSBr
ZXJuaW5nVmVjdG9yLT5zaXplKCk7CisgICAgICAgICAgICB3aGlsZSAoaXQtLSA+IDApIHsKKyAg
ICAgICAgICAgICAgICBhdXRvJiB2YWx1ZSA9IGtlcm5pbmdWZWN0b3ItPmF0KGl0KTsKKyAgICAg
ICAgICAgICAgICBpZiAobWF0Y2hlcyh1MiwgZzIsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlLmtlcm5pbmc7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAoIWtlcm5pbmdNYXAua2VybmluZ1VuaWNvZGVSYW5nZU1hcC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgIFZlY3RvcjxTVkdLZXJuaW5nUGFpcj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
a2VybmluZ01hcC5rZXJuaW5nVW5pY29kZVJhbmdlTWFwLmVuZCgpIC0gMTsKLSAgICAgICAgICAg
IGNvbnN0IFZlY3RvcjxTVkdLZXJuaW5nUGFpcj46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0ga2Vy
bmluZ01hcC5rZXJuaW5nVW5pY29kZVJhbmdlTWFwLmJlZ2luKCkgLSAxOwotICAgICAgICAgICAg
Zm9yICg7IGl0ICE9IGJlZ2luOyAtLWl0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMo
dTEsIHUyLCBnMiwgKml0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXJuaW5n
OworICAgICAgICAgICAgc2l6ZV90IGl0ID0ga2VybmluZ01hcC5rZXJuaW5nVW5pY29kZVJhbmdl
TWFwLnNpemUoKTsKKyAgICAgICAgICAgIHdoaWxlIChpdC0tID4gMCkgeworICAgICAgICAgICAg
ICAgIGF1dG8mIHZhbHVlID0ga2VybmluZ01hcC5rZXJuaW5nVW5pY29kZVJhbmdlTWFwW2l0XTsK
KyAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyh1MSwgdTIsIGcyLCB2YWx1ZSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5rZXJuaW5nOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3Ry
ZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaAppbmRleCA5ZDlk
MmEyYjIzYzYwMGZlYmI1MzQwY2JjZGQxYjYxZGRjM2I5ZjE1Li5iOTk5NTU0OTQzOWFjOTY0YWIz
ZTY3YTMwZjBkODlkOGMzNThhY2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGF0aEJ5dGVTdHJlYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJl
YW0uaApAQCAtNjAsOCArNjAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmQodW5zaWduZWQg
Y2hhciBieXRlKSB7IG1fZGF0YS5hcHBlbmQoYnl0ZSk7IH0KICAgICB2b2lkIGFwcGVuZChTVkdQ
YXRoQnl0ZVN0cmVhbSogb3RoZXIpCiAgICAgewotICAgICAgICBmb3IgKERhdGFJdGVyYXRvciBp
dCA9IG90aGVyLT5iZWdpbigpOyBpdCAhPSBvdGhlci0+ZW5kKCk7ICsraXQpCi0gICAgICAgICAg
ICBhcHBlbmQoKml0KTsKKyAgICAgICAgZm9yIChhdXRvJiBieXRlIDogKm90aGVyKQorICAgICAg
ICAgICAgYXBwZW5kKGJ5dGUpOwogICAgIH0KICAgICB2b2lkIGNsZWFyKCkgeyBtX2RhdGEuY2xl
YXIoKTsgfQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2RhdGEuc2l6ZSgp
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmgKaW5kZXggM2Q4OWI4ZDUwODdhODZjZmVhZmZj
MDE0MGI2OTQ3NjJjMDk1ZGRkZi4uZGFmMmI5M2Q1MWI1YWY2YjczNGY1ZjlhNzY1NDEzNjllMDQx
NGEyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9kZVNldC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQuaApAQCAtNjQsOCArNjQsOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICB2b2lkIG1hcmtTdWJ0cmVlc0Rpc2pvaW50KGJv
b2wgZGlzam9pbnQpIHsgbV9zdWJ0cmVlc0FyZURpc2pvaW50ID0gZGlzam9pbnQ7IH0KICAgICAg
ICAgICAgIGJvb2wgc3VidHJlZXNBcmVEaXNqb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VidHJl
ZXNBcmVEaXNqb2ludCB8fCBtX25vZGVzLnNpemUoKSA8IDI7IH0KIAotICAgICAgICAgICAgY29u
c3QgUmVmUHRyPE5vZGU+KiBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuYmVnaW4oKTsg
fQotICAgICAgICAgICAgY29uc3QgUmVmUHRyPE5vZGU+KiBlbmQoKSBjb25zdCB7IHJldHVybiBt
X25vZGVzLmVuZCgpOyB9CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+Pjo6
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX25vZGVzLmJlZ2luKCk7IH0KKyAgICAg
ICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4+OjppdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CiAKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAg
IHZvaWQgdHJhdmVyc2FsU29ydCgpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243259</attachid>
            <date>2014-12-13 13:55:15 -0800</date>
            <delta_ts>2015-08-02 15:18:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138821-20141213135600.patch</filename>
            <type>text/plain</type>
            <size>64707</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3MjU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
ZGE3ZjA3ODIwMGMzNzMwYjlmY2UxNGU3MmU1NGNkMjM4YmJjOWY2Li4yMjk1ZGZjNDJkMDg3YjFi
MjM0ZjY4ZWFjMGZkNGY1ZjYxM2UzYmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMyBAQAorMjAxNC0xMi0wMyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3Rp
bGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgY29kZSB0byBkZWFsIHdpdGggc2xpZ2h0bHkgY2hh
bmdlZCBpdGVyYXRvciBzZW1hbnRpY3MuCisKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxk
cmVuKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbnRKdW1wKToKKyAgICAgICAgKiBmdGwvRlRMQWJicmV2
aWF0aW9ucy5oOgorICAgICAgICAoSlNDOjpGVEw6Om1kTm9kZSk6CisgICAgICAgIChKU0M6OkZU
TDo6YnVpbGRDYWxsKToKKyAgICAgICAgKiBsbGludC9MTEludERhdGEuY3BwOgorICAgICAgICAo
SlNDOjpMTEludDo6RGF0YTo6cGVyZm9ybUFzc2VydGlvbnMpOgorICAgICAgICAqIHBhcnNlci9Q
YXJzZXIuaDoKKyAgICAgICAgKEpTQzo6U2NvcGU6OlNjb3BlKToKKyAgICAgICAgKiBydW50aW1l
L0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3Rvcik6Cisg
ICAgICAgICogdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2ZpbGVU
cmVlTm9kZTo6ZHVtcEludGVybmFsKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAg
ICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjptYXRjaENoYXJhY3RlckNsYXNzKToKKwog
MjAxNC0xMi0xMiAgTWF0dGhldyBNaXJtYW4gIDxtbWlybWFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSBzaG91bGQgZXhpdCB0byBzbG93IHBhdGggaWYg
dGhlIG9iamVjdCBoYXMgYSBzcGFyc2UgbWFwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBjN2IyZjZlMDhiNjlmNDQ3ZmI2NDNh
Zjg3YmM4MmFkZjFiZGIzM2E4Li41MDk2YjFkMGY4NTUxMjM3OGMwOWVkOGZmZjVhMWM3YTQ2M2Jk
MjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0No
YW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDE0LTEyLTAzICBPbGl2ZXIgSHVudCAgPG9saXZl
ckBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBzdXJlIHJhbmdlIGJhc2VkIGl0ZXJhdGlvbiBv
ZiBWZWN0b3I8PiBzdGlsbCByZWNlaXZlcyBib3VuZHMgY2hlY2tpbmcKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODgyMQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5ldyBJbmRleGVkSXRlcmF0
b3Igc3RydWN0IHRvIFdURiB0aGF0IHdyYXBzIGEKKyAgICAgICAgVmVjdG9yIHR5cGUgYW5kIGlu
ZGV4IHRvIHByb3ZpZGUgcG9pbnRlciBsaWtlIHNlbWFudGljcworICAgICAgICB3aGlsZSBzdGls
bCBwZXJmb3JtaW5nIHJ1bnRpbWUgYm91bmRzIGNoZWNraW5nLCBldmVuIGluCisgICAgICAgIHJl
bGVhc2UgYnVpbGRzLiBXZSBzdG9yZSBhIHNpbXBsZSBpbmRleCBpbnRvIHRoZSB2ZWN0b3IKKyAg
ICAgICAgd2hpY2ggbWVhbnMgdGhhdCB0aGlzIGl0ZXJhdG9yIGFsbG93cyB2ZWN0b3IgcmVzaXpp
bmcKKyAgICAgICAgZHVyaW5nIGl0ZXJhdGlvbi4gSWYgdGhlIHZlY3RvciBpcyByZXNpemVkIHN1
Y2ggdGhhdCB0aGUKKyAgICAgICAgaXRlcmF0b3IgaXMgb3V0IG9mIGJvdW5kcywgdGhlbiBhbnkg
YXR0ZW1wdCB0byBkZXJlZmVyZW5jZQorICAgICAgICB0aGUgaXRlcmF0b3Igd2lsbCBjcmFzaCBz
YWZlbHkuCisKKyAgICAgICAgRm9yIHRoZSBwdXJwb3NlIG9mIHJldGFpbmluZyBzZW1hbnRpY2Fs
bHkgZXF1aXZhbGVudAorICAgICAgICBiZWhhdmlvdXIsIHRoZSBpdGVyYXRvciBjYW4gYmUgbW92
ZWQgdG8gbV9pbmRleCA9PSBzaXplKCkKKyAgICAgICAgYXMgdGhhdCBpcyB0aGUgc3RhbmRhcmQg
ImVuZCIgdGVybWluYXRvciBmb3IgdGhlc2UgdHlwZXMuCisgICAgICAgIEF0dGVtcHRpbmcgdG8g
ZGVyZWZlcmVuY2UgYXQgdGhhdCBwb2ludCB3aWxsIHN0aWxsIGNyYXNoCisgICAgICAgIHJhdGhl
ciB0aGFuIHBlcmZvcm0gYW4gdW5zYWZlIG1lbW9yeSBvcGVyYXRpb24uCisKKyAgICAgICAgQnkg
bmVjZXNzaXR5IHRoZXJlIGFyZSBtYW55IG92ZXJyaWRlcyBmb3Igb3BlcmF0b3IgKyBhbmQgLSBh
cworICAgICAgICB3ZSBvdGhlcndpc2UgaGl0IG1hbnkgZGlmZmVyZW50IHR5cGUgcHJvbW90aW9u
IGFtYmlndWl0aWVzIHdoZW4KKyAgICAgICAgcGVyZm9ybWluZyBhcml0aG1ldGljIHdpdGggaXRl
cmF0b3JzLiBUaGVzZSBhbWJpZ3VpdGllcyBhcmUgYWxzbworICAgICAgICBkaWZmZXJlbnQgZm9y
IDMyLSB2cy4gNjQtYml0LCBzbyBkdXBsaWNhdGluZyB0aGUgZnVuY3Rpb25zCisgICAgICAgIGFu
ZCB0aGVuIGZvcndhcmRpbmcgdG8gdGhlIGNvcmUgaW1wbGVtZW50YXRpb25zIHRoYXQgcGVyZm9y
bWVkCisgICAgICAgIHRoZSBib3VuZHMgY2hlY2tpbmcgYW5kIG11dGF0aW9uIHNlZW1lZCBsaWtl
IHRoZSByaWdodCBjYWxsLgorCisgICAgICAgICogV1RGLnZjeHByb2ovV1RGLnZjeHByb2o6Cisg
ICAgICAgICogV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBXVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvSW5kZXhlZEl0ZXJhdG9y
Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6OkluZGV4ZWRJdGVyYXRv
cik6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3ItPik6CisgICAgICAg
IChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdURjo6SW5kZXhl
ZEl0ZXJhdG9yOjpnZXQpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9y
KyspOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yLS0pOgorICAgICAg
ICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUpOgor
ICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yLSk6CisgICAgICAgIChXVEY6
OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJh
dG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRv
ciE9KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcjwpOgorICAgICAg
ICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPD0pOgorICAgICAgICAoV1RGOjpJbmRl
eGVkSXRlcmF0b3I6Om9wZXJhdG9yPik6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6
b3BlcmF0b3I+PSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IgY29u
c3RfaXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6OnVuc2FmZUdldCk6
CisgICAgICAgIChXVEY6OmdldFB0cik6CisgICAgICAgIChXVEY6Om9wZXJhdG9yLSk6CisgICAg
ICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvciE9KToKKyAgICAg
ICAgKFdURjo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPj0pOgorICAgICAg
ICAoV1RGOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj4pOgorICAgICAgICAo
V1RGOjpJbmRleGVkSXRlcmF0b3JTZWxlY3Rvcjo6bWFrZUl0ZXJhdG9yKToKKyAgICAgICAgKFdU
Rjo6SW5kZXhlZEl0ZXJhdG9yU2VsZWN0b3I6Om1ha2VDb25zdEl0ZXJhdG9yKToKKyAgICAgICAg
KiB3dGYvUmVmQ291bnRlZEFycmF5Lmg6CisgICAgICAgIChXVEY6OlJlZkNvdW50ZWRBcnJheTo6
UmVmQ291bnRlZEFycmF5KToKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6
OlZlY3Rvcjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjpiZWdpbik6CisgICAgICAg
IChXVEY6OlZlY3Rvcjo6ZW5kKToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6VmVj
dG9yKToKKyAgICAgICAgKFdURjo6PSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46
OmZpbGwpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpleHBhbmRDYXBhY2l0eSk6
CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnRyeUV4cGFuZENhcGFjaXR5KToKKyAg
ICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6cmVzaXplKToKKyAgICAgICAgKFdURjo6T3Zl
cmZsb3dIYW5kbGVyPjo6c2hyaW5rKToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6
Z3Jvdyk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnJlc2VydmVDYXBhY2l0eSk6
CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnRyeVJlc2VydmVDYXBhY2l0eSk6Cisg
ICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnNocmlua0NhcGFjaXR5KToKKyAgICAgICAg
KFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kKToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dI
YW5kbGVyPjo6dHJ5QXBwZW5kKToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6YXBw
ZW5kU2xvd0Nhc2UpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+Ojp1bmNoZWNrZWRB
cHBlbmQpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmRWZWN0b3IpOgor
ICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnQpOgorICAgICAgICAoV1RGOjpP
dmVyZmxvd0hhbmRsZXI+OjppbnNlcnRWZWN0b3IpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hh
bmRsZXI+OjpyZW1vdmUpOgorCiAyMDE0LTEyLTEwICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBh
cHBsZS5jb20+CiAKICAgICAgICAgUGxlYXNlIGRpc2FibGUgdGhlIHdlYmtpdEZpcnN0VmVyc2lv
bldpdGhJbml0Q29uc3RydWN0b3JTdXBwb3J0IGNoZWNrIG9uIEFwcGxlIFRWCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggMTJkOTA2NWM4ODVlZDdhMjIxNmY5N2NiZmM2ZTNhMDBhN2VhN2RhOC4uMjFkYTRhNmY4MTA3
OGI4NWI2MDg3YjBiY2UyZDg1ODQ2OGRmMjlmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBA
CisyMDE0LTEyLTAzICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisKKyAgICAgICAg
TWFrZSBzdXJlIHJhbmdlIGJhc2VkIGl0ZXJhdGlvbiBvZiBWZWN0b3I8PiBzdGlsbCByZWNlaXZl
cyBib3VuZHMgY2hlY2tpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzODgyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFVwZGF0ZSB0byBkZWFsIHdpdGggZGlmZmVyZW50IGl0ZXJhdG9yIHR5cGUuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplU3RyaW5nKToKKyAgICAg
ICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hC
dWZmZXI6OmlzQmFkTWF0Y2gpOgorICAgICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
OjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
U2VnbWVudGVkRm9udERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkRm9udERh
dGE6OmZvbnREYXRhRm9yQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZEZv
bnREYXRhOjpjb250YWluc0NoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRG
b250RGF0YTo6aXNMb2FkaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmls
ZUZvcm1hdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0V09GRlRvU2ZudCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudCk6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBh
aW50RmlsbExheWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBv
c2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0TmFtZWRHcmlkTGluZUJlZm9yZVBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZl
Um93RW5kQ29sdW1uRW5kTmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRp
b24pOgorICAgICAgICAqIHN2Zy9TVkdGb250RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjprZXJuaW5nRm9yUGFpck9mU3RyaW5nc0FuZEdseXBocyk6CisgICAgICAgICogc3ZnL1NWR1Bh
dGhCeXRlU3RyZWFtLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbTo6YXBw
ZW5kKToKKyAgICAgICAgKiB4bWwvWFBhdGhOb2RlU2V0Lmg6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6Tm9kZVNldDo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Ok5vZGVTZXQ6
OmVuZCk6CisKIDIwMTQtMTItMTIgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbTWFjXSBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBkc3ltdXRpbCBvbiBvbGRlciBPUyB2ZXJz
aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5jcHAKaW5kZXggNzQwYTI0NDI2NWNjODUyYmEzYTdiY2EyYTFlYjdmNDU4OTc4YzQ0
Yy4uMDcxN2FlODg2ZDliZDAyMjJkZmRkODcwZmM5MDQyOTRkNmYwNDIyZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBA
IC0yMjksOSArMjI5LDkgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1fc3ltYm9sVGFibGUpOwogICAgIGZvciAoRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yOjppdGVy
YXRvciBwdHIgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbHMuYmVnaW4oKSwgZW5kID0gdGhp
c09iamVjdC0+bV9mdW5jdGlvbkRlY2xzLmVuZCgpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAg
ICAgdmlzaXRvci5hcHBlbmQocHRyKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoV1RGOjpnZXRQ
dHIocHRyKSk7CiAgICAgZm9yIChGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I6Oml0ZXJhdG9yIHB0
ciA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25FeHBycy5iZWdpbigpLCBlbmQgPSB0aGlzT2JqZWN0
LT5tX2Z1bmN0aW9uRXhwcnMuZW5kKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICB2aXNp
dG9yLmFwcGVuZChwdHIpOworICAgICAgICB2aXNpdG9yLmFwcGVuZChXVEY6OmdldFB0cihwdHIp
KTsKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5tX2NvbnN0YW50UmVnaXN0
ZXJzLmRhdGEoKSwgdGhpc09iamVjdC0+bV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwogICAg
IGlmICh0aGlzT2JqZWN0LT5tX3JhcmVEYXRhKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
LCBlbmQgPSB0aGlzT2JqZWN0LT5tX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOyBpICE9IGVu
ZDsgaSsrKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCAwYjE1NjU4NmI2MzM0ZTQ5YWZmYzc5OGY1NTM1
ZThmZTQwMjBiMzEyLi41MzYxZjg5NzRkMDVjMTAzNTg2ZmZkZjExNjNmOTdkYWUwNGM1YmI3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcApAQCAtMjI4Myw4ICsyMjgzLDggQEAgdm9pZCBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMoUmVnaXN0ZXJJRCogc2NvcGUsIENvbnRyb2xGbG93
Q29udGUKICAgICAgICAgICAgIGludCB0b3BTY29wZUluZGV4ID0gLTE7CiAgICAgICAgICAgICBp
bnQgYm90dG9tU2NvcGVJbmRleCA9IC0xOwogICAgICAgICAgICAgaWYgKGZsaXBTY29wZXMpIHsK
LSAgICAgICAgICAgICAgICB0b3BTY29wZUluZGV4ID0gdG9wU2NvcGUgLSBtX3Njb3BlQ29udGV4
dFN0YWNrLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgYm90dG9tU2NvcGVJbmRleCA9IGJvdHRv
bVNjb3BlIC0gbV9zY29wZUNvbnRleHRTdGFjay5iZWdpbigpOworICAgICAgICAgICAgICAgIHRv
cFNjb3BlSW5kZXggPSB0b3BTY29wZSAtIG1fc2NvcGVDb250ZXh0U3RhY2suZGF0YSgpOworICAg
ICAgICAgICAgICAgIGJvdHRvbVNjb3BlSW5kZXggPSBib3R0b21TY29wZSAtIG1fc2NvcGVDb250
ZXh0U3RhY2suZGF0YSgpOwogICAgICAgICAgICAgICAgIHNhdmVkU2NvcGVDb250ZXh0U3RhY2sg
PSBtX3Njb3BlQ29udGV4dFN0YWNrOwogICAgICAgICAgICAgICAgIG1fc2NvcGVDb250ZXh0U3Rh
Y2suc2hyaW5rKGZpbmFsbHlDb250ZXh0LnNjb3BlQ29udGV4dFN0YWNrU2l6ZSk7CiAgICAgICAg
ICAgICB9CkBAIC0yMzI4LDcgKzIzMjgsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
Q29tcGxleFBvcFNjb3BlcyhSZWdpc3RlcklEKiBzY29wZSwgQ29udHJvbEZsb3dDb250ZQogICAg
ICAgICAgICAgaWYgKGZsaXBTY29wZXMpIHsKICAgICAgICAgICAgICAgICBtX3Njb3BlQ29udGV4
dFN0YWNrID0gc2F2ZWRTY29wZUNvbnRleHRTdGFjazsKICAgICAgICAgICAgICAgICB0b3BTY29w
ZSA9ICZtX3Njb3BlQ29udGV4dFN0YWNrW3RvcFNjb3BlSW5kZXhdOyAvLyBhc3NlcnQgaXQncyB3
aXRoaW4gYm91bmRzCi0gICAgICAgICAgICAgICAgYm90dG9tU2NvcGUgPSBtX3Njb3BlQ29udGV4
dFN0YWNrLmJlZ2luKCkgKyBib3R0b21TY29wZUluZGV4OyAvLyBkb24ndCBhc3NlcnQsIHNpbmNl
IGl0IHRoZSBpbmRleCBtaWdodCBiZSAtMS4KKyAgICAgICAgICAgICAgICBib3R0b21TY29wZSA9
IG1fc2NvcGVDb250ZXh0U3RhY2suZGF0YSgpICsgYm90dG9tU2NvcGVJbmRleDsgLy8gZG9uJ3Qg
YXNzZXJ0LCBzaW5jZSBpdCB0aGUgaW5kZXggbWlnaHQgYmUgLTEuCiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoZmxpcFN3aXRjaGVzKQogICAgICAgICAgICAgICAgIG1fc3dpdGNoQ29u
dGV4dFN0YWNrID0gc2F2ZWRTd2l0Y2hDb250ZXh0U3RhY2s7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IGYwNzI0ZGY0NzAzOTQ5YjMw
ZDI0ZTM2YWE4MmU3NzhhNWNiOWJmNzMuLjNiZTE4ZWE2YzZjYjdmMzZmNDhlMjBiNTlmNzIzZWNj
NTE0YjlkM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCkBAIC00OTEwLDcgKzQ5MTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
U3dpdGNoSW50SnVtcCgKICAgICBhZGRCcmFuY2goCiAgICAgICAgIG1faml0LmJyYW5jaDMyKEpJ
VENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsIHZhbHVlLCBJbW0zMih0YWJsZS5jdGlPZmZzZXRzLnNp
emUoKSkpLAogICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayk7Ci0gICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyKHRhYmxlLmN0aU9mZnNldHMuYmVnaW4oKSksIHNjcmF0Y2gpOworICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cih0YWJsZS5jdGlPZmZzZXRzLmRhdGEoKSksIHNjcmF0
Y2gpOwogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkJhc2VJbmRleChzY3JhdGNoLCB2
YWx1ZSwgSklUQ29tcGlsZXI6OnRpbWVzUHRyKCkpLCBzY3JhdGNoKTsKICAgICBtX2ppdC5qdW1w
KHNjcmF0Y2gpOwogICAgIGRhdGEtPmRpZFVzZUp1bXBUYWJsZSA9IHRydWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCmluZGV4IGZjN2NiMWIyNTQzMjY5
NGFhZWU4ZmJmMzE1M2U2ZTA4YTgzMzJmMzkuLjdiMWExY2U3YjM4MzdlODE0Y2JhMmIzZWNjM2Ew
N2IwMThkOWFlMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJi
cmV2aWF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0
aW9ucy5oCkBAIC0xMjAsNyArMTIwLDcgQEAgc3RhdGljIGlubGluZSBMVmFsdWUgbWRTdHJpbmco
TENvbnRleHQgY29udGV4dCwgY29uc3QgY2hhciogc3RyaW5nLCB1bnNpZ25lZCBsZW4KIHN0YXRp
YyBpbmxpbmUgTFZhbHVlIG1kU3RyaW5nKExDb250ZXh0IGNvbnRleHQsIGNvbnN0IGNoYXIqIHN0
cmluZykgeyByZXR1cm4gbWRTdHJpbmcoY29udGV4dCwgc3RyaW5nLCBzdGQ6OnN0cmxlbihzdHJp
bmcpKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQsIExW
YWx1ZSogYXJncywgdW5zaWduZWQgbnVtQXJncykgeyByZXR1cm4gbGx2bS0+TUROb2RlSW5Db250
ZXh0KGNvbnRleHQsIGFyZ3MsIG51bUFyZ3MpOyB9CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JU
eXBlPgotc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQsIGNvbnN0
IFZlY3RvclR5cGUmIHZlY3RvcikgeyByZXR1cm4gbWROb2RlKGNvbnRleHQsIGNvbnN0X2Nhc3Q8
TFZhbHVlKj4odmVjdG9yLmJlZ2luKCkpLCB2ZWN0b3Iuc2l6ZSgpKTsgfQorc3RhdGljIGlubGlu
ZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQsIGNvbnN0IFZlY3RvclR5cGUmIHZlY3Rv
cikgeyByZXR1cm4gbWROb2RlKGNvbnRleHQsIGNvbnN0X2Nhc3Q8TFZhbHVlKj4odmVjdG9yLmRh
dGEoKSksIHZlY3Rvci5zaXplKCkpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENv
bnRleHQgY29udGV4dCkgeyByZXR1cm4gbWROb2RlKGNvbnRleHQsIDAsIDApOyB9CiBzdGF0aWMg
aW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwgTFZhbHVlIGFyZzEpIHsgcmV0
dXJuIG1kTm9kZShjb250ZXh0LCAmYXJnMSwgMSk7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1k
Tm9kZShMQ29udGV4dCBjb250ZXh0LCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIpCkBAIC0yODgs
NyArMjg4LDcgQEAgc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxk
ZXIsIExWYWx1ZSBmdW5jdGlvbiwgY29uc3QgTFZhbHVlKgogdGVtcGxhdGU8dHlwZW5hbWUgVmVj
dG9yVHlwZT4KIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1
ZSBmdW5jdGlvbiwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKQogewotICAgIHJldHVybiBidWls
ZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIHZlY3Rvci5iZWdpbigpLCB2ZWN0b3Iuc2l6ZSgpKTsK
KyAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCB2ZWN0b3IuZGF0YSgpLCB2
ZWN0b3Iuc2l6ZSgpKTsKIH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRl
ciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24pCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludERhdGEuY3BwCmluZGV4IDY5MTlhZWFiMDBhMWIyNWM0NzViYmY5ZGQyNWM2ODhmMGFh
NThhNzIuLjQ0YWZjYTRjYmFkOGIzZTU1MzM0MTI5YWM5YzliMGRlZmQ5NTYxZTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAg
dm9pZCBEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyhWTSYgdm0pCiAgICAgVmVjdG9yPGludD4gdGVz
dFZlY3RvcjsKICAgICB0ZXN0VmVjdG9yLnJlc2l6ZSg0Mik7CiAgICAgQVNTRVJUKGJpdHdpc2Vf
Y2FzdDx1aW50MzJfdCo+KCZ0ZXN0VmVjdG9yKVtzaXplb2Yodm9pZCopL3NpemVvZih1aW50MzJf
dCkgKyAxXSA9PSA0Mik7Ci0gICAgQVNTRVJUKGJpdHdpc2VfY2FzdDxpbnQqKj4oJnRlc3RWZWN0
b3IpWzBdID09IHRlc3RWZWN0b3IuYmVnaW4oKSk7CisgICAgQVNTRVJUKGJpdHdpc2VfY2FzdDxp
bnQqKj4oJnRlc3RWZWN0b3IpWzBdID09IHRlc3RWZWN0b3IuZGF0YSgpKTsKICNlbmRpZgogCiAg
ICAgQVNTRVJUKFN0cmluZ0ltcGw6OnNfaGFzaEZsYWc4Qml0QnVmZmVyID09IDMyKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCmluZGV4IDc2NGUzZDMzYTkxYTdmYWM4YWNiYWYz
MjVlZGJjMWVjNGY5OWQyZWMuLjkzNmM4YmNhZTI3NWZlOTY5ZTY0MzkzYjdkYjEwMmZhMjU4MWJm
Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaApAQCAtMTMwLDEwICsxMzAs
OCBAQCBzdHJ1Y3QgU2NvcGUgewogICAgICAgICBpZiAocmhzLm1fbGFiZWxzKSB7CiAgICAgICAg
ICAgICBtX2xhYmVscyA9IHN0ZDo6bWFrZV91bmlxdWU8TGFiZWxTdGFjaz4oKTsKIAotICAgICAg
ICAgICAgdHlwZWRlZiBMYWJlbFN0YWNrOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKLSAgICAg
ICAgICAgIGl0ZXJhdG9yIGVuZCA9IHJocy5tX2xhYmVscy0+ZW5kKCk7Ci0gICAgICAgICAgICBm
b3IgKGl0ZXJhdG9yIGl0ID0gcmhzLm1fbGFiZWxzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgICAgICAgICAgbV9sYWJlbHMtPmFwcGVuZChTY29wZUxhYmVsSW5mbyhpdC0+bV9p
ZGVudCwgaXQtPm1faXNMb29wKSk7CisgICAgICAgICAgICBmb3IgKGF1dG8gbGFiZWwgOiAqcmhz
Lm1fbGFiZWxzKQorICAgICAgICAgICAgICAgIG1fbGFiZWxzLT5hcHBlbmQoU2NvcGVMYWJlbElu
Zm8obGFiZWwubV9pZGVudCwgbGFiZWwubV9pc0xvb3ApKTsKICAgICAgICAgfQogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAppbmRleCA1MTc3MjFlOTg0
NDllMWVkM2VhMDVlNTA5NmE0M2MzMTQ4Mjg4ODkwLi4wZjllYWNjZmRkZDE5MzM5NWJhNDM1YmU4
MDlmZGI3YTMzZjE1ZjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmNwcApAQCAtMzUxLDcgKzM1MSw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoV2l0aEFycmF5
U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vCiAgICAgICAg
ICAgICAvLyBwcm9wZXJ0aWVzLCBzbyB3ZSBoYXZlIHRvIHBlcmZvcm0gZGVsZXRpb24gd2l0aCBj
YXV0aW9uLCBpZiBub3Qgd2UgY2FuCiAgICAgICAgICAgICAvLyBkZWxldGUgdmFsdWVzIGluIGFu
eSBvcmRlci4KICAgICAgICAgICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSkgewotICAgICAgICAg
ICAgICAgIHFzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5zaXplKCksIHNpemVvZih1bnNpZ25lZCks
IGNvbXBhcmVLZXlzRm9yUVNvcnQpOworICAgICAgICAgICAgICAgIHFzb3J0KGtleXMuZGF0YSgp
LCBrZXlzLnNpemUoKSwgc2l6ZW9mKHVuc2lnbmVkKSwgY29tcGFyZUtleXNGb3JRU29ydCk7CiAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaSA9IGtleXMuc2l6ZSgpOwogICAgICAgICAgICAgICAg
IHdoaWxlIChpKSB7CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0ga2V5c1st
LWldOwpAQCAtMTE5MCwxMyArMTE5MCwxMyBAQCB2b2lkIEpTQXJyYXk6OnNvcnRDb21wYWN0ZWRW
ZWN0b3IoRXhlY1N0YXRlKiBleGVjLCBDb250aWd1b3VzRGF0YTxTdG9yYWdlVHlwZT4gZAogICAg
ICAgICAKICNpZiBIQVZFKE1FUkdFU09SVCkKICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFs
dWVzKQotICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9m
KFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAgICAg
IHFzb3J0KHZhbHVlcy5kYXRhKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1Bh
aXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogICAgIGVsc2UKLSAgICAgICAgbWVy
Z2Vzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQ
YWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICAgICAgbWVyZ2Vzb3J0KHZh
bHVlcy5kYXRhKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21w
YXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2Vsc2UKICAgICAvLyBGSVhNRTogVGhlIHFzb3J0
IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgogICAg
IC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNwZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGlu
IHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEgc3RhYmxlIHNvcnQuCi0gICAgcXNvcnQodmFs
dWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21w
YXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgIHFzb3J0KHZhbHVlcy5kYXRhKCksIHZhbHVl
cy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9y
UVNvcnQpOwogI2VuZGlmCiAgICAgCiAgICAgLy8gSWYgdGhlIHRvU3RyaW5nIGZ1bmN0aW9uIGNo
YW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgb3IgdmVjdG9yIHN0b3JhZ2UsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgKaW5kZXggODhkNTdmM2Rk
NGU3OTc2OWQxZDA2YzNhODU5MTAxYjU1NWM2YTgzZi4uZGQzYzEyMWQwZWJiMTZlOGE1MjQ2MWZh
YWNkYmJiNGQ5ODdkNzJiMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L1Byb2ZpbGVUcmVlTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9m
aWxlVHJlZU5vZGUuaApAQCAtODYsNyArODYsNyBAQCBwcml2YXRlOgogICAgICAgICBWZWN0b3I8
TWFwRW50cnkqPiBlbnRyaWVzOwogICAgICAgICBmb3IgKE1hcDo6aXRlcmF0b3IgaXQgPSBtX2No
aWxkcmVuLT5iZWdpbigpOyBpdCAhPSBtX2NoaWxkcmVuLT5lbmQoKTsgKytpdCkKICAgICAgICAg
ICAgIGVudHJpZXMuYXBwZW5kKCYqaXQpOwotICAgICAgICBxc29ydChlbnRyaWVzLmJlZ2luKCks
IGVudHJpZXMuc2l6ZSgpLCBzaXplb2YoTWFwRW50cnkqKSwgY29tcGFyZUVudHJpZXMpOworICAg
ICAgICBxc29ydChlbnRyaWVzLmRhdGEoKSwgZW50cmllcy5zaXplKCksIHNpemVvZihNYXBFbnRy
eSopLCBjb21wYXJlRW50cmllcyk7CiAKICAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBjaGls
ZHJlbiBpbiBzYW1wbGUtZnJlcXVlbmN5IG9yZGVyLgogICAgICAgICBmb3IgKHNpemVfdCBlID0g
MDsgZSA8IGVudHJpZXMuc2l6ZSgpOyArK2UpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFy
ckpJVC5jcHAKaW5kZXggZTNhM2E5MzJjZTdlZDczOGYxOTg2YjJiZjJiNzQzZTA0MjNhM2IyNS4u
ZDI2OGU1OWUxMmJiNGU4MzY4Y2UzOTIwNjg3OGFjODE2MmUzYjQyZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKQEAgLTIyMyw3ICsyMjMsNyBAQCBjbGFzcyBZYXJyR2Vu
ZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgIGlmIChjaGFyQ2xhc3Mt
Pm1fcmFuZ2VzLnNpemUoKSkgewogICAgICAgICAgICAgdW5zaWduZWQgbWF0Y2hJbmRleCA9IDA7
CiAgICAgICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKLSAgICAgICAgICAgIG1hdGNoQ2hhcmFj
dGVyQ2xhc3NSYW5nZShjaGFyYWN0ZXIsIGZhaWx1cmVzLCBtYXRjaERlc3QsIGNoYXJDbGFzcy0+
bV9yYW5nZXMuYmVnaW4oKSwgY2hhckNsYXNzLT5tX3Jhbmdlcy5zaXplKCksICZtYXRjaEluZGV4
LCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5iZWdpbigpLCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5zaXpl
KCkpOworICAgICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzc1JhbmdlKGNoYXJhY3RlciwgZmFp
bHVyZXMsIG1hdGNoRGVzdCwgY2hhckNsYXNzLT5tX3Jhbmdlcy5kYXRhKCksIGNoYXJDbGFzcy0+
bV9yYW5nZXMuc2l6ZSgpLCAmbWF0Y2hJbmRleCwgY2hhckNsYXNzLT5tX21hdGNoZXMuZGF0YSgp
LCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5zaXplKCkpOwogICAgICAgICAgICAgd2hpbGUgKG1hdGNo
SW5kZXggPCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5zaXplKCkpCiAgICAgICAgICAgICAgICAgbWF0
Y2hEZXN0LmFwcGVuZChicmFuY2gzMihFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMigodW5zaWduZWQg
c2hvcnQpY2hhckNsYXNzLT5tX21hdGNoZXNbbWF0Y2hJbmRleCsrXSkpKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnZj
eHByb2ovV1RGLnZjeHByb2oKaW5kZXggZWM3MzMwODhlMzkxY2JhNTRkNmEwZjk0MTM4OTYyOGE2
ZGE3NDg2MC4uZTc1N2E1ZGI5MjU5YmVhMmY2ZThhMGZjYmVhZTExODIxNzI4ZTY2ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagorKysgYi9Tb3VyY2UvV1RG
L1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCkBAIC0yMjEsNiArMjIxLDcgQEAKICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHd0ZlxIYXNoVGFibGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHd0ZlxIYXNoVHJhaXRzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3
dGZcSGV4TnVtYmVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSW5kZXhl
ZEl0ZXJhdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSXRlcmF0b3JB
ZGFwdG9ycy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEl0ZXJhdG9yUmFu
Z2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxMaXN0SGFzaFNldC5oIiAv
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0ZXJz
IGIvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0ZXJzCmluZGV4IGExNGYz
ZTA5NzdlMmJjNDQ0MTE4Yjg0ODNiOTE4MDQ5ODU0NDE0MDIuLmI0ZGI1NTAxNzkwZTk1YjJkZjFi
Zjg2Mzk2ZjhjODhkNjAzZDk0NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ov
V1RGLnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hw
cm9qLmZpbHRlcnMKQEAgLTQ3MCw2ICs0NzAsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cd3RmXEhleE51bWJlci5oIj4KICAgICAgIDxGaWx0ZXI+d3RmPC9GaWx0ZXI+CiAgICAgPC9D
bEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSW5kZXhlZEl0ZXJhdG9y
LmgiPgorICAgICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxJdGVyYXRvckFkYXB0b3JzLmgiPgogICAgICAgPEZp
bHRlcj53dGY8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGVhN2IzMjMzZmJkZWNjZDM5ZjA2NzUzZDU5NjNjMDE1
ZDI2MWIwYmIuLjRhNDViNmZiMzU4NjlkOTlmNWFmOWExNjlhOGZhMzY3ZmUwZjQxZDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTAwLDYgKzEwMCw3IEBA
CiAJCUE3NDg3NDUyMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NDg3NDRGMTdBMEJE
QUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCAqLzsgfTsKIAkJQTc0ODc0NTMxN0Ew
QkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NDg3NDUwMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhD
aGFyYWN0ZXJIYXNoLmggKi87IH07CiAJCUE3NDg3NDU0MTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJp
bmdIYXNoRHVtcENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3NDg3NDUxMTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJpbmdIYXNoRHVtcENvbnRl
eHQuaCAqLzsgfTsKKwkJQTdEQzJGMDQxQTA5QTIyRDAwNzJGNEUzIC8qIEluZGV4ZWRJdGVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEQzJG
MDMxQTA5OURFMzAwNzJGNEUzIC8qIEluZGV4ZWRJdGVyYXRvci5oICovOyB9OwogCQlBN0U2NDND
NjE3QzU0MjNCMDAzQkIxNkIgLyogQ29tcHJlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdFNjQzQzQxN0M1NDIzQjAwM0JCMTZCIC8qIENv
bXByZXNzaW9uLmNwcCAqLzsgfTsKIAkJQTdFNjQzQzcxN0M1NDIzQjAwM0JCMTZCIC8qIENvbXBy
ZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0U2NDNDNTE3QzU0MjNCMDAzQkIxNkIgLyogQ29tcHJlc3Npb24uaCAqLzsgfTsKIAkJQTg3NkRC
RDgxNTE4MTZFNTAwREFEQjk1IC8qIFBsYXRmb3JtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODc2REJENzE1MTgxNkU1MDBEQURCOTUgLyogUGxhdGZv
cm0uaCAqLzsgfTsKQEAgLTM5Myw2ICszOTQsNyBAQAogCQlBNzQ4NzQ0RjE3QTBCREFFMDBGQTA0
Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTaXhDaGFyYWN0ZXJIYXNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTc0ODc0NTAxN0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2l4Q2hhcmFjdGVySGFzaC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBNzQ4NzQ1MTE3QTBCREFFMDBGQTA0Q0IgLyogU3RyaW5nSGFz
aER1bXBDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ0hh
c2hEdW1wQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0RDMkYwMzFB
MDk5REUzMDA3MkY0RTMgLyogSW5kZXhlZEl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4
ZWRJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0U2NDNDNDE3QzU0
MjNCMDAzQkIxNkIgLyogQ29tcHJlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29tcHJlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBN0U2NDNDNTE3QzU0MjNCMDAzQkIxNkIgLyogQ29tcHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTg3NkRCRDcxNTE4MTZFNTAwREFEQjk1IC8qIFBsYXRmb3JtLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC04OTgsNiArOTAwLDcgQEAKIAkJCQk5NzRDRkM4RDE2QTRGMzI3MDA2RDU0MDQg
LyogV2Vha1B0ci5oICovLAogCQkJCUE4QTQ3MzdBMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJl
YWREYXRhLmNwcCAqLywKIAkJCQlBOEE0NzM3QjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFk
RGF0YS5oICovLAorCQkJCUE3REMyRjAzMUEwOTlERTMwMDcyRjRFMyAvKiBJbmRleGVkSXRlcmF0
b3IuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gd3RmOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKQEAgLTEwNzEsNiArMTA3NCw3IEBACiAJCQkJQThBNDczQUQxNTFBODI1QjAwNDEyM0ZGIC8q
IGNhY2hlZC1wb3dlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDVFMTUxQTgyNUIwMDQx
MjNGRiAvKiBDaGFyYWN0ZXJOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOTQxNTFB
ODI1QjAwNDEyM0ZGIC8qIENoZWNrZWRBcml0aG1ldGljLmggaW4gSGVhZGVycyAqLywKKwkJCQlB
N0RDMkYwNDFBMDlBMjJEMDA3MkY0RTMgLyogSW5kZXhlZEl0ZXJhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzM5NTE1MUE4MjVCMDA0MTIzRkYgLyogQ2hlY2tlZEJvb2xlYW4uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDVGMTUxQTgyNUIwMDQxMjNGRiAvKiBDb2xsYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZDNEVERTYxNjk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRl
ci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9JbmRleGVkSXRl
cmF0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL0luZGV4ZWRJdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQx
MjI0NGM4Yjg4ZWM3ZjEwZjBlMWU1MzAxMDRjYjdkYjFkYWZkN2QKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9JbmRleGVkSXRlcmF0b3IuaApAQCAtMCwwICsxLDM1OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV1RGX0lu
ZGV4ZWRJdGVyYXRvcl9oCisjZGVmaW5lIFdURl9JbmRleGVkSXRlcmF0b3JfaAorCituYW1lc3Bh
Y2UgV1RGIHsKKworI2RlZmluZSBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGNoZWNrKSBkbyB7
XAorICAgIGlmICghKGNoZWNrKSlcCisgICAgICAgIE92ZXJmbG93SGFuZGxlcjo6b3ZlcmZsb3dl
ZCgpO1wKK30gd2hpbGUgKDApCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWZWN0b3JUeXBlLCB0eXBl
bmFtZSBULCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIgPSBDcmFzaE9uT3ZlcmZsb3c+IHN0cnVj
dCBJbmRleGVkSXRlcmF0b3IgeworICAgIHR5cGVkZWYgc3RydWN0IEluZGV4ZWRJdGVyYXRvcjxj
b25zdCBWZWN0b3JUeXBlLCBjb25zdCBULCBPdmVyZmxvd0hhbmRsZXI+IGNvbnN0X2l0ZXJhdG9y
OworCisgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm
ZXJlbmNlX3R5cGU7CisgICAgdHlwZWRlZiBWYWx1ZVR5cGUgdmFsdWVfdHlwZTsKKyAgICB0eXBl
ZGVmIFZhbHVlVHlwZSogcG9pbnRlcjsKKyAgICB0eXBlZGVmIFZhbHVlVHlwZSYgcmVmZXJlbmNl
OworICAgIHR5cGVkZWYgc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j
YXRlZ29yeTsKKworICAgIEluZGV4ZWRJdGVyYXRvcigpCisgICAgICAgIDogbV92ZWN0b3IobnVs
bHB0cikKKyAgICAgICAgLCBtX3Bvc2l0aW9uKDApCisgICAgeworICAgIH0KKworICAgIEluZGV4
ZWRJdGVyYXRvcihWZWN0b3JUeXBlJiB2ZWN0b3IsIFZhbHVlVHlwZSogcG9zaXRpb24pCisgICAg
ICAgIDogbV92ZWN0b3IoJnZlY3RvcikKKyAgICAgICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uIC0g
dmVjdG9yLmRhdGEoKSkKKyAgICB7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yKGNvbnN0
IEluZGV4ZWRJdGVyYXRvciYgb3RoZXIpCisgICAgICAgIDogbV92ZWN0b3Iob3RoZXIubV92ZWN0
b3IpCisgICAgICAgICwgbV9wb3NpdGlvbihvdGhlci5tX3Bvc2l0aW9uKQorICAgIHsKKyAgICB9
CisKKyAgICBWYWx1ZVR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmbV92ZWN0b3It
PmF0KG1fcG9zaXRpb24pOyB9CisgICAgVmFsdWVUeXBlJiBvcGVyYXRvciooKSBjb25zdCB7IHJl
dHVybiBtX3ZlY3Rvci0+YXQobV9wb3NpdGlvbik7IH0KKyAgICBWYWx1ZVR5cGUqIGdldCgpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoIW1fdmVjdG9yKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIElOREVYRURfSVRFUkFUT1JfT1ZFUkZMT1cobV9wb3NpdGlvbiA8PSBt
X3ZlY3Rvci0+c2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yLT5kYXRhKCkgKyBtX3Bv
c2l0aW9uOworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAg
eworICAgICAgICBtX3Bvc2l0aW9uKys7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisK
KyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpCisgICAgeworICAgICAgICBJbmRl
eGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgbV9wb3NpdGlvbisrOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciYgb3BlcmF0b3It
LSgpCisgICAgeworICAgICAgICBtX3Bvc2l0aW9uLS07CisgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpCisgICAgeworICAg
ICAgICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsKKyAgICAgICAgbV9wb3NpdGlvbi0t
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8vIFRoaXMgY29udmVyc2lv
biBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8g
b3RoZXIgaW50ZWdlciB0eXBlcy4KKyAgICB0eXBlZGVmIHNpemVfdCAoSW5kZXhlZEl0ZXJhdG9y
OjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yID8gJkluZGV4ZWRJdGVyYXRvcjo6bV9wb3NpdGlv
biA6IG51bGxwdHI7IH0KKworI2lmIF9fU0laRU9GX1NJWkVfVF9fICE9IF9fU0laRU9GX0lOVF9f
IHx8IFBMQVRGT1JNKENPQ09BKQorI2RlZmluZSBfVU5TSUdORURfSWZfRElGRkVSRU5UKG1hY3Jv
KSBtYWNybyh1bnNpZ25lZCkKKyNlbHNlCisjZGVmaW5lIF9VTlNJR05FRF9JZl9ESUZGRVJFTlQo
bWFjcm8pCisjZW5kaWYKKworI2RlZmluZSBGT1JfRUFDSF9JTlRFR0VSX1RZUEUobWFjcm8pIFwK
KyAgICBtYWNybyhzaXplX3QpIFwKKyAgICBtYWNybyhpbnQzMl90KSBcCisgICAgbWFjcm8obG9u
ZykgXAorICAgIG1hY3JvKGxvbmcgbG9uZykgXAorICAgIG1hY3JvKHVuc2lnbmVkIGxvbmcgbG9u
ZykgXAorICAgIF9VTlNJR05FRF9JZl9ESUZGRVJFTlQobWFjcm8pCisKKyNkZWZpbmUgTU9ESUZJ
RVJfT1BTKHR5cGUpIFwKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJhdG9yKz0odHlwZSBpbmNy
ZW1lbnQpIFwKKyAgICB7IFwKKyAgICAgICAgbV9wb3NpdGlvbiArPSBpbmNyZW1lbnQ7IFwKKyAg
ICAgICAgcmV0dXJuICp0aGlzOyBcCisgICAgfSBcCitcCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBv
cGVyYXRvci09KHR5cGUgZGVjcmVtZW50KSBcCisgICAgeyBcCisgICAgICAgIG1fcG9zaXRpb24g
LT0gZGVjcmVtZW50OyBcCisgICAgICAgIHJldHVybiAqdGhpczsgXAorICAgIH0KKworICAgIEZP
Ul9FQUNIX0lOVEVHRVJfVFlQRShNT0RJRklFUl9PUFMpCisKKyN1bmRlZiBNT0RJRklFUl9PUFMK
KworI2RlZmluZSBBUklUSE1FVElDX09QUyh0eXBlKSBcCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9w
ZXJhdG9yKyh0eXBlIGluY3JlbWVudCkgY29uc3QgXAorICAgIHsgXAorICAgICAgICBJbmRleGVk
SXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsgXAorICAgICAgICByZXN1bHQubV9wb3NpdGlvbiArPSBp
bmNyZW1lbnQ7IFwKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgIH0gXAorXAorICAgIElu
ZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0odHlwZSBkZWNyZW1lbnQpIGNvbnN0IFwKKyAgICB7IFwK
KyAgICAgICAgSW5kZXhlZEl0ZXJhdG9yIHJlc3VsdCgqdGhpcyk7IFwKKyAgICAgICAgcmVzdWx0
Lm1fcG9zaXRpb24gLT0gZGVjcmVtZW50OyBcCisgICAgICAgIHJldHVybiByZXN1bHQ7IFwKKyAg
ICB9CisKKworICAgIEZPUl9FQUNIX0lOVEVHRVJfVFlQRShBUklUSE1FVElDX09QUykKKworI3Vu
ZGVmIEFSSVRITUVUSUNfT1BTCisKKyAgICBwdHJkaWZmX3Qgb3BlcmF0b3ItKGNvbnN0IGNvbnN0
X2l0ZXJhdG9yJiByaWdodCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Bvc2l0aW9u
IC0gcmlnaHQubV9wb3NpdGlvbjsKKyAgICB9CisKKyAgICBwdHJkaWZmX3Qgb3BlcmF0b3ItKGNv
bnN0IFZhbHVlVHlwZSogcmlnaHQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZ2V0KCkg
LSByaWdodDsKKyAgICB9CisKKyAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBJbmRleGVkSXRlcmF0
b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IgPSBvdGhlci5tX3ZlY3RvcjsKKyAg
ICAgICAgbV9wb3NpdGlvbiA9IG90aGVyLm1fcG9zaXRpb247CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiB1bnNhZmVHZXQoKSA9PSBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpICE9IG90aGVyLnVuc2FmZUdldCgpOworICAg
IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpID09IG90aGVyOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHVuc2FmZUdldCgpICE9IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3I8KGNvbnN0IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gdW5zYWZlR2V0KCkgPCBvdGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPD0oY29u
c3QgVmFsdWVUeXBlKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1bnNhZmVH
ZXQoKSA8PSBvdGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBjb25zdF9p
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkg
PCBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3Qg
Y29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuc2Fm
ZUdldCgpIDw9IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+
KGNvbnN0IEluZGV4ZWRJdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gdW5zYWZlR2V0KCkgPiBvdGhlci51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICBib29sIG9w
ZXJhdG9yPj0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHVuc2FmZUdldCgpID49IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3I+KGNvbnN0IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPiBvdGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJh
dG9yPj0oY29uc3QgVmFsdWVUeXBlKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biB1bnNhZmVHZXQoKSA+PSBvdGhlcjsKKyAgICB9CisKKyAgICBvcGVyYXRvciBjb25zdF9pdGVy
YXRvcigpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdF9pdGVyYXRvciByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX3ZlY3RvciA9IG1fdmVjdG9yOworICAgICAgICByZXN1bHQubV9wb3NpdGlv
biA9IG1fcG9zaXRpb247CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgVmVj
dG9yVHlwZSogbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fcG9zaXRpb247CisKKyAgICBWYWx1ZVR5
cGUqIHVuc2FmZUdldCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fdmVjdG9yKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBnZXQoKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgdHlwZW5hbWUgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVl
VHlwZSwgT3ZlcmZsb3dIYW5kbGVyPjo6VmFsdWVUeXBlKiBnZXRQdHIoSW5kZXhlZEl0ZXJhdG9y
PFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiBwKQoreworICAgIHJldHVybiBwLmdldCgp
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgcHRyZGlmZl90IG9wZXJhdG9yLShjb25zdCBWYWx1
ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93
SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiBsZWZ0IC0gcmlnaHQuZ2V0KCk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4KK2lubGluZSBwdHJkaWZmX3Qgb3BlcmF0b3ItKFZhbHVlVHlwZSogbGVmdCwg
Y29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmln
aHQpCit7CisgICAgcmV0dXJuIGxlZnQgLSByaWdodC5nZXQoKTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgor
aW5saW5lIHB0cmRpZmZfdCBvcGVyYXRvci0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJ
bmRleGVkSXRlcmF0b3I8Y29uc3QgVCwgY29uc3QgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+
JiByaWdodCkKK3sKKyAgICByZXR1cm4gbGVmdCAtIHJpZ2h0LmdldCgpOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhl
ZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAg
cmV0dXJuIHJpZ2h0ID09IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFs
dWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPT0g
bGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShWYWx1ZVR5cGUq
IGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxl
cj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCAhPSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+
CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5k
ZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7Cisg
ICAgcmV0dXJuIHJpZ2h0ICE9IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBl
bmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9w
ZXJhdG9yPD0oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVU
eXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPj0gbGVm
dDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBWYWx1ZVR5
cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFu
ZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA+PSBsZWZ0OworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhl
ZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAg
cmV0dXJuIHJpZ2h0IDw9IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJh
dG9yPj0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFs
dWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPD0g
bGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I8KFZhbHVlVHlwZSog
bGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVy
PiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID4gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgor
aW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhl
ZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAg
cmV0dXJuIHJpZ2h0ID4gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0
b3I+KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwg
T3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0IDwgbGVmdDsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFZhbHVlVHlwZSogbGVm
dCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYg
cmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0IDwgbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFZlY3RvclR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gc3RydWN0IEluZGV4ZWRJ
dGVyYXRvclNlbGVjdG9yIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFZlY3RvclR5cGU6OlZhbHVl
VHlwZSBWYWx1ZVR5cGU7CisgICAgdHlwZWRlZiBJbmRleGVkSXRlcmF0b3I8VmVjdG9yVHlwZSwg
VmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+IGl0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3I6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHN0YXRpYyBp
dGVyYXRvciBtYWtlSXRlcmF0b3IoVmVjdG9yVHlwZSYgdmVjdG9yLCBWYWx1ZVR5cGUqIHApIHsg
cmV0dXJuIGl0ZXJhdG9yKHZlY3RvciwgcCk7IH0KKyAgICBzdGF0aWMgY29uc3RfaXRlcmF0b3Ig
bWFrZUNvbnN0SXRlcmF0b3IoY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yLCBjb25zdCBWYWx1ZVR5
cGUqIHApIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHZlY3RvciwgcCk7IH0KK307CisKKyN1bmRl
ZiBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XCisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaCBiL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50
ZWRBcnJheS5oCmluZGV4IGE1NWQ3YWVlYWI4NGI5YzQ5NTE5NmU4ZTIzMGExZGMxNzg1MTkzYWIu
LjgxMWU5ZmZjZWEzMzdhNmM3ZDhiMjkxNjMwZTJhZmRmOGU1NjYzOTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlZkNv
dW50ZWRBcnJheS5oCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICAgICAgSGVhZGVyOjpm
cm9tUGF5bG9hZChtX2RhdGEpLT5yZWZDb3VudCA9IDE7CiAgICAgICAgIEhlYWRlcjo6ZnJvbVBh
eWxvYWQobV9kYXRhKS0+bGVuZ3RoID0gb3RoZXIuc2l6ZSgpOwogICAgICAgICBBU1NFUlQoSGVh
ZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5sZW5ndGggPT0gb3RoZXIuc2l6ZSgpKTsKLSAgICAg
ICAgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD46OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2lu
KCksIG90aGVyLmVuZCgpLCBtX2RhdGEpOworICAgICAgICBWZWN0b3JUeXBlT3BlcmF0aW9uczxU
Pjo6dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIu
ZW5kKCkpLCBtX2RhdGEpOwogICAgIH0KICAgICAKICAgICBSZWZDb3VudGVkQXJyYXkmIG9wZXJh
dG9yPShjb25zdCBSZWZDb3VudGVkQXJyYXkmIG90aGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvVmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAppbmRleCBmMzEzMjllMzRi
MzdiMzg5Y2I4OTYwOTBmMzUwMjk5YTQxZGM5YjQwLi41OTAzZmU0ZDM2YjQ4NzNiMDY4MTJjYzJj
MDQwOGQ4ZGU4MGU1YjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaApAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgPHV0
aWxpdHk+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL0lu
ZGV4ZWRJdGVyYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4KICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC01NTMs
MTQgKzU1NSwxNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHkg
PSAwLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIgPSBDcmFzaAogY2xhc3MgVmVjdG9yIDogcHJp
dmF0ZSBWZWN0b3JCdWZmZXI8VCwgaW5saW5lQ2FwYWNpdHk+IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHByaXZhdGU6CisKICAgICB0eXBlZGVmIFZlY3RvckJ1ZmZlcjxULCBpbmxp
bmVDYXBhY2l0eT4gQmFzZTsKICAgICB0eXBlZGVmIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+IFR5
cGVPcGVyYXRpb25zOworICAgIHR5cGVkZWYgSW5kZXhlZEl0ZXJhdG9yU2VsZWN0b3I8VmVjdG9y
LCBPdmVyZmxvd0hhbmRsZXI+IEl0ZXJhdG9yU2VsZWN0b3I7CiAKIHB1YmxpYzoKICAgICB0eXBl
ZGVmIFQgVmFsdWVUeXBlOwogCi0gICAgdHlwZWRlZiBUKiBpdGVyYXRvcjsKLSAgICB0eXBlZGVm
IGNvbnN0IFQqIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgSXRlcmF0b3JT
ZWxlY3Rvcjo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBJdGVyYXRv
clNlbGVjdG9yOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKwogICAgIHR5cGVkZWYg
c3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwogICAgIHR5
cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yOwogCkBAIC01NzMsMTQgKzU3OCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIDogQmFz
ZShzaXplLCBzaXplKQogICAgIHsKICAgICAgICAgaWYgKGJlZ2luKCkpCi0gICAgICAgICAgICBU
eXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShiZWdpbigpLCBlbmQoKSk7CisgICAgICAgICAgICBU
eXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShnZXRQdHIoYmVnaW4oKSksIGdldFB0cihlbmQoKSkp
OwogICAgIH0KIAogICAgIFZlY3RvcihzaXplX3Qgc2l6ZSwgY29uc3QgVCYgdmFsKQogICAgICAg
ICA6IEJhc2Uoc2l6ZSwgc2l6ZSkKICAgICB7CiAgICAgICAgIGlmIChiZWdpbigpKQotICAgICAg
ICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRGaWxsKGJlZ2luKCksIGVuZCgpLCB2
YWwpOworICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRGaWxsKGdldFB0
cihiZWdpbigpKSwgZ2V0UHRyKGVuZCgpKSwgdmFsKTsKICAgICB9CiAKICAgICBWZWN0b3Ioc3Rk
Ojppbml0aWFsaXplcl9saXN0PFQ+IGluaXRpYWxpemVyTGlzdCkKQEAgLTY0NCwxMCArNjQ5LDEw
IEBAIHB1YmxpYzoKICAgICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gQmFzZTo6YnVm
ZmVyKCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGRhdGFNZW1vcnlPZmZzZXQoKSB7IHJldHVy
biBCYXNlOjpidWZmZXJNZW1vcnlPZmZzZXQoKTsgfQogCi0gICAgaXRlcmF0b3IgYmVnaW4oKSB7
IHJldHVybiBkYXRhKCk7IH0KLSAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBiZWdpbigpICsg
bV9zaXplOyB9Ci0gICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBkYXRh
KCk7IH0KLSAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBiZWdpbigpICsg
bV9zaXplOyB9CisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBJdGVyYXRvclNlbGVjdG9y
OjptYWtlSXRlcmF0b3IoKnRoaXMsIGRhdGEoKSk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJl
dHVybiBiZWdpbigpICsgc2l6ZSgpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25z
dCB7IHJldHVybiBJdGVyYXRvclNlbGVjdG9yOjptYWtlQ29uc3RJdGVyYXRvcigqdGhpcywgZGF0
YSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkg
KyBzaXplKCk7IH0KIAogICAgIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2
ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICAgICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJl
dHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CkBAIC02ODIsNiArNjg3LDcgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBjbGVhcigpIHsgc2hyaW5rQ2FwYWNpdHkoMCk7IH0KIAorICAgIHZv
aWQgYXBwZW5kKGNvbnN0X2l0ZXJhdG9yLCBzaXplX3QpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+IHZvaWQgYXBwZW5kKGNvbnN0IFUqLCBzaXplX3QpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+IHZvaWQgYXBwZW5kKFUmJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCB1bmNo
ZWNrZWRBcHBlbmQoVSYmIHZhbCk7CkBAIC03NDUsNyArNzUxLDcgQEAgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpWZWN0b3IoY29uc3QgVmVjdG9yJiBvdGhlcikK
ICAgICA6IEJhc2Uob3RoZXIuY2FwYWNpdHkoKSwgb3RoZXIuc2l6ZSgpKQogewogICAgIGlmIChi
ZWdpbigpKQotICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXIu
YmVnaW4oKSwgb3RoZXIuZW5kKCksIGJlZ2luKCkpOworICAgICAgICBUeXBlT3BlcmF0aW9uczo6
dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuZW5k
KCkpLCBnZXRQdHIoYmVnaW4oKSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KQEAgLTc1NCw3ICs3NjAs
NyBAQCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OlZlY3Rvcihj
b25zdCBWZWN0b3I8VCwgb3RoZXJDYXBhY2l0eQogICAgIDogQmFzZShvdGhlci5jYXBhY2l0eSgp
LCBvdGhlci5zaXplKCkpCiB7CiAgICAgaWYgKGJlZ2luKCkpCi0gICAgICAgIFR5cGVPcGVyYXRp
b25zOjp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSwgYmVnaW4o
KSk7CisgICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShnZXRQdHIob3Ro
ZXIuYmVnaW4oKSksIGdldFB0cihvdGhlci5lbmQoKSksIGdldFB0cihiZWdpbigpKSk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyPgpAQCAtNzcxLDggKzc3Nyw4IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyPiYgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
CiAgICAgICAgIEFTU0VSVChiZWdpbigpKTsKICAgICB9CiAgICAgCi0gICAgc3RkOjpjb3B5KG90
aGVyLmJlZ2luKCksIG90aGVyLmJlZ2luKCkgKyBzaXplKCksIGJlZ2luKCkpOwotICAgIFR5cGVP
cGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpICsgc2l6ZSgpLCBvdGhl
ci5lbmQoKSwgZW5kKCkpOworICAgIHN0ZDo6Y29weShnZXRQdHIob3RoZXIuYmVnaW4oKSksIGdl
dFB0cihvdGhlci5iZWdpbigpICsgc2l6ZSgpKSwgZ2V0UHRyKGJlZ2luKCkpKTsKKyAgICBUeXBl
T3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkgKyBzaXpl
KCkpLCBnZXRQdHIob3RoZXIuZW5kKCkpLCBnZXRQdHIoZW5kKCkpKTsKICAgICBtX3NpemUgPSBv
dGhlci5zaXplKCk7CiAKICAgICByZXR1cm4gKnRoaXM7CkBAIC03OTYsOSArODAyLDkgQEAgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+JiBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGEKICAgICAgICAgcmVzZXJ2ZUNhcGFjaXR5KG90aGVyLnNpemUo
KSk7CiAgICAgICAgIEFTU0VSVChiZWdpbigpKTsKICAgICB9Ci0gICAgCi0gICAgc3RkOjpjb3B5
KG90aGVyLmJlZ2luKCksIG90aGVyLmJlZ2luKCkgKyBzaXplKCksIGJlZ2luKCkpOwotICAgIFR5
cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpICsgc2l6ZSgpLCBv
dGhlci5lbmQoKSwgZW5kKCkpOworCisgICAgc3RkOjpjb3B5KGdldFB0cihvdGhlci5iZWdpbigp
KSwgZ2V0UHRyKG90aGVyLmJlZ2luKCkgKyBzaXplKCkpLCBnZXRQdHIoYmVnaW4oKSkpOworICAg
IFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShnZXRQdHIob3RoZXIuYmVnaW4oKSAr
IHNpemUoKSksIGdldFB0cihvdGhlci5lbmQoKSksIGdldFB0cihlbmQoKSkpOwogICAgIG1fc2l6
ZSA9IG90aGVyLnNpemUoKTsKIAogICAgIHJldHVybiAqdGhpczsKQEAgLTg1OCw4ICs4NjQsOCBA
QCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6ZmlsbChj
b25zdCBUJiB2YWwsIHNpemVfdCBuZXdTaQogICAgICAgICBBU1NFUlQoYmVnaW4oKSk7CiAgICAg
fQogICAgIAotICAgIHN0ZDo6ZmlsbChiZWdpbigpLCBlbmQoKSwgdmFsKTsKLSAgICBUeXBlT3Bl
cmF0aW9uczo6dW5pbml0aWFsaXplZEZpbGwoZW5kKCksIGJlZ2luKCkgKyBuZXdTaXplLCB2YWwp
OworICAgIHN0ZDo6ZmlsbChnZXRQdHIoYmVnaW4oKSksIGdldFB0cihlbmQoKSksIHZhbCk7Cisg
ICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRGaWxsKGdldFB0cihlbmQoKSksIGdldFB0
cihiZWdpbigpKSArIG5ld1NpemUsIHZhbCk7CiAgICAgbV9zaXplID0gbmV3U2l6ZTsKIH0KIApA
QCAtODgwLDEzICs4ODYsMTMgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlcj46OmV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
PgogVCogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpleHBhbmRD
YXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHksIFQqIHB0cikKIHsKLSAgICBpZiAocHRyIDwg
YmVnaW4oKSB8fCBwdHIgPj0gZW5kKCkpIHsKKyAgICBpZiAocHRyIDwgZ2V0UHRyKGJlZ2luKCkp
IHx8IHB0ciA+PSBnZXRQdHIoZW5kKCkpKSB7CiAgICAgICAgIGV4cGFuZENhcGFjaXR5KG5ld01p
bkNhcGFjaXR5KTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAgICAgc2l6ZV90IGluZGV4
ID0gcHRyIC0gYmVnaW4oKTsKICAgICBleHBhbmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0eSk7Ci0g
ICAgcmV0dXJuIGJlZ2luKCkgKyBpbmRleDsKKyAgICByZXR1cm4gZ2V0UHRyKGJlZ2luKCkgKyBp
bmRleCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwg
dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgpAQCAtODk4LDE1ICs5MDQsMTUgQEAgYm9vbCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnRyeUV4cGFuZENhcGFjaXR5
KHNpemVfdCBuZXdNaW4KIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogY29uc3QgVCogVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojp0cnlFeHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWlu
Q2FwYWNpdHksIGNvbnN0IFQqIHB0cikKIHsKLSAgICBpZiAocHRyIDwgYmVnaW4oKSB8fCBwdHIg
Pj0gZW5kKCkpIHsKKyAgICBpZiAocHRyIDwgZ2V0UHRyKGJlZ2luKCkpIHx8IHB0ciA+PSBnZXRQ
dHIoZW5kKCkpKSB7CiAgICAgICAgIGlmICghdHJ5RXhwYW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNp
dHkpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQot
ICAgIHNpemVfdCBpbmRleCA9IHB0ciAtIGJlZ2luKCk7CisgICAgc2l6ZV90IGluZGV4ID0gKHB0
ciAtIGJlZ2luKCkpOwogICAgIGlmICghdHJ5RXhwYW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkp
KQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gYmVnaW4oKSArIGluZGV4OworICAgIHJl
dHVybiBnZXRQdHIoYmVnaW4oKSkgKyBpbmRleDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHRlbXBsYXRl
PHR5cGVuYW1lIFU+CkBAIC05MjAsMTIgKzkyNiwxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIGlubGluZSB2
b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVzaXplKHNp
emVfdCBzaXplKQogewogICAgIGlmIChzaXplIDw9IG1fc2l6ZSkKLSAgICAgICAgVHlwZU9wZXJh
dGlvbnM6OmRlc3RydWN0KGJlZ2luKCkgKyBzaXplLCBlbmQoKSk7CisgICAgICAgIFR5cGVPcGVy
YXRpb25zOjpkZXN0cnVjdChnZXRQdHIoYmVnaW4oKSkgKyBzaXplLCBnZXRQdHIoZW5kKCkpKTsK
ICAgICBlbHNlIHsKICAgICAgICAgaWYgKHNpemUgPiBjYXBhY2l0eSgpKQogICAgICAgICAgICAg
ZXhwYW5kQ2FwYWNpdHkoc2l6ZSk7CiAgICAgICAgIGlmIChiZWdpbigpKQotICAgICAgICAgICAg
VHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoZW5kKCksIGJlZ2luKCkgKyBzaXplKTsKKyAgICAg
ICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0aWFsaXplKGdldFB0cihlbmQoKSksIGdldFB0cihi
ZWdpbigpKSArIHNpemUpOwogICAgIH0KICAgICAKICAgICBtX3NpemUgPSBzaXplOwpAQCAtOTQy
LDcgKzk0OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwg
dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlcj46OnNocmluayhzaXplX3Qgc2l6ZSkKIHsKICAgICBBU1NFUlQoc2l6
ZSA8PSBtX3NpemUpOwotICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChiZWdpbigpICsgc2l6
ZSwgZW5kKCkpOworICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChnZXRQdHIoYmVnaW4oKSkg
KyBzaXplLCBnZXRQdHIoZW5kKCkpKTsKICAgICBtX3NpemUgPSBzaXplOwogfQogCkBAIC05NTMs
NyArOTU5LDcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
cj46Omdyb3coc2l6ZV90IHNpemUpCiAgICAgaWYgKHNpemUgPiBjYXBhY2l0eSgpKQogICAgICAg
ICBleHBhbmRDYXBhY2l0eShzaXplKTsKICAgICBpZiAoYmVnaW4oKSkKLSAgICAgICAgVHlwZU9w
ZXJhdGlvbnM6OmluaXRpYWxpemUoZW5kKCksIGJlZ2luKCkgKyBzaXplKTsKKyAgICAgICAgVHlw
ZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoZ2V0UHRyKGVuZCgpKSwgZ2V0UHRyKGJlZ2luKCkpICsg
c2l6ZSk7CiAgICAgbV9zaXplID0gc2l6ZTsKIH0KIApAQCAtOTYyLDExICs5NjgsMTEgQEAgdm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnJlc2VydmVDYXBh
Y2l0eShzaXplX3QgbmV3Q2FwYWMKIHsKICAgICBpZiAobmV3Q2FwYWNpdHkgPD0gY2FwYWNpdHko
KSkKICAgICAgICAgcmV0dXJuOwotICAgIFQqIG9sZEJ1ZmZlciA9IGJlZ2luKCk7Ci0gICAgVCog
b2xkRW5kID0gZW5kKCk7CisgICAgVCogb2xkQnVmZmVyID0gZ2V0UHRyKGJlZ2luKCkpOworICAg
IFQqIG9sZEVuZCA9IGdldFB0cihlbmQoKSk7CiAgICAgQmFzZTo6YWxsb2NhdGVCdWZmZXIobmV3
Q2FwYWNpdHkpOwogICAgIEFTU0VSVChiZWdpbigpKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6bW92
ZShvbGRCdWZmZXIsIG9sZEVuZCwgYmVnaW4oKSk7CisgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUo
b2xkQnVmZmVyLCBvbGRFbmQsIGdldFB0cihiZWdpbigpKSk7CiAgICAgQmFzZTo6ZGVhbGxvY2F0
ZUJ1ZmZlcihvbGRCdWZmZXIpOwogfQogCkBAIC05NzUsMTIgKzk4MSwxMiBAQCBib29sIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6dHJ5UmVzZXJ2ZUNhcGFjaXR5
KHNpemVfdCBuZXdDYQogewogICAgIGlmIChuZXdDYXBhY2l0eSA8PSBjYXBhY2l0eSgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBUKiBvbGRCdWZmZXIgPSBiZWdpbigpOwotICAgIFQqIG9s
ZEVuZCA9IGVuZCgpOworICAgIFQqIG9sZEJ1ZmZlciA9IGdldFB0cihiZWdpbigpKTsKKyAgICBU
KiBvbGRFbmQgPSBnZXRQdHIoZW5kKCkpOwogICAgIGlmICghQmFzZTo6dHJ5QWxsb2NhdGVCdWZm
ZXIobmV3Q2FwYWNpdHkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgQVNTRVJUKGJlZ2lu
KCkpOwotICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBiZWdpbigp
KTsKKyAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShvbGRCdWZmZXIsIG9sZEVuZCwgZ2V0UHRyKGJl
Z2luKCkpKTsKICAgICBCYXNlOjpkZWFsbG9jYXRlQnVmZmVyKG9sZEJ1ZmZlcik7CiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC0xMDAzLDE3ICsxMDA5LDE3IEBAIHZvaWQgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpzaHJpbmtDYXBhY2l0eShzaXplX3QgbmV3Q2Fw
YWNpCiAgICAgaWYgKG5ld0NhcGFjaXR5IDwgc2l6ZSgpKSAKICAgICAgICAgc2hyaW5rKG5ld0Nh
cGFjaXR5KTsKIAotICAgIFQqIG9sZEJ1ZmZlciA9IGJlZ2luKCk7CisgICAgVCogb2xkQnVmZmVy
ID0gZ2V0UHRyKGJlZ2luKCkpOwogICAgIGlmIChuZXdDYXBhY2l0eSA+IDApIHsKICAgICAgICAg
aWYgKEJhc2U6OnNob3VsZFJlYWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpKSB7CiAgICAgICAg
ICAgICBCYXNlOjpyZWFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFQqIG9sZEVuZCA9IGVuZCgpOworICAgICAgICBU
KiBvbGRFbmQgPSBnZXRQdHIoZW5kKCkpOwogICAgICAgICBCYXNlOjphbGxvY2F0ZUJ1ZmZlcihu
ZXdDYXBhY2l0eSk7CiAgICAgICAgIGlmIChiZWdpbigpICE9IG9sZEJ1ZmZlcikKLSAgICAgICAg
ICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBiZWdpbigpKTsKKyAg
ICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBnZXRQdHIo
YmVnaW4oKSkpOwogICAgIH0KIAogICAgIEJhc2U6OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVy
KTsKQEAgLTEwMzMsMTEgKzEwMzksMTcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlcj46OmFwcGVuZChjb25zdCBVKiBkYXRhLCBzaXplX3QgZGEKICAgICB9
CiAgICAgaWYgKG5ld1NpemUgPCBtX3NpemUpCiAgICAgICAgIENSQVNIKCk7Ci0gICAgVCogZGVz
dCA9IGVuZCgpOworICAgIFQqIGRlc3QgPSBnZXRQdHIoZW5kKCkpOwogICAgIFZlY3RvckNvcGll
cjxzdGQ6OmlzX3RyaXZpYWw8VD46OnZhbHVlLCBVPjo6dW5pbml0aWFsaXplZENvcHkoZGF0YSwg
JmRhdGFbZGF0YVNpemVdLCBkZXN0KTsKICAgICBtX3NpemUgPSBuZXdTaXplOwogfQogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4KK3ZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+
OjphcHBlbmQoY29uc3RfaXRlcmF0b3IgZGF0YSwgc2l6ZV90IGRhdGFTaXplKQoreworICAgIGFw
cGVuZChnZXRQdHIoZGF0YSksIGRhdGFTaXplKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHRlbXBsYXRl
PHR5cGVuYW1lIFU+CiBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyPjo6dHJ5QXBwZW5kKGNvbnN0IFUqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKIHsKQEAgLTEw
NTAsNyArMTA2Miw3IEBAIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXI+Ojp0cnlBcHBlbmQoY29uc3QgVSogZGF0YSwgc2l6ZV90CiAgICAgfQogICAgIGlmIChu
ZXdTaXplIDwgbV9zaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgVCogZGVzdCA9IGVu
ZCgpOworICAgIFQqIGRlc3QgPSBnZXRQdHIoZW5kKCkpOwogICAgIFZlY3RvckNvcGllcjxzdGQ6
OmlzX3RyaXZpYWw8VD46OnZhbHVlLCBVPjo6dW5pbml0aWFsaXplZENvcHkoZGF0YSwgJmRhdGFb
ZGF0YVNpemVdLCBkZXN0KTsKICAgICBtX3NpemUgPSBuZXdTaXplOwogICAgIHJldHVybiB0cnVl
OwpAQCAtMTA2MCw3ICsxMDcyLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHRlbXBsYXRlPHQKIEFMV0FZU19J
TkxJTkUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmFw
cGVuZChVJiYgdmFsdWUpCiB7CiAgICAgaWYgKHNpemUoKSAhPSBjYXBhY2l0eSgpKSB7Ci0gICAg
ICAgIG5ldyAoTm90TnVsbCwgZW5kKCkpIFQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAg
ICAgIG5ldyAoTm90TnVsbCwgZ2V0UHRyKGVuZCgpKSkgVChzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKICAgICAgICAgKyttX3NpemU7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMDc3LDcg
KzEwODksNyBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
Pjo6YXBwZW5kU2xvd0Nhc2UoVSYmIHZhbHVlKQogICAgIHB0ciA9IGV4cGFuZENhcGFjaXR5KHNp
emUoKSArIDEsIHB0cik7CiAgICAgQVNTRVJUKGJlZ2luKCkpOwogCi0gICAgbmV3IChOb3ROdWxs
LCBlbmQoKSkgVChzdGQ6OmZvcndhcmQ8VT4oKnB0cikpOworICAgIG5ldyAoTm90TnVsbCwgZ2V0
UHRyKGVuZCgpKSkgVChzdGQ6OmZvcndhcmQ8VT4oKnB0cikpOwogICAgICsrbV9zaXplOwogfQog
CkBAIC0xMDkwLDE0ICsxMTAyLDE0IEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6dW5jaGVja2VkQXBwZW5kKFUmJiB2YWx1CiAgICAgQVNT
RVJUKHNpemUoKSA8IGNhcGFjaXR5KCkpOwogCiAgICAgYXV0byBwdHIgPSBzdGQ6OmFkZHJlc3Nv
Zih2YWx1ZSk7Ci0gICAgbmV3IChOb3ROdWxsLCBlbmQoKSkgVChzdGQ6OmZvcndhcmQ8VT4oKnB0
cikpOworICAgIG5ldyAoTm90TnVsbCwgZ2V0UHRyKGVuZCgpKSkgVChzdGQ6OmZvcndhcmQ8VT4o
KnB0cikpOwogICAgICsrbV9zaXplOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5h
bWUgVSwgc2l6ZV90IG90aGVyQ2FwYWNpdHk+CiBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmFwcGVuZFZlY3Rvcihjb25zdCBWZWN0b3I8VSwg
b3RoZXJDYXBhY2l0eT4mIHZhbCkKIHsKLSAgICBhcHBlbmQodmFsLmJlZ2luKCksIHZhbC5zaXpl
KCkpOworICAgIGFwcGVuZChnZXRQdHIodmFsLmJlZ2luKCkpLCB2YWwuc2l6ZSgpKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXI+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CkBAIC0xMTExLDggKzExMjMsOCBAQCB2
b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6aW5zZXJ0KHNp
emVfdCBwb3NpdGlvbiwgY29uc3QgVQogICAgIH0KICAgICBpZiAobmV3U2l6ZSA8IG1fc2l6ZSkK
ICAgICAgICAgQ1JBU0goKTsKLSAgICBUKiBzcG90ID0gYmVnaW4oKSArIHBvc2l0aW9uOwotICAg
IFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCwgZW5kKCksIHNwb3QgKyBkYXRh
U2l6ZSk7CisgICAgVCogc3BvdCA9IGdldFB0cihiZWdpbigpKSArIHBvc2l0aW9uOworICAgIFR5
cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCwgZ2V0UHRyKGVuZCgpKSwgc3BvdCAr
IGRhdGFTaXplKTsKICAgICBWZWN0b3JDb3BpZXI8c3RkOjppc190cml2aWFsPFQ+Ojp2YWx1ZSwg
VT46OnVuaW5pdGlhbGl6ZWRDb3B5KGRhdGEsICZkYXRhW2RhdGFTaXplXSwgc3BvdCk7CiAgICAg
bV9zaXplID0gbmV3U2l6ZTsKIH0KQEAgLTExMjgsOCArMTE0MCw4IEBAIGlubGluZSB2b2lkIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6aW5zZXJ0KHNpemVfdCBw
b3NpdGlvbiwKICAgICAgICAgQVNTRVJUKGJlZ2luKCkpOwogICAgIH0KIAotICAgIFQqIHNwb3Qg
PSBiZWdpbigpICsgcG9zaXRpb247Ci0gICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGlu
ZyhzcG90LCBlbmQoKSwgc3BvdCArIDEpOworICAgIFQqIHNwb3QgPSBnZXRQdHIoYmVnaW4oKSkg
KyBwb3NpdGlvbjsKKyAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGdl
dFB0cihlbmQoKSksIHNwb3QgKyAxKTsKICAgICBuZXcgKE5vdE51bGwsIHNwb3QpIFQoc3RkOjpm
b3J3YXJkPFU+KCpwdHIpKTsKICAgICArK21fc2l6ZTsKIH0KQEAgLTExMzcsMTYgKzExNDksMTYg
QEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+
OjppbnNlcnQoc2l6ZV90IHBvc2l0aW9uLAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHRlbXBsYXRlPHR5cGVuYW1l
IFUsIHNpemVfdCBjPgogaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXI+OjppbnNlcnRWZWN0b3Ioc2l6ZV90IHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8
VSwgYz4mIHZhbCkKIHsKLSAgICBpbnNlcnQocG9zaXRpb24sIHZhbC5iZWdpbigpLCB2YWwuc2l6
ZSgpKTsKKyAgICBpbnNlcnQocG9zaXRpb24sIGdldFB0cih2YWwuYmVnaW4oKSksIHZhbC5zaXpl
KCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlKHNpemVfdCBwb3NpdGlvbikKIHsKICAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihwb3NpdGlvbiA8IHNpemUoKSk7Ci0gICAg
VCogc3BvdCA9IGJlZ2luKCkgKyBwb3NpdGlvbjsKKyAgICBUKiBzcG90ID0gZ2V0UHRyKGJlZ2lu
KCkpICsgcG9zaXRpb247CiAgICAgc3BvdC0+flQoKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6bW92
ZU92ZXJsYXBwaW5nKHNwb3QgKyAxLCBlbmQoKSwgc3BvdCk7CisgICAgVHlwZU9wZXJhdGlvbnM6
Om1vdmVPdmVybGFwcGluZyhzcG90ICsgMSwgZ2V0UHRyKGVuZCgpKSwgc3BvdCk7CiAgICAgLS1t
X3NpemU7CiB9CiAKQEAgLTExNTUsMTAgKzExNjcsMTAgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUoc2l6ZV90IHBvc2l0aW9u
LAogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0aW9uIDw9IHNp
emUoKSk7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24gKyBs
ZW5ndGggPD0gc2l6ZSgpKTsKLSAgICBUKiBiZWdpblNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247
CisgICAgVCogYmVnaW5TcG90ID0gZ2V0UHRyKGJlZ2luKCkpICsgcG9zaXRpb247CiAgICAgVCog
ZW5kU3BvdCA9IGJlZ2luU3BvdCArIGxlbmd0aDsKICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1
Y3QoYmVnaW5TcG90LCBlbmRTcG90KTsgCi0gICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFw
cGluZyhlbmRTcG90LCBlbmQoKSwgYmVnaW5TcG90KTsKKyAgICBUeXBlT3BlcmF0aW9uczo6bW92
ZU92ZXJsYXBwaW5nKGVuZFNwb3QsIGdldFB0cihlbmQoKSksIGJlZ2luU3BvdCk7CiAgICAgbV9z
aXplIC09IGxlbmd0aDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggZTZjODM3M2VjMThjYzIzNzM3MDU3NjVh
Zjg1Y2I3NGI1ZjZkOWUyZi4uZjc4Y2I5YzkzMzU2ZGU2OTZjZWZiZWE3YWQzNWNlODA5NzM0Zjcx
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCkBAIC0xNDQyLDggKzE0NDIsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAg
ICAgICAgY29uc3QgdWludDhfdCogcHRyID0gYnVmZmVyLmJlZ2luKCk7Ci0gICAgICAgIGNvbnN0
IHVpbnQ4X3QqIGVuZCA9IGJ1ZmZlci5lbmQoKTsKKyAgICAgICAgY29uc3QgdWludDhfdCogcHRy
ID0gZ2V0UHRyKGJ1ZmZlci5iZWdpbigpKTsKKyAgICAgICAgY29uc3QgdWludDhfdCogZW5kID0g
Z2V0UHRyKGJ1ZmZlci5lbmQoKSk7CiAgICAgICAgIHVpbnQzMl90IHZlcnNpb247CiAgICAgICAg
IGlmICghcmVhZExpdHRsZUVuZGlhbihwdHIsIGVuZCwgdmVyc2lvbikgfHwgdmVyc2lvbiA+IEN1
cnJlbnRWZXJzaW9uKQogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IDg0NTI1YmVmOGUyM2FiMzI4OTJhNDgwYWQx
MmQ2MGYwODQ2OTIyYTAuLjQyN2I2ZDIxYjQ5N2U3NjYwN2JlMDNkNjMyMmExZmMyNjhjNjliYmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTIwNzMsMTEgKzIw
NzMsMTEgQEAgaW5saW5lIGJvb2wgU2VhcmNoQnVmZmVyOjppc0JhZE1hdGNoKGNvbnN0IFVDaGFy
KiBtYXRjaCwgc2l6ZV90IG1hdGNoTGVuZ3RoKSBjb24KICAgICAvLyBjcmVhdGluZyBhIG5ldyBv
bmUgZWFjaCB0aW1lLgogICAgIG5vcm1hbGl6ZUNoYXJhY3RlcnMobWF0Y2gsIG1hdGNoTGVuZ3Ro
LCBtX25vcm1hbGl6ZWRNYXRjaCk7CiAKLSAgICBjb25zdCBVQ2hhciogYSA9IG1fbm9ybWFsaXpl
ZFRhcmdldC5iZWdpbigpOwotICAgIGNvbnN0IFVDaGFyKiBhRW5kID0gbV9ub3JtYWxpemVkVGFy
Z2V0LmVuZCgpOworICAgIGNvbnN0IFVDaGFyKiBhID0gZ2V0UHRyKG1fbm9ybWFsaXplZFRhcmdl
dC5iZWdpbigpKTsKKyAgICBjb25zdCBVQ2hhciogYUVuZCA9IGdldFB0cihtX25vcm1hbGl6ZWRU
YXJnZXQuZW5kKCkpOwogCi0gICAgY29uc3QgVUNoYXIqIGIgPSBtX25vcm1hbGl6ZWRNYXRjaC5i
ZWdpbigpOwotICAgIGNvbnN0IFVDaGFyKiBiRW5kID0gbV9ub3JtYWxpemVkTWF0Y2guZW5kKCk7
CisgICAgY29uc3QgVUNoYXIqIGIgPSBnZXRQdHIobV9ub3JtYWxpemVkTWF0Y2guYmVnaW4oKSk7
CisgICAgY29uc3QgVUNoYXIqIGJFbmQgPSBnZXRQdHIobV9ub3JtYWxpemVkTWF0Y2guZW5kKCkp
OwogCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgLy8gU2tpcCBydW5zIG9mIG5vbi1rYW5h
LWxldHRlciBjaGFyYWN0ZXJzLiBUaGlzIGlzIG5lY2Vzc2FyeSBzbyB3ZSBjYW4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCmlu
ZGV4IGQ1MWNhNTk5ZDk1MjIzMjhmMzIyODE5Njc3ZTljYWM1ZTk0NzBmYjAuLjZjZDM0Y2ZmODky
OTM3NDkzM2EwN2VkZWY0ZmU5MTgzZWY4OTU5YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQpAQCAtNTQyLDcgKzU0Miw3
IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGln
aHQoKQogCiAgICAgICAgIGlmICghY2dSZWN0cy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIENH
UmVjdCB2aXNpYmxlUmVjdCA9IG1haW5GcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwot
ICAgICAgICAgICAgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCA9IGFkb3B0
Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlQW5kRGly
ZWN0aW9uKG51bGxwdHIsIGNnUmVjdHMuYmVnaW4oKSwgY2dSZWN0cy5zaXplKCksIHZpc2libGVS
ZWN0LCBEREhpZ2hsaWdodFN0eWxlQnViYmxlTm9uZSB8IERESGlnaGxpZ2h0U3R5bGVTdGFuZGFy
ZEljb25BcnJvdyB8IERESGlnaGxpZ2h0U3R5bGVCdXR0b25TaG93QWx3YXlzLCBZRVMsIE5TV3Jp
dGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxE
REhpZ2hsaWdodFJlZj4gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGlnaGxpZ2h0Q3JlYXRlV2l0
aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCBjZ1JlY3Rz
LmRhdGEoKSwgY2dSZWN0cy5zaXplKCksIHZpc2libGVSZWN0LCBEREhpZ2hsaWdodFN0eWxlQnVi
YmxlTm9uZSB8IERESGlnaGxpZ2h0U3R5bGVTdGFuZGFyZEljb25BcnJvdyB8IERESGlnaGxpZ2h0
U3R5bGVCdXR0b25TaG93QWx3YXlzLCBZRVMsIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5P
LCBZRVMpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbmV3UG90ZW50aWFsSGlnaGxpZ2h0
cy5hZGQoSGlnaGxpZ2h0OjpjcmVhdGVGb3JTZWxlY3Rpb24oKnRoaXMsIGRkSGlnaGxpZ2h0LCBz
ZWxlY3Rpb25SYW5nZSkpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHAKaW5kZXggZDFiOTJiN2I2MDli
NDUxOTljODRhNDZhZWU5ZmRiNmM0ZjdjZmVjNS4uNTAzYjBlOGQ5YmJmMjkwNmNlNzNiZWJlYmEw
MWJkNjAzZWM3OTk5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2VnbWVudGVkRm9udERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNwcApAQCAtMzksOCArMzksOCBAQCBTZWdtZW50ZWRG
b250RGF0YTo6flNlZ21lbnRlZEZvbnREYXRhKCkKIAogY29uc3QgU2ltcGxlRm9udERhdGEqIFNl
Z21lbnRlZEZvbnREYXRhOjpmb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0CiB7
Ci0gICAgVmVjdG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jhbmdl
cy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBhdXRvIGVuZCA9
IG1fcmFuZ2VzLmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoaXQtPmZyb20oKSA8PSBjICYmIGl0LT50bygp
ID49IGMpCiAgICAgICAgICAgICByZXR1cm4gaXQtPmZvbnREYXRhKCkuZ2V0KCk7CiAgICAgfQpA
QCAtNDksOCArNDksOCBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogU2VnbWVudGVkRm9udERhdGE6
OmZvbnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKIAogYm9vbCBTZWdtZW50ZWRG
b250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAogewotICAgIFZlY3Rv
cjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYW5nZXMuZW5kKCk7Ci0g
ICAgZm9yIChWZWN0b3I8Rm9udERhdGFSYW5nZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yYW5n
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgYXV0byBlbmQgPSBtX3Jhbmdlcy5l
bmQoKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKICAgICAgICAgaWYgKGMgPj0gaXQtPmZyb20oKSAmJiBjIDw9IGl0LT50bygpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNzYsOCArNzYsOCBAQCBib29sIFNlZ21l
bnRlZEZvbnREYXRhOjppc0N1c3RvbUZvbnQoKSBjb25zdAogCiBib29sIFNlZ21lbnRlZEZvbnRE
YXRhOjppc0xvYWRpbmcoKSBjb25zdAogewotICAgIFZlY3RvcjxGb250RGF0YVJhbmdlPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9yYW5nZXMuZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8Rm9udERh
dGFSYW5nZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgYXV0byBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsKKyAgICBmb3IgKGF1dG8g
aXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgaWYgKGl0
LT5mb250RGF0YSgpLT5pc0xvYWRpbmcoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxl
Rm9ybWF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9y
bWF0LmNwcAppbmRleCAwNTE4NzFhYzZjNjBmYjY0MzkyODMwYWFjNmFkMzg1MmE5NGQ0NDc2Li5k
ZDA5NjNhNzUwMWFkMmVlMDYzMWE1ZTE2ZDc5NTExMTEyMjM5ZDU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCkBAIC0yMDAs
NyArMjAwLDcgQEAgYm9vbCBjb252ZXJ0V09GRlRvU2ZudChTaGFyZWRCdWZmZXIqIHdvZmYsIFZl
Y3RvcjxjaGFyPiYgc2ZudCkKICAgICAgICAgICAgIHVMb25nZiBkZXN0TGVuID0gdGFibGVPcmln
TGVuZ3RoOwogICAgICAgICAgICAgaWYgKCFzZm50LnRyeVJlc2VydmVDYXBhY2l0eShzZm50LnNp
emUoKSArIHRhYmxlT3JpZ0xlbmd0aCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgQnl0ZWYqIGRlc3QgPSByZWludGVycHJldF9jYXN0PEJ5dGVmKj4oc2ZudC5l
bmQoKSk7CisgICAgICAgICAgICBCeXRlZiogZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Qnl0ZWYq
PihnZXRQdHIoc2ZudC5lbmQoKSkpOwogICAgICAgICAgICAgc2ZudC5ncm93KHNmbnQuc2l6ZSgp
ICsgdGFibGVPcmlnTGVuZ3RoKTsKICAgICAgICAgICAgIGlmICh1bmNvbXByZXNzKGRlc3QsICZk
ZXN0TGVuLCByZWludGVycHJldF9jYXN0PGNvbnN0IEJ5dGVmKj4od29mZi0+ZGF0YSgpICsgdGFi
bGVPZmZzZXQpLCB0YWJsZUNvbXBMZW5ndGgpICE9IFpfT0spCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhZGllbnRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAppbmRleCA1MDIyYzUwYzdlZTgyNWUyNDBmMGU3MTIy
NDdjN2VmMTY0OGYzOGJkLi43NTE2YjBhY2QxNWFhZmQxMmEzNTZhZmY0ZDUwYTZjNGFhMDI0ZjIy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFk
aWVudENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFkaWVudENhaXJvLmNwcApAQCAtNTksNyArNTksNyBAQCBjYWlyb19wYXR0ZXJuX3QqIEdy
YWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KGZsb2F0IGdsb2JhbEFscGhhKQogICAgIGVsc2UKICAg
ICAgICAgbV9ncmFkaWVudCA9IGNhaXJvX3BhdHRlcm5fY3JlYXRlX2xpbmVhcihtX3AwLngoKSwg
bV9wMC55KCksIG1fcDEueCgpLCBtX3AxLnkoKSk7CiAKLSAgICBWZWN0b3I8Q29sb3JTdG9wPjo6
aXRlcmF0b3Igc3RvcEl0ZXJhdG9yID0gbV9zdG9wcy5iZWdpbigpOworICAgIGF1dG8gc3RvcEl0
ZXJhdG9yID0gbV9zdG9wcy5iZWdpbigpOwogICAgIHdoaWxlIChzdG9wSXRlcmF0b3IgIT0gbV9z
dG9wcy5lbmQoKSkgewogICAgICAgICBjYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYmEo
bV9ncmFkaWVudCwgc3RvcEl0ZXJhdG9yLT5zdG9wLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RvcEl0ZXJhdG9yLT5yZWQsIHN0b3BJdGVyYXRvci0+Z3JlZW4s
IHN0b3BJdGVyYXRvci0+Ymx1ZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKaW5kZXggZGU0
NTUwOTRhMGJjZjdjOWRkM2IzOWU0Zjg4ZTAyYzUwOWRlZWM4NS4uM2E5MzFkZGJhZDRmYmE1ZWU5
YWRlOGI2ZmFiNzA0ZWI1YWUwMDNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKQEAg
LTE0NSw3ICsxNDUsNyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNh
Y2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKQogICAgIC8vIGFsd2F5cyB1c2UgSW1hZ2VTb3Vy
Y2U6OmNsZWFyKHRydWUsIC4uLikgdG8gY29tcGxldGVseSBmcmVlIHRoZSBtZW1vcnkgaW4KICAg
ICAvLyB0aGlzIGNhc2UuCiAgICAgY2xlYXJCZWZvcmVGcmFtZSA9IHN0ZDo6bWluKGNsZWFyQmVm
b3JlRnJhbWUsIG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgLSAxKTsKLSAgICBjb25zdCBWZWN0
b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGVuZChtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSAr
IGNsZWFyQmVmb3JlRnJhbWUpOworICAgIGNvbnN0IGF1dG8gZW5kID0gbV9mcmFtZUJ1ZmZlckNh
Y2hlLmJlZ2luKCkgKyBjbGVhckJlZm9yZUZyYW1lOwogCiAgICAgLy8gV2UgbmVlZCB0byBwcmVz
ZXJ2ZSBmcmFtZXMgc3VjaCB0aGF0OgogICAgIC8vICAgKiBXZSBkb24ndCBjbGVhciB8ZW5kfApA
QCAtMTY1LDE0ICsxNjUsMTQgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZm
ZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkKICAgICAvLyAgICogSWYgdGhlIGZyYW1l
IGlzIHBhcnRpYWwsIHdlJ3JlIGRlY29kaW5nIGl0LCBzbyBkb24ndCBjbGVhciBpdDsgaWYgaXQK
ICAgICAvLyAgICAgaGFzIGEgZGlzcG9zYWwgbWV0aG9kIG90aGVyIHRoYW4gRGlzcG9zZU92ZXJ3
cml0ZVByZXZpb3VzLCBzdG9wCiAgICAgLy8gICAgIHNjYW5uaW5nLCBhcyB3ZSdsbCBvbmx5IG5l
ZWQgdGhpcyBmcmFtZSB3aGVuIGRlY29kaW5nIHRoZSBuZXh0IG9uZS4KLSAgICBWZWN0b3I8SW1h
Z2VGcmFtZT46Oml0ZXJhdG9yIGkoZW5kKTsKKyAgICBhdXRvIGkgPSBlbmQ7CiAgICAgZm9yICg7
IChpICE9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKSAmJiAoKGktPnN0YXR1cygpID09IElt
YWdlRnJhbWU6OkZyYW1lRW1wdHkpIHx8IChpLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJh
bWU6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cykpOyAtLWkpIHsKICAgICAgICAgaWYgKChpLT5z
dGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKSAmJiAoaSAhPSBlbmQpKQogICAg
ICAgICAgICAgaS0+Y2xlYXJQaXhlbERhdGEoKTsKICAgICB9CiAKICAgICAvLyBOb3cgfGl8IGhv
bGRzIHRoZSBsYXN0IGZyYW1lIHdlIG5lZWQgdG8gcHJlc2VydmU7IGNsZWFyIHByaW9yIGZyYW1l
cy4KLSAgICBmb3IgKFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0b3IgaihtX2ZyYW1lQnVmZmVy
Q2FjaGUuYmVnaW4oKSk7IGogIT0gaTsgKytqKSB7CisgICAgZm9yIChhdXRvIGogPSBtX2ZyYW1l
QnVmZmVyQ2FjaGUuYmVnaW4oKTsgaiAhPSBpOyArK2opIHsKICAgICAgICAgQVNTRVJUKGotPnN0
YXR1cygpICE9IEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIGlmIChqLT5zdGF0
dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KQogICAgICAgICAgICAgai0+Y2xlYXJQaXhl
bERhdGEoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggZTRlMDAx
YmQ0ZjdmYjAwMDM3YmQxYmI2OGExMGMwZDUzYzQ2MmQ5MC4uMzllNzlmMTNkOTgxNmM5MjAxMmI3
OTk3MGExOWU3MzhlNjE2NmU3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAKQEAgLTE1NzcsOCArMTU3Nyw4IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEZpbGxMYXllcnMo
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IENvbG9yJiBjLCBjb25zCiAgICAgICAg
IGNvbnRleHQtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoMSk7CiAgICAgfQogCi0gICAgVmVjdG9y
PGNvbnN0IEZpbGxMYXllcio+Ojpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHRvcExheWVyID0gbGF5
ZXJzLnJlbmQoKTsKLSAgICBmb3IgKFZlY3Rvcjxjb25zdCBGaWxsTGF5ZXIqPjo6Y29uc3RfcmV2
ZXJzZV9pdGVyYXRvciBpdCA9IGxheWVycy5yYmVnaW4oKTsgaXQgIT0gdG9wTGF5ZXI7ICsraXQp
CisgICAgYXV0byB0b3BMYXllciA9IGxheWVycy5yZW5kKCk7CisgICAgZm9yIChhdXRvIGl0ID0g
bGF5ZXJzLnJiZWdpbigpOyBpdCAhPSB0b3BMYXllcjsgKytpdCkKICAgICAgICAgcGFpbnRGaWxs
TGF5ZXIocGFpbnRJbmZvLCBjLCAqaXQsIHJlY3QsIGJsZWVkQXZvaWRhbmNlLCBvcCwgYmFja2dy
b3VuZE9iamVjdCwgYmFzZUJnQ29sb3JVc2FnZSk7CiAKICAgICBpZiAoc2hvdWxkRHJhd0JhY2tn
cm91bmRJblNlcGFyYXRlQnVmZmVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHAKaW5kZXggY2NkYzJhM2RjNmRhMmQ2
NTM0YTdlYjYzNTA5ZTZiNDNiYWExZmQ3MS4uZGMwOTUwOTljMDRlM2E4MmM0M2MzZTAyNmNkZGVh
ZGU4ZDViZTMwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dy
aWRSZXNvbHZlZFBvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwCkBAIC0yOTUsNyArMjk1LDcgQEAgc3RhdGljIGlu
bGluZSB1bnNpZ25lZCBmaXJzdE5hbWVkR3JpZExpbmVCZWZvcmVQb3NpdGlvbih1bnNpZ25lZCBw
b3NpdGlvbiwgY29uc3QKICAgICAvLyBhbHJlYWR5IGNvbnZlcnRlZCB0byBhbiBpbmRleCBpbiBv
dXIgZ3JpZCByZXByZXNlbnRhdGlvbiAoaWUgb25lIHdhcyByZW1vdmVkIGZyb20gdGhlIGdyaWQg
bGluZSB0byBhY2NvdW50IGZvcgogICAgIC8vIHRoZSBzaWRlKS4KICAgICB1bnNpZ25lZCBmaXJz
dExpbmVCZWZvcmVQb3NpdGlvbkluZGV4ID0gMDsKLSAgICBjb25zdCB1bnNpZ25lZCogZmlyc3RM
aW5lQmVmb3JlUG9zaXRpb24gPSBzdGQ6Omxvd2VyX2JvdW5kKGdyaWRMaW5lcy5iZWdpbigpLCBn
cmlkTGluZXMuZW5kKCksIHBvc2l0aW9uKTsKKyAgICBhdXRvIGZpcnN0TGluZUJlZm9yZVBvc2l0
aW9uID0gc3RkOjpsb3dlcl9ib3VuZChncmlkTGluZXMuYmVnaW4oKSwgZ3JpZExpbmVzLmVuZCgp
LCBwb3NpdGlvbik7CiAgICAgaWYgKGZpcnN0TGluZUJlZm9yZVBvc2l0aW9uICE9IGdyaWRMaW5l
cy5lbmQoKSkgewogICAgICAgICBpZiAoKmZpcnN0TGluZUJlZm9yZVBvc2l0aW9uID4gcG9zaXRp
b24gJiYgZmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gIT0gZ3JpZExpbmVzLmJlZ2luKCkpCiAgICAg
ICAgICAgICAtLWZpcnN0TGluZUJlZm9yZVBvc2l0aW9uOwpAQCAtMzE2LDkgKzMxNiw4IEBAIHN0
ZDo6dW5pcXVlX3B0cjxHcmlkU3Bhbj4gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVSb3dT
dGFydENvbHVtblN0YXJ0TmFtZWRHCiAKIHN0ZDo6dW5pcXVlX3B0cjxHcmlkU3Bhbj4gR3JpZFJl
c29sdmVkUG9zaXRpb246OnJlc29sdmVSb3dFbmRDb2x1bW5FbmROYW1lZEdyaWRMaW5lUG9zaXRp
b25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgcmVz
b2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBjb25z
dCBWZWN0b3I8dW5zaWduZWQ+JiBncmlkTGluZXMpCiB7Ci0gICAgQVNTRVJUKGdyaWRMaW5lcy5z
aXplKCkpOwogICAgIHVuc2lnbmVkIGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbkluZGV4
ID0gZ3JpZExpbmVzLnNpemUoKSAtIDE7Ci0gICAgY29uc3QgdW5zaWduZWQqIGZpcnN0TGluZUFm
dGVyT3Bwb3NpdGVQb3NpdGlvbiA9IHN0ZDo6dXBwZXJfYm91bmQoZ3JpZExpbmVzLmJlZ2luKCks
IGdyaWRMaW5lcy5lbmQoKSwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKTsKKyAgICBhdXRvIGZp
cnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbiA9IHN0ZDo6dXBwZXJfYm91bmQoZ3JpZExpbmVz
LmJlZ2luKCksIGdyaWRMaW5lcy5lbmQoKSwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKTsKICAg
ICBpZiAoZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uICE9IGdyaWRMaW5lcy5lbmQoKSkK
ICAgICAgICAgZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uSW5kZXggPSBmaXJzdExpbmVB
ZnRlck9wcG9zaXRlUG9zaXRpb24gLSBncmlkTGluZXMuYmVnaW4oKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGb250RWxlbWVudC5jcHAKaW5kZXggYzMzZmZiNzdiNmQ4Zjk5NTdiMTI2ZjFiZjM5MTdh
ODU3ZmRmYjUwZS4uYTBiZjUwMTkxYjZhYjk1ODE2MThkOTUzYzA4OTBkMjEyZWI3YjM2MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwCkBAIC0yNTIsMzEgKzI1MiwzMSBAQCBz
dGF0aWMgaW5saW5lIGZsb2F0IGtlcm5pbmdGb3JQYWlyT2ZTdHJpbmdzQW5kR2x5cGhzKGNvbnN0
IFNWR0tlcm5pbmdNYXAmIGtlcm5pbgogewogICAgIGlmICghZzEuaXNFbXB0eSgpICYmIGtlcm5p
bmdNYXAuZ2x5cGhNYXAuY29udGFpbnMoZzEpKSB7CiAgICAgICAgIFNWR0tlcm5pbmdWZWN0b3Iq
IGtlcm5pbmdWZWN0b3IgPSBrZXJuaW5nTWFwLmdseXBoTWFwLmdldChnMSk7Ci0gICAgICAgIFNW
R0tlcm5pbmdWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0ga2VybmluZ1ZlY3Rvci0+ZW5kKCkg
LSAxOwotICAgICAgICBjb25zdCBTVkdLZXJuaW5nVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdp
biA9IGtlcm5pbmdWZWN0b3ItPmJlZ2luKCkgLSAxOwotICAgICAgICBmb3IgKDsgaXQgIT0gYmVn
aW47IC0taXQpIHsKLSAgICAgICAgICAgIGlmIChtYXRjaGVzKHUyLCBnMiwgKml0KSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gaXQtPmtlcm5pbmc7CisgICAgICAgIHNpemVfdCBpdCA9IGtlcm5p
bmdWZWN0b3ItPnNpemUoKTsKKyAgICAgICAgd2hpbGUgKGl0LS0gPiAwKSB7CisgICAgICAgICAg
ICBhdXRvJiB2YWx1ZSA9IGtlcm5pbmdWZWN0b3ItPmF0KGl0KTsKKyAgICAgICAgICAgIGlmICht
YXRjaGVzKHUyLCBnMiwgdmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5rZXJu
aW5nOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCF1MS5pc0VtcHR5KCkpIHsKICAgICAg
ICAgaWYgKGtlcm5pbmdNYXAudW5pY29kZU1hcC5jb250YWlucyh1MSkpIHsKICAgICAgICAgICAg
IFNWR0tlcm5pbmdWZWN0b3IqIGtlcm5pbmdWZWN0b3IgPSBrZXJuaW5nTWFwLnVuaWNvZGVNYXAu
Z2V0KHUxKTsKLSAgICAgICAgICAgIFNWR0tlcm5pbmdWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0ga2VybmluZ1ZlY3Rvci0+ZW5kKCkgLSAxOwotICAgICAgICAgICAgY29uc3QgU1ZHS2Vybmlu
Z1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBrZXJuaW5nVmVjdG9yLT5iZWdpbigpIC0g
MTsKLSAgICAgICAgICAgIGZvciAoOyBpdCAhPSBiZWdpbjsgLS1pdCkgewotICAgICAgICAgICAg
ICAgIGlmIChtYXRjaGVzKHUyLCBnMiwgKml0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGl0LT5rZXJuaW5nOworICAgICAgICAgICAgc2l6ZV90IGl0ID0ga2VybmluZ1ZlY3Rvci0+c2l6
ZSgpOworICAgICAgICAgICAgd2hpbGUgKGl0LS0gPiAwKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgdmFsdWUgPSBrZXJuaW5nVmVjdG9yLT5hdChpdCk7CisgICAgICAgICAgICAgICAgaWYgKG1h
dGNoZXModTIsIGcyLCB2YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5r
ZXJuaW5nOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFrZXJuaW5n
TWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VNYXAuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBWZWN0
b3I8U1ZHS2VybmluZ1BhaXI+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGtlcm5pbmdNYXAua2Vybmlu
Z1VuaWNvZGVSYW5nZU1hcC5lbmQoKSAtIDE7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZH
S2VybmluZ1BhaXI+Ojpjb25zdF9pdGVyYXRvciBiZWdpbiA9IGtlcm5pbmdNYXAua2VybmluZ1Vu
aWNvZGVSYW5nZU1hcC5iZWdpbigpIC0gMTsKLSAgICAgICAgICAgIGZvciAoOyBpdCAhPSBiZWdp
bjsgLS1pdCkgewotICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzKHUxLCB1MiwgZzIsICppdCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdC0+a2VybmluZzsKKyAgICAgICAgICAgIHNp
emVfdCBpdCA9IGtlcm5pbmdNYXAua2VybmluZ1VuaWNvZGVSYW5nZU1hcC5zaXplKCk7CisgICAg
ICAgICAgICB3aGlsZSAoaXQtLSA+IDApIHsKKyAgICAgICAgICAgICAgICBhdXRvJiB2YWx1ZSA9
IGtlcm5pbmdNYXAua2VybmluZ1VuaWNvZGVSYW5nZU1hcFtpdF07CisgICAgICAgICAgICAgICAg
aWYgKG1hdGNoZXModTEsIHUyLCBnMiwgdmFsdWUpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdmFsdWUua2VybmluZzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmgKaW5kZXggOWQ5ZDJhMmIyM2M2MDBmZWJiNTM0
MGNiY2RkMWI2MWRkYzNiOWYxNS4uYjk5OTU1NDk0MzlhYzk2NGFiM2U2N2EzMGYwZDg5ZDhjMzU4
YWNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmgKQEAgLTYwLDggKzYw
LDggQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kKHVuc2lnbmVkIGNoYXIgYnl0ZSkgeyBtX2Rh
dGEuYXBwZW5kKGJ5dGUpOyB9CiAgICAgdm9pZCBhcHBlbmQoU1ZHUGF0aEJ5dGVTdHJlYW0qIG90
aGVyKQogICAgIHsKLSAgICAgICAgZm9yIChEYXRhSXRlcmF0b3IgaXQgPSBvdGhlci0+YmVnaW4o
KTsgaXQgIT0gb3RoZXItPmVuZCgpOyArK2l0KQotICAgICAgICAgICAgYXBwZW5kKCppdCk7Cisg
ICAgICAgIGZvciAoYXV0byYgYnl0ZSA6ICpvdGhlcikKKyAgICAgICAgICAgIGFwcGVuZChieXRl
KTsKICAgICB9CiAgICAgdm9pZCBjbGVhcigpIHsgbV9kYXRhLmNsZWFyKCk7IH0KICAgICBib29s
IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9kYXRhLnNpemUoKTsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9kZVNldC5oIGIvU291cmNlL1dlYkNvcmUveG1sL1hQ
YXRoTm9kZVNldC5oCmluZGV4IDNkODliOGQ1MDg3YTg2Y2ZlYWZmYzAxNDBiNjk0NzYyYzA5NWRk
ZGYuLmRhZjJiOTNkNTFiNWFmNmI3MzRmNWY5YTc2NTQxMzY5ZTA0MTRhMmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS94
bWwvWFBhdGhOb2RlU2V0LmgKQEAgLTY0LDggKzY0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICAgICAgdm9pZCBtYXJrU3VidHJlZXNEaXNqb2ludChib29sIGRpc2pvaW50KSB7IG1f
c3VidHJlZXNBcmVEaXNqb2ludCA9IGRpc2pvaW50OyB9CiAgICAgICAgICAgICBib29sIHN1YnRy
ZWVzQXJlRGlzam9pbnQoKSBjb25zdCB7IHJldHVybiBtX3N1YnRyZWVzQXJlRGlzam9pbnQgfHwg
bV9ub2Rlcy5zaXplKCkgPCAyOyB9CiAKLSAgICAgICAgICAgIGNvbnN0IFJlZlB0cjxOb2RlPiog
YmVnaW4oKSBjb25zdCB7IHJldHVybiBtX25vZGVzLmJlZ2luKCk7IH0KLSAgICAgICAgICAgIGNv
bnN0IFJlZlB0cjxOb2RlPiogZW5kKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rlcy5lbmQoKTsgfQor
ICAgICAgICAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPj46Oml0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9ub2Rlcy5iZWdpbigpOyB9CisgICAgICAgICAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPE5vZGU+Pjo6aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rlcy5l
bmQoKTsgfQogCiAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICB2b2lkIHRyYXZlcnNhbFNv
cnQoKSBjb25zdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258044</attachid>
            <date>2015-08-02 15:18:44 -0700</date>
            <delta_ts>2015-09-02 14:43:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138821-20150802151838.patch</filename>
            <type>text/plain</type>
            <size>60458</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3MTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
ODFiZGMyYmFhNTczMGVkOTRjZTJhZDFjYmQ2NTM5ZDc0YjM3MjY3Li5iZTY2MzZlMWNhOTE4ZjE3
ZTkzM2Y1Mzk5NzE0ZTU4MTU2MTI5MWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMyBAQAorMjAxNC0xMi0xNSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3Rp
bGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJrIExh
bS4KKworICAgICAgICBVcGRhdGUgY29kZSB0byBkZWFsIHdpdGggc2xpZ2h0bHkgY2hhbmdlZCBp
dGVyYXRvciBzZW1hbnRpY3MuCisKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKToK
KyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmVtaXRTd2l0Y2hJbnRKdW1wKToKKyAgICAgICAgKiBmdGwvRlRMQWJicmV2aWF0aW9u
cy5oOgorICAgICAgICAoSlNDOjpGVEw6Om1kTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6YnVp
bGRDYWxsKToKKyAgICAgICAgKiBsbGludC9MTEludERhdGEuY3BwOgorICAgICAgICAoSlNDOjpM
TEludDo6RGF0YTo6cGVyZm9ybUFzc2VydGlvbnMpOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIu
aDoKKyAgICAgICAgKEpTQzo6U2NvcGU6OlNjb3BlKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJy
YXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3Rvcik6CisgICAgICAg
ICogdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2ZpbGVUcmVlTm9k
ZTo6ZHVtcEludGVybmFsKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAgICAgICAo
SlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjptYXRjaENoYXJhY3RlckNsYXNzKToKKwogMjAxNS0w
Ny0yMCAgU2FhbSBiYXJhdGkgIDxzYWFtYmFyYXRpMUBnbWFpbC5jb20+CiAKICAgICAgICAgImxl
dCIgc2NvcGluZyBpbnRyb2R1Y2VkIGluY29oZXJlbnQgc3RvcnkgYWJvdXQgc3ltYm9sIHRhYmxl
IGNsb25pbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9D
aGFuZ2VMb2cKaW5kZXggODA3NTE4MDEzY2I4NDk1N2QxNThjMjRjZTllNDAyOGM5ZmVjYzc5ZC4u
MTM1ZmNkNjg2YWJkMWI1NDUyMjZiZGZkMDdkNzYzZjRlN2VlMzNiOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4
OSBAQAorMjAxNC0xMi0xNSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisgICAg
ICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3RpbGwgcmVj
ZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJrIExhbS4KKwor
ICAgICAgICBBZGQgYSBuZXcgSW5kZXhlZEl0ZXJhdG9yIHN0cnVjdCB0byBXVEYgdGhhdCB3cmFw
cyBhCisgICAgICAgIFZlY3RvciB0eXBlIGFuZCBpbmRleCB0byBwcm92aWRlIHBvaW50ZXIgbGlr
ZSBzZW1hbnRpY3MKKyAgICAgICAgd2hpbGUgc3RpbGwgcGVyZm9ybWluZyBydW50aW1lIGJvdW5k
cyBjaGVja2luZywgZXZlbiBpbgorICAgICAgICByZWxlYXNlIGJ1aWxkcy4gV2Ugc3RvcmUgYSBz
aW1wbGUgaW5kZXggaW50byB0aGUgdmVjdG9yCisgICAgICAgIHdoaWNoIG1lYW5zIHRoYXQgdGhp
cyBpdGVyYXRvciBhbGxvd3MgdmVjdG9yIHJlc2l6aW5nCisgICAgICAgIGR1cmluZyBpdGVyYXRp
b24uIElmIHRoZSB2ZWN0b3IgaXMgcmVzaXplZCBzdWNoIHRoYXQgdGhlCisgICAgICAgIGl0ZXJh
dG9yIGlzIG91dCBvZiBib3VuZHMsIHRoZW4gYW55IGF0dGVtcHQgdG8gZGVyZWZlcmVuY2UKKyAg
ICAgICAgdGhlIGl0ZXJhdG9yIHdpbGwgY3Jhc2ggc2FmZWx5LgorCisgICAgICAgIEZvciB0aGUg
cHVycG9zZSBvZiByZXRhaW5pbmcgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQKKyAgICAgICAgYmVo
YXZpb3VyLCB0aGUgaXRlcmF0b3IgY2FuIGJlIG1vdmVkIHRvIG1faW5kZXggPT0gc2l6ZSgpCisg
ICAgICAgIGFzIHRoYXQgaXMgdGhlIHN0YW5kYXJkICJlbmQiIHRlcm1pbmF0b3IgZm9yIHRoZXNl
IHR5cGVzLgorICAgICAgICBBdHRlbXB0aW5nIHRvIGRlcmVmZXJlbmNlIGF0IHRoYXQgcG9pbnQg
d2lsbCBzdGlsbCBjcmFzaAorICAgICAgICByYXRoZXIgdGhhbiBwZXJmb3JtIGFuIHVuc2FmZSBt
ZW1vcnkgb3BlcmF0aW9uLgorCisgICAgICAgIEJ5IG5lY2Vzc2l0eSB0aGVyZSBhcmUgbWFueSBv
dmVycmlkZXMgZm9yIG9wZXJhdG9yICsgYW5kIC0gYXMKKyAgICAgICAgd2Ugb3RoZXJ3aXNlIGhp
dCBtYW55IGRpZmZlcmVudCB0eXBlIHByb21vdGlvbiBhbWJpZ3VpdGllcyB3aGVuCisgICAgICAg
IHBlcmZvcm1pbmcgYXJpdGhtZXRpYyB3aXRoIGl0ZXJhdG9ycy4gVGhlc2UgYW1iaWd1aXRpZXMg
YXJlIGFsc28KKyAgICAgICAgZGlmZmVyZW50IGZvciAzMi0gdnMuIDY0LWJpdCwgc28gZHVwbGlj
YXRpbmcgdGhlIGZ1bmN0aW9ucworICAgICAgICBhbmQgdGhlbiBmb3J3YXJkaW5nIHRvIHRoZSBj
b3JlIGltcGxlbWVudGF0aW9ucyB0aGF0IHBlcmZvcm1lZAorICAgICAgICB0aGUgYm91bmRzIGNo
ZWNraW5nIGFuZCBtdXRhdGlvbiBzZWVtZWQgbGlrZSB0aGUgcmlnaHQgY2FsbC4KKworICAgICAg
ICAqIFdURi52Y3hwcm9qL1dURi52Y3hwcm9qOgorICAgICAgICAqIFdURi52Y3hwcm9qL1dURi52
Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogd3RmL0luZGV4ZWRJdGVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
SW5kZXhlZEl0ZXJhdG9yOjpJbmRleGVkSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpJbmRleGVk
SXRlcmF0b3I6Om9wZXJhdG9yLT4pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9w
ZXJhdG9yKik6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6Z2V0KToKKyAgICAgICAg
KFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6SW5kZXhl
ZEl0ZXJhdG9yOjpvcGVyYXRvci0tKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpv
cGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJh
dG9yOjpvcGVyYXRvci0pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9y
PSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6OkluZGV4
ZWRJdGVyYXRvcjo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpv
cGVyYXRvcjw9KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcj4pOgor
ICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPj0pOgorICAgICAgICAoV1RG
OjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yIGNvbnN0X2l0ZXJhdG9yKToKKyAgICAgICAgKFdU
Rjo6SW5kZXhlZEl0ZXJhdG9yOjp1bnNhZmVHZXQpOgorICAgICAgICAoV1RGOjpnZXRQdHIpOgor
ICAgICAgICAoV1RGOjpvcGVyYXRvci0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFdURjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPD0pOgorICAg
ICAgICAoV1RGOjpvcGVyYXRvcj49KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8KToKKyAgICAg
ICAgKFdURjo6b3BlcmF0b3I+KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yU2VsZWN0
b3I6Om1ha2VJdGVyYXRvcik6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvclNlbGVjdG9y
OjptYWtlQ29uc3RJdGVyYXRvcik6CisgICAgICAgICogd3RmL1JlZkNvdW50ZWRBcnJheS5oOgor
ICAgICAgICAoV1RGOjpSZWZDb3VudGVkQXJyYXk6OlJlZkNvdW50ZWRBcnJheSk6CisgICAgICAg
ICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAoV1RGOjpWZWN0b3I6OlZlY3Rvcik6CisgICAgICAg
IChXVEY6OlZlY3Rvcjo6YmVnaW4pOgorICAgICAgICAoV1RGOjpWZWN0b3I6OmVuZCk6CisgICAg
ICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OlZlY3Rvcik6CisgICAgICAgIChXVEY6Oj0pOgor
ICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpmaWxsKToKKyAgICAgICAgKFdURjo6T3Zl
cmZsb3dIYW5kbGVyPjo6ZXhwYW5kQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hh
bmRsZXI+Ojp0cnlFeHBhbmRDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxl
cj46OnJlc2l6ZSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnNocmluayk6Cisg
ICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46Omdyb3cpOgorICAgICAgICAoV1RGOjpPdmVy
Zmxvd0hhbmRsZXI+OjpyZXNlcnZlQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hh
bmRsZXI+Ojp0cnlSZXNlcnZlQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRs
ZXI+OjpzaHJpbmtDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OmFw
cGVuZCk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnRyeUFwcGVuZCk6CisgICAg
ICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OmFwcGVuZFNsb3dDYXNlKToKKyAgICAgICAgKFdU
Rjo6T3ZlcmZsb3dIYW5kbGVyPjo6dW5jaGVja2VkQXBwZW5kKToKKyAgICAgICAgKFdURjo6T3Zl
cmZsb3dIYW5kbGVyPjo6YXBwZW5kVmVjdG9yKToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5k
bGVyPjo6aW5zZXJ0KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6aW5zZXJ0VmVj
dG9yKToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlKToKKwogMjAxNS0w
Ny0yMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgUm9sbG91dCBy
MTg3MDIwIGFuZCByMTg3MDIxOiBicmVha3MgSlNDIEFQSSB0ZXN0cyBvbiBkZWJ1ZyBidWlsZHMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggZTEyMjUxMjYwMDJhZjIxY2UyMGYyNGI1MDNhZDMzMzZkNjVkNTRiMi4u
ODRmMGZjNDc4M2VlN2RiMzY4NzcwZjBhY2FhZjkzMjAwOWYxNmU4NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQxIEBACisyMDE0LTEyLTE1ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+
CisKKyAgICAgICAgTWFrZSBzdXJlIHJhbmdlIGJhc2VkIGl0ZXJhdGlvbiBvZiBWZWN0b3I8PiBz
dGlsbCByZWNlaXZlcyBib3VuZHMgY2hlY2tpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODgyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE1hcmsg
TGFtLgorCisgICAgICAgIFVwZGF0ZSB0byBkZWFsIHdpdGggZGlmZmVyZW50IGl0ZXJhdG9yIHR5
cGUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplU3RyaW5nKToK
KyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
ZWFyY2hCdWZmZXI6OmlzQmFkTWF0Y2gpOgorICAgICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVk
Rm9udERhdGE6OmZvbnREYXRhRm9yQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21l
bnRlZEZvbnREYXRhOjpjb250YWluc0NoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpTZWdt
ZW50ZWRGb250RGF0YTo6aXNMb2FkaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9X
T0ZGRmlsZUZvcm1hdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0V09GRlRvU2ZudCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudCk6CisgICAgICAgICog
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OnBhaW50RmlsbExheWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0dyaWRSZXNv
bHZlZFBvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0TmFtZWRHcmlkTGluZUJl
Zm9yZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjpy
ZXNvbHZlUm93RW5kQ29sdW1uRW5kTmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRl
UG9zaXRpb24pOgorICAgICAgICAqIHN2Zy9TVkdGb250RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjprZXJuaW5nRm9yUGFpck9mU3RyaW5nc0FuZEdseXBocyk6CisgICAgICAgICogc3Zn
L1NWR1BhdGhCeXRlU3RyZWFtLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVh
bTo6YXBwZW5kKToKKyAgICAgICAgKiB4bWwvWFBhdGhOb2RlU2V0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aDo6Tm9kZVNldDo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Ok5v
ZGVTZXQ6OmVuZCk6CisKIDIwMTUtMDctMjAgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNhdGFuemFy
b0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjE4NDM3Nik6IFtTT1VQXSBNdWx0
aXBsZSBhc3NlcnRpb25zIHdoZW4gZG93bmxvYWRpbmcgZmlsZXMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCmluZGV4IGUwNTNk
YWQ5NzdiMWE2MjQ2ZWJkZjk0MDQyY2RjMDM4ZTRhOWJhNTQuLjc0Y2VmZTIyYzI0NjM2ZjQ4M2Yy
ZWRjODIwNmY1MjgxZmYyYmM1ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApAQCAtMjU1LDkgKzI1NSw5IEBAIHZvaWQg
VW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3N5bWJvbFRhYmxlKTsKICAgICBm
b3IgKEZ1bmN0aW9uRXhwcmVzc2lvblZlY3Rvcjo6aXRlcmF0b3IgcHRyID0gdGhpc09iamVjdC0+
bV9mdW5jdGlvbkRlY2xzLmJlZ2luKCksIGVuZCA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25EZWNs
cy5lbmQoKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0cik7
CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKFdURjo6Z2V0UHRyKHB0cikpOwogICAgIGZvciAoRnVu
Y3Rpb25FeHByZXNzaW9uVmVjdG9yOjppdGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0
aW9uRXhwcnMuYmVnaW4oKSwgZW5kID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkV4cHJzLmVuZCgp
OyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQocHRyKTsKKyAgICAg
ICAgdmlzaXRvci5hcHBlbmQoV1RGOjpnZXRQdHIocHRyKSk7CiAgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXModGhpc09iamVjdC0+bV9jb25zdGFudFJlZ2lzdGVycy5kYXRhKCksIHRoaXNPYmplY3Qt
Pm1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKICAgICBpZiAodGhpc09iamVjdC0+bV9yYXJl
RGF0YSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgZW5kID0gdGhpc09iamVjdC0+bV9y
YXJlRGF0YS0+bV9yZWdleHBzLnNpemUoKTsgaSAhPSBlbmQ7IGkrKykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAK
aW5kZXggOWIyYzJjZGJkYjM1MDdmYjFmYTczODdlMTUyMDI5ZmIyNDU0MDZjOS4uNjllMTQ3YjVk
N2JmM2VhNTBkYTc1OTYyYzcwMzMwODM1OTg2YWI4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTI2
OTYsOCArMjY5Niw4IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb21wbGV4UG9wU2Nv
cGVzKFJlZ2lzdGVySUQqIHNjb3BlLCBDb250cm9sRmxvd0NvbnRlCiAgICAgICAgICAgICBpbnQg
dG9wU2NvcGVJbmRleCA9IC0xOwogICAgICAgICAgICAgaW50IGJvdHRvbVNjb3BlSW5kZXggPSAt
MTsKICAgICAgICAgICAgIGlmIChmbGlwU2NvcGVzKSB7Ci0gICAgICAgICAgICAgICAgdG9wU2Nv
cGVJbmRleCA9IHRvcFNjb3BlIC0gbV9zY29wZUNvbnRleHRTdGFjay5iZWdpbigpOwotICAgICAg
ICAgICAgICAgIGJvdHRvbVNjb3BlSW5kZXggPSBib3R0b21TY29wZSAtIG1fc2NvcGVDb250ZXh0
U3RhY2suYmVnaW4oKTsKKyAgICAgICAgICAgICAgICB0b3BTY29wZUluZGV4ID0gdG9wU2NvcGUg
LSBtX3Njb3BlQ29udGV4dFN0YWNrLmRhdGEoKTsKKyAgICAgICAgICAgICAgICBib3R0b21TY29w
ZUluZGV4ID0gYm90dG9tU2NvcGUgLSBtX3Njb3BlQ29udGV4dFN0YWNrLmRhdGEoKTsKICAgICAg
ICAgICAgICAgICBzYXZlZFNjb3BlQ29udGV4dFN0YWNrID0gbV9zY29wZUNvbnRleHRTdGFjazsK
ICAgICAgICAgICAgICAgICBtX3Njb3BlQ29udGV4dFN0YWNrLnNocmluayhmaW5hbGx5Q29udGV4
dC5zY29wZUNvbnRleHRTdGFja1NpemUpOwogICAgICAgICAgICAgfQpAQCAtMjc1MSw3ICsyNzUx
LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMoUmVnaXN0
ZXJJRCogc2NvcGUsIENvbnRyb2xGbG93Q29udGUKICAgICAgICAgICAgIGlmIChmbGlwU2NvcGVz
KSB7CiAgICAgICAgICAgICAgICAgbV9zY29wZUNvbnRleHRTdGFjayA9IHNhdmVkU2NvcGVDb250
ZXh0U3RhY2s7CiAgICAgICAgICAgICAgICAgdG9wU2NvcGUgPSAmbV9zY29wZUNvbnRleHRTdGFj
a1t0b3BTY29wZUluZGV4XTsgLy8gYXNzZXJ0IGl0J3Mgd2l0aGluIGJvdW5kcwotICAgICAgICAg
ICAgICAgIGJvdHRvbVNjb3BlID0gbV9zY29wZUNvbnRleHRTdGFjay5iZWdpbigpICsgYm90dG9t
U2NvcGVJbmRleDsgLy8gZG9uJ3QgYXNzZXJ0LCBzaW5jZSBpdCB0aGUgaW5kZXggbWlnaHQgYmUg
LTEuCisgICAgICAgICAgICAgICAgYm90dG9tU2NvcGUgPSBtX3Njb3BlQ29udGV4dFN0YWNrLmRh
dGEoKSArIGJvdHRvbVNjb3BlSW5kZXg7IC8vIGRvbid0IGFzc2VydCwgc2luY2UgaXQgdGhlIGlu
ZGV4IG1pZ2h0IGJlIC0xLgogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGZsaXBTd2l0
Y2hlcykKICAgICAgICAgICAgICAgICBtX3N3aXRjaENvbnRleHRTdGFjayA9IHNhdmVkU3dpdGNo
Q29udGV4dFN0YWNrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAppbmRleCBmM2Y4YWY3YTUyZDUwZjlhMmU3MWM0ZjkwMTk5ODQ3YmYwNTAwZDVl
Li5kMWViNDk5NjY0ZjUxZWU3YmU0MWY5MDg4MTUzNTVjZWZiOTFjMDEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtNTg3NSw3ICs1
ODc1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEludEp1bXAoCiAgICAgYWRk
QnJhbmNoKAogICAgICAgICBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFs
LCB2YWx1ZSwgSW1tMzIodGFibGUuY3RpT2Zmc2V0cy5zaXplKCkpKSwKICAgICAgICAgZGF0YS0+
ZmFsbFRocm91Z2guYmxvY2spOwotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cih0YWJsZS5j
dGlPZmZzZXRzLmJlZ2luKCkpLCBzY3JhdGNoKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1Q
dHIodGFibGUuY3RpT2Zmc2V0cy5kYXRhKCkpLCBzY3JhdGNoKTsKICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjpCYXNlSW5kZXgoc2NyYXRjaCwgdmFsdWUsIEpJVENvbXBpbGVyOjp0aW1l
c1B0cigpKSwgc2NyYXRjaCk7CiAgICAgbV9qaXQuanVtcChzY3JhdGNoKTsKICAgICBkYXRhLT5k
aWRVc2VKdW1wVGFibGUgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYmJyZXZpYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
YnJldmlhdGlvbnMuaAppbmRleCBkM2JmZjRjYzFjODg3ODJiNjZkMjBhMDg5YjhkZDViZDk3NWY4
OWRmLi45NTg2YWM4ZTNiYzBjZmExNWVmMzBmYmZkNGJjNTI5M2Y5NDMzNjM0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaApAQCAtMTMzLDcgKzEzMyw3
IEBAIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kU3RyaW5nKExDb250ZXh0IGNvbnRleHQsIGNvbnN0
IGNoYXIqIHN0cmluZywgdW5zaWduZWQgbGVuCiBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZFN0cmlu
ZyhMQ29udGV4dCBjb250ZXh0LCBjb25zdCBjaGFyKiBzdHJpbmcpIHsgcmV0dXJuIG1kU3RyaW5n
KGNvbnRleHQsIHN0cmluZywgc3RkOjpzdHJsZW4oc3RyaW5nKSk7IH0KIHN0YXRpYyBpbmxpbmUg
TFZhbHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0LCBMVmFsdWUqIGFyZ3MsIHVuc2lnbmVkIG51
bUFyZ3MpIHsgcmV0dXJuIGxsdm0tPk1ETm9kZUluQ29udGV4dChjb250ZXh0LCBhcmdzLCBudW1B
cmdzKTsgfQogdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KLXN0YXRpYyBpbmxpbmUgTFZh
bHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0LCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpIHsg
cmV0dXJuIG1kTm9kZShjb250ZXh0LCBjb25zdF9jYXN0PExWYWx1ZSo+KHZlY3Rvci5iZWdpbigp
KSwgdmVjdG9yLnNpemUoKSk7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4
dCBjb250ZXh0LCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpIHsgcmV0dXJuIG1kTm9kZShjb250
ZXh0LCBjb25zdF9jYXN0PExWYWx1ZSo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpKTsg
fQogc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQpIHsgcmV0dXJu
IG1kTm9kZShjb250ZXh0LCAwLCAwKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExD
b250ZXh0IGNvbnRleHQsIExWYWx1ZSBhcmcxKSB7IHJldHVybiBtZE5vZGUoY29udGV4dCwgJmFy
ZzEsIDEpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwg
TFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyKQpAQCAtMzAxLDcgKzMwMSw3IEBAIHN0YXRpYyBpbmxp
bmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIGNv
bnN0IExWYWx1ZSoKIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+CiBpbmxpbmUgTFZhbHVl
IGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IFZlY3Rv
clR5cGUmIHZlY3RvcikKIHsKLSAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9u
LCB2ZWN0b3IuYmVnaW4oKSwgdmVjdG9yLnNpemUoKSk7CisgICAgcmV0dXJuIGJ1aWxkQ2FsbChi
dWlsZGVyLCBmdW5jdGlvbiwgdmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUoKSk7CiB9CiBzdGF0
aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0
aW9uKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0
YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAppbmRleCBl
OTI2ZjUyZGM3NmQ5ZWRlMmYwZTNhNWIzZGMyNmIzMzZhOTJmODVkLi5mOTJiMWNlODJiOTM1YWNm
NjI2YTI1NjgyM2MzNjExM2IzOTAxNGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnREYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnREYXRhLmNwcApAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgRGF0YTo6cGVyZm9ybUFzc2Vy
dGlvbnMoVk0mIHZtKQogICAgIFZlY3RvcjxpbnQ+IHRlc3RWZWN0b3I7CiAgICAgdGVzdFZlY3Rv
ci5yZXNpemUoNDIpOwogICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8dWludDMyX3QqPigmdGVzdFZl
Y3Rvcilbc2l6ZW9mKHZvaWQqKS9zaXplb2YodWludDMyX3QpICsgMV0gPT0gNDIpOwotICAgIEFT
U0VSVChiaXR3aXNlX2Nhc3Q8aW50Kio+KCZ0ZXN0VmVjdG9yKVswXSA9PSB0ZXN0VmVjdG9yLmJl
Z2luKCkpOworICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50Kio+KCZ0ZXN0VmVjdG9yKVswXSA9
PSB0ZXN0VmVjdG9yLmRhdGEoKSk7CiAjZW5kaWYKIAogICAgIEFTU0VSVChTdHJpbmdJbXBsOjpz
X2hhc2hGbGFnOEJpdEJ1ZmZlciA9PSA4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5jcHAKaW5kZXggMmM1YTE5YWU2ZWU2NTgwOGI3ZDcxY2EzNTAzNzU4OGQ1MDA2MWIz
NS4uYzNkNTA1NWYyNjk5NzQ1Mjk5M2RjMTQ2OTg3NDBhZDc1MjEzMmM3OCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKQEAgLTM1Miw3ICszNTIsNyBAQCBib29s
IEpTQXJyYXk6OnNldExlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBuZXdMZW5ndGgsIGJvbwogICAgICAgICAgICAgLy8gcHJvcGVydGllcywgc28gd2UgaGF2
ZSB0byBwZXJmb3JtIGRlbGV0aW9uIHdpdGggY2F1dGlvbiwgaWYgbm90IHdlIGNhbgogICAgICAg
ICAgICAgLy8gZGVsZXRlIHZhbHVlcyBpbiBhbnkgb3JkZXIuCiAgICAgICAgICAgICBpZiAobWFw
LT5zcGFyc2VNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBxc29ydChrZXlzLmJlZ2luKCksIGtl
eXMuc2l6ZSgpLCBzaXplb2YodW5zaWduZWQpLCBjb21wYXJlS2V5c0ZvclFTb3J0KTsKKyAgICAg
ICAgICAgICAgICBxc29ydChrZXlzLmRhdGEoKSwga2V5cy5zaXplKCksIHNpemVvZih1bnNpZ25l
ZCksIGNvbXBhcmVLZXlzRm9yUVNvcnQpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBr
ZXlzLnNpemUoKTsKICAgICAgICAgICAgICAgICB3aGlsZSAoaSkgewogICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbmRleCA9IGtleXNbLS1pXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAppbmRleCA4OGQ1N2YzZGQ0ZTc5NzY5ZDFkMDZjM2E4
NTkxMDFiNTU1YzZhODNmLi5kZDNjMTIxZDBlYmIxNmU4YTUyNDYxZmFhY2RiYmI0ZDk4N2Q3MmIy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2Rl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCkBA
IC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIFZlY3RvcjxNYXBFbnRyeSo+IGVudHJp
ZXM7CiAgICAgICAgIGZvciAoTWFwOjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4tPmJlZ2luKCk7
IGl0ICE9IG1fY2hpbGRyZW4tPmVuZCgpOyArK2l0KQogICAgICAgICAgICAgZW50cmllcy5hcHBl
bmQoJippdCk7Ci0gICAgICAgIHFzb3J0KGVudHJpZXMuYmVnaW4oKSwgZW50cmllcy5zaXplKCks
IHNpemVvZihNYXBFbnRyeSopLCBjb21wYXJlRW50cmllcyk7CisgICAgICAgIHFzb3J0KGVudHJp
ZXMuZGF0YSgpLCBlbnRyaWVzLnNpemUoKSwgc2l6ZW9mKE1hcEVudHJ5KiksIGNvbXBhcmVFbnRy
aWVzKTsKIAogICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGNoaWxkcmVuIGluIHNhbXBsZS1m
cmVxdWVuY3kgb3JkZXIuCiAgICAgICAgIGZvciAoc2l6ZV90IGUgPSAwOyBlIDwgZW50cmllcy5z
aXplKCk7ICsrZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFy
ckpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAppbmRleCAy
MjI5ZGE3Njc4YTExZjJmNzIxZGFiOWQyZWNiNmRjMThhNTJjYTY1Li45MmY5YjEzMTU4Njc0ZmQ0
MGFjYTc2YmJhYTgwMzU5ZWE2NTgzMzlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9ZYXJySklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJy
SklULmNwcApAQCAtMjIzLDcgKzIyMyw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRl
IE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgaWYgKGNoYXJDbGFzcy0+bV9yYW5nZXMuc2l6ZSgp
KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBtYXRjaEluZGV4ID0gMDsKICAgICAgICAgICAgIEp1
bXBMaXN0IGZhaWx1cmVzOwotICAgICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzc1JhbmdlKGNo
YXJhY3RlciwgZmFpbHVyZXMsIG1hdGNoRGVzdCwgY2hhckNsYXNzLT5tX3Jhbmdlcy5iZWdpbigp
LCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUoKSwgJm1hdGNoSW5kZXgsIGNoYXJDbGFzcy0+bV9t
YXRjaGVzLmJlZ2luKCksIGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNpemUoKSk7CisgICAgICAgICAg
ICBtYXRjaENoYXJhY3RlckNsYXNzUmFuZ2UoY2hhcmFjdGVyLCBmYWlsdXJlcywgbWF0Y2hEZXN0
LCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLmRhdGEoKSwgY2hhckNsYXNzLT5tX3Jhbmdlcy5zaXplKCks
ICZtYXRjaEluZGV4LCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5kYXRhKCksIGNoYXJDbGFzcy0+bV9t
YXRjaGVzLnNpemUoKSk7CiAgICAgICAgICAgICB3aGlsZSAobWF0Y2hJbmRleCA8IGNoYXJDbGFz
cy0+bV9tYXRjaGVzLnNpemUoKSkKICAgICAgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKGJy
YW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKCh1bnNpZ25lZCBzaG9ydCljaGFyQ2xhc3Mt
Pm1fbWF0Y2hlc1ttYXRjaEluZGV4KytdKSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dU
Ri52Y3hwcm9qL1dURi52Y3hwcm9qIGIvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJv
agppbmRleCA1YTJkMjUzMzMzODRmNTc4M2MzZmU4MGYyZGQ4NjFlZjQ3M2MxMWZmLi4wNzM4NGZk
ZDM3YjUzMGViNzNjZTNlYjlmNWNmYjA2OTZlODY0MTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RG
LnZjeHByb2oKQEAgLTIyMCw2ICsyMjAsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
d3RmXEhhc2hUYWJsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEhhc2hU
cmFpdHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxIZXhOdW1iZXIuaCIg
Lz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxJbmRleGVkSXRlcmF0b3IuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxJdGVyYXRvckFkYXB0b3JzLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSXRlcmF0b3JSYW5nZS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXExpc3RIYXNoU2V0LmgiIC8+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV1RGL1dU
Ri52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZmI3ZTdjNDlhOTk5OTZkNTIyODY0
NTdhYjMyOWIxODhmN2UyYzVlMy4uYmQ3YWE5N2ZlN2E0ZTgxZDI3ODRhMzk1ZmJmMGJlZjczMjgy
MjViNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0
ZXJzCisrKyBiL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVycwpAQCAt
NDgzLDYgKzQ4Myw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSGV4TnVtYmVy
LmgiPgogICAgICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxJbmRleGVkSXRlcmF0b3IuaCI+CisgICAgICA8Rmls
dGVyPnd0ZjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cd3RmXEl0ZXJhdG9yQWRhcHRvcnMuaCI+CiAgICAgICA8RmlsdGVyPnd0ZjwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggMTU1Nzc0NmI0NzcyY2E5ZThhNjk3ODcxYmQ5YzNlZjM1NDMyODQyNS4uZWVkM2Nj
NjY4YzI1NTY1NjJmMTVmYzhhZjA3Y2VkNzFjNmJlNGY2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDYsNiArMTA2LDcgQEAKIAkJQTc0ODc0NTIxN0Ew
QkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc0ODc0NEYxN0EwQkRBRTAwRkEwNENCIC8qIFNp
eENoYXJhY3Rlckhhc2guY3BwICovOyB9OwogCQlBNzQ4NzQ1MzE3QTBCREFFMDBGQTA0Q0IgLyog
U2l4Q2hhcmFjdGVySGFzaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTc0ODc0NTAxN0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guaCAq
LzsgfTsKIAkJQTc0ODc0NTQxN0EwQkRBRTAwRkEwNENCIC8qIFN0cmluZ0hhc2hEdW1wQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc0ODc0
NTExN0EwQkRBRTAwRkEwNENCIC8qIFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oICovOyB9OworCQlB
N0RDMkYwNDFBMDlBMjJEMDA3MkY0RTMgLyogSW5kZXhlZEl0ZXJhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0RDMkYwMzFBMDk5REUzMDA3MkY0
RTMgLyogSW5kZXhlZEl0ZXJhdG9yLmggKi87IH07CiAJCUE4NzZEQkQ4MTUxODE2RTUwMERBREI5
NSAvKiBQbGF0Zm9ybS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTg3NkRCRDcxNTE4MTZFNTAwREFEQjk1IC8qIFBsYXRmb3JtLmggKi87IH07CiAJCUE4
QTQ3Mzg1MTUxQTgyNUIwMDQxMjNGRiAvKiBBU0NJSUNUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzI1QTE1MUE4MjVBMDA0MTIzRkYgLyog
QVNDSUlDVHlwZS5oICovOyB9OwogCQlBOEE0NzM4NjE1MUE4MjVCMDA0MTIzRkYgLyogQXNzZXJ0
aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
OEE0NzI1QjE1MUE4MjVBMDA0MTIzRkYgLyogQXNzZXJ0aW9ucy5jcHAgKi87IH07CkBAIC0zOTUs
NiArMzk2LDcgQEAKIAkJQTc0ODc0NEYxN0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhh
c2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l4Q2hhcmFjdGVy
SGFzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NDg3NDUwMTdBMEJEQUUw
MEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNpeENoYXJhY3Rlckhhc2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTc0ODc0NTExN0EwQkRBRTAwRkEwNENCIC8qIFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdIYXNoRHVtcENvbnRleHQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdEQzJGMDMxQTA5OURFMzAwNzJGNEUzIC8qIElu
ZGV4ZWRJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGVkSXRlcmF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg3NkRCRDcxNTE4MTZFNTAwREFEQjk1IC8qIFBsYXRm
b3JtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MjVBMTUxQTgyNUEwMDQxMjNGRiAvKiBBU0NJ
SUNUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFTQ0lJQ1R5cGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDcyNUIxNTFBODI1QTAwNDEyM0ZGIC8q
IEFzc2VydGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXNz
ZXJ0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04ODAsNiArODgyLDcg
QEAKIAkJCQlFNEEwQUQzODFBOTYyNDU1MDA1MzZERjYgLyogV29ya1F1ZXVlLmggKi8sCiAJCQkJ
QThBNDczN0ExNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuY3BwICovLAogCQkJCUE4
QTQ3MzdCMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmggKi8sCisJCQkJQTdEQzJG
MDMxQTA5OURFMzAwNzJGNEUzIC8qIEluZGV4ZWRJdGVyYXRvci5oICovLAogCQkJKTsKIAkJCXBh
dGggPSB3dGY7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTA2Niw2ICsxMDY5LDcg
QEAKIAkJCQlBOEE0NzNBRDE1MUE4MjVCMDA0MTIzRkYgLyogY2FjaGVkLXBvd2Vycy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDc0NUUxNTFBODI1QjAwNDEyM0ZGIC8qIENoYXJhY3Rlck5hbWVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM5NDE1MUE4MjVCMDA0MTIzRkYgLyogQ2hlY2tl
ZEFyaXRobWV0aWMuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3REMyRjA0MUEwOUEyMkQwMDcyRjRF
MyAvKiBJbmRleGVkSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3Mzk1MTUxQTgy
NUIwMDQxMjNGRiAvKiBDaGVja2VkQm9vbGVhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
NUYxNTFBODI1QjAwNDEyM0ZGIC8qIENvbGxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM0
RURFNjE2OTYxNDk2MDBGNjUwNDEgLyogQ29tbWFQcmludGVyLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0luZGV4ZWRJdGVyYXRvci5oIGIvU291cmNlL1dURi93
dGYvSW5kZXhlZEl0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDEyMjQ0YzhiODhlYzdmMTBmMGUxZTUz
MDEwNGNiN2RiMWRhZmQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL0luZGV4
ZWRJdGVyYXRvci5oCkBAIC0wLDAgKzEsMzU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXVEZfSW5kZXhlZEl0ZXJhdG9yX2gKKyNkZWZp
bmUgV1RGX0luZGV4ZWRJdGVyYXRvcl9oCisKK25hbWVzcGFjZSBXVEYgeworCisjZGVmaW5lIElO
REVYRURfSVRFUkFUT1JfT1ZFUkZMT1coY2hlY2spIGRvIHtcCisgICAgaWYgKCEoY2hlY2spKVwK
KyAgICAgICAgT3ZlcmZsb3dIYW5kbGVyOjpvdmVyZmxvd2VkKCk7XAorfSB3aGlsZSAoMCkKKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFZlY3RvclR5cGUsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlciA9IENyYXNoT25PdmVyZmxvdz4gc3RydWN0IEluZGV4ZWRJdGVyYXRvciB7Cisg
ICAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhlZEl0ZXJhdG9yPGNvbnN0IFZlY3RvclR5cGUsIGNvbnN0
IFQsIE92ZXJmbG93SGFuZGxlcj4gY29uc3RfaXRlcmF0b3I7CisKKyAgICB0eXBlZGVmIFQgVmFs
dWVUeXBlOworICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKKyAgICB0eXBl
ZGVmIFZhbHVlVHlwZSB2YWx1ZV90eXBlOworICAgIHR5cGVkZWYgVmFsdWVUeXBlKiBwb2ludGVy
OworICAgIHR5cGVkZWYgVmFsdWVUeXBlJiByZWZlcmVuY2U7CisgICAgdHlwZWRlZiBzdGQ6OmJp
ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgSW5kZXhl
ZEl0ZXJhdG9yKCkKKyAgICAgICAgOiBtX3ZlY3RvcihudWxscHRyKQorICAgICAgICAsIG1fcG9z
aXRpb24oMCkKKyAgICB7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yKFZlY3RvclR5cGUm
IHZlY3RvciwgVmFsdWVUeXBlKiBwb3NpdGlvbikKKyAgICAgICAgOiBtX3ZlY3RvcigmdmVjdG9y
KQorICAgICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24gLSB2ZWN0b3IuZGF0YSgpKQorICAgIHsK
KyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3IoY29uc3QgSW5kZXhlZEl0ZXJhdG9yJiBvdGhl
cikKKyAgICAgICAgOiBtX3ZlY3RvcihvdGhlci5tX3ZlY3RvcikKKyAgICAgICAgLCBtX3Bvc2l0
aW9uKG90aGVyLm1fcG9zaXRpb24pCisgICAgeworICAgIH0KKworICAgIFZhbHVlVHlwZSogb3Bl
cmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZtX3ZlY3Rvci0+YXQobV9wb3NpdGlvbik7IH0KKyAg
ICBWYWx1ZVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLT5hdChtX3Bv
c2l0aW9uKTsgfQorICAgIFZhbHVlVHlwZSogZ2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
ICghbV92ZWN0b3IpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgSU5ERVhF
RF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uIDw9IG1fdmVjdG9yLT5zaXplKCkpOworICAg
ICAgICByZXR1cm4gbV92ZWN0b3ItPmRhdGEoKSArIG1fcG9zaXRpb247CisgICAgfQorCisgICAg
SW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICB7CisgICAgICAgIG1fcG9zaXRpb24r
KzsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIEluZGV4ZWRJdGVyYXRvciBv
cGVyYXRvcisrKGludCkKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRo
aXMpOworICAgICAgICBtX3Bvc2l0aW9uKys7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvci0tKCkKKyAgICB7CisgICAgICAgIG1f
cG9zaXRpb24tLTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIEluZGV4ZWRJ
dGVyYXRvciBvcGVyYXRvci0tKGludCkKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVyYXRvciBy
ZXN1bHQoKnRoaXMpOworICAgICAgICBtX3Bvc2l0aW9uLS07CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorCisgICAgLy8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBs
aWNpdCBjb252ZXJzaW9uIHRvIGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgor
ICAgIHR5cGVkZWYgc2l6ZV90IChJbmRleGVkSXRlcmF0b3I6OipVbnNwZWNpZmllZEJvb2xUeXBl
KTsKKyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29uc3QgeyByZXR1cm4gbV92
ZWN0b3IgPyAmSW5kZXhlZEl0ZXJhdG9yOjptX3Bvc2l0aW9uIDogbnVsbHB0cjsgfQorCisjaWYg
X19TSVpFT0ZfU0laRV9UX18gIT0gX19TSVpFT0ZfSU5UX18gfHwgUExBVEZPUk0oQ09DT0EpCisj
ZGVmaW5lIF9VTlNJR05FRF9JZl9ESUZGRVJFTlQobWFjcm8pIG1hY3JvKHVuc2lnbmVkKQorI2Vs
c2UKKyNkZWZpbmUgX1VOU0lHTkVEX0lmX0RJRkZFUkVOVChtYWNybykKKyNlbmRpZgorCisjZGVm
aW5lIEZPUl9FQUNIX0lOVEVHRVJfVFlQRShtYWNybykgXAorICAgIG1hY3JvKHNpemVfdCkgXAor
ICAgIG1hY3JvKGludDMyX3QpIFwKKyAgICBtYWNybyhsb25nKSBcCisgICAgbWFjcm8obG9uZyBs
b25nKSBcCisgICAgbWFjcm8odW5zaWduZWQgbG9uZyBsb25nKSBcCisgICAgX1VOU0lHTkVEX0lm
X0RJRkZFUkVOVChtYWNybykKKworI2RlZmluZSBNT0RJRklFUl9PUFModHlwZSkgXAorICAgIElu
ZGV4ZWRJdGVyYXRvciYgb3BlcmF0b3IrPSh0eXBlIGluY3JlbWVudCkgXAorICAgIHsgXAorICAg
ICAgICBtX3Bvc2l0aW9uICs9IGluY3JlbWVudDsgXAorICAgICAgICByZXR1cm4gKnRoaXM7IFwK
KyAgICB9IFwKK1wKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJhdG9yLT0odHlwZSBkZWNyZW1l
bnQpIFwKKyAgICB7IFwKKyAgICAgICAgbV9wb3NpdGlvbiAtPSBkZWNyZW1lbnQ7IFwKKyAgICAg
ICAgcmV0dXJuICp0aGlzOyBcCisgICAgfQorCisgICAgRk9SX0VBQ0hfSU5URUdFUl9UWVBFKE1P
RElGSUVSX09QUykKKworI3VuZGVmIE1PRElGSUVSX09QUworCisjZGVmaW5lIEFSSVRITUVUSUNf
T1BTKHR5cGUpIFwKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3IrKHR5cGUgaW5jcmVtZW50
KSBjb25zdCBcCisgICAgeyBcCisgICAgICAgIEluZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMp
OyBcCisgICAgICAgIHJlc3VsdC5tX3Bvc2l0aW9uICs9IGluY3JlbWVudDsgXAorICAgICAgICBy
ZXR1cm4gcmVzdWx0OyBcCisgICAgfSBcCitcCisgICAgSW5kZXhlZEl0ZXJhdG9yIG9wZXJhdG9y
LSh0eXBlIGRlY3JlbWVudCkgY29uc3QgXAorICAgIHsgXAorICAgICAgICBJbmRleGVkSXRlcmF0
b3IgcmVzdWx0KCp0aGlzKTsgXAorICAgICAgICByZXN1bHQubV9wb3NpdGlvbiAtPSBkZWNyZW1l
bnQ7IFwKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgIH0KKworCisgICAgRk9SX0VBQ0hf
SU5URUdFUl9UWVBFKEFSSVRITUVUSUNfT1BTKQorCisjdW5kZWYgQVJJVEhNRVRJQ19PUFMKKwor
ICAgIHB0cmRpZmZfdCBvcGVyYXRvci0oY29uc3QgY29uc3RfaXRlcmF0b3ImIHJpZ2h0KSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcG9zaXRpb24gLSByaWdodC5tX3Bvc2l0aW9uOwor
ICAgIH0KKworICAgIHB0cmRpZmZfdCBvcGVyYXRvci0oY29uc3QgVmFsdWVUeXBlKiByaWdodCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBnZXQoKSAtIHJpZ2h0OworICAgIH0KKworICAg
IHZvaWQgb3BlcmF0b3I9KGNvbnN0IEluZGV4ZWRJdGVyYXRvciYgb3RoZXIpCisgICAgeworICAg
ICAgICBtX3ZlY3RvciA9IG90aGVyLm1fdmVjdG9yOworICAgICAgICBtX3Bvc2l0aW9uID0gb3Ro
ZXIubV9wb3NpdGlvbjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgY29uc3Rf
aXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgp
ID09IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBjb25zdF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdW5z
YWZlR2V0KCkgIT0gb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
dW5zYWZlR2V0KCkgPT0gb3RoZXI7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdW5zYWZlR2V0
KCkgIT0gb3RoZXI7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgVmFsdWVUeXBl
KiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA8IG90aGVy
OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBWYWx1ZVR5cGUqIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpIDw9IG90aGVyOworICAgIH0K
KworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA8IG90aGVyLnVuc2FmZUdldCgpOwor
ICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPD0gb3RoZXIudW5zYWZl
R2V0KCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgSW5kZXhlZEl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA+IG90aGVy
LnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBjb25zdF9p
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkg
Pj0gb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3Qg
VmFsdWVUeXBlKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQo
KSA+IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBWYWx1ZVR5cGUq
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpID49IG90aGVy
OworICAgIH0KKworICAgIG9wZXJhdG9yIGNvbnN0X2l0ZXJhdG9yKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGNvbnN0X2l0ZXJhdG9yIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmVjdG9yID0g
bV92ZWN0b3I7CisgICAgICAgIHJlc3VsdC5tX3Bvc2l0aW9uID0gbV9wb3NpdGlvbjsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBWZWN0b3JUeXBlKiBtX3ZlY3RvcjsKKyAg
ICBzaXplX3QgbV9wb3NpdGlvbjsKKworICAgIFZhbHVlVHlwZSogdW5zYWZlR2V0KCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmICghbV92ZWN0b3IpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIGdldCgpOworICAgIH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGlu
ZSB0eXBlbmFtZSBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+
OjpWYWx1ZVR5cGUqIGdldFB0cihJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxv
d0hhbmRsZXI+IHApCit7CisgICAgcmV0dXJuIHAuZ2V0KCk7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lu
bGluZSBwdHJkaWZmX3Qgb3BlcmF0b3ItKGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5k
ZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7Cisg
ICAgcmV0dXJuIGxlZnQgLSByaWdodC5nZXQoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIHB0
cmRpZmZfdCBvcGVyYXRvci0oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8
VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gbGVm
dCAtIHJpZ2h0LmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFs
dWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgcHRyZGlmZl90IG9wZXJh
dG9yLShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxjb25zdCBU
LCBjb25zdCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVy
biBsZWZ0IC0gcmlnaHQuZ2V0KCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJh
dG9yPT0oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBl
LCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPT0gbGVmdDsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWYWx1ZVR5cGUq
IGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxl
cj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA9PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+
CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhlZEl0
ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAgcmV0
dXJuIHJpZ2h0ICE9IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBW
YWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVU
eXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgIT0gbGVm
dDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I8PShWYWx1ZVR5cGUqIGxl
ZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4m
IHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA+PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Citp
bmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFZhbHVlVHlwZSogbGVmdCwgY29uc3QgSW5kZXhl
ZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmlnaHQpCit7CisgICAg
cmV0dXJuIHJpZ2h0ID49IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBib29sIG9wZXJh
dG9yPj0oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBl
LCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPD0gbGVmdDsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBWYWx1ZVR5cGUq
IGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxl
cj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA8PSBsZWZ0OworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+
CitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRl
cmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1
cm4gcmlnaHQgPiBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFs
dWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBl
LCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPiBsZWZ0Owor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oVmFsdWVUeXBlKiBsZWZ0LCBj
b25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdo
dCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPCBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUg
Ym9vbCBvcGVyYXRvcj4oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0
b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4g
cmlnaHQgPCBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmVjdG9yVHlwZSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyPiBzdHJ1Y3QgSW5kZXhlZEl0ZXJhdG9yU2VsZWN0b3IgeworICAg
IHR5cGVkZWYgdHlwZW5hbWUgVmVjdG9yVHlwZTo6VmFsdWVUeXBlIFZhbHVlVHlwZTsKKyAgICB0
eXBlZGVmIEluZGV4ZWRJdGVyYXRvcjxWZWN0b3JUeXBlLCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFu
ZGxlcj4gaXRlcmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcjo6Y29uc3RfaXRl
cmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgc3RhdGljIGl0ZXJhdG9yIG1ha2VJdGVyYXRvcihW
ZWN0b3JUeXBlJiB2ZWN0b3IsIFZhbHVlVHlwZSogcCkgeyByZXR1cm4gaXRlcmF0b3IodmVjdG9y
LCBwKTsgfQorICAgIHN0YXRpYyBjb25zdF9pdGVyYXRvciBtYWtlQ29uc3RJdGVyYXRvcihjb25z
dCBWZWN0b3JUeXBlJiB2ZWN0b3IsIGNvbnN0IFZhbHVlVHlwZSogcCkgeyByZXR1cm4gY29uc3Rf
aXRlcmF0b3IodmVjdG9yLCBwKTsgfQorfTsKKworI3VuZGVmIElOREVYRURfSVRFUkFUT1JfT1ZF
UkZMT1cKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50
ZWRBcnJheS5oIGIvU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5LmgKaW5kZXggNzk4Njlh
OWVkNGJlYWMyNDYxMjNmNzg3YjY3MTk0NDI2ZTgwMzc5ZC4uY2RmYmY4MTg5NTIwNWJkYWFhNzI2
MTA1ZTY3MzMyZjcwYzMxY2FkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmVmQ291bnRl
ZEFycmF5LmgKKysrIGIvU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5LmgKQEAgLTg0LDcg
Kzg0LDcgQEAgcHVibGljOgogICAgICAgICBIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSktPnJl
ZkNvdW50ID0gMTsKICAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5sZW5ndGgg
PSBvdGhlci5zaXplKCk7CiAgICAgICAgIEFTU0VSVChIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0
YSktPmxlbmd0aCA9PSBvdGhlci5zaXplKCkpOwotICAgICAgICBWZWN0b3JUeXBlT3BlcmF0aW9u
czxUPjo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCksIG1fZGF0
YSk7CisgICAgICAgIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+Ojp1bmluaXRpYWxpemVkQ29weShn
ZXRQdHIob3RoZXIuYmVnaW4oKSksIGdldFB0cihvdGhlci5lbmQoKSksIG1fZGF0YSk7CiAgICAg
fQogICAgIAogICAgIFJlZkNvdW50ZWRBcnJheSYgb3BlcmF0b3I9KGNvbnN0IFJlZkNvdW50ZWRB
cnJheSYgb3RoZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaCBiL1NvdXJj
ZS9XVEYvd3RmL1ZlY3Rvci5oCmluZGV4IGUzNDYxNzJkMTg2MzVkN2FhODhlOTM5YjllZTAzM2Ri
NjA4NWZmOWEuLjQyM2IzNWU2NDdlZTNlNDMyZDY0ZjVhYzZjNmUwZDdmNWFiNDQ1MDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rv
ci5oCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYv
Q2hlY2tlZEFyaXRobWV0aWMuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvSW5kZXhlZEl0ZXJhdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL01hbGxvY1B0ci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTU4NSwxNCArNTg3LDE3IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IDAsIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlciA9IENyYXNoCiBjbGFzcyBWZWN0b3IgOiBwcml2YXRlIFZlY3RvckJ1ZmZlcjxULCBp
bmxpbmVDYXBhY2l0eT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHJpdmF0ZToK
KwogICAgIHR5cGVkZWYgVmVjdG9yQnVmZmVyPFQsIGlubGluZUNhcGFjaXR5PiBCYXNlOwogICAg
IHR5cGVkZWYgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD4gVHlwZU9wZXJhdGlvbnM7CisgICAgdHlw
ZWRlZiBJbmRleGVkSXRlcmF0b3JTZWxlY3RvcjxWZWN0b3IsIE92ZXJmbG93SGFuZGxlcj4gSXRl
cmF0b3JTZWxlY3RvcjsKIAogcHVibGljOgogICAgIHR5cGVkZWYgVCBWYWx1ZVR5cGU7CiAKLSAg
ICB0eXBlZGVmIFQqIGl0ZXJhdG9yOwotICAgIHR5cGVkZWYgY29uc3QgVCogY29uc3RfaXRlcmF0
b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBJdGVyYXRvclNlbGVjdG9yOjppdGVyYXRvciBpdGVy
YXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEl0ZXJhdG9yU2VsZWN0b3I6OmNvbnN0X2l0ZXJh
dG9yIGNvbnN0X2l0ZXJhdG9yOworCiAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8
aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CiAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRl
cmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAKQEAgLTYwNyw3
ICs2MTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGFzYW5TZXRJbml0aWFsQnVmZmVyU2l6ZVRvKHNp
emUpOwogCiAgICAgICAgIGlmIChiZWdpbigpKQotICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6
OmluaXRpYWxpemUoYmVnaW4oKSwgZW5kKCkpOworICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6
OmluaXRpYWxpemUoZ2V0UHRyKGJlZ2luKCkpLCBnZXRQdHIoZW5kKCkpKTsKICAgICB9CiAKICAg
ICBWZWN0b3Ioc2l6ZV90IHNpemUsIGNvbnN0IFQmIHZhbCkKQEAgLTYxNiw3ICs2MjEsNyBAQCBw
dWJsaWM6CiAgICAgICAgIGFzYW5TZXRJbml0aWFsQnVmZmVyU2l6ZVRvKHNpemUpOwogCiAgICAg
ICAgIGlmIChiZWdpbigpKQotICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6
ZWRGaWxsKGJlZ2luKCksIGVuZCgpLCB2YWwpOworICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6
OnVuaW5pdGlhbGl6ZWRGaWxsKGdldFB0cihiZWdpbigpKSwgZ2V0UHRyKGVuZCgpKSwgdmFsKTsK
ICAgICB9CiAKICAgICBWZWN0b3Ioc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IGluaXRpYWxpemVy
TGlzdCkKQEAgLTY4NSwxMCArNjkwLDEwIEBAIHB1YmxpYzoKICAgICBjb25zdCBUKiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gQmFzZTo6YnVmZmVyKCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGRh
dGFNZW1vcnlPZmZzZXQoKSB7IHJldHVybiBCYXNlOjpidWZmZXJNZW1vcnlPZmZzZXQoKTsgfQog
Ci0gICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBkYXRhKCk7IH0KLSAgICBpdGVyYXRvciBl
bmQoKSB7IHJldHVybiBiZWdpbigpICsgbV9zaXplOyB9Ci0gICAgY29uc3RfaXRlcmF0b3IgYmVn
aW4oKSBjb25zdCB7IHJldHVybiBkYXRhKCk7IH0KLSAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBj
b25zdCB7IHJldHVybiBiZWdpbigpICsgbV9zaXplOyB9CisgICAgaXRlcmF0b3IgYmVnaW4oKSB7
IHJldHVybiBJdGVyYXRvclNlbGVjdG9yOjptYWtlSXRlcmF0b3IoKnRoaXMsIGRhdGEoKSk7IH0K
KyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBiZWdpbigpICsgc2l6ZSgpOyB9CisgICAgY29u
c3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBJdGVyYXRvclNlbGVjdG9yOjptYWtl
Q29uc3RJdGVyYXRvcigqdGhpcywgZGF0YSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgKyBzaXplKCk7IH0KIAogICAgIHJldmVyc2VfaXRlcmF0
b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICAgICByZXZl
cnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9
CkBAIC03MjksNiArNzM0LDcgQEAgcHVibGljOgogICAgIHZvaWQgdW5jaGVja2VkQXBwZW5kKFZh
bHVlVHlwZSYmIHZhbHVlKSB7IHVuY2hlY2tlZEFwcGVuZDxWYWx1ZVR5cGU+KHN0ZDo6Zm9yd2Fy
ZDxWYWx1ZVR5cGU+KHZhbHVlKSk7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIHVu
Y2hlY2tlZEFwcGVuZChVJiYpOwogCisgICAgdm9pZCBhcHBlbmQoY29uc3RfaXRlcmF0b3IsIHNp
emVfdCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCBhcHBlbmQoY29uc3QgVSosIHNp
emVfdCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IG90aGVyQ2FwYWNpdHk+IHZv
aWQgYXBwZW5kVmVjdG9yKGNvbnN0IFZlY3RvcjxVLCBvdGhlckNhcGFjaXR5PiYpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IGJvb2wgdHJ5QXBwZW5kKGNvbnN0IFUqLCBzaXplX3QpOwpAQCAt
ODE1LDcgKzgyMSw3IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
LCBtaW5DYXBhY2l0eT46OlZlY3Rvcihjb25zdCBWZWN0b3ImIG90CiAgICAgYXNhblNldEluaXRp
YWxCdWZmZXJTaXplVG8ob3RoZXIuc2l6ZSgpKTsKIAogICAgIGlmIChiZWdpbigpKQotICAgICAg
ICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIu
ZW5kKCksIGJlZ2luKCkpOworICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENv
cHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuZW5kKCkpLCBnZXRQdHIoYmVn
aW4oKSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHks
IHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgpAQCAtODI2LDcg
KzgzMiw3IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eT46OlZlY3Rvcihjb25zdCBWZWN0b3I8VCwKICAgICBhc2FuU2V0SW5pdGlhbEJ1ZmZl
clNpemVUbyhvdGhlci5zaXplKCkpOwogCiAgICAgaWYgKGJlZ2luKCkpCi0gICAgICAgIFR5cGVP
cGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSwg
YmVnaW4oKSk7CisgICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShnZXRQ
dHIob3RoZXIuYmVnaW4oKSksIGdldFB0cihvdGhlci5lbmQoKSksIGdldFB0cihiZWdpbigpKSk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CkBAIC04NDQsOSArODUwLDkg
QEAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5
PiYgVmVjdG9yPFQsIGlubGluZUNhcGFjaXQKICAgICB9CiAKICAgICBhc2FuQnVmZmVyU2l6ZVdp
bGxDaGFuZ2VUbyhvdGhlci5zaXplKCkpOwotCi0gICAgc3RkOjpjb3B5KG90aGVyLmJlZ2luKCks
IG90aGVyLmJlZ2luKCkgKyBzaXplKCksIGJlZ2luKCkpOwotICAgIFR5cGVPcGVyYXRpb25zOjp1
bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpICsgc2l6ZSgpLCBvdGhlci5lbmQoKSwgZW5k
KCkpOworICAgIAorICAgIHN0ZDo6Y29weShnZXRQdHIob3RoZXIuYmVnaW4oKSksIGdldFB0cihv
dGhlci5iZWdpbigpICsgc2l6ZSgpKSwgZ2V0UHRyKGJlZ2luKCkpKTsKKyAgICBUeXBlT3BlcmF0
aW9uczo6dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkgKyBzaXplKCkpLCBn
ZXRQdHIob3RoZXIuZW5kKCkpLCBnZXRQdHIoZW5kKCkpKTsKICAgICBtX3NpemUgPSBvdGhlci5z
aXplKCk7CiAKICAgICByZXR1cm4gKnRoaXM7CkBAIC04NzMsOCArODc5LDggQEAgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXQKICAgICAKICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhvdGhl
ci5zaXplKCkpOwogCi0gICAgc3RkOjpjb3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmJlZ2luKCkg
KyBzaXplKCksIGJlZ2luKCkpOwotICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29w
eShvdGhlci5iZWdpbigpICsgc2l6ZSgpLCBvdGhlci5lbmQoKSwgZW5kKCkpOworICAgIHN0ZDo6
Y29weShnZXRQdHIob3RoZXIuYmVnaW4oKSksIGdldFB0cihvdGhlci5iZWdpbigpICsgc2l6ZSgp
KSwgZ2V0UHRyKGJlZ2luKCkpKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENv
cHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkgKyBzaXplKCkpLCBnZXRQdHIob3RoZXIuZW5kKCkpLCBn
ZXRQdHIoZW5kKCkpKTsKICAgICBtX3NpemUgPSBvdGhlci5zaXplKCk7CiAKICAgICByZXR1cm4g
KnRoaXM7CkBAIC05MzYsOCArOTQyLDggQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpmaWxsKGNvbnN0IFQmIHZhbCwKIAogICAg
IGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG5ld1NpemUpOwogCi0gICAgc3RkOjpmaWxsKGJl
Z2luKCksIGVuZCgpLCB2YWwpOwotICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkRmls
bChlbmQoKSwgYmVnaW4oKSArIG5ld1NpemUsIHZhbCk7CisgICAgc3RkOjpmaWxsKGdldFB0cihi
ZWdpbigpKSwgZ2V0UHRyKGVuZCgpKSwgdmFsKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0
aWFsaXplZEZpbGwoZ2V0UHRyKGVuZCgpKSwgZ2V0UHRyKGJlZ2luKCkgKyBuZXdTaXplKSwgdmFs
KTsKICAgICBtX3NpemUgPSBuZXdTaXplOwogfQogCkBAIC05NTgsMTMgKzk2NCwxMyBAQCB2b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46
OmV4cGFuZENhcGFjaXR5KHNpegogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIFQq
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46
OmV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSwgVCogcHRyKQogewotICAgIGlm
IChwdHIgPCBiZWdpbigpIHx8IHB0ciA+PSBlbmQoKSkgeworICAgIGlmIChwdHIgPCBnZXRQdHIo
YmVnaW4oKSkgfHwgcHRyID49IGdldFB0cihlbmQoKSkpIHsKICAgICAgICAgZXhwYW5kQ2FwYWNp
dHkobmV3TWluQ2FwYWNpdHkpOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KICAgICBzaXpl
X3QgaW5kZXggPSBwdHIgLSBiZWdpbigpOwogICAgIGV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFj
aXR5KTsKLSAgICByZXR1cm4gYmVnaW4oKSArIGluZGV4OworICAgIHJldHVybiBnZXRQdHIoYmVn
aW4oKSArIGluZGV4KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KQEAg
LTk3NiwxNSArOTgyLDE1IEBAIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6dHJ5RXhwYW5kQ2FwYWNpdHkoCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwg
c2l6ZV90IG1pbkNhcGFjaXR5PgogY29uc3QgVCogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6dHJ5RXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5l
d01pbkNhcGFjaXR5LCBjb25zdCBUKiBwdHIpCiB7Ci0gICAgaWYgKHB0ciA8IGJlZ2luKCkgfHwg
cHRyID49IGVuZCgpKSB7CisgICAgaWYgKHB0ciA8IGdldFB0cihiZWdpbigpKSB8fCBwdHIgPj0g
Z2V0UHRyKGVuZCgpKSkgewogICAgICAgICBpZiAoIXRyeUV4cGFuZENhcGFjaXR5KG5ld01pbkNh
cGFjaXR5KSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gcHRyOwogICAg
IH0KLSAgICBzaXplX3QgaW5kZXggPSBwdHIgLSBiZWdpbigpOworICAgIHNpemVfdCBpbmRleCA9
IChwdHIgLSBiZWdpbigpKTsKICAgICBpZiAoIXRyeUV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFj
aXR5KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGJlZ2luKCkgKyBpbmRleDsKKyAg
ICByZXR1cm4gZ2V0UHRyKGJlZ2luKCkgKyBpbmRleCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXpl
X3QgbWluQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CkBAIC05OTgsMTQgKzEwMDQsMTQg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW4KIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnJlc2l6ZShzaXplX3Qgc2l6
ZSkKIHsKICAgICBpZiAoc2l6ZSA8PSBtX3NpemUpIHsKLSAgICAgICAgVHlwZU9wZXJhdGlvbnM6
OmRlc3RydWN0KGJlZ2luKCkgKyBzaXplLCBlbmQoKSk7CisgICAgICAgIFR5cGVPcGVyYXRpb25z
OjpkZXN0cnVjdChnZXRQdHIoYmVnaW4oKSArIHNpemUpLCBnZXRQdHIoZW5kKCkpKTsKICAgICAg
ICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8oc2l6ZSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgaWYgKHNpemUgPiBjYXBhY2l0eSgpKQogICAgICAgICAgICAgZXhwYW5kQ2FwYWNpdHkoc2l6
ZSk7CiAgICAgICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKHNpemUpOwogICAgICAgICBp
ZiAoYmVnaW4oKSkKLSAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0aWFsaXplKGVuZCgp
LCBiZWdpbigpICsgc2l6ZSk7CisgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6
ZShnZXRQdHIoZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSArIHNpemUpKTsKICAgICB9CiAgICAgCiAg
ICAgbV9zaXplID0gc2l6ZTsKQEAgLTEwMjIsNyArMTAyOCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXpl
X3QgbWluCiB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT46OnNocmluayhzaXplX3Qgc2l6ZSkKIHsKICAgICBBU1NFUlQoc2l6ZSA8PSBt
X3NpemUpOwotICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChiZWdpbigpICsgc2l6ZSwgZW5k
KCkpOworICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChnZXRQdHIoYmVnaW4oKSArIHNpemUp
LCBnZXRQdHIoZW5kKCkpKTsKICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhzaXplKTsK
ICAgICBtX3NpemUgPSBzaXplOwogfQpAQCAtMTAzNSw3ICsxMDQxLDcgQEAgdm9pZCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojpncm93KHNp
emVfdCBzaXplKQogICAgICAgICBleHBhbmRDYXBhY2l0eShzaXplKTsKICAgICBhc2FuQnVmZmVy
U2l6ZVdpbGxDaGFuZ2VUbyhzaXplKTsKICAgICBpZiAoYmVnaW4oKSkKLSAgICAgICAgVHlwZU9w
ZXJhdGlvbnM6OmluaXRpYWxpemUoZW5kKCksIGJlZ2luKCkgKyBzaXplKTsKKyAgICAgICAgVHlw
ZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoZ2V0UHRyKGVuZCgpKSwgZ2V0UHRyKGJlZ2luKCkgKyBz
aXplKSk7CiAgICAgbV9zaXplID0gc2l6ZTsKIH0KIApAQCAtMTA4Niw4ICsxMDkyLDggQEAgdm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+
OjpyZXNlcnZlQ2FwYWNpdHkoc2kKIHsKICAgICBpZiAobmV3Q2FwYWNpdHkgPD0gY2FwYWNpdHko
KSkKICAgICAgICAgcmV0dXJuOwotICAgIFQqIG9sZEJ1ZmZlciA9IGJlZ2luKCk7Ci0gICAgVCog
b2xkRW5kID0gZW5kKCk7CisgICAgVCogb2xkQnVmZmVyID0gZ2V0UHRyKGJlZ2luKCkpOworICAg
IFQqIG9sZEVuZCA9IGdldFB0cihlbmQoKSk7CiAKICAgICBhc2FuU2V0QnVmZmVyU2l6ZVRvRnVs
bENhcGFjaXR5KCk7CiAKQEAgLTEwOTYsNyArMTEwMiw3IEBAIHZvaWQgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6cmVzZXJ2ZUNhcGFjaXR5
KHNpCiAKICAgICBhc2FuU2V0SW5pdGlhbEJ1ZmZlclNpemVUbyhzaXplKCkpOwogCi0gICAgVHlw
ZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOworICAgIFR5cGVP
cGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBnZXRQdHIoYmVnaW4oKSkpOwogICAg
IEJhc2U6OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKIH0KIApAQCAtMTEwNSw4ICsxMTEx
LDggQEAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHk+Ojp0cnlSZXNlcnZlQ2FwYWNpdHkKIHsKICAgICBpZiAobmV3Q2FwYWNpdHkgPD0g
Y2FwYWNpdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgVCogb2xkQnVmZmVyID0gYmVn
aW4oKTsKLSAgICBUKiBvbGRFbmQgPSBlbmQoKTsKKyAgICBUKiBvbGRCdWZmZXIgPSBnZXRQdHIo
YmVnaW4oKSk7CisgICAgVCogb2xkRW5kID0gZ2V0UHRyKGVuZCgpKTsKIAogICAgIGFzYW5TZXRC
dWZmZXJTaXplVG9GdWxsQ2FwYWNpdHkoKTsKIApAQCAtMTExOCw3ICsxMTI0LDcgQEAgYm9vbCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojp0
cnlSZXNlcnZlQ2FwYWNpdHkKIAogICAgIGFzYW5TZXRJbml0aWFsQnVmZmVyU2l6ZVRvKHNpemUo
KSk7CiAKLSAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShvbGRCdWZmZXIsIG9sZEVuZCwgYmVnaW4o
KSk7CisgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGdldFB0cihi
ZWdpbigpKSk7CiAgICAgQmFzZTo6ZGVhbGxvY2F0ZUJ1ZmZlcihvbGRCdWZmZXIpOwogICAgIHJl
dHVybiB0cnVlOwogfQpAQCAtMTE0Myw3ICsxMTQ5LDcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpzaHJpbmtDYXBhY2l0eShz
aXoKIAogICAgIGFzYW5TZXRCdWZmZXJTaXplVG9GdWxsQ2FwYWNpdHkoKTsKIAotICAgIFQqIG9s
ZEJ1ZmZlciA9IGJlZ2luKCk7CisgICAgVCogb2xkQnVmZmVyID0gZ2V0UHRyKGJlZ2luKCkpOwog
ICAgIGlmIChuZXdDYXBhY2l0eSA+IDApIHsKICAgICAgICAgaWYgKEJhc2U6OnNob3VsZFJlYWxs
b2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpKSB7CiAgICAgICAgICAgICBCYXNlOjpyZWFsbG9jYXRl
QnVmZmVyKG5ld0NhcGFjaXR5KTsKQEAgLTExNTEsMTAgKzExNTcsMTAgQEAgdm9pZCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpzaHJpbmtD
YXBhY2l0eShzaXoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFQq
IG9sZEVuZCA9IGVuZCgpOworICAgICAgICBUKiBvbGRFbmQgPSBnZXRQdHIoZW5kKCkpOwogICAg
ICAgICBCYXNlOjphbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSk7CiAgICAgICAgIGlmIChiZWdp
bigpICE9IG9sZEJ1ZmZlcikKLSAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1
ZmZlciwgb2xkRW5kLCBiZWdpbigpKTsKKyAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjptb3Zl
KG9sZEJ1ZmZlciwgb2xkRW5kLCBnZXRQdHIoYmVnaW4oKSkpOwogICAgIH0KIAogICAgIEJhc2U6
OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKQEAgLTExNzcsMTEgKzExODMsMTcgQEAgdm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+
OjphcHBlbmQoY29uc3QgVSogZGEKICAgICBpZiAobmV3U2l6ZSA8IG1fc2l6ZSkKICAgICAgICAg
Q1JBU0goKTsKICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhuZXdTaXplKTsKLSAgICBU
KiBkZXN0ID0gZW5kKCk7CisgICAgVCogZGVzdCA9IGdldFB0cihlbmQoKSk7CiAgICAgVmVjdG9y
Q29waWVyPHN0ZDo6aXNfdHJpdmlhbDxUPjo6dmFsdWUsIFU+Ojp1bmluaXRpYWxpemVkQ29weShk
YXRhLCBzdGQ6OmFkZHJlc3NvZihkYXRhW2RhdGFTaXplXSksIGRlc3QpOwogICAgIG1fc2l6ZSA9
IG5ld1NpemU7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Cit2b2lkIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmFw
cGVuZChjb25zdF9pdGVyYXRvciBkYXRhLCBzaXplX3QgZGF0YVNpemUpCit7CisgICAgYXBwZW5k
KGdldFB0cihkYXRhKSwgZGF0YVNpemUpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNh
cGFjaXR5PiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgogYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojp0cnlBcHBlbmQoY29uc3QgVSogZGF0
YSwgc2l6ZV90IGRhdGFTaXplKQogewpAQCAtMTE5NSw3ICsxMjA3LDcgQEAgYm9vbCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojp0cnlBcHBl
bmQoY29uc3QgVSoKICAgICBpZiAobmV3U2l6ZSA8IG1fc2l6ZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG5ld1NpemUpOwotICAgIFQqIGRl
c3QgPSBlbmQoKTsKKyAgICBUKiBkZXN0ID0gZ2V0UHRyKGVuZCgpKTsKICAgICBWZWN0b3JDb3Bp
ZXI8c3RkOjppc190cml2aWFsPFQ+Ojp2YWx1ZSwgVT46OnVuaW5pdGlhbGl6ZWRDb3B5KGRhdGEs
IHN0ZDo6YWRkcmVzc29mKGRhdGFbZGF0YVNpemVdKSwgZGVzdCk7CiAgICAgbV9zaXplID0gbmV3
U2l6ZTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyMDYsNyArMTIxOCw3IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2Fw
YWNpdHk+OjphcHBlCiB7CiAgICAgaWYgKHNpemUoKSAhPSBjYXBhY2l0eSgpKSB7CiAgICAgICAg
IGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG1fc2l6ZSArIDEpOwotICAgICAgICBuZXcgKE5v
dE51bGwsIGVuZCgpKSBUKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgICAgICBuZXcgKE5v
dE51bGwsIGdldFB0cihlbmQoKSkpIFQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CiAgICAgICAg
ICsrbV9zaXplOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTIyNCw3ICsxMjM2LDcgQEAg
dm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNp
dHk+OjphcHBlbmRTbG93Q2FzZShVJiYKICAgICBBU1NFUlQoYmVnaW4oKSk7CiAKICAgICBhc2Fu
QnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhtX3NpemUgKyAxKTsKLSAgICBuZXcgKE5vdE51bGwsIGVu
ZCgpKSBUKHN0ZDo6Zm9yd2FyZDxVPigqcHRyKSk7CisgICAgbmV3IChOb3ROdWxsLCBnZXRQdHIo
ZW5kKCkpKSBUKHN0ZDo6Zm9yd2FyZDxVPigqcHRyKSk7CiAgICAgKyttX3NpemU7CiB9CiAKQEAg
LTEyMzksMTQgKzEyNTEsMTQgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6dW5jaGVja2VkQXAKICAgICBhc2FuQnVm
ZmVyU2l6ZVdpbGxDaGFuZ2VUbyhtX3NpemUgKyAxKTsKIAogICAgIGF1dG8gcHRyID0gc3RkOjph
ZGRyZXNzb2YodmFsdWUpOwotICAgIG5ldyAoTm90TnVsbCwgZW5kKCkpIFQoc3RkOjpmb3J3YXJk
PFU+KCpwdHIpKTsKKyAgICBuZXcgKE5vdE51bGwsIGdldFB0cihlbmQoKSkpIFQoc3RkOjpmb3J3
YXJkPFU+KCpwdHIpKTsKICAgICArK21fc2l6ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBt
aW5DYXBhY2l0eT4gdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IG90aGVyQ2FwYWNpdHk+CiBp
bmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHk+OjphcHBlbmRWZWN0b3IoY29uc3QgVmVjdG9yPFUsIG90aGVyQ2FwYWNpdHk+JiB2
YWwpCiB7Ci0gICAgYXBwZW5kKHZhbC5iZWdpbigpLCB2YWwuc2l6ZSgpKTsKKyAgICBhcHBlbmQo
Z2V0UHRyKHZhbC5iZWdpbigpKSwgdmFsLnNpemUoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXpl
X3QgbWluQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CkBAIC0xMjYxLDkgKzEyNzMsOSBA
QCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eT46Omluc2VydChzaXplX3QgcG9zaQogICAgIGlmIChuZXdTaXplIDwgbV9zaXplKQogICAg
ICAgICBDUkFTSCgpOwogICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG5ld1NpemUpOwot
ICAgIFQqIHNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247Ci0gICAgVHlwZU9wZXJhdGlvbnM6Om1v
dmVPdmVybGFwcGluZyhzcG90LCBlbmQoKSwgc3BvdCArIGRhdGFTaXplKTsKLSAgICBWZWN0b3JD
b3BpZXI8c3RkOjppc190cml2aWFsPFQ+Ojp2YWx1ZSwgVT46OnVuaW5pdGlhbGl6ZWRDb3B5KGRh
dGEsIHN0ZDo6YWRkcmVzc29mKGRhdGFbZGF0YVNpemVdKSwgc3BvdCk7CisgICAgYXV0byBzcG90
ID0gYmVnaW4oKSArIHBvc2l0aW9uOworICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBp
bmcoZ2V0UHRyKHNwb3QpLCBnZXRQdHIoZW5kKCkpLCBnZXRQdHIoc3BvdCArIGRhdGFTaXplKSk7
CisgICAgVmVjdG9yQ29waWVyPHN0ZDo6aXNfdHJpdmlhbDxUPjo6dmFsdWUsIFU+Ojp1bmluaXRp
YWxpemVkQ29weShkYXRhLCBzdGQ6OmFkZHJlc3NvZihkYXRhW2RhdGFTaXplXSksIGdldFB0cihz
cG90KSk7CiAgICAgbV9zaXplID0gbmV3U2l6ZTsKIH0KICAKQEAgLTEyODAsMjUgKzEyOTIsMjUg
QEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIs
IG1pbkNhcGFjaXR5Pjo6aW5zZXJ0KHNpemUKIAogICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5n
ZVRvKG1fc2l6ZSArIDEpOwogCi0gICAgVCogc3BvdCA9IGJlZ2luKCkgKyBwb3NpdGlvbjsKLSAg
ICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGVuZCgpLCBzcG90ICsgMSk7
Ci0gICAgbmV3IChOb3ROdWxsLCBzcG90KSBUKHN0ZDo6Zm9yd2FyZDxVPigqcHRyKSk7CisgICAg
YXV0byBzcG90ID0gYmVnaW4oKSArIHBvc2l0aW9uOworICAgIFR5cGVPcGVyYXRpb25zOjptb3Zl
T3ZlcmxhcHBpbmcoZ2V0UHRyKHNwb3QpLCBnZXRQdHIoZW5kKCkpLCBnZXRQdHIoc3BvdCArIDEp
KTsKKyAgICBuZXcgKE5vdE51bGwsIGdldFB0cihzcG90KSkgVChzdGQ6OmZvcndhcmQ8VT4oKnB0
cikpOwogICAgICsrbV9zaXplOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
PiB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgYz4KIGlubGluZSB2b2lkIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46Omluc2VydFZlY3Rv
cihzaXplX3QgcG9zaXRpb24sIGNvbnN0IFZlY3RvcjxVLCBjPiYgdmFsKQogewotICAgIGluc2Vy
dChwb3NpdGlvbiwgdmFsLmJlZ2luKCksIHZhbC5zaXplKCkpOworICAgIGluc2VydChwb3NpdGlv
biwgZ2V0UHRyKHZhbC5iZWdpbigpKSwgdmFsLnNpemUoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBz
aXplX3QgbWluQ2FwYWNpdHk+CiBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZW1vdmUoc2l6ZV90IHBvc2l0aW9uKQog
ewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0aW9uIDwgc2l6ZSgp
KTsKLSAgICBUKiBzcG90ID0gYmVnaW4oKSArIHBvc2l0aW9uOworICAgIGF1dG8gc3BvdCA9IGJl
Z2luKCkgKyBwb3NpdGlvbjsKICAgICBzcG90LT5+VCgpOwotICAgIFR5cGVPcGVyYXRpb25zOjpt
b3ZlT3ZlcmxhcHBpbmcoc3BvdCArIDEsIGVuZCgpLCBzcG90KTsKKyAgICBUeXBlT3BlcmF0aW9u
czo6bW92ZU92ZXJsYXBwaW5nKGdldFB0cihzcG90ICsgMSksIGdldFB0cihlbmQoKSksIGdldFB0
cihzcG90KSk7CiAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obV9zaXplIC0gMSk7CiAg
ICAgLS1tX3NpemU7CiB9CkBAIC0xMzA4LDEwICsxMzIwLDEwIEBAIGlubGluZSB2b2lkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnJlbW92
ZShzaXplCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24g
PD0gc2l6ZSgpKTsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihwb3NpdGlv
biArIGxlbmd0aCA8PSBzaXplKCkpOwotICAgIFQqIGJlZ2luU3BvdCA9IGJlZ2luKCkgKyBwb3Np
dGlvbjsKLSAgICBUKiBlbmRTcG90ID0gYmVnaW5TcG90ICsgbGVuZ3RoOwotICAgIFR5cGVPcGVy
YXRpb25zOjpkZXN0cnVjdChiZWdpblNwb3QsIGVuZFNwb3QpOyAKLSAgICBUeXBlT3BlcmF0aW9u
czo6bW92ZU92ZXJsYXBwaW5nKGVuZFNwb3QsIGVuZCgpLCBiZWdpblNwb3QpOworICAgIGF1dG8g
YmVnaW5TcG90ID0gYmVnaW4oKSArIHBvc2l0aW9uOworICAgIGF1dG8gZW5kU3BvdCA9IGJlZ2lu
U3BvdCArIGxlbmd0aDsKKyAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QoZ2V0UHRyKGJlZ2lu
U3BvdCksIGdldFB0cihlbmRTcG90KSk7CisgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFw
cGluZyhnZXRQdHIoZW5kU3BvdCksIGdldFB0cihlbmQoKSksIGdldFB0cihiZWdpblNwb3QpKTsK
ICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhtX3NpemUgLSBsZW5ndGgpOwogICAgIG1f
c2l6ZSAtPSBsZW5ndGg7CiB9CkBAIC0xMzY4LDcgKzEzODAsNyBAQCBpbmxpbmUgdW5zaWduZWQg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6
cmVtb3ZlQQogICAgICAgICB9CiAgICAgfQogICAgIGlmIChob2xlRW5kICE9IGVuZCgpKQotICAg
ICAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKGhvbGVFbmQsIGVuZCgpLCBob2xl
QmVnaW4pOworICAgICAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKGdldFB0ciho
b2xlRW5kKSwgZ2V0UHRyKGVuZCgpKSwgZ2V0UHRyKGhvbGVCZWdpbikpOwogICAgIGFzYW5CdWZm
ZXJTaXplV2lsbENoYW5nZVRvKG1fc2l6ZSAtIG1hdGNoQ291bnQpOwogICAgIG1fc2l6ZSAtPSBt
YXRjaENvdW50OwogICAgIHJldHVybiBtYXRjaENvdW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggNjc4NjExOTA2
OTgwNWU3NWI3Yzk0YWRkY2Q3MTUyN2ZhZmQ3ZWJlMy4uNDE4NzhjNmI4M2Q0ZGMxZDIwNmMyMWNh
OGI3NTlmMTk1NzhmOTA5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC0xNDY4LDggKzE0NjgsOCBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLSAgICAgICAgY29uc3QgdWludDhfdCogcHRyID0gYnVmZmVyLmJlZ2luKCk7
Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IGJ1ZmZlci5lbmQoKTsKKyAgICAgICAgY29u
c3QgdWludDhfdCogcHRyID0gZ2V0UHRyKGJ1ZmZlci5iZWdpbigpKTsKKyAgICAgICAgY29uc3Qg
dWludDhfdCogZW5kID0gZ2V0UHRyKGJ1ZmZlci5lbmQoKSk7CiAgICAgICAgIHVpbnQzMl90IHZl
cnNpb247CiAgICAgICAgIGlmICghcmVhZExpdHRsZUVuZGlhbihwdHIsIGVuZCwgdmVyc2lvbikg
fHwgdmVyc2lvbiA+IEN1cnJlbnRWZXJzaW9uKQogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IDEwNGVhMzBmZTRk
MDJlZDlmMjAxOWEzY2Q5NmIyOGJiYTdhZGIyYzcuLjIyNmE0YTc5MTY0ZGI1ODEzNTUzOWIxNTRl
ZmJhYjI3ZWU0Nzg5ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAK
QEAgLTIxNDcsMTEgKzIxNDcsMTEgQEAgaW5saW5lIGJvb2wgU2VhcmNoQnVmZmVyOjppc0JhZE1h
dGNoKGNvbnN0IFVDaGFyKiBtYXRjaCwgc2l6ZV90IG1hdGNoTGVuZ3RoKSBjb24KICAgICAvLyBj
cmVhdGluZyBhIG5ldyBvbmUgZWFjaCB0aW1lLgogICAgIG5vcm1hbGl6ZUNoYXJhY3RlcnMobWF0
Y2gsIG1hdGNoTGVuZ3RoLCBtX25vcm1hbGl6ZWRNYXRjaCk7CiAKLSAgICBjb25zdCBVQ2hhciog
YSA9IG1fbm9ybWFsaXplZFRhcmdldC5iZWdpbigpOwotICAgIGNvbnN0IFVDaGFyKiBhRW5kID0g
bV9ub3JtYWxpemVkVGFyZ2V0LmVuZCgpOworICAgIGNvbnN0IFVDaGFyKiBhID0gZ2V0UHRyKG1f
bm9ybWFsaXplZFRhcmdldC5iZWdpbigpKTsKKyAgICBjb25zdCBVQ2hhciogYUVuZCA9IGdldFB0
cihtX25vcm1hbGl6ZWRUYXJnZXQuZW5kKCkpOwogCi0gICAgY29uc3QgVUNoYXIqIGIgPSBtX25v
cm1hbGl6ZWRNYXRjaC5iZWdpbigpOwotICAgIGNvbnN0IFVDaGFyKiBiRW5kID0gbV9ub3JtYWxp
emVkTWF0Y2guZW5kKCk7CisgICAgY29uc3QgVUNoYXIqIGIgPSBnZXRQdHIobV9ub3JtYWxpemVk
TWF0Y2guYmVnaW4oKSk7CisgICAgY29uc3QgVUNoYXIqIGJFbmQgPSBnZXRQdHIobV9ub3JtYWxp
emVkTWF0Y2guZW5kKCkpOwogCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgLy8gU2tpcCBy
dW5zIG9mIG5vbi1rYW5hLWxldHRlciBjaGFyYWN0ZXJzLiBUaGlzIGlzIG5lY2Vzc2FyeSBzbyB3
ZSBjYW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyLm1tCmluZGV4IDJkOTA4MGEyMGI4Mzk4YzBiNGI5ZTRhOTA1ZmJjMjIyOGUyMzZk
YTEuLjc2ZmRmMDYzYmU0MzQ0M2Q3NGI2ZDQyYzJjNGQ3OWRhMTRhNWIyYjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQpA
QCAtNTc0LDcgKzU3NCw3IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRT
ZWxlY3Rpb25IaWdobGlnaHQoKQogCiAgICAgICAgIGlmICghY2dSZWN0cy5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgIENHUmVjdCB2aXNpYmxlUmVjdCA9IG1haW5GcmFtZVZpZXctPnZpc2libGVD
b250ZW50UmVjdCgpOwotICAgICAgICAgICAgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhp
Z2hsaWdodCA9IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0
V2l0aFN0eWxlQW5kRGlyZWN0aW9uKG51bGxwdHIsIGNnUmVjdHMuYmVnaW4oKSwgY2dSZWN0cy5z
aXplKCksIHZpc2libGVSZWN0LCBEREhpZ2hsaWdodFN0eWxlQnViYmxlTm9uZSB8IERESGlnaGxp
Z2h0U3R5bGVTdGFuZGFyZEljb25BcnJvdyB8IERESGlnaGxpZ2h0U3R5bGVCdXR0b25TaG93QWx3
YXlzLCBZRVMsIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsKKyAgICAgICAg
ICAgIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGln
aGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihu
dWxscHRyLCBjZ1JlY3RzLmRhdGEoKSwgY2dSZWN0cy5zaXplKCksIHZpc2libGVSZWN0LCBEREhp
Z2hsaWdodFN0eWxlQnViYmxlTm9uZSB8IERESGlnaGxpZ2h0U3R5bGVTdGFuZGFyZEljb25BcnJv
dyB8IERESGlnaGxpZ2h0U3R5bGVCdXR0b25TaG93QWx3YXlzLCBZRVMsIE5TV3JpdGluZ0RpcmVj
dGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbmV3UG90
ZW50aWFsSGlnaGxpZ2h0cy5hZGQoSGlnaGxpZ2h0OjpjcmVhdGVGb3JTZWxlY3Rpb24oKnRoaXMs
IGRkSGlnaGxpZ2h0LCBzZWxlY3Rpb25SYW5nZSkpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAKaW5kZXggMDUx
ODcxYWM2YzYwZmI2NDM5MjgzMGFhYzZhZDM4NTJhOTRkNDQ3Ni4uZGQwOTYzYTc1MDFhZDJlZTA2
MzFhNWUxNmQ3OTUxMTExMjIzOWQ1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcApAQCAtMjAwLDcgKzIwMCw3IEBAIGJvb2wg
Y29udmVydFdPRkZUb1NmbnQoU2hhcmVkQnVmZmVyKiB3b2ZmLCBWZWN0b3I8Y2hhcj4mIHNmbnQp
CiAgICAgICAgICAgICB1TG9uZ2YgZGVzdExlbiA9IHRhYmxlT3JpZ0xlbmd0aDsKICAgICAgICAg
ICAgIGlmICghc2ZudC50cnlSZXNlcnZlQ2FwYWNpdHkoc2ZudC5zaXplKCkgKyB0YWJsZU9yaWdM
ZW5ndGgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIEJ5dGVm
KiBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxCeXRlZio+KHNmbnQuZW5kKCkpOworICAgICAgICAg
ICAgQnl0ZWYqIGRlc3QgPSByZWludGVycHJldF9jYXN0PEJ5dGVmKj4oZ2V0UHRyKHNmbnQuZW5k
KCkpKTsKICAgICAgICAgICAgIHNmbnQuZ3JvdyhzZm50LnNpemUoKSArIHRhYmxlT3JpZ0xlbmd0
aCk7CiAgICAgICAgICAgICBpZiAodW5jb21wcmVzcyhkZXN0LCAmZGVzdExlbiwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBCeXRlZio+KHdvZmYtPmRhdGEoKSArIHRhYmxlT2Zmc2V0KSwgdGFibGVD
b21wTGVuZ3RoKSAhPSBaX09LKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fp
cm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRD
YWlyby5jcHAKaW5kZXggNzI0ZDgzMmNjNzkzYTcxMGRiYTI0MTliZjAyYWEyOWY1ZGNjNGZkNC4u
NTJjNzU4NWEzNGJmMDFlZWM5MWM0ODc0OTJlOTBhOTlkNjczZGI2NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5j
cHAKQEAgLTYxLDcgKzYxLDcgQEAgY2Fpcm9fcGF0dGVybl90KiBHcmFkaWVudDo6cGxhdGZvcm1H
cmFkaWVudChmbG9hdCBnbG9iYWxBbHBoYSkKICAgICBlbHNlCiAgICAgICAgIG1fZ3JhZGllbnQg
PSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9saW5lYXIobV9wMC54KCksIG1fcDAueSgpLCBtX3AxLngo
KSwgbV9wMS55KCkpOwogCi0gICAgVmVjdG9yPENvbG9yU3RvcD46Oml0ZXJhdG9yIHN0b3BJdGVy
YXRvciA9IG1fc3RvcHMuYmVnaW4oKTsKKyAgICBhdXRvIHN0b3BJdGVyYXRvciA9IG1fc3RvcHMu
YmVnaW4oKTsKICAgICB3aGlsZSAoc3RvcEl0ZXJhdG9yICE9IG1fc3RvcHMuZW5kKCkpIHsKICAg
ICAgICAgY2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKG1fZ3JhZGllbnQsIHN0b3BJ
dGVyYXRvci0+c3RvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0b3BJdGVyYXRvci0+cmVkLCBzdG9wSXRlcmF0b3ItPmdyZWVuLCBzdG9wSXRlcmF0b3ItPmJs
dWUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCmluZGV4IGNkNTZlNjdlYjkxOGIxNjkzYzRl
Y2NmNzQwYWY4MGM4NTkzNmE3OTguLmZiYmZmZGFlNzdjMDFhNjIyM2Y2NzhmMGE2ODlkNDhmOTQw
OTVkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCkBAIC0xNDQsNyArMTQ0LDcgQEAg
dm9pZCBHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJC
ZWZvcmVGcmFtZSkKICAgICAvLyBhbHdheXMgdXNlIEltYWdlU291cmNlOjpjbGVhcih0cnVlLCAu
Li4pIHRvIGNvbXBsZXRlbHkgZnJlZSB0aGUgbWVtb3J5IGluCiAgICAgLy8gdGhpcyBjYXNlLgog
ICAgIGNsZWFyQmVmb3JlRnJhbWUgPSBzdGQ6Om1pbihjbGVhckJlZm9yZUZyYW1lLCBtX2ZyYW1l
QnVmZmVyQ2FjaGUuc2l6ZSgpIC0gMSk7Ci0gICAgY29uc3QgVmVjdG9yPEltYWdlRnJhbWU+Ojpp
dGVyYXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBjbGVhckJlZm9yZUZyYW1l
KTsKKyAgICBjb25zdCBhdXRvIGVuZCA9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpICsgY2xl
YXJCZWZvcmVGcmFtZTsKIAogICAgIC8vIFdlIG5lZWQgdG8gcHJlc2VydmUgZnJhbWVzIHN1Y2gg
dGhhdDoKICAgICAvLyAgICogV2UgZG9uJ3QgY2xlYXIgfGVuZHwKQEAgLTE2NCwxNCArMTY0LDE0
IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNs
ZWFyQmVmb3JlRnJhbWUpCiAgICAgLy8gICAqIElmIHRoZSBmcmFtZSBpcyBwYXJ0aWFsLCB3ZSdy
ZSBkZWNvZGluZyBpdCwgc28gZG9uJ3QgY2xlYXIgaXQ7IGlmIGl0CiAgICAgLy8gICAgIGhhcyBh
IGRpc3Bvc2FsIG1ldGhvZCBvdGhlciB0aGFuIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cywgc3Rv
cAogICAgIC8vICAgICBzY2FubmluZywgYXMgd2UnbGwgb25seSBuZWVkIHRoaXMgZnJhbWUgd2hl
biBkZWNvZGluZyB0aGUgbmV4dCBvbmUuCi0gICAgVmVjdG9yPEltYWdlRnJhbWU+OjppdGVyYXRv
ciBpKGVuZCk7CisgICAgYXV0byBpID0gZW5kOwogICAgIGZvciAoOyAoaSAhPSBtX2ZyYW1lQnVm
ZmVyQ2FjaGUuYmVnaW4oKSkgJiYgKChpLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVt
cHR5KSB8fCAoaS0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NlT3Zlcndy
aXRlUHJldmlvdXMpKTsgLS1pKSB7CiAgICAgICAgIGlmICgoaS0+c3RhdHVzKCkgPT0gSW1hZ2VG
cmFtZTo6RnJhbWVDb21wbGV0ZSkgJiYgKGkgIT0gZW5kKSkKICAgICAgICAgICAgIGktPmNsZWFy
UGl4ZWxEYXRhKCk7CiAgICAgfQogCiAgICAgLy8gTm93IHxpfCBob2xkcyB0aGUgbGFzdCBmcmFt
ZSB3ZSBuZWVkIHRvIHByZXNlcnZlOyBjbGVhciBwcmlvciBmcmFtZXMuCi0gICAgZm9yIChWZWN0
b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGoobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpOyBq
ICE9IGk7ICsraikgeworICAgIGZvciAoYXV0byBqID0gbV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2lu
KCk7IGogIT0gaTsgKytqKSB7CiAgICAgICAgIEFTU0VSVChqLT5zdGF0dXMoKSAhPSBJbWFnZUZy
YW1lOjpGcmFtZVBhcnRpYWwpOwogICAgICAgICBpZiAoai0+c3RhdHVzKCkgIT0gSW1hZ2VGcmFt
ZTo6RnJhbWVFbXB0eSkKICAgICAgICAgICAgIGotPmNsZWFyUGl4ZWxEYXRhKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDg1ZDBhMGVjYjJhOTdhNjJkNTMzZjg5
NmUzNmE0OWY2YThlNDM5NzIuLjk5Yzg2ZmM0OGYwZTRkZTY2MmIzN2RmZDA5MGVlMWQ4NGYzOGZj
N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC0xNjQyLDggKzE2
NDIsOCBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRGaWxsTGF5ZXJzKGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBDb2xvciYgYywgY29ucwogICAgICAgICBjb250ZXh0LT5iZWdpblRy
YW5zcGFyZW5jeUxheWVyKDEpOwogICAgIH0KIAotICAgIFZlY3Rvcjxjb25zdCBGaWxsTGF5ZXIq
Pjo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciB0b3BMYXllciA9IGxheWVycy5yZW5kKCk7Ci0gICAg
Zm9yIChWZWN0b3I8Y29uc3QgRmlsbExheWVyKj46OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgaXQg
PSBsYXllcnMucmJlZ2luKCk7IGl0ICE9IHRvcExheWVyOyArK2l0KQorICAgIGF1dG8gdG9wTGF5
ZXIgPSBsYXllcnMucmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IGxheWVycy5yYmVnaW4oKTsg
aXQgIT0gdG9wTGF5ZXI7ICsraXQpCiAgICAgICAgIHBhaW50RmlsbExheWVyKHBhaW50SW5mbywg
YywgKml0LCByZWN0LCBibGVlZEF2b2lkYW5jZSwgb3AsIGJhY2tncm91bmRPYmplY3QsIGJhc2VC
Z0NvbG9yVXNhZ2UpOwogCiAgICAgaWYgKHNob3VsZERyYXdCYWNrZ3JvdW5kSW5TZXBhcmF0ZUJ1
ZmZlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwCmluZGV4IDExNDg4MTIyNDlj
MjhlNzQ0ZTZkNzliMjlkOWYwNTM3ODY0Yjg5NjYuLjU0YTAyMjM1MDkxOGFhZTczNWQyMmM0MGUw
MGY2MGJmNjM2MTI1NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcApAQCAt
MjQzLDMxICsyNDMsMzEgQEAgc3RhdGljIGlubGluZSBmbG9hdCBrZXJuaW5nRm9yUGFpck9mU3Ry
aW5nc0FuZEdseXBocyhjb25zdCBTVkdLZXJuaW5nTWFwJiBrZXJuaW4KIHsKICAgICBpZiAoIWcx
LmlzRW1wdHkoKSAmJiBrZXJuaW5nTWFwLmdseXBoTWFwLmNvbnRhaW5zKGcxKSkgewogICAgICAg
ICBTVkdLZXJuaW5nVmVjdG9yKiBrZXJuaW5nVmVjdG9yID0ga2VybmluZ01hcC5nbHlwaE1hcC5n
ZXQoZzEpOwotICAgICAgICBTVkdLZXJuaW5nVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGtl
cm5pbmdWZWN0b3ItPmVuZCgpIC0gMTsKLSAgICAgICAgY29uc3QgU1ZHS2VybmluZ1ZlY3Rvcjo6
Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBrZXJuaW5nVmVjdG9yLT5iZWdpbigpIC0gMTsKLSAgICAg
ICAgZm9yICg7IGl0ICE9IGJlZ2luOyAtLWl0KSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2hlcyh1
MiwgZzIsICppdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXJuaW5nOworICAgICAg
ICBzaXplX3QgaXQgPSBrZXJuaW5nVmVjdG9yLT5zaXplKCk7CisgICAgICAgIHdoaWxlIChpdC0t
ID4gMCkgeworICAgICAgICAgICAgYXV0byYgdmFsdWUgPSBrZXJuaW5nVmVjdG9yLT5hdChpdCk7
CisgICAgICAgICAgICBpZiAobWF0Y2hlcyh1MiwgZzIsIHZhbHVlKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdmFsdWUua2VybmluZzsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghdTEu
aXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChrZXJuaW5nTWFwLnVuaWNvZGVNYXAuY29udGFpbnMo
dTEpKSB7CiAgICAgICAgICAgICBTVkdLZXJuaW5nVmVjdG9yKiBrZXJuaW5nVmVjdG9yID0ga2Vy
bmluZ01hcC51bmljb2RlTWFwLmdldCh1MSk7Ci0gICAgICAgICAgICBTVkdLZXJuaW5nVmVjdG9y
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGtlcm5pbmdWZWN0b3ItPmVuZCgpIC0gMTsKLSAgICAgICAg
ICAgIGNvbnN0IFNWR0tlcm5pbmdWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0ga2Vybmlu
Z1ZlY3Rvci0+YmVnaW4oKSAtIDE7Ci0gICAgICAgICAgICBmb3IgKDsgaXQgIT0gYmVnaW47IC0t
aXQpIHsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyh1MiwgZzIsICppdCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBpdC0+a2VybmluZzsKKyAgICAgICAgICAgIHNpemVfdCBpdCA9
IGtlcm5pbmdWZWN0b3ItPnNpemUoKTsKKyAgICAgICAgICAgIHdoaWxlIChpdC0tID4gMCkgewor
ICAgICAgICAgICAgICAgIGF1dG8mIHZhbHVlID0ga2VybmluZ1ZlY3Rvci0+YXQoaXQpOworICAg
ICAgICAgICAgICAgIGlmIChtYXRjaGVzKHUyLCBnMiwgdmFsdWUpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdmFsdWUua2VybmluZzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAg
ICAgICAgIGlmICgha2VybmluZ01hcC5rZXJuaW5nVW5pY29kZVJhbmdlTWFwLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgVmVjdG9yPFNWR0tlcm5pbmdQYWlyPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VNYXAuZW5kKCkgLSAxOwotICAgICAgICAg
ICAgY29uc3QgVmVjdG9yPFNWR0tlcm5pbmdQYWlyPjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBr
ZXJuaW5nTWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VNYXAuYmVnaW4oKSAtIDE7Ci0gICAgICAgICAg
ICBmb3IgKDsgaXQgIT0gYmVnaW47IC0taXQpIHsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2hl
cyh1MSwgdTIsIGcyLCAqaXQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQtPmtlcm5p
bmc7CisgICAgICAgICAgICBzaXplX3QgaXQgPSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2RlUmFu
Z2VNYXAuc2l6ZSgpOworICAgICAgICAgICAgd2hpbGUgKGl0LS0gPiAwKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgdmFsdWUgPSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VNYXBbaXRd
OworICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzKHUxLCB1MiwgZzIsIHZhbHVlKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmtlcm5pbmc7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0
LmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmgKaW5kZXggM2Q4OWI4ZDUwODdh
ODZjZmVhZmZjMDE0MGI2OTQ3NjJjMDk1ZGRkZi4uZGFmMmI5M2Q1MWI1YWY2YjczNGY1ZjlhNzY1
NDEzNjllMDQxNGEyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9kZVNl
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQuaApAQCAtNjQsOCArNjQs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICB2b2lkIG1hcmtTdWJ0cmVlc0Rp
c2pvaW50KGJvb2wgZGlzam9pbnQpIHsgbV9zdWJ0cmVlc0FyZURpc2pvaW50ID0gZGlzam9pbnQ7
IH0KICAgICAgICAgICAgIGJvb2wgc3VidHJlZXNBcmVEaXNqb2ludCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3VidHJlZXNBcmVEaXNqb2ludCB8fCBtX25vZGVzLnNpemUoKSA8IDI7IH0KIAotICAgICAg
ICAgICAgY29uc3QgUmVmUHRyPE5vZGU+KiBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMu
YmVnaW4oKTsgfQotICAgICAgICAgICAgY29uc3QgUmVmUHRyPE5vZGU+KiBlbmQoKSBjb25zdCB7
IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRy
PE5vZGU+Pjo6aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX25vZGVzLmJlZ2luKCk7
IH0KKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4+OjppdGVyYXRvciBlbmQo
KSBjb25zdCB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CiAKICAgICAgICAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHZvaWQgdHJhdmVyc2FsU29ydCgpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260442</attachid>
            <date>2015-09-02 14:43:55 -0700</date>
            <delta_ts>2015-09-02 16:21:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138821-20150902144354.patch</filename>
            <type>text/plain</type>
            <size>63452</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5MjE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
ZTNjYmNhOWIzN2U2MTExMzY0ZDE3OTViNTdhODM5ZjY1NDY5MzJiLi5hYjYwMGE0NWE5MDU2YWFj
YzEyMzZlOGUzNmE3ZTEyMDU2ZDI4ODhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMyBAQAorMjAxNC0xMi0xNSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3Rp
bGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJrIExh
bS4KKworICAgICAgICBVcGRhdGUgY29kZSB0byBkZWFsIHdpdGggc2xpZ2h0bHkgY2hhbmdlZCBp
dGVyYXRvciBzZW1hbnRpY3MuCisKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKToK
KyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmVtaXRTd2l0Y2hJbnRKdW1wKToKKyAgICAgICAgKiBmdGwvRlRMQWJicmV2aWF0aW9u
cy5oOgorICAgICAgICAoSlNDOjpGVEw6Om1kTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6YnVp
bGRDYWxsKToKKyAgICAgICAgKiBsbGludC9MTEludERhdGEuY3BwOgorICAgICAgICAoSlNDOjpM
TEludDo6RGF0YTo6cGVyZm9ybUFzc2VydGlvbnMpOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIu
aDoKKyAgICAgICAgKEpTQzo6U2NvcGU6OlNjb3BlKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJy
YXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3Rvcik6CisgICAgICAg
ICogdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2ZpbGVUcmVlTm9k
ZTo6ZHVtcEludGVybmFsKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAgICAgICAo
SlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjptYXRjaENoYXJhY3RlckNsYXNzKToKKwogMjAxNS0w
OS0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBBSSBh
c3NlcnRpb25zIGFib3V0IG5vdCBoYXZpbmcgdG8gZG8gdHlwZSBjaGVja3MgYXQgdGhlIHBvaW50
IG9mIGEgS25vd24gdXNlIGtpbmQgYXJlIHVuc291bmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggYWRjNTQ3ZGZkNGMxNDZiYjg5
MjE4ZjFmYjk2Nzk3NDQwNmVmNGExMS4uMzAzZDAyNmUzYmUwOTdlZGIzYzVjNWNjMjhlZWE0MGI4
ZWRmMDMyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dU
Ri9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4OSBAQAorMjAxNC0xMi0xNSAgT2xpdmVyIEh1bnQgIDxv
bGl2ZXJAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRp
b24gb2YgVmVjdG9yPD4gc3RpbGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBS
ZXZpZXdlZCBieSBNYXJrIExhbS4KKworICAgICAgICBBZGQgYSBuZXcgSW5kZXhlZEl0ZXJhdG9y
IHN0cnVjdCB0byBXVEYgdGhhdCB3cmFwcyBhCisgICAgICAgIFZlY3RvciB0eXBlIGFuZCBpbmRl
eCB0byBwcm92aWRlIHBvaW50ZXIgbGlrZSBzZW1hbnRpY3MKKyAgICAgICAgd2hpbGUgc3RpbGwg
cGVyZm9ybWluZyBydW50aW1lIGJvdW5kcyBjaGVja2luZywgZXZlbiBpbgorICAgICAgICByZWxl
YXNlIGJ1aWxkcy4gV2Ugc3RvcmUgYSBzaW1wbGUgaW5kZXggaW50byB0aGUgdmVjdG9yCisgICAg
ICAgIHdoaWNoIG1lYW5zIHRoYXQgdGhpcyBpdGVyYXRvciBhbGxvd3MgdmVjdG9yIHJlc2l6aW5n
CisgICAgICAgIGR1cmluZyBpdGVyYXRpb24uIElmIHRoZSB2ZWN0b3IgaXMgcmVzaXplZCBzdWNo
IHRoYXQgdGhlCisgICAgICAgIGl0ZXJhdG9yIGlzIG91dCBvZiBib3VuZHMsIHRoZW4gYW55IGF0
dGVtcHQgdG8gZGVyZWZlcmVuY2UKKyAgICAgICAgdGhlIGl0ZXJhdG9yIHdpbGwgY3Jhc2ggc2Fm
ZWx5LgorCisgICAgICAgIEZvciB0aGUgcHVycG9zZSBvZiByZXRhaW5pbmcgc2VtYW50aWNhbGx5
IGVxdWl2YWxlbnQKKyAgICAgICAgYmVoYXZpb3VyLCB0aGUgaXRlcmF0b3IgY2FuIGJlIG1vdmVk
IHRvIG1faW5kZXggPT0gc2l6ZSgpCisgICAgICAgIGFzIHRoYXQgaXMgdGhlIHN0YW5kYXJkICJl
bmQiIHRlcm1pbmF0b3IgZm9yIHRoZXNlIHR5cGVzLgorICAgICAgICBBdHRlbXB0aW5nIHRvIGRl
cmVmZXJlbmNlIGF0IHRoYXQgcG9pbnQgd2lsbCBzdGlsbCBjcmFzaAorICAgICAgICByYXRoZXIg
dGhhbiBwZXJmb3JtIGFuIHVuc2FmZSBtZW1vcnkgb3BlcmF0aW9uLgorCisgICAgICAgIEJ5IG5l
Y2Vzc2l0eSB0aGVyZSBhcmUgbWFueSBvdmVycmlkZXMgZm9yIG9wZXJhdG9yICsgYW5kIC0gYXMK
KyAgICAgICAgd2Ugb3RoZXJ3aXNlIGhpdCBtYW55IGRpZmZlcmVudCB0eXBlIHByb21vdGlvbiBh
bWJpZ3VpdGllcyB3aGVuCisgICAgICAgIHBlcmZvcm1pbmcgYXJpdGhtZXRpYyB3aXRoIGl0ZXJh
dG9ycy4gVGhlc2UgYW1iaWd1aXRpZXMgYXJlIGFsc28KKyAgICAgICAgZGlmZmVyZW50IGZvciAz
Mi0gdnMuIDY0LWJpdCwgc28gZHVwbGljYXRpbmcgdGhlIGZ1bmN0aW9ucworICAgICAgICBhbmQg
dGhlbiBmb3J3YXJkaW5nIHRvIHRoZSBjb3JlIGltcGxlbWVudGF0aW9ucyB0aGF0IHBlcmZvcm1l
ZAorICAgICAgICB0aGUgYm91bmRzIGNoZWNraW5nIGFuZCBtdXRhdGlvbiBzZWVtZWQgbGlrZSB0
aGUgcmlnaHQgY2FsbC4KKworICAgICAgICAqIFdURi52Y3hwcm9qL1dURi52Y3hwcm9qOgorICAg
ICAgICAqIFdURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0luZGV4ZWRJdGVyYXRvci5o
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpJbmRleGVkSXRlcmF0b3Ip
OgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yLT4pOgorICAgICAgICAo
V1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXVEY6OkluZGV4ZWRJ
dGVyYXRvcjo6Z2V0KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcisr
KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvci0tKToKKyAgICAgICAg
KFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKToKKyAg
ICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvci0pOgorICAgICAgICAoV1RGOjpJ
bmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRv
cjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3I8KToKKyAgICAgICAg
KFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcjw9KToKKyAgICAgICAgKFdURjo6SW5kZXhl
ZEl0ZXJhdG9yOjpvcGVyYXRvcj4pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9w
ZXJhdG9yPj0pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yIGNvbnN0
X2l0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjp1bnNhZmVHZXQpOgor
ICAgICAgICAoV1RGOjpnZXRQdHIpOgorICAgICAgICAoV1RGOjpvcGVyYXRvci0pOgorICAgICAg
ICAoV1RGOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3IhPSk6CisgICAgICAg
IChXVEY6Om9wZXJhdG9yPD0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj49KToKKyAgICAgICAg
KFdURjo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I+KToKKyAgICAgICAgKFdU
Rjo6SW5kZXhlZEl0ZXJhdG9yU2VsZWN0b3I6Om1ha2VJdGVyYXRvcik6CisgICAgICAgIChXVEY6
OkluZGV4ZWRJdGVyYXRvclNlbGVjdG9yOjptYWtlQ29uc3RJdGVyYXRvcik6CisgICAgICAgICog
d3RmL1JlZkNvdW50ZWRBcnJheS5oOgorICAgICAgICAoV1RGOjpSZWZDb3VudGVkQXJyYXk6OlJl
ZkNvdW50ZWRBcnJheSk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAoV1RGOjpW
ZWN0b3I6OlZlY3Rvcik6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6YmVnaW4pOgorICAgICAgICAo
V1RGOjpWZWN0b3I6OmVuZCk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OlZlY3Rv
cik6CisgICAgICAgIChXVEY6Oj0pOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+Ojpm
aWxsKToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6ZXhwYW5kQ2FwYWNpdHkpOgor
ICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+Ojp0cnlFeHBhbmRDYXBhY2l0eSk6CisgICAg
ICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnJlc2l6ZSk6CisgICAgICAgIChXVEY6Ok92ZXJm
bG93SGFuZGxlcj46OnNocmluayk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46Omdy
b3cpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpyZXNlcnZlQ2FwYWNpdHkpOgor
ICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+Ojp0cnlSZXNlcnZlQ2FwYWNpdHkpOgorICAg
ICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpzaHJpbmtDYXBhY2l0eSk6CisgICAgICAgIChX
VEY6Ok92ZXJmbG93SGFuZGxlcj46OmFwcGVuZCk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFu
ZGxlcj46OnRyeUFwcGVuZCk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OmFwcGVu
ZFNsb3dDYXNlKToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6dW5jaGVja2VkQXBw
ZW5kKToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kVmVjdG9yKToKKyAg
ICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6aW5zZXJ0KToKKyAgICAgICAgKFdURjo6T3Zl
cmZsb3dIYW5kbGVyPjo6aW5zZXJ0VmVjdG9yKToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5k
bGVyPjo6cmVtb3ZlKToKKwogMjAxNS0wOC0yOSAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGln
YWxpYS5jb20+CiAKICAgICAgICAgW1dURl0gSW1wcm92ZSBhIFBhcmtpbmdMb3Q6OnBhcmtDb25k
aXRpb25hbGx5KCkgY29tbWVudCBmb3IgYSBsaWJzdGRjKysgd29ya2Fyb3VuZApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDEyMjU4YzIzMTk2OTRiYzc5YzdkNTBjMzNkZWMyNWJiYWU3M2Y2YTguLjRjMDhkOGU5YTQz
MzMzMDZmNTQ0MjM3MzdjZGEwY2QzYzBlNDA1YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBA
QAorMjAxNC0xMi0xNSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3RpbGwgcmVjZWl2
ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJrIExhbS4KKworICAg
ICAgICBVcGRhdGUgdG8gZGVhbCB3aXRoIGRpZmZlcmVudCBpdGVyYXRvciB0eXBlLgorCisgICAg
ICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZVN0cmluZyk6CisgICAgICAgICog
ZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoQnVmZmVy
Ojppc0JhZE1hdGNoKToKKyAgICAgICAgKiBwYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVp
bGRTZWxlY3Rpb25IaWdobGlnaHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NlZ21l
bnRlZEZvbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZEZvbnREYXRhOjpm
b250RGF0YUZvckNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0
YTo6Y29udGFpbnNDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkRm9udERh
dGE6OmlzTG9hZGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3Jt
YXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFdPRkZUb1NmbnQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwYWludEZp
bGxMYXllcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaXJzdE5hbWVkR3JpZExpbmVCZWZvcmVQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZVJvd0Vu
ZENvbHVtbkVuZE5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKToK
KyAgICAgICAgKiBzdmcvU1ZHRm9udEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6a2Vy
bmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoQnl0
ZVN0cmVhbS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW06OmFwcGVuZCk6
CisgICAgICAgICogeG1sL1hQYXRoTm9kZVNldC5oOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6
Ok5vZGVTZXQ6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOb2RlU2V0OjplbmQp
OgorCiAyMDE1LTA5LTAxICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAg
IFdlYiBJbnNwZWN0b3I6IHRpZ2h0ZW4gdXAgbGlmZXRpbWVzIGZvciBJbnNwZWN0b3JDb250cm9s
bGVyLW93bmVkIG9iamVjdHM7IGFkZCBicmFjZSBpbml0aWFsaXplcnMgdG8gYWdlbnRzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldC5oCmluZGV4IDk1N2VhYWMyNTUwMGU4NDZlNjg3OTQyNmY4YWJlOGNiNGQ3
OTVjYzEuLjUxNjZiMTM0NzYyZmVlMDI4NTMwZTM4YmE3NGRmYzY3OTdhYTMwZjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldC5oCkBAIC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogLy8gTm9u
LWVtcHR5OiBUaGUgaGVhcCBhY2Nlc3MgaXMgdmFsaWQgaWYgYWxsIHRoZSBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbnMgaW4gdGhlIHNldCBhcmUgdmFsaWQuCiAKIGNsYXNzIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IHsKKyAgICB0eXBlZGVmIFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bj4gUHJvcGVydHlDb25kaXRpb25WZWN0b3I7CiBwdWJsaWM6CiAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQoKSB7IH0KICAgICAKQEAgLTczLDE1ICs3NCwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiAhbV9kYXRhOwogICAgIH0KICAgICAKLSAgICB0eXBlZGVmIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uKiBpdGVyYXRvcjsKKyAgICB0eXBlZGVmIFByb3BlcnR5Q29uZGl0
aW9uVmVjdG9yOjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICB0eXBlZGVmIFByb3BlcnR5Q29uZGl0
aW9uVmVjdG9yOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICAgICAKLSAgICBpdGVy
YXRvciBiZWdpbigpIGNvbnN0CisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdAogICAg
IHsKICAgICAgICAgaWYgKCFtX2RhdGEpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgcmV0dXJuIG1fZGF0YS0+dmVjdG9yLmJlZ2luKCk7CiAgICAgfQotICAgIGl0ZXJhdG9y
IGVuZCgpIGNvbnN0CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIGlmICghbV9kYXRhKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNDgsNyAr
MTUwLDcgQEAgcHVibGljOgogICAgIHB1YmxpYzoKICAgICAgICAgRGF0YSgpIHsgfQogICAgICAg
ICAKLSAgICAgICAgVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiB2ZWN0b3I7CisgICAg
ICAgIFByb3BlcnR5Q29uZGl0aW9uVmVjdG9yIHZlY3RvcjsKICAgICB9OwogICAgIAogcHJpdmF0
ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suY3BwCmluZGV4IDJmZTFiYjg3ZmYyNzY0YzZlYWUyYjM2ZjQyYTE2NzhiMjg2NzI2ZDYu
LjE2NjM3MTRhZGU5YWUzNjdlNTlhNGQyMzliYzczMGE3NWNiMzAwYWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApAQCAt
OTEsOSArOTEsOSBAQCB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CiAgICAgZm9yIChGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I6Oml0ZXJh
dG9yIHB0ciA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25EZWNscy5iZWdpbigpLCBlbmQgPSB0aGlz
T2JqZWN0LT5tX2Z1bmN0aW9uRGVjbHMuZW5kKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAg
ICB2aXNpdG9yLmFwcGVuZChwdHIpOworICAgICAgICB2aXNpdG9yLmFwcGVuZChXVEY6OmdldFB0
cihwdHIpKTsKICAgICBmb3IgKEZ1bmN0aW9uRXhwcmVzc2lvblZlY3Rvcjo6aXRlcmF0b3IgcHRy
ID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkV4cHJzLmJlZ2luKCksIGVuZCA9IHRoaXNPYmplY3Qt
Pm1fZnVuY3Rpb25FeHBycy5lbmQoKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgIHZpc2l0
b3IuYXBwZW5kKHB0cik7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKFdURjo6Z2V0UHRyKHB0cikp
OwogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1fY29uc3RhbnRSZWdpc3Rl
cnMuZGF0YSgpLCB0aGlzT2JqZWN0LT5tX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CiAgICAg
aWYgKHRoaXNPYmplY3QtPm1fcmFyZURhdGEpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAs
IGVuZCA9IHRoaXNPYmplY3QtPm1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7IGkgIT0gZW5k
OyBpKyspCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDc4M2IyMTU3YTFmMWUxM2MyZWNjMWFmZmY1ZTdm
ZGM0OWZlOWUzZDcuLjg4ZTc2MWU0OGNkMGVjMGU5ZjA1ZmUzYThkYTA0MGRhZjA1NWNlZmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCkBAIC0zMDc4LDggKzMwNzgsOCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0Q29tcGxleFBvcFNjb3BlcyhSZWdpc3RlcklEKiBzY29wZSwgQ29udHJvbEZsb3dD
b250ZQogICAgICAgICAgICAgaW50IHRvcFNjb3BlSW5kZXggPSAtMTsKICAgICAgICAgICAgIGlu
dCBib3R0b21TY29wZUluZGV4ID0gLTE7CiAgICAgICAgICAgICBpZiAoZmxpcFNjb3Blcykgewot
ICAgICAgICAgICAgICAgIHRvcFNjb3BlSW5kZXggPSB0b3BTY29wZSAtIG1fc2NvcGVDb250ZXh0
U3RhY2suYmVnaW4oKTsKLSAgICAgICAgICAgICAgICBib3R0b21TY29wZUluZGV4ID0gYm90dG9t
U2NvcGUgLSBtX3Njb3BlQ29udGV4dFN0YWNrLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgdG9w
U2NvcGVJbmRleCA9IHRvcFNjb3BlIC0gbV9zY29wZUNvbnRleHRTdGFjay5kYXRhKCk7CisgICAg
ICAgICAgICAgICAgYm90dG9tU2NvcGVJbmRleCA9IGJvdHRvbVNjb3BlIC0gbV9zY29wZUNvbnRl
eHRTdGFjay5kYXRhKCk7CiAgICAgICAgICAgICAgICAgc2F2ZWRTY29wZUNvbnRleHRTdGFjayA9
IG1fc2NvcGVDb250ZXh0U3RhY2s7CiAgICAgICAgICAgICAgICAgbV9zY29wZUNvbnRleHRTdGFj
ay5zaHJpbmsoZmluYWxseUNvbnRleHQuc2NvcGVDb250ZXh0U3RhY2tTaXplKTsKICAgICAgICAg
ICAgIH0KQEAgLTMxMzMsNyArMzEzMyw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRD
b21wbGV4UG9wU2NvcGVzKFJlZ2lzdGVySUQqIHNjb3BlLCBDb250cm9sRmxvd0NvbnRlCiAgICAg
ICAgICAgICBpZiAoZmxpcFNjb3BlcykgewogICAgICAgICAgICAgICAgIG1fc2NvcGVDb250ZXh0
U3RhY2sgPSBzYXZlZFNjb3BlQ29udGV4dFN0YWNrOwogICAgICAgICAgICAgICAgIHRvcFNjb3Bl
ID0gJm1fc2NvcGVDb250ZXh0U3RhY2tbdG9wU2NvcGVJbmRleF07IC8vIGFzc2VydCBpdCdzIHdp
dGhpbiBib3VuZHMKLSAgICAgICAgICAgICAgICBib3R0b21TY29wZSA9IG1fc2NvcGVDb250ZXh0
U3RhY2suYmVnaW4oKSArIGJvdHRvbVNjb3BlSW5kZXg7IC8vIGRvbid0IGFzc2VydCwgc2luY2Ug
aXQgdGhlIGluZGV4IG1pZ2h0IGJlIC0xLgorICAgICAgICAgICAgICAgIGJvdHRvbVNjb3BlID0g
bV9zY29wZUNvbnRleHRTdGFjay5kYXRhKCkgKyBib3R0b21TY29wZUluZGV4OyAvLyBkb24ndCBh
c3NlcnQsIHNpbmNlIGl0IHRoZSBpbmRleCBtaWdodCBiZSAtMS4KICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmIChmbGlwU3dpdGNoZXMpCiAgICAgICAgICAgICAgICAgbV9zd2l0Y2hDb250
ZXh0U3RhY2sgPSBzYXZlZFN3aXRjaENvbnRleHRTdGFjazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggMjllZGU1MmY1YzdlZGMzYWFi
NDgwNzE5MTliZmE3NzNmMmIxZTFhOC4uNzc5OTNkMDI4NDliNGYyYTk0YzYzYmE5ZDRmNjQ2OGRj
NWExY2QzNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKQEAgLTU5NjcsNyArNTk2Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRT
d2l0Y2hJbnRKdW1wKAogICAgIGFkZEJyYW5jaCgKICAgICAgICAgbV9qaXQuYnJhbmNoMzIoSklU
Q29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWUsIEltbTMyKHRhYmxlLmN0aU9mZnNldHMuc2l6
ZSgpKSksCiAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKLSAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW1QdHIodGFibGUuY3RpT2Zmc2V0cy5iZWdpbigpKSwgc2NyYXRjaCk7CisgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHRhYmxlLmN0aU9mZnNldHMuZGF0YSgpKSwgc2NyYXRj
aCk7CiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QmFzZUluZGV4KHNjcmF0Y2gsIHZh
bHVlLCBKSVRDb21waWxlcjo6dGltZXNQdHIoKSksIHNjcmF0Y2gpOwogICAgIG1faml0Lmp1bXAo
c2NyYXRjaCk7CiAgICAgZGF0YS0+ZGlkVXNlSnVtcFRhYmxlID0gdHJ1ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgKaW5kZXggZDNiZmY0Y2MxYzg4Nzgy
YjY2ZDIwYTA4OWI4ZGQ1YmQ5NzVmODlkZi4uOTU4NmFjOGUzYmMwY2ZhMTVlZjMwZmJmZDRiYzUy
OTNmOTQzMzYzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJy
ZXZpYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRp
b25zLmgKQEAgLTEzMyw3ICsxMzMsNyBAQCBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZFN0cmluZyhM
Q29udGV4dCBjb250ZXh0LCBjb25zdCBjaGFyKiBzdHJpbmcsIHVuc2lnbmVkIGxlbgogc3RhdGlj
IGlubGluZSBMVmFsdWUgbWRTdHJpbmcoTENvbnRleHQgY29udGV4dCwgY29uc3QgY2hhciogc3Ry
aW5nKSB7IHJldHVybiBtZFN0cmluZyhjb250ZXh0LCBzdHJpbmcsIHN0ZDo6c3RybGVuKHN0cmlu
ZykpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwgTFZh
bHVlKiBhcmdzLCB1bnNpZ25lZCBudW1BcmdzKSB7IHJldHVybiBsbHZtLT5NRE5vZGVJbkNvbnRl
eHQoY29udGV4dCwgYXJncywgbnVtQXJncyk7IH0KIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5
cGU+Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwgY29uc3Qg
VmVjdG9yVHlwZSYgdmVjdG9yKSB7IHJldHVybiBtZE5vZGUoY29udGV4dCwgY29uc3RfY2FzdDxM
VmFsdWUqPih2ZWN0b3IuYmVnaW4oKSksIHZlY3Rvci5zaXplKCkpOyB9CitzdGF0aWMgaW5saW5l
IExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9y
KSB7IHJldHVybiBtZE5vZGUoY29udGV4dCwgY29uc3RfY2FzdDxMVmFsdWUqPih2ZWN0b3IuZGF0
YSgpKSwgdmVjdG9yLnNpemUoKSk7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMQ29u
dGV4dCBjb250ZXh0KSB7IHJldHVybiBtZE5vZGUoY29udGV4dCwgMCwgMCk7IH0KIHN0YXRpYyBp
bmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0LCBMVmFsdWUgYXJnMSkgeyByZXR1
cm4gbWROb2RlKGNvbnRleHQsICZhcmcxLCAxKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgbWRO
b2RlKExDb250ZXh0IGNvbnRleHQsIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMikKQEAgLTMwMSw3
ICszMDEsNyBAQCBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRl
ciwgTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBMVmFsdWUqCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0
b3JUeXBlPgogaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVl
IGZ1bmN0aW9uLCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpCiB7Ci0gICAgcmV0dXJuIGJ1aWxk
Q2FsbChidWlsZGVyLCBmdW5jdGlvbiwgdmVjdG9yLmJlZ2luKCksIHZlY3Rvci5zaXplKCkpOwor
ICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIHZlY3Rvci5kYXRhKCksIHZl
Y3Rvci5zaXplKCkpOwogfQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVy
IGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50RGF0YS5jcHAKaW5kZXggNzc3Y2ZkZTA5M2EyZDEzZGY1ZmU1YzM2NmM5ODIyZjRhZTA4
NGZhZS4uNjZjMmU4MWQzMWMyMjRkNWRkOWQ4NzRlMGRkNjY1ODkxODU0OTUyMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKQEAgLTE2MSw3ICsxNjEsNyBAQCB2
b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKFZNJiB2bSkKICAgICBWZWN0b3I8aW50PiB0ZXN0
VmVjdG9yOwogICAgIHRlc3RWZWN0b3IucmVzaXplKDQyKTsKICAgICBBU1NFUlQoYml0d2lzZV9j
YXN0PHVpbnQzMl90Kj4oJnRlc3RWZWN0b3IpW3NpemVvZih2b2lkKikvc2l6ZW9mKHVpbnQzMl90
KSArIDFdID09IDQyKTsKLSAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGludCoqPigmdGVzdFZlY3Rv
cilbMF0gPT0gdGVzdFZlY3Rvci5iZWdpbigpKTsKKyAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGlu
dCoqPigmdGVzdFZlY3RvcilbMF0gPT0gdGVzdFZlY3Rvci5kYXRhKCkpOwogI2VuZGlmCiAKICAg
ICBBU1NFUlQoU3RyaW5nSW1wbDo6c19oYXNoRmxhZzhCaXRCdWZmZXIgPT0gOCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCmluZGV4IDJjNWExOWFlNmVlNjU4MDhi
N2Q3MWNhMzUwMzc1ODhkNTAwNjFiMzUuLmMzZDUwNTVmMjY5OTc0NTI5OTNkYzE0Njk4NzQwYWQ3
NTIxMzJjNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCkBA
IC0zNTIsNyArMzUyLDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib28KICAgICAgICAgICAgIC8v
IHByb3BlcnRpZXMsIHNvIHdlIGhhdmUgdG8gcGVyZm9ybSBkZWxldGlvbiB3aXRoIGNhdXRpb24s
IGlmIG5vdCB3ZSBjYW4KICAgICAgICAgICAgIC8vIGRlbGV0ZSB2YWx1ZXMgaW4gYW55IG9yZGVy
LgogICAgICAgICAgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpKSB7Ci0gICAgICAgICAgICAgICAg
cXNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLnNpemUoKSwgc2l6ZW9mKHVuc2lnbmVkKSwgY29tcGFy
ZUtleXNGb3JRU29ydCk7CisgICAgICAgICAgICAgICAgcXNvcnQoa2V5cy5kYXRhKCksIGtleXMu
c2l6ZSgpLCBzaXplb2YodW5zaWduZWQpLCBjb21wYXJlS2V5c0ZvclFTb3J0KTsKICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpID0ga2V5cy5zaXplKCk7CiAgICAgICAgICAgICAgICAgd2hpbGUg
KGkpIHsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBrZXlzWy0taV07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgKaW5kZXggODhk
NTdmM2RkNGU3OTc2OWQxZDA2YzNhODU5MTAxYjU1NWM2YTgzZi4uZGQzYzEyMWQwZWJiMTZlOGE1
MjQ2MWZhYWNkYmJiNGQ5ODdkNzJiMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9Qcm9maWxlVHJlZU5vZGUuaApAQCAtODYsNyArODYsNyBAQCBwcml2YXRlOgogICAgICAgICBW
ZWN0b3I8TWFwRW50cnkqPiBlbnRyaWVzOwogICAgICAgICBmb3IgKE1hcDo6aXRlcmF0b3IgaXQg
PSBtX2NoaWxkcmVuLT5iZWdpbigpOyBpdCAhPSBtX2NoaWxkcmVuLT5lbmQoKTsgKytpdCkKICAg
ICAgICAgICAgIGVudHJpZXMuYXBwZW5kKCYqaXQpOwotICAgICAgICBxc29ydChlbnRyaWVzLmJl
Z2luKCksIGVudHJpZXMuc2l6ZSgpLCBzaXplb2YoTWFwRW50cnkqKSwgY29tcGFyZUVudHJpZXMp
OworICAgICAgICBxc29ydChlbnRyaWVzLmRhdGEoKSwgZW50cmllcy5zaXplKCksIHNpemVvZihN
YXBFbnRyeSopLCBjb21wYXJlRW50cmllcyk7CiAKICAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRo
ZSBjaGlsZHJlbiBpbiBzYW1wbGUtZnJlcXVlbmN5IG9yZGVyLgogICAgICAgICBmb3IgKHNpemVf
dCBlID0gMDsgZSA8IGVudHJpZXMuc2l6ZSgpOyArK2UpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lh
cnIvWWFyckpJVC5jcHAKaW5kZXggMjIyOWRhNzY3OGExMWYyZjcyMWRhYjlkMmVjYjZkYzE4YTUy
Y2E2NS4uOTJmOWIxMzE1ODY3NGZkNDBhY2E3NmJiYWE4MDM1OWVhNjU4MzM5YSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKQEAgLTIyMyw3ICsyMjMsNyBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgIGlmIChjaGFy
Q2xhc3MtPm1fcmFuZ2VzLnNpemUoKSkgewogICAgICAgICAgICAgdW5zaWduZWQgbWF0Y2hJbmRl
eCA9IDA7CiAgICAgICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKLSAgICAgICAgICAgIG1hdGNo
Q2hhcmFjdGVyQ2xhc3NSYW5nZShjaGFyYWN0ZXIsIGZhaWx1cmVzLCBtYXRjaERlc3QsIGNoYXJD
bGFzcy0+bV9yYW5nZXMuYmVnaW4oKSwgY2hhckNsYXNzLT5tX3Jhbmdlcy5zaXplKCksICZtYXRj
aEluZGV4LCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5iZWdpbigpLCBjaGFyQ2xhc3MtPm1fbWF0Y2hl
cy5zaXplKCkpOworICAgICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzc1JhbmdlKGNoYXJhY3Rl
ciwgZmFpbHVyZXMsIG1hdGNoRGVzdCwgY2hhckNsYXNzLT5tX3Jhbmdlcy5kYXRhKCksIGNoYXJD
bGFzcy0+bV9yYW5nZXMuc2l6ZSgpLCAmbWF0Y2hJbmRleCwgY2hhckNsYXNzLT5tX21hdGNoZXMu
ZGF0YSgpLCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5zaXplKCkpOwogICAgICAgICAgICAgd2hpbGUg
KG1hdGNoSW5kZXggPCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5zaXplKCkpCiAgICAgICAgICAgICAg
ICAgbWF0Y2hEZXN0LmFwcGVuZChicmFuY2gzMihFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMigodW5z
aWduZWQgc2hvcnQpY2hhckNsYXNzLT5tX21hdGNoZXNbbWF0Y2hJbmRleCsrXSkpKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvaiBiL1NvdXJjZS9XVEYv
V1RGLnZjeHByb2ovV1RGLnZjeHByb2oKaW5kZXggZDExNjAyNWFiNGNkMDYxZWU5MDVlYzkxYTYz
ODY2ZGM4OGVkMzk5MS4uM2U1YjUzNmE1MmY5MGNlYzFmZmJhMzhkMGIxZjBjZDQ1ZjJkOWQxMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagorKysgYi9Tb3Vy
Y2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCkBAIC0yMjUsNiArMjI1LDcgQEAKICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxIYXNoVGFibGUuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHd0ZlxIYXNoVHJhaXRzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlx3dGZcSGV4TnVtYmVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZc
SW5kZXhlZEl0ZXJhdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSXRl
cmF0b3JBZGFwdG9ycy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEl0ZXJh
dG9yUmFuZ2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxMaXN0SGFzaFNl
dC5oIiAvPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvai5m
aWx0ZXJzIGIvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0ZXJzCmluZGV4
IGY2ZDZmOWRlNjcwYjg2ZTA3MGRmZjhlYTc2MDhkOGU4MDdjOWFmYWYuLmVlNDFhMDUxNmIzNmQx
MTAwNmY1ZmNhZjhlMWUwNmVjOWVhZDFiYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnZj
eHByb2ovV1RGLnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dU
Ri52Y3hwcm9qLmZpbHRlcnMKQEAgLTQ4Nyw2ICs0ODcsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cd3RmXEhleE51bWJlci5oIj4KICAgICAgIDxGaWx0ZXI+d3RmPC9GaWx0ZXI+CiAg
ICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSW5kZXhlZEl0
ZXJhdG9yLmgiPgorICAgICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxJdGVyYXRvckFkYXB0b3JzLmgiPgogICAg
ICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDIxZDFhMGY0MmE3ODc4MjVkMDQ1ODEwNmZj
ZDZlZjgyY2VhOWUyMGMuLjRjMmVlMWVkYTIxNGExZjA0NGMzMTRhZDU2MWQzZWU3NmNhY2VlOWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTEzLDYgKzEx
Myw3IEBACiAJCUE3NDg3NDUyMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NDg3NDRG
MTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCAqLzsgfTsKIAkJQTc0ODc0
NTMxN0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NDg3NDUwMTdBMEJEQUUwMEZBMDRDQiAv
KiBTaXhDaGFyYWN0ZXJIYXNoLmggKi87IH07CiAJCUE3NDg3NDU0MTdBMEJEQUUwMEZBMDRDQiAv
KiBTdHJpbmdIYXNoRHVtcENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3NDg3NDUxMTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJpbmdIYXNoRHVt
cENvbnRleHQuaCAqLzsgfTsKKwkJQTdEQzJGMDQxQTA5QTIyRDAwNzJGNEUzIC8qIEluZGV4ZWRJ
dGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTdEQzJGMDMxQTA5OURFMzAwNzJGNEUzIC8qIEluZGV4ZWRJdGVyYXRvci5oICovOyB9OwogCQlB
ODc2REJEODE1MTgxNkU1MDBEQURCOTUgLyogUGxhdGZvcm0uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzZEQkQ3MTUxODE2RTUwMERBREI5NSAvKiBQ
bGF0Zm9ybS5oICovOyB9OwogCQlBOEE0NzM4NTE1MUE4MjVCMDA0MTIzRkYgLyogQVNDSUlDVHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcy
NUExNTFBODI1QTAwNDEyM0ZGIC8qIEFTQ0lJQ1R5cGUuaCAqLzsgfTsKIAkJQThBNDczODYxNTFB
ODI1QjAwNDEyM0ZGIC8qIEFzc2VydGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcyNUIxNTFBODI1QTAwNDEyM0ZGIC8qIEFzc2VydGlv
bnMuY3BwICovOyB9OwpAQCAtNDA3LDYgKzQwOCw3IEBACiAJCUE3NDg3NDRGMTdBMEJEQUUwMEZB
MDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNpeENoYXJhY3Rlckhhc2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBNzQ4NzQ1MDE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaXhDaGFyYWN0ZXJIYXNoLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NDg3NDUxMTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJpbmdI
YXNoRHVtcENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5n
SGFzaER1bXBDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3REMyRjAz
MUEwOTlERTMwMDcyRjRFMyAvKiBJbmRleGVkSXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5k
ZXhlZEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4NzZEQkQ3MTUx
ODE2RTUwMERBREI5NSAvKiBQbGF0Zm9ybS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQbGF0Zm9ybS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzI1QTE1
MUE4MjVBMDA0MTIzRkYgLyogQVNDSUlDVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBU0NJSUNUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3
MjVCMTUxQTgyNUEwMDQxMjNGRiAvKiBBc3NlcnRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEFzc2VydGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtODk2LDYgKzg5OCw3IEBACiAJCQkJRTRBMEFEMzgxQTk2MjQ1NTAwNTM2REY2IC8q
IFdvcmtRdWV1ZS5oICovLAogCQkJCUE4QTQ3MzdBMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJl
YWREYXRhLmNwcCAqLywKIAkJCQlBOEE0NzM3QjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFk
RGF0YS5oICovLAorCQkJCUE3REMyRjAzMUEwOTlERTMwMDcyRjRFMyAvKiBJbmRleGVkSXRlcmF0
b3IuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gd3RmOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKQEAgLTEwODIsNiArMTA4NSw3IEBACiAJCQkJQThBNDczQUQxNTFBODI1QjAwNDEyM0ZGIC8q
IGNhY2hlZC1wb3dlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDVFMTUxQTgyNUIwMDQx
MjNGRiAvKiBDaGFyYWN0ZXJOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOTQxNTFB
ODI1QjAwNDEyM0ZGIC8qIENoZWNrZWRBcml0aG1ldGljLmggaW4gSGVhZGVycyAqLywKKwkJCQlB
N0RDMkYwNDFBMDlBMjJEMDA3MkY0RTMgLyogSW5kZXhlZEl0ZXJhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzM5NTE1MUE4MjVCMDA0MTIzRkYgLyogQ2hlY2tlZEJvb2xlYW4uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDVGMTUxQTgyNUIwMDQxMjNGRiAvKiBDb2xsYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZDNEVERTYxNjk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRl
ci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9JbmRleGVkSXRl
cmF0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL0luZGV4ZWRJdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0
MWM4OGM5OTgwZmQzZTE2ODZhM2Q3OTdkOThjZjc2YzBiMGVhNWQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9JbmRleGVkSXRlcmF0b3IuaApAQCAtMCwwICsxLDM2NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV1RGX0lu
ZGV4ZWRJdGVyYXRvcl9oCisjZGVmaW5lIFdURl9JbmRleGVkSXRlcmF0b3JfaAorCituYW1lc3Bh
Y2UgV1RGIHsKKworI2RlZmluZSBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGNoZWNrKSBkbyB7
XAorICAgIGlmICghKGNoZWNrKSlcCisgICAgICAgIE92ZXJmbG93SGFuZGxlcjo6b3ZlcmZsb3dl
ZCgpO1wKK30gd2hpbGUgKDApCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWZWN0b3JUeXBlLCB0eXBl
bmFtZSBULCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIgPSBDcmFzaE9uT3ZlcmZsb3c+IHN0cnVj
dCBJbmRleGVkSXRlcmF0b3IgeworICAgIHR5cGVkZWYgc3RydWN0IEluZGV4ZWRJdGVyYXRvcjxj
b25zdCBWZWN0b3JUeXBlLCBjb25zdCBULCBPdmVyZmxvd0hhbmRsZXI+IGNvbnN0X2l0ZXJhdG9y
OworCisgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm
ZXJlbmNlX3R5cGU7CisgICAgdHlwZWRlZiBWYWx1ZVR5cGUgdmFsdWVfdHlwZTsKKyAgICB0eXBl
ZGVmIFZhbHVlVHlwZSogcG9pbnRlcjsKKyAgICB0eXBlZGVmIFZhbHVlVHlwZSYgcmVmZXJlbmNl
OworICAgIHR5cGVkZWYgc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j
YXRlZ29yeTsKKworICAgIEluZGV4ZWRJdGVyYXRvcigpCisgICAgICAgIDogbV92ZWN0b3IobnVs
bHB0cikKKyAgICAgICAgLCBtX3Bvc2l0aW9uKDApCisgICAgeworICAgIH0KKworICAgIEluZGV4
ZWRJdGVyYXRvcihzdGQ6Om51bGxwdHJfdCkKKyAgICAgICAgOiBtX3ZlY3RvcihudWxscHRyKQor
ICAgICAgICAsIG1fcG9zaXRpb24oMCkKKyAgICB7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJh
dG9yKFZlY3RvclR5cGUmIHZlY3RvciwgVmFsdWVUeXBlKiBwb3NpdGlvbikKKyAgICAgICAgOiBt
X3ZlY3RvcigmdmVjdG9yKQorICAgICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24gLSB2ZWN0b3Iu
ZGF0YSgpKQorICAgIHsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3IoY29uc3QgSW5kZXhl
ZEl0ZXJhdG9yJiBvdGhlcikKKyAgICAgICAgOiBtX3ZlY3RvcihvdGhlci5tX3ZlY3RvcikKKyAg
ICAgICAgLCBtX3Bvc2l0aW9uKG90aGVyLm1fcG9zaXRpb24pCisgICAgeworICAgIH0KKworICAg
IFZhbHVlVHlwZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZtX3ZlY3Rvci0+YXQobV9w
b3NpdGlvbik7IH0KKyAgICBWYWx1ZVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1f
dmVjdG9yLT5hdChtX3Bvc2l0aW9uKTsgfQorICAgIFZhbHVlVHlwZSogZ2V0KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmICghbV92ZWN0b3IpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uIDw9IG1fdmVjdG9y
LT5zaXplKCkpOworICAgICAgICByZXR1cm4gbV92ZWN0b3ItPmRhdGEoKSArIG1fcG9zaXRpb247
CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICB7CisgICAg
ICAgIG1fcG9zaXRpb24rKzsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIElu
ZGV4ZWRJdGVyYXRvciBvcGVyYXRvcisrKGludCkKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVy
YXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICBtX3Bvc2l0aW9uKys7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvci0tKCkKKyAg
ICB7CisgICAgICAgIG1fcG9zaXRpb24tLTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0K
KworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0tKGludCkKKyAgICB7CisgICAgICAgIElu
ZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICBtX3Bvc2l0aW9uLS07CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy8gVGhpcyBjb252ZXJzaW9uIG9wZXJh
dG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGJvb2wgYnV0IG5vdCB0byBvdGhlciBp
bnRlZ2VyIHR5cGVzLgorICAgIHR5cGVkZWYgc2l6ZV90IChJbmRleGVkSXRlcmF0b3I6OipVbnNw
ZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV92ZWN0b3IgPyAmSW5kZXhlZEl0ZXJhdG9yOjptX3Bvc2l0aW9uIDogbnVs
bHB0cjsgfQorCisjaWYgX19TSVpFT0ZfU0laRV9UX18gIT0gX19TSVpFT0ZfSU5UX18gfHwgUExB
VEZPUk0oQ09DT0EpCisjZGVmaW5lIF9VTlNJR05FRF9JZl9ESUZGRVJFTlQobWFjcm8pIG1hY3Jv
KHVuc2lnbmVkKQorI2Vsc2UKKyNkZWZpbmUgX1VOU0lHTkVEX0lmX0RJRkZFUkVOVChtYWNybykK
KyNlbmRpZgorCisjZGVmaW5lIEZPUl9FQUNIX0lOVEVHRVJfVFlQRShtYWNybykgXAorICAgIG1h
Y3JvKHNpemVfdCkgXAorICAgIG1hY3JvKGludDMyX3QpIFwKKyAgICBtYWNybyhsb25nKSBcCisg
ICAgbWFjcm8obG9uZyBsb25nKSBcCisgICAgbWFjcm8odW5zaWduZWQgbG9uZyBsb25nKSBcCisg
ICAgX1VOU0lHTkVEX0lmX0RJRkZFUkVOVChtYWNybykKKworI2RlZmluZSBNT0RJRklFUl9PUFMo
dHlwZSkgXAorICAgIEluZGV4ZWRJdGVyYXRvciYgb3BlcmF0b3IrPSh0eXBlIGluY3JlbWVudCkg
XAorICAgIHsgXAorICAgICAgICBtX3Bvc2l0aW9uICs9IGluY3JlbWVudDsgXAorICAgICAgICBy
ZXR1cm4gKnRoaXM7IFwKKyAgICB9IFwKK1wKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJhdG9y
LT0odHlwZSBkZWNyZW1lbnQpIFwKKyAgICB7IFwKKyAgICAgICAgbV9wb3NpdGlvbiAtPSBkZWNy
ZW1lbnQ7IFwKKyAgICAgICAgcmV0dXJuICp0aGlzOyBcCisgICAgfQorCisgICAgRk9SX0VBQ0hf
SU5URUdFUl9UWVBFKE1PRElGSUVSX09QUykKKworI3VuZGVmIE1PRElGSUVSX09QUworCisjZGVm
aW5lIEFSSVRITUVUSUNfT1BTKHR5cGUpIFwKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3Ir
KHR5cGUgaW5jcmVtZW50KSBjb25zdCBcCisgICAgeyBcCisgICAgICAgIEluZGV4ZWRJdGVyYXRv
ciByZXN1bHQoKnRoaXMpOyBcCisgICAgICAgIHJlc3VsdC5tX3Bvc2l0aW9uICs9IGluY3JlbWVu
dDsgXAorICAgICAgICByZXR1cm4gcmVzdWx0OyBcCisgICAgfSBcCitcCisgICAgSW5kZXhlZEl0
ZXJhdG9yIG9wZXJhdG9yLSh0eXBlIGRlY3JlbWVudCkgY29uc3QgXAorICAgIHsgXAorICAgICAg
ICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsgXAorICAgICAgICByZXN1bHQubV9wb3Np
dGlvbiAtPSBkZWNyZW1lbnQ7IFwKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgIH0KKwor
CisgICAgRk9SX0VBQ0hfSU5URUdFUl9UWVBFKEFSSVRITUVUSUNfT1BTKQorCisjdW5kZWYgQVJJ
VEhNRVRJQ19PUFMKKworICAgIHB0cmRpZmZfdCBvcGVyYXRvci0oY29uc3QgY29uc3RfaXRlcmF0
b3ImIHJpZ2h0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcG9zaXRpb24gLSByaWdo
dC5tX3Bvc2l0aW9uOworICAgIH0KKworICAgIHB0cmRpZmZfdCBvcGVyYXRvci0oY29uc3QgVmFs
dWVUeXBlKiByaWdodCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBnZXQoKSAtIHJpZ2h0
OworICAgIH0KKworICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IEluZGV4ZWRJdGVyYXRvciYgb3Ro
ZXIpCisgICAgeworICAgICAgICBtX3ZlY3RvciA9IG90aGVyLm1fdmVjdG9yOworICAgICAgICBt
X3Bvc2l0aW9uID0gb3RoZXIubV9wb3NpdGlvbjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIHVuc2FmZUdldCgpID09IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gdW5zYWZlR2V0KCkgIT0gb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPT0gb3RoZXI7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gdW5zYWZlR2V0KCkgIT0gb3RoZXI7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgVmFsdWVUeXBlKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1bnNh
ZmVHZXQoKSA8IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBWYWx1
ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpIDw9
IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGNvbnN0X2l0ZXJhdG9y
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA8IG90aGVy
LnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBjb25zdF9p
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkg
PD0gb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3Qg
SW5kZXhlZEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1bnNh
ZmVHZXQoKSA+IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+
PShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gdW5zYWZlR2V0KCkgPj0gb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvcj4oY29uc3QgVmFsdWVUeXBlKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiB1bnNhZmVHZXQoKSA+IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+PShj
b25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuc2Fm
ZUdldCgpID49IG90aGVyOworICAgIH0KKworICAgIG9wZXJhdG9yIGNvbnN0X2l0ZXJhdG9yKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fdmVjdG9yID0gbV92ZWN0b3I7CisgICAgICAgIHJlc3VsdC5tX3Bvc2l0aW9uID0gbV9w
b3NpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBWZWN0b3JUeXBl
KiBtX3ZlY3RvcjsKKyAgICBzaXplX3QgbV9wb3NpdGlvbjsKKworICAgIFZhbHVlVHlwZSogdW5z
YWZlR2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV92ZWN0b3IpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGdldCgpOworICAgIH0KK307CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4KK2lubGluZSB0eXBlbmFtZSBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBP
dmVyZmxvd0hhbmRsZXI+OjpWYWx1ZVR5cGUqIGdldFB0cihJbmRleGVkSXRlcmF0b3I8VCwgVmFs
dWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+IHApCit7CisgICAgcmV0dXJuIHAuZ2V0KCk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4KK2lubGluZSBwdHJkaWZmX3Qgb3BlcmF0b3ItKGNvbnN0IFZhbHVlVHlwZSog
bGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVy
PiYgcmlnaHQpCit7CisgICAgcmV0dXJuIGxlZnQgLSByaWdodC5nZXQoKTsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyPgoraW5saW5lIHB0cmRpZmZfdCBvcGVyYXRvci0oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJ
bmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sK
KyAgICByZXR1cm4gbGVmdCAtIHJpZ2h0LmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUg
cHRyZGlmZl90IG9wZXJhdG9yLShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJ
dGVyYXRvcjxjb25zdCBULCBjb25zdCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0
KQoreworICAgIHJldHVybiBsZWZ0IC0gcmlnaHQuZ2V0KCk7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lu
bGluZSBib29sIG9wZXJhdG9yPT0oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0
b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4g
cmlnaHQgPT0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVl
VHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUs
IE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA9PSBsZWZ0Owor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFZhbHVlVHlwZSogbGVmdCwg
Y29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmln
aHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ICE9IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRl
cmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1
cm4gcmlnaHQgIT0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZh
bHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I8
PShWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92
ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA+PSBsZWZ0OworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFZhbHVlVHlwZSogbGVm
dCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYg
cmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID49IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lu
bGluZSBib29sIG9wZXJhdG9yPj0oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0
b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4g
cmlnaHQgPD0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVl
VHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I+PShj
b25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUs
IE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA8PSBsZWZ0Owor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoVmFsdWVUeXBlKiBsZWZ0LCBj
b25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdo
dCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPiBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0
b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4g
cmlnaHQgPiBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVU
eXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oVmFs
dWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxv
d0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPCBsZWZ0OworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25z
dCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkK
K3sKKyAgICByZXR1cm4gcmlnaHQgPCBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmVj
dG9yVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiBzdHJ1Y3QgSW5kZXhlZEl0ZXJhdG9y
U2VsZWN0b3IgeworICAgIHR5cGVkZWYgdHlwZW5hbWUgVmVjdG9yVHlwZTo6VmFsdWVUeXBlIFZh
bHVlVHlwZTsKKyAgICB0eXBlZGVmIEluZGV4ZWRJdGVyYXRvcjxWZWN0b3JUeXBlLCBWYWx1ZVR5
cGUsIE92ZXJmbG93SGFuZGxlcj4gaXRlcmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgc3RhdGljIGl0ZXJhdG9y
IG1ha2VJdGVyYXRvcihWZWN0b3JUeXBlJiB2ZWN0b3IsIFZhbHVlVHlwZSogcCkgeyByZXR1cm4g
aXRlcmF0b3IodmVjdG9yLCBwKTsgfQorICAgIHN0YXRpYyBjb25zdF9pdGVyYXRvciBtYWtlQ29u
c3RJdGVyYXRvcihjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IsIGNvbnN0IFZhbHVlVHlwZSogcCkg
eyByZXR1cm4gY29uc3RfaXRlcmF0b3IodmVjdG9yLCBwKTsgfQorfTsKKworI3VuZGVmIElOREVY
RURfSVRFUkFUT1JfT1ZFUkZMT1cKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oIGIvU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5
LmgKaW5kZXggNzk4NjlhOWVkNGJlYWMyNDYxMjNmNzg3YjY3MTk0NDI2ZTgwMzc5ZC4uY2RmYmY4
MTg5NTIwNWJkYWFhNzI2MTA1ZTY3MzMyZjcwYzMxY2FkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvUmVmQ291bnRlZEFycmF5LmgKKysrIGIvU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFy
cmF5LmgKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogICAgICAgICBIZWFkZXI6OmZyb21QYXls
b2FkKG1fZGF0YSktPnJlZkNvdW50ID0gMTsKICAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZCht
X2RhdGEpLT5sZW5ndGggPSBvdGhlci5zaXplKCk7CiAgICAgICAgIEFTU0VSVChIZWFkZXI6OmZy
b21QYXlsb2FkKG1fZGF0YSktPmxlbmd0aCA9PSBvdGhlci5zaXplKCkpOwotICAgICAgICBWZWN0
b3JUeXBlT3BlcmF0aW9uczxUPjo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSwgb3Ro
ZXIuZW5kKCksIG1fZGF0YSk7CisgICAgICAgIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+Ojp1bmlu
aXRpYWxpemVkQ29weShnZXRQdHIob3RoZXIuYmVnaW4oKSksIGdldFB0cihvdGhlci5lbmQoKSks
IG1fZGF0YSk7CiAgICAgfQogICAgIAogICAgIFJlZkNvdW50ZWRBcnJheSYgb3BlcmF0b3I9KGNv
bnN0IFJlZkNvdW50ZWRBcnJheSYgb3RoZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9W
ZWN0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCmluZGV4IDE4OGQ3NmRhZDc4ZjNjZmRl
MjNiNWY0Y2RiNzVkZGE2NmMyMzFkMzMuLjk2NmMwOWFjMDgyZDFkZTA3ZGZlOWM3NGVmYmQ0ZDhi
ZDJiZWIwOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1ZlY3Rvci5oCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4K
ICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvSW5kZXhlZEl0
ZXJhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTU4NSwxNCArNTg3
LDE3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IDAsIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlciA9IENyYXNoCiBjbGFzcyBWZWN0b3IgOiBwcml2YXRlIFZl
Y3RvckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHJpdmF0ZToKKwogICAgIHR5cGVkZWYgVmVjdG9yQnVmZmVyPFQsIGlubGluZUNhcGFj
aXR5PiBCYXNlOwogICAgIHR5cGVkZWYgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD4gVHlwZU9wZXJh
dGlvbnM7CisgICAgdHlwZWRlZiBJbmRleGVkSXRlcmF0b3JTZWxlY3RvcjxWZWN0b3IsIE92ZXJm
bG93SGFuZGxlcj4gSXRlcmF0b3JTZWxlY3RvcjsKIAogcHVibGljOgogICAgIHR5cGVkZWYgVCBW
YWx1ZVR5cGU7CiAKLSAgICB0eXBlZGVmIFQqIGl0ZXJhdG9yOwotICAgIHR5cGVkZWYgY29uc3Qg
VCogY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBJdGVyYXRvclNlbGVjdG9y
OjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEl0ZXJhdG9yU2VsZWN0
b3I6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworCiAgICAgdHlwZWRlZiBzdGQ6OnJl
dmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CiAgICAgdHlwZWRlZiBz
dGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0
b3I7CiAKQEAgLTYwNyw3ICs2MTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGFzYW5TZXRJbml0aWFs
QnVmZmVyU2l6ZVRvKHNpemUpOwogCiAgICAgICAgIGlmIChiZWdpbigpKQotICAgICAgICAgICAg
VHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoYmVnaW4oKSwgZW5kKCkpOworICAgICAgICAgICAg
VHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoZ2V0UHRyKGJlZ2luKCkpLCBnZXRQdHIoZW5kKCkp
KTsKICAgICB9CiAKICAgICBWZWN0b3Ioc2l6ZV90IHNpemUsIGNvbnN0IFQmIHZhbCkKQEAgLTYx
Niw3ICs2MjEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGFzYW5TZXRJbml0aWFsQnVmZmVyU2l6ZVRv
KHNpemUpOwogCiAgICAgICAgIGlmIChiZWdpbigpKQotICAgICAgICAgICAgVHlwZU9wZXJhdGlv
bnM6OnVuaW5pdGlhbGl6ZWRGaWxsKGJlZ2luKCksIGVuZCgpLCB2YWwpOworICAgICAgICAgICAg
VHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRGaWxsKGdldFB0cihiZWdpbigpKSwgZ2V0UHRy
KGVuZCgpKSwgdmFsKTsKICAgICB9CiAKICAgICBWZWN0b3Ioc3RkOjppbml0aWFsaXplcl9saXN0
PFQ+IGluaXRpYWxpemVyTGlzdCkKQEAgLTY4NSwxMCArNjkwLDEwIEBAIHB1YmxpYzoKICAgICBj
b25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gQmFzZTo6YnVmZmVyKCk7IH0KICAgICBzdGF0
aWMgcHRyZGlmZl90IGRhdGFNZW1vcnlPZmZzZXQoKSB7IHJldHVybiBCYXNlOjpidWZmZXJNZW1v
cnlPZmZzZXQoKTsgfQogCi0gICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBkYXRhKCk7IH0K
LSAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBiZWdpbigpICsgbV9zaXplOyB9Ci0gICAgY29u
c3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBkYXRhKCk7IH0KLSAgICBjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBiZWdpbigpICsgbV9zaXplOyB9CisgICAgaXRl
cmF0b3IgYmVnaW4oKSB7IHJldHVybiBJdGVyYXRvclNlbGVjdG9yOjptYWtlSXRlcmF0b3IoKnRo
aXMsIGRhdGEoKSk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBiZWdpbigpICsgc2l6
ZSgpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBJdGVyYXRv
clNlbGVjdG9yOjptYWtlQ29uc3RJdGVyYXRvcigqdGhpcywgZGF0YSgpKTsgfQorICAgIGNvbnN0
X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgKyBzaXplKCk7IH0KIAogICAg
IHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQo
KSk7IH0KICAgICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJh
dG9yKGJlZ2luKCkpOyB9CkBAIC03MjksNiArNzM0LDcgQEAgcHVibGljOgogICAgIHZvaWQgdW5j
aGVja2VkQXBwZW5kKFZhbHVlVHlwZSYmIHZhbHVlKSB7IHVuY2hlY2tlZEFwcGVuZDxWYWx1ZVR5
cGU+KHN0ZDo6Zm9yd2FyZDxWYWx1ZVR5cGU+KHZhbHVlKSk7IH0KICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiB2b2lkIHVuY2hlY2tlZEFwcGVuZChVJiYpOwogCisgICAgdm9pZCBhcHBlbmQoY29u
c3RfaXRlcmF0b3IsIHNpemVfdCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCBhcHBl
bmQoY29uc3QgVSosIHNpemVfdCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IG90
aGVyQ2FwYWNpdHk+IHZvaWQgYXBwZW5kVmVjdG9yKGNvbnN0IFZlY3RvcjxVLCBvdGhlckNhcGFj
aXR5PiYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGJvb2wgdHJ5QXBwZW5kKGNvbnN0IFUq
LCBzaXplX3QpOwpAQCAtODE1LDcgKzgyMSw3IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OlZlY3Rvcihjb25zdCBWZWN0b3ImIG90CiAg
ICAgYXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8ob3RoZXIuc2l6ZSgpKTsKIAogICAgIGlmIChi
ZWdpbigpKQotICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXIu
YmVnaW4oKSwgb3RoZXIuZW5kKCksIGJlZ2luKCkpOworICAgICAgICBUeXBlT3BlcmF0aW9uczo6
dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuZW5k
KCkpLCBnZXRQdHIoYmVnaW4oKSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFj
aXR5PgpAQCAtODI2LDcgKzgzMiw3IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OlZlY3Rvcihjb25zdCBWZWN0b3I8VCwKICAgICBhc2Fu
U2V0SW5pdGlhbEJ1ZmZlclNpemVUbyhvdGhlci5zaXplKCkpOwogCiAgICAgaWYgKGJlZ2luKCkp
Ci0gICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigp
LCBvdGhlci5lbmQoKSwgYmVnaW4oKSk7CisgICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRp
YWxpemVkQ29weShnZXRQdHIob3RoZXIuYmVnaW4oKSksIGdldFB0cihvdGhlci5lbmQoKSksIGdl
dFB0cihiZWdpbigpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CkBA
IC04NDUsOCArODUxLDggQEAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXIsIG1pbkNhcGFjaXR5PiYgVmVjdG9yPFQsIGlubGluZUNhcGFjaXQKIAogICAgIGFzYW5CdWZm
ZXJTaXplV2lsbENoYW5nZVRvKG90aGVyLnNpemUoKSk7CiAKLSAgICBzdGQ6OmNvcHkob3RoZXIu
YmVnaW4oKSwgb3RoZXIuYmVnaW4oKSArIHNpemUoKSwgYmVnaW4oKSk7Ci0gICAgVHlwZU9wZXJh
dGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCkgKyBzaXplKCksIG90aGVyLmVu
ZCgpLCBlbmQoKSk7CisgICAgc3RkOjpjb3B5KGdldFB0cihvdGhlci5iZWdpbigpKSwgZ2V0UHRy
KG90aGVyLmJlZ2luKCkgKyBzaXplKCkpLCBnZXRQdHIoYmVnaW4oKSkpOworICAgIFR5cGVPcGVy
YXRpb25zOjp1bmluaXRpYWxpemVkQ29weShnZXRQdHIob3RoZXIuYmVnaW4oKSArIHNpemUoKSks
IGdldFB0cihvdGhlci5lbmQoKSksIGdldFB0cihlbmQoKSkpOwogICAgIG1fc2l6ZSA9IG90aGVy
LnNpemUoKTsKIAogICAgIHJldHVybiAqdGhpczsKQEAgLTg3Myw4ICs4NzksOCBAQCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdAogICAgIAogICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG90
aGVyLnNpemUoKSk7CiAKLSAgICBzdGQ6OmNvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuYmVnaW4o
KSArIHNpemUoKSwgYmVnaW4oKSk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRD
b3B5KG90aGVyLmJlZ2luKCkgKyBzaXplKCksIG90aGVyLmVuZCgpLCBlbmQoKSk7CisgICAgc3Rk
Ojpjb3B5KGdldFB0cihvdGhlci5iZWdpbigpKSwgZ2V0UHRyKG90aGVyLmJlZ2luKCkgKyBzaXpl
KCkpLCBnZXRQdHIoYmVnaW4oKSkpOworICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVk
Q29weShnZXRQdHIob3RoZXIuYmVnaW4oKSArIHNpemUoKSksIGdldFB0cihvdGhlci5lbmQoKSks
IGdldFB0cihlbmQoKSkpOwogICAgIG1fc2l6ZSA9IG90aGVyLnNpemUoKTsKIAogICAgIHJldHVy
biAqdGhpczsKQEAgLTkzNiw4ICs5NDIsOCBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmZpbGwoY29uc3QgVCYgdmFsLAogCiAg
ICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obmV3U2l6ZSk7CiAKLSAgICBzdGQ6OmZpbGwo
YmVnaW4oKSwgZW5kKCksIHZhbCk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRG
aWxsKGVuZCgpLCBiZWdpbigpICsgbmV3U2l6ZSwgdmFsKTsKKyAgICBzdGQ6OmZpbGwoZ2V0UHRy
KGJlZ2luKCkpLCBnZXRQdHIoZW5kKCkpLCB2YWwpOworICAgIFR5cGVPcGVyYXRpb25zOjp1bmlu
aXRpYWxpemVkRmlsbChnZXRQdHIoZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkgKyBuZXdTaXplLCB2
YWwpOwogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiB9CiAKQEAgLTk1OCwxMyArOTY0LDEzIEBAIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5
Pjo6ZXhwYW5kQ2FwYWNpdHkoc2l6CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5Pgog
VCogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5
Pjo6ZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBUKiBwdHIpCiB7Ci0gICAg
aWYgKHB0ciA8IGJlZ2luKCkgfHwgcHRyID49IGVuZCgpKSB7CisgICAgaWYgKHB0ciA8IGdldFB0
cihiZWdpbigpKSB8fCBwdHIgPj0gZ2V0UHRyKGVuZCgpKSkgewogICAgICAgICBleHBhbmRDYXBh
Y2l0eShuZXdNaW5DYXBhY2l0eSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogICAgIHNp
emVfdCBpbmRleCA9IHB0ciAtIGJlZ2luKCk7CiAgICAgZXhwYW5kQ2FwYWNpdHkobmV3TWluQ2Fw
YWNpdHkpOwotICAgIHJldHVybiBiZWdpbigpICsgaW5kZXg7CisgICAgcmV0dXJuIGdldFB0cihi
ZWdpbigpICsgaW5kZXgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgpA
QCAtOTc2LDE1ICs5ODIsMTUgQEAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojp0cnlFeHBhbmRDYXBhY2l0eSgKIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
LCBzaXplX3QgbWluQ2FwYWNpdHk+CiBjb25zdCBUKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojp0cnlFeHBhbmRDYXBhY2l0eShzaXplX3Qg
bmV3TWluQ2FwYWNpdHksIGNvbnN0IFQqIHB0cikKIHsKLSAgICBpZiAocHRyIDwgYmVnaW4oKSB8
fCBwdHIgPj0gZW5kKCkpIHsKKyAgICBpZiAocHRyIDwgZ2V0UHRyKGJlZ2luKCkpIHx8IHB0ciA+
PSBnZXRQdHIoZW5kKCkpKSB7CiAgICAgICAgIGlmICghdHJ5RXhwYW5kQ2FwYWNpdHkobmV3TWlu
Q2FwYWNpdHkpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBwdHI7CiAg
ICAgfQotICAgIHNpemVfdCBpbmRleCA9IHB0ciAtIGJlZ2luKCk7CisgICAgc2l6ZV90IGluZGV4
ID0gKHB0ciAtIGJlZ2luKCkpOwogICAgIGlmICghdHJ5RXhwYW5kQ2FwYWNpdHkobmV3TWluQ2Fw
YWNpdHkpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gYmVnaW4oKSArIGluZGV4Owor
ICAgIHJldHVybiBnZXRQdHIoYmVnaW4oKSArIGluZGV4KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNp
emVfdCBtaW5DYXBhY2l0eT4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KQEAgLTk5OCwxNCArMTAwNCwx
NCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbgogaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6cmVzaXplKHNpemVfdCBz
aXplKQogewogICAgIGlmIChzaXplIDw9IG1fc2l6ZSkgewotICAgICAgICBUeXBlT3BlcmF0aW9u
czo6ZGVzdHJ1Y3QoYmVnaW4oKSArIHNpemUsIGVuZCgpKTsKKyAgICAgICAgVHlwZU9wZXJhdGlv
bnM6OmRlc3RydWN0KGdldFB0cihiZWdpbigpICsgc2l6ZSksIGdldFB0cihlbmQoKSkpOwogICAg
ICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhzaXplKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgICAgICBleHBhbmRDYXBhY2l0eShz
aXplKTsKICAgICAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8oc2l6ZSk7CiAgICAgICAg
IGlmIChiZWdpbigpKQotICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoZW5k
KCksIGJlZ2luKCkgKyBzaXplKTsKKyAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0aWFs
aXplKGdldFB0cihlbmQoKSksIGdldFB0cihiZWdpbigpKSArIHNpemUpOwogICAgIH0KICAgICAK
ICAgICBtX3NpemUgPSBzaXplOwpAQCAtMTAyMiw3ICsxMDI4LDcgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNp
emVfdCBtaW4KIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIs
IG1pbkNhcGFjaXR5Pjo6c2hyaW5rKHNpemVfdCBzaXplKQogewogICAgIEFTU0VSVChzaXplIDw9
IG1fc2l6ZSk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0KGJlZ2luKCkgKyBzaXplLCBl
bmQoKSk7CisgICAgVHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0KGdldFB0cihiZWdpbigpICsgc2l6
ZSksIGdldFB0cihlbmQoKSkpOwogICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKHNpemUp
OwogICAgIG1fc2l6ZSA9IHNpemU7CiB9CkBAIC0xMDM1LDcgKzEwNDEsNyBAQCB2b2lkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46Omdyb3co
c2l6ZV90IHNpemUpCiAgICAgICAgIGV4cGFuZENhcGFjaXR5KHNpemUpOwogICAgIGFzYW5CdWZm
ZXJTaXplV2lsbENoYW5nZVRvKHNpemUpOwogICAgIGlmIChiZWdpbigpKQotICAgICAgICBUeXBl
T3BlcmF0aW9uczo6aW5pdGlhbGl6ZShlbmQoKSwgYmVnaW4oKSArIHNpemUpOworICAgICAgICBU
eXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShnZXRQdHIoZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkg
KyBzaXplKTsKICAgICBtX3NpemUgPSBzaXplOwogfQogCkBAIC0xMDg2LDggKzEwOTIsOCBAQCB2
b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eT46OnJlc2VydmVDYXBhY2l0eShzaQogewogICAgIGlmIChuZXdDYXBhY2l0eSA8PSBjYXBhY2l0
eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgVCogb2xkQnVmZmVyID0gYmVnaW4oKTsKLSAgICBU
KiBvbGRFbmQgPSBlbmQoKTsKKyAgICBUKiBvbGRCdWZmZXIgPSBnZXRQdHIoYmVnaW4oKSk7Cisg
ICAgVCogb2xkRW5kID0gZ2V0UHRyKGVuZCgpKTsKIAogICAgIGFzYW5TZXRCdWZmZXJTaXplVG9G
dWxsQ2FwYWNpdHkoKTsKIApAQCAtMTA5Niw3ICsxMTAyLDcgQEAgdm9pZCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZXNlcnZlQ2FwYWNp
dHkoc2kKIAogICAgIGFzYW5TZXRJbml0aWFsQnVmZmVyU2l6ZVRvKHNpemUoKSk7CiAKLSAgICBU
eXBlT3BlcmF0aW9uczo6bW92ZShvbGRCdWZmZXIsIG9sZEVuZCwgYmVnaW4oKSk7CisgICAgVHlw
ZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGdldFB0cihiZWdpbigpKSk7CiAg
ICAgQmFzZTo6ZGVhbGxvY2F0ZUJ1ZmZlcihvbGRCdWZmZXIpOwogfQogCkBAIC0xMTA1LDggKzEx
MTEsOCBAQCBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT46OnRyeVJlc2VydmVDYXBhY2l0eQogewogICAgIGlmIChuZXdDYXBhY2l0eSA8
PSBjYXBhY2l0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBUKiBvbGRCdWZmZXIgPSBi
ZWdpbigpOwotICAgIFQqIG9sZEVuZCA9IGVuZCgpOworICAgIFQqIG9sZEJ1ZmZlciA9IGdldFB0
cihiZWdpbigpKTsKKyAgICBUKiBvbGRFbmQgPSBnZXRQdHIoZW5kKCkpOwogCiAgICAgYXNhblNl
dEJ1ZmZlclNpemVUb0Z1bGxDYXBhY2l0eSgpOwogCkBAIC0xMTE4LDcgKzExMjQsNyBAQCBib29s
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46
OnRyeVJlc2VydmVDYXBhY2l0eQogCiAgICAgYXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8oc2l6
ZSgpKTsKIAotICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBiZWdp
bigpKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShvbGRCdWZmZXIsIG9sZEVuZCwgZ2V0UHRy
KGJlZ2luKCkpKTsKICAgICBCYXNlOjpkZWFsbG9jYXRlQnVmZmVyKG9sZEJ1ZmZlcik7CiAgICAg
cmV0dXJuIHRydWU7CiB9CkBAIC0xMTQzLDcgKzExNDksNyBAQCB2b2lkIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnNocmlua0NhcGFjaXR5
KHNpegogCiAgICAgYXNhblNldEJ1ZmZlclNpemVUb0Z1bGxDYXBhY2l0eSgpOwogCi0gICAgVCog
b2xkQnVmZmVyID0gYmVnaW4oKTsKKyAgICBUKiBvbGRCdWZmZXIgPSBnZXRQdHIoYmVnaW4oKSk7
CiAgICAgaWYgKG5ld0NhcGFjaXR5ID4gMCkgewogICAgICAgICBpZiAoQmFzZTo6c2hvdWxkUmVh
bGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSkpIHsKICAgICAgICAgICAgIEJhc2U6OnJlYWxsb2Nh
dGVCdWZmZXIobmV3Q2FwYWNpdHkpOwpAQCAtMTE1MSwxMCArMTE1NywxMCBAQCB2b2lkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnNocmlu
a0NhcGFjaXR5KHNpegogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
VCogb2xkRW5kID0gZW5kKCk7CisgICAgICAgIFQqIG9sZEVuZCA9IGdldFB0cihlbmQoKSk7CiAg
ICAgICAgIEJhc2U6OmFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKICAgICAgICAgaWYgKGJl
Z2luKCkgIT0gb2xkQnVmZmVyKQotICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xk
QnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOworICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6Om1v
dmUob2xkQnVmZmVyLCBvbGRFbmQsIGdldFB0cihiZWdpbigpKSk7CiAgICAgfQogCiAgICAgQmFz
ZTo6ZGVhbGxvY2F0ZUJ1ZmZlcihvbGRCdWZmZXIpOwpAQCAtMTE3NywxMSArMTE4MywxNyBAQCB2
b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eT46OmFwcGVuZChjb25zdCBVKiBkYQogICAgIGlmIChuZXdTaXplIDwgbV9zaXplKQogICAgICAg
ICBDUkFTSCgpOwogICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG5ld1NpemUpOwotICAg
IFQqIGRlc3QgPSBlbmQoKTsKKyAgICBUKiBkZXN0ID0gZ2V0UHRyKGVuZCgpKTsKICAgICBWZWN0
b3JDb3BpZXI8c3RkOjppc190cml2aWFsPFQ+Ojp2YWx1ZSwgVT46OnVuaW5pdGlhbGl6ZWRDb3B5
KGRhdGEsIHN0ZDo6YWRkcmVzc29mKGRhdGFbZGF0YVNpemVdKSwgZGVzdCk7CiAgICAgbV9zaXpl
ID0gbmV3U2l6ZTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK3ZvaWQg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6
YXBwZW5kKGNvbnN0X2l0ZXJhdG9yIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKK3sKKyAgICBhcHBl
bmQoZ2V0UHRyKGRhdGEpLCBkYXRhU2l6ZSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWlu
Q2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CiBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnRyeUFwcGVuZChjb25zdCBVKiBk
YXRhLCBzaXplX3QgZGF0YVNpemUpCiB7CkBAIC0xMTk1LDcgKzEyMDcsNyBAQCBib29sIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnRyeUFw
cGVuZChjb25zdCBVKgogICAgIGlmIChuZXdTaXplIDwgbV9zaXplKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obmV3U2l6ZSk7Ci0gICAgVCog
ZGVzdCA9IGVuZCgpOworICAgIFQqIGRlc3QgPSBnZXRQdHIoZW5kKCkpOwogICAgIFZlY3RvckNv
cGllcjxzdGQ6OmlzX3RyaXZpYWw8VD46OnZhbHVlLCBVPjo6dW5pbml0aWFsaXplZENvcHkoZGF0
YSwgc3RkOjphZGRyZXNzb2YoZGF0YVtkYXRhU2l6ZV0pLCBkZXN0KTsKICAgICBtX3NpemUgPSBu
ZXdTaXplOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTIwNiw3ICsxMjE4LDcgQEAgQUxXQVlTX0lO
TElORSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eT46OmFwcGUKIHsKICAgICBpZiAoc2l6ZSgpICE9IGNhcGFjaXR5KCkpIHsKICAgICAg
ICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obV9zaXplICsgMSk7Ci0gICAgICAgIG5ldyAo
Tm90TnVsbCwgZW5kKCkpIFQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgICAgIG5ldyAo
Tm90TnVsbCwgZ2V0UHRyKGVuZCgpKSkgVChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKICAgICAg
ICAgKyttX3NpemU7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMjI0LDcgKzEyMzYsNyBA
QCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eT46OmFwcGVuZFNsb3dDYXNlKFUmJgogICAgIEFTU0VSVChiZWdpbigpKTsKIAogICAgIGFz
YW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG1fc2l6ZSArIDEpOwotICAgIG5ldyAoTm90TnVsbCwg
ZW5kKCkpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKKyAgICBuZXcgKE5vdE51bGwsIGdldFB0
cihlbmQoKSkpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKICAgICArK21fc2l6ZTsKIH0KIApA
QCAtMTIzOSwxNCArMTI1MSwxNCBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojp1bmNoZWNrZWRBcAogICAgIGFzYW5C
dWZmZXJTaXplV2lsbENoYW5nZVRvKG1fc2l6ZSArIDEpOwogCiAgICAgYXV0byBwdHIgPSBzdGQ6
OmFkZHJlc3NvZih2YWx1ZSk7Ci0gICAgbmV3IChOb3ROdWxsLCBlbmQoKSkgVChzdGQ6OmZvcndh
cmQ8VT4oKnB0cikpOworICAgIG5ldyAoTm90TnVsbCwgZ2V0UHRyKGVuZCgpKSkgVChzdGQ6OmZv
cndhcmQ8VT4oKnB0cikpOwogICAgICsrbV9zaXplOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5PiB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3Qgb3RoZXJDYXBhY2l0eT4K
IGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT46OmFwcGVuZFZlY3Rvcihjb25zdCBWZWN0b3I8VSwgb3RoZXJDYXBhY2l0eT4m
IHZhbCkKIHsKLSAgICBhcHBlbmQodmFsLmJlZ2luKCksIHZhbC5zaXplKCkpOworICAgIGFwcGVu
ZChnZXRQdHIodmFsLmJlZ2luKCkpLCB2YWwuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNp
emVfdCBtaW5DYXBhY2l0eT4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KQEAgLTEyNjEsOSArMTI3Myw5
IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNh
cGFjaXR5Pjo6aW5zZXJ0KHNpemVfdCBwb3NpCiAgICAgaWYgKG5ld1NpemUgPCBtX3NpemUpCiAg
ICAgICAgIENSQVNIKCk7CiAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obmV3U2l6ZSk7
Ci0gICAgVCogc3BvdCA9IGJlZ2luKCkgKyBwb3NpdGlvbjsKLSAgICBUeXBlT3BlcmF0aW9uczo6
bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGVuZCgpLCBzcG90ICsgZGF0YVNpemUpOwotICAgIFZlY3Rv
ckNvcGllcjxzdGQ6OmlzX3RyaXZpYWw8VD46OnZhbHVlLCBVPjo6dW5pbml0aWFsaXplZENvcHko
ZGF0YSwgc3RkOjphZGRyZXNzb2YoZGF0YVtkYXRhU2l6ZV0pLCBzcG90KTsKKyAgICBhdXRvIHNw
b3QgPSBiZWdpbigpICsgcG9zaXRpb247CisgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFw
cGluZyhnZXRQdHIoc3BvdCksIGdldFB0cihlbmQoKSksIGdldFB0cihzcG90KSArIGRhdGFTaXpl
KTsKKyAgICBWZWN0b3JDb3BpZXI8c3RkOjppc190cml2aWFsPFQ+Ojp2YWx1ZSwgVT46OnVuaW5p
dGlhbGl6ZWRDb3B5KGRhdGEsIHN0ZDo6YWRkcmVzc29mKGRhdGFbZGF0YVNpemVdKSwgZ2V0UHRy
KHNwb3QpKTsKICAgICBtX3NpemUgPSBuZXdTaXplOwogfQogIApAQCAtMTI4MCwyNSArMTI5Miwy
NSBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHk+OjppbnNlcnQoc2l6ZQogCiAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hh
bmdlVG8obV9zaXplICsgMSk7CiAKLSAgICBUKiBzcG90ID0gYmVnaW4oKSArIHBvc2l0aW9uOwot
ICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCwgZW5kKCksIHNwb3QgKyAx
KTsKLSAgICBuZXcgKE5vdE51bGwsIHNwb3QpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKKyAg
ICBhdXRvIHNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247CisgICAgVHlwZU9wZXJhdGlvbnM6Om1v
dmVPdmVybGFwcGluZyhnZXRQdHIoc3BvdCksIGdldFB0cihlbmQoKSksIGdldFB0cihzcG90KSAr
IDEpOworICAgIG5ldyAoTm90TnVsbCwgZ2V0UHRyKHNwb3QpKSBUKHN0ZDo6Zm9yd2FyZDxVPigq
cHRyKSk7CiAgICAgKyttX3NpemU7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNp
dHk+IHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBjPgogaW5saW5lIHZvaWQgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6aW5zZXJ0VmVj
dG9yKHNpemVfdCBwb3NpdGlvbiwgY29uc3QgVmVjdG9yPFUsIGM+JiB2YWwpCiB7Ci0gICAgaW5z
ZXJ0KHBvc2l0aW9uLCB2YWwuYmVnaW4oKSwgdmFsLnNpemUoKSk7CisgICAgaW5zZXJ0KHBvc2l0
aW9uLCBnZXRQdHIodmFsLmJlZ2luKCkpLCB2YWwuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIs
IHNpemVfdCBtaW5DYXBhY2l0eT4KIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnJlbW92ZShzaXplX3QgcG9zaXRpb24p
CiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24gPCBzaXpl
KCkpOwotICAgIFQqIHNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247CisgICAgYXV0byBzcG90ID0g
YmVnaW4oKSArIHBvc2l0aW9uOwogICAgIHNwb3QtPn5UKCk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6
Om1vdmVPdmVybGFwcGluZyhzcG90ICsgMSwgZW5kKCksIHNwb3QpOworICAgIFR5cGVPcGVyYXRp
b25zOjptb3ZlT3ZlcmxhcHBpbmcoZ2V0UHRyKHNwb3QgKyAxKSwgZ2V0UHRyKGVuZCgpKSwgZ2V0
UHRyKHNwb3QpKTsKICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhtX3NpemUgLSAxKTsK
ICAgICAtLW1fc2l6ZTsKIH0KQEAgLTEzMDgsMTAgKzEzMjAsMTAgQEAgaW5saW5lIHZvaWQgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6cmVt
b3ZlKHNpemUKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihwb3NpdGlv
biA8PSBzaXplKCkpOwogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0
aW9uICsgbGVuZ3RoIDw9IHNpemUoKSk7Ci0gICAgVCogYmVnaW5TcG90ID0gYmVnaW4oKSArIHBv
c2l0aW9uOwotICAgIFQqIGVuZFNwb3QgPSBiZWdpblNwb3QgKyBsZW5ndGg7Ci0gICAgVHlwZU9w
ZXJhdGlvbnM6OmRlc3RydWN0KGJlZ2luU3BvdCwgZW5kU3BvdCk7IAotICAgIFR5cGVPcGVyYXRp
b25zOjptb3ZlT3ZlcmxhcHBpbmcoZW5kU3BvdCwgZW5kKCksIGJlZ2luU3BvdCk7CisgICAgYXV0
byBiZWdpblNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247CisgICAgYXV0byBlbmRTcG90ID0gYmVn
aW5TcG90ICsgbGVuZ3RoOworICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChnZXRQdHIoYmVn
aW5TcG90KSwgZ2V0UHRyKGVuZFNwb3QpKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJs
YXBwaW5nKGdldFB0cihlbmRTcG90KSwgZ2V0UHRyKGVuZCgpKSwgZ2V0UHRyKGJlZ2luU3BvdCkp
OwogICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG1fc2l6ZSAtIGxlbmd0aCk7CiAgICAg
bV9zaXplIC09IGxlbmd0aDsKIH0KQEAgLTEzNTksNyArMTM3MSw3IEBAIGlubGluZSB1bnNpZ25l
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+
OjpyZW1vdmVBCiAgICAgICAgICAgICBpZiAoaG9sZUJlZ2luID09IGVuZCgpKQogICAgICAgICAg
ICAgICAgIGhvbGVCZWdpbiA9IGl0OwogICAgICAgICAgICAgZWxzZSBpZiAoaG9sZUVuZCAhPSBp
dCkgewotICAgICAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoaG9s
ZUVuZCwgaXQsIGhvbGVCZWdpbik7CisgICAgICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6Om1v
dmVPdmVybGFwcGluZyhnZXRQdHIoaG9sZUVuZCksIGdldFB0cihpdCksIGdldFB0cihob2xlQmVn
aW4pKTsKICAgICAgICAgICAgICAgICBob2xlQmVnaW4gKz0gaXQgLSBob2xlRW5kOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaG9sZUVuZCA9IGl0ICsgMTsKQEAgLTEzNjgsNyArMTM4MCw3
IEBAIGlubGluZSB1bnNpZ25lZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHk+OjpyZW1vdmVBCiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGhv
bGVFbmQgIT0gZW5kKCkpCi0gICAgICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmco
aG9sZUVuZCwgZW5kKCksIGhvbGVCZWdpbik7CisgICAgICAgIFR5cGVPcGVyYXRpb25zOjptb3Zl
T3ZlcmxhcHBpbmcoZ2V0UHRyKGhvbGVFbmQpLCBnZXRQdHIoZW5kKCkpLCBnZXRQdHIoaG9sZUJl
Z2luKSk7CiAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obV9zaXplIC0gbWF0Y2hDb3Vu
dCk7CiAgICAgbV9zaXplIC09IG1hdGNoQ291bnQ7CiAgICAgcmV0dXJuIG1hdGNoQ291bnQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcAppbmRleCA2MmVhMWMxYmRjZWQ2MzA2NTg5OGE4YjQxYjBiNmQyMWI4NTdhYjg3Li42ZDc1
OGVmMmZhYjUxNzQxNjUyN2QyOTJjYjJlMDNmOWFkMjA1MTJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTE0Njgs
OCArMTQ2OCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChidWZmZXIuaXNFbXB0eSgp
KQogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgICAgICBjb25zdCB1aW50OF90KiBw
dHIgPSBidWZmZXIuYmVnaW4oKTsKLSAgICAgICAgY29uc3QgdWludDhfdCogZW5kID0gYnVmZmVy
LmVuZCgpOworICAgICAgICBjb25zdCB1aW50OF90KiBwdHIgPSBnZXRQdHIoYnVmZmVyLmJlZ2lu
KCkpOworICAgICAgICBjb25zdCB1aW50OF90KiBlbmQgPSBnZXRQdHIoYnVmZmVyLmVuZCgpKTsK
ICAgICAgICAgdWludDMyX3QgdmVyc2lvbjsKICAgICAgICAgaWYgKCFyZWFkTGl0dGxlRW5kaWFu
KHB0ciwgZW5kLCB2ZXJzaW9uKSB8fCB2ZXJzaW9uID4gQ3VycmVudFZlcnNpb24pCiAgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5j
cHAKaW5kZXggYjg3MGEzYTBhMDAzYjkyNThkMGYzMjQ1ZmQ0YWIzZjJiNzFlMmJkNy4uYjE4ZDUw
MGJiNDQxMTc2ZTAzNWE2ZGRjMjM2MDg4MGNiNzZhNzk4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMjE0MCwxMSArMjE0MCwxMSBAQCBpbmxpbmUgYm9vbCBT
ZWFyY2hCdWZmZXI6OmlzQmFkTWF0Y2goY29uc3QgVUNoYXIqIG1hdGNoLCBzaXplX3QgbWF0Y2hM
ZW5ndGgpIGNvbgogICAgIC8vIGNyZWF0aW5nIGEgbmV3IG9uZSBlYWNoIHRpbWUuCiAgICAgbm9y
bWFsaXplQ2hhcmFjdGVycyhtYXRjaCwgbWF0Y2hMZW5ndGgsIG1fbm9ybWFsaXplZE1hdGNoKTsK
IAotICAgIGNvbnN0IFVDaGFyKiBhID0gbV9ub3JtYWxpemVkVGFyZ2V0LmJlZ2luKCk7Ci0gICAg
Y29uc3QgVUNoYXIqIGFFbmQgPSBtX25vcm1hbGl6ZWRUYXJnZXQuZW5kKCk7CisgICAgY29uc3Qg
VUNoYXIqIGEgPSBnZXRQdHIobV9ub3JtYWxpemVkVGFyZ2V0LmJlZ2luKCkpOworICAgIGNvbnN0
IFVDaGFyKiBhRW5kID0gZ2V0UHRyKG1fbm9ybWFsaXplZFRhcmdldC5lbmQoKSk7CiAKLSAgICBj
b25zdCBVQ2hhciogYiA9IG1fbm9ybWFsaXplZE1hdGNoLmJlZ2luKCk7Ci0gICAgY29uc3QgVUNo
YXIqIGJFbmQgPSBtX25vcm1hbGl6ZWRNYXRjaC5lbmQoKTsKKyAgICBjb25zdCBVQ2hhciogYiA9
IGdldFB0cihtX25vcm1hbGl6ZWRNYXRjaC5iZWdpbigpKTsKKyAgICBjb25zdCBVQ2hhciogYkVu
ZCA9IGdldFB0cihtX25vcm1hbGl6ZWRNYXRjaC5lbmQoKSk7CiAKICAgICB3aGlsZSAodHJ1ZSkg
ewogICAgICAgICAvLyBTa2lwIHJ1bnMgb2Ygbm9uLWthbmEtbGV0dGVyIGNoYXJhY3RlcnMuIFRo
aXMgaXMgbmVjZXNzYXJ5IHNvIHdlIGNhbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
bWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KaW5kZXggNmY1YjgxODJjZWEyNzdmYTNl
NzkwNmQzODllYmM4ZmMwMzE4ZjE1NS4uN2VlYmM4ZGU0MWQ2ODUxMmNmYzc0NWI1ZjE0NzMwMzA0
OTVlZjYwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyLm1tCkBAIC01NzQsNyArNTc0LDcgQEAgdm9pZCBTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCgpCiAKICAgICAgICAgaWYgKCFj
Z1JlY3RzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQ0dSZWN0IHZpc2libGVSZWN0ID0gbWFp
bkZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8
RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdp
dGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVBbmREaXJlY3Rpb24obnVsbHB0ciwgY2dSZWN0
cy5iZWdpbigpLCBjZ1JlY3RzLnNpemUoKSwgdmlzaWJsZVJlY3QsIERESGlnaGxpZ2h0U3R5bGVC
dWJibGVOb25lIHwgRERIaWdobGlnaHRTdHlsZVN0YW5kYXJkSWNvbkFycm93IHwgRERIaWdobGln
aHRTdHlsZUJ1dHRvblNob3dBbHdheXMsIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwg
Tk8sIFlFUykpOworICAgICAgICAgICAgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hs
aWdodCA9IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0
aFN0eWxlQW5kRGlyZWN0aW9uKG51bGxwdHIsIGNnUmVjdHMuZGF0YSgpLCBjZ1JlY3RzLnNpemUo
KSwgdmlzaWJsZVJlY3QsIERESGlnaGxpZ2h0U3R5bGVCdWJibGVOb25lIHwgRERIaWdobGlnaHRT
dHlsZVN0YW5kYXJkSWNvbkFycm93IHwgRERIaWdobGlnaHRTdHlsZUJ1dHRvblNob3dBbHdheXMs
IFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0
ZUZvclNlbGVjdGlvbigqdGhpcywgZGRIaWdobGlnaHQsIHNlbGVjdGlvblJhbmdlKSk7CiAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dPRkZG
aWxlRm9ybWF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxl
Rm9ybWF0LmNwcAppbmRleCAwNTE4NzFhYzZjNjBmYjY0MzkyODMwYWFjNmFkMzg1MmE5NGQ0NDc2
Li5kZDA5NjNhNzUwMWFkMmVlMDYzMWE1ZTE2ZDc5NTExMTEyMjM5ZDU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCkBAIC0y
MDAsNyArMjAwLDcgQEAgYm9vbCBjb252ZXJ0V09GRlRvU2ZudChTaGFyZWRCdWZmZXIqIHdvZmYs
IFZlY3RvcjxjaGFyPiYgc2ZudCkKICAgICAgICAgICAgIHVMb25nZiBkZXN0TGVuID0gdGFibGVP
cmlnTGVuZ3RoOwogICAgICAgICAgICAgaWYgKCFzZm50LnRyeVJlc2VydmVDYXBhY2l0eShzZm50
LnNpemUoKSArIHRhYmxlT3JpZ0xlbmd0aCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgQnl0ZWYqIGRlc3QgPSByZWludGVycHJldF9jYXN0PEJ5dGVmKj4oc2Zu
dC5lbmQoKSk7CisgICAgICAgICAgICBCeXRlZiogZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Qnl0
ZWYqPihnZXRQdHIoc2ZudC5lbmQoKSkpOwogICAgICAgICAgICAgc2ZudC5ncm93KHNmbnQuc2l6
ZSgpICsgdGFibGVPcmlnTGVuZ3RoKTsKICAgICAgICAgICAgIGlmICh1bmNvbXByZXNzKGRlc3Qs
ICZkZXN0TGVuLCByZWludGVycHJldF9jYXN0PGNvbnN0IEJ5dGVmKj4od29mZi0+ZGF0YSgpICsg
dGFibGVPZmZzZXQpLCB0YWJsZUNvbXBMZW5ndGgpICE9IFpfT0spCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAppbmRleCA3MjRkODMyY2M3OTNhNzEwZGJhMjQx
OWJmMDJhYTI5ZjVkY2M0ZmQ0Li41MmM3NTg1YTM0YmYwMWVlYzkxYzQ4NzQ5MmU5MGE5OWQ2NzNk
YjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFkaWVudENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFkaWVudENhaXJvLmNwcApAQCAtNjEsNyArNjEsNyBAQCBjYWlyb19wYXR0ZXJuX3Qq
IEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KGZsb2F0IGdsb2JhbEFscGhhKQogICAgIGVsc2UK
ICAgICAgICAgbV9ncmFkaWVudCA9IGNhaXJvX3BhdHRlcm5fY3JlYXRlX2xpbmVhcihtX3AwLngo
KSwgbV9wMC55KCksIG1fcDEueCgpLCBtX3AxLnkoKSk7CiAKLSAgICBWZWN0b3I8Q29sb3JTdG9w
Pjo6aXRlcmF0b3Igc3RvcEl0ZXJhdG9yID0gbV9zdG9wcy5iZWdpbigpOworICAgIGF1dG8gc3Rv
cEl0ZXJhdG9yID0gbV9zdG9wcy5iZWdpbigpOwogICAgIHdoaWxlIChzdG9wSXRlcmF0b3IgIT0g
bV9zdG9wcy5lbmQoKSkgewogICAgICAgICBjYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3Jn
YmEobV9ncmFkaWVudCwgc3RvcEl0ZXJhdG9yLT5zdG9wLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RvcEl0ZXJhdG9yLT5yZWQsIHN0b3BJdGVyYXRvci0+Z3Jl
ZW4sIHN0b3BJdGVyYXRvci0+Ymx1ZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKaW5kZXgg
Y2Q1NmU2N2ViOTE4YjE2OTNjNGVjY2Y3NDBhZjgwYzg1OTM2YTc5OC4uZmJiZmZkYWU3N2MwMWE2
MjIzZjY3OGYwYTY4OWQ0OGY5NDA5NWQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAK
QEAgLTE0NCw3ICsxNDQsNyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZl
ckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKQogICAgIC8vIGFsd2F5cyB1c2UgSW1hZ2VT
b3VyY2U6OmNsZWFyKHRydWUsIC4uLikgdG8gY29tcGxldGVseSBmcmVlIHRoZSBtZW1vcnkgaW4K
ICAgICAvLyB0aGlzIGNhc2UuCiAgICAgY2xlYXJCZWZvcmVGcmFtZSA9IHN0ZDo6bWluKGNsZWFy
QmVmb3JlRnJhbWUsIG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgLSAxKTsKLSAgICBjb25zdCBW
ZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGVuZChtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4o
KSArIGNsZWFyQmVmb3JlRnJhbWUpOworICAgIGNvbnN0IGF1dG8gZW5kID0gbV9mcmFtZUJ1ZmZl
ckNhY2hlLmJlZ2luKCkgKyBjbGVhckJlZm9yZUZyYW1lOwogCiAgICAgLy8gV2UgbmVlZCB0byBw
cmVzZXJ2ZSBmcmFtZXMgc3VjaCB0aGF0OgogICAgIC8vICAgKiBXZSBkb24ndCBjbGVhciB8ZW5k
fApAQCAtMTY0LDE0ICsxNjQsMTQgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVC
dWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkKICAgICAvLyAgICogSWYgdGhlIGZy
YW1lIGlzIHBhcnRpYWwsIHdlJ3JlIGRlY29kaW5nIGl0LCBzbyBkb24ndCBjbGVhciBpdDsgaWYg
aXQKICAgICAvLyAgICAgaGFzIGEgZGlzcG9zYWwgbWV0aG9kIG90aGVyIHRoYW4gRGlzcG9zZU92
ZXJ3cml0ZVByZXZpb3VzLCBzdG9wCiAgICAgLy8gICAgIHNjYW5uaW5nLCBhcyB3ZSdsbCBvbmx5
IG5lZWQgdGhpcyBmcmFtZSB3aGVuIGRlY29kaW5nIHRoZSBuZXh0IG9uZS4KLSAgICBWZWN0b3I8
SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGkoZW5kKTsKKyAgICBhdXRvIGkgPSBlbmQ7CiAgICAgZm9y
ICg7IChpICE9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKSAmJiAoKGktPnN0YXR1cygpID09
IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHx8IChpLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdl
RnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cykpOyAtLWkpIHsKICAgICAgICAgaWYgKChp
LT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKSAmJiAoaSAhPSBlbmQpKQog
ICAgICAgICAgICAgaS0+Y2xlYXJQaXhlbERhdGEoKTsKICAgICB9CiAKICAgICAvLyBOb3cgfGl8
IGhvbGRzIHRoZSBsYXN0IGZyYW1lIHdlIG5lZWQgdG8gcHJlc2VydmU7IGNsZWFyIHByaW9yIGZy
YW1lcy4KLSAgICBmb3IgKFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0b3IgaihtX2ZyYW1lQnVm
ZmVyQ2FjaGUuYmVnaW4oKSk7IGogIT0gaTsgKytqKSB7CisgICAgZm9yIChhdXRvIGogPSBtX2Zy
YW1lQnVmZmVyQ2FjaGUuYmVnaW4oKTsgaiAhPSBpOyArK2opIHsKICAgICAgICAgQVNTRVJUKGot
PnN0YXR1cygpICE9IEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIGlmIChqLT5z
dGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KQogICAgICAgICAgICAgai0+Y2xlYXJQ
aXhlbERhdGEoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggOGJj
MGYwODNkMTc2OTUyNGIyNjQxY2JiNjBiMDVlYzlmODczNDFmOS4uMmJhYzg4NDM0OTViZTZiZDA3
ZTVmYTAyZGJkM2NlMGE0NDI1MjUwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAKQEAgLTE2MDYsOCArMTYwNiw4IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEZpbGxMYXll
cnMoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IENvbG9yJiBjLCBjb25zCiAgICAg
ICAgIGNvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcigxKTsKICAgICB9CiAKLSAgICBWZWN0
b3I8Y29uc3QgRmlsbExheWVyKj46OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgdG9wTGF5ZXIgPSBs
YXllcnMucmVuZCgpOwotICAgIGZvciAoVmVjdG9yPGNvbnN0IEZpbGxMYXllcio+Ojpjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yIGl0ID0gbGF5ZXJzLnJiZWdpbigpOyBpdCAhPSB0b3BMYXllcjsgKytp
dCkKKyAgICBhdXRvIHRvcExheWVyID0gbGF5ZXJzLnJlbmQoKTsKKyAgICBmb3IgKGF1dG8gaXQg
PSBsYXllcnMucmJlZ2luKCk7IGl0ICE9IHRvcExheWVyOyArK2l0KQogICAgICAgICBwYWludEZp
bGxMYXllcihwYWludEluZm8sIGMsICppdCwgcmVjdCwgYmxlZWRBdm9pZGFuY2UsIG9wLCBiYWNr
Z3JvdW5kT2JqZWN0LCBiYXNlQmdDb2xvclVzYWdlKTsKIAogICAgIGlmIChzaG91bGREcmF3QmFj
a2dyb3VuZEluU2VwYXJhdGVCdWZmZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcAppbmRleCAyMmE4NGIyNDQzYzQy
N2MyNDZlZmU4NTllM2VjNGMxM2FhZmE2NDAzLi5iYzU3ZTExN2ZhNmEwYmY2Y2Y2N2Q3OTdmZGIx
NTc2NDY5YmU3MDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
R3JpZFJlc29sdmVkUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHAKQEAgLTE3MSw3ICsxNzEsNyBAQCBzdGF0aWMg
R3JpZFNwYW4gcmVzb2x2ZVJvd0VuZENvbHVtbkVuZE5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWlu
c3RPcHBvc2l0ZVBvc2l0aQogewogICAgIEFTU0VSVChncmlkTGluZXMuc2l6ZSgpKTsKICAgICB1
bnNpZ25lZCBmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb25JbmRleCA9IGdyaWRMaW5lcy5z
aXplKCkgLSAxOwotICAgIGNvbnN0IHVuc2lnbmVkKiBmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9z
aXRpb24gPSBzdGQ6OnVwcGVyX2JvdW5kKGdyaWRMaW5lcy5iZWdpbigpLCBncmlkTGluZXMuZW5k
KCksIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CisgICAgY29uc3QgYXV0byBmaXJzdExpbmVB
ZnRlck9wcG9zaXRlUG9zaXRpb24gPSBzdGQ6OnVwcGVyX2JvdW5kKGdyaWRMaW5lcy5iZWdpbigp
LCBncmlkTGluZXMuZW5kKCksIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CiAgICAgaWYgKGZp
cnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbiAhPSBncmlkTGluZXMuZW5kKCkpCiAgICAgICAg
IGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbkluZGV4ID0gZmlyc3RMaW5lQWZ0ZXJPcHBv
c2l0ZVBvc2l0aW9uIC0gZ3JpZExpbmVzLmJlZ2luKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9u
dEVsZW1lbnQuY3BwCmluZGV4IDExNDg4MTIyNDljMjhlNzQ0ZTZkNzliMjlkOWYwNTM3ODY0Yjg5
NjYuLjU0YTAyMjM1MDkxOGFhZTczNWQyMmM0MGUwMGY2MGJmNjM2MTI1NzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcApAQCAtMjQzLDMxICsyNDMsMzEgQEAgc3RhdGljIGlu
bGluZSBmbG9hdCBrZXJuaW5nRm9yUGFpck9mU3RyaW5nc0FuZEdseXBocyhjb25zdCBTVkdLZXJu
aW5nTWFwJiBrZXJuaW4KIHsKICAgICBpZiAoIWcxLmlzRW1wdHkoKSAmJiBrZXJuaW5nTWFwLmds
eXBoTWFwLmNvbnRhaW5zKGcxKSkgewogICAgICAgICBTVkdLZXJuaW5nVmVjdG9yKiBrZXJuaW5n
VmVjdG9yID0ga2VybmluZ01hcC5nbHlwaE1hcC5nZXQoZzEpOwotICAgICAgICBTVkdLZXJuaW5n
VmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGtlcm5pbmdWZWN0b3ItPmVuZCgpIC0gMTsKLSAg
ICAgICAgY29uc3QgU1ZHS2VybmluZ1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBrZXJu
aW5nVmVjdG9yLT5iZWdpbigpIC0gMTsKLSAgICAgICAgZm9yICg7IGl0ICE9IGJlZ2luOyAtLWl0
KSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2hlcyh1MiwgZzIsICppdCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGl0LT5rZXJuaW5nOworICAgICAgICBzaXplX3QgaXQgPSBrZXJuaW5nVmVjdG9y
LT5zaXplKCk7CisgICAgICAgIHdoaWxlIChpdC0tID4gMCkgeworICAgICAgICAgICAgYXV0byYg
dmFsdWUgPSBrZXJuaW5nVmVjdG9yLT5hdChpdCk7CisgICAgICAgICAgICBpZiAobWF0Y2hlcyh1
MiwgZzIsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUua2VybmluZzsKICAg
ICAgICAgfQogICAgIH0KIAogICAgIGlmICghdTEuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChr
ZXJuaW5nTWFwLnVuaWNvZGVNYXAuY29udGFpbnModTEpKSB7CiAgICAgICAgICAgICBTVkdLZXJu
aW5nVmVjdG9yKiBrZXJuaW5nVmVjdG9yID0ga2VybmluZ01hcC51bmljb2RlTWFwLmdldCh1MSk7
Ci0gICAgICAgICAgICBTVkdLZXJuaW5nVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGtlcm5p
bmdWZWN0b3ItPmVuZCgpIC0gMTsKLSAgICAgICAgICAgIGNvbnN0IFNWR0tlcm5pbmdWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0ga2VybmluZ1ZlY3Rvci0+YmVnaW4oKSAtIDE7Ci0gICAg
ICAgICAgICBmb3IgKDsgaXQgIT0gYmVnaW47IC0taXQpIHsKLSAgICAgICAgICAgICAgICBpZiAo
bWF0Y2hlcyh1MiwgZzIsICppdCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdC0+a2Vy
bmluZzsKKyAgICAgICAgICAgIHNpemVfdCBpdCA9IGtlcm5pbmdWZWN0b3ItPnNpemUoKTsKKyAg
ICAgICAgICAgIHdoaWxlIChpdC0tID4gMCkgeworICAgICAgICAgICAgICAgIGF1dG8mIHZhbHVl
ID0ga2VybmluZ1ZlY3Rvci0+YXQoaXQpOworICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzKHUy
LCBnMiwgdmFsdWUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUua2VybmluZzsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICgha2VybmluZ01hcC5rZXJu
aW5nVW5pY29kZVJhbmdlTWFwLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgVmVjdG9yPFNWR0tl
cm5pbmdQYWlyPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2Rl
UmFuZ2VNYXAuZW5kKCkgLSAxOwotICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0tlcm5pbmdQ
YWlyPjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2RlUmFu
Z2VNYXAuYmVnaW4oKSAtIDE7Ci0gICAgICAgICAgICBmb3IgKDsgaXQgIT0gYmVnaW47IC0taXQp
IHsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyh1MSwgdTIsIGcyLCAqaXQpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gaXQtPmtlcm5pbmc7CisgICAgICAgICAgICBzaXplX3QgaXQg
PSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VNYXAuc2l6ZSgpOworICAgICAgICAgICAg
d2hpbGUgKGl0LS0gPiAwKSB7CisgICAgICAgICAgICAgICAgYXV0byYgdmFsdWUgPSBrZXJuaW5n
TWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VNYXBbaXRdOworICAgICAgICAgICAgICAgIGlmIChtYXRj
aGVzKHUxLCB1MiwgZzIsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVl
Lmtlcm5pbmc7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBh
dGhOb2RlU2V0LmgKaW5kZXggM2Q4OWI4ZDUwODdhODZjZmVhZmZjMDE0MGI2OTQ3NjJjMDk1ZGRk
Zi4uZGFmMmI5M2Q1MWI1YWY2YjczNGY1ZjlhNzY1NDEzNjllMDQxNGEyYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9kZVNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aE5vZGVTZXQuaApAQCAtNjQsOCArNjQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgICAgICB2b2lkIG1hcmtTdWJ0cmVlc0Rpc2pvaW50KGJvb2wgZGlzam9pbnQpIHsgbV9z
dWJ0cmVlc0FyZURpc2pvaW50ID0gZGlzam9pbnQ7IH0KICAgICAgICAgICAgIGJvb2wgc3VidHJl
ZXNBcmVEaXNqb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VidHJlZXNBcmVEaXNqb2ludCB8fCBt
X25vZGVzLnNpemUoKSA8IDI7IH0KIAotICAgICAgICAgICAgY29uc3QgUmVmUHRyPE5vZGU+KiBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuYmVnaW4oKTsgfQotICAgICAgICAgICAgY29u
c3QgUmVmUHRyPE5vZGU+KiBlbmQoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9Cisg
ICAgICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+Pjo6aXRlcmF0b3IgYmVnaW4oKSBj
b25zdCB7IHJldHVybiBtX25vZGVzLmJlZ2luKCk7IH0KKyAgICAgICAgICAgIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8Tm9kZT4+OjppdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLmVu
ZCgpOyB9CiAKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIHZvaWQgdHJhdmVyc2FsU29y
dCgpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260450</attachid>
            <date>2015-09-02 16:21:29 -0700</date>
            <delta_ts>2015-09-10 09:17:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138821-20150902162128.patch</filename>
            <type>text/plain</type>
            <size>63338</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5MjY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
N2ZhOGRlZDYzMDg5YjIyNzc0ODM2YzMzZGE0NDFkZDA3ZjIxOGI2Li5iMDdmOTNhNzczODViZjRi
MjMzNjBlNmIxMWFmOGVjZGZmNTUwZjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMyBAQAorMjAxNC0xMi0xNSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3Rp
bGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJrIExh
bS4KKworICAgICAgICBVcGRhdGUgY29kZSB0byBkZWFsIHdpdGggc2xpZ2h0bHkgY2hhbmdlZCBp
dGVyYXRvciBzZW1hbnRpY3MuCisKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKToK
KyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmVtaXRTd2l0Y2hJbnRKdW1wKToKKyAgICAgICAgKiBmdGwvRlRMQWJicmV2aWF0aW9u
cy5oOgorICAgICAgICAoSlNDOjpGVEw6Om1kTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6YnVp
bGRDYWxsKToKKyAgICAgICAgKiBsbGludC9MTEludERhdGEuY3BwOgorICAgICAgICAoSlNDOjpM
TEludDo6RGF0YTo6cGVyZm9ybUFzc2VydGlvbnMpOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIu
aDoKKyAgICAgICAgKEpTQzo6U2NvcGU6OlNjb3BlKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJy
YXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3Rvcik6CisgICAgICAg
ICogdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2ZpbGVUcmVlTm9k
ZTo6ZHVtcEludGVybmFsKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAgICAgICAo
SlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjptYXRjaENoYXJhY3RlckNsYXNzKToKKwogMjAxNS0w
OS0wMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBz
b21lIHVudXNlZCBtZXRob2RzIGZyb20gR2V0QnlJZEFjY2Vzcy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggYWRjNTQ3ZGZkNGMx
NDZiYjg5MjE4ZjFmYjk2Nzk3NDQwNmVmNGExMS4uMzAzZDAyNmUzYmUwOTdlZGIzYzVjNWNjMjhl
ZWE0MGI4ZWRmMDMyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4OSBAQAorMjAxNC0xMi0xNSAgT2xpdmVyIEh1
bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBp
dGVyYXRpb24gb2YgVmVjdG9yPD4gc3RpbGwgcmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAg
ICAgICBSZXZpZXdlZCBieSBNYXJrIExhbS4KKworICAgICAgICBBZGQgYSBuZXcgSW5kZXhlZEl0
ZXJhdG9yIHN0cnVjdCB0byBXVEYgdGhhdCB3cmFwcyBhCisgICAgICAgIFZlY3RvciB0eXBlIGFu
ZCBpbmRleCB0byBwcm92aWRlIHBvaW50ZXIgbGlrZSBzZW1hbnRpY3MKKyAgICAgICAgd2hpbGUg
c3RpbGwgcGVyZm9ybWluZyBydW50aW1lIGJvdW5kcyBjaGVja2luZywgZXZlbiBpbgorICAgICAg
ICByZWxlYXNlIGJ1aWxkcy4gV2Ugc3RvcmUgYSBzaW1wbGUgaW5kZXggaW50byB0aGUgdmVjdG9y
CisgICAgICAgIHdoaWNoIG1lYW5zIHRoYXQgdGhpcyBpdGVyYXRvciBhbGxvd3MgdmVjdG9yIHJl
c2l6aW5nCisgICAgICAgIGR1cmluZyBpdGVyYXRpb24uIElmIHRoZSB2ZWN0b3IgaXMgcmVzaXpl
ZCBzdWNoIHRoYXQgdGhlCisgICAgICAgIGl0ZXJhdG9yIGlzIG91dCBvZiBib3VuZHMsIHRoZW4g
YW55IGF0dGVtcHQgdG8gZGVyZWZlcmVuY2UKKyAgICAgICAgdGhlIGl0ZXJhdG9yIHdpbGwgY3Jh
c2ggc2FmZWx5LgorCisgICAgICAgIEZvciB0aGUgcHVycG9zZSBvZiByZXRhaW5pbmcgc2VtYW50
aWNhbGx5IGVxdWl2YWxlbnQKKyAgICAgICAgYmVoYXZpb3VyLCB0aGUgaXRlcmF0b3IgY2FuIGJl
IG1vdmVkIHRvIG1faW5kZXggPT0gc2l6ZSgpCisgICAgICAgIGFzIHRoYXQgaXMgdGhlIHN0YW5k
YXJkICJlbmQiIHRlcm1pbmF0b3IgZm9yIHRoZXNlIHR5cGVzLgorICAgICAgICBBdHRlbXB0aW5n
IHRvIGRlcmVmZXJlbmNlIGF0IHRoYXQgcG9pbnQgd2lsbCBzdGlsbCBjcmFzaAorICAgICAgICBy
YXRoZXIgdGhhbiBwZXJmb3JtIGFuIHVuc2FmZSBtZW1vcnkgb3BlcmF0aW9uLgorCisgICAgICAg
IEJ5IG5lY2Vzc2l0eSB0aGVyZSBhcmUgbWFueSBvdmVycmlkZXMgZm9yIG9wZXJhdG9yICsgYW5k
IC0gYXMKKyAgICAgICAgd2Ugb3RoZXJ3aXNlIGhpdCBtYW55IGRpZmZlcmVudCB0eXBlIHByb21v
dGlvbiBhbWJpZ3VpdGllcyB3aGVuCisgICAgICAgIHBlcmZvcm1pbmcgYXJpdGhtZXRpYyB3aXRo
IGl0ZXJhdG9ycy4gVGhlc2UgYW1iaWd1aXRpZXMgYXJlIGFsc28KKyAgICAgICAgZGlmZmVyZW50
IGZvciAzMi0gdnMuIDY0LWJpdCwgc28gZHVwbGljYXRpbmcgdGhlIGZ1bmN0aW9ucworICAgICAg
ICBhbmQgdGhlbiBmb3J3YXJkaW5nIHRvIHRoZSBjb3JlIGltcGxlbWVudGF0aW9ucyB0aGF0IHBl
cmZvcm1lZAorICAgICAgICB0aGUgYm91bmRzIGNoZWNraW5nIGFuZCBtdXRhdGlvbiBzZWVtZWQg
bGlrZSB0aGUgcmlnaHQgY2FsbC4KKworICAgICAgICAqIFdURi52Y3hwcm9qL1dURi52Y3hwcm9q
OgorICAgICAgICAqIFdURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICog
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0luZGV4ZWRJdGVy
YXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpJbmRleGVkSXRl
cmF0b3IpOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yLT4pOgorICAg
ICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXVEY6Oklu
ZGV4ZWRJdGVyYXRvcjo6Z2V0KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVy
YXRvcisrKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvci0tKToKKyAg
ICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBl
KToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvci0pOgorICAgICAgICAo
V1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJ
dGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3Bl
cmF0b3IhPSk6CisgICAgICAgIChXVEY6OkluZGV4ZWRJdGVyYXRvcjo6b3BlcmF0b3I8KToKKyAg
ICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcjw9KToKKyAgICAgICAgKFdURjo6
SW5kZXhlZEl0ZXJhdG9yOjpvcGVyYXRvcj4pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0
b3I6Om9wZXJhdG9yPj0pOgorICAgICAgICAoV1RGOjpJbmRleGVkSXRlcmF0b3I6Om9wZXJhdG9y
IGNvbnN0X2l0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yOjp1bnNhZmVH
ZXQpOgorICAgICAgICAoV1RGOjpnZXRQdHIpOgorICAgICAgICAoV1RGOjpvcGVyYXRvci0pOgor
ICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3IhPSk6Cisg
ICAgICAgIChXVEY6Om9wZXJhdG9yPD0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj49KToKKyAg
ICAgICAgKFdURjo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I+KToKKyAgICAg
ICAgKFdURjo6SW5kZXhlZEl0ZXJhdG9yU2VsZWN0b3I6Om1ha2VJdGVyYXRvcik6CisgICAgICAg
IChXVEY6OkluZGV4ZWRJdGVyYXRvclNlbGVjdG9yOjptYWtlQ29uc3RJdGVyYXRvcik6CisgICAg
ICAgICogd3RmL1JlZkNvdW50ZWRBcnJheS5oOgorICAgICAgICAoV1RGOjpSZWZDb3VudGVkQXJy
YXk6OlJlZkNvdW50ZWRBcnJheSk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAo
V1RGOjpWZWN0b3I6OlZlY3Rvcik6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6YmVnaW4pOgorICAg
ICAgICAoV1RGOjpWZWN0b3I6OmVuZCk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46
OlZlY3Rvcik6CisgICAgICAgIChXVEY6Oj0pOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRs
ZXI+OjpmaWxsKToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6ZXhwYW5kQ2FwYWNp
dHkpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+Ojp0cnlFeHBhbmRDYXBhY2l0eSk6
CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnJlc2l6ZSk6CisgICAgICAgIChXVEY6
Ok92ZXJmbG93SGFuZGxlcj46OnNocmluayk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxl
cj46Omdyb3cpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpyZXNlcnZlQ2FwYWNp
dHkpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+Ojp0cnlSZXNlcnZlQ2FwYWNpdHkp
OgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpzaHJpbmtDYXBhY2l0eSk6CisgICAg
ICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OmFwcGVuZCk6CisgICAgICAgIChXVEY6Ok92ZXJm
bG93SGFuZGxlcj46OnRyeUFwcGVuZCk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46
OmFwcGVuZFNsb3dDYXNlKToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6dW5jaGVj
a2VkQXBwZW5kKToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kVmVjdG9y
KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6aW5zZXJ0KToKKyAgICAgICAgKFdU
Rjo6T3ZlcmZsb3dIYW5kbGVyPjo6aW5zZXJ0VmVjdG9yKToKKyAgICAgICAgKFdURjo6T3ZlcmZs
b3dIYW5kbGVyPjo6cmVtb3ZlKToKKwogMjAxNS0wOC0yOSAgWmFuIERvYmVyc2VrICA8emRvYmVy
c2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dURl0gSW1wcm92ZSBhIFBhcmtpbmdMb3Q6OnBh
cmtDb25kaXRpb25hbGx5KCkgY29tbWVudCBmb3IgYSBsaWJzdGRjKysgd29ya2Fyb3VuZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDQyODI1MGFjODc5NGNlYTI1ODYwNzJiZjU3MGUzMTI0OGMzMjQxMzYuLjQzOTcx
ZmRlYjhmMzMxNjk1NTNmMmE1MGI2Y2YzOWNkMWJhZDE0Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw0MSBAQAorMjAxNC0xMi0xNSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisg
ICAgICAgIE1ha2Ugc3VyZSByYW5nZSBiYXNlZCBpdGVyYXRpb24gb2YgVmVjdG9yPD4gc3RpbGwg
cmVjZWl2ZXMgYm91bmRzIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzg4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJrIExhbS4K
KworICAgICAgICBVcGRhdGUgdG8gZGVhbCB3aXRoIGRpZmZlcmVudCBpdGVyYXRvciB0eXBlLgor
CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZVN0cmluZyk6CisgICAg
ICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNo
QnVmZmVyOjppc0JhZE1hdGNoKToKKyAgICAgICAgKiBwYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2VydmljZXNPdmVybGF5Q29udHJvbGxl
cjo6YnVpbGRTZWxlY3Rpb25IaWdobGlnaHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L1NlZ21lbnRlZEZvbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZEZvbnRE
YXRhOjpmb250RGF0YUZvckNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRG
b250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVk
Rm9udERhdGE6OmlzTG9hZGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZp
bGVGb3JtYXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFdPRkZUb1NmbnQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpw
YWludEZpbGxMYXllcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQ
b3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaXJzdE5hbWVkR3JpZExpbmVCZWZvcmVQ
b3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2
ZVJvd0VuZENvbHVtbkVuZE5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0
aW9uKToKKyAgICAgICAgKiBzdmcvU1ZHRm9udEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6a2VybmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMpOgorICAgICAgICAqIHN2Zy9TVkdQ
YXRoQnl0ZVN0cmVhbS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW06OmFw
cGVuZCk6CisgICAgICAgICogeG1sL1hQYXRoTm9kZVNldC5oOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6Ok5vZGVTZXQ6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOb2RlU2V0
OjplbmQpOgorCiAyMDE1LTA5LTAyICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBZGQgc29tZSBIb3VkaW5pIHNwZWNzIHRvIHRoZSBmZWF0dXJlcyBsaXN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldC5oCmluZGV4IDk1N2VhYWMyNTUwMGU4NDZlNjg3OTQyNmY4YWJlOGNiNGQ3
OTVjYzEuLjUxNjZiMTM0NzYyZmVlMDI4NTMwZTM4YmE3NGRmYzY3OTdhYTMwZjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldC5oCkBAIC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogLy8gTm9u
LWVtcHR5OiBUaGUgaGVhcCBhY2Nlc3MgaXMgdmFsaWQgaWYgYWxsIHRoZSBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbnMgaW4gdGhlIHNldCBhcmUgdmFsaWQuCiAKIGNsYXNzIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IHsKKyAgICB0eXBlZGVmIFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bj4gUHJvcGVydHlDb25kaXRpb25WZWN0b3I7CiBwdWJsaWM6CiAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQoKSB7IH0KICAgICAKQEAgLTczLDE1ICs3NCwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiAhbV9kYXRhOwogICAgIH0KICAgICAKLSAgICB0eXBlZGVmIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uKiBpdGVyYXRvcjsKKyAgICB0eXBlZGVmIFByb3BlcnR5Q29uZGl0
aW9uVmVjdG9yOjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICB0eXBlZGVmIFByb3BlcnR5Q29uZGl0
aW9uVmVjdG9yOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICAgICAKLSAgICBpdGVy
YXRvciBiZWdpbigpIGNvbnN0CisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdAogICAg
IHsKICAgICAgICAgaWYgKCFtX2RhdGEpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgcmV0dXJuIG1fZGF0YS0+dmVjdG9yLmJlZ2luKCk7CiAgICAgfQotICAgIGl0ZXJhdG9y
IGVuZCgpIGNvbnN0CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIGlmICghbV9kYXRhKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNDgsNyAr
MTUwLDcgQEAgcHVibGljOgogICAgIHB1YmxpYzoKICAgICAgICAgRGF0YSgpIHsgfQogICAgICAg
ICAKLSAgICAgICAgVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiB2ZWN0b3I7CisgICAg
ICAgIFByb3BlcnR5Q29uZGl0aW9uVmVjdG9yIHZlY3RvcjsKICAgICB9OwogICAgIAogcHJpdmF0
ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suY3BwCmluZGV4IDJmZTFiYjg3ZmYyNzY0YzZlYWUyYjM2ZjQyYTE2NzhiMjg2NzI2ZDYu
LjE2NjM3MTRhZGU5YWUzNjdlNTlhNGQyMzliYzczMGE3NWNiMzAwYWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApAQCAt
OTEsOSArOTEsOSBAQCB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CiAgICAgZm9yIChGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I6Oml0ZXJh
dG9yIHB0ciA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25EZWNscy5iZWdpbigpLCBlbmQgPSB0aGlz
T2JqZWN0LT5tX2Z1bmN0aW9uRGVjbHMuZW5kKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAg
ICB2aXNpdG9yLmFwcGVuZChwdHIpOworICAgICAgICB2aXNpdG9yLmFwcGVuZChXVEY6OmdldFB0
cihwdHIpKTsKICAgICBmb3IgKEZ1bmN0aW9uRXhwcmVzc2lvblZlY3Rvcjo6aXRlcmF0b3IgcHRy
ID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkV4cHJzLmJlZ2luKCksIGVuZCA9IHRoaXNPYmplY3Qt
Pm1fZnVuY3Rpb25FeHBycy5lbmQoKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgIHZpc2l0
b3IuYXBwZW5kKHB0cik7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKFdURjo6Z2V0UHRyKHB0cikp
OwogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1fY29uc3RhbnRSZWdpc3Rl
cnMuZGF0YSgpLCB0aGlzT2JqZWN0LT5tX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CiAgICAg
aWYgKHRoaXNPYmplY3QtPm1fcmFyZURhdGEpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAs
IGVuZCA9IHRoaXNPYmplY3QtPm1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7IGkgIT0gZW5k
OyBpKyspCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDc4M2IyMTU3YTFmMWUxM2MyZWNjMWFmZmY1ZTdm
ZGM0OWZlOWUzZDcuLjg4ZTc2MWU0OGNkMGVjMGU5ZjA1ZmUzYThkYTA0MGRhZjA1NWNlZmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCkBAIC0zMDc4LDggKzMwNzgsOCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0Q29tcGxleFBvcFNjb3BlcyhSZWdpc3RlcklEKiBzY29wZSwgQ29udHJvbEZsb3dD
b250ZQogICAgICAgICAgICAgaW50IHRvcFNjb3BlSW5kZXggPSAtMTsKICAgICAgICAgICAgIGlu
dCBib3R0b21TY29wZUluZGV4ID0gLTE7CiAgICAgICAgICAgICBpZiAoZmxpcFNjb3Blcykgewot
ICAgICAgICAgICAgICAgIHRvcFNjb3BlSW5kZXggPSB0b3BTY29wZSAtIG1fc2NvcGVDb250ZXh0
U3RhY2suYmVnaW4oKTsKLSAgICAgICAgICAgICAgICBib3R0b21TY29wZUluZGV4ID0gYm90dG9t
U2NvcGUgLSBtX3Njb3BlQ29udGV4dFN0YWNrLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgdG9w
U2NvcGVJbmRleCA9IHRvcFNjb3BlIC0gbV9zY29wZUNvbnRleHRTdGFjay5kYXRhKCk7CisgICAg
ICAgICAgICAgICAgYm90dG9tU2NvcGVJbmRleCA9IGJvdHRvbVNjb3BlIC0gbV9zY29wZUNvbnRl
eHRTdGFjay5kYXRhKCk7CiAgICAgICAgICAgICAgICAgc2F2ZWRTY29wZUNvbnRleHRTdGFjayA9
IG1fc2NvcGVDb250ZXh0U3RhY2s7CiAgICAgICAgICAgICAgICAgbV9zY29wZUNvbnRleHRTdGFj
ay5zaHJpbmsoZmluYWxseUNvbnRleHQuc2NvcGVDb250ZXh0U3RhY2tTaXplKTsKICAgICAgICAg
ICAgIH0KQEAgLTMxMzMsNyArMzEzMyw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRD
b21wbGV4UG9wU2NvcGVzKFJlZ2lzdGVySUQqIHNjb3BlLCBDb250cm9sRmxvd0NvbnRlCiAgICAg
ICAgICAgICBpZiAoZmxpcFNjb3BlcykgewogICAgICAgICAgICAgICAgIG1fc2NvcGVDb250ZXh0
U3RhY2sgPSBzYXZlZFNjb3BlQ29udGV4dFN0YWNrOwogICAgICAgICAgICAgICAgIHRvcFNjb3Bl
ID0gJm1fc2NvcGVDb250ZXh0U3RhY2tbdG9wU2NvcGVJbmRleF07IC8vIGFzc2VydCBpdCdzIHdp
dGhpbiBib3VuZHMKLSAgICAgICAgICAgICAgICBib3R0b21TY29wZSA9IG1fc2NvcGVDb250ZXh0
U3RhY2suYmVnaW4oKSArIGJvdHRvbVNjb3BlSW5kZXg7IC8vIGRvbid0IGFzc2VydCwgc2luY2Ug
aXQgdGhlIGluZGV4IG1pZ2h0IGJlIC0xLgorICAgICAgICAgICAgICAgIGJvdHRvbVNjb3BlID0g
bV9zY29wZUNvbnRleHRTdGFjay5kYXRhKCkgKyBib3R0b21TY29wZUluZGV4OyAvLyBkb24ndCBh
c3NlcnQsIHNpbmNlIGl0IHRoZSBpbmRleCBtaWdodCBiZSAtMS4KICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmIChmbGlwU3dpdGNoZXMpCiAgICAgICAgICAgICAgICAgbV9zd2l0Y2hDb250
ZXh0U3RhY2sgPSBzYXZlZFN3aXRjaENvbnRleHRTdGFjazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggMjllZGU1MmY1YzdlZGMzYWFi
NDgwNzE5MTliZmE3NzNmMmIxZTFhOC4uNzc5OTNkMDI4NDliNGYyYTk0YzYzYmE5ZDRmNjQ2OGRj
NWExY2QzNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKQEAgLTU5NjcsNyArNTk2Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRT
d2l0Y2hJbnRKdW1wKAogICAgIGFkZEJyYW5jaCgKICAgICAgICAgbV9qaXQuYnJhbmNoMzIoSklU
Q29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWUsIEltbTMyKHRhYmxlLmN0aU9mZnNldHMuc2l6
ZSgpKSksCiAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKLSAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW1QdHIodGFibGUuY3RpT2Zmc2V0cy5iZWdpbigpKSwgc2NyYXRjaCk7CisgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHRhYmxlLmN0aU9mZnNldHMuZGF0YSgpKSwgc2NyYXRj
aCk7CiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QmFzZUluZGV4KHNjcmF0Y2gsIHZh
bHVlLCBKSVRDb21waWxlcjo6dGltZXNQdHIoKSksIHNjcmF0Y2gpOwogICAgIG1faml0Lmp1bXAo
c2NyYXRjaCk7CiAgICAgZGF0YS0+ZGlkVXNlSnVtcFRhYmxlID0gdHJ1ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgKaW5kZXggZDNiZmY0Y2MxYzg4Nzgy
YjY2ZDIwYTA4OWI4ZGQ1YmQ5NzVmODlkZi4uOTU4NmFjOGUzYmMwY2ZhMTVlZjMwZmJmZDRiYzUy
OTNmOTQzMzYzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJy
ZXZpYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRp
b25zLmgKQEAgLTEzMyw3ICsxMzMsNyBAQCBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZFN0cmluZyhM
Q29udGV4dCBjb250ZXh0LCBjb25zdCBjaGFyKiBzdHJpbmcsIHVuc2lnbmVkIGxlbgogc3RhdGlj
IGlubGluZSBMVmFsdWUgbWRTdHJpbmcoTENvbnRleHQgY29udGV4dCwgY29uc3QgY2hhciogc3Ry
aW5nKSB7IHJldHVybiBtZFN0cmluZyhjb250ZXh0LCBzdHJpbmcsIHN0ZDo6c3RybGVuKHN0cmlu
ZykpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwgTFZh
bHVlKiBhcmdzLCB1bnNpZ25lZCBudW1BcmdzKSB7IHJldHVybiBsbHZtLT5NRE5vZGVJbkNvbnRl
eHQoY29udGV4dCwgYXJncywgbnVtQXJncyk7IH0KIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5
cGU+Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwgY29uc3Qg
VmVjdG9yVHlwZSYgdmVjdG9yKSB7IHJldHVybiBtZE5vZGUoY29udGV4dCwgY29uc3RfY2FzdDxM
VmFsdWUqPih2ZWN0b3IuYmVnaW4oKSksIHZlY3Rvci5zaXplKCkpOyB9CitzdGF0aWMgaW5saW5l
IExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9y
KSB7IHJldHVybiBtZE5vZGUoY29udGV4dCwgY29uc3RfY2FzdDxMVmFsdWUqPih2ZWN0b3IuZGF0
YSgpKSwgdmVjdG9yLnNpemUoKSk7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMQ29u
dGV4dCBjb250ZXh0KSB7IHJldHVybiBtZE5vZGUoY29udGV4dCwgMCwgMCk7IH0KIHN0YXRpYyBp
bmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0LCBMVmFsdWUgYXJnMSkgeyByZXR1
cm4gbWROb2RlKGNvbnRleHQsICZhcmcxLCAxKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgbWRO
b2RlKExDb250ZXh0IGNvbnRleHQsIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMikKQEAgLTMwMSw3
ICszMDEsNyBAQCBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRl
ciwgTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBMVmFsdWUqCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0
b3JUeXBlPgogaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVl
IGZ1bmN0aW9uLCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpCiB7Ci0gICAgcmV0dXJuIGJ1aWxk
Q2FsbChidWlsZGVyLCBmdW5jdGlvbiwgdmVjdG9yLmJlZ2luKCksIHZlY3Rvci5zaXplKCkpOwor
ICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIHZlY3Rvci5kYXRhKCksIHZl
Y3Rvci5zaXplKCkpOwogfQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVy
IGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50RGF0YS5jcHAKaW5kZXggNzc3Y2ZkZTA5M2EyZDEzZGY1ZmU1YzM2NmM5ODIyZjRhZTA4
NGZhZS4uNjZjMmU4MWQzMWMyMjRkNWRkOWQ4NzRlMGRkNjY1ODkxODU0OTUyMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKQEAgLTE2MSw3ICsxNjEsNyBAQCB2
b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKFZNJiB2bSkKICAgICBWZWN0b3I8aW50PiB0ZXN0
VmVjdG9yOwogICAgIHRlc3RWZWN0b3IucmVzaXplKDQyKTsKICAgICBBU1NFUlQoYml0d2lzZV9j
YXN0PHVpbnQzMl90Kj4oJnRlc3RWZWN0b3IpW3NpemVvZih2b2lkKikvc2l6ZW9mKHVpbnQzMl90
KSArIDFdID09IDQyKTsKLSAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGludCoqPigmdGVzdFZlY3Rv
cilbMF0gPT0gdGVzdFZlY3Rvci5iZWdpbigpKTsKKyAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGlu
dCoqPigmdGVzdFZlY3RvcilbMF0gPT0gdGVzdFZlY3Rvci5kYXRhKCkpOwogI2VuZGlmCiAKICAg
ICBBU1NFUlQoU3RyaW5nSW1wbDo6c19oYXNoRmxhZzhCaXRCdWZmZXIgPT0gOCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCmluZGV4IDJjNWExOWFlNmVlNjU4MDhi
N2Q3MWNhMzUwMzc1ODhkNTAwNjFiMzUuLmMzZDUwNTVmMjY5OTc0NTI5OTNkYzE0Njk4NzQwYWQ3
NTIxMzJjNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCkBA
IC0zNTIsNyArMzUyLDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib28KICAgICAgICAgICAgIC8v
IHByb3BlcnRpZXMsIHNvIHdlIGhhdmUgdG8gcGVyZm9ybSBkZWxldGlvbiB3aXRoIGNhdXRpb24s
IGlmIG5vdCB3ZSBjYW4KICAgICAgICAgICAgIC8vIGRlbGV0ZSB2YWx1ZXMgaW4gYW55IG9yZGVy
LgogICAgICAgICAgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpKSB7Ci0gICAgICAgICAgICAgICAg
cXNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLnNpemUoKSwgc2l6ZW9mKHVuc2lnbmVkKSwgY29tcGFy
ZUtleXNGb3JRU29ydCk7CisgICAgICAgICAgICAgICAgcXNvcnQoa2V5cy5kYXRhKCksIGtleXMu
c2l6ZSgpLCBzaXplb2YodW5zaWduZWQpLCBjb21wYXJlS2V5c0ZvclFTb3J0KTsKICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpID0ga2V5cy5zaXplKCk7CiAgICAgICAgICAgICAgICAgd2hpbGUg
KGkpIHsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBrZXlzWy0taV07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgKaW5kZXggODhk
NTdmM2RkNGU3OTc2OWQxZDA2YzNhODU5MTAxYjU1NWM2YTgzZi4uZGQzYzEyMWQwZWJiMTZlOGE1
MjQ2MWZhYWNkYmJiNGQ5ODdkNzJiMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9Qcm9maWxlVHJlZU5vZGUuaApAQCAtODYsNyArODYsNyBAQCBwcml2YXRlOgogICAgICAgICBW
ZWN0b3I8TWFwRW50cnkqPiBlbnRyaWVzOwogICAgICAgICBmb3IgKE1hcDo6aXRlcmF0b3IgaXQg
PSBtX2NoaWxkcmVuLT5iZWdpbigpOyBpdCAhPSBtX2NoaWxkcmVuLT5lbmQoKTsgKytpdCkKICAg
ICAgICAgICAgIGVudHJpZXMuYXBwZW5kKCYqaXQpOwotICAgICAgICBxc29ydChlbnRyaWVzLmJl
Z2luKCksIGVudHJpZXMuc2l6ZSgpLCBzaXplb2YoTWFwRW50cnkqKSwgY29tcGFyZUVudHJpZXMp
OworICAgICAgICBxc29ydChlbnRyaWVzLmRhdGEoKSwgZW50cmllcy5zaXplKCksIHNpemVvZihN
YXBFbnRyeSopLCBjb21wYXJlRW50cmllcyk7CiAKICAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRo
ZSBjaGlsZHJlbiBpbiBzYW1wbGUtZnJlcXVlbmN5IG9yZGVyLgogICAgICAgICBmb3IgKHNpemVf
dCBlID0gMDsgZSA8IGVudHJpZXMuc2l6ZSgpOyArK2UpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lh
cnIvWWFyckpJVC5jcHAKaW5kZXggMjIyOWRhNzY3OGExMWYyZjcyMWRhYjlkMmVjYjZkYzE4YTUy
Y2E2NS4uOTJmOWIxMzE1ODY3NGZkNDBhY2E3NmJiYWE4MDM1OWVhNjU4MzM5YSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKQEAgLTIyMyw3ICsyMjMsNyBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgIGlmIChjaGFy
Q2xhc3MtPm1fcmFuZ2VzLnNpemUoKSkgewogICAgICAgICAgICAgdW5zaWduZWQgbWF0Y2hJbmRl
eCA9IDA7CiAgICAgICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKLSAgICAgICAgICAgIG1hdGNo
Q2hhcmFjdGVyQ2xhc3NSYW5nZShjaGFyYWN0ZXIsIGZhaWx1cmVzLCBtYXRjaERlc3QsIGNoYXJD
bGFzcy0+bV9yYW5nZXMuYmVnaW4oKSwgY2hhckNsYXNzLT5tX3Jhbmdlcy5zaXplKCksICZtYXRj
aEluZGV4LCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5iZWdpbigpLCBjaGFyQ2xhc3MtPm1fbWF0Y2hl
cy5zaXplKCkpOworICAgICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzc1JhbmdlKGNoYXJhY3Rl
ciwgZmFpbHVyZXMsIG1hdGNoRGVzdCwgY2hhckNsYXNzLT5tX3Jhbmdlcy5kYXRhKCksIGNoYXJD
bGFzcy0+bV9yYW5nZXMuc2l6ZSgpLCAmbWF0Y2hJbmRleCwgY2hhckNsYXNzLT5tX21hdGNoZXMu
ZGF0YSgpLCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5zaXplKCkpOwogICAgICAgICAgICAgd2hpbGUg
KG1hdGNoSW5kZXggPCBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5zaXplKCkpCiAgICAgICAgICAgICAg
ICAgbWF0Y2hEZXN0LmFwcGVuZChicmFuY2gzMihFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMigodW5z
aWduZWQgc2hvcnQpY2hhckNsYXNzLT5tX21hdGNoZXNbbWF0Y2hJbmRleCsrXSkpKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvaiBiL1NvdXJjZS9XVEYv
V1RGLnZjeHByb2ovV1RGLnZjeHByb2oKaW5kZXggZDExNjAyNWFiNGNkMDYxZWU5MDVlYzkxYTYz
ODY2ZGM4OGVkMzk5MS4uM2U1YjUzNmE1MmY5MGNlYzFmZmJhMzhkMGIxZjBjZDQ1ZjJkOWQxMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagorKysgYi9Tb3Vy
Y2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCkBAIC0yMjUsNiArMjI1LDcgQEAKICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxIYXNoVGFibGUuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHd0ZlxIYXNoVHJhaXRzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlx3dGZcSGV4TnVtYmVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZc
SW5kZXhlZEl0ZXJhdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSXRl
cmF0b3JBZGFwdG9ycy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEl0ZXJh
dG9yUmFuZ2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxMaXN0SGFzaFNl
dC5oIiAvPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvai5m
aWx0ZXJzIGIvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0ZXJzCmluZGV4
IGY2ZDZmOWRlNjcwYjg2ZTA3MGRmZjhlYTc2MDhkOGU4MDdjOWFmYWYuLmVlNDFhMDUxNmIzNmQx
MTAwNmY1ZmNhZjhlMWUwNmVjOWVhZDFiYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnZj
eHByb2ovV1RGLnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dU
Ri52Y3hwcm9qLmZpbHRlcnMKQEAgLTQ4Nyw2ICs0ODcsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cd3RmXEhleE51bWJlci5oIj4KICAgICAgIDxGaWx0ZXI+d3RmPC9GaWx0ZXI+CiAg
ICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSW5kZXhlZEl0
ZXJhdG9yLmgiPgorICAgICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxJdGVyYXRvckFkYXB0b3JzLmgiPgogICAg
ICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDIxZDFhMGY0MmE3ODc4MjVkMDQ1ODEwNmZj
ZDZlZjgyY2VhOWUyMGMuLjRjMmVlMWVkYTIxNGExZjA0NGMzMTRhZDU2MWQzZWU3NmNhY2VlOWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTEzLDYgKzEx
Myw3IEBACiAJCUE3NDg3NDUyMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NDg3NDRG
MTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCAqLzsgfTsKIAkJQTc0ODc0
NTMxN0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NDg3NDUwMTdBMEJEQUUwMEZBMDRDQiAv
KiBTaXhDaGFyYWN0ZXJIYXNoLmggKi87IH07CiAJCUE3NDg3NDU0MTdBMEJEQUUwMEZBMDRDQiAv
KiBTdHJpbmdIYXNoRHVtcENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3NDg3NDUxMTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJpbmdIYXNoRHVt
cENvbnRleHQuaCAqLzsgfTsKKwkJQTdEQzJGMDQxQTA5QTIyRDAwNzJGNEUzIC8qIEluZGV4ZWRJ
dGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTdEQzJGMDMxQTA5OURFMzAwNzJGNEUzIC8qIEluZGV4ZWRJdGVyYXRvci5oICovOyB9OwogCQlB
ODc2REJEODE1MTgxNkU1MDBEQURCOTUgLyogUGxhdGZvcm0uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzZEQkQ3MTUxODE2RTUwMERBREI5NSAvKiBQ
bGF0Zm9ybS5oICovOyB9OwogCQlBOEE0NzM4NTE1MUE4MjVCMDA0MTIzRkYgLyogQVNDSUlDVHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcy
NUExNTFBODI1QTAwNDEyM0ZGIC8qIEFTQ0lJQ1R5cGUuaCAqLzsgfTsKIAkJQThBNDczODYxNTFB
ODI1QjAwNDEyM0ZGIC8qIEFzc2VydGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcyNUIxNTFBODI1QTAwNDEyM0ZGIC8qIEFzc2VydGlv
bnMuY3BwICovOyB9OwpAQCAtNDA3LDYgKzQwOCw3IEBACiAJCUE3NDg3NDRGMTdBMEJEQUUwMEZB
MDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNpeENoYXJhY3Rlckhhc2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBNzQ4NzQ1MDE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaXhDaGFyYWN0ZXJIYXNoLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NDg3NDUxMTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJpbmdI
YXNoRHVtcENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5n
SGFzaER1bXBDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3REMyRjAz
MUEwOTlERTMwMDcyRjRFMyAvKiBJbmRleGVkSXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5k
ZXhlZEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4NzZEQkQ3MTUx
ODE2RTUwMERBREI5NSAvKiBQbGF0Zm9ybS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQbGF0Zm9ybS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzI1QTE1
MUE4MjVBMDA0MTIzRkYgLyogQVNDSUlDVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBU0NJSUNUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3
MjVCMTUxQTgyNUEwMDQxMjNGRiAvKiBBc3NlcnRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEFzc2VydGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtODk2LDYgKzg5OCw3IEBACiAJCQkJRTRBMEFEMzgxQTk2MjQ1NTAwNTM2REY2IC8q
IFdvcmtRdWV1ZS5oICovLAogCQkJCUE4QTQ3MzdBMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJl
YWREYXRhLmNwcCAqLywKIAkJCQlBOEE0NzM3QjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFk
RGF0YS5oICovLAorCQkJCUE3REMyRjAzMUEwOTlERTMwMDcyRjRFMyAvKiBJbmRleGVkSXRlcmF0
b3IuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gd3RmOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKQEAgLTEwODIsNiArMTA4NSw3IEBACiAJCQkJQThBNDczQUQxNTFBODI1QjAwNDEyM0ZGIC8q
IGNhY2hlZC1wb3dlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDVFMTUxQTgyNUIwMDQx
MjNGRiAvKiBDaGFyYWN0ZXJOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOTQxNTFB
ODI1QjAwNDEyM0ZGIC8qIENoZWNrZWRBcml0aG1ldGljLmggaW4gSGVhZGVycyAqLywKKwkJCQlB
N0RDMkYwNDFBMDlBMjJEMDA3MkY0RTMgLyogSW5kZXhlZEl0ZXJhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzM5NTE1MUE4MjVCMDA0MTIzRkYgLyogQ2hlY2tlZEJvb2xlYW4uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDVGMTUxQTgyNUIwMDQxMjNGRiAvKiBDb2xsYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZDNEVERTYxNjk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRl
ci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9JbmRleGVkSXRl
cmF0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL0luZGV4ZWRJdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0
MWM4OGM5OTgwZmQzZTE2ODZhM2Q3OTdkOThjZjc2YzBiMGVhNWQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9JbmRleGVkSXRlcmF0b3IuaApAQCAtMCwwICsxLDM2NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV1RGX0lu
ZGV4ZWRJdGVyYXRvcl9oCisjZGVmaW5lIFdURl9JbmRleGVkSXRlcmF0b3JfaAorCituYW1lc3Bh
Y2UgV1RGIHsKKworI2RlZmluZSBJTkRFWEVEX0lURVJBVE9SX09WRVJGTE9XKGNoZWNrKSBkbyB7
XAorICAgIGlmICghKGNoZWNrKSlcCisgICAgICAgIE92ZXJmbG93SGFuZGxlcjo6b3ZlcmZsb3dl
ZCgpO1wKK30gd2hpbGUgKDApCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWZWN0b3JUeXBlLCB0eXBl
bmFtZSBULCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIgPSBDcmFzaE9uT3ZlcmZsb3c+IHN0cnVj
dCBJbmRleGVkSXRlcmF0b3IgeworICAgIHR5cGVkZWYgc3RydWN0IEluZGV4ZWRJdGVyYXRvcjxj
b25zdCBWZWN0b3JUeXBlLCBjb25zdCBULCBPdmVyZmxvd0hhbmRsZXI+IGNvbnN0X2l0ZXJhdG9y
OworCisgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm
ZXJlbmNlX3R5cGU7CisgICAgdHlwZWRlZiBWYWx1ZVR5cGUgdmFsdWVfdHlwZTsKKyAgICB0eXBl
ZGVmIFZhbHVlVHlwZSogcG9pbnRlcjsKKyAgICB0eXBlZGVmIFZhbHVlVHlwZSYgcmVmZXJlbmNl
OworICAgIHR5cGVkZWYgc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j
YXRlZ29yeTsKKworICAgIEluZGV4ZWRJdGVyYXRvcigpCisgICAgICAgIDogbV92ZWN0b3IobnVs
bHB0cikKKyAgICAgICAgLCBtX3Bvc2l0aW9uKDApCisgICAgeworICAgIH0KKworICAgIEluZGV4
ZWRJdGVyYXRvcihzdGQ6Om51bGxwdHJfdCkKKyAgICAgICAgOiBtX3ZlY3RvcihudWxscHRyKQor
ICAgICAgICAsIG1fcG9zaXRpb24oMCkKKyAgICB7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJh
dG9yKFZlY3RvclR5cGUmIHZlY3RvciwgVmFsdWVUeXBlKiBwb3NpdGlvbikKKyAgICAgICAgOiBt
X3ZlY3RvcigmdmVjdG9yKQorICAgICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24gLSB2ZWN0b3Iu
ZGF0YSgpKQorICAgIHsKKyAgICB9CisKKyAgICBJbmRleGVkSXRlcmF0b3IoY29uc3QgSW5kZXhl
ZEl0ZXJhdG9yJiBvdGhlcikKKyAgICAgICAgOiBtX3ZlY3RvcihvdGhlci5tX3ZlY3RvcikKKyAg
ICAgICAgLCBtX3Bvc2l0aW9uKG90aGVyLm1fcG9zaXRpb24pCisgICAgeworICAgIH0KKworICAg
IFZhbHVlVHlwZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZtX3ZlY3Rvci0+YXQobV9w
b3NpdGlvbik7IH0KKyAgICBWYWx1ZVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1f
dmVjdG9yLT5hdChtX3Bvc2l0aW9uKTsgfQorICAgIFZhbHVlVHlwZSogZ2V0KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmICghbV92ZWN0b3IpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgSU5ERVhFRF9JVEVSQVRPUl9PVkVSRkxPVyhtX3Bvc2l0aW9uIDw9IG1fdmVjdG9y
LT5zaXplKCkpOworICAgICAgICByZXR1cm4gbV92ZWN0b3ItPmRhdGEoKSArIG1fcG9zaXRpb247
CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICB7CisgICAg
ICAgIG1fcG9zaXRpb24rKzsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIElu
ZGV4ZWRJdGVyYXRvciBvcGVyYXRvcisrKGludCkKKyAgICB7CisgICAgICAgIEluZGV4ZWRJdGVy
YXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICBtX3Bvc2l0aW9uKys7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgSW5kZXhlZEl0ZXJhdG9yJiBvcGVyYXRvci0tKCkKKyAg
ICB7CisgICAgICAgIG1fcG9zaXRpb24tLTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0K
KworICAgIEluZGV4ZWRJdGVyYXRvciBvcGVyYXRvci0tKGludCkKKyAgICB7CisgICAgICAgIElu
ZGV4ZWRJdGVyYXRvciByZXN1bHQoKnRoaXMpOworICAgICAgICBtX3Bvc2l0aW9uLS07CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy8gVGhpcyBjb252ZXJzaW9uIG9wZXJh
dG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGJvb2wgYnV0IG5vdCB0byBvdGhlciBp
bnRlZ2VyIHR5cGVzLgorICAgIHR5cGVkZWYgc2l6ZV90IChJbmRleGVkSXRlcmF0b3I6OipVbnNw
ZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV92ZWN0b3IgPyAmSW5kZXhlZEl0ZXJhdG9yOjptX3Bvc2l0aW9uIDogbnVs
bHB0cjsgfQorCisjaWYgX19TSVpFT0ZfU0laRV9UX18gIT0gX19TSVpFT0ZfSU5UX18gfHwgUExB
VEZPUk0oQ09DT0EpCisjZGVmaW5lIF9VTlNJR05FRF9JZl9ESUZGRVJFTlQobWFjcm8pIG1hY3Jv
KHVuc2lnbmVkKQorI2Vsc2UKKyNkZWZpbmUgX1VOU0lHTkVEX0lmX0RJRkZFUkVOVChtYWNybykK
KyNlbmRpZgorCisjZGVmaW5lIEZPUl9FQUNIX0lOVEVHRVJfVFlQRShtYWNybykgXAorICAgIG1h
Y3JvKHNpemVfdCkgXAorICAgIG1hY3JvKGludDMyX3QpIFwKKyAgICBtYWNybyhsb25nKSBcCisg
ICAgbWFjcm8obG9uZyBsb25nKSBcCisgICAgbWFjcm8odW5zaWduZWQgbG9uZyBsb25nKSBcCisg
ICAgX1VOU0lHTkVEX0lmX0RJRkZFUkVOVChtYWNybykKKworI2RlZmluZSBNT0RJRklFUl9PUFMo
dHlwZSkgXAorICAgIEluZGV4ZWRJdGVyYXRvciYgb3BlcmF0b3IrPSh0eXBlIGluY3JlbWVudCkg
XAorICAgIHsgXAorICAgICAgICBtX3Bvc2l0aW9uICs9IGluY3JlbWVudDsgXAorICAgICAgICBy
ZXR1cm4gKnRoaXM7IFwKKyAgICB9IFwKK1wKKyAgICBJbmRleGVkSXRlcmF0b3ImIG9wZXJhdG9y
LT0odHlwZSBkZWNyZW1lbnQpIFwKKyAgICB7IFwKKyAgICAgICAgbV9wb3NpdGlvbiAtPSBkZWNy
ZW1lbnQ7IFwKKyAgICAgICAgcmV0dXJuICp0aGlzOyBcCisgICAgfQorCisgICAgRk9SX0VBQ0hf
SU5URUdFUl9UWVBFKE1PRElGSUVSX09QUykKKworI3VuZGVmIE1PRElGSUVSX09QUworCisjZGVm
aW5lIEFSSVRITUVUSUNfT1BTKHR5cGUpIFwKKyAgICBJbmRleGVkSXRlcmF0b3Igb3BlcmF0b3Ir
KHR5cGUgaW5jcmVtZW50KSBjb25zdCBcCisgICAgeyBcCisgICAgICAgIEluZGV4ZWRJdGVyYXRv
ciByZXN1bHQoKnRoaXMpOyBcCisgICAgICAgIHJlc3VsdC5tX3Bvc2l0aW9uICs9IGluY3JlbWVu
dDsgXAorICAgICAgICByZXR1cm4gcmVzdWx0OyBcCisgICAgfSBcCitcCisgICAgSW5kZXhlZEl0
ZXJhdG9yIG9wZXJhdG9yLSh0eXBlIGRlY3JlbWVudCkgY29uc3QgXAorICAgIHsgXAorICAgICAg
ICBJbmRleGVkSXRlcmF0b3IgcmVzdWx0KCp0aGlzKTsgXAorICAgICAgICByZXN1bHQubV9wb3Np
dGlvbiAtPSBkZWNyZW1lbnQ7IFwKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgIH0KKwor
CisgICAgRk9SX0VBQ0hfSU5URUdFUl9UWVBFKEFSSVRITUVUSUNfT1BTKQorCisjdW5kZWYgQVJJ
VEhNRVRJQ19PUFMKKworICAgIHB0cmRpZmZfdCBvcGVyYXRvci0oY29uc3QgY29uc3RfaXRlcmF0
b3ImIHJpZ2h0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcG9zaXRpb24gLSByaWdo
dC5tX3Bvc2l0aW9uOworICAgIH0KKworICAgIHB0cmRpZmZfdCBvcGVyYXRvci0oY29uc3QgVmFs
dWVUeXBlKiByaWdodCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBnZXQoKSAtIHJpZ2h0
OworICAgIH0KKworICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IEluZGV4ZWRJdGVyYXRvciYgb3Ro
ZXIpCisgICAgeworICAgICAgICBtX3ZlY3RvciA9IG90aGVyLm1fdmVjdG9yOworICAgICAgICBt
X3Bvc2l0aW9uID0gb3RoZXIubV9wb3NpdGlvbjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIHVuc2FmZUdldCgpID09IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gdW5zYWZlR2V0KCkgIT0gb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPT0gb3RoZXI7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFZhbHVlVHlwZSogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gdW5zYWZlR2V0KCkgIT0gb3RoZXI7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgVmFsdWVUeXBlKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1bnNh
ZmVHZXQoKSA8IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBWYWx1
ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpIDw9
IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGNvbnN0X2l0ZXJhdG9y
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA8IG90aGVy
LnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBjb25zdF9p
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkg
PD0gb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3Qg
SW5kZXhlZEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1bnNh
ZmVHZXQoKSA+IG90aGVyLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+
PShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gdW5zYWZlR2V0KCkgPj0gb3RoZXIudW5zYWZlR2V0KCk7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvcj4oY29uc3QgVmFsdWVUeXBlKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiB1bnNhZmVHZXQoKSA+IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+PShj
b25zdCBWYWx1ZVR5cGUqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuc2Fm
ZUdldCgpID49IG90aGVyOworICAgIH0KKworICAgIG9wZXJhdG9yIGNvbnN0X2l0ZXJhdG9yKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fdmVjdG9yID0gbV92ZWN0b3I7CisgICAgICAgIHJlc3VsdC5tX3Bvc2l0aW9uID0gbV9w
b3NpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBWZWN0b3JUeXBl
KiBtX3ZlY3RvcjsKKyAgICBzaXplX3QgbV9wb3NpdGlvbjsKKworICAgIFZhbHVlVHlwZSogdW5z
YWZlR2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV92ZWN0b3IpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGdldCgpOworICAgIH0KK307CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4KK2lubGluZSB0eXBlbmFtZSBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBP
dmVyZmxvd0hhbmRsZXI+OjpWYWx1ZVR5cGUqIGdldFB0cihJbmRleGVkSXRlcmF0b3I8VCwgVmFs
dWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+IHApCit7CisgICAgcmV0dXJuIHAuZ2V0KCk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4KK2lubGluZSBwdHJkaWZmX3Qgb3BlcmF0b3ItKGNvbnN0IFZhbHVlVHlwZSog
bGVmdCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVy
PiYgcmlnaHQpCit7CisgICAgcmV0dXJuIGxlZnQgLSByaWdodC5nZXQoKTsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyPgoraW5saW5lIHB0cmRpZmZfdCBvcGVyYXRvci0oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJ
bmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sK
KyAgICByZXR1cm4gbGVmdCAtIHJpZ2h0LmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUg
cHRyZGlmZl90IG9wZXJhdG9yLShjb25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJ
dGVyYXRvcjxjb25zdCBULCBjb25zdCBWYWx1ZVR5cGUsIE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0
KQoreworICAgIHJldHVybiBsZWZ0IC0gcmlnaHQuZ2V0KCk7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lu
bGluZSBib29sIG9wZXJhdG9yPT0oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0
b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4g
cmlnaHQgPT0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVl
VHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUs
IE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA9PSBsZWZ0Owor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFZhbHVlVHlwZSogbGVmdCwg
Y29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmln
aHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ICE9IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRl
cmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1
cm4gcmlnaHQgIT0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZh
bHVlVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I8
PShWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUsIE92
ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA+PSBsZWZ0OworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFZhbHVlVHlwZSogbGVm
dCwgY29uc3QgSW5kZXhlZEl0ZXJhdG9yPFQsIFZhbHVlVHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiYg
cmlnaHQpCit7CisgICAgcmV0dXJuIHJpZ2h0ID49IGxlZnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lu
bGluZSBib29sIG9wZXJhdG9yPj0oVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0
b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4g
cmlnaHQgPD0gbGVmdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVl
VHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I+PShj
b25zdCBWYWx1ZVR5cGUqIGxlZnQsIGNvbnN0IEluZGV4ZWRJdGVyYXRvcjxULCBWYWx1ZVR5cGUs
IE92ZXJmbG93SGFuZGxlcj4mIHJpZ2h0KQoreworICAgIHJldHVybiByaWdodCA8PSBsZWZ0Owor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoVmFsdWVUeXBlKiBsZWZ0LCBj
b25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdo
dCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPiBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0
b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4g
cmlnaHQgPiBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVU
eXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oVmFs
dWVUeXBlKiBsZWZ0LCBjb25zdCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxv
d0hhbmRsZXI+JiByaWdodCkKK3sKKyAgICByZXR1cm4gcmlnaHQgPCBsZWZ0OworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgVmFsdWVUeXBlKiBsZWZ0LCBjb25z
dCBJbmRleGVkSXRlcmF0b3I8VCwgVmFsdWVUeXBlLCBPdmVyZmxvd0hhbmRsZXI+JiByaWdodCkK
K3sKKyAgICByZXR1cm4gcmlnaHQgPCBsZWZ0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmVj
dG9yVHlwZSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiBzdHJ1Y3QgSW5kZXhlZEl0ZXJhdG9y
U2VsZWN0b3IgeworICAgIHR5cGVkZWYgdHlwZW5hbWUgVmVjdG9yVHlwZTo6VmFsdWVUeXBlIFZh
bHVlVHlwZTsKKyAgICB0eXBlZGVmIEluZGV4ZWRJdGVyYXRvcjxWZWN0b3JUeXBlLCBWYWx1ZVR5
cGUsIE92ZXJmbG93SGFuZGxlcj4gaXRlcmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgc3RhdGljIGl0ZXJhdG9y
IG1ha2VJdGVyYXRvcihWZWN0b3JUeXBlJiB2ZWN0b3IsIFZhbHVlVHlwZSogcCkgeyByZXR1cm4g
aXRlcmF0b3IodmVjdG9yLCBwKTsgfQorICAgIHN0YXRpYyBjb25zdF9pdGVyYXRvciBtYWtlQ29u
c3RJdGVyYXRvcihjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IsIGNvbnN0IFZhbHVlVHlwZSogcCkg
eyByZXR1cm4gY29uc3RfaXRlcmF0b3IodmVjdG9yLCBwKTsgfQorfTsKKworI3VuZGVmIElOREVY
RURfSVRFUkFUT1JfT1ZFUkZMT1cKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oIGIvU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5
LmgKaW5kZXggNzk4NjlhOWVkNGJlYWMyNDYxMjNmNzg3YjY3MTk0NDI2ZTgwMzc5ZC4uY2RmYmY4
MTg5NTIwNWJkYWFhNzI2MTA1ZTY3MzMyZjcwYzMxY2FkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvUmVmQ291bnRlZEFycmF5LmgKKysrIGIvU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFy
cmF5LmgKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogICAgICAgICBIZWFkZXI6OmZyb21QYXls
b2FkKG1fZGF0YSktPnJlZkNvdW50ID0gMTsKICAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZCht
X2RhdGEpLT5sZW5ndGggPSBvdGhlci5zaXplKCk7CiAgICAgICAgIEFTU0VSVChIZWFkZXI6OmZy
b21QYXlsb2FkKG1fZGF0YSktPmxlbmd0aCA9PSBvdGhlci5zaXplKCkpOwotICAgICAgICBWZWN0
b3JUeXBlT3BlcmF0aW9uczxUPjo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSwgb3Ro
ZXIuZW5kKCksIG1fZGF0YSk7CisgICAgICAgIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+Ojp1bmlu
aXRpYWxpemVkQ29weShnZXRQdHIob3RoZXIuYmVnaW4oKSksIGdldFB0cihvdGhlci5lbmQoKSks
IG1fZGF0YSk7CiAgICAgfQogICAgIAogICAgIFJlZkNvdW50ZWRBcnJheSYgb3BlcmF0b3I9KGNv
bnN0IFJlZkNvdW50ZWRBcnJheSYgb3RoZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9W
ZWN0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCmluZGV4IDE4OGQ3NmRhZDc4ZjNjZmRl
MjNiNWY0Y2RiNzVkZGE2NmMyMzFkMzMuLjk2NmMwOWFjMDgyZDFkZTA3ZGZlOWM3NGVmYmQ0ZDhi
ZDJiZWIwOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1ZlY3Rvci5oCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4K
ICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvSW5kZXhlZEl0
ZXJhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTU4NSwxNCArNTg3
LDE3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IDAsIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlciA9IENyYXNoCiBjbGFzcyBWZWN0b3IgOiBwcml2YXRlIFZl
Y3RvckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHJpdmF0ZToKKwogICAgIHR5cGVkZWYgVmVjdG9yQnVmZmVyPFQsIGlubGluZUNhcGFj
aXR5PiBCYXNlOwogICAgIHR5cGVkZWYgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD4gVHlwZU9wZXJh
dGlvbnM7CisgICAgdHlwZWRlZiBJbmRleGVkSXRlcmF0b3JTZWxlY3RvcjxWZWN0b3IsIE92ZXJm
bG93SGFuZGxlcj4gSXRlcmF0b3JTZWxlY3RvcjsKIAogcHVibGljOgogICAgIHR5cGVkZWYgVCBW
YWx1ZVR5cGU7CiAKLSAgICB0eXBlZGVmIFQqIGl0ZXJhdG9yOwotICAgIHR5cGVkZWYgY29uc3Qg
VCogY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBJdGVyYXRvclNlbGVjdG9y
OjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEl0ZXJhdG9yU2VsZWN0
b3I6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworCiAgICAgdHlwZWRlZiBzdGQ6OnJl
dmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CiAgICAgdHlwZWRlZiBz
dGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0
b3I7CiAKQEAgLTYwNyw3ICs2MTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGFzYW5TZXRJbml0aWFs
QnVmZmVyU2l6ZVRvKHNpemUpOwogCiAgICAgICAgIGlmIChiZWdpbigpKQotICAgICAgICAgICAg
VHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoYmVnaW4oKSwgZW5kKCkpOworICAgICAgICAgICAg
VHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoZ2V0UHRyKGJlZ2luKCkpLCBnZXRQdHIoZW5kKCkp
KTsKICAgICB9CiAKICAgICBWZWN0b3Ioc2l6ZV90IHNpemUsIGNvbnN0IFQmIHZhbCkKQEAgLTYx
Niw3ICs2MjEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGFzYW5TZXRJbml0aWFsQnVmZmVyU2l6ZVRv
KHNpemUpOwogCiAgICAgICAgIGlmIChiZWdpbigpKQotICAgICAgICAgICAgVHlwZU9wZXJhdGlv
bnM6OnVuaW5pdGlhbGl6ZWRGaWxsKGJlZ2luKCksIGVuZCgpLCB2YWwpOworICAgICAgICAgICAg
VHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRGaWxsKGdldFB0cihiZWdpbigpKSwgZ2V0UHRy
KGVuZCgpKSwgdmFsKTsKICAgICB9CiAKICAgICBWZWN0b3Ioc3RkOjppbml0aWFsaXplcl9saXN0
PFQ+IGluaXRpYWxpemVyTGlzdCkKQEAgLTY4NSwxMCArNjkwLDEwIEBAIHB1YmxpYzoKICAgICBj
b25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gQmFzZTo6YnVmZmVyKCk7IH0KICAgICBzdGF0
aWMgcHRyZGlmZl90IGRhdGFNZW1vcnlPZmZzZXQoKSB7IHJldHVybiBCYXNlOjpidWZmZXJNZW1v
cnlPZmZzZXQoKTsgfQogCi0gICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBkYXRhKCk7IH0K
LSAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBiZWdpbigpICsgbV9zaXplOyB9Ci0gICAgY29u
c3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBkYXRhKCk7IH0KLSAgICBjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBiZWdpbigpICsgbV9zaXplOyB9CisgICAgaXRl
cmF0b3IgYmVnaW4oKSB7IHJldHVybiBJdGVyYXRvclNlbGVjdG9yOjptYWtlSXRlcmF0b3IoKnRo
aXMsIGRhdGEoKSk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBiZWdpbigpICsgc2l6
ZSgpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBJdGVyYXRv
clNlbGVjdG9yOjptYWtlQ29uc3RJdGVyYXRvcigqdGhpcywgZGF0YSgpKTsgfQorICAgIGNvbnN0
X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgKyBzaXplKCk7IH0KIAogICAg
IHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQo
KSk7IH0KICAgICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJh
dG9yKGJlZ2luKCkpOyB9CkBAIC03MjksNiArNzM0LDcgQEAgcHVibGljOgogICAgIHZvaWQgdW5j
aGVja2VkQXBwZW5kKFZhbHVlVHlwZSYmIHZhbHVlKSB7IHVuY2hlY2tlZEFwcGVuZDxWYWx1ZVR5
cGU+KHN0ZDo6Zm9yd2FyZDxWYWx1ZVR5cGU+KHZhbHVlKSk7IH0KICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiB2b2lkIHVuY2hlY2tlZEFwcGVuZChVJiYpOwogCisgICAgdm9pZCBhcHBlbmQoY29u
c3RfaXRlcmF0b3IsIHNpemVfdCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCBhcHBl
bmQoY29uc3QgVSosIHNpemVfdCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IG90
aGVyQ2FwYWNpdHk+IHZvaWQgYXBwZW5kVmVjdG9yKGNvbnN0IFZlY3RvcjxVLCBvdGhlckNhcGFj
aXR5PiYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGJvb2wgdHJ5QXBwZW5kKGNvbnN0IFUq
LCBzaXplX3QpOwpAQCAtODE1LDcgKzgyMSw3IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OlZlY3Rvcihjb25zdCBWZWN0b3ImIG90CiAg
ICAgYXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8ob3RoZXIuc2l6ZSgpKTsKIAogICAgIGlmIChi
ZWdpbigpKQotICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXIu
YmVnaW4oKSwgb3RoZXIuZW5kKCksIGJlZ2luKCkpOworICAgICAgICBUeXBlT3BlcmF0aW9uczo6
dW5pbml0aWFsaXplZENvcHkoZ2V0UHRyKG90aGVyLmJlZ2luKCkpLCBnZXRQdHIob3RoZXIuZW5k
KCkpLCBnZXRQdHIoYmVnaW4oKSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFj
aXR5PgpAQCAtODI2LDcgKzgzMiw3IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OlZlY3Rvcihjb25zdCBWZWN0b3I8VCwKICAgICBhc2Fu
U2V0SW5pdGlhbEJ1ZmZlclNpemVUbyhvdGhlci5zaXplKCkpOwogCiAgICAgaWYgKGJlZ2luKCkp
Ci0gICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigp
LCBvdGhlci5lbmQoKSwgYmVnaW4oKSk7CisgICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRp
YWxpemVkQ29weShnZXRQdHIob3RoZXIuYmVnaW4oKSksIGdldFB0cihvdGhlci5lbmQoKSksIGdl
dFB0cihiZWdpbigpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CkBA
IC04NDUsOCArODUxLDggQEAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXIsIG1pbkNhcGFjaXR5PiYgVmVjdG9yPFQsIGlubGluZUNhcGFjaXQKIAogICAgIGFzYW5CdWZm
ZXJTaXplV2lsbENoYW5nZVRvKG90aGVyLnNpemUoKSk7CiAKLSAgICBzdGQ6OmNvcHkob3RoZXIu
YmVnaW4oKSwgb3RoZXIuYmVnaW4oKSArIHNpemUoKSwgYmVnaW4oKSk7Ci0gICAgVHlwZU9wZXJh
dGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCkgKyBzaXplKCksIG90aGVyLmVu
ZCgpLCBlbmQoKSk7CisgICAgc3RkOjpjb3B5KGdldFB0cihvdGhlci5iZWdpbigpKSwgZ2V0UHRy
KG90aGVyLmJlZ2luKCkgKyBzaXplKCkpLCBnZXRQdHIoYmVnaW4oKSkpOworICAgIFR5cGVPcGVy
YXRpb25zOjp1bmluaXRpYWxpemVkQ29weShnZXRQdHIob3RoZXIuYmVnaW4oKSArIHNpemUoKSks
IGdldFB0cihvdGhlci5lbmQoKSksIGdldFB0cihlbmQoKSkpOwogICAgIG1fc2l6ZSA9IG90aGVy
LnNpemUoKTsKIAogICAgIHJldHVybiAqdGhpczsKQEAgLTg3Myw4ICs4NzksOCBAQCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdAogICAgIAogICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG90
aGVyLnNpemUoKSk7CiAKLSAgICBzdGQ6OmNvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuYmVnaW4o
KSArIHNpemUoKSwgYmVnaW4oKSk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRD
b3B5KG90aGVyLmJlZ2luKCkgKyBzaXplKCksIG90aGVyLmVuZCgpLCBlbmQoKSk7CisgICAgc3Rk
Ojpjb3B5KGdldFB0cihvdGhlci5iZWdpbigpKSwgZ2V0UHRyKG90aGVyLmJlZ2luKCkgKyBzaXpl
KCkpLCBnZXRQdHIoYmVnaW4oKSkpOworICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVk
Q29weShnZXRQdHIob3RoZXIuYmVnaW4oKSArIHNpemUoKSksIGdldFB0cihvdGhlci5lbmQoKSks
IGdldFB0cihlbmQoKSkpOwogICAgIG1fc2l6ZSA9IG90aGVyLnNpemUoKTsKIAogICAgIHJldHVy
biAqdGhpczsKQEAgLTkzNiw4ICs5NDIsOCBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmZpbGwoY29uc3QgVCYgdmFsLAogCiAg
ICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obmV3U2l6ZSk7CiAKLSAgICBzdGQ6OmZpbGwo
YmVnaW4oKSwgZW5kKCksIHZhbCk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRG
aWxsKGVuZCgpLCBiZWdpbigpICsgbmV3U2l6ZSwgdmFsKTsKKyAgICBzdGQ6OmZpbGwoZ2V0UHRy
KGJlZ2luKCkpLCBnZXRQdHIoZW5kKCkpLCB2YWwpOworICAgIFR5cGVPcGVyYXRpb25zOjp1bmlu
aXRpYWxpemVkRmlsbChnZXRQdHIoZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkgKyBuZXdTaXplLCB2
YWwpOwogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiB9CiAKQEAgLTk1OCwxMyArOTY0LDEzIEBAIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5
Pjo6ZXhwYW5kQ2FwYWNpdHkoc2l6CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5Pgog
VCogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5
Pjo6ZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBUKiBwdHIpCiB7Ci0gICAg
aWYgKHB0ciA8IGJlZ2luKCkgfHwgcHRyID49IGVuZCgpKSB7CisgICAgaWYgKHB0ciA8IGdldFB0
cihiZWdpbigpKSB8fCBwdHIgPj0gZ2V0UHRyKGVuZCgpKSkgewogICAgICAgICBleHBhbmRDYXBh
Y2l0eShuZXdNaW5DYXBhY2l0eSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogICAgIHNp
emVfdCBpbmRleCA9IHB0ciAtIGJlZ2luKCk7CiAgICAgZXhwYW5kQ2FwYWNpdHkobmV3TWluQ2Fw
YWNpdHkpOwotICAgIHJldHVybiBiZWdpbigpICsgaW5kZXg7CisgICAgcmV0dXJuIGdldFB0cihi
ZWdpbigpICsgaW5kZXgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgpA
QCAtOTc2LDE1ICs5ODIsMTUgQEAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojp0cnlFeHBhbmRDYXBhY2l0eSgKIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
LCBzaXplX3QgbWluQ2FwYWNpdHk+CiBjb25zdCBUKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojp0cnlFeHBhbmRDYXBhY2l0eShzaXplX3Qg
bmV3TWluQ2FwYWNpdHksIGNvbnN0IFQqIHB0cikKIHsKLSAgICBpZiAocHRyIDwgYmVnaW4oKSB8
fCBwdHIgPj0gZW5kKCkpIHsKKyAgICBpZiAocHRyIDwgZ2V0UHRyKGJlZ2luKCkpIHx8IHB0ciA+
PSBnZXRQdHIoZW5kKCkpKSB7CiAgICAgICAgIGlmICghdHJ5RXhwYW5kQ2FwYWNpdHkobmV3TWlu
Q2FwYWNpdHkpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBwdHI7CiAg
ICAgfQotICAgIHNpemVfdCBpbmRleCA9IHB0ciAtIGJlZ2luKCk7CisgICAgc2l6ZV90IGluZGV4
ID0gKHB0ciAtIGJlZ2luKCkpOwogICAgIGlmICghdHJ5RXhwYW5kQ2FwYWNpdHkobmV3TWluQ2Fw
YWNpdHkpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gYmVnaW4oKSArIGluZGV4Owor
ICAgIHJldHVybiBnZXRQdHIoYmVnaW4oKSArIGluZGV4KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNp
emVfdCBtaW5DYXBhY2l0eT4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KQEAgLTk5OCwxNCArMTAwNCwx
NCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbgogaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6cmVzaXplKHNpemVfdCBz
aXplKQogewogICAgIGlmIChzaXplIDw9IG1fc2l6ZSkgewotICAgICAgICBUeXBlT3BlcmF0aW9u
czo6ZGVzdHJ1Y3QoYmVnaW4oKSArIHNpemUsIGVuZCgpKTsKKyAgICAgICAgVHlwZU9wZXJhdGlv
bnM6OmRlc3RydWN0KGdldFB0cihiZWdpbigpICsgc2l6ZSksIGdldFB0cihlbmQoKSkpOwogICAg
ICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhzaXplKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgICAgICBleHBhbmRDYXBhY2l0eShz
aXplKTsKICAgICAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8oc2l6ZSk7CiAgICAgICAg
IGlmIChiZWdpbigpKQotICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoZW5k
KCksIGJlZ2luKCkgKyBzaXplKTsKKyAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0aWFs
aXplKGdldFB0cihlbmQoKSksIGdldFB0cihiZWdpbigpKSArIHNpemUpOwogICAgIH0KICAgICAK
ICAgICBtX3NpemUgPSBzaXplOwpAQCAtMTAyMiw3ICsxMDI4LDcgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNp
emVfdCBtaW4KIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIs
IG1pbkNhcGFjaXR5Pjo6c2hyaW5rKHNpemVfdCBzaXplKQogewogICAgIEFTU0VSVChzaXplIDw9
IG1fc2l6ZSk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0KGJlZ2luKCkgKyBzaXplLCBl
bmQoKSk7CisgICAgVHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0KGdldFB0cihiZWdpbigpICsgc2l6
ZSksIGdldFB0cihlbmQoKSkpOwogICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKHNpemUp
OwogICAgIG1fc2l6ZSA9IHNpemU7CiB9CkBAIC0xMDM1LDcgKzEwNDEsNyBAQCB2b2lkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46Omdyb3co
c2l6ZV90IHNpemUpCiAgICAgICAgIGV4cGFuZENhcGFjaXR5KHNpemUpOwogICAgIGFzYW5CdWZm
ZXJTaXplV2lsbENoYW5nZVRvKHNpemUpOwogICAgIGlmIChiZWdpbigpKQotICAgICAgICBUeXBl
T3BlcmF0aW9uczo6aW5pdGlhbGl6ZShlbmQoKSwgYmVnaW4oKSArIHNpemUpOworICAgICAgICBU
eXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShnZXRQdHIoZW5kKCkpLCBnZXRQdHIoYmVnaW4oKSkg
KyBzaXplKTsKICAgICBtX3NpemUgPSBzaXplOwogfQogCkBAIC0xMDg2LDggKzEwOTIsOCBAQCB2
b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eT46OnJlc2VydmVDYXBhY2l0eShzaQogewogICAgIGlmIChuZXdDYXBhY2l0eSA8PSBjYXBhY2l0
eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgVCogb2xkQnVmZmVyID0gYmVnaW4oKTsKLSAgICBU
KiBvbGRFbmQgPSBlbmQoKTsKKyAgICBUKiBvbGRCdWZmZXIgPSBnZXRQdHIoYmVnaW4oKSk7Cisg
ICAgVCogb2xkRW5kID0gZ2V0UHRyKGVuZCgpKTsKIAogICAgIGFzYW5TZXRCdWZmZXJTaXplVG9G
dWxsQ2FwYWNpdHkoKTsKIApAQCAtMTA5Niw3ICsxMTAyLDcgQEAgdm9pZCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZXNlcnZlQ2FwYWNp
dHkoc2kKIAogICAgIGFzYW5TZXRJbml0aWFsQnVmZmVyU2l6ZVRvKHNpemUoKSk7CiAKLSAgICBU
eXBlT3BlcmF0aW9uczo6bW92ZShvbGRCdWZmZXIsIG9sZEVuZCwgYmVnaW4oKSk7CisgICAgVHlw
ZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGdldFB0cihiZWdpbigpKSk7CiAg
ICAgQmFzZTo6ZGVhbGxvY2F0ZUJ1ZmZlcihvbGRCdWZmZXIpOwogfQogCkBAIC0xMTA1LDggKzEx
MTEsOCBAQCBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT46OnRyeVJlc2VydmVDYXBhY2l0eQogewogICAgIGlmIChuZXdDYXBhY2l0eSA8
PSBjYXBhY2l0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBUKiBvbGRCdWZmZXIgPSBi
ZWdpbigpOwotICAgIFQqIG9sZEVuZCA9IGVuZCgpOworICAgIFQqIG9sZEJ1ZmZlciA9IGdldFB0
cihiZWdpbigpKTsKKyAgICBUKiBvbGRFbmQgPSBnZXRQdHIoZW5kKCkpOwogCiAgICAgYXNhblNl
dEJ1ZmZlclNpemVUb0Z1bGxDYXBhY2l0eSgpOwogCkBAIC0xMTE4LDcgKzExMjQsNyBAQCBib29s
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46
OnRyeVJlc2VydmVDYXBhY2l0eQogCiAgICAgYXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8oc2l6
ZSgpKTsKIAotICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBiZWdp
bigpKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShvbGRCdWZmZXIsIG9sZEVuZCwgZ2V0UHRy
KGJlZ2luKCkpKTsKICAgICBCYXNlOjpkZWFsbG9jYXRlQnVmZmVyKG9sZEJ1ZmZlcik7CiAgICAg
cmV0dXJuIHRydWU7CiB9CkBAIC0xMTQzLDcgKzExNDksNyBAQCB2b2lkIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnNocmlua0NhcGFjaXR5
KHNpegogCiAgICAgYXNhblNldEJ1ZmZlclNpemVUb0Z1bGxDYXBhY2l0eSgpOwogCi0gICAgVCog
b2xkQnVmZmVyID0gYmVnaW4oKTsKKyAgICBUKiBvbGRCdWZmZXIgPSBnZXRQdHIoYmVnaW4oKSk7
CiAgICAgaWYgKG5ld0NhcGFjaXR5ID4gMCkgewogICAgICAgICBpZiAoQmFzZTo6c2hvdWxkUmVh
bGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSkpIHsKICAgICAgICAgICAgIEJhc2U6OnJlYWxsb2Nh
dGVCdWZmZXIobmV3Q2FwYWNpdHkpOwpAQCAtMTE1MSwxMCArMTE1NywxMCBAQCB2b2lkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnNocmlu
a0NhcGFjaXR5KHNpegogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
VCogb2xkRW5kID0gZW5kKCk7CisgICAgICAgIFQqIG9sZEVuZCA9IGdldFB0cihlbmQoKSk7CiAg
ICAgICAgIEJhc2U6OmFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKICAgICAgICAgaWYgKGJl
Z2luKCkgIT0gb2xkQnVmZmVyKQotICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xk
QnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOworICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6Om1v
dmUob2xkQnVmZmVyLCBvbGRFbmQsIGdldFB0cihiZWdpbigpKSk7CiAgICAgfQogCiAgICAgQmFz
ZTo6ZGVhbGxvY2F0ZUJ1ZmZlcihvbGRCdWZmZXIpOwpAQCAtMTE3NywxMSArMTE4MywxNyBAQCB2
b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eT46OmFwcGVuZChjb25zdCBVKiBkYQogICAgIGlmIChuZXdTaXplIDwgbV9zaXplKQogICAgICAg
ICBDUkFTSCgpOwogICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG5ld1NpemUpOwotICAg
IFQqIGRlc3QgPSBlbmQoKTsKKyAgICBUKiBkZXN0ID0gZ2V0UHRyKGVuZCgpKTsKICAgICBWZWN0
b3JDb3BpZXI8c3RkOjppc190cml2aWFsPFQ+Ojp2YWx1ZSwgVT46OnVuaW5pdGlhbGl6ZWRDb3B5
KGRhdGEsIHN0ZDo6YWRkcmVzc29mKGRhdGFbZGF0YVNpemVdKSwgZGVzdCk7CiAgICAgbV9zaXpl
ID0gbmV3U2l6ZTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK3ZvaWQg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6
YXBwZW5kKGNvbnN0X2l0ZXJhdG9yIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKK3sKKyAgICBhcHBl
bmQoZ2V0UHRyKGRhdGEpLCBkYXRhU2l6ZSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWlu
Q2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CiBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnRyeUFwcGVuZChjb25zdCBVKiBk
YXRhLCBzaXplX3QgZGF0YVNpemUpCiB7CkBAIC0xMTk1LDcgKzEyMDcsNyBAQCBib29sIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnRyeUFw
cGVuZChjb25zdCBVKgogICAgIGlmIChuZXdTaXplIDwgbV9zaXplKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obmV3U2l6ZSk7Ci0gICAgVCog
ZGVzdCA9IGVuZCgpOworICAgIFQqIGRlc3QgPSBnZXRQdHIoZW5kKCkpOwogICAgIFZlY3RvckNv
cGllcjxzdGQ6OmlzX3RyaXZpYWw8VD46OnZhbHVlLCBVPjo6dW5pbml0aWFsaXplZENvcHkoZGF0
YSwgc3RkOjphZGRyZXNzb2YoZGF0YVtkYXRhU2l6ZV0pLCBkZXN0KTsKICAgICBtX3NpemUgPSBu
ZXdTaXplOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTIwNiw3ICsxMjE4LDcgQEAgQUxXQVlTX0lO
TElORSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eT46OmFwcGUKIHsKICAgICBpZiAoc2l6ZSgpICE9IGNhcGFjaXR5KCkpIHsKICAgICAg
ICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obV9zaXplICsgMSk7Ci0gICAgICAgIG5ldyAo
Tm90TnVsbCwgZW5kKCkpIFQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgICAgIG5ldyAo
Tm90TnVsbCwgZ2V0UHRyKGVuZCgpKSkgVChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKICAgICAg
ICAgKyttX3NpemU7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMjI0LDcgKzEyMzYsNyBA
QCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eT46OmFwcGVuZFNsb3dDYXNlKFUmJgogICAgIEFTU0VSVChiZWdpbigpKTsKIAogICAgIGFz
YW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG1fc2l6ZSArIDEpOwotICAgIG5ldyAoTm90TnVsbCwg
ZW5kKCkpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKKyAgICBuZXcgKE5vdE51bGwsIGdldFB0
cihlbmQoKSkpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKICAgICArK21fc2l6ZTsKIH0KIApA
QCAtMTIzOSwxNCArMTI1MSwxNCBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojp1bmNoZWNrZWRBcAogICAgIGFzYW5C
dWZmZXJTaXplV2lsbENoYW5nZVRvKG1fc2l6ZSArIDEpOwogCiAgICAgYXV0byBwdHIgPSBzdGQ6
OmFkZHJlc3NvZih2YWx1ZSk7Ci0gICAgbmV3IChOb3ROdWxsLCBlbmQoKSkgVChzdGQ6OmZvcndh
cmQ8VT4oKnB0cikpOworICAgIG5ldyAoTm90TnVsbCwgZ2V0UHRyKGVuZCgpKSkgVChzdGQ6OmZv
cndhcmQ8VT4oKnB0cikpOwogICAgICsrbV9zaXplOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5PiB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3Qgb3RoZXJDYXBhY2l0eT4K
IGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT46OmFwcGVuZFZlY3Rvcihjb25zdCBWZWN0b3I8VSwgb3RoZXJDYXBhY2l0eT4m
IHZhbCkKIHsKLSAgICBhcHBlbmQodmFsLmJlZ2luKCksIHZhbC5zaXplKCkpOworICAgIGFwcGVu
ZChnZXRQdHIodmFsLmJlZ2luKCkpLCB2YWwuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNp
emVfdCBtaW5DYXBhY2l0eT4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KQEAgLTEyNjEsOSArMTI3Myw5
IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNh
cGFjaXR5Pjo6aW5zZXJ0KHNpemVfdCBwb3NpCiAgICAgaWYgKG5ld1NpemUgPCBtX3NpemUpCiAg
ICAgICAgIENSQVNIKCk7CiAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obmV3U2l6ZSk7
Ci0gICAgVCogc3BvdCA9IGJlZ2luKCkgKyBwb3NpdGlvbjsKLSAgICBUeXBlT3BlcmF0aW9uczo6
bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGVuZCgpLCBzcG90ICsgZGF0YVNpemUpOwotICAgIFZlY3Rv
ckNvcGllcjxzdGQ6OmlzX3RyaXZpYWw8VD46OnZhbHVlLCBVPjo6dW5pbml0aWFsaXplZENvcHko
ZGF0YSwgc3RkOjphZGRyZXNzb2YoZGF0YVtkYXRhU2l6ZV0pLCBzcG90KTsKKyAgICBhdXRvIHNw
b3QgPSBiZWdpbigpICsgcG9zaXRpb247CisgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFw
cGluZyhnZXRQdHIoc3BvdCksIGdldFB0cihlbmQoKSksIGdldFB0cihzcG90KSArIGRhdGFTaXpl
KTsKKyAgICBWZWN0b3JDb3BpZXI8c3RkOjppc190cml2aWFsPFQ+Ojp2YWx1ZSwgVT46OnVuaW5p
dGlhbGl6ZWRDb3B5KGRhdGEsIHN0ZDo6YWRkcmVzc29mKGRhdGFbZGF0YVNpemVdKSwgZ2V0UHRy
KHNwb3QpKTsKICAgICBtX3NpemUgPSBuZXdTaXplOwogfQogIApAQCAtMTI4MCwyNSArMTI5Miwy
NSBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHk+OjppbnNlcnQoc2l6ZQogCiAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hh
bmdlVG8obV9zaXplICsgMSk7CiAKLSAgICBUKiBzcG90ID0gYmVnaW4oKSArIHBvc2l0aW9uOwot
ICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCwgZW5kKCksIHNwb3QgKyAx
KTsKLSAgICBuZXcgKE5vdE51bGwsIHNwb3QpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKKyAg
ICBhdXRvIHNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247CisgICAgVHlwZU9wZXJhdGlvbnM6Om1v
dmVPdmVybGFwcGluZyhnZXRQdHIoc3BvdCksIGdldFB0cihlbmQoKSksIGdldFB0cihzcG90KSAr
IDEpOworICAgIG5ldyAoTm90TnVsbCwgZ2V0UHRyKHNwb3QpKSBUKHN0ZDo6Zm9yd2FyZDxVPigq
cHRyKSk7CiAgICAgKyttX3NpemU7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNp
dHk+IHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBjPgogaW5saW5lIHZvaWQgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6aW5zZXJ0VmVj
dG9yKHNpemVfdCBwb3NpdGlvbiwgY29uc3QgVmVjdG9yPFUsIGM+JiB2YWwpCiB7Ci0gICAgaW5z
ZXJ0KHBvc2l0aW9uLCB2YWwuYmVnaW4oKSwgdmFsLnNpemUoKSk7CisgICAgaW5zZXJ0KHBvc2l0
aW9uLCBnZXRQdHIodmFsLmJlZ2luKCkpLCB2YWwuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIs
IHNpemVfdCBtaW5DYXBhY2l0eT4KIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnJlbW92ZShzaXplX3QgcG9zaXRpb24p
CiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24gPCBzaXpl
KCkpOwotICAgIFQqIHNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247CisgICAgYXV0byBzcG90ID0g
YmVnaW4oKSArIHBvc2l0aW9uOwogICAgIHNwb3QtPn5UKCk7Ci0gICAgVHlwZU9wZXJhdGlvbnM6
Om1vdmVPdmVybGFwcGluZyhzcG90ICsgMSwgZW5kKCksIHNwb3QpOworICAgIFR5cGVPcGVyYXRp
b25zOjptb3ZlT3ZlcmxhcHBpbmcoZ2V0UHRyKHNwb3QgKyAxKSwgZ2V0UHRyKGVuZCgpKSwgZ2V0
UHRyKHNwb3QpKTsKICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhtX3NpemUgLSAxKTsK
ICAgICAtLW1fc2l6ZTsKIH0KQEAgLTEzMDgsMTAgKzEzMjAsMTAgQEAgaW5saW5lIHZvaWQgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6cmVt
b3ZlKHNpemUKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihwb3NpdGlv
biA8PSBzaXplKCkpOwogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0
aW9uICsgbGVuZ3RoIDw9IHNpemUoKSk7Ci0gICAgVCogYmVnaW5TcG90ID0gYmVnaW4oKSArIHBv
c2l0aW9uOwotICAgIFQqIGVuZFNwb3QgPSBiZWdpblNwb3QgKyBsZW5ndGg7Ci0gICAgVHlwZU9w
ZXJhdGlvbnM6OmRlc3RydWN0KGJlZ2luU3BvdCwgZW5kU3BvdCk7IAotICAgIFR5cGVPcGVyYXRp
b25zOjptb3ZlT3ZlcmxhcHBpbmcoZW5kU3BvdCwgZW5kKCksIGJlZ2luU3BvdCk7CisgICAgYXV0
byBiZWdpblNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247CisgICAgYXV0byBlbmRTcG90ID0gYmVn
aW5TcG90ICsgbGVuZ3RoOworICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChnZXRQdHIoYmVn
aW5TcG90KSwgZ2V0UHRyKGVuZFNwb3QpKTsKKyAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJs
YXBwaW5nKGdldFB0cihlbmRTcG90KSwgZ2V0UHRyKGVuZCgpKSwgZ2V0UHRyKGJlZ2luU3BvdCkp
OwogICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG1fc2l6ZSAtIGxlbmd0aCk7CiAgICAg
bV9zaXplIC09IGxlbmd0aDsKIH0KQEAgLTEzNTksNyArMTM3MSw3IEBAIGlubGluZSB1bnNpZ25l
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+
OjpyZW1vdmVBCiAgICAgICAgICAgICBpZiAoaG9sZUJlZ2luID09IGVuZCgpKQogICAgICAgICAg
ICAgICAgIGhvbGVCZWdpbiA9IGl0OwogICAgICAgICAgICAgZWxzZSBpZiAoaG9sZUVuZCAhPSBp
dCkgewotICAgICAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoaG9s
ZUVuZCwgaXQsIGhvbGVCZWdpbik7CisgICAgICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6Om1v
dmVPdmVybGFwcGluZyhnZXRQdHIoaG9sZUVuZCksIGdldFB0cihpdCksIGdldFB0cihob2xlQmVn
aW4pKTsKICAgICAgICAgICAgICAgICBob2xlQmVnaW4gKz0gaXQgLSBob2xlRW5kOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaG9sZUVuZCA9IGl0ICsgMTsKQEAgLTEzNjgsNyArMTM4MCw3
IEBAIGlubGluZSB1bnNpZ25lZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHk+OjpyZW1vdmVBCiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGhv
bGVFbmQgIT0gZW5kKCkpCi0gICAgICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmco
aG9sZUVuZCwgZW5kKCksIGhvbGVCZWdpbik7CisgICAgICAgIFR5cGVPcGVyYXRpb25zOjptb3Zl
T3ZlcmxhcHBpbmcoZ2V0UHRyKGhvbGVFbmQpLCBnZXRQdHIoZW5kKCkpLCBnZXRQdHIoaG9sZUJl
Z2luKSk7CiAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obV9zaXplIC0gbWF0Y2hDb3Vu
dCk7CiAgICAgbV9zaXplIC09IG1hdGNoQ291bnQ7CiAgICAgcmV0dXJuIG1hdGNoQ291bnQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcAppbmRleCA2MmVhMWMxYmRjZWQ2MzA2NTg5OGE4YjQxYjBiNmQyMWI4NTdhYjg3Li42ZDc1
OGVmMmZhYjUxNzQxNjUyN2QyOTJjYjJlMDNmOWFkMjA1MTJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTE0Njgs
OCArMTQ2OCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChidWZmZXIuaXNFbXB0eSgp
KQogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgICAgICBjb25zdCB1aW50OF90KiBw
dHIgPSBidWZmZXIuYmVnaW4oKTsKLSAgICAgICAgY29uc3QgdWludDhfdCogZW5kID0gYnVmZmVy
LmVuZCgpOworICAgICAgICBjb25zdCB1aW50OF90KiBwdHIgPSBnZXRQdHIoYnVmZmVyLmJlZ2lu
KCkpOworICAgICAgICBjb25zdCB1aW50OF90KiBlbmQgPSBnZXRQdHIoYnVmZmVyLmVuZCgpKTsK
ICAgICAgICAgdWludDMyX3QgdmVyc2lvbjsKICAgICAgICAgaWYgKCFyZWFkTGl0dGxlRW5kaWFu
KHB0ciwgZW5kLCB2ZXJzaW9uKSB8fCB2ZXJzaW9uID4gQ3VycmVudFZlcnNpb24pCiAgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5j
cHAKaW5kZXggYjg3MGEzYTBhMDAzYjkyNThkMGYzMjQ1ZmQ0YWIzZjJiNzFlMmJkNy4uYjE4ZDUw
MGJiNDQxMTc2ZTAzNWE2ZGRjMjM2MDg4MGNiNzZhNzk4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMjE0MCwxMSArMjE0MCwxMSBAQCBpbmxpbmUgYm9vbCBT
ZWFyY2hCdWZmZXI6OmlzQmFkTWF0Y2goY29uc3QgVUNoYXIqIG1hdGNoLCBzaXplX3QgbWF0Y2hM
ZW5ndGgpIGNvbgogICAgIC8vIGNyZWF0aW5nIGEgbmV3IG9uZSBlYWNoIHRpbWUuCiAgICAgbm9y
bWFsaXplQ2hhcmFjdGVycyhtYXRjaCwgbWF0Y2hMZW5ndGgsIG1fbm9ybWFsaXplZE1hdGNoKTsK
IAotICAgIGNvbnN0IFVDaGFyKiBhID0gbV9ub3JtYWxpemVkVGFyZ2V0LmJlZ2luKCk7Ci0gICAg
Y29uc3QgVUNoYXIqIGFFbmQgPSBtX25vcm1hbGl6ZWRUYXJnZXQuZW5kKCk7CisgICAgY29uc3Qg
VUNoYXIqIGEgPSBnZXRQdHIobV9ub3JtYWxpemVkVGFyZ2V0LmJlZ2luKCkpOworICAgIGNvbnN0
IFVDaGFyKiBhRW5kID0gZ2V0UHRyKG1fbm9ybWFsaXplZFRhcmdldC5lbmQoKSk7CiAKLSAgICBj
b25zdCBVQ2hhciogYiA9IG1fbm9ybWFsaXplZE1hdGNoLmJlZ2luKCk7Ci0gICAgY29uc3QgVUNo
YXIqIGJFbmQgPSBtX25vcm1hbGl6ZWRNYXRjaC5lbmQoKTsKKyAgICBjb25zdCBVQ2hhciogYiA9
IGdldFB0cihtX25vcm1hbGl6ZWRNYXRjaC5iZWdpbigpKTsKKyAgICBjb25zdCBVQ2hhciogYkVu
ZCA9IGdldFB0cihtX25vcm1hbGl6ZWRNYXRjaC5lbmQoKSk7CiAKICAgICB3aGlsZSAodHJ1ZSkg
ewogICAgICAgICAvLyBTa2lwIHJ1bnMgb2Ygbm9uLWthbmEtbGV0dGVyIGNoYXJhY3RlcnMuIFRo
aXMgaXMgbmVjZXNzYXJ5IHNvIHdlIGNhbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
bWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KaW5kZXggNmY1YjgxODJjZWEyNzdmYTNl
NzkwNmQzODllYmM4ZmMwMzE4ZjE1NS4uN2VlYmM4ZGU0MWQ2ODUxMmNmYzc0NWI1ZjE0NzMwMzA0
OTVlZjYwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyLm1tCkBAIC01NzQsNyArNTc0LDcgQEAgdm9pZCBTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCgpCiAKICAgICAgICAgaWYgKCFj
Z1JlY3RzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQ0dSZWN0IHZpc2libGVSZWN0ID0gbWFp
bkZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8
RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdp
dGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVBbmREaXJlY3Rpb24obnVsbHB0ciwgY2dSZWN0
cy5iZWdpbigpLCBjZ1JlY3RzLnNpemUoKSwgdmlzaWJsZVJlY3QsIERESGlnaGxpZ2h0U3R5bGVC
dWJibGVOb25lIHwgRERIaWdobGlnaHRTdHlsZVN0YW5kYXJkSWNvbkFycm93IHwgRERIaWdobGln
aHRTdHlsZUJ1dHRvblNob3dBbHdheXMsIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwg
Tk8sIFlFUykpOworICAgICAgICAgICAgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hs
aWdodCA9IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0
aFN0eWxlQW5kRGlyZWN0aW9uKG51bGxwdHIsIGNnUmVjdHMuZGF0YSgpLCBjZ1JlY3RzLnNpemUo
KSwgdmlzaWJsZVJlY3QsIERESGlnaGxpZ2h0U3R5bGVCdWJibGVOb25lIHwgRERIaWdobGlnaHRT
dHlsZVN0YW5kYXJkSWNvbkFycm93IHwgRERIaWdobGlnaHRTdHlsZUJ1dHRvblNob3dBbHdheXMs
IFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0
ZUZvclNlbGVjdGlvbigqdGhpcywgZGRIaWdobGlnaHQsIHNlbGVjdGlvblJhbmdlKSk7CiAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dPRkZG
aWxlRm9ybWF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxl
Rm9ybWF0LmNwcAppbmRleCAwNTE4NzFhYzZjNjBmYjY0MzkyODMwYWFjNmFkMzg1MmE5NGQ0NDc2
Li5kZDA5NjNhNzUwMWFkMmVlMDYzMWE1ZTE2ZDc5NTExMTEyMjM5ZDU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCkBAIC0y
MDAsNyArMjAwLDcgQEAgYm9vbCBjb252ZXJ0V09GRlRvU2ZudChTaGFyZWRCdWZmZXIqIHdvZmYs
IFZlY3RvcjxjaGFyPiYgc2ZudCkKICAgICAgICAgICAgIHVMb25nZiBkZXN0TGVuID0gdGFibGVP
cmlnTGVuZ3RoOwogICAgICAgICAgICAgaWYgKCFzZm50LnRyeVJlc2VydmVDYXBhY2l0eShzZm50
LnNpemUoKSArIHRhYmxlT3JpZ0xlbmd0aCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgQnl0ZWYqIGRlc3QgPSByZWludGVycHJldF9jYXN0PEJ5dGVmKj4oc2Zu
dC5lbmQoKSk7CisgICAgICAgICAgICBCeXRlZiogZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Qnl0
ZWYqPihnZXRQdHIoc2ZudC5lbmQoKSkpOwogICAgICAgICAgICAgc2ZudC5ncm93KHNmbnQuc2l6
ZSgpICsgdGFibGVPcmlnTGVuZ3RoKTsKICAgICAgICAgICAgIGlmICh1bmNvbXByZXNzKGRlc3Qs
ICZkZXN0TGVuLCByZWludGVycHJldF9jYXN0PGNvbnN0IEJ5dGVmKj4od29mZi0+ZGF0YSgpICsg
dGFibGVPZmZzZXQpLCB0YWJsZUNvbXBMZW5ndGgpICE9IFpfT0spCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAppbmRleCA3MjRkODMyY2M3OTNhNzEwZGJhMjQx
OWJmMDJhYTI5ZjVkY2M0ZmQ0Li41MmM3NTg1YTM0YmYwMWVlYzkxYzQ4NzQ5MmU5MGE5OWQ2NzNk
YjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFkaWVudENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFkaWVudENhaXJvLmNwcApAQCAtNjEsNyArNjEsNyBAQCBjYWlyb19wYXR0ZXJuX3Qq
IEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KGZsb2F0IGdsb2JhbEFscGhhKQogICAgIGVsc2UK
ICAgICAgICAgbV9ncmFkaWVudCA9IGNhaXJvX3BhdHRlcm5fY3JlYXRlX2xpbmVhcihtX3AwLngo
KSwgbV9wMC55KCksIG1fcDEueCgpLCBtX3AxLnkoKSk7CiAKLSAgICBWZWN0b3I8Q29sb3JTdG9w
Pjo6aXRlcmF0b3Igc3RvcEl0ZXJhdG9yID0gbV9zdG9wcy5iZWdpbigpOworICAgIGF1dG8gc3Rv
cEl0ZXJhdG9yID0gbV9zdG9wcy5iZWdpbigpOwogICAgIHdoaWxlIChzdG9wSXRlcmF0b3IgIT0g
bV9zdG9wcy5lbmQoKSkgewogICAgICAgICBjYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3Jn
YmEobV9ncmFkaWVudCwgc3RvcEl0ZXJhdG9yLT5zdG9wLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RvcEl0ZXJhdG9yLT5yZWQsIHN0b3BJdGVyYXRvci0+Z3Jl
ZW4sIHN0b3BJdGVyYXRvci0+Ymx1ZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKaW5kZXgg
Y2Q1NmU2N2ViOTE4YjE2OTNjNGVjY2Y3NDBhZjgwYzg1OTM2YTc5OC4uZmJiZmZkYWU3N2MwMWE2
MjIzZjY3OGYwYTY4OWQ0OGY5NDA5NWQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAK
QEAgLTE0NCw3ICsxNDQsNyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZl
ckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKQogICAgIC8vIGFsd2F5cyB1c2UgSW1hZ2VT
b3VyY2U6OmNsZWFyKHRydWUsIC4uLikgdG8gY29tcGxldGVseSBmcmVlIHRoZSBtZW1vcnkgaW4K
ICAgICAvLyB0aGlzIGNhc2UuCiAgICAgY2xlYXJCZWZvcmVGcmFtZSA9IHN0ZDo6bWluKGNsZWFy
QmVmb3JlRnJhbWUsIG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgLSAxKTsKLSAgICBjb25zdCBW
ZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGVuZChtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4o
KSArIGNsZWFyQmVmb3JlRnJhbWUpOworICAgIGNvbnN0IGF1dG8gZW5kID0gbV9mcmFtZUJ1ZmZl
ckNhY2hlLmJlZ2luKCkgKyBjbGVhckJlZm9yZUZyYW1lOwogCiAgICAgLy8gV2UgbmVlZCB0byBw
cmVzZXJ2ZSBmcmFtZXMgc3VjaCB0aGF0OgogICAgIC8vICAgKiBXZSBkb24ndCBjbGVhciB8ZW5k
fApAQCAtMTY0LDE0ICsxNjQsMTQgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVC
dWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkKICAgICAvLyAgICogSWYgdGhlIGZy
YW1lIGlzIHBhcnRpYWwsIHdlJ3JlIGRlY29kaW5nIGl0LCBzbyBkb24ndCBjbGVhciBpdDsgaWYg
aXQKICAgICAvLyAgICAgaGFzIGEgZGlzcG9zYWwgbWV0aG9kIG90aGVyIHRoYW4gRGlzcG9zZU92
ZXJ3cml0ZVByZXZpb3VzLCBzdG9wCiAgICAgLy8gICAgIHNjYW5uaW5nLCBhcyB3ZSdsbCBvbmx5
IG5lZWQgdGhpcyBmcmFtZSB3aGVuIGRlY29kaW5nIHRoZSBuZXh0IG9uZS4KLSAgICBWZWN0b3I8
SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGkoZW5kKTsKKyAgICBhdXRvIGkgPSBlbmQ7CiAgICAgZm9y
ICg7IChpICE9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKSAmJiAoKGktPnN0YXR1cygpID09
IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHx8IChpLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdl
RnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cykpOyAtLWkpIHsKICAgICAgICAgaWYgKChp
LT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKSAmJiAoaSAhPSBlbmQpKQog
ICAgICAgICAgICAgaS0+Y2xlYXJQaXhlbERhdGEoKTsKICAgICB9CiAKICAgICAvLyBOb3cgfGl8
IGhvbGRzIHRoZSBsYXN0IGZyYW1lIHdlIG5lZWQgdG8gcHJlc2VydmU7IGNsZWFyIHByaW9yIGZy
YW1lcy4KLSAgICBmb3IgKFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0b3IgaihtX2ZyYW1lQnVm
ZmVyQ2FjaGUuYmVnaW4oKSk7IGogIT0gaTsgKytqKSB7CisgICAgZm9yIChhdXRvIGogPSBtX2Zy
YW1lQnVmZmVyQ2FjaGUuYmVnaW4oKTsgaiAhPSBpOyArK2opIHsKICAgICAgICAgQVNTRVJUKGot
PnN0YXR1cygpICE9IEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIGlmIChqLT5z
dGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KQogICAgICAgICAgICAgai0+Y2xlYXJQ
aXhlbERhdGEoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggOGJj
MGYwODNkMTc2OTUyNGIyNjQxY2JiNjBiMDVlYzlmODczNDFmOS4uMmJhYzg4NDM0OTViZTZiZDA3
ZTVmYTAyZGJkM2NlMGE0NDI1MjUwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAKQEAgLTE2MDYsOCArMTYwNiw4IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEZpbGxMYXll
cnMoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IENvbG9yJiBjLCBjb25zCiAgICAg
ICAgIGNvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcigxKTsKICAgICB9CiAKLSAgICBWZWN0
b3I8Y29uc3QgRmlsbExheWVyKj46OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgdG9wTGF5ZXIgPSBs
YXllcnMucmVuZCgpOwotICAgIGZvciAoVmVjdG9yPGNvbnN0IEZpbGxMYXllcio+Ojpjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yIGl0ID0gbGF5ZXJzLnJiZWdpbigpOyBpdCAhPSB0b3BMYXllcjsgKytp
dCkKKyAgICBhdXRvIHRvcExheWVyID0gbGF5ZXJzLnJlbmQoKTsKKyAgICBmb3IgKGF1dG8gaXQg
PSBsYXllcnMucmJlZ2luKCk7IGl0ICE9IHRvcExheWVyOyArK2l0KQogICAgICAgICBwYWludEZp
bGxMYXllcihwYWludEluZm8sIGMsICppdCwgcmVjdCwgYmxlZWRBdm9pZGFuY2UsIG9wLCBiYWNr
Z3JvdW5kT2JqZWN0LCBiYXNlQmdDb2xvclVzYWdlKTsKIAogICAgIGlmIChzaG91bGREcmF3QmFj
a2dyb3VuZEluU2VwYXJhdGVCdWZmZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcAppbmRleCAyMmE4NGIyNDQzYzQy
N2MyNDZlZmU4NTllM2VjNGMxM2FhZmE2NDAzLi5iYzU3ZTExN2ZhNmEwYmY2Y2Y2N2Q3OTdmZGIx
NTc2NDY5YmU3MDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
R3JpZFJlc29sdmVkUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHAKQEAgLTE3MSw3ICsxNzEsNyBAQCBzdGF0aWMg
R3JpZFNwYW4gcmVzb2x2ZVJvd0VuZENvbHVtbkVuZE5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWlu
c3RPcHBvc2l0ZVBvc2l0aQogewogICAgIEFTU0VSVChncmlkTGluZXMuc2l6ZSgpKTsKICAgICB1
bnNpZ25lZCBmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb25JbmRleCA9IGdyaWRMaW5lcy5z
aXplKCkgLSAxOwotICAgIGNvbnN0IHVuc2lnbmVkKiBmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9z
aXRpb24gPSBzdGQ6OnVwcGVyX2JvdW5kKGdyaWRMaW5lcy5iZWdpbigpLCBncmlkTGluZXMuZW5k
KCksIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CisgICAgY29uc3QgYXV0byBmaXJzdExpbmVB
ZnRlck9wcG9zaXRlUG9zaXRpb24gPSBzdGQ6OnVwcGVyX2JvdW5kKGdyaWRMaW5lcy5iZWdpbigp
LCBncmlkTGluZXMuZW5kKCksIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CiAgICAgaWYgKGZp
cnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbiAhPSBncmlkTGluZXMuZW5kKCkpCiAgICAgICAg
IGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbkluZGV4ID0gZmlyc3RMaW5lQWZ0ZXJPcHBv
c2l0ZVBvc2l0aW9uIC0gZ3JpZExpbmVzLmJlZ2luKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9u
dEVsZW1lbnQuY3BwCmluZGV4IDExNDg4MTIyNDljMjhlNzQ0ZTZkNzliMjlkOWYwNTM3ODY0Yjg5
NjYuLjU0YTAyMjM1MDkxOGFhZTczNWQyMmM0MGUwMGY2MGJmNjM2MTI1NzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcApAQCAtMjQzLDMxICsyNDMsMzEgQEAgc3RhdGljIGlu
bGluZSBmbG9hdCBrZXJuaW5nRm9yUGFpck9mU3RyaW5nc0FuZEdseXBocyhjb25zdCBTVkdLZXJu
aW5nTWFwJiBrZXJuaW4KIHsKICAgICBpZiAoIWcxLmlzRW1wdHkoKSAmJiBrZXJuaW5nTWFwLmds
eXBoTWFwLmNvbnRhaW5zKGcxKSkgewogICAgICAgICBTVkdLZXJuaW5nVmVjdG9yKiBrZXJuaW5n
VmVjdG9yID0ga2VybmluZ01hcC5nbHlwaE1hcC5nZXQoZzEpOwotICAgICAgICBTVkdLZXJuaW5n
VmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGtlcm5pbmdWZWN0b3ItPmVuZCgpIC0gMTsKLSAg
ICAgICAgY29uc3QgU1ZHS2VybmluZ1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBrZXJu
aW5nVmVjdG9yLT5iZWdpbigpIC0gMTsKLSAgICAgICAgZm9yICg7IGl0ICE9IGJlZ2luOyAtLWl0
KSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2hlcyh1MiwgZzIsICppdCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGl0LT5rZXJuaW5nOworICAgICAgICBzaXplX3QgaXQgPSBrZXJuaW5nVmVjdG9y
LT5zaXplKCk7CisgICAgICAgIHdoaWxlIChpdC0tID4gMCkgeworICAgICAgICAgICAgYXV0byYg
dmFsdWUgPSBrZXJuaW5nVmVjdG9yLT5hdChpdCk7CisgICAgICAgICAgICBpZiAobWF0Y2hlcyh1
MiwgZzIsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUua2VybmluZzsKICAg
ICAgICAgfQogICAgIH0KIAogICAgIGlmICghdTEuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChr
ZXJuaW5nTWFwLnVuaWNvZGVNYXAuY29udGFpbnModTEpKSB7CiAgICAgICAgICAgICBTVkdLZXJu
aW5nVmVjdG9yKiBrZXJuaW5nVmVjdG9yID0ga2VybmluZ01hcC51bmljb2RlTWFwLmdldCh1MSk7
Ci0gICAgICAgICAgICBTVkdLZXJuaW5nVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGtlcm5p
bmdWZWN0b3ItPmVuZCgpIC0gMTsKLSAgICAgICAgICAgIGNvbnN0IFNWR0tlcm5pbmdWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0ga2VybmluZ1ZlY3Rvci0+YmVnaW4oKSAtIDE7Ci0gICAg
ICAgICAgICBmb3IgKDsgaXQgIT0gYmVnaW47IC0taXQpIHsKLSAgICAgICAgICAgICAgICBpZiAo
bWF0Y2hlcyh1MiwgZzIsICppdCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdC0+a2Vy
bmluZzsKKyAgICAgICAgICAgIHNpemVfdCBpdCA9IGtlcm5pbmdWZWN0b3ItPnNpemUoKTsKKyAg
ICAgICAgICAgIHdoaWxlIChpdC0tID4gMCkgeworICAgICAgICAgICAgICAgIGF1dG8mIHZhbHVl
ID0ga2VybmluZ1ZlY3Rvci0+YXQoaXQpOworICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzKHUy
LCBnMiwgdmFsdWUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUua2VybmluZzsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICgha2VybmluZ01hcC5rZXJu
aW5nVW5pY29kZVJhbmdlTWFwLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgVmVjdG9yPFNWR0tl
cm5pbmdQYWlyPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2Rl
UmFuZ2VNYXAuZW5kKCkgLSAxOwotICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0tlcm5pbmdQ
YWlyPjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2RlUmFu
Z2VNYXAuYmVnaW4oKSAtIDE7Ci0gICAgICAgICAgICBmb3IgKDsgaXQgIT0gYmVnaW47IC0taXQp
IHsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyh1MSwgdTIsIGcyLCAqaXQpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gaXQtPmtlcm5pbmc7CisgICAgICAgICAgICBzaXplX3QgaXQg
PSBrZXJuaW5nTWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VNYXAuc2l6ZSgpOworICAgICAgICAgICAg
d2hpbGUgKGl0LS0gPiAwKSB7CisgICAgICAgICAgICAgICAgYXV0byYgdmFsdWUgPSBrZXJuaW5n
TWFwLmtlcm5pbmdVbmljb2RlUmFuZ2VNYXBbaXRdOworICAgICAgICAgICAgICAgIGlmIChtYXRj
aGVzKHUxLCB1MiwgZzIsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVl
Lmtlcm5pbmc7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBh
dGhOb2RlU2V0LmgKaW5kZXggM2Q4OWI4ZDUwODdhODZjZmVhZmZjMDE0MGI2OTQ3NjJjMDk1ZGRk
Zi4uZGFmMmI5M2Q1MWI1YWY2YjczNGY1ZjlhNzY1NDEzNjllMDQxNGEyYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9kZVNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aE5vZGVTZXQuaApAQCAtNjQsOCArNjQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgICAgICB2b2lkIG1hcmtTdWJ0cmVlc0Rpc2pvaW50KGJvb2wgZGlzam9pbnQpIHsgbV9z
dWJ0cmVlc0FyZURpc2pvaW50ID0gZGlzam9pbnQ7IH0KICAgICAgICAgICAgIGJvb2wgc3VidHJl
ZXNBcmVEaXNqb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VidHJlZXNBcmVEaXNqb2ludCB8fCBt
X25vZGVzLnNpemUoKSA8IDI7IH0KIAotICAgICAgICAgICAgY29uc3QgUmVmUHRyPE5vZGU+KiBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuYmVnaW4oKTsgfQotICAgICAgICAgICAgY29u
c3QgUmVmUHRyPE5vZGU+KiBlbmQoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9Cisg
ICAgICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+Pjo6aXRlcmF0b3IgYmVnaW4oKSBj
b25zdCB7IHJldHVybiBtX25vZGVzLmJlZ2luKCk7IH0KKyAgICAgICAgICAgIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8Tm9kZT4+OjppdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLmVu
ZCgpOyB9CiAKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIHZvaWQgdHJhdmVyc2FsU29y
dCgpIGNvbnN0Owo=
</data>
<flag name="review"
          id="285635"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>