<?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>76571</bug_id>
          
          <creation_ts>2012-01-18 14:18:25 -0800</creation_ts>
          <short_desc>Add FractionalLayoutPoint/Size/Rect for sub-pixel layout</short_desc>
          <delta_ts>2012-05-30 12:37:07 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>77485</dependson>
    
    <dependson>78835</dependson>
    
    <dependson>78852</dependson>
    
    <dependson>78913</dependson>
    
    <dependson>78924</dependson>
          <blocked>60318</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Emil A Eklund">eae</reporter>
          <assigned_to name="Emil A Eklund">eae</assigned_to>
          <cc>aroben</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eoconnor</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>hyatt</cc>
    
    <cc>leviw</cc>
    
    <cc>pnormand</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>538157</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-01-18 14:18:25 -0800</bug_when>
    <thetext>Add fixed point implementation (AppUnit) and Point/Size/Rect types using it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538196</commentid>
    <comment_count>1</comment_count>
      <attachid>123002</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-01-18 14:48:07 -0800</bug_when>
    <thetext>Created attachment 123002
Patch

Broke out data type changes (AppUnit, FixedPoint/Size/Rect) from subpixel patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538202</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-18 14:53:38 -0800</bug_when>
    <thetext>Attachment 123002 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1

Source/WebCore/platform/graphics/FixedRect.cpp:37:  Use &apos;using namespace std;&apos; instead of &apos;using std::max;&apos;.  [build/using_std] [4]
Source/WebCore/platform/graphics/FixedRect.cpp:38:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
Source/WebCore/platform/graphics/IntRect.h:85:  The parameter name &quot;rect&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/FloatSize.h:70:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/FloatSize.h:71:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/platform/graphics/FixedSize.h:214:  The parameter name &quot;s&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/FixedSize.h:214:  The parameter name &quot;p&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/FloatPoint.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/AppUnit.h:35:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/AppUnit.h:77:  wtf_ceil is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/AppUnit.h:86:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/platform/AppUnit.h:276:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/platform/AppUnit.h:275:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/platform/AppUnit.h:345:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/AppUnit.h:355:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/AppUnit.h:360:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/AppUnit.h:365:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/AppUnit.h:370:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/AppUnit.h:375:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/AppUnit.h:380:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/AppUnit.h:385:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/graphics/FixedSize.cpp:38:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/FixedRect.h:92:  The parameter name &quot;rect&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 23 in 32 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>538213</commentid>
    <comment_count>3</comment_count>
      <attachid>123005</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-01-18 15:05:10 -0800</bug_when>
    <thetext>Created attachment 123005
Patch

Fixed style errors. The check-webkit-style script still (incorrectly?) complains about spacing around operators for declaration of operator overloading  and the wtf_ceil function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538214</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-18 15:07:41 -0800</bug_when>
    <thetext>Attachment 123005 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1

Source/WebCore/platform/AppUnit.h:76:  wtf_ceil is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/AppUnit.h:343:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/AppUnit.h:353:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/AppUnit.h:358:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/AppUnit.h:363:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/AppUnit.h:368:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/AppUnit.h:373:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/AppUnit.h:378:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/AppUnit.h:383:  Missing spaces around /  [whitespace/operators] [3]
Total errors found: 9 in 32 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>538265</commentid>
    <comment_count>5</comment_count>
      <attachid>123005</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-01-18 15:37:06 -0800</bug_when>
    <thetext>Comment on attachment 123005
Patch

Attachment 123005 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11284373</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538270</commentid>
    <comment_count>6</comment_count>
      <attachid>123005</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-18 15:40:40 -0800</bug_when>
    <thetext>Comment on attachment 123005
Patch

Attachment 123005 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11150379</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538317</commentid>
    <comment_count>7</comment_count>
      <attachid>123034</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-01-18 16:37:00 -0800</bug_when>
    <thetext>Created attachment 123034
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538322</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-18 16:41:08 -0800</bug_when>
    <thetext>Attachment 123034 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1

Source/WebCore/platform/AppUnit.h:77:  wtf_ceil is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/AppUnit.h:344:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/AppUnit.h:354:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/AppUnit.h:359:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/AppUnit.h:364:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/AppUnit.h:369:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/AppUnit.h:374:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/AppUnit.h:379:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/AppUnit.h:384:  Missing spaces around /  [whitespace/operators] [3]
Total errors found: 9 in 32 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>546543</commentid>
    <comment_count>9</comment_count>
      <attachid>123034</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-31 15:10:03 -0800</bug_when>
    <thetext>Comment on attachment 123034
Patch

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

I think I would land AppUnit first, in a separate bug.  Then I would add some/all of the things that depend on AppUnit.  AppUnit itself is a bit of reading. :)

&gt; Source/WebCore/platform/AppUnit.h:47
&gt; +    AppUnit(int value) { m_value = value * kFixedPointDenominator; }

Do we need overflow asserts here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546551</commentid>
    <comment_count>10</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-01-31 15:17:39 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 123034 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123034&amp;action=review
&gt; 
&gt; I think I would land AppUnit first, in a separate bug.  Then I would add some/all of the things that depend on AppUnit.  AppUnit itself is a bit of reading. :)
&gt; 
&gt; &gt; Source/WebCore/platform/AppUnit.h:47
&gt; &gt; +    AppUnit(int value) { m_value = value * kFixedPointDenominator; }
&gt; 
&gt; Do we need overflow asserts here?

Pulling AppUnit out now. And we can definitely have overflow asserts there :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546633</commentid>
    <comment_count>11</comment_count>
      <attachid>124846</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-01-31 16:43:39 -0800</bug_when>
    <thetext>Created attachment 124846
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546645</commentid>
    <comment_count>12</comment_count>
      <attachid>124846</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-01-31 16:55:36 -0800</bug_when>
    <thetext>Comment on attachment 124846
Patch

Attachment 124846 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11396212</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546651</commentid>
    <comment_count>13</comment_count>
      <attachid>124846</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-01-31 17:00:24 -0800</bug_when>
    <thetext>Comment on attachment 124846
Patch

Attachment 124846 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11389196</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546655</commentid>
    <comment_count>14</comment_count>
      <attachid>124846</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 17:04:47 -0800</bug_when>
    <thetext>Comment on attachment 124846
Patch

Attachment 124846 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11394194</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546810</commentid>
    <comment_count>15</comment_count>
      <attachid>124846</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-01-31 22:19:21 -0800</bug_when>
    <thetext>Comment on attachment 124846
Patch

Attachment 124846 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11386333</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551360</commentid>
    <comment_count>16</comment_count>
      <attachid>124846</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-07 14:07:04 -0800</bug_when>
    <thetext>Comment on attachment 124846
Patch

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

It also starts to feel to me like we may need a PointBase/RectBase/SizeBase classes (not necssarily in this patch, but at some point in the future) to share code between our now 3 types.

&gt; Source/WebCore/platform/graphics/FixedPoint.h:53
&gt; +#if USE(CG) || USE(SKIA_ON_MAC_CHROMIUM)
&gt; +typedef struct CGPoint CGPoint;
&gt; +#endif
&gt; +
&gt; +
&gt; +#if OS(DARWIN) &amp;&amp; !PLATFORM(QT)
&gt; +#ifdef NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES
&gt; +typedef struct CGPoint NSPoint;
&gt; +#else
&gt; +typedef struct _NSPoint NSPoint;
&gt; +#endif
&gt; +#endif

As discussed in person, seems we should drop the ability to convert directly to native types from Fixed*.  That makes it explicit in teh few places we want to convert (and should substantially reduce the code in this patch).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551531</commentid>
    <comment_count>17</comment_count>
      <attachid>125951</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-07 16:16:01 -0800</bug_when>
    <thetext>Created attachment 125951
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551587</commentid>
    <comment_count>18</comment_count>
      <attachid>125951</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-07 17:21:01 -0800</bug_when>
    <thetext>Comment on attachment 125951
Patch

Attachment 125951 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11459190</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551632</commentid>
    <comment_count>19</comment_count>
      <attachid>125951</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-07 18:00:22 -0800</bug_when>
    <thetext>Comment on attachment 125951
Patch

Attachment 125951 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11449188</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551641</commentid>
    <comment_count>20</comment_count>
      <attachid>125951</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-02-07 18:06:49 -0800</bug_when>
    <thetext>Comment on attachment 125951
Patch

Attachment 125951 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11462181</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551673</commentid>
    <comment_count>21</comment_count>
      <attachid>125951</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-07 18:41:17 -0800</bug_when>
    <thetext>Comment on attachment 125951
Patch

Attachment 125951 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11464186</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554521</commentid>
    <comment_count>22</comment_count>
      <attachid>126608</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-10 17:46:18 -0800</bug_when>
    <thetext>Created attachment 126608
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555355</commentid>
    <comment_count>23</comment_count>
      <attachid>126789</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-13 10:15:57 -0800</bug_when>
    <thetext>Created attachment 126789
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555382</commentid>
    <comment_count>24</comment_count>
      <attachid>126789</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-13 10:51:54 -0800</bug_when>
    <thetext>Comment on attachment 126789
Patch

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

&gt; Source/WebCore/platform/FractionalLayoutUnit.h:118
&gt; +        return value &lt; static_cast&lt;unsigned&gt;(std::numeric_limits&lt;int&gt;::max()) / kFixedPointDenominator;

I&apos;m confused.  Why not use std::numeric_limits&lt;unsigned&gt;::max()?

&gt; Source/WebCore/platform/graphics/FloatPoint.h:71
&gt; +    FloatPoint(const FractionalLayoutPoint&amp;);

I don&apos;t think we want transparent conversion?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555393</commentid>
    <comment_count>25</comment_count>
      <attachid>126789</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-13 11:08:43 -0800</bug_when>
    <thetext>Comment on attachment 126789
Patch

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

&gt;&gt; Source/WebCore/platform/FractionalLayoutUnit.h:118
&gt;&gt; +        return value &lt; static_cast&lt;unsigned&gt;(std::numeric_limits&lt;int&gt;::max()) / kFixedPointDenominator;
&gt; 
&gt; I&apos;m confused.  Why not use std::numeric_limits&lt;unsigned&gt;::max()?

FractionalLayoutUnit stores the value as an int, thus we need to use INT_MAX, not UNSIGNED_MAX.

&gt;&gt; Source/WebCore/platform/graphics/FloatPoint.h:71
&gt;&gt; +    FloatPoint(const FractionalLayoutPoint&amp;);
&gt; 
&gt; I don&apos;t think we want transparent conversion?

We have implicit conversion from int to float so it made sense to also have implicit fixed to float. If you feel strongly about it I&apos;d be happy to make it explicit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556651</commentid>
    <comment_count>26</comment_count>
      <attachid>126789</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-14 15:03:41 -0800</bug_when>
    <thetext>Comment on attachment 126789
Patch

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

&gt; Source/WebCore/platform/graphics/FloatPoint.cpp:44
&gt; +FloatPoint::FloatPoint(const FractionalLayoutPoint&amp; p) : m_x(p.x()), m_y(p.y())

This will go through operator float() and get the float value from the AppUnit, correct?

&gt; Source/WebCore/platform/graphics/FloatPoint.h:260
&gt; +inline FloatPoint toPoint(const FloatSize&amp; size)
&gt; +{
&gt; +    return FloatPoint(size.width(), size.height());
&gt; +}

Does FloatSize not have a toPoint() method?

&gt; Source/WebCore/platform/graphics/FloatSize.h:72
&gt; +        return abs(width() - s.width()) &lt; 0.1 &amp;&amp; abs(height() - s.height()) &lt; 0.1;

How did you decide on the 0.1 constant?

&gt; Source/WebCore/platform/graphics/FractionalLayoutPoint.h:67
&gt; +        return FractionalLayoutPoint(m_x &gt; other.m_x ? m_x : other.m_x,
&gt; +            m_y &gt; other.m_y ? m_y : other.m_y);

Isn&apos;t this what std::max is for?

&gt; Source/WebCore/platform/graphics/FractionalLayoutPoint.h:73
&gt; +        return FractionalLayoutPoint(m_x &lt; other.m_x ? m_x : other.m_x,
&gt; +            m_y &lt; other.m_y ? m_y : other.m_y);

std::min?

&gt; Source/WebCore/platform/graphics/FractionalLayoutPoint.h:79
&gt; +    void clampNegativeToZero()
&gt; +    {
&gt; +        *this = expandedTo(zero());
&gt; +    }

I don&apos;t understand this.

&gt; Source/WebCore/platform/graphics/FractionalLayoutPoint.h:84
&gt; +    FractionalLayoutPoint transposedPoint() const
&gt; +    {
&gt; +        return FractionalLayoutPoint(m_y, m_x);
&gt; +    }

Why is this useful?

&gt; Source/WebCore/platform/graphics/FractionalLayoutPoint.h:167
&gt; +#if PLATFORM(QT)
&gt; +inline QDataStream&amp; operator&lt;&lt;(QDataStream&amp; stream, const FractionalLayoutPoint&amp; point)
&gt; +{
&gt; +    stream &lt;&lt; point.x().toFloat() &lt;&lt; point.y().toFloat();
&gt; +    return stream;
&gt; +}

Should we wait and have Qt add these if they need?

&gt; Source/WebCore/platform/graphics/FractionalLayoutRect.cpp:42
&gt; +    : m_location(FractionalLayoutPoint(r.x(), r.y()))
&gt; +    , m_size(FractionalLayoutSize(r.width(), r.height()))

We don&apos;t have FractionalLayoutPoint(FloatPoint?) (even if explicit?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556682</commentid>
    <comment_count>27</comment_count>
      <attachid>126789</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-14 15:28:43 -0800</bug_when>
    <thetext>Comment on attachment 126789
Patch

Thanks for the review, please see my replies inline.

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

&gt;&gt; Source/WebCore/platform/graphics/FloatPoint.cpp:44
&gt;&gt; +FloatPoint::FloatPoint(const FractionalLayoutPoint&amp; p) : m_x(p.x()), m_y(p.y())
&gt; 
&gt; This will go through operator float() and get the float value from the AppUnit, correct?

Correct

&gt;&gt; Source/WebCore/platform/graphics/FloatPoint.h:260
&gt;&gt; +}
&gt; 
&gt; Does FloatSize not have a toPoint() method?

It does not.

&gt;&gt; Source/WebCore/platform/graphics/FloatSize.h:72
&gt;&gt; +        return abs(width() - s.width()) &lt; 0.1 &amp;&amp; abs(height() - s.height()) &lt; 0.1;
&gt; 
&gt; How did you decide on the 0.1 constant?

I recently removed the last use of this function from the branch so I&apos;ll go ahead and remove the function all together.

&gt;&gt; Source/WebCore/platform/graphics/FractionalLayoutPoint.h:67
&gt;&gt; +            m_y &gt; other.m_y ? m_y : other.m_y);
&gt; 
&gt; Isn&apos;t this what std::max is for?

Changed to use std::max

&gt;&gt; Source/WebCore/platform/graphics/FractionalLayoutPoint.h:73
&gt;&gt; +            m_y &lt; other.m_y ? m_y : other.m_y);
&gt; 
&gt; std::min?

Changed to use std::min

&gt;&gt; Source/WebCore/platform/graphics/FractionalLayoutPoint.h:79
&gt;&gt; +    }
&gt; 
&gt; I don&apos;t understand this.

It calls expandedTo with a zero point to ensure that the values are not negative.

&gt;&gt; Source/WebCore/platform/graphics/FractionalLayoutPoint.h:84
&gt;&gt; +    }
&gt; 
&gt; Why is this useful?

The same way that FloatPoint::transposedPoint and IntPoint::transposedPoint is. It&apos;s used in RenderBlock and RenderFlexibleBox.

&gt;&gt; Source/WebCore/platform/graphics/FractionalLayoutPoint.h:167
&gt;&gt; +}
&gt; 
&gt; Should we wait and have Qt add these if they need?

My bad, this should not be here. Merge fail.

&gt;&gt; Source/WebCore/platform/graphics/FractionalLayoutRect.cpp:42
&gt;&gt; +    , m_size(FractionalLayoutSize(r.width(), r.height()))
&gt; 
&gt; We don&apos;t have FractionalLayoutPoint(FloatPoint?) (even if explicit?)

We do, changed accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556708</commentid>
    <comment_count>28</comment_count>
      <attachid>127066</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-14 15:41:46 -0800</bug_when>
    <thetext>Created attachment 127066
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557410</commentid>
    <comment_count>29</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-15 11:23:31 -0800</bug_when>
    <thetext>Ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557529</commentid>
    <comment_count>30</comment_count>
      <attachid>127066</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-15 14:00:43 -0800</bug_when>
    <thetext>Comment on attachment 127066
Patch

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

I think we should hav done this in smaller pieces.  That would have been faster.  One class at a time.  But this is OK.  I suspect that we need to think more about using the compiler to help us find bugs in code which uses these types.  Making conversions explicit.  Possibly typedeffing differnet types for differnet parts of the tree (ClipRect, LayerRect, etc.)  It needs to be made more clear, when it is correct to use what type.

&gt; Source/WebCore/platform/graphics/FractionalLayoutSize.h:136
&gt; +inline bool operator==(const FractionalLayoutSize&amp; a, const FractionalLayoutSize&amp; b)
&gt; +{
&gt; +    return a.width() == b.width() &amp;&amp; a.height() == b.height();
&gt; +}
&gt; +
&gt; +inline bool operator!=(const FractionalLayoutSize&amp; a, const FractionalLayoutSize&amp; b)
&gt; +{
&gt; +    return a.width() != b.width() || a.height() != b.height();
&gt; +}

One of these could be defined in terms of the other, but this is OK.

&gt; Source/WebCore/platform/graphics/FractionalLayoutSize.h:140
&gt; +    return IntSize(s.width().toInt(), s.height().toInt());

makes me wonder why we don&apos;t call that floor(). :)

&gt; Source/WebCore/platform/graphics/FractionalLayoutSize.h:148
&gt; +IntSize pixelSnappedIntSize(const FractionalLayoutSize&amp;, const FractionalLayoutPoint&amp;);

Since you&apos;re including IntSize.h in this header already, I&apos;m surprised this is not inline. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557621</commentid>
    <comment_count>31</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-15 15:13:49 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 127066 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127066&amp;action=review
&gt; 
&gt; I think we should hav done this in smaller pieces.  That would have been faster.  One class at a time.  But this is OK.  I suspect that we need to think more about using the compiler to help us find bugs in code which uses these types.  Making conversions explicit.  Possibly typedeffing differnet types for differnet parts of the tree (ClipRect, LayerRect, etc.)  It needs to be made more clear, when it is correct to use what type.

Might have made sense, given that they depend on each other it might have taken more iterations though but it&apos;s definitively something worth considering for next time.

Thanks for your patience in reviewing this.

&gt; Since you&apos;re including IntSize.h in this header already, I&apos;m surprised this is not inline. :)

I&apos;ll make it inline and remove FractionalLayoutSize.cpp before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557627</commentid>
    <comment_count>32</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-15 15:20:12 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; I&apos;ll make it inline and remove FractionalLayoutSize.cpp before landing.

...or not as that would create a circular dependency between FractionalLayoutSize.h and FractionalLayoutPoint.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557685</commentid>
    <comment_count>33</comment_count>
      <attachid>127262</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-15 16:00:58 -0800</bug_when>
    <thetext>Created attachment 127262
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557908</commentid>
    <comment_count>34</comment_count>
      <attachid>127262</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-15 22:40:49 -0800</bug_when>
    <thetext>Comment on attachment 127262
Patch for landing

Clearing flags on attachment: 127262

Committed r107887: &lt;http://trac.webkit.org/changeset/107887&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557909</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-15 22:40:57 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558136</commentid>
    <comment_count>36</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2012-02-16 06:07:04 -0800</bug_when>
    <thetext>Looks like this broke the 32-bit build:


In file included from Source/WebCore/platform/graphics/FloatPoint.cpp:31:
In file included from Source/WebCore/platform/graphics/FractionalLayoutPoint.h:35:
In file included from Source/WebCore/platform/graphics/FractionalLayoutSize.h:35:
Source/WebCore/platform/FractionalLayoutUnit.h:67:61: error: implicit conversion loses integer precision: &apos;long long&apos; to &apos;int&apos; [-Werror,-Wshorten-64-to-32]
    inline void setRawValue(long long value) { ASSERT(::abs(value) &lt; std::numeric_limits&lt;int&gt;::max()); m_value = value; }
                                               ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

I&apos;ll take a stab at fixing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558137</commentid>
    <comment_count>37</comment_count>
      <attachid>127262</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2012-02-16 06:07:48 -0800</bug_when>
    <thetext>Comment on attachment 127262
Patch for landing

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

&gt; Source/WebCore/ChangeLog:22
&gt; +        * platform/FractionalLayoutUnit.h:

Shouldn&apos;t this file be in platform/graphics?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558139</commentid>
    <comment_count>38</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2012-02-16 06:11:31 -0800</bug_when>
    <thetext>Fixing the 32-bit build will be a little tricky. We need to be using llabs(), but that function doesn&apos;t exist on Windows (don&apos;t know about other platforms), so we&apos;ll need some cover function that does the right thing everywhere. I&apos;m just going to roll this out for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558206</commentid>
    <comment_count>39</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-16 08:15:43 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; Fixing the 32-bit build will be a little tricky. We need to be using llabs(), but that function doesn&apos;t exist on Windows (don&apos;t know about other platforms), so we&apos;ll need some cover function that does the right thing everywhere. I&apos;m just going to roll this out for now.

Ok, seems reasonable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558296</commentid>
    <comment_count>40</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2012-02-16 10:12:56 -0800</bug_when>
    <thetext>Rolled out in r107954.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558300</commentid>
    <comment_count>41</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-16 10:21:16 -0800</bug_when>
    <thetext>(In reply to comment #40)
&gt; Rolled out in r107954.

Thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123002</attachid>
            <date>2012-01-18 14:48:07 -0800</date>
            <delta_ts>2012-01-18 15:05:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>new_types.diff</filename>
            <type>text/plain</type>
            <size>98880</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNTMxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDEyLTAxLTE4ICBFbWlsIEEg
RWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4gYW5kIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIEFkZCBmaXhlZCBwb2ludCB0eXBlcyBmb3Igc3ViLXBpeGVs
IGxheW91dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzY1NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgZml4ZWQgcG9pbnQgaW1wbGVtZW50YXRpb24gKEFwcFVuaXQpIGFuZCB2ZXJzaW9ucyBvZiB0
aGUgUG9pbnQsIFNpemUKKyAgICAgICAgYW5kIFJlY3QgY2xhc3NlcyB1c2luZyB0aGlzIG5ldyB0
eXBlLgorCisgICAgICAgIEFwcFVuaXQgcmVwcmVzZW50cyB2YWx1ZXMgYXMgbXVsdGlwbGVzIG9m
IDEvNjB0aCBwaXhlbC4gVGhpcyBhbGxvd3MgdXMKKyAgICAgICAgdG8gcmVwcmVzZW50IHN1Yi1w
aXhlbCB2YWx1ZXMgdXNpbmcgaW50ZWdlciBtYXRoIGFuZCBhdm9pZHMgZmxvYXRpbmcKKyAgICAg
ICAgcG9pbnQgcHJlY2lzaW9uIHByb2JsZW1zLgorCisgICAgICAgIEZpeGVkUG9pbnQsIEZpeGVk
U2l6ZSBhbmQgRml4ZWRSZWN0IGFyZSBQb2ludCwgU2l6ZSBhbmQgUmVjdAorICAgICAgICBpbXBs
ZW1lbnRhdGlvbnMgcmVzcGVjdGl2ZWx5IHVzaW5nIHRoaXMgbmV3IHR5cGUuCisKKyAgICAgICAg
QWRkaXRpb25hbGx5LCBwbGF0Zm9ybSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG5l
dyBjbGFzc2VzIGFyZQorICAgICAgICBwcm92aWRlZCB0byBhbGxvdyB0aGVtIHRvIGJlIHVzZWQg
aW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBpbnQgYW5kIGZsb2F0CisgICAgICAgIGJhc2VkIHZlcnNp
b25zIG9mIHNhbWUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICog
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL0FwcFVuaXQuaDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRQb2ludC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3QuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRml4ZWRTaXplLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRml4ZWRTaXplLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UG9pbnQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0U2l6ZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW50UmVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zp
eGVkUG9pbnRDRy5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zp
eGVkUmVjdENHLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRml4
ZWRTaXplQ0cuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRml4
ZWRQb2ludE1hYy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zp
eGVkUmVjdE1hYy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zp
eGVkU2l6ZU1hYy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRml4
ZWRQb2ludFF0LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRml4
ZWRSZWN0UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9GaXhl
ZFNpemVRdC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvRml4
ZWRQb2ludFNraWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0ZpeGVkUmVjdFNraWEuY3BwOiBBZGRlZC4KKwogMjAxMi0wMS0xOCAgRXJpYyBDYXJsc29uICA8
ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBQcm92aWRlIGFjY2VzcyB0byB1c2Vy
J3MgbGlzdCBvZiBwcmVmZXJyZWQgbGFuZ3VhZ2VzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMTA1MTk0KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTEwODYsNiArMTA4Niw4IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3QuY3BwCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvRml4ZWRTaXplLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UXVhZC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQko
cmV2aXNpb24gMTA1MTk0KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQko
d29ya2luZyBjb3B5KQpAQCAtMjkxOSw2ICsyOTE5LDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0vRkVHYXVzc2lh
bkJsdXJORU9OLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
YXJtL0ZFTGlnaHRpbmdORU9OLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9hcm0vRkVMaWdodGluZ05FT04uaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRml4ZWRQb2ludC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GaXhlZFJlY3QuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
aXhlZFJlY3QuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRTaXpl
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRTaXplLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcCBcCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCShyZXZpc2lvbiAxMDUxOTQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJ
KHdvcmtpbmcgY29weSkKQEAgLTMzOTIsNiArMzM5Miw4IEBACiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvRml4ZWRSZWN0LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvRml4ZWRTaXplLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAnLApAQCAt
MzQ5Miw2ICszNDk0LDkgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9S
ZWZQdHJDYWlyby5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFu
c2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvQ29sb3JDRy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zp
eGVkUG9pbnRDRy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ZpeGVk
UmVjdENHLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvRml4ZWRTaXpl
Q0cuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBvaW50Q0cu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcCcsCkBA
IC0zODE1LDYgKzM4MjAsOSBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9D
b21wbGV4VGV4dENvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckFUU1VJLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRml4ZWRQb2ludE1hYy5tbScsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZpeGVkUmVjdE1hYy5tbScsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZpeGVkU2l6ZU1hYy5tbScsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW0nLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFJlY3RNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9GbG9hdFNpemVNYWMubW0nLApAQCAtMzg3OSw2ICszODg3LDkgQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9Db2xvclF0LmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvRXh0ZW5zaW9uczNEUXQuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9FeHRlbnNpb25zM0RRdC5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9GaXhlZFBvaW50UXQuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9xdC9GaXhlZFJlY3RRdC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZpeGVkU2l6ZVF0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvcXQvRmxvYXRQb2ludFF0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvRmxvYXRSZWN0UXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Gb250Q2FjaGVRdC5jcHAnLApAQCAtMzkxNSw2ICszOTI2LDggQEAKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFF0LmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNwYXJlbmN5TGF5ZXIuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tp
YS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZpeGVkUG9pbnRTa2lh
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GaXhlZFJlY3RTa2lh
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GbG9hdFBvaW50U2tp
YS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRmxvYXRSZWN0U2tp
YS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udENhY2hlU2tp
YS5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHJldmlz
aW9uIDEwNTE5NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTczLDYgKzE1NzMsOSBAQAogICAgICAgICAgICAgWydpbmNsdWRl
JywgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hY1xcLm1tJCddLAogICAgICAgICAgICAgWydpbmNs
dWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hY1xcLm1tJCddLAogICAgICAgICAg
ICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xs
ZXJDb3JlVGV4dFxcLm1tJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9GaXhlZFBvaW50TWFjXFwubW0kJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUn
LCAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZpeGVkUmVjdE1hY1xcLm1tJCddLAorICAgICAgICAg
ICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GaXhlZFNpemVNYWNcXC5tbSQn
XSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRQ
b2ludE1hY1xcLm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9GbG9hdFJlY3RNYWNcXC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRTaXplTWFjXFwubW0kJ10sCkBAIC0xNjUwLDYgKzE2
NTMsOSBAQAogICAgICAgICB9XSwKICAgICAgICAgWydPUz09Im1hYyIgYW5kIHVzZV9za2lhPT0x
JywgewogICAgICAgICAgICdzb3VyY2VzLyc6IFsKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdw
bGF0Zm9ybS9ncmFwaGljcy9jZy9GaXhlZFBvaW50Q0dcXC5jcHAkJ10sCisgICAgICAgICAgICBb
J2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvRml4ZWRSZWN0Q0dcXC5jcHAkJ10sCisg
ICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvRml4ZWRTaXplQ0dc
XC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2cv
RmxvYXRQb2ludENHXFwuY3BwJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHXFwuY3BwJCddLAogICAgICAgICAgICAgWydpbmNsdWRl
JywgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHXFwuY3BwJCddLApJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDEw
NTE5NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjMwNiw2ICsyNjMwNiwxMCBAQAogCQkJTmFtZT0icGxhdGZvcm0i
CiAJCQk+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQXBwVW5pdC5o
IgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxBcmVuYS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMjczNTcsNiArMjczNjEsMzgg
QEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXEZpeGVkUG9pbnQuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJ
CQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZpeGVkUG9p
bnRIYXNoLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGaXhlZFJlY3QuY3BwIgorCQkJCQk+CisJCQkJPC9G
aWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
Rml4ZWRSZWN0LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGaXhlZFJlY3RIYXNoLmgiCisJCQkJCT4KKwkJ
CQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xGaXhlZFNpemUuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRml4ZWRTaXplLmgiCisJCQkJCT4K
KwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xGaXhlZFNpemVIYXNoLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUK
IAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFBvaW50LmNwcCIK
IAkJCQkJPgogCQkJCTwvRmlsZT4KQEAgLTI4MzQ4LDYgKzI4Mzg0LDE4IEBACiAJCQkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgogCQkJCQk8L0ZpbGU+CiAJCQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXEZpeGVkUG9pbnRDRy5jcHAiCisJCQkJCQk+
CisJCQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUKKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcY2dcRml4ZWRSZWN0Q0cuY3BwIgorCQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJ
CQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXEZp
eGVkU2l6ZUNHLmNwcCIKKwkJCQkJCT4KKwkJCQkJPC9GaWxlPgorCQkJCQk8RmlsZQogCQkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjZ1xGbG9hdFBvaW50Q0cuY3BwIgog
CQkJCQkJPgogCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMDUxOTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTMxMCw2ICszMTAsMjAgQEAKIAkJMTQ5NDdGRkUxMkY4MENEMjAwQTBG
NjMxIC8qIERvY3VtZW50T3JkZXJlZE1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTQ5NDdGRkMxMkY4MENEMjAwQTBGNjMxIC8qIERvY3VtZW50T3Jk
ZXJlZE1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTE0OTkzQkU1MEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ5OTNCRTMwQjJGMkIx
QzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxlci5jcHAgKi87IH07CiAJCTE0OTkzQkU2MEIyRjJC
MUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OTkzQkU0MEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0Nv
bnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkxNEMwQTJCMjE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRQb2ludC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkFCNzcxNTgxNDQ0Q0JENDAwRUM0
QzRDIC8qIEZpeGVkUG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkxNEMwQTJCMzE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRQb2ludENHLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MUFB
MTQ0NEYyNDUwMEVDNEM0QyAvKiBGaXhlZFBvaW50Q0cuY3BwICovOyB9OworCQkxNEMwQTJCNDE0
NDYzMjFFMDA1MjA3OTggLyogRml4ZWRQb2ludEhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MTU3MTQ0NENCRDQwMEVDNEM0QyAvKiBGaXhl
ZFBvaW50SGFzaC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTE0QzBBMkI1MTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFBvaW50TWFjLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkFCNzcxQTcxNDQ0RjIy
RTAwRUM0QzRDIC8qIEZpeGVkUG9pbnRNYWMubW0gKi87IH07CisJCTE0QzBBMkI2MTQ0NjMyMUUw
MDUyMDc5OCAvKiBGaXhlZFJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkFCNzcxNTYxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkUmVjdC5jcHAg
Ki87IH07CisJCTE0QzBBMkI3MTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFJlY3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MTU1MTQ0NENCRDQw
MEVDNEM0QyAvKiBGaXhlZFJlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkxNEMwQTJCODE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRSZWN0Q0cu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkFCNzcx
QTkxNDQ0RjI0NTAwRUM0QzRDIC8qIEZpeGVkUmVjdENHLmNwcCAqLzsgfTsKKwkJMTRDMEEyQjkx
NDQ2MzIxRTAwNTIwNzk4IC8qIEZpeGVkUmVjdEhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MTU0MTQ0NENCRDQwMEVDNEM0QyAvKiBGaXhl
ZFJlY3RIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMTRDMEEyQkExNDQ2MzIxRTAwNTIwNzk4IC8qIEZpeGVkUmVjdE1hYy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MUE2MTQ0NEYyMkUw
MEVDNEM0QyAvKiBGaXhlZFJlY3RNYWMubW0gKi87IH07CisJCTE0QzBBMkJCMTQ0NjMyMUUwMDUy
MDc5OCAvKiBGaXhlZFNpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkFCNzcxNTMxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkU2l6ZS5jcHAgKi87
IH07CisJCTE0QzBBMkJDMTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFNpemUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MTUyMTQ0NENCRDQwMEVD
NEM0QyAvKiBGaXhlZFNpemUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkxNEMwQTJCRDE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRTaXplQ0cuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkFCNzcxQTgx
NDQ0RjI0NTAwRUM0QzRDIC8qIEZpeGVkU2l6ZUNHLmNwcCAqLzsgfTsKKwkJMTRDMEEyQkUxNDQ2
MzIxRTAwNTIwNzk4IC8qIEZpeGVkU2l6ZUhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MTUxMTQ0NENCRDQwMEVDNEM0QyAvKiBGaXhlZFNp
emVIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMTRDMEEyQkYxNDQ2MzIxRTAwNTIwNzk4IC8qIEZpeGVkU2l6ZU1hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MUE1MTQ0NEYyMkUwMEVD
NEM0QyAvKiBGaXhlZFNpemVNYWMubW0gKi87IH07CiAJCTE0QzlBNUVBMEIzRDEwNUYwMDVBMDIz
MiAvKiBTZXR0aW5ncy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNEM5QTVFOTBCM0QxMDVGMDA1QTAyMzIgLyogU2V0dGluZ3MuY3BwICovOyB9Owog
CQkxNENEOEQ4MjEwNkI1MjkwMDBBNDZEMjMgLyogSlNTaGFyZWRXb3JrZXJDdXN0b20uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDRDhEODExMDZC
NTI5MDAwQTQ2RDIzIC8qIEpTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcCAqLzsgfTsKIAkJMTRDRjc4
QTQwOUY1OENCRjAwRUIzNjY1IC8qIEpTQ1NTVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDRjc4QTMwOUY1OENCRjAwRUIzNjY1IC8qIEpT
Q1NTVmFsdWUuY3BwICovOyB9OwpAQCAtNDk1MCw2ICs0OTY0LDcgQEAKIAkJQjhEQkRCNEMxMzBC
MEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ4MTMwQjBGOEEwMEY1Q0RCMSAvKiBT
ZXRTZWxlY3Rpb25Db21tYW5kLmggKi87IH07CiAJCUI4REJEQjREMTMwQjBGOEEwMEY1Q0RCMSAv
KiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ5MTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kLmNwcCAqLzsgfTsKIAkJQjhEQkRCNEUxMzBCMEY4QTAwRjVDREIx
IC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjRBMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kLmggKi87IH07CisJCUJBQjIyQUQ0MTRCN0EwMkQwMEQ4QUJBNiAv
KiBBcHBVbml0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQUI3NzE1MDE0NDRDQkI0MDBFQzRDNEMgLyogQXBwVW5pdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJBQ0YyOTAxMTNCMkEwRDUwMDc4MUY5
MCAvKiBMYXlvdXRUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkFDRjI5MDAxM0IyQTBENTAwNzgxRjkwIC8qIExheW91dFR5cGVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMwMEYwMDQwRTBB
MTg1NTAwRkQwNEUzIC8qIERPTUZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMDBFRkZFMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLmggKi87
IH07CiAJCUJDMDBGMDA1MEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMEVGRkYwRTBBMTg1NTAwRkQw
NEUzIC8qIERPTUZpbGUubW0gKi87IH07CkBAIC0xMTgxMCw2ICsxMTgyNSwyMSBAQAogCQlCOERC
REI0ODEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTZXRTZWxlY3Rpb25Db21tYW5kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUI4REJEQjQ5MTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0Nv
cnJlY3Rpb25Db21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCOERCREI0QTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFu
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJBQjc3MTUwMTQ0NENCQjQw
MEVDNEM0QyAvKiBBcHBVbml0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFw
cFVuaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkFCNzcxNTExNDQ0Q0JENDAw
RUM0QzRDIC8qIEZpeGVkU2l6ZUhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRml4ZWRTaXplSGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQUI3NzE1
MjE0NDRDQkQ0MDBFQzRDNEMgLyogRml4ZWRTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZpeGVkU2l6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQUI3
NzE1MzE0NDRDQkQ0MDBFQzRDNEMgLyogRml4ZWRTaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZpeGVkU2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUJBQjc3MTU0MTQ0NENCRDQwMEVDNEM0QyAvKiBGaXhlZFJlY3RIYXNoLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpeGVkUmVjdEhhc2guaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQkFCNzcxNTUxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkUmVjdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaXhlZFJlY3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkFCNzcxNTYxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkUmVj
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaXhlZFJlY3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQUI3NzE1NzE0NDRDQkQ0MDBFQzRDNEMg
LyogRml4ZWRQb2ludEhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRml4
ZWRQb2ludEhhc2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkFCNzcxNTgxNDQ0
Q0JENDAwRUM0QzRDIC8qIEZpeGVkUG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRml4ZWRQb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQUI3NzFB
NTE0NDRGMjJFMDBFQzRDNEMgLyogRml4ZWRTaXplTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRml4ZWRTaXplTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlCQUI3NzFBNjE0NDRGMjJFMDBFQzRDNEMgLyogRml4ZWRSZWN0TWFjLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRml4ZWRSZWN0TWFjLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQUI3NzFBNzE0NDRGMjJFMDBFQzRDNEMgLyog
Rml4ZWRQb2ludE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IEZpeGVkUG9pbnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJBQjc3MUE4
MTQ0NEYyNDUwMEVDNEM0QyAvKiBGaXhlZFNpemVDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGaXhlZFNpemVDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUJBQjc3MUE5MTQ0NEYyNDUwMEVDNEM0QyAvKiBGaXhlZFJlY3RDRy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaXhlZFJlY3RDRy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUJBQjc3MUFBMTQ0NEYyNDUwMEVDNEM0QyAvKiBGaXhlZFBv
aW50Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRml4ZWRQb2lu
dENHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkFDRjI5MDAxM0IyQTBENTAw
NzgxRjkwIC8qIExheW91dFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExheW91dFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDBFRkZFMEUw
QTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERPTUZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMEVGRkYwRTBB
MTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBET01GaWxlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg1
NTgsNiArMTg1ODgsOSBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJ
CQkwRkNGMzMyMzBGMkI5NzE1MDA0QjY3OTUgLyogQ29sb3JDRy5jcHAgKi8sCisJCQkJQkFCNzcx
QTgxNDQ0RjI0NTAwRUM0QzRDIC8qIEZpeGVkU2l6ZUNHLmNwcCAqLywKKwkJCQlCQUI3NzFBOTE0
NDRGMjQ1MDBFQzRDNEMgLyogRml4ZWRSZWN0Q0cuY3BwICovLAorCQkJCUJBQjc3MUFBMTQ0NEYy
NDUwMEVDNEM0QyAvKiBGaXhlZFBvaW50Q0cuY3BwICovLAogCQkJCUIyNzUzNTJCMEIwNTM4MTQw
MDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwICovLAogCQkJCUIyNzUzNTJDMEIwNTM4MTQwMDJD
RTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkQwQjA1MzgxNDAwMkNFNjRG
IC8qIEZsb2F0U2l6ZUNHLmNwcCAqLywKQEAgLTE4NTk0LDYgKzE4NjI3LDkgQEAKIAkJCQkzN0My
MzYwRjEwOTdFRTc3MDBFRjlGNzIgLyogQ29tcGxleFRleHRDb250cm9sbGVyLmggKi8sCiAJCQkJ
MzdDMjM4MUYxMDk4Qzg0MjAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlckFUU1VJLmNw
cCAqLywKIAkJCQkzN0MyMzgyMDEwOThDODQyMDBFRjlGNzIgLyogQ29tcGxleFRleHRDb250cm9s
bGVyQ29yZVRleHQubW0gKi8sCisJCQkJQkFCNzcxQTUxNDQ0RjIyRTAwRUM0QzRDIC8qIEZpeGVk
U2l6ZU1hYy5tbSAqLywKKwkJCQlCQUI3NzFBNjE0NDRGMjJFMDBFQzRDNEMgLyogRml4ZWRSZWN0
TWFjLm1tICovLAorCQkJCUJBQjc3MUE3MTQ0NEYyMkUwMEVDNEM0QyAvKiBGaXhlZFBvaW50TWFj
Lm1tICovLAogCQkJCTQ5QUYyRDZCMTQ0MzVEMjEwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1v
bml0b3JNYWMuY3BwICovLAogCQkJCUIyNzUzNTRCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBv
aW50TWFjLm1tICovLAogCQkJCUIyNzUzNTRDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RN
YWMubW0gKi8sCkBAIC0xODY1Myw2ICsxODY4OSwxNCBAQAogCQkJCTQ5RkM3QTRGMTQ0NEFGNUYw
MEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwICovLAogCQkJCTQ5QUYyRDY4MTQ0
MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCAqLywKIAkJCQk2RTY3RDJB
ODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi8sCisJCQkJQkFCNzcxNTExNDQ0
Q0JENDAwRUM0QzRDIC8qIEZpeGVkU2l6ZUhhc2guaCAqLywKKwkJCQlCQUI3NzE1MjE0NDRDQkQ0
MDBFQzRDNEMgLyogRml4ZWRTaXplLmggKi8sCisJCQkJQkFCNzcxNTMxNDQ0Q0JENDAwRUM0QzRD
IC8qIEZpeGVkU2l6ZS5jcHAgKi8sCisJCQkJQkFCNzcxNTQxNDQ0Q0JENDAwRUM0QzRDIC8qIEZp
eGVkUmVjdEhhc2guaCAqLywKKwkJCQlCQUI3NzE1NTE0NDRDQkQ0MDBFQzRDNEMgLyogRml4ZWRS
ZWN0LmggKi8sCisJCQkJQkFCNzcxNTYxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkUmVjdC5jcHAg
Ki8sCisJCQkJQkFCNzcxNTcxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkUG9pbnRIYXNoLmggKi8s
CisJCQkJQkFCNzcxNTgxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkUG9pbnQuaCAqLywKIAkJCQlC
Mjc1MzUzQTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5jcHAgKi8sCiAJCQkJQjI3NTM1
M0IwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuaCAqLywKIAkJCQlCMkUyN0M5RDBCMEYy
QjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmNwcCAqLywKQEAgLTE5NTE1LDYgKzE5NTU5LDcg
QEAKIAkJCQk1MTYwMzAwOTBDQzQyNDU0MDBDOEFDMjUgLyogcG9zaXggKi8sCiAJCQkJMUEyRTZF
NTYwQ0M1NTFFMDAwNEEyMDYyIC8qIHNxbCAqLywKIAkJCQlCMkMzRDlFQzBEMDA2QzFEMDBFRjZG
MjYgLyogdGV4dCAqLywKKwkJCQlCQUI3NzE1MDE0NDRDQkI0MDBFQzRDNEMgLyogQXBwVW5pdC5o
ICovLAogCQkJCUJDRkIyRjc0MDk3QTJFMUEwMEJBNzAzRCAvKiBBcmVuYS5jcHAgKi8sCiAJCQkJ
QkNGQjJGNzUwOTdBMkUxQTAwQkE3MDNEIC8qIEFyZW5hLmggKi8sCiAJCQkJMkVGMUJGRjYxMjFD
QjBCRDAwQzI3NjI3IC8qIEFzeW5jRmlsZVN0cmVhbS5oICovLApAQCAtMjA5NTcsNiArMjEwMDIs
NyBAQAogCQkJCTFBMkFBQzU5MERDMkEzQjEwMEEyMEQ5QSAvKiBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUI0MTcwNjQxMjU2NjJCMzAwNkIyOEZDIC8qIEFw
cGx5QmxvY2tFbGVtZW50Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlERDkwOTlF
NjQ5MjAwNTZFNTgxIC8qIEFwcGx5U3R5bGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQlC
QUIyMkFENDE0QjdBMDJEMDBEOEFCQTYgLyogQXBwVW5pdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTEyREQ4RjYwRDkxRTZBRjAwMEY4OUVFIC8qIEFyY2hpdmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxMkREOEZEMEQ5MUU2QUYwMDBGODlFRSAvKiBBcmNoaXZlRmFjdG9yeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTEyREQ4RkMwRDkxRTZBRjAwMEY4OUVFIC8qIEFyY2hpdmVSZXNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yMjAyOSw2ICsyMjA3NSwxMiBAQAogCQkJCTQ5RUNFQjZFMTQ5OTc5
MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RUNF
QjcwMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzNzJDMDBEOTEyOTYxOUY4MDA1Qzk1NzUgLyogRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTE0QzBBMkIyMTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFBvaW50LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkxNEMwQTJCNDE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRQb2ludEhhc2gu
aCBpbiBIZWFkZXJzICovLAorCQkJCTE0QzBBMkI3MTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFJl
Y3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0QzBBMkI5MTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhl
ZFJlY3RIYXNoLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEMwQTJCQzE0NDYzMjFFMDA1MjA3OTgg
LyogRml4ZWRTaXplLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEMwQTJCRTE0NDYzMjFFMDA1MjA3
OTggLyogRml4ZWRTaXplSGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkYwNEYwQTE1NEYw
OTAwMEE0MjM0IC8qIEZpeGVkVGFibGVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDcz
QkFBMEMzOTlCMUYwMDBGNTk3OSAvKiBGbG9hdENvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCUIyNzUzNTY5MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmggaW4gSGVhZGVycyAq
LywKQEAgLTI1MDc5LDYgKzI1MTMxLDE0IEBACiAJCQkJMzEzMTNGNjUxNDQzQjM1RjAwNkUyQTkw
IC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RUNFQjZE
MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDlFQ0VCNkYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMTRDMEEyQjMxNDQ2MzIxRTAwNTIwNzk4IC8qIEZpeGVkUG9pbnRDRy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkxNEMwQTJCNTE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRQ
b2ludE1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTE0QzBBMkI2MTQ0NjMyMUUwMDUyMDc5OCAv
KiBGaXhlZFJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRDMEEyQjgxNDQ2MzIxRTAwNTIw
Nzk4IC8qIEZpeGVkUmVjdENHLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0QzBBMkJBMTQ0NjMy
MUUwMDUyMDc5OCAvKiBGaXhlZFJlY3RNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQkxNEMwQTJC
QjE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRTaXplLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0
QzBBMkJEMTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFNpemVDRy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkxNEMwQTJCRjE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRTaXplTWFjLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQThDRkYwNEQwQTE1NEYwOTAwMEE0MjM0IC8qIEZpeGVkVGFibGVMYXlvdXQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NjgwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0
UG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJFMjdDOUYwQjBGMkIwOTAwRjE3QzdCIC8q
IEZsb2F0UG9pbnQzRC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0FwcFVuaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9B
cHBVbml0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9BcHBVbml0
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTExIEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXBwVW5pdF9oCisjZGVm
aW5lIEFwcFVuaXRfaAorCisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPGxpbWl0cy5oPgor
I2luY2x1ZGUgPHN0ZGxpYi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25z
dCBpbnQga0ZpeGVkUG9pbnREZW5vbWluYXRvciA9IDYwOworY29uc3QgaW50IGludE1heEZvckFw
cFVuaXQgPSBJTlRfTUFYIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKK2NvbnN0IGludCBpbnRN
aW5Gb3JBcHBVbml0ID0gLWludE1heEZvckFwcFVuaXQ7CisKK2NsYXNzIEFwcFVuaXQgeworcHVi
bGljOgorICAgIEFwcFVuaXQoKSA6IG1fdmFsdWUoMCkgeyB9CisgICAgQXBwVW5pdChpbnQgdmFs
dWUpIHsgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsgfQorICAgIEFw
cFVuaXQodW5zaWduZWQgc2hvcnQgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9p
bnREZW5vbWluYXRvcjsgfQorICAgIEFwcFVuaXQodW5zaWduZWQgaW50IHZhbHVlKSB7IG1fdmFs
dWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7IH0KKyAgICBBcHBVbml0KGxvbmcg
dW5zaWduZWQgaW50IHZhbHVlKSB7IG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21p
bmF0b3I7IH0KKyAgICBBcHBVbml0KGZsb2F0IHZhbHVlKSB7IG1fdmFsdWUgPSB2YWx1ZSAqIGtG
aXhlZFBvaW50RGVub21pbmF0b3I7IH0KKyAgICBBcHBVbml0KGRvdWJsZSB2YWx1ZSkgeyBtX3Zh
bHVlID0gdmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yOyB9CisgICAgQXBwVW5pdChjb25z
dCBBcHBVbml0JiB2YWx1ZSkgeyBtX3ZhbHVlID0gdmFsdWUucmF3VmFsdWUoKTsgfQorCisgICAg
aW5saW5lIGludCB0b0ludCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgLyBrRml4ZWRQb2ludERl
bm9taW5hdG9yOyB9CisgICAgaW5saW5lIHVuc2lnbmVkIHRvVW5zaWduZWQoKSBjb25zdCB7IEFT
U0VSVChtX3ZhbHVlID49IDApOyByZXR1cm4gdG9JbnQoKTsgfQorICAgIGlubGluZSBmbG9hdCB0
b0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdmFsdWUpIC8ga0Zp
eGVkUG9pbnREZW5vbWluYXRvcjsgfQorICAgIGlubGluZSBkb3VibGUgdG9Eb3VibGUoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdmFsdWUpIC8ga0ZpeGVkUG9pbnREZW5v
bWluYXRvcjsgfQorCisgICAgb3BlcmF0b3IgaW50KCkgY29uc3QgeyByZXR1cm4gdG9JbnQoKTsg
fQorICAgIG9wZXJhdG9yIHVuc2lnbmVkKCkgY29uc3QgeyByZXR1cm4gdG9VbnNpZ25lZCgpOyB9
CisgICAgb3BlcmF0b3IgbG9uZyB1bnNpZ25lZCBpbnQoKSBjb25zdCB7IHJldHVybiB0b1Vuc2ln
bmVkKCk7IH0KKyAgICBvcGVyYXRvciBmbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHRvRmxvYXQoKTsg
fQorICAgIG9wZXJhdG9yIGRvdWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRvRG91YmxlKCk7IH0KKyAg
ICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgaW5saW5l
IGludCByYXdWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBpbmxpbmUgdm9p
ZCBzZXRSYXdWYWx1ZShpbnQgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlOyB9CisKKyAgICBpbmxp
bmUgQXBwVW5pdCBhYnMoKQorICAgIHsKKyAgICAgICAgQXBwVW5pdCByZXR1cm5WYWx1ZTsKKyAg
ICAgICAgcmV0dXJuVmFsdWUuc2V0UmF3VmFsdWUoOjphYnMobV92YWx1ZSkpOworICAgICAgICBy
ZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorI2lmIE9TKERBUldJTikKKyAgICBpbmxpbmUgaW50
IHd0Zl9jZWlsKCkKKyNlbHNlCisgICAgaW5saW5lIGludCBjZWlsKCkKKyNlbmRpZgorICAgIHsK
KyAgICAgICAgcmV0dXJuIChtX3ZhbHVlID4gMCA/IG1fdmFsdWUgKyBrRml4ZWRQb2ludERlbm9t
aW5hdG9yIC0gMSA6IG1fdmFsdWUgLSBrRml4ZWRQb2ludERlbm9taW5hdG9yICsgMSkgLyBrRml4
ZWRQb2ludERlbm9taW5hdG9yOworICAgIH0KKyAgICBpbmxpbmUgaW50IHJvdW5kKCkKKyAgICB7
CisgICAgICAgIGlmIChtX3ZhbHVlID4gMCkKKyAgICAgICAgICAgIHJldHVybiAobV92YWx1ZSAr
IChrRml4ZWRQb2ludERlbm9taW5hdG9yIC8gMikpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIChtX3ZhbHVlIC0gKGtGaXhlZFBvaW50
RGVub21pbmF0b3IgLyAyKSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworICAgIH0KKworICAg
IGlubGluZSBpbnQgZmxvb3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSW50KCk7CisgICAg
fQorCisgICAgc3RhdGljIGZsb2F0IGVwc2lsb24oKSB7IHJldHVybiAxIC8ga0ZpeGVkUG9pbnRE
ZW5vbWluYXRvcjsgfQorICAgIHN0YXRpYyBjb25zdCBBcHBVbml0IG1heCgpCisgICAgeworICAg
ICAgICBBcHBVbml0IG07CisgICAgICAgIG0ubV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCk7CisgICAgICAgIHJldHVybiBtOworICAgIH0KKyAgICBzdGF0aWMgY29uc3Qg
QXBwVW5pdCBtaW4oKQorICAgIHsKKyAgICAgICAgQXBwVW5pdCBtOworICAgICAgICBtLm1fdmFs
dWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpOworICAgICAgICByZXR1cm4gbTsK
KyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGludCBtX3ZhbHVlOworfTsKKworaW5saW5lIGJv
b2wgb3BlcmF0b3I8PShjb25zdCBBcHBVbml0JiBhLCBjb25zdCBBcHBVbml0JiBiKQoreworICAg
IHJldHVybiBhLnJhd1ZhbHVlKCkgPD0gYi5yYXdWYWx1ZSgpOworfQorCitpbmxpbmUgYm9vbCBv
cGVyYXRvcjw9KGNvbnN0IEFwcFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEudG9G
bG9hdCgpIDw9IGI7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgQXBwVW5pdCYg
YSwgaW50IGIpCit7CisgICAgcmV0dXJuIGEgPD0gQXBwVW5pdChiKTsKK30KKworaW5saW5lIGJv
b2wgb3BlcmF0b3I8PShjb25zdCBmbG9hdCBhLCBjb25zdCBBcHBVbml0JiBiKQoreworICAgIHJl
dHVybiBhIDw9IGIudG9GbG9hdCgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0
IGludCBhLCBjb25zdCBBcHBVbml0JiBiKQoreworICAgIHJldHVybiBBcHBVbml0KGEpIDw9IGI7
Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgQXBwVW5pdCYgYSwgY29uc3QgQXBw
VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYS5yYXdWYWx1ZSgpID49IGIucmF3VmFsdWUoKTsKK30K
KworaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBBcHBVbml0JiBhLCBpbnQgYikKK3sKKyAg
ICByZXR1cm4gYSA+PSBBcHBVbml0KGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNv
bnN0IGZsb2F0IGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgPj0gYi50b0Zs
b2F0KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgQXBwVW5pdCYgYSwgZmxv
YXQgYikKK3sKKyAgICByZXR1cm4gYS50b0Zsb2F0KCkgPj0gYjsKK30KKworaW5saW5lIGJvb2wg
b3BlcmF0b3I+PShjb25zdCBpbnQgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sKKyAgICByZXR1cm4g
QXBwVW5pdChhKSA+PSBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgQXBwVW5p
dCYgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sKKyAgICByZXR1cm4gYS5yYXdWYWx1ZSgpIDwgYi5y
YXdWYWx1ZSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgQXBwVW5pdCYgYSwg
aW50IGIpCit7CisgICAgcmV0dXJuIGEgPCBBcHBVbml0KGIpOworfQorCitpbmxpbmUgYm9vbCBv
cGVyYXRvcjwoY29uc3QgQXBwVW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gYS50b0Zs
b2F0KCkgPCBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgaW50IGEsIGNvbnN0
IEFwcFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEFwcFVuaXQoYSkgPCBiOworfQorCitpbmxpbmUg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgZmxvYXQgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sKKyAgICBy
ZXR1cm4gYSA8IGIudG9GbG9hdCgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3Qg
QXBwVW5pdCYgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sKKyAgICByZXR1cm4gYS5yYXdWYWx1ZSgp
ID4gYi5yYXdWYWx1ZSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgQXBwVW5p
dCYgYSwgZG91YmxlIGIpCit7CisgICAgcmV0dXJuIGEudG9Eb3VibGUoKSA+IGI7Cit9CisKK2lu
bGluZSBib29sIG9wZXJhdG9yPihjb25zdCBBcHBVbml0JiBhLCBmbG9hdCBiKQoreworICAgIHJl
dHVybiBhLnRvRmxvYXQoKSA+IGI7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBB
cHBVbml0JiBhLCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSA+IEFwcFVuaXQoYik7Cit9CisKK2lu
bGluZSBib29sIG9wZXJhdG9yPihjb25zdCBpbnQgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sKKyAg
ICByZXR1cm4gQXBwVW5pdChhKSA+IGI7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPihjb25z
dCBmbG9hdCBhLCBjb25zdCBBcHBVbml0JiBiKQoreworICAgIHJldHVybiBhID4gYi50b0Zsb2F0
KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBkb3VibGUgYSwgY29uc3QgQXBw
VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYSA+IGIudG9Eb3VibGUoKTsKK30KKworaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBBcHBVbml0JiBhLCBjb25zdCBBcHBVbml0JiBiKQoreworICAg
IHJldHVybiBhLnJhd1ZhbHVlKCkgIT0gYi5yYXdWYWx1ZSgpOworfQorCitpbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEFwcFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEgIT0g
QXBwVW5pdChiKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpbnQgYSwgY29u
c3QgQXBwVW5pdCYgYikKK3sKKyAgICByZXR1cm4gQXBwVW5pdChhKSAhPSBiOworfQorCitpbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFwcFVuaXQmIGEsIGludCBiKQoreworICAgIHJldHVy
biBhICE9IEFwcFVuaXQoYik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQXBw
VW5pdCYgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sKKyAgICByZXR1cm4gYS5yYXdWYWx1ZSgpID09
IGIucmF3VmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBcHBVbml0
JiBhLCBpbnQgYikKK3sKKyAgICByZXR1cm4gYS50b0ludCgpID09IGI7Cit9CisKK2lubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgaW50IGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAgcmV0
dXJuIGEgPT0gYi50b0ludCgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFw
cFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEgPT0gQXBwVW5pdChiKTsKK30KKwor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBmbG9hdCBhLCBjb25zdCBBcHBVbml0JiBiKQor
eworICAgIHJldHVybiBhID09IGIudG9GbG9hdCgpOworfQorCisvLyBGb3IgbXVsdGlwbGljYXRp
b24gdGhhdCdzIHByb25lIHRvIG92ZXJmbG93LCB0aGlzIGJvdW5kcyBpdCB0byBBcHBVbml0Ojpt
YXgoKSBhbmQgOjptaW4oKQoraW5saW5lIEFwcFVuaXQgYm91bmRlZE11bHRpcGx5KGNvbnN0IEFw
cFVuaXQmIGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAgQXBwVW5pdCByZXR1cm5WYWw7Cisg
ICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKChhLnJhd1ZhbHVlKCkgLyBrRml4ZWRQb2ludERlbm9t
aW5hdG9yKSAqIGIucmF3VmFsdWUoKSk7CisgICAgaWYgKChhLnJhd1ZhbHVlKCkgPj0gMCAmJiBi
LnJhd1ZhbHVlKCkgPj0gMCkgfHwgKGEucmF3VmFsdWUoKSA8IDAgJiYgYi5yYXdWYWx1ZSgpIDwg
MCkpCisgICAgeworICAgICAgICBpZiAocmV0dXJuVmFsLnJhd1ZhbHVlKCkgPCAwKQorICAgICAg
ICAgICAgcmV0dXJuIEFwcFVuaXQ6Om1heCgpOworICAgICAgICByZXR1cm4gcmV0dXJuVmFsOwor
ICAgIH0gZWxzZSBpZiAocmV0dXJuVmFsLnJhd1ZhbHVlKCkgPiAwKQorICAgICAgICByZXR1cm4g
QXBwVW5pdDo6bWluKCk7CisgICAgcmV0dXJuIHJldHVyblZhbDsKK30KKworaW5saW5lIEFwcFVu
aXQgb3BlcmF0b3IqKGNvbnN0IEFwcFVuaXQmIGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAg
QXBwVW5pdCByZXR1cm5WYWw7CisgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKChhLnJhd1ZhbHVl
KCkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yKSAqIGIucmF3VmFsdWUoKSk7CisgICAgQVNTRVJU
KChhLnJhd1ZhbHVlKCkgPj0gMCAmJiBiLnJhd1ZhbHVlKCkgPj0gMCAmJiByZXR1cm5WYWwucmF3
VmFsdWUoKSA+PSAwKQorICAgICAgICAgICB8fCAoYS5yYXdWYWx1ZSgpIDwgMCAmJiBiLnJhd1Zh
bHVlKCkgPCAwICYmIHJldHVyblZhbC5yYXdWYWx1ZSgpID49IDApCisgICAgICAgICAgIHx8ICgo
YS5yYXdWYWx1ZSgpIDwgMCB8fCBiLnJhd1ZhbHVlKCkgPCAwKSAmJiByZXR1cm5WYWwucmF3VmFs
dWUoKSA8PSAwKSk7CisgICAgcmV0dXJuIHJldHVyblZhbDsKK30gICAgCisKK2lubGluZSBkb3Vi
bGUgb3BlcmF0b3IqKGNvbnN0IEFwcFVuaXQmIGEsIGRvdWJsZSBiKQoreworICAgIHJldHVybiBh
LnRvRG91YmxlKCkgKiBiOworfQorCitpbmxpbmUgZmxvYXQgb3BlcmF0b3IqKGNvbnN0IEFwcFVu
aXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEudG9GbG9hdCgpICogYjsKK30KKworaW5s
aW5lIEFwcFVuaXQgb3BlcmF0b3IqKGNvbnN0IEFwcFVuaXQmIGEsIGludCBiKQoreworICAgIHJl
dHVybiBhICogQXBwVW5pdChiKTsKK30KKworaW5saW5lIEFwcFVuaXQgb3BlcmF0b3IqKGNvbnN0
IEFwcFVuaXQmIGEsIHVuc2lnbmVkIGIpCit7CisgICAgcmV0dXJuIGEgKiBBcHBVbml0KGIpOwor
fQorCitpbmxpbmUgQXBwVW5pdCBvcGVyYXRvciooY29uc3QgQXBwVW5pdCYgYSwgbG9uZyB1bnNp
Z25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSAqIEFwcFVuaXQoYik7Cit9CisKK2lubGluZSBB
cHBVbml0IG9wZXJhdG9yKihsb25nIHVuc2lnbmVkIGludCBhLCBjb25zdCBBcHBVbml0JiBiKQor
eworICAgIHJldHVybiBBcHBVbml0KGEpICogYjsKK30KKworaW5saW5lIEFwcFVuaXQgb3BlcmF0
b3IqKHVuc2lnbmVkIGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEFwcFVuaXQo
YSkgKiBiOworfQorCitpbmxpbmUgQXBwVW5pdCBvcGVyYXRvciooY29uc3QgaW50IGEsIGNvbnN0
IEFwcFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEFwcFVuaXQoYSkgKiBiOworfQorCitpbmxpbmUg
ZmxvYXQgb3BlcmF0b3IqKGNvbnN0IGZsb2F0IGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAg
cmV0dXJuIGEgKiBiLnRvRmxvYXQoKTsKK30KKworaW5saW5lIGRvdWJsZSBvcGVyYXRvciooY29u
c3QgZG91YmxlIGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgKiBiLnRvRG91
YmxlKCk7Cit9CisKK2lubGluZSBBcHBVbml0IG9wZXJhdG9yLyhjb25zdCBBcHBVbml0JiBhLCBj
b25zdCBBcHBVbml0JiBiKQoreworICAgIEFwcFVuaXQgcmV0dXJuVmFsOworICAgIHJldHVyblZh
bC5zZXRSYXdWYWx1ZShrRml4ZWRQb2ludERlbm9taW5hdG9yICogKGEucmF3VmFsdWUoKSAvIGIu
cmF3VmFsdWUoKSkpOworICAgIEFTU0VSVCgoKGEucmF3VmFsdWUoKSA+PSAwKSAmJiAoYi5yYXdW
YWx1ZSgpID49IDApICYmIChyZXR1cm5WYWwucmF3VmFsdWUoKSA+PSAwKSkKKyAgICAgICAgICAg
fHwgKChhLnJhd1ZhbHVlKCkgPCAwKSAmJiAoYi5yYXdWYWx1ZSgpIDwgMCkgJiYgKHJldHVyblZh
bC5yYXdWYWx1ZSgpID49IDApKQorICAgICAgICAgICB8fCAoKChhLnJhd1ZhbHVlKCkgPCAwKSB8
fCAoYi5yYXdWYWx1ZSgpIDwgMCkpICYmIChyZXR1cm5WYWwucmF3VmFsdWUoKSA8PSAwKSkpOwor
ICAgIHJldHVybiByZXR1cm5WYWw7Cit9ICAgIAorCitpbmxpbmUgZmxvYXQgb3BlcmF0b3IvKGNv
bnN0IEFwcFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEudG9GbG9hdCgpIC8gYjsK
K30KKworaW5saW5lIGRvdWJsZSBvcGVyYXRvci8oY29uc3QgQXBwVW5pdCYgYSwgZG91YmxlIGIp
Cit7CisgICAgcmV0dXJuIGEudG9Eb3VibGUoKSAvIGI7Cit9CisKK2lubGluZSBBcHBVbml0IG9w
ZXJhdG9yLyhjb25zdCBBcHBVbml0JiBhLCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSAvIEFwcFVu
aXQoYik7Cit9CisKK2lubGluZSBBcHBVbml0IG9wZXJhdG9yLyhjb25zdCBBcHBVbml0JiBhLCB1
bnNpZ25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSAvIEFwcFVuaXQoYik7Cit9CisKK2lubGlu
ZSBmbG9hdCBvcGVyYXRvci8oY29uc3QgZmxvYXQgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sKKyAg
ICByZXR1cm4gYSAvIGIudG9GbG9hdCgpOworfQorCitpbmxpbmUgQXBwVW5pdCBvcGVyYXRvci8o
Y29uc3QgaW50IGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEFwcFVuaXQoYSkg
LyBiOworfQorCitpbmxpbmUgQXBwVW5pdCBvcGVyYXRvci8odW5zaWduZWQgaW50IGEsIGNvbnN0
IEFwcFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEFwcFVuaXQoYSkgLyBiOworfQorCitpbmxpbmUg
QXBwVW5pdCBvcGVyYXRvcisoY29uc3QgQXBwVW5pdCYgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sK
KyAgICBBcHBVbml0IHJldHVyblZhbDsKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoYS5yYXdW
YWx1ZSgpICsgYi5yYXdWYWx1ZSgpKTsKKyAgICByZXR1cm4gcmV0dXJuVmFsOworfQorCitpbmxp
bmUgQXBwVW5pdCBvcGVyYXRvcisoY29uc3QgQXBwVW5pdCYgYSwgaW50IGIpCit7CisgICAgcmV0
dXJuIGEgKyBBcHBVbml0KGIpOworfQorCitpbmxpbmUgZmxvYXQgb3BlcmF0b3IrKGNvbnN0IEFw
cFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEudG9GbG9hdCgpICsgYjsKK30KKwor
aW5saW5lIGRvdWJsZSBvcGVyYXRvcisoY29uc3QgQXBwVW5pdCYgYSwgZG91YmxlIGIpCit7Cisg
ICAgcmV0dXJuIGEudG9Eb3VibGUoKSArIGI7Cit9CisKK2lubGluZSBBcHBVbml0IG9wZXJhdG9y
Kyhjb25zdCBpbnQgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sKKyAgICByZXR1cm4gQXBwVW5pdChh
KSArIGI7Cit9CisKK2lubGluZSBmbG9hdCBvcGVyYXRvcisoY29uc3QgZmxvYXQgYSwgY29uc3Qg
QXBwVW5pdCYgYikKK3sKKyAgICByZXR1cm4gYSArIGIudG9GbG9hdCgpOworfQorCitpbmxpbmUg
QXBwVW5pdCBvcGVyYXRvci0oY29uc3QgQXBwVW5pdCYgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sK
KyAgICBBcHBVbml0IHJldHVyblZhbDsKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoYS5yYXdW
YWx1ZSgpIC0gYi5yYXdWYWx1ZSgpKTsKKyAgICByZXR1cm4gcmV0dXJuVmFsOworfQorCitpbmxp
bmUgQXBwVW5pdCBvcGVyYXRvci0oY29uc3QgQXBwVW5pdCYgYSwgaW50IGIpCit7CisgICAgcmV0
dXJuIGEgLSBBcHBVbml0KGIpOworfQorCitpbmxpbmUgZmxvYXQgb3BlcmF0b3ItKGNvbnN0IEFw
cFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEudG9GbG9hdCgpIC0gYjsKK30KKwor
aW5saW5lIEFwcFVuaXQgb3BlcmF0b3ItKGNvbnN0IGludCBhLCBjb25zdCBBcHBVbml0JiBiKQor
eworICAgIHJldHVybiBBcHBVbml0KGEpIC0gYjsKK30KKworaW5saW5lIGZsb2F0IG9wZXJhdG9y
LShjb25zdCBmbG9hdCBhLCBjb25zdCBBcHBVbml0JiBiKQoreworICAgIHJldHVybiBhIC0gYi50
b0Zsb2F0KCk7Cit9CisKK2lubGluZSBBcHBVbml0IG9wZXJhdG9yLShjb25zdCBBcHBVbml0JiBh
KQoreworICAgIEFwcFVuaXQgcmV0dXJuVmFsOworICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZSgt
YS5yYXdWYWx1ZSgpKTsKKyAgICByZXR1cm4gcmV0dXJuVmFsOworfQorCitpbmxpbmUgQXBwVW5p
dCYgb3BlcmF0b3IrPShBcHBVbml0JiBhLCBjb25zdCBBcHBVbml0JiBiKQoreworICAgIGEgPSBh
ICsgYjsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEFwcFVuaXQmIG9wZXJhdG9yKz0oQXBw
VW5pdCYgYSwgaW50IGIpCit7CisgICAgYSA9IGEgKyBiOworICAgIHJldHVybiBhOworfQorCitp
bmxpbmUgZmxvYXQmIG9wZXJhdG9yKz0oZmxvYXQmIGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7Cisg
ICAgYSA9IGEgKyBiLnRvRmxvYXQoKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEFwcFVu
aXQmIG9wZXJhdG9yLT0oQXBwVW5pdCYgYSwgaW50IGIpCit7CisgICAgYSA9IGEgLSBiOworICAg
IHJldHVybiBhOworfQorCitpbmxpbmUgQXBwVW5pdCYgb3BlcmF0b3ItPShBcHBVbml0JiBhLCBj
b25zdCBBcHBVbml0JiBiKQoreworICAgIGEgPSBhIC0gYjsKKyAgICByZXR1cm4gYTsKK30KKwor
aW5saW5lIGZsb2F0JiBvcGVyYXRvci09KGZsb2F0JiBhLCBjb25zdCBBcHBVbml0JiBiKQorewor
ICAgIGEgPSBhIC0gYi50b0Zsb2F0KCk7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBBcHBV
bml0JiBvcGVyYXRvcio9KEFwcFVuaXQmIGEsIGludCBiKQoreworICAgIGEgPSBhICogYjsKKyAg
ICByZXR1cm4gYTsKK30KKworaW5saW5lIEFwcFVuaXQmIG9wZXJhdG9yKj0oQXBwVW5pdCYgYSwg
ZmxvYXQgYikKK3sKKyAgICBhID0gYSAqIGI7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBp
bnQgc25hcFNpemVUb1BpeGVsKEFwcFVuaXQgc2l6ZSwgQXBwVW5pdCBsb2NhdGlvbikgCit7Cisg
ICAgcmV0dXJuIChsb2NhdGlvbiArIHNpemUpLnJvdW5kKCkgLSBsb2NhdGlvbi5yb3VuZCgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBBcHBVbml0X2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZpeGVkUG9pbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFBvaW50LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFBvaW50LmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEy
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRml4ZWRQb2ludF9oCisjZGVm
aW5lIEZpeGVkUG9pbnRfaAorCisjaW5jbHVkZSAiRml4ZWRTaXplLmgiCisjaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKKyNpZiBQTEFURk9STShR
VCkKKyNpbmNsdWRlIDxRRGF0YVN0cmVhbT4KKyNlbmRpZgorCisjaWYgVVNFKENHKSB8fCBVU0Uo
U0tJQV9PTl9NQUNfQ0hST01JVU0pCit0eXBlZGVmIHN0cnVjdCBDR1BvaW50IENHUG9pbnQ7Cisj
ZW5kaWYKKworCisjaWYgT1MoREFSV0lOKSAmJiAhUExBVEZPUk0oUVQpCisjaWZkZWYgTlNHRU9N
RVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKK3R5cGVkZWYgc3RydWN0IENHUG9p
bnQgTlNQb2ludDsKKyNlbHNlCit0eXBlZGVmIHN0cnVjdCBfTlNQb2ludCBOU1BvaW50OworI2Vu
ZGlmCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKK3R5cGVkZWYgc3RydWN0IHRhZ1BPSU5U
IFBPSU5UOwordHlwZWRlZiBzdHJ1Y3QgdGFnUE9JTlRTIFBPSU5UUzsKKyNlbGlmIFBMQVRGT1JN
KFFUKQorUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRUG9pbnRGOworUVRfRU5EX05BTUVTUEFD
RQorI2VsaWYgUExBVEZPUk0oR1RLKQordHlwZWRlZiBzdHJ1Y3QgX0dka1BvaW50IEdka1BvaW50
OworI2VsaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCUG9pbnQ7CisjZWxpZiBQTEFURk9STShF
RkwpCit0eXBlZGVmIHN0cnVjdCBfRXZhc19Qb2ludCBFdmFzX1BvaW50OworI2VuZGlmCisKKyNp
ZiBQTEFURk9STShXWCkKK2NsYXNzIHd4UG9pbnQ7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEJS
RVdNUCkKK3R5cGVkZWYgc3RydWN0IF9wb2ludCBBRUVQb2ludDsKKyNlbmRpZgorCisjaWYgVVNF
KFNLSUEpCitzdHJ1Y3QgU2tQb2ludDsKK3N0cnVjdCBTa0lQb2ludDsKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpeGVkUG9pbnQgeworcHVibGljOgorICAgIEZpeGVk
UG9pbnQoKSA6IG1feCgwKSwgbV95KDApIHsgfQorICAgIEZpeGVkUG9pbnQoQXBwVW5pdCB4LCBB
cHBVbml0IHkpIDogbV94KHgpLCBtX3koeSkgeyB9CisgICAgRml4ZWRQb2ludChjb25zdCBJbnRQ
b2ludCYgcG9pbnQpIDogbV94KHBvaW50LngoKSksIG1feShwb2ludC55KCkpIHsgfQorICAgIGV4
cGxpY2l0IEZpeGVkUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgc2l6ZSkgOiBtX3goc2l6ZS54KCkp
LCBtX3koc2l6ZS55KCkpIHsgfQorCisgICAgc3RhdGljIEZpeGVkUG9pbnQgemVybygpIHsgcmV0
dXJuIEZpeGVkUG9pbnQoKTsgfQorCisgICAgQXBwVW5pdCB4KCkgY29uc3QgeyByZXR1cm4gbV94
OyB9CisgICAgQXBwVW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9CisKKyAgICB2b2lkIHNl
dFgoQXBwVW5pdCB4KSB7IG1feCA9IHg7IH0KKyAgICB2b2lkIHNldFkoQXBwVW5pdCB5KSB7IG1f
eSA9IHk7IH0KKworICAgIHZvaWQgbW92ZShjb25zdCBGaXhlZFNpemUmIHMpIHsgbW92ZShzLndp
ZHRoKCksIHMuaGVpZ2h0KCkpOyB9IAorICAgIHZvaWQgbW92ZUJ5KGNvbnN0IEZpeGVkUG9pbnQm
IG9mZnNldCkgeyBtb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkpOyB9CisgICAgdm9pZCBtb3Zl
KEFwcFVuaXQgZHgsIEFwcFVuaXQgZHkpIHsgbV94ICs9IGR4OyBtX3kgKz0gZHk7IH0KKyAgICB2
b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkKKyAgICB7CisgICAgICAgIG1feCAqPSBzeDsK
KyAgICAgICAgbV95ICo9IHN5OworICAgIH0KKyAgICAKKyAgICBGaXhlZFBvaW50IGV4cGFuZGVk
VG8oY29uc3QgRml4ZWRQb2ludCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
Rml4ZWRQb2ludChtX3ggPiBvdGhlci5tX3ggPyBtX3ggOiBvdGhlci5tX3gsCisgICAgICAgICAg
ICBtX3kgPiBvdGhlci5tX3kgPyBtX3kgOiBvdGhlci5tX3kpOworICAgIH0KKworICAgIEZpeGVk
UG9pbnQgc2hydW5rVG8oY29uc3QgRml4ZWRQb2ludCYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gRml4ZWRQb2ludChtX3ggPCBvdGhlci5tX3ggPyBtX3ggOiBvdGhlci5tX3gs
CisgICAgICAgICAgICBtX3kgPCBvdGhlci5tX3kgPyBtX3kgOiBvdGhlci5tX3kpOworICAgIH0K
KworICAgIHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCisgICAgeworICAgICAgICAqdGhpcyA9
IGV4cGFuZGVkVG8oemVybygpKTsKKyAgICB9CisKKyAgICBGaXhlZFBvaW50IHRyYW5zcG9zZWRQ
b2ludCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRml4ZWRQb2ludChtX3ksIG1feCk7
CisgICAgfQorCisjaWYgVVNFKENHKSB8fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01JVU0pCisgICAg
ZXhwbGljaXQgRml4ZWRQb2ludChjb25zdCBDR1BvaW50Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1w
bGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgb3BlcmF0b3IgQ0dQb2ludCgpIGNvbnN0Owor
I2VuZGlmCisKKyNpZiBPUyhEQVJXSU4pICYmICFQTEFURk9STShRVCkgJiYgIWRlZmluZWQoTlNH
RU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpCisgICAgZXhwbGljaXQgRml4
ZWRQb2ludChjb25zdCBOU1BvaW50Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5j
ZSBpdCdzIGxvc3N5CisgICAgb3BlcmF0b3IgTlNQb2ludCgpIGNvbnN0OworI2VuZGlmCisKKyNp
ZiBQTEFURk9STShXSU4pCisgICAgRml4ZWRQb2ludChjb25zdCBQT0lOVCYpOworICAgIG9wZXJh
dG9yIFBPSU5UKCkgY29uc3Q7CisgICAgRml4ZWRQb2ludChjb25zdCBQT0lOVFMmKTsKKyAgICBv
cGVyYXRvciBQT0lOVFMoKSBjb25zdDsKKyNlbGlmIFBMQVRGT1JNKFFUKQorICAgIEZpeGVkUG9p
bnQoY29uc3QgUVBvaW50RiYpOworICAgIG9wZXJhdG9yIFFQb2ludEYoKSBjb25zdDsKKyNlbGlm
IFBMQVRGT1JNKEdUSykKKyAgICBGaXhlZFBvaW50KGNvbnN0IEdka1BvaW50Jik7CisgICAgb3Bl
cmF0b3IgR2RrUG9pbnQoKSBjb25zdDsKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorICAgIGV4cGxp
Y2l0IEZpeGVkUG9pbnQoY29uc3QgQlBvaW50Jik7CisgICAgb3BlcmF0b3IgQlBvaW50KCkgY29u
c3Q7CisjZWxpZiBQTEFURk9STShFRkwpCisgICAgZXhwbGljaXQgRml4ZWRQb2ludChjb25zdCBF
dmFzX1BvaW50Jik7CisgICAgb3BlcmF0b3IgRXZhc19Qb2ludCgpIGNvbnN0OworI2VuZGlmCisK
KyNpZiBQTEFURk9STShXWCkKKyAgICBGaXhlZFBvaW50KGNvbnN0IHd4UG9pbnQmKTsKKyAgICBv
cGVyYXRvciB3eFBvaW50KCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEJSRVdNUCkK
KyAgICBGaXhlZFBvaW50KGNvbnN0IEFFRVBvaW50Jik7CisgICAgb3BlcmF0b3IgQUVFUG9pbnQo
KSBjb25zdDsKKyNlbmRpZgorCisjaWYgVVNFKFNLSUEpCisgICAgRml4ZWRQb2ludChjb25zdCBT
a1BvaW50Jik7CisgICAgb3BlcmF0b3IgU2tJUG9pbnQoKSBjb25zdDsKKyAgICBvcGVyYXRvciBT
a1BvaW50KCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBBcHBVbml0IG1feCwgbV95
OworfTsKKworaW5saW5lIEZpeGVkUG9pbnQmIG9wZXJhdG9yKz0oRml4ZWRQb2ludCYgYSwgY29u
c3QgRml4ZWRTaXplJiBiKQoreworICAgIGEubW92ZShiLndpZHRoKCksIGIuaGVpZ2h0KCkpOwor
ICAgIHJldHVybiBhOworfQorCitpbmxpbmUgRml4ZWRQb2ludCYgb3BlcmF0b3ItPShGaXhlZFBv
aW50JiBhLCBjb25zdCBGaXhlZFNpemUmIGIpCit7CisgICAgYS5tb3ZlKC1iLndpZHRoKCksIC1i
LmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZpeGVkUG9pbnQgb3BlcmF0
b3IrKGNvbnN0IEZpeGVkUG9pbnQmIGEsIGNvbnN0IEZpeGVkU2l6ZSYgYikKK3sKKyAgICByZXR1
cm4gRml4ZWRQb2ludChhLngoKSArIGIud2lkdGgoKSwgYS55KCkgKyBiLmhlaWdodCgpKTsKK30K
KworaW5saW5lIEZpeGVkUG9pbnQgb3BlcmF0b3IrKGNvbnN0IEZpeGVkUG9pbnQmIGEsIGNvbnN0
IEZpeGVkUG9pbnQmIGIpCit7CisgICAgcmV0dXJuIEZpeGVkUG9pbnQoYS54KCkgKyBiLngoKSwg
YS55KCkgKyBiLnkoKSk7Cit9CisKK2lubGluZSBGaXhlZFNpemUgb3BlcmF0b3ItKGNvbnN0IEZp
eGVkUG9pbnQmIGEsIGNvbnN0IEZpeGVkUG9pbnQmIGIpCit7CisgICAgcmV0dXJuIEZpeGVkU2l6
ZShhLngoKSAtIGIueCgpLCBhLnkoKSAtIGIueSgpKTsKK30KKworaW5saW5lIEZpeGVkUG9pbnQg
b3BlcmF0b3ItKGNvbnN0IEZpeGVkUG9pbnQmIGEsIGNvbnN0IEZpeGVkU2l6ZSYgYikKK3sKKyAg
ICByZXR1cm4gRml4ZWRQb2ludChhLngoKSAtIGIud2lkdGgoKSwgYS55KCkgLSBiLmhlaWdodCgp
KTsKK30KKworaW5saW5lIEZpeGVkUG9pbnQgb3BlcmF0b3ItKGNvbnN0IEZpeGVkUG9pbnQmIHBv
aW50KQoreworICAgIHJldHVybiBGaXhlZFBvaW50KC1wb2ludC54KCksIC1wb2ludC55KCkpOwor
fQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZpeGVkUG9pbnQmIGEsIGNvbnN0IEZp
eGVkUG9pbnQmIGIpCit7CisgICAgcmV0dXJuIGEueCgpID09IGIueCgpICYmIGEueSgpID09IGIu
eSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZpeGVkUG9pbnQmIGEsIGNv
bnN0IEZpeGVkUG9pbnQmIGIpCit7CisgICAgcmV0dXJuIGEueCgpICE9IGIueCgpIHx8IGEueSgp
ICE9IGIueSgpOworfQorCitpbmxpbmUgRml4ZWRQb2ludCB0b1BvaW50KGNvbnN0IEZpeGVkU2l6
ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gRml4ZWRQb2ludChzaXplLndpZHRoKCksIHNpemUuaGVp
Z2h0KCkpOworfQorCitpbmxpbmUgRml4ZWRTaXplIHRvU2l6ZShjb25zdCBGaXhlZFBvaW50JiBh
KQoreworICAgIHJldHVybiBGaXhlZFNpemUoYS54KCksIGEueSgpKTsKK30KKworaW5saW5lIElu
dFBvaW50IGZsb29yZWRJbnRQb2ludChjb25zdCBGaXhlZFBvaW50JiBwb2ludCkKK3sKKyAgICBy
ZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLnRvSW50KCksIHBvaW50LnkoKS50b0ludCgpKTsKK30K
KworaW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2ludChjb25zdCBGaXhlZFBvaW50JiBwb2lu
dCkKK3sKKyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLnJvdW5kKCksIHBvaW50LnkoKS5y
b3VuZCgpKTsKK30KKworaW5saW5lIEludFBvaW50IGNlaWxlZEludFBvaW50KGNvbnN0IEZpeGVk
UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCkuY2VpbCgpLCBw
b2ludC55KCkuY2VpbCgpKTsKK30KKworI2lmIFBMQVRGT1JNKFFUKQoraW5saW5lIFFEYXRhU3Ry
ZWFtJiBvcGVyYXRvcjw8KFFEYXRhU3RyZWFtJiBzdHJlYW0sIGNvbnN0IEZpeGVkUG9pbnQmIHBv
aW50KQoreworICAgIHN0cmVhbSA8PCBwb2ludC54KCkudG9GbG9hdCgpIDw8IHBvaW50LnkoKS50
b0Zsb2F0KCk7CisgICAgcmV0dXJuIHN0cmVhbTsKK30KKworaW5saW5lIFFEYXRhU3RyZWFtJiBv
cGVyYXRvcj4+KFFEYXRhU3RyZWFtJiBzdHJlYW0sIEZpeGVkUG9pbnQmIHBvaW50KQoreworICAg
IGZsb2F0IHgsIHk7CisgICAgc3RyZWFtID4+IHggPj4geTsKKyAgICBwb2ludC5zZXRYKHgpOwor
ICAgIHBvaW50LnNldFkoeSk7CisgICAgcmV0dXJuIHN0cmVhbTsKK30KKyNlbmRpZgorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGaXhlZFBvaW50X2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZpeGVkUmVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRSZWN0LmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZpeGVkUmVjdC5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGaXhlZFJlY3QuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgPGFsZ29y
aXRobT4KKwordXNpbmcgc3RkOjptYXg7Cit1c2luZyBzdGQ6Om1pbjsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitGaXhlZFJlY3Q6OkZpeGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCisgICAg
OiBtX2xvY2F0aW9uKEZpeGVkUG9pbnQoci54KCksIHIueSgpKSkKKyAgICAsIG1fc2l6ZShGaXhl
ZFNpemUoci53aWR0aCgpLCByLmhlaWdodCgpKSkKK3sKK30KKworYm9vbCBGaXhlZFJlY3Q6Omlu
dGVyc2VjdHMoY29uc3QgRml4ZWRSZWN0JiBvdGhlcikgY29uc3QKK3sKKyAgICAvLyBDaGVja2lu
ZyBlbXB0aW5lc3MgaGFuZGxlcyBuZWdhdGl2ZSB3aWR0aHMgYXMgd2VsbCBhcyB6ZXJvLgorICAg
IHJldHVybiAhaXNFbXB0eSgpICYmICFvdGhlci5pc0VtcHR5KCkKKyAgICAgICAgJiYgeCgpIDwg
b3RoZXIubWF4WCgpICYmIG90aGVyLngoKSA8IG1heFgoKQorICAgICAgICAmJiB5KCkgPCBvdGhl
ci5tYXhZKCkgJiYgb3RoZXIueSgpIDwgbWF4WSgpOworfQorCitib29sIEZpeGVkUmVjdDo6Y29u
dGFpbnMoY29uc3QgRml4ZWRSZWN0JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4geCgpIDw9
IG90aGVyLngoKSAmJiBtYXhYKCkgPj0gb3RoZXIubWF4WCgpCisgICAgICAgICYmIHkoKSA8PSBv
dGhlci55KCkgJiYgbWF4WSgpID49IG90aGVyLm1heFkoKTsKK30KKwordm9pZCBGaXhlZFJlY3Q6
OmludGVyc2VjdChjb25zdCBGaXhlZFJlY3QmIG90aGVyKQoreworICAgIEFwcFVuaXQgeCA9IG1h
eCh4KCksIG90aGVyLngoKSk7CisgICAgQXBwVW5pdCB5ID0gbWF4KHkoKSwgb3RoZXIueSgpKTsK
KyAgICBBcHBVbml0IG1heFggPSBtaW4obWF4WCgpLCBvdGhlci5tYXhYKCkpOworICAgIEFwcFVu
aXQgbWF4WSA9IG1pbihtYXhZKCksIG90aGVyLm1heFkoKSk7CisKKyAgICAvLyBSZXR1cm4gYSBj
bGVhbiBlbXB0eSByZWN0YW5nbGUgZm9yIG5vbi1pbnRlcnNlY3RpbmcgY2FzZXMuCisgICAgaWYg
KHggPj0gbWF4WCB8fCB5ID49IG1heFkpIHsKKyAgICAgICAgeCA9IDA7CisgICAgICAgIHkgPSAw
OworICAgICAgICBtYXhYID0gMDsKKyAgICAgICAgbWF4WSA9IDA7CisgICAgfQorCisgICAgbV9s
b2NhdGlvbi5zZXRYKHgpOworICAgIG1fbG9jYXRpb24uc2V0WSh5KTsKKyAgICBtX3NpemUuc2V0
V2lkdGgobWF4WCAtIHgpOworICAgIG1fc2l6ZS5zZXRIZWlnaHQobWF4WSAtIHkpOworfQorCit2
b2lkIEZpeGVkUmVjdDo6dW5pdGUoY29uc3QgRml4ZWRSZWN0JiBvdGhlcikKK3sKKyAgICAvLyBI
YW5kbGUgZW1wdHkgc3BlY2lhbCBjYXNlcyBmaXJzdC4KKyAgICBpZiAob3RoZXIuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKGlzRW1wdHkoKSkgeworICAgICAgICAqdGhpcyA9
IG90aGVyOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQXBwVW5pdCB4ID0gbWluKHgo
KSwgb3RoZXIueCgpKTsKKyAgICBBcHBVbml0IHkgPSBtaW4oeSgpLCBvdGhlci55KCkpOworICAg
IEFwcFVuaXQgbWF4WCA9IG1heChtYXhYKCksIG90aGVyLm1heFgoKSk7CisgICAgQXBwVW5pdCBt
YXhZID0gbWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKTsKKworICAgIG1fbG9jYXRpb24uc2V0WCh4
KTsKKyAgICBtX2xvY2F0aW9uLnNldFkoeSk7CisgICAgbV9zaXplLnNldFdpZHRoKG1heFggLSB4
KTsKKyAgICBtX3NpemUuc2V0SGVpZ2h0KG1heFkgLSB5KTsKK30KKwordm9pZCBGaXhlZFJlY3Q6
OnVuaXRlSWZOb25aZXJvKGNvbnN0IEZpeGVkUmVjdCYgb3RoZXIpCit7CisgICAgLy8gSGFuZGxl
IGVtcHR5IHNwZWNpYWwgY2FzZXMgZmlyc3QuCisgICAgaWYgKCFvdGhlci53aWR0aCgpICYmICFv
dGhlci5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghd2lkdGgoKSAmJiAhaGVp
Z2h0KCkpIHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEFwcFVuaXQgeCA9IG1pbih4KCksIG90aGVyLngoKSk7CisgICAgQXBwVW5pdCB5ID0g
bWluKHkoKSwgb3RoZXIueSgpKTsKKyAgICBBcHBVbml0IG1heFggPSBtYXgobWF4WCgpLCBvdGhl
ci5tYXhYKCkpOworICAgIEFwcFVuaXQgbWF4WSA9IG1heChtYXhZKCksIG90aGVyLm1heFkoKSk7
CisKKyAgICBtX2xvY2F0aW9uLnNldFgoeCk7CisgICAgbV9sb2NhdGlvbi5zZXRZKHkpOworICAg
IG1fc2l6ZS5zZXRXaWR0aChtYXhYIC0geCk7CisgICAgbV9zaXplLnNldEhlaWdodChtYXhZIC0g
eSk7Cit9CisKK3ZvaWQgRml4ZWRSZWN0OjpzY2FsZShmbG9hdCBzKQoreworICAgIG1fbG9jYXRp
b24uc2V0WCh4KCkgKiBzKTsKKyAgICBtX2xvY2F0aW9uLnNldFkoeSgpICogcyk7CisgICAgbV9z
aXplLnNldFdpZHRoKHdpZHRoKCkgKiBzKTsKKyAgICBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCgp
ICogcyk7Cit9CisKK0ZpeGVkUmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEZpeGVkUmVjdD4m
IHJlY3RzKQoreworICAgIEZpeGVkUmVjdCByZXN1bHQ7CisKKyAgICBzaXplX3QgY291bnQgPSBy
ZWN0cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAg
ICAgICByZXN1bHQudW5pdGUocmVjdHNbaV0pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
SW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEZpeGVkUmVjdCYgcmVjdCkKK3sKKyAgICBm
bG9hdCB4ID0gZmxvb3JmKHJlY3QueCgpLnRvRmxvYXQoKSk7CisgICAgZmxvYXQgeSA9IGZsb29y
ZihyZWN0LnkoKS50b0Zsb2F0KCkpOworICAgIGZsb2F0IHdpZHRoID0gY2VpbGYocmVjdC5tYXhY
KCkudG9GbG9hdCgpKSAtIHg7CisgICAgZmxvYXQgaGVpZ2h0ID0gY2VpbGYocmVjdC5tYXhZKCku
dG9GbG9hdCgpKSAtIHk7CisKKyAgICByZXR1cm4gSW50UmVjdChjbGFtcFRvSW50ZWdlcih4KSwg
Y2xhbXBUb0ludGVnZXIoeSksIAorICAgICAgICAgICAgICAgICAgIGNsYW1wVG9JbnRlZ2VyKHdp
ZHRoKSwgY2xhbXBUb0ludGVnZXIoaGVpZ2h0KSk7Cit9CisKK0ZpeGVkUmVjdCBlbmNsb3NpbmdG
aXhlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBGaXhlZFJlY3Qo
cmVjdC54KCksIHJlY3QueSgpLAorICAgICAgICAgICAgICAgICAgICAgcmVjdC5tYXhYKCkgLSBy
ZWN0LngoKSArIEFwcFVuaXQ6OmVwc2lsb24oKSwKKyAgICAgICAgICAgICAgICAgICAgIHJlY3Qu
bWF4WSgpIC0gcmVjdC55KCkgKyBBcHBVbml0OjplcHNpbG9uKCkpOworfQorCitJbnRSZWN0IHBp
eGVsU25hcHBlZEludFJlY3QoY29uc3QgRml4ZWRSZWN0JiByZWN0KQoreworICAgIEludFBvaW50
IHJvdW5kZWRMb2NhdGlvbiA9IHJvdW5kZWRJbnRQb2ludChyZWN0LmxvY2F0aW9uKCkpOworICAg
IHJldHVybiBJbnRSZWN0KHJvdW5kZWRMb2NhdGlvbiwgSW50U2l6ZSgocmVjdC54KCkgKyByZWN0
LndpZHRoKCkpLnJvdW5kKCkgLSByb3VuZGVkTG9jYXRpb24ueCgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVjdC55KCkgKyByZWN0LmhlaWdodCgpKS5y
b3VuZCgpIC0gcm91bmRlZExvY2F0aW9uLnkoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3Qu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZpeGVk
UmVjdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZpeGVkUmVjdF9o
CisjZGVmaW5lIEZpeGVkUmVjdF9oCisKKyNpbmNsdWRlICJGaXhlZFBvaW50LmgiCisjaW5jbHVk
ZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIFVTRShDRykgfHwg
VVNFKFNLSUFfT05fTUFDX0NIUk9NSVVNKQordHlwZWRlZiBzdHJ1Y3QgQ0dSZWN0IENHUmVjdDsK
KyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIE9T
KERBUldJTikpIHx8IChQTEFURk9STShRVCkgJiYgVVNFKFFUS0lUKSkKKyNpZmRlZiBOU0dFT01F
VFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwordHlwZWRlZiBzdHJ1Y3QgQ0dSZWN0
IE5TUmVjdDsKKyNlbHNlCit0eXBlZGVmIHN0cnVjdCBfTlNSZWN0IE5TUmVjdDsKKyNlbmRpZgor
I2VuZGlmCisKKyNpZiBQTEFURk9STShRVCkKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUVJl
Y3RGOworUVRfRU5EX05BTUVTUEFDRQorI2VsaWYgUExBVEZPUk0oR1RLKQorI2lmZGVmIEdUS19B
UElfVkVSU0lPTl8yCit0eXBlZGVmIHN0cnVjdCBfR2RrUmVjdGFuZ2xlIEdka1JlY3RhbmdsZTsK
KyNlbmRpZgorI2VsaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCUmVjdDsKKyNlbGlmIFBMQVRG
T1JNKEVGTCkKK3R5cGVkZWYgc3RydWN0IF9FaW5hX1JlY3RhbmdsZSBFaW5hX1JlY3RhbmdsZTsK
KyNlbmRpZgorCisjaWYgVVNFKENBSVJPKQordHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3JlY3Rhbmds
ZV9pbnQgY2Fpcm9fcmVjdGFuZ2xlX2ludF90OworI2VuZGlmCisKKyNpZiBQTEFURk9STShXWCkK
K2NsYXNzIHd4UmVjdDsKKyNlbmRpZgorCisjaWYgVVNFKFNLSUEpCitzdHJ1Y3QgU2tSZWN0Owor
c3RydWN0IFNrSVJlY3Q7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBG
bG9hdFJlY3Q7CisKK2NsYXNzIEZpeGVkUmVjdCB7CitwdWJsaWM6CisgICAgRml4ZWRSZWN0KCkg
eyB9CisgICAgRml4ZWRSZWN0KGNvbnN0IEZpeGVkUG9pbnQmIGxvY2F0aW9uLCBjb25zdCBGaXhl
ZFNpemUmIHNpemUpCisgICAgICAgIDogbV9sb2NhdGlvbihsb2NhdGlvbiksIG1fc2l6ZShzaXpl
KSB7IH0KKyAgICBGaXhlZFJlY3QoQXBwVW5pdCB4LCBBcHBVbml0IHksIEFwcFVuaXQgd2lkdGgs
IEFwcFVuaXQgaGVpZ2h0KQorICAgICAgICA6IG1fbG9jYXRpb24oRml4ZWRQb2ludCh4LCB5KSks
IG1fc2l6ZShGaXhlZFNpemUod2lkdGgsIGhlaWdodCkpIHsgfQorICAgIEZpeGVkUmVjdChjb25z
dCBGbG9hdFBvaW50JiBsb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6
IG1fbG9jYXRpb24obG9jYXRpb24pLCBtX3NpemUoc2l6ZSkgeyB9CisgICAgRml4ZWRSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpIDogbV9sb2NhdGlvbihyZWN0LmxvY2F0aW9uKCkpLCBtX3NpemUo
cmVjdC5zaXplKCkpIHsgfQorCisgICAgZXhwbGljaXQgRml4ZWRSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCk7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5Cisg
ICAgICAgIAorICAgIEZpeGVkUG9pbnQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0
aW9uOyB9CisgICAgRml4ZWRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKwor
ICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgRml4ZWRQb2ludCYgbG9jYXRpb24pIHsgbV9sb2Nh
dGlvbiA9IGxvY2F0aW9uOyB9CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IEZpeGVkU2l6ZSYgc2l6
ZSkgeyBtX3NpemUgPSBzaXplOyB9CisKKyAgICBBcHBVbml0IHgoKSBjb25zdCB7IHJldHVybiBt
X2xvY2F0aW9uLngoKTsgfQorICAgIEFwcFVuaXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRp
b24ueSgpOyB9CisgICAgQXBwVW5pdCBtYXhYKCkgY29uc3QgeyByZXR1cm4geCgpICsgd2lkdGgo
KTsgfQorICAgIEFwcFVuaXQgbWF4WSgpIGNvbnN0IHsgcmV0dXJuIHkoKSArIGhlaWdodCgpOyB9
CisgICAgQXBwVW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOyB9Cisg
ICAgQXBwVW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7IH0KKwor
ICAgIHZvaWQgc2V0WChBcHBVbml0IHgpIHsgbV9sb2NhdGlvbi5zZXRYKHgpOyB9CisgICAgdm9p
ZCBzZXRZKEFwcFVuaXQgeSkgeyBtX2xvY2F0aW9uLnNldFkoeSk7IH0KKyAgICB2b2lkIHNldFdp
ZHRoKEFwcFVuaXQgd2lkdGgpIHsgbV9zaXplLnNldFdpZHRoKHdpZHRoKTsgfQorICAgIHZvaWQg
c2V0SGVpZ2h0KEFwcFVuaXQgaGVpZ2h0KSB7IG1fc2l6ZS5zZXRIZWlnaHQoaGVpZ2h0KTsgfQor
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zaXplLmlzRW1wdHkoKTsgfQor
CisgICAgLy8gTk9URTogVGhlIHJlc3VsdCBpcyByb3VuZGVkIHRvIGludGVnZXIgdmFsdWVzLCBh
bmQgdGh1cyBtYXkgYmUgbm90IHRoZSBleGFjdAorICAgIC8vIGNlbnRlciBwb2ludC4KKyAgICBG
aXhlZFBvaW50IGNlbnRlcigpIGNvbnN0IHsgcmV0dXJuIEZpeGVkUG9pbnQoeCgpICsgd2lkdGgo
KSAvIDIsIHkoKSArIGhlaWdodCgpIC8gMik7IH0KKworICAgIHZvaWQgbW92ZShjb25zdCBGaXhl
ZFNpemUmIHNpemUpIHsgbV9sb2NhdGlvbiArPSBzaXplOyB9IAorICAgIHZvaWQgbW92ZUJ5KGNv
bnN0IEZpeGVkUG9pbnQmIG9mZnNldCkgeyBtX2xvY2F0aW9uLm1vdmUob2Zmc2V0LngoKSwgb2Zm
c2V0LnkoKSk7IH0KKyAgICB2b2lkIG1vdmUoQXBwVW5pdCBkeCwgQXBwVW5pdCBkeSkgeyBtX2xv
Y2F0aW9uLm1vdmUoZHgsIGR5KTsgfSAKKworICAgIHZvaWQgZXhwYW5kKGNvbnN0IEZpeGVkU2l6
ZSYgc2l6ZSkgeyBtX3NpemUgKz0gc2l6ZTsgfQorICAgIHZvaWQgZXhwYW5kKEFwcFVuaXQgZHcs
IEFwcFVuaXQgZGgpIHsgbV9zaXplLmV4cGFuZChkdywgZGgpOyB9CisgICAgdm9pZCBjb250cmFj
dChjb25zdCBGaXhlZFNpemUmIHNpemUpIHsgbV9zaXplIC09IHNpemU7IH0KKyAgICB2b2lkIGNv
bnRyYWN0KEFwcFVuaXQgZHcsIEFwcFVuaXQgZGgpIHsgbV9zaXplLmV4cGFuZCgtZHcsIC1kaCk7
IH0KKworICAgIHZvaWQgc2hpZnRYRWRnZVRvKEFwcFVuaXQgZWRnZSkKKyAgICB7CisgICAgICAg
IEFwcFVuaXQgZGVsdGEgPSBlZGdlIC0geCgpOworICAgICAgICBzZXRYKGVkZ2UpOworICAgICAg
ICBzZXRXaWR0aChzdGQ6Om1heDxBcHBVbml0PigwLCB3aWR0aCgpIC0gZGVsdGEpKTsKKyAgICB9
CisgICAgdm9pZCBzaGlmdE1heFhFZGdlVG8oQXBwVW5pdCBlZGdlKQorICAgIHsKKyAgICAgICAg
QXBwVW5pdCBkZWx0YSA9IGVkZ2UgLSBtYXhYKCk7CisgICAgICAgIHNldFdpZHRoKHN0ZDo6bWF4
PEFwcFVuaXQ+KDAsIHdpZHRoKCkgKyBkZWx0YSkpOworICAgIH0KKyAgICB2b2lkIHNoaWZ0WUVk
Z2VUbyhBcHBVbml0IGVkZ2UpCisgICAgeworICAgICAgICBBcHBVbml0IGRlbHRhID0gZWRnZSAt
IHkoKTsKKyAgICAgICAgc2V0WShlZGdlKTsKKyAgICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4PEFw
cFVuaXQ+KDAsIGhlaWdodCgpIC0gZGVsdGEpKTsKKyAgICB9CisgICAgdm9pZCBzaGlmdE1heFlF
ZGdlVG8oQXBwVW5pdCBlZGdlKQorICAgIHsKKyAgICAgICAgQXBwVW5pdCBkZWx0YSA9IGVkZ2Ug
LSBtYXhZKCk7CisgICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxBcHBVbml0PigwLCBoZWlnaHQo
KSArIGRlbHRhKSk7CisgICAgfQorCisgICAgRml4ZWRQb2ludCBtaW5YTWluWUNvcm5lcigpIGNv
bnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0gLy8gdHlwaWNhbGx5IHRvcExlZnQKKyAgICBGaXhl
ZFBvaW50IG1heFhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gRml4ZWRQb2ludChtX2xvY2F0
aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSk7IH0gLy8gdHlwaWNhbGx5
IHRvcFJpZ2h0CisgICAgRml4ZWRQb2ludCBtaW5YTWF4WUNvcm5lcigpIGNvbnN0IHsgcmV0dXJu
IEZpeGVkUG9pbnQobV9sb2NhdGlvbi54KCksIG1fbG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdo
dCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90dG9tTGVmdAorICAgIEZpeGVkUG9pbnQgbWF4WE1heFlD
b3JuZXIoKSBjb25zdCB7IHJldHVybiBGaXhlZFBvaW50KG1fbG9jYXRpb24ueCgpICsgbV9zaXpl
LndpZHRoKCksIG1fbG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgpKTsgfSAvLyB0eXBpY2Fs
bHkgYm90dG9tUmlnaHQKKyAgICAKKyAgICBib29sIGludGVyc2VjdHMoY29uc3QgRml4ZWRSZWN0
JikgY29uc3Q7CisgICAgYm9vbCBjb250YWlucyhjb25zdCBGaXhlZFJlY3QmKSBjb25zdDsKKwor
ICAgIC8vIFRoaXMgY2hlY2tzIHRvIHNlZSBpZiB0aGUgcmVjdCBjb250YWlucyB4LHkgaW4gdGhl
IHRyYWRpdGlvbmFsIHNlbnNlLgorICAgIC8vIEVxdWl2YWxlbnQgdG8gY2hlY2tpbmcgaWYgdGhl
IHJlY3QgY29udGFpbnMgYSAxeDEgcmVjdCBiZWxvdyBhbmQgdG8gdGhlIHJpZ2h0IG9mIChweCxw
eSkuCisgICAgYm9vbCBjb250YWlucyhBcHBVbml0IHB4LCBBcHBVbml0IHB5KSBjb25zdAorICAg
ICAgICB7IHJldHVybiBweCA+PSB4KCkgJiYgcHggPCBtYXhYKCkgJiYgcHkgPj0geSgpICYmIHB5
IDwgbWF4WSgpOyB9CisgICAgYm9vbCBjb250YWlucyhjb25zdCBGaXhlZFBvaW50JiBwb2ludCkg
Y29uc3QgeyByZXR1cm4gY29udGFpbnMocG9pbnQueCgpLCBwb2ludC55KCkpOyB9CisKKyAgICB2
b2lkIGludGVyc2VjdChjb25zdCBGaXhlZFJlY3QmKTsKKyAgICB2b2lkIHVuaXRlKGNvbnN0IEZp
eGVkUmVjdCYpOworICAgIHZvaWQgdW5pdGVJZk5vblplcm8oY29uc3QgRml4ZWRSZWN0Jik7CisK
KyAgICB2b2lkIGluZmxhdGVYKEFwcFVuaXQgZHgpCisgICAgeworICAgICAgICBtX2xvY2F0aW9u
LnNldFgobV9sb2NhdGlvbi54KCkgLSBkeCk7CisgICAgICAgIG1fc2l6ZS5zZXRXaWR0aChtX3Np
emUud2lkdGgoKSArIGR4ICsgZHgpOworICAgIH0KKyAgICB2b2lkIGluZmxhdGVZKEFwcFVuaXQg
ZHkpCisgICAgeworICAgICAgICBtX2xvY2F0aW9uLnNldFkobV9sb2NhdGlvbi55KCkgLSBkeSk7
CisgICAgICAgIG1fc2l6ZS5zZXRIZWlnaHQobV9zaXplLmhlaWdodCgpICsgZHkgKyBkeSk7Cisg
ICAgfQorICAgIHZvaWQgaW5mbGF0ZShBcHBVbml0IGQpIHsgaW5mbGF0ZVgoZCk7IGluZmxhdGVZ
KGQpOyB9CisgICAgdm9pZCBzY2FsZShmbG9hdCBzKTsKKworICAgIEZpeGVkUmVjdCB0cmFuc3Bv
c2VkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEZpeGVkUmVjdChtX2xvY2F0aW9uLnRyYW5zcG9zZWRQ
b2ludCgpLCBtX3NpemUudHJhbnNwb3NlZFNpemUoKSk7IH0KKworI2lmIFBMQVRGT1JNKFdYKQor
ICAgIEZpeGVkUmVjdChjb25zdCB3eFJlY3QmKTsKKyAgICBvcGVyYXRvciB3eFJlY3QoKSBjb25z
dDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQpCisgICAgRml4ZWRSZWN0KGNvbnN0IFFSZWN0
RiYpOworICAgIG9wZXJhdG9yIFFSZWN0RigpIGNvbnN0OworI2VsaWYgUExBVEZPUk0oR1RLKQor
I2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgRml4ZWRSZWN0KGNvbnN0IEdka1JlY3Rhbmds
ZSYpOworICAgIG9wZXJhdG9yIEdka1JlY3RhbmdsZSgpIGNvbnN0OworI2VuZGlmCisjZWxpZiBQ
TEFURk9STShIQUlLVSkKKyAgICBleHBsaWNpdCBGaXhlZFJlY3QoY29uc3QgQlJlY3QmKTsKKyAg
ICBvcGVyYXRvciBCUmVjdCgpIGNvbnN0OworI2VsaWYgUExBVEZPUk0oRUZMKQorICAgIGV4cGxp
Y2l0IEZpeGVkUmVjdChjb25zdCBFaW5hX1JlY3RhbmdsZSYpOworICAgIG9wZXJhdG9yIEVpbmFf
UmVjdGFuZ2xlKCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFVTRShDQUlSTykKKyAgICBGaXhlZFJl
Y3QoY29uc3QgY2Fpcm9fcmVjdGFuZ2xlX2ludF90Jik7CisgICAgb3BlcmF0b3IgY2Fpcm9fcmVj
dGFuZ2xlX2ludF90KCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFVTRShDRykgfHwgVVNFKFNLSUFf
T05fTUFDX0NIUk9NSVVNKQorICAgIEZpeGVkUmVjdChjb25zdCBDR1JlY3QmKTsKKyAgICBvcGVy
YXRvciBDR1JlY3QoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgVVNFKFNLSUEpCisgICAgRml4ZWRS
ZWN0KGNvbnN0IFNrUmVjdCYpOworICAgIG9wZXJhdG9yIFNrUmVjdCgpIGNvbnN0OworICAgIG9w
ZXJhdG9yIFNrSVJlY3QoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgKFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpKSBcCisg
ICAgICAgIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkgIHx8IChQTEFURk9S
TShRVCkgJiYgVVNFKFFUS0lUKSkKKyAgICBGaXhlZFJlY3QoY29uc3QgTlNSZWN0Jik7CisgICAg
b3BlcmF0b3IgTlNSZWN0KCkgY29uc3Q7CisjZW5kaWYKKworICAgIHN0YXRpYyBGaXhlZFJlY3Qg
aW5maW5pdGVSZWN0KCkge3JldHVybiBGaXhlZFJlY3QoQXBwVW5pdDo6bWluKCkgLyAyLCBBcHBV
bml0OjptaW4oKSAvIDIsIEFwcFVuaXQ6Om1heCgpLCBBcHBVbml0OjptYXgoKSk7IH0KKworcHJp
dmF0ZToKKyAgICBGaXhlZFBvaW50IG1fbG9jYXRpb247CisgICAgRml4ZWRTaXplIG1fc2l6ZTsK
K307CisKK2lubGluZSBGaXhlZFJlY3QgaW50ZXJzZWN0aW9uKGNvbnN0IEZpeGVkUmVjdCYgYSwg
Y29uc3QgRml4ZWRSZWN0JiBiKQoreworICAgIEZpeGVkUmVjdCBjID0gYTsKKyAgICBjLmludGVy
c2VjdChiKTsKKyAgICByZXR1cm4gYzsKK30KKworaW5saW5lIEZpeGVkUmVjdCB1bmlvblJlY3Qo
Y29uc3QgRml4ZWRSZWN0JiBhLCBjb25zdCBGaXhlZFJlY3QmIGIpCit7CisgICAgRml4ZWRSZWN0
IGMgPSBhOworICAgIGMudW5pdGUoYik7CisgICAgcmV0dXJuIGM7Cit9CisKK0ZpeGVkUmVjdCB1
bmlvblJlY3QoY29uc3QgVmVjdG9yPEZpeGVkUmVjdD4mKTsKKworaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBGaXhlZFJlY3QmIGEsIGNvbnN0IEZpeGVkUmVjdCYgYikKK3sKKyAgICByZXR1
cm4gYS5sb2NhdGlvbigpID09IGIubG9jYXRpb24oKSAmJiBhLnNpemUoKSA9PSBiLnNpemUoKTsK
K30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGaXhlZFJlY3QmIGEsIGNvbnN0IEZp
eGVkUmVjdCYgYikKK3sKKyAgICByZXR1cm4gYS5sb2NhdGlvbigpICE9IGIubG9jYXRpb24oKSB8
fCBhLnNpemUoKSAhPSBiLnNpemUoKTsKK30KKworSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNv
bnN0IEZpeGVkUmVjdCYpOworRml4ZWRSZWN0IGVuY2xvc2luZ0ZpeGVkUmVjdChjb25zdCBGbG9h
dFJlY3QmKTsKK0ludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChjb25zdCBGaXhlZFJlY3QmKTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRml4ZWRSZWN0X2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZpeGVkU2l6ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRTaXplLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZpeGVkU2l6ZS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZpeGVkU2l6ZS5oIgorCisjaW5jbHVkZSAiRml4ZWRQb2ludC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0ludFNpemUgcGl4ZWxTbmFwcGVkSW50U2l6ZShjb25zdCBGaXhlZFNp
emUmIHMsIGNvbnN0IEZpeGVkUG9pbnQmIHApIHsKKyAgICByZXR1cm4gSW50U2l6ZShzbmFwU2l6
ZVRvUGl4ZWwocy53aWR0aCgpLCBwLngoKSksIHNuYXBTaXplVG9QaXhlbChzLmhlaWdodCgpLCBw
LnkoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFNpemUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZpeGVkU2l6ZS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDIxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEZpeGVkU2l6ZV9oCisjZGVmaW5lIEZpeGVkU2l6ZV9oCisK
KyNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkKK3R5cGVkZWYgc3RydWN0
IENHU2l6ZSBDR1NpemU7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRGT1JN
KFFUKSAmJiBVU0UoUVRLSVQpKQorI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dF
T01FVFJZX1RZUEVTCit0eXBlZGVmIHN0cnVjdCBDR1NpemUgTlNTaXplOworI2Vsc2UKK3R5cGVk
ZWYgc3RydWN0IF9OU1NpemUgTlNTaXplOworI2VuZGlmCisjZW5kaWYKKworI2lmIFBMQVRGT1JN
KFdJTikKK3R5cGVkZWYgc3RydWN0IHRhZ1NJWkUgU0laRTsKKyNlbGlmIFBMQVRGT1JNKFFUKQor
I2luY2x1ZGUgPHFnbG9iYWwuaD4KK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUVNpemVGOwor
UVRfRU5EX05BTUVTUEFDRQorI2VsaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCU2l6ZTsKKyNl
bmRpZgorCisjaWYgUExBVEZPUk0oV1gpCitjbGFzcyB3eFNpemU7CisjZW5kaWYKKworI2lmIFBM
QVRGT1JNKEJSRVdNUCkKK3R5cGVkZWYgc3RydWN0IEFFRVNpemUgQUVFU2l6ZTsKKyNlbmRpZgor
CisjaW5jbHVkZSAiQXBwVW5pdC5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUg
IkludFNpemUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaXhlZFBvaW50Owor
CitjbGFzcyBGaXhlZFNpemUgeworcHVibGljOgorICAgIEZpeGVkU2l6ZSgpIDogbV93aWR0aCgw
KSwgbV9oZWlnaHQoMCkgeyB9CisgICAgRml4ZWRTaXplKGNvbnN0IEludFNpemUmIHNpemUpIDog
bV93aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKSB7IH0KKyAgICBG
aXhlZFNpemUoQXBwVW5pdCB3aWR0aCwgQXBwVW5pdCBoZWlnaHQpIDogbV93aWR0aCh3aWR0aCks
IG1faGVpZ2h0KGhlaWdodCkgeyB9CisKKyAgICBleHBsaWNpdCBGaXhlZFNpemUoY29uc3QgRmxv
YXRTaXplJiBzaXplKSA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKSwgbV9oZWlnaHQoc2l6ZS5oZWln
aHQoKSkgeyB9CisgICAgCisgICAgQXBwVW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lk
dGg7IH0KKyAgICBBcHBVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CisK
KyAgICB2b2lkIHNldFdpZHRoKEFwcFVuaXQgd2lkdGgpIHsgbV93aWR0aCA9IHdpZHRoOyB9Cisg
ICAgdm9pZCBzZXRIZWlnaHQoQXBwVW5pdCBoZWlnaHQpIHsgbV9oZWlnaHQgPSBoZWlnaHQ7IH0K
KworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGggPD0gMCB8fCBtX2hl
aWdodCA8PSAwOyB9CisgICAgYm9vbCBpc1plcm8oKSBjb25zdCB7IHJldHVybiAhbV93aWR0aCAm
JiAhbV9oZWlnaHQ7IH0KKworICAgIGZsb2F0IGFzcGVjdFJhdGlvKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fd2lkdGgpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1faGVpZ2h0
KTsgfQorICAgIAorICAgIHZvaWQgZXhwYW5kKEFwcFVuaXQgd2lkdGgsIEFwcFVuaXQgaGVpZ2h0
KQorICAgIHsKKyAgICAgICAgbV93aWR0aCArPSB3aWR0aDsKKyAgICAgICAgbV9oZWlnaHQgKz0g
aGVpZ2h0OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNjYWxlKGZsb2F0IHNjYWxlKQorICAgIHsK
KyAgICAgICAgbV93aWR0aCA9IHN0YXRpY19jYXN0PGludD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1f
d2lkdGgpICogc2NhbGUpOworICAgICAgICBtX2hlaWdodCA9IHN0YXRpY19jYXN0PGludD4oc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG1faGVpZ2h0KSAqIHNjYWxlKTsKKyAgICB9CisgICAgCisgICAgRml4
ZWRTaXplIGV4cGFuZGVkVG8oY29uc3QgRml4ZWRTaXplJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBGaXhlZFNpemUobV93aWR0aCA+IG90aGVyLm1fd2lkdGggPyBtX3dpZHRo
IDogb3RoZXIubV93aWR0aCwKKyAgICAgICAgICAgIG1faGVpZ2h0ID4gb3RoZXIubV9oZWlnaHQg
PyBtX2hlaWdodCA6IG90aGVyLm1faGVpZ2h0KTsKKyAgICB9CisKKyAgICBGaXhlZFNpemUgc2hy
dW5rVG8oY29uc3QgRml4ZWRTaXplJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBGaXhlZFNpemUobV93aWR0aCA8IG90aGVyLm1fd2lkdGggPyBtX3dpZHRoIDogb3RoZXIubV93
aWR0aCwKKyAgICAgICAgICAgIG1faGVpZ2h0IDwgb3RoZXIubV9oZWlnaHQgPyBtX2hlaWdodCA6
IG90aGVyLm1faGVpZ2h0KTsKKyAgICB9CisKKyAgICB2b2lkIGNsYW1wTmVnYXRpdmVUb1plcm8o
KQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKEZpeGVkU2l6ZSgpKTsKKyAgICB9
CisKKyAgICBGaXhlZFNpemUgdHJhbnNwb3NlZFNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIEZpeGVkU2l6ZShtX2hlaWdodCwgbV93aWR0aCk7CisgICAgfQorCisjaWYgVVNFKENH
KSB8fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01JVU0pCisgICAgZXhwbGljaXQgRml4ZWRTaXplKGNv
bnN0IENHU2l6ZSYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3Nz
eQorICAgIG9wZXJhdG9yIENHU2l6ZSgpIGNvbnN0OworI2VuZGlmCisKKyNpZiAoUExBVEZPUk0o
TUFDKSB8fCAoUExBVEZPUk0oUVQpICYmIFVTRShRVEtJVCkpIHx8IFBMQVRGT1JNKENIUk9NSVVN
KSAmJiBPUyhEQVJXSU4pKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dH
RU9NRVRSWV9UWVBFUykKKyAgICBleHBsaWNpdCBGaXhlZFNpemUoY29uc3QgTlNTaXplICYpOyAv
LyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQorICAgIG9wZXJhdG9y
IE5TU2l6ZSgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgRml4ZWRT
aXplKGNvbnN0IFNJWkUmKTsKKyAgICBvcGVyYXRvciBTSVpFKCkgY29uc3Q7CisjZW5kaWYKKwor
I2lmIFBMQVRGT1JNKFFUKQorICAgIEZpeGVkU2l6ZShjb25zdCBRU2l6ZUYmKTsKKyAgICBvcGVy
YXRvciBRU2l6ZUYoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSEFJS1UpCisgICAg
ZXhwbGljaXQgRml4ZWRTaXplKGNvbnN0IEJTaXplJik7CisgICAgb3BlcmF0b3IgQlNpemUoKSBj
b25zdDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV1gpCisgICAgRml4ZWRTaXplKGNvbnN0IHd4
U2l6ZSYpOworICAgIG9wZXJhdG9yIHd4U2l6ZSgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBQTEFU
Rk9STShCUkVXTVApCisgICAgRml4ZWRTaXplKGNvbnN0IEFFRVNpemUmKTsKKyAgICBvcGVyYXRv
ciBBRUVTaXplKCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBBcHBVbml0IG1fd2lk
dGgsIG1faGVpZ2h0OworfTsKKworaW5saW5lIEZpeGVkU2l6ZSYgb3BlcmF0b3IrPShGaXhlZFNp
emUmIGEsIGNvbnN0IEZpeGVkU2l6ZSYgYikKK3sKKyAgICBhLnNldFdpZHRoKGEud2lkdGgoKSAr
IGIud2lkdGgoKSk7CisgICAgYS5zZXRIZWlnaHQoYS5oZWlnaHQoKSArIGIuaGVpZ2h0KCkpOwor
ICAgIHJldHVybiBhOworfQorCitpbmxpbmUgRml4ZWRTaXplJiBvcGVyYXRvci09KEZpeGVkU2l6
ZSYgYSwgY29uc3QgRml4ZWRTaXplJiBiKQoreworICAgIGEuc2V0V2lkdGgoYS53aWR0aCgpIC0g
Yi53aWR0aCgpKTsKKyAgICBhLnNldEhlaWdodChhLmhlaWdodCgpIC0gYi5oZWlnaHQoKSk7Cisg
ICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBGaXhlZFNpemUgb3BlcmF0b3IrKGNvbnN0IEZpeGVk
U2l6ZSYgYSwgY29uc3QgRml4ZWRTaXplJiBiKQoreworICAgIHJldHVybiBGaXhlZFNpemUoYS53
aWR0aCgpICsgYi53aWR0aCgpLCBhLmhlaWdodCgpICsgYi5oZWlnaHQoKSk7Cit9CisKK2lubGlu
ZSBGaXhlZFNpemUgb3BlcmF0b3ItKGNvbnN0IEZpeGVkU2l6ZSYgYSwgY29uc3QgRml4ZWRTaXpl
JiBiKQoreworICAgIHJldHVybiBGaXhlZFNpemUoYS53aWR0aCgpIC0gYi53aWR0aCgpLCBhLmhl
aWdodCgpIC0gYi5oZWlnaHQoKSk7Cit9CisKK2lubGluZSBGaXhlZFNpemUgb3BlcmF0b3ItKGNv
bnN0IEZpeGVkU2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gRml4ZWRTaXplKC1zaXplLndpZHRo
KCksIC1zaXplLmhlaWdodCgpKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBG
aXhlZFNpemUmIGEsIGNvbnN0IEZpeGVkU2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53aWR0aCgp
ID09IGIud2lkdGgoKSAmJiBhLmhlaWdodCgpID09IGIuaGVpZ2h0KCk7Cit9CisKK2lubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgRml4ZWRTaXplJiBhLCBjb25zdCBGaXhlZFNpemUmIGIpCit7
CisgICAgcmV0dXJuIGEud2lkdGgoKSAhPSBiLndpZHRoKCkgfHwgYS5oZWlnaHQoKSAhPSBiLmhl
aWdodCgpOworfQorCitpbmxpbmUgSW50U2l6ZSBmbG9vcmVkSW50U2l6ZShjb25zdCBGaXhlZFNp
emUmIHMpCit7CisgICAgcmV0dXJuIEludFNpemUocy53aWR0aCgpLnRvSW50KCksIHMuaGVpZ2h0
KCkudG9JbnQoKSk7Cit9CisKK2lubGluZSBJbnRTaXplIHJvdW5kZWRJbnRTaXplKGNvbnN0IEZp
eGVkU2l6ZSYgcykKK3sKKyAgICByZXR1cm4gSW50U2l6ZShzLndpZHRoKCkucm91bmQoKSwgcy5o
ZWlnaHQoKS5yb3VuZCgpKTsKK30KKworSW50U2l6ZSBwaXhlbFNuYXBwZWRJbnRTaXplKGNvbnN0
IEZpeGVkU2l6ZSYgcywgY29uc3QgRml4ZWRQb2ludCYgcCk7CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEZpeGVkU2l6ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAkocmV2aXNpb24gMTA1MTk0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgog
I2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiRml4ZWRQb2ludC5o
IgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAj
aW5jbHVkZSA8bGltaXRzPgpAQCAtNDAsNiArNDEsMTAgQEAgRmxvYXRQb2ludDo6RmxvYXRQb2lu
dChjb25zdCBJbnRQb2ludCYgcAogewogfQogCitGbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0
IEZpeGVkUG9pbnQmIHApIDogbV94KHAueCgpKSwgbV95KHAueSgpKQoreworfQorCiB2b2lkIEZs
b2F0UG9pbnQ6Om5vcm1hbGl6ZSgpCiB7CiAgICAgZmxvYXQgdGVtcExlbmd0aCA9IGxlbmd0aCgp
OwpAQCAtNTUsNiArNjAsMTggQEAgZmxvYXQgRmxvYXRQb2ludDo6bGVuZ3RoKCkgY29uc3QKICAg
ICByZXR1cm4gc3FydGYobGVuZ3RoU3F1YXJlZCgpKTsKIH0KIAordm9pZCBGbG9hdFBvaW50Ojpt
b3ZlKGNvbnN0IEZpeGVkU2l6ZSYgc2l6ZSkKK3sKKyAgICBtX3ggKz0gc2l6ZS53aWR0aCgpOwor
ICAgIG1feSArPSBzaXplLmhlaWdodCgpOworfQorCit2b2lkIEZsb2F0UG9pbnQ6Om1vdmVCeShj
b25zdCBGaXhlZFBvaW50JiBwb2ludCkKK3sKKyAgICBtX3ggKz0gcG9pbnQueCgpOworICAgIG1f
eSArPSBwb2ludC55KCk7Cit9CisKIEZsb2F0UG9pbnQgRmxvYXRQb2ludDo6bWF0cml4VHJhbnNm
b3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKSBjb25zdAogewogICAgIGRvdWJs
ZSBuZXdYLCBuZXdZOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UG9pbnQuaAkocmV2aXNpb24gMTA1MTk0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMyArNjAsMTUg
QEAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiBj
bGFzcyBJbnRQb2ludDsKIGNsYXNzIEludFNpemU7CitjbGFzcyBGaXhlZFBvaW50OworY2xhc3Mg
Rml4ZWRTaXplOwogCiBjbGFzcyBGbG9hdFBvaW50IHsKIHB1YmxpYzoKICAgICBGbG9hdFBvaW50
KCkgOiBtX3goMCksIG1feSgwKSB7IH0KICAgICBGbG9hdFBvaW50KGZsb2F0IHgsIGZsb2F0IHkp
IDogbV94KHgpLCBtX3koeSkgeyB9CiAgICAgRmxvYXRQb2ludChjb25zdCBJbnRQb2ludCYpOwot
CisgICAgRmxvYXRQb2ludChjb25zdCBGaXhlZFBvaW50Jik7CiAKICAgICBzdGF0aWMgRmxvYXRQ
b2ludCB6ZXJvKCkgeyByZXR1cm4gRmxvYXRQb2ludCgpOyB9CiAKQEAgLTkyLDYgKzk0LDcgQEAg
cHVibGljOgogICAgICAgICBtX3ggKz0gYS53aWR0aCgpOwogICAgICAgICBtX3kgKz0gYS5oZWln
aHQoKTsKICAgICB9CisgICAgdm9pZCBtb3ZlKGNvbnN0IEZpeGVkU2l6ZSYpOwogICAgIHZvaWQg
bW92ZShjb25zdCBGbG9hdFNpemUmIGEpCiAgICAgewogICAgICAgICBtX3ggKz0gYS53aWR0aCgp
OwpAQCAtMTAyLDYgKzEwNSw3IEBAIHB1YmxpYzoKICAgICAgICAgbV94ICs9IGEueCgpOwogICAg
ICAgICBtX3kgKz0gYS55KCk7CiAgICAgfQorICAgIHZvaWQgbW92ZUJ5KGNvbnN0IEZpeGVkUG9p
bnQmIGEpOwogICAgIHZvaWQgbW92ZUJ5KGNvbnN0IEZsb2F0UG9pbnQmIGEpCiAgICAgewogICAg
ICAgICBtX3ggKz0gYS54KCk7CkBAIC0xMzEsNiArMTM1LDE3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIEZsb2F0UG9pbnQoc3RkOjptYXgobV94LCBvdGhlci5tX3gpLCBzdGQ6Om1heChtX3ks
IG90aGVyLm1feSkpOwogICAgIH0KIAorICAgIEZsb2F0UG9pbnQgc2hydW5rVG8oY29uc3QgRmxv
YXRQb2ludCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRmxvYXRQb2ludCht
X3ggPCBvdGhlci5tX3ggPyBtX3ggOiBvdGhlci5tX3gsCisgICAgICAgICAgICBtX3kgPCBvdGhl
ci5tX3kgPyBtX3kgOiBvdGhlci5tX3kpOworICAgIH0KKworICAgIHZvaWQgY2xhbXBOZWdhdGl2
ZVRvWmVybygpCisgICAgeworICAgICAgICAqdGhpcyA9IGV4cGFuZGVkVG8oemVybygpKTsKKyAg
ICB9CisKICAgICBGbG9hdFBvaW50IHRyYW5zcG9zZWRQb2ludCgpIGNvbnN0CiAgICAgewogICAg
ICAgICByZXR1cm4gRmxvYXRQb2ludChtX3ksIG1feCk7CkBAIC0yMzksNiArMjU0LDExIEBAIGlu
bGluZSBJbnRTaXplIGZsb29yZWRJbnRTaXplKGNvbnN0IEZsb2EKICAgICByZXR1cm4gSW50U2l6
ZShzdGF0aWNfY2FzdDxpbnQ+KHAueCgpKSwgc3RhdGljX2Nhc3Q8aW50PihwLnkoKSkpOwogfQog
CitpbmxpbmUgRmxvYXRQb2ludCB0b1BvaW50KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAg
ICByZXR1cm4gRmxvYXRQb2ludChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworfQorCiBm
bG9hdCBmaW5kU2xvcGUoY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAy
LCBmbG9hdCYgYyk7CiAKIC8vIEZpbmQgcG9pbnQgd2hlcmUgbGluZXMgdGhyb3VnaCB0aGUgdHdv
IHBhaXJzIG9mIHBvaW50cyBpbnRlcnNlY3QuIFJldHVybnMgZmFsc2UgaWYgdGhlIGxpbmVzIGRv
bid0IGludGVyc2VjdC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRSZWN0LmNwcAkocmV2aXNpb24gMTA1MTk0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogCisjaW5j
bHVkZSAiRml4ZWRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTQyLDYgKzQzLDEwIEBAIEZs
b2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IEludFJlY3QmIHIpIDoKIHsKIH0KIAorRmxvYXRSZWN0
OjpGbG9hdFJlY3QoY29uc3QgRml4ZWRSZWN0JiByKSA6IG1fbG9jYXRpb24oci5sb2NhdGlvbigp
KSwgbV9zaXplKHIuc2l6ZSgpKQoreworfQorCiBGbG9hdFJlY3QgRmxvYXRSZWN0OjpuYXJyb3dQ
cmVjaXNpb24oZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQp
CiB7CiAgICAgcmV0dXJuIEZsb2F0UmVjdChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHgpLCBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KHkpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHdpZHRoKSwgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChoZWlnaHQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCShyZXZpc2lvbiAxMDUxOTQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NjYsNiArNjYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBWR1JlY3Q7CiAjZW5kaWYK
IAorY2xhc3MgRml4ZWRSZWN0OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEludFBvaW50OwogCkBA
IC04Miw2ICs4Myw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFJlY3QoZmxvYXQgeCwgZmxvYXQgeSwg
ZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKICAgICAgICAgOiBtX2xvY2F0aW9uKEZsb2F0UG9p
bnQoeCwgeSkpLCBtX3NpemUoRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpKSB7IH0KICAgICBGbG9h
dFJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIEZsb2F0UmVjdChjb25zdCBGaXhlZFJlY3QmKTsK
IAogICAgIHN0YXRpYyBGbG9hdFJlY3QgbmFycm93UHJlY2lzaW9uKGRvdWJsZSB4LCBkb3VibGUg
eSwgZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCShyZXZpc2lvbiAxMDUxOTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
RmxvYXRTaXplLmgiCiAKKyNpbmNsdWRlICJGaXhlZFNpemUuaCIKICNpbmNsdWRlICJGbG9hdENv
bnZlcnNpb24uaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSA8bGltaXRzPgpAQCAt
NDAsNiArNDEsMTAgQEAgRmxvYXRTaXplOjpGbG9hdFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZQog
ewogfQogCitGbG9hdFNpemU6OkZsb2F0U2l6ZShjb25zdCBGaXhlZFNpemUmIHNpemUpIDogbV93
aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKQoreworfQorCiBmbG9h
dCBGbG9hdFNpemU6OmRpYWdvbmFsTGVuZ3RoKCkgY29uc3QKIHsKICAgICByZXR1cm4gc3FydGYo
ZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgJKHJldmlzaW9uIDEwNTE5NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niwx
MiArNDYsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgX05TU2l6ZSBOU1NpemU7CiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEludFNpemU7CitjbGFzcyBGaXhlZFNpemU7CiAKIGNsYXNzIEZsb2F0
U2l6ZSB7CiBwdWJsaWM6CiAgICAgRmxvYXRTaXplKCkgOiBtX3dpZHRoKDApLCBtX2hlaWdodCgw
KSB7IH0KICAgICBGbG9hdFNpemUoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkgOiBtX3dpZHRo
KHdpZHRoKSwgbV9oZWlnaHQoaGVpZ2h0KSB7IH0KICAgICBGbG9hdFNpemUoY29uc3QgSW50U2l6
ZSYpOworICAgIEZsb2F0U2l6ZShjb25zdCBGaXhlZFNpemUmKTsKIAogICAgIHN0YXRpYyBGbG9h
dFNpemUgbmFycm93UHJlY2lzaW9uKGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCk7CiAKQEAg
LTY1LDYgKzY3LDExIEBAIHB1YmxpYzoKICAgICBib29sIGlzWmVybygpIGNvbnN0OwogICAgIGJv
b2wgaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpIGNvbnN0OwogCisgICAgYm9vbCBpc1JvdWdobHlF
cXVhbFRvKGNvbnN0IEZsb2F0U2l6ZSYgcykgeworICAgICAgICByZXR1cm4gYWJzKHdpZHRoKCkg
LSBzLndpZHRoKCkpIDwgMC4xICYmCisgICAgICAgICAgICAgICBhYnMoaGVpZ2h0KCkgLSBzLmhl
aWdodCgpKSA8IDAuMTsKKyAgICB9CisKICAgICBmbG9hdCBhc3BlY3RSYXRpbygpIGNvbnN0IHsg
cmV0dXJuIG1fd2lkdGggLyBtX2hlaWdodDsgfQogCiAgICAgdm9pZCBleHBhbmQoZmxvYXQgd2lk
dGgsIGZsb2F0IGhlaWdodCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ludFJlY3QuY3BwCShyZXZpc2lvbiAxMDUxOTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKIAorI2luY2x1ZGUg
IkZpeGVkUmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgPGFsZ29yaXRo
bT4KIApAQCAtNDAsNiArNDEsMTIgQEAgSW50UmVjdDo6SW50UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHIpCiB7CiB9CiAKK0ludFJlY3Q6OkludFJlY3QoY29uc3QgRml4ZWRSZWN0JiByKQorICAgIDog
bV9sb2NhdGlvbihmbG9vcmVkSW50UG9pbnQoci5sb2NhdGlvbigpKSkKKyAgICAsIG1fc2l6ZShm
bG9vcmVkSW50U2l6ZShyLnNpemUoKSkpCit7Cit9CisKIGJvb2wgSW50UmVjdDo6aW50ZXJzZWN0
cyhjb25zdCBJbnRSZWN0JiBvdGhlcikgY29uc3QKIHsKICAgICAvLyBDaGVja2luZyBlbXB0aW5l
c3MgaGFuZGxlcyBuZWdhdGl2ZSB3aWR0aHMgYXMgd2VsbCBhcyB6ZXJvLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkocmV2aXNpb24gMTA1MTk0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03MSw2ICs3MSw3IEBAIHN0cnVjdCBTa0lSZWN0OwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBGaXhlZFJlY3Q7CiAKIGNsYXNzIEludFJlY3Qg
ewogcHVibGljOgpAQCAtODEsNiArODIsNyBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9sb2NhdGlv
bihJbnRQb2ludCh4LCB5KSksIG1fc2l6ZShJbnRTaXplKHdpZHRoLCBoZWlnaHQpKSB7IH0KIAog
ICAgIGV4cGxpY2l0IEludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KTsgLy8gZG9uJ3QgZG8g
dGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKKyAgICBleHBsaWNpdCBJbnRSZWN0KGNv
bnN0IEZpeGVkUmVjdCYgcmVjdCk7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBp
dCdzIGxvc3N5CiAgICAgICAgIAogICAgIEludFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9sb2NhdGlvbjsgfQogICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRml4ZWRQb2lu
dENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9GaXhlZFBvaW50Q0cuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvRml4ZWRQb2ludENHLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRml4ZWRQb2ludC5oIgorCisjaWYg
VVNFKENHKSB8fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01JVU0pCisKKyNpbmNsdWRlIDxBcHBsaWNh
dGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitGaXhlZFBvaW50OjpGaXhlZFBvaW50KGNvbnN0IENHUG9pbnQmIHApIDogbV94KHAueCks
IG1feShwLnkpCit7Cit9CisKK0ZpeGVkUG9pbnQ6Om9wZXJhdG9yIENHUG9pbnQoKSBjb25zdAor
eworICAgIHJldHVybiBDR1BvaW50TWFrZShtX3gsIG1feSk7Cit9CisKK30KKworI2VuZGlmIC8v
IFVTRShDRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ZpeGVk
UmVjdENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9GaXhlZFJlY3RDRy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9GaXhlZFJlY3RDRy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpeGVkUmVjdC5oIgorCisjaWYg
VVNFKENHKSB8fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01JVU0pCisKKyNpbmNsdWRlIDxBcHBsaWNh
dGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitGaXhlZFJlY3Q6OkZpeGVkUmVjdChjb25zdCBDR1JlY3QmIHIpIDogbV9sb2NhdGlvbihy
Lm9yaWdpbiksIG1fc2l6ZShyLnNpemUpCit7Cit9CisKK0ZpeGVkUmVjdDo6b3BlcmF0b3IgQ0dS
ZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ0dSZWN0TWFrZSh4KCksIHkoKSwgd2lkdGgoKSwg
aGVpZ2h0KCkpOworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoQ0cpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GaXhlZFNpemVDRy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRml4ZWRTaXplQ0cuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRml4ZWRTaXpl
Q0cuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisgCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRml4ZWRTaXplLmgiCisKKyNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01B
Q19DSFJPTUlVTSkgfHwgKFBMQVRGT1JNKFFUKSAmJiBVU0UoUVRLSVQpKQorCisjaW5jbHVkZSA8
QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworRml4ZWRTaXplOjpGaXhlZFNpemUoY29uc3QgQ0dTaXplJiBzKSA6IG1fd2lk
dGgocy53aWR0aCksIG1faGVpZ2h0KHMuaGVpZ2h0KQoreworfQorCitGaXhlZFNpemU6Om9wZXJh
dG9yIENHU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIENHU2l6ZU1ha2UobV93aWR0aCwgbV9o
ZWlnaHQpOworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoQ0cpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRml4ZWRQb2ludE1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRml4ZWRQb2ludE1hYy5tbQkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GaXhlZFBv
aW50TWFjLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0
IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGaXhlZFBvaW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lm
bmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUworCitGaXhlZFBv
aW50OjpGaXhlZFBvaW50KGNvbnN0IE5TUG9pbnQmIHApIDogbV94KHAueCksIG1feShwLnkpCit7
Cit9CisKK0ZpeGVkUG9pbnQ6Om9wZXJhdG9yIE5TUG9pbnQoKSBjb25zdAoreworICAgIHJldHVy
biBOU01ha2VQb2ludChtX3gudG9GbG9hdCgpLCBtX3kudG9GbG9hdCgpKTsKK30KKworI2VuZGlm
CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GaXhlZFJl
Y3RNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ZpeGVkUmVjdE1hYy5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9GaXhlZFJlY3RNYWMubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpeGVkUmVjdC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyNpZm5kZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VP
TUVUUllfVFlQRVMKKworRml4ZWRSZWN0OjpGaXhlZFJlY3QoY29uc3QgTlNSZWN0JiByKSA6IG1f
bG9jYXRpb24oci5vcmlnaW4pLCBtX3NpemUoci5zaXplKQoreworfQorCitGaXhlZFJlY3Q6Om9w
ZXJhdG9yIE5TUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIE5TTWFrZVJlY3QoeCgpLCB5KCks
IHdpZHRoKCksIGhlaWdodCgpKTsKK30KKworI2VuZGlmCisKK30KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GaXhlZFNpemVNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZpeGVkU2l6ZU1hYy5tbQkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GaXhlZFNp
emVNYWMubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyAKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGaXhlZFNpemUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWZu
ZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCisKK0ZpeGVkU2l6
ZTo6Rml4ZWRTaXplKGNvbnN0IE5TU2l6ZSYgcykgOiBtX3dpZHRoKHMud2lkdGgpLCBtX2hlaWdo
dChzLmhlaWdodCkKK3sKK30KKworRml4ZWRTaXplOjpvcGVyYXRvciBOU1NpemUoKSBjb25zdAor
eworICAgIHJldHVybiBOU01ha2VTaXplKG1fd2lkdGgsIG1faGVpZ2h0KTsKK30KKworI2VuZGlm
CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZpeGVkUG9p
bnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRml4ZWRQb2ludFF0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZpeGVkUG9pbnRRdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRml4ZWRQb2ludC5oIgorCisj
aW5jbHVkZSA8UVBvaW50Rj4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaXhlZFBvaW50OjpG
aXhlZFBvaW50KGNvbnN0IFFQb2ludEYmIHApCisgICAgOiBtX3gocC54KCkpCisgICAgLCBtX3ko
cC55KCkpCit7Cit9CisKK0ZpeGVkUG9pbnQ6Om9wZXJhdG9yIFFQb2ludEYoKSBjb25zdAorewor
ICAgIHJldHVybiBRUG9pbnRGKG1feCwgbV95KTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRml4ZWRSZWN0UXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZpeGVkUmVjdFF0LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZpeGVkUmVjdFF0
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRml4ZWRSZWN0LmgiCisKKyNpbmNsdWRlIDxRUmVjdEY+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworRml4ZWRSZWN0OjpGaXhlZFJlY3QoY29uc3QgUVJlY3RGJiByKQorICAgIDog
bV9sb2NhdGlvbihyLnRvcExlZnQoKSkKKyAgICAsIG1fc2l6ZShyLndpZHRoKCkKKyAgICAsIHIu
aGVpZ2h0KCkpCit7Cit9CisKK0ZpeGVkUmVjdDo6b3BlcmF0b3IgUVJlY3RGKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gUVJlY3RGKHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7Cit9CisKK30K
KwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRml4ZWRTaXplUXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0Zp
eGVkU2l6ZVF0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0ZpeGVkU2l6ZVF0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaXhlZFNpemUuaCIKKworI2luY2x1ZGUg
PFFTaXplRj4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaXhlZFNpemU6OkZpeGVkU2l6ZShj
b25zdCBRU2l6ZUYmIHApCisgICAgOiBtX3dpZHRoKHAud2lkdGgoKSkKKyAgICAsIG1faGVpZ2h0
KHAuaGVpZ2h0KCkpCit7Cit9CisKK0ZpeGVkU2l6ZTo6b3BlcmF0b3IgUVNpemVGKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gUVNpemVGKG1fd2lkdGgsIG1faGVpZ2h0KTsKK30KKworfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GaXhlZFBvaW50U2tpYS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GaXhl
ZFBvaW50U2tpYS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ZpeGVkUG9pbnRTa2lhLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRml4ZWRQb2ludC5oIgorCisjaW5j
bHVkZSAiU2tQb2ludC5oIgorI2luY2x1ZGUgIlNraWFVdGlscy5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0ZpeGVkUG9pbnQ6OkZpeGVkUG9pbnQoY29uc3QgU2tQb2ludCYgcCkKKyAgICA6
IG1feChwLmZYKQorICAgICwgbV95KHAuZlkpCit7Cit9CisKK0ZpeGVkUG9pbnQ6Om9wZXJhdG9y
IFNrUG9pbnQoKSBjb25zdAoreworICAgIFNrUG9pbnQgcCA9IHsgV2ViQ29yZUZsb2F0VG9Ta1Nj
YWxhcihtX3gpLCBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKG1feSkgfTsKKyAgICByZXR1cm4gcDsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9GaXhlZFJlY3RTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZpeGVkUmVjdFNraWEuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GaXhlZFJlY3RT
a2lhLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRml4ZWRSZWN0LmgiCisKKyNpbmNsdWRlICJTa1JlY3QuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitGaXhlZFJlY3Q6OkZpeGVkUmVjdChjb25zdCBTa1JlY3QmIHIpCisg
ICAgOiBtX2xvY2F0aW9uKHIuZkxlZnQsIHIuZlRvcCkKKyAgICAsIG1fc2l6ZShyLndpZHRoKCks
IHIuaGVpZ2h0KCkpCit7Cit9CisKK0ZpeGVkUmVjdDo6b3BlcmF0b3IgU2tSZWN0KCkgY29uc3QK
K3sKKyAgICBTa1JlY3QgcmVjdCA9IHsgeCgpLCB5KCksIG1heFgoKSwgbWF4WSgpIH07CisgICAg
cmV0dXJuIHJlY3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123005</attachid>
            <date>2012-01-18 15:05:10 -0800</date>
            <delta_ts>2012-01-18 16:36:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>new_types.2.diff</filename>
            <type>text/plain</type>
            <size>99056</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNTMxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDEyLTAxLTE4ICBFbWlsIEEg
RWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4gYW5kIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIEFkZCBmaXhlZCBwb2ludCB0eXBlcyBmb3Igc3ViLXBpeGVs
IGxheW91dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzY1NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgZml4ZWQgcG9pbnQgaW1wbGVtZW50YXRpb24gKEFwcFVuaXQpIGFuZCB2ZXJzaW9ucyBvZiB0
aGUgUG9pbnQsIFNpemUKKyAgICAgICAgYW5kIFJlY3QgY2xhc3NlcyB1c2luZyB0aGlzIG5ldyB0
eXBlLgorCisgICAgICAgIEFwcFVuaXQgcmVwcmVzZW50cyB2YWx1ZXMgYXMgbXVsdGlwbGVzIG9m
IDEvNjB0aCBwaXhlbC4gVGhpcyBhbGxvd3MgdXMKKyAgICAgICAgdG8gcmVwcmVzZW50IHN1Yi1w
aXhlbCB2YWx1ZXMgdXNpbmcgaW50ZWdlciBtYXRoIGFuZCBhdm9pZHMgZmxvYXRpbmcKKyAgICAg
ICAgcG9pbnQgcHJlY2lzaW9uIHByb2JsZW1zLgorCisgICAgICAgIEZpeGVkUG9pbnQsIEZpeGVk
U2l6ZSBhbmQgRml4ZWRSZWN0IGFyZSBQb2ludCwgU2l6ZSBhbmQgUmVjdAorICAgICAgICBpbXBs
ZW1lbnRhdGlvbnMgcmVzcGVjdGl2ZWx5IHVzaW5nIHRoaXMgbmV3IHR5cGUuCisKKyAgICAgICAg
QWRkaXRpb25hbGx5LCBwbGF0Zm9ybSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG5l
dyBjbGFzc2VzIGFyZQorICAgICAgICBwcm92aWRlZCB0byBhbGxvdyB0aGVtIHRvIGJlIHVzZWQg
aW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBpbnQgYW5kIGZsb2F0CisgICAgICAgIGJhc2VkIHZlcnNp
b25zIG9mIHNhbWUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICog
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL0FwcFVuaXQuaDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRQb2ludC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3QuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRml4ZWRTaXplLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRml4ZWRTaXplLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UG9pbnQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0U2l6ZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW50UmVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zp
eGVkUG9pbnRDRy5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zp
eGVkUmVjdENHLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRml4
ZWRTaXplQ0cuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRml4
ZWRQb2ludE1hYy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zp
eGVkUmVjdE1hYy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zp
eGVkU2l6ZU1hYy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRml4
ZWRQb2ludFF0LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRml4
ZWRSZWN0UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9GaXhl
ZFNpemVRdC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvRml4
ZWRQb2ludFNraWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0ZpeGVkUmVjdFNraWEuY3BwOiBBZGRlZC4KKwogMjAxMi0wMS0xOCAgRXJpYyBDYXJsc29uICA8
ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBQcm92aWRlIGFjY2VzcyB0byB1c2Vy
J3MgbGlzdCBvZiBwcmVmZXJyZWQgbGFuZ3VhZ2VzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMTA1MTk0KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTEwODYsNiArMTA4Niw4IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3QuY3BwCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvRml4ZWRTaXplLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UXVhZC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQko
cmV2aXNpb24gMTA1MTk0KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQko
d29ya2luZyBjb3B5KQpAQCAtMjkxOSw2ICsyOTE5LDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0vRkVHYXVzc2lh
bkJsdXJORU9OLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
YXJtL0ZFTGlnaHRpbmdORU9OLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9hcm0vRkVMaWdodGluZ05FT04uaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRml4ZWRQb2ludC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GaXhlZFJlY3QuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
aXhlZFJlY3QuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRTaXpl
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRTaXplLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcCBcCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCShyZXZpc2lvbiAxMDUxOTQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJ
KHdvcmtpbmcgY29weSkKQEAgLTMzOTIsNiArMzM5Miw4IEBACiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvRml4ZWRSZWN0LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvRml4ZWRTaXplLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAnLApAQCAt
MzQ5Miw2ICszNDk0LDkgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9S
ZWZQdHJDYWlyby5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFu
c2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvQ29sb3JDRy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zp
eGVkUG9pbnRDRy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ZpeGVk
UmVjdENHLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvRml4ZWRTaXpl
Q0cuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBvaW50Q0cu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcCcsCkBA
IC0zODE1LDYgKzM4MjAsOSBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9D
b21wbGV4VGV4dENvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckFUU1VJLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRml4ZWRQb2ludE1hYy5tbScsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZpeGVkUmVjdE1hYy5tbScsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZpeGVkU2l6ZU1hYy5tbScsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW0nLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFJlY3RNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9GbG9hdFNpemVNYWMubW0nLApAQCAtMzg3OSw2ICszODg3LDkgQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9Db2xvclF0LmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvRXh0ZW5zaW9uczNEUXQuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9FeHRlbnNpb25zM0RRdC5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9GaXhlZFBvaW50UXQuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9xdC9GaXhlZFJlY3RRdC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZpeGVkU2l6ZVF0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvcXQvRmxvYXRQb2ludFF0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvRmxvYXRSZWN0UXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Gb250Q2FjaGVRdC5jcHAnLApAQCAtMzkxNSw2ICszOTI2LDggQEAKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFF0LmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNwYXJlbmN5TGF5ZXIuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tp
YS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZpeGVkUG9pbnRTa2lh
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GaXhlZFJlY3RTa2lh
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GbG9hdFBvaW50U2tp
YS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRmxvYXRSZWN0U2tp
YS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udENhY2hlU2tp
YS5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHJldmlz
aW9uIDEwNTE5NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTczLDYgKzE1NzMsOSBAQAogICAgICAgICAgICAgWydpbmNsdWRl
JywgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hY1xcLm1tJCddLAogICAgICAgICAgICAgWydpbmNs
dWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hY1xcLm1tJCddLAogICAgICAgICAg
ICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xs
ZXJDb3JlVGV4dFxcLm1tJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9GaXhlZFBvaW50TWFjXFwubW0kJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUn
LCAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZpeGVkUmVjdE1hY1xcLm1tJCddLAorICAgICAgICAg
ICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GaXhlZFNpemVNYWNcXC5tbSQn
XSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRQ
b2ludE1hY1xcLm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9GbG9hdFJlY3RNYWNcXC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRTaXplTWFjXFwubW0kJ10sCkBAIC0xNjUwLDYgKzE2
NTMsOSBAQAogICAgICAgICB9XSwKICAgICAgICAgWydPUz09Im1hYyIgYW5kIHVzZV9za2lhPT0x
JywgewogICAgICAgICAgICdzb3VyY2VzLyc6IFsKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdw
bGF0Zm9ybS9ncmFwaGljcy9jZy9GaXhlZFBvaW50Q0dcXC5jcHAkJ10sCisgICAgICAgICAgICBb
J2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvRml4ZWRSZWN0Q0dcXC5jcHAkJ10sCisg
ICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvRml4ZWRTaXplQ0dc
XC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2cv
RmxvYXRQb2ludENHXFwuY3BwJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHXFwuY3BwJCddLAogICAgICAgICAgICAgWydpbmNsdWRl
JywgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHXFwuY3BwJCddLApJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDEw
NTE5NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjMwNiw2ICsyNjMwNiwxMCBAQAogCQkJTmFtZT0icGxhdGZvcm0i
CiAJCQk+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQXBwVW5pdC5o
IgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxBcmVuYS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMjczNTcsNiArMjczNjEsMzgg
QEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXEZpeGVkUG9pbnQuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJ
CQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZpeGVkUG9p
bnRIYXNoLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGaXhlZFJlY3QuY3BwIgorCQkJCQk+CisJCQkJPC9G
aWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
Rml4ZWRSZWN0LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGaXhlZFJlY3RIYXNoLmgiCisJCQkJCT4KKwkJ
CQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xGaXhlZFNpemUuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRml4ZWRTaXplLmgiCisJCQkJCT4K
KwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xGaXhlZFNpemVIYXNoLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUK
IAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFBvaW50LmNwcCIK
IAkJCQkJPgogCQkJCTwvRmlsZT4KQEAgLTI4MzQ4LDYgKzI4Mzg0LDE4IEBACiAJCQkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgogCQkJCQk8L0ZpbGU+CiAJCQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXEZpeGVkUG9pbnRDRy5jcHAiCisJCQkJCQk+
CisJCQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUKKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcY2dcRml4ZWRSZWN0Q0cuY3BwIgorCQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJ
CQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXEZp
eGVkU2l6ZUNHLmNwcCIKKwkJCQkJCT4KKwkJCQkJPC9GaWxlPgorCQkJCQk8RmlsZQogCQkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjZ1xGbG9hdFBvaW50Q0cuY3BwIgog
CQkJCQkJPgogCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMDUxOTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTMxMCw2ICszMTAsMjAgQEAKIAkJMTQ5NDdGRkUxMkY4MENEMjAwQTBG
NjMxIC8qIERvY3VtZW50T3JkZXJlZE1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTQ5NDdGRkMxMkY4MENEMjAwQTBGNjMxIC8qIERvY3VtZW50T3Jk
ZXJlZE1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTE0OTkzQkU1MEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ5OTNCRTMwQjJGMkIx
QzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxlci5jcHAgKi87IH07CiAJCTE0OTkzQkU2MEIyRjJC
MUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OTkzQkU0MEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0Nv
bnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkxNEMwQTJCMjE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRQb2ludC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkFCNzcxNTgxNDQ0Q0JENDAwRUM0
QzRDIC8qIEZpeGVkUG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkxNEMwQTJCMzE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRQb2ludENHLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MUFB
MTQ0NEYyNDUwMEVDNEM0QyAvKiBGaXhlZFBvaW50Q0cuY3BwICovOyB9OworCQkxNEMwQTJCNDE0
NDYzMjFFMDA1MjA3OTggLyogRml4ZWRQb2ludEhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MTU3MTQ0NENCRDQwMEVDNEM0QyAvKiBGaXhl
ZFBvaW50SGFzaC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTE0QzBBMkI1MTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFBvaW50TWFjLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkFCNzcxQTcxNDQ0RjIy
RTAwRUM0QzRDIC8qIEZpeGVkUG9pbnRNYWMubW0gKi87IH07CisJCTE0QzBBMkI2MTQ0NjMyMUUw
MDUyMDc5OCAvKiBGaXhlZFJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkFCNzcxNTYxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkUmVjdC5jcHAg
Ki87IH07CisJCTE0QzBBMkI3MTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFJlY3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MTU1MTQ0NENCRDQw
MEVDNEM0QyAvKiBGaXhlZFJlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkxNEMwQTJCODE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRSZWN0Q0cu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkFCNzcx
QTkxNDQ0RjI0NTAwRUM0QzRDIC8qIEZpeGVkUmVjdENHLmNwcCAqLzsgfTsKKwkJMTRDMEEyQjkx
NDQ2MzIxRTAwNTIwNzk4IC8qIEZpeGVkUmVjdEhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MTU0MTQ0NENCRDQwMEVDNEM0QyAvKiBGaXhl
ZFJlY3RIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMTRDMEEyQkExNDQ2MzIxRTAwNTIwNzk4IC8qIEZpeGVkUmVjdE1hYy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MUE2MTQ0NEYyMkUw
MEVDNEM0QyAvKiBGaXhlZFJlY3RNYWMubW0gKi87IH07CisJCTE0QzBBMkJCMTQ0NjMyMUUwMDUy
MDc5OCAvKiBGaXhlZFNpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkFCNzcxNTMxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkU2l6ZS5jcHAgKi87
IH07CisJCTE0QzBBMkJDMTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFNpemUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MTUyMTQ0NENCRDQwMEVD
NEM0QyAvKiBGaXhlZFNpemUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkxNEMwQTJCRDE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRTaXplQ0cuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkFCNzcxQTgx
NDQ0RjI0NTAwRUM0QzRDIC8qIEZpeGVkU2l6ZUNHLmNwcCAqLzsgfTsKKwkJMTRDMEEyQkUxNDQ2
MzIxRTAwNTIwNzk4IC8qIEZpeGVkU2l6ZUhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MTUxMTQ0NENCRDQwMEVDNEM0QyAvKiBGaXhlZFNp
emVIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMTRDMEEyQkYxNDQ2MzIxRTAwNTIwNzk4IC8qIEZpeGVkU2l6ZU1hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MUE1MTQ0NEYyMkUwMEVD
NEM0QyAvKiBGaXhlZFNpemVNYWMubW0gKi87IH07CiAJCTE0QzlBNUVBMEIzRDEwNUYwMDVBMDIz
MiAvKiBTZXR0aW5ncy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNEM5QTVFOTBCM0QxMDVGMDA1QTAyMzIgLyogU2V0dGluZ3MuY3BwICovOyB9Owog
CQkxNENEOEQ4MjEwNkI1MjkwMDBBNDZEMjMgLyogSlNTaGFyZWRXb3JrZXJDdXN0b20uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDRDhEODExMDZC
NTI5MDAwQTQ2RDIzIC8qIEpTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcCAqLzsgfTsKIAkJMTRDRjc4
QTQwOUY1OENCRjAwRUIzNjY1IC8qIEpTQ1NTVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDRjc4QTMwOUY1OENCRjAwRUIzNjY1IC8qIEpT
Q1NTVmFsdWUuY3BwICovOyB9OwpAQCAtNDk1MCw2ICs0OTY0LDcgQEAKIAkJQjhEQkRCNEMxMzBC
MEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ4MTMwQjBGOEEwMEY1Q0RCMSAvKiBT
ZXRTZWxlY3Rpb25Db21tYW5kLmggKi87IH07CiAJCUI4REJEQjREMTMwQjBGOEEwMEY1Q0RCMSAv
KiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ5MTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kLmNwcCAqLzsgfTsKIAkJQjhEQkRCNEUxMzBCMEY4QTAwRjVDREIx
IC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjRBMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kLmggKi87IH07CisJCUJBQjIyQUQ0MTRCN0EwMkQwMEQ4QUJBNiAv
KiBBcHBVbml0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQUI3NzE1MDE0NDRDQkI0MDBFQzRDNEMgLyogQXBwVW5pdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJBQ0YyOTAxMTNCMkEwRDUwMDc4MUY5
MCAvKiBMYXlvdXRUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkFDRjI5MDAxM0IyQTBENTAwNzgxRjkwIC8qIExheW91dFR5cGVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMwMEYwMDQwRTBB
MTg1NTAwRkQwNEUzIC8qIERPTUZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMDBFRkZFMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLmggKi87
IH07CiAJCUJDMDBGMDA1MEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMEVGRkYwRTBBMTg1NTAwRkQw
NEUzIC8qIERPTUZpbGUubW0gKi87IH07CkBAIC0xMTgxMCw2ICsxMTgyNSwyMSBAQAogCQlCOERC
REI0ODEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTZXRTZWxlY3Rpb25Db21tYW5kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUI4REJEQjQ5MTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0Nv
cnJlY3Rpb25Db21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCOERCREI0QTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFu
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJBQjc3MTUwMTQ0NENCQjQw
MEVDNEM0QyAvKiBBcHBVbml0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFw
cFVuaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkFCNzcxNTExNDQ0Q0JENDAw
RUM0QzRDIC8qIEZpeGVkU2l6ZUhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRml4ZWRTaXplSGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQUI3NzE1
MjE0NDRDQkQ0MDBFQzRDNEMgLyogRml4ZWRTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZpeGVkU2l6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQUI3
NzE1MzE0NDRDQkQ0MDBFQzRDNEMgLyogRml4ZWRTaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZpeGVkU2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUJBQjc3MTU0MTQ0NENCRDQwMEVDNEM0QyAvKiBGaXhlZFJlY3RIYXNoLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpeGVkUmVjdEhhc2guaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQkFCNzcxNTUxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkUmVjdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaXhlZFJlY3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkFCNzcxNTYxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkUmVj
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaXhlZFJlY3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQUI3NzE1NzE0NDRDQkQ0MDBFQzRDNEMg
LyogRml4ZWRQb2ludEhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRml4
ZWRQb2ludEhhc2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkFCNzcxNTgxNDQ0
Q0JENDAwRUM0QzRDIC8qIEZpeGVkUG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRml4ZWRQb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQUI3NzFB
NTE0NDRGMjJFMDBFQzRDNEMgLyogRml4ZWRTaXplTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRml4ZWRTaXplTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlCQUI3NzFBNjE0NDRGMjJFMDBFQzRDNEMgLyogRml4ZWRSZWN0TWFjLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRml4ZWRSZWN0TWFjLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQUI3NzFBNzE0NDRGMjJFMDBFQzRDNEMgLyog
Rml4ZWRQb2ludE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IEZpeGVkUG9pbnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJBQjc3MUE4
MTQ0NEYyNDUwMEVDNEM0QyAvKiBGaXhlZFNpemVDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGaXhlZFNpemVDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUJBQjc3MUE5MTQ0NEYyNDUwMEVDNEM0QyAvKiBGaXhlZFJlY3RDRy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaXhlZFJlY3RDRy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUJBQjc3MUFBMTQ0NEYyNDUwMEVDNEM0QyAvKiBGaXhlZFBv
aW50Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRml4ZWRQb2lu
dENHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkFDRjI5MDAxM0IyQTBENTAw
NzgxRjkwIC8qIExheW91dFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExheW91dFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDBFRkZFMEUw
QTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERPTUZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMEVGRkYwRTBB
MTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBET01GaWxlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg1
NTgsNiArMTg1ODgsOSBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJ
CQkwRkNGMzMyMzBGMkI5NzE1MDA0QjY3OTUgLyogQ29sb3JDRy5jcHAgKi8sCisJCQkJQkFCNzcx
QTgxNDQ0RjI0NTAwRUM0QzRDIC8qIEZpeGVkU2l6ZUNHLmNwcCAqLywKKwkJCQlCQUI3NzFBOTE0
NDRGMjQ1MDBFQzRDNEMgLyogRml4ZWRSZWN0Q0cuY3BwICovLAorCQkJCUJBQjc3MUFBMTQ0NEYy
NDUwMEVDNEM0QyAvKiBGaXhlZFBvaW50Q0cuY3BwICovLAogCQkJCUIyNzUzNTJCMEIwNTM4MTQw
MDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwICovLAogCQkJCUIyNzUzNTJDMEIwNTM4MTQwMDJD
RTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkQwQjA1MzgxNDAwMkNFNjRG
IC8qIEZsb2F0U2l6ZUNHLmNwcCAqLywKQEAgLTE4NTk0LDYgKzE4NjI3LDkgQEAKIAkJCQkzN0My
MzYwRjEwOTdFRTc3MDBFRjlGNzIgLyogQ29tcGxleFRleHRDb250cm9sbGVyLmggKi8sCiAJCQkJ
MzdDMjM4MUYxMDk4Qzg0MjAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlckFUU1VJLmNw
cCAqLywKIAkJCQkzN0MyMzgyMDEwOThDODQyMDBFRjlGNzIgLyogQ29tcGxleFRleHRDb250cm9s
bGVyQ29yZVRleHQubW0gKi8sCisJCQkJQkFCNzcxQTUxNDQ0RjIyRTAwRUM0QzRDIC8qIEZpeGVk
U2l6ZU1hYy5tbSAqLywKKwkJCQlCQUI3NzFBNjE0NDRGMjJFMDBFQzRDNEMgLyogRml4ZWRSZWN0
TWFjLm1tICovLAorCQkJCUJBQjc3MUE3MTQ0NEYyMkUwMEVDNEM0QyAvKiBGaXhlZFBvaW50TWFj
Lm1tICovLAogCQkJCTQ5QUYyRDZCMTQ0MzVEMjEwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1v
bml0b3JNYWMuY3BwICovLAogCQkJCUIyNzUzNTRCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBv
aW50TWFjLm1tICovLAogCQkJCUIyNzUzNTRDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RN
YWMubW0gKi8sCkBAIC0xODY1Myw2ICsxODY4OSwxNCBAQAogCQkJCTQ5RkM3QTRGMTQ0NEFGNUYw
MEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwICovLAogCQkJCTQ5QUYyRDY4MTQ0
MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCAqLywKIAkJCQk2RTY3RDJB
ODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi8sCisJCQkJQkFCNzcxNTExNDQ0
Q0JENDAwRUM0QzRDIC8qIEZpeGVkU2l6ZUhhc2guaCAqLywKKwkJCQlCQUI3NzE1MjE0NDRDQkQ0
MDBFQzRDNEMgLyogRml4ZWRTaXplLmggKi8sCisJCQkJQkFCNzcxNTMxNDQ0Q0JENDAwRUM0QzRD
IC8qIEZpeGVkU2l6ZS5jcHAgKi8sCisJCQkJQkFCNzcxNTQxNDQ0Q0JENDAwRUM0QzRDIC8qIEZp
eGVkUmVjdEhhc2guaCAqLywKKwkJCQlCQUI3NzE1NTE0NDRDQkQ0MDBFQzRDNEMgLyogRml4ZWRS
ZWN0LmggKi8sCisJCQkJQkFCNzcxNTYxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkUmVjdC5jcHAg
Ki8sCisJCQkJQkFCNzcxNTcxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkUG9pbnRIYXNoLmggKi8s
CisJCQkJQkFCNzcxNTgxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkUG9pbnQuaCAqLywKIAkJCQlC
Mjc1MzUzQTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5jcHAgKi8sCiAJCQkJQjI3NTM1
M0IwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuaCAqLywKIAkJCQlCMkUyN0M5RDBCMEYy
QjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmNwcCAqLywKQEAgLTE5NTE1LDYgKzE5NTU5LDcg
QEAKIAkJCQk1MTYwMzAwOTBDQzQyNDU0MDBDOEFDMjUgLyogcG9zaXggKi8sCiAJCQkJMUEyRTZF
NTYwQ0M1NTFFMDAwNEEyMDYyIC8qIHNxbCAqLywKIAkJCQlCMkMzRDlFQzBEMDA2QzFEMDBFRjZG
MjYgLyogdGV4dCAqLywKKwkJCQlCQUI3NzE1MDE0NDRDQkI0MDBFQzRDNEMgLyogQXBwVW5pdC5o
ICovLAogCQkJCUJDRkIyRjc0MDk3QTJFMUEwMEJBNzAzRCAvKiBBcmVuYS5jcHAgKi8sCiAJCQkJ
QkNGQjJGNzUwOTdBMkUxQTAwQkE3MDNEIC8qIEFyZW5hLmggKi8sCiAJCQkJMkVGMUJGRjYxMjFD
QjBCRDAwQzI3NjI3IC8qIEFzeW5jRmlsZVN0cmVhbS5oICovLApAQCAtMjA5NTcsNiArMjEwMDIs
NyBAQAogCQkJCTFBMkFBQzU5MERDMkEzQjEwMEEyMEQ5QSAvKiBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUI0MTcwNjQxMjU2NjJCMzAwNkIyOEZDIC8qIEFw
cGx5QmxvY2tFbGVtZW50Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlERDkwOTlF
NjQ5MjAwNTZFNTgxIC8qIEFwcGx5U3R5bGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQlC
QUIyMkFENDE0QjdBMDJEMDBEOEFCQTYgLyogQXBwVW5pdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTEyREQ4RjYwRDkxRTZBRjAwMEY4OUVFIC8qIEFyY2hpdmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxMkREOEZEMEQ5MUU2QUYwMDBGODlFRSAvKiBBcmNoaXZlRmFjdG9yeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTEyREQ4RkMwRDkxRTZBRjAwMEY4OUVFIC8qIEFyY2hpdmVSZXNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yMjAyOSw2ICsyMjA3NSwxMiBAQAogCQkJCTQ5RUNFQjZFMTQ5OTc5
MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RUNF
QjcwMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzNzJDMDBEOTEyOTYxOUY4MDA1Qzk1NzUgLyogRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTE0QzBBMkIyMTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFBvaW50LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkxNEMwQTJCNDE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRQb2ludEhhc2gu
aCBpbiBIZWFkZXJzICovLAorCQkJCTE0QzBBMkI3MTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFJl
Y3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0QzBBMkI5MTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhl
ZFJlY3RIYXNoLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEMwQTJCQzE0NDYzMjFFMDA1MjA3OTgg
LyogRml4ZWRTaXplLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEMwQTJCRTE0NDYzMjFFMDA1MjA3
OTggLyogRml4ZWRTaXplSGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkYwNEYwQTE1NEYw
OTAwMEE0MjM0IC8qIEZpeGVkVGFibGVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDcz
QkFBMEMzOTlCMUYwMDBGNTk3OSAvKiBGbG9hdENvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCUIyNzUzNTY5MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmggaW4gSGVhZGVycyAq
LywKQEAgLTI1MDc5LDYgKzI1MTMxLDE0IEBACiAJCQkJMzEzMTNGNjUxNDQzQjM1RjAwNkUyQTkw
IC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RUNFQjZE
MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDlFQ0VCNkYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMTRDMEEyQjMxNDQ2MzIxRTAwNTIwNzk4IC8qIEZpeGVkUG9pbnRDRy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkxNEMwQTJCNTE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRQ
b2ludE1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTE0QzBBMkI2MTQ0NjMyMUUwMDUyMDc5OCAv
KiBGaXhlZFJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRDMEEyQjgxNDQ2MzIxRTAwNTIw
Nzk4IC8qIEZpeGVkUmVjdENHLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0QzBBMkJBMTQ0NjMy
MUUwMDUyMDc5OCAvKiBGaXhlZFJlY3RNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQkxNEMwQTJC
QjE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRTaXplLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0
QzBBMkJEMTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFNpemVDRy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkxNEMwQTJCRjE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRTaXplTWFjLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQThDRkYwNEQwQTE1NEYwOTAwMEE0MjM0IC8qIEZpeGVkVGFibGVMYXlvdXQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NjgwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0
UG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJFMjdDOUYwQjBGMkIwOTAwRjE3QzdCIC8q
IEZsb2F0UG9pbnQzRC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0FwcFVuaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9B
cHBVbml0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9BcHBVbml0
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTA5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXBwVW5pdF9oCisjZGVm
aW5lIEFwcFVuaXRfaAorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGludCBrRml4ZWRQb2ludERl
bm9taW5hdG9yID0gNjA7Citjb25zdCBpbnQgaW50TWF4Rm9yQXBwVW5pdCA9IElOVF9NQVggLyBr
Rml4ZWRQb2ludERlbm9taW5hdG9yOworY29uc3QgaW50IGludE1pbkZvckFwcFVuaXQgPSAtaW50
TWF4Rm9yQXBwVW5pdDsKKworY2xhc3MgQXBwVW5pdCB7CitwdWJsaWM6CisgICAgQXBwVW5pdCgp
IDogbV92YWx1ZSgwKSB7IH0KKyAgICBBcHBVbml0KGludCB2YWx1ZSkgeyBtX3ZhbHVlID0gdmFs
dWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yOyB9CisgICAgQXBwVW5pdCh1bnNpZ25lZCBzaG9y
dCB2YWx1ZSkgeyBtX3ZhbHVlID0gdmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yOyB9Cisg
ICAgQXBwVW5pdCh1bnNpZ25lZCBpbnQgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVk
UG9pbnREZW5vbWluYXRvcjsgfQorICAgIEFwcFVuaXQobG9uZyB1bnNpZ25lZCBpbnQgdmFsdWUp
IHsgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsgfQorICAgIEFwcFVu
aXQoZmxvYXQgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRv
cjsgfQorICAgIEFwcFVuaXQoZG91YmxlIHZhbHVlKSB7IG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhl
ZFBvaW50RGVub21pbmF0b3I7IH0KKyAgICBBcHBVbml0KGNvbnN0IEFwcFVuaXQmIHZhbHVlKSB7
IG1fdmFsdWUgPSB2YWx1ZS5yYXdWYWx1ZSgpOyB9CisKKyAgICBpbmxpbmUgaW50IHRvSW50KCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7IH0KKyAgICBp
bmxpbmUgdW5zaWduZWQgdG9VbnNpZ25lZCgpIGNvbnN0IHsgQVNTRVJUKG1fdmFsdWUgPj0gMCk7
IHJldHVybiB0b0ludCgpOyB9CisgICAgaW5saW5lIGZsb2F0IHRvRmxvYXQoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV92YWx1ZSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9y
OyB9CisgICAgaW5saW5lIGRvdWJsZSB0b0RvdWJsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PGRvdWJsZT4obV92YWx1ZSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOyB9CisKKyAgICBv
cGVyYXRvciBpbnQoKSBjb25zdCB7IHJldHVybiB0b0ludCgpOyB9CisgICAgb3BlcmF0b3IgdW5z
aWduZWQoKSBjb25zdCB7IHJldHVybiB0b1Vuc2lnbmVkKCk7IH0KKyAgICBvcGVyYXRvciBsb25n
IHVuc2lnbmVkIGludCgpIGNvbnN0IHsgcmV0dXJuIHRvVW5zaWduZWQoKTsgfQorICAgIG9wZXJh
dG9yIGZsb2F0KCkgY29uc3QgeyByZXR1cm4gdG9GbG9hdCgpOyB9CisgICAgb3BlcmF0b3IgZG91
YmxlKCkgY29uc3QgeyByZXR1cm4gdG9Eb3VibGUoKTsgfQorICAgIG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKKyAgICBpbmxpbmUgaW50IHJhd1ZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIGlubGluZSB2b2lkIHNldFJhd1ZhbHVlKGludCB2
YWx1ZSkgeyBtX3ZhbHVlID0gdmFsdWU7IH0KKworICAgIGlubGluZSBBcHBVbml0IGFicygpCisg
ICAgeworICAgICAgICBBcHBVbml0IHJldHVyblZhbHVlOworICAgICAgICByZXR1cm5WYWx1ZS5z
ZXRSYXdWYWx1ZSg6OmFicyhtX3ZhbHVlKSk7CisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsK
KyAgICB9CisjaWYgT1MoREFSV0lOKQorICAgIGlubGluZSBpbnQgd3RmX2NlaWwoKQorI2Vsc2UK
KyAgICBpbmxpbmUgaW50IGNlaWwoKQorI2VuZGlmCisgICAgeworICAgICAgICByZXR1cm4gKG1f
dmFsdWUgPiAwID8gbV92YWx1ZSArIGtGaXhlZFBvaW50RGVub21pbmF0b3IgLSAxIDogbV92YWx1
ZSAtIGtGaXhlZFBvaW50RGVub21pbmF0b3IgKyAxKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7
CisgICAgfQorICAgIGlubGluZSBpbnQgcm91bmQoKQorICAgIHsKKyAgICAgICAgaWYgKG1fdmFs
dWUgPiAwKQorICAgICAgICAgICAgcmV0dXJuIChtX3ZhbHVlICsgKGtGaXhlZFBvaW50RGVub21p
bmF0b3IgLyAyKSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworICAgICAgICByZXR1cm4gKG1f
dmFsdWUgLSAoa0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDIpKSAvIGtGaXhlZFBvaW50RGVub21p
bmF0b3I7CisgICAgfQorCisgICAgaW5saW5lIGludCBmbG9vcigpCisgICAgeworICAgICAgICBy
ZXR1cm4gdG9JbnQoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQgZXBzaWxvbigpIHsgcmV0
dXJuIDEgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOyB9CisgICAgc3RhdGljIGNvbnN0IEFwcFVu
aXQgbWF4KCkKKyAgICB7CisgICAgICAgIEFwcFVuaXQgbTsKKyAgICAgICAgbS5tX3ZhbHVlID0g
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICAgICAgcmV0dXJuIG07CisgICAg
fQorICAgIHN0YXRpYyBjb25zdCBBcHBVbml0IG1pbigpCisgICAgeworICAgICAgICBBcHBVbml0
IG07CisgICAgICAgIG0ubV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7
CisgICAgICAgIHJldHVybiBtOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgaW50IG1fdmFs
dWU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEFwcFVuaXQmIGEsIGNvbnN0
IEFwcFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEucmF3VmFsdWUoKSA8PSBiLnJhd1ZhbHVlKCk7
Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgQXBwVW5pdCYgYSwgZmxvYXQgYikK
K3sKKyAgICByZXR1cm4gYS50b0Zsb2F0KCkgPD0gYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0
b3I8PShjb25zdCBBcHBVbml0JiBhLCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSA8PSBBcHBVbml0
KGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEFw
cFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgPD0gYi50b0Zsb2F0KCk7Cit9CisKK2lubGluZSBi
b29sIG9wZXJhdG9yPD0oY29uc3QgaW50IGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAgcmV0
dXJuIEFwcFVuaXQoYSkgPD0gYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBB
cHBVbml0JiBhLCBjb25zdCBBcHBVbml0JiBiKQoreworICAgIHJldHVybiBhLnJhd1ZhbHVlKCkg
Pj0gYi5yYXdWYWx1ZSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IEFwcFVu
aXQmIGEsIGludCBiKQoreworICAgIHJldHVybiBhID49IEFwcFVuaXQoYik7Cit9CisKK2lubGlu
ZSBib29sIG9wZXJhdG9yPj0oY29uc3QgZmxvYXQgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sKKyAg
ICByZXR1cm4gYSA+PSBiLnRvRmxvYXQoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I+PShj
b25zdCBBcHBVbml0JiBhLCBmbG9hdCBiKQoreworICAgIHJldHVybiBhLnRvRmxvYXQoKSA+PSBi
OworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IGludCBhLCBjb25zdCBBcHBVbml0
JiBiKQoreworICAgIHJldHVybiBBcHBVbml0KGEpID49IGI7Cit9CisKK2lubGluZSBib29sIG9w
ZXJhdG9yPChjb25zdCBBcHBVbml0JiBhLCBjb25zdCBBcHBVbml0JiBiKQoreworICAgIHJldHVy
biBhLnJhd1ZhbHVlKCkgPCBiLnJhd1ZhbHVlKCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9y
PChjb25zdCBBcHBVbml0JiBhLCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSA8IEFwcFVuaXQoYik7
Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBBcHBVbml0JiBhLCBmbG9hdCBiKQor
eworICAgIHJldHVybiBhLnRvRmxvYXQoKSA8IGI7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9y
PChjb25zdCBpbnQgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sKKyAgICByZXR1cm4gQXBwVW5pdChh
KSA8IGI7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBmbG9hdCBhLCBjb25zdCBB
cHBVbml0JiBiKQoreworICAgIHJldHVybiBhIDwgYi50b0Zsb2F0KCk7Cit9CisKK2lubGluZSBi
b29sIG9wZXJhdG9yPihjb25zdCBBcHBVbml0JiBhLCBjb25zdCBBcHBVbml0JiBiKQoreworICAg
IHJldHVybiBhLnJhd1ZhbHVlKCkgPiBiLnJhd1ZhbHVlKCk7Cit9CisKK2lubGluZSBib29sIG9w
ZXJhdG9yPihjb25zdCBBcHBVbml0JiBhLCBkb3VibGUgYikKK3sKKyAgICByZXR1cm4gYS50b0Rv
dWJsZSgpID4gYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEFwcFVuaXQmIGEs
IGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEudG9GbG9hdCgpID4gYjsKK30KKworaW5saW5lIGJv
b2wgb3BlcmF0b3I+KGNvbnN0IEFwcFVuaXQmIGEsIGludCBiKQoreworICAgIHJldHVybiBhID4g
QXBwVW5pdChiKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGludCBhLCBjb25z
dCBBcHBVbml0JiBiKQoreworICAgIHJldHVybiBBcHBVbml0KGEpID4gYjsKK30KKworaW5saW5l
IGJvb2wgb3BlcmF0b3I+KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAg
cmV0dXJuIGEgPiBiLnRvRmxvYXQoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0
IGRvdWJsZSBhLCBjb25zdCBBcHBVbml0JiBiKQoreworICAgIHJldHVybiBhID4gYi50b0RvdWJs
ZSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFwcFVuaXQmIGEsIGNvbnN0
IEFwcFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEucmF3VmFsdWUoKSAhPSBiLnJhd1ZhbHVlKCk7
Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQXBwVW5pdCYgYSwgZmxvYXQgYikK
K3sKKyAgICByZXR1cm4gYSAhPSBBcHBVbml0KGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IGludCBhLCBjb25zdCBBcHBVbml0JiBiKQoreworICAgIHJldHVybiBBcHBVbml0
KGEpICE9IGI7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQXBwVW5pdCYgYSwg
aW50IGIpCit7CisgICAgcmV0dXJuIGEgIT0gQXBwVW5pdChiKTsKK30KKworaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBBcHBVbml0JiBhLCBjb25zdCBBcHBVbml0JiBiKQoreworICAgIHJl
dHVybiBhLnJhd1ZhbHVlKCkgPT0gYi5yYXdWYWx1ZSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEFwcFVuaXQmIGEsIGludCBiKQoreworICAgIHJldHVybiBhLnRvSW50KCkg
PT0gYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpbnQgYSwgY29uc3QgQXBw
VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYSA9PSBiLnRvSW50KCk7Cit9CisKK2lubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgQXBwVW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gYSA9
PSBBcHBVbml0KGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGZsb2F0IGEs
IGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgPT0gYi50b0Zsb2F0KCk7Cit9CisK
Ky8vIEZvciBtdWx0aXBsaWNhdGlvbiB0aGF0J3MgcHJvbmUgdG8gb3ZlcmZsb3csIHRoaXMgYm91
bmRzIGl0IHRvIEFwcFVuaXQ6Om1heCgpIGFuZCA6Om1pbigpCitpbmxpbmUgQXBwVW5pdCBib3Vu
ZGVkTXVsdGlwbHkoY29uc3QgQXBwVW5pdCYgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sKKyAgICBB
cHBVbml0IHJldHVyblZhbDsKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoKGEucmF3VmFsdWUo
KSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3IpICogYi5yYXdWYWx1ZSgpKTsKKyAgICBpZiAoKGEu
cmF3VmFsdWUoKSA+PSAwICYmIGIucmF3VmFsdWUoKSA+PSAwKSB8fCAoYS5yYXdWYWx1ZSgpIDwg
MCAmJiBiLnJhd1ZhbHVlKCkgPCAwKSkgeworICAgICAgICBpZiAocmV0dXJuVmFsLnJhd1ZhbHVl
KCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIEFwcFVuaXQ6Om1heCgpOworICAgICAgICByZXR1
cm4gcmV0dXJuVmFsOworICAgIH0KKyAgICBpZiAocmV0dXJuVmFsLnJhd1ZhbHVlKCkgPiAwKQor
ICAgICAgICByZXR1cm4gQXBwVW5pdDo6bWluKCk7CisgICAgcmV0dXJuIHJldHVyblZhbDsKK30K
KworaW5saW5lIEFwcFVuaXQgb3BlcmF0b3IqKGNvbnN0IEFwcFVuaXQmIGEsIGNvbnN0IEFwcFVu
aXQmIGIpCit7CisgICAgQXBwVW5pdCByZXR1cm5WYWw7CisgICAgcmV0dXJuVmFsLnNldFJhd1Zh
bHVlKChhLnJhd1ZhbHVlKCkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yKSAqIGIucmF3VmFsdWUo
KSk7CisgICAgQVNTRVJUKChhLnJhd1ZhbHVlKCkgPj0gMCAmJiBiLnJhd1ZhbHVlKCkgPj0gMCAm
JiByZXR1cm5WYWwucmF3VmFsdWUoKSA+PSAwKQorICAgICAgICAgICB8fCAoYS5yYXdWYWx1ZSgp
IDwgMCAmJiBiLnJhd1ZhbHVlKCkgPCAwICYmIHJldHVyblZhbC5yYXdWYWx1ZSgpID49IDApCisg
ICAgICAgICAgIHx8ICgoYS5yYXdWYWx1ZSgpIDwgMCB8fCBiLnJhd1ZhbHVlKCkgPCAwKSAmJiBy
ZXR1cm5WYWwucmF3VmFsdWUoKSA8PSAwKSk7CisgICAgcmV0dXJuIHJldHVyblZhbDsKK30gICAg
CisKK2lubGluZSBkb3VibGUgb3BlcmF0b3IqKGNvbnN0IEFwcFVuaXQmIGEsIGRvdWJsZSBiKQor
eworICAgIHJldHVybiBhLnRvRG91YmxlKCkgKiBiOworfQorCitpbmxpbmUgZmxvYXQgb3BlcmF0
b3IqKGNvbnN0IEFwcFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEudG9GbG9hdCgp
ICogYjsKK30KKworaW5saW5lIEFwcFVuaXQgb3BlcmF0b3IqKGNvbnN0IEFwcFVuaXQmIGEsIGlu
dCBiKQoreworICAgIHJldHVybiBhICogQXBwVW5pdChiKTsKK30KKworaW5saW5lIEFwcFVuaXQg
b3BlcmF0b3IqKGNvbnN0IEFwcFVuaXQmIGEsIHVuc2lnbmVkIGIpCit7CisgICAgcmV0dXJuIGEg
KiBBcHBVbml0KGIpOworfQorCitpbmxpbmUgQXBwVW5pdCBvcGVyYXRvciooY29uc3QgQXBwVW5p
dCYgYSwgbG9uZyB1bnNpZ25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSAqIEFwcFVuaXQoYik7
Cit9CisKK2lubGluZSBBcHBVbml0IG9wZXJhdG9yKihsb25nIHVuc2lnbmVkIGludCBhLCBjb25z
dCBBcHBVbml0JiBiKQoreworICAgIHJldHVybiBBcHBVbml0KGEpICogYjsKK30KKworaW5saW5l
IEFwcFVuaXQgb3BlcmF0b3IqKHVuc2lnbmVkIGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAg
cmV0dXJuIEFwcFVuaXQoYSkgKiBiOworfQorCitpbmxpbmUgQXBwVW5pdCBvcGVyYXRvciooY29u
c3QgaW50IGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEFwcFVuaXQoYSkgKiBi
OworfQorCitpbmxpbmUgZmxvYXQgb3BlcmF0b3IqKGNvbnN0IGZsb2F0IGEsIGNvbnN0IEFwcFVu
aXQmIGIpCit7CisgICAgcmV0dXJuIGEgKiBiLnRvRmxvYXQoKTsKK30KKworaW5saW5lIGRvdWJs
ZSBvcGVyYXRvciooY29uc3QgZG91YmxlIGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAgcmV0
dXJuIGEgKiBiLnRvRG91YmxlKCk7Cit9CisKK2lubGluZSBBcHBVbml0IG9wZXJhdG9yLyhjb25z
dCBBcHBVbml0JiBhLCBjb25zdCBBcHBVbml0JiBiKQoreworICAgIEFwcFVuaXQgcmV0dXJuVmFs
OworICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShrRml4ZWRQb2ludERlbm9taW5hdG9yICogKGEu
cmF3VmFsdWUoKSAvIGIucmF3VmFsdWUoKSkpOworICAgIEFTU0VSVCgoKGEucmF3VmFsdWUoKSA+
PSAwKSAmJiAoYi5yYXdWYWx1ZSgpID49IDApICYmIChyZXR1cm5WYWwucmF3VmFsdWUoKSA+PSAw
KSkKKyAgICAgICAgICAgfHwgKChhLnJhd1ZhbHVlKCkgPCAwKSAmJiAoYi5yYXdWYWx1ZSgpIDwg
MCkgJiYgKHJldHVyblZhbC5yYXdWYWx1ZSgpID49IDApKQorICAgICAgICAgICB8fCAoKChhLnJh
d1ZhbHVlKCkgPCAwKSB8fCAoYi5yYXdWYWx1ZSgpIDwgMCkpICYmIChyZXR1cm5WYWwucmF3VmFs
dWUoKSA8PSAwKSkpOworICAgIHJldHVybiByZXR1cm5WYWw7Cit9ICAgIAorCitpbmxpbmUgZmxv
YXQgb3BlcmF0b3IvKGNvbnN0IEFwcFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEu
dG9GbG9hdCgpIC8gYjsKK30KKworaW5saW5lIGRvdWJsZSBvcGVyYXRvci8oY29uc3QgQXBwVW5p
dCYgYSwgZG91YmxlIGIpCit7CisgICAgcmV0dXJuIGEudG9Eb3VibGUoKSAvIGI7Cit9CisKK2lu
bGluZSBBcHBVbml0IG9wZXJhdG9yLyhjb25zdCBBcHBVbml0JiBhLCBpbnQgYikKK3sKKyAgICBy
ZXR1cm4gYSAvIEFwcFVuaXQoYik7Cit9CisKK2lubGluZSBBcHBVbml0IG9wZXJhdG9yLyhjb25z
dCBBcHBVbml0JiBhLCB1bnNpZ25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSAvIEFwcFVuaXQo
Yik7Cit9CisKK2lubGluZSBmbG9hdCBvcGVyYXRvci8oY29uc3QgZmxvYXQgYSwgY29uc3QgQXBw
VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYSAvIGIudG9GbG9hdCgpOworfQorCitpbmxpbmUgQXBw
VW5pdCBvcGVyYXRvci8oY29uc3QgaW50IGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAgcmV0
dXJuIEFwcFVuaXQoYSkgLyBiOworfQorCitpbmxpbmUgQXBwVW5pdCBvcGVyYXRvci8odW5zaWdu
ZWQgaW50IGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEFwcFVuaXQoYSkgLyBi
OworfQorCitpbmxpbmUgQXBwVW5pdCBvcGVyYXRvcisoY29uc3QgQXBwVW5pdCYgYSwgY29uc3Qg
QXBwVW5pdCYgYikKK3sKKyAgICBBcHBVbml0IHJldHVyblZhbDsKKyAgICByZXR1cm5WYWwuc2V0
UmF3VmFsdWUoYS5yYXdWYWx1ZSgpICsgYi5yYXdWYWx1ZSgpKTsKKyAgICByZXR1cm4gcmV0dXJu
VmFsOworfQorCitpbmxpbmUgQXBwVW5pdCBvcGVyYXRvcisoY29uc3QgQXBwVW5pdCYgYSwgaW50
IGIpCit7CisgICAgcmV0dXJuIGEgKyBBcHBVbml0KGIpOworfQorCitpbmxpbmUgZmxvYXQgb3Bl
cmF0b3IrKGNvbnN0IEFwcFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEudG9GbG9h
dCgpICsgYjsKK30KKworaW5saW5lIGRvdWJsZSBvcGVyYXRvcisoY29uc3QgQXBwVW5pdCYgYSwg
ZG91YmxlIGIpCit7CisgICAgcmV0dXJuIGEudG9Eb3VibGUoKSArIGI7Cit9CisKK2lubGluZSBB
cHBVbml0IG9wZXJhdG9yKyhjb25zdCBpbnQgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sKKyAgICBy
ZXR1cm4gQXBwVW5pdChhKSArIGI7Cit9CisKK2lubGluZSBmbG9hdCBvcGVyYXRvcisoY29uc3Qg
ZmxvYXQgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sKKyAgICByZXR1cm4gYSArIGIudG9GbG9hdCgp
OworfQorCitpbmxpbmUgQXBwVW5pdCBvcGVyYXRvci0oY29uc3QgQXBwVW5pdCYgYSwgY29uc3Qg
QXBwVW5pdCYgYikKK3sKKyAgICBBcHBVbml0IHJldHVyblZhbDsKKyAgICByZXR1cm5WYWwuc2V0
UmF3VmFsdWUoYS5yYXdWYWx1ZSgpIC0gYi5yYXdWYWx1ZSgpKTsKKyAgICByZXR1cm4gcmV0dXJu
VmFsOworfQorCitpbmxpbmUgQXBwVW5pdCBvcGVyYXRvci0oY29uc3QgQXBwVW5pdCYgYSwgaW50
IGIpCit7CisgICAgcmV0dXJuIGEgLSBBcHBVbml0KGIpOworfQorCitpbmxpbmUgZmxvYXQgb3Bl
cmF0b3ItKGNvbnN0IEFwcFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEudG9GbG9h
dCgpIC0gYjsKK30KKworaW5saW5lIEFwcFVuaXQgb3BlcmF0b3ItKGNvbnN0IGludCBhLCBjb25z
dCBBcHBVbml0JiBiKQoreworICAgIHJldHVybiBBcHBVbml0KGEpIC0gYjsKK30KKworaW5saW5l
IGZsb2F0IG9wZXJhdG9yLShjb25zdCBmbG9hdCBhLCBjb25zdCBBcHBVbml0JiBiKQoreworICAg
IHJldHVybiBhIC0gYi50b0Zsb2F0KCk7Cit9CisKK2lubGluZSBBcHBVbml0IG9wZXJhdG9yLShj
b25zdCBBcHBVbml0JiBhKQoreworICAgIEFwcFVuaXQgcmV0dXJuVmFsOworICAgIHJldHVyblZh
bC5zZXRSYXdWYWx1ZSgtYS5yYXdWYWx1ZSgpKTsKKyAgICByZXR1cm4gcmV0dXJuVmFsOworfQor
CitpbmxpbmUgQXBwVW5pdCYgb3BlcmF0b3IrPShBcHBVbml0JiBhLCBjb25zdCBBcHBVbml0JiBi
KQoreworICAgIGEgPSBhICsgYjsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEFwcFVuaXQm
IG9wZXJhdG9yKz0oQXBwVW5pdCYgYSwgaW50IGIpCit7CisgICAgYSA9IGEgKyBiOworICAgIHJl
dHVybiBhOworfQorCitpbmxpbmUgZmxvYXQmIG9wZXJhdG9yKz0oZmxvYXQmIGEsIGNvbnN0IEFw
cFVuaXQmIGIpCit7CisgICAgYSA9IGEgKyBiLnRvRmxvYXQoKTsKKyAgICByZXR1cm4gYTsKK30K
KworaW5saW5lIEFwcFVuaXQmIG9wZXJhdG9yLT0oQXBwVW5pdCYgYSwgaW50IGIpCit7CisgICAg
YSA9IGEgLSBiOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgQXBwVW5pdCYgb3BlcmF0b3It
PShBcHBVbml0JiBhLCBjb25zdCBBcHBVbml0JiBiKQoreworICAgIGEgPSBhIC0gYjsKKyAgICBy
ZXR1cm4gYTsKK30KKworaW5saW5lIGZsb2F0JiBvcGVyYXRvci09KGZsb2F0JiBhLCBjb25zdCBB
cHBVbml0JiBiKQoreworICAgIGEgPSBhIC0gYi50b0Zsb2F0KCk7CisgICAgcmV0dXJuIGE7Cit9
CisKK2lubGluZSBBcHBVbml0JiBvcGVyYXRvcio9KEFwcFVuaXQmIGEsIGludCBiKQoreworICAg
IGEgPSBhICogYjsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEFwcFVuaXQmIG9wZXJhdG9y
Kj0oQXBwVW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICBhID0gYSAqIGI7CisgICAgcmV0dXJuIGE7
Cit9CisKK2lubGluZSBpbnQgc25hcFNpemVUb1BpeGVsKEFwcFVuaXQgc2l6ZSwgQXBwVW5pdCBs
b2NhdGlvbikgCit7CisgICAgcmV0dXJuIChsb2NhdGlvbiArIHNpemUpLnJvdW5kKCkgLSBsb2Nh
dGlvbi5yb3VuZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBB
cHBVbml0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZpeGVkUG9p
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhl
ZFBvaW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GaXhlZFBvaW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogQ29w
eXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRml4
ZWRQb2ludF9oCisjZGVmaW5lIEZpeGVkUG9pbnRfaAorCisjaW5jbHVkZSAiRml4ZWRTaXplLmgi
CisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisK
KyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxRRGF0YVN0cmVhbT4KKyNlbmRpZgorCisjaWYg
VVNFKENHKSB8fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01JVU0pCit0eXBlZGVmIHN0cnVjdCBDR1Bv
aW50IENHUG9pbnQ7CisjZW5kaWYKKworCisjaWYgT1MoREFSV0lOKSAmJiAhUExBVEZPUk0oUVQp
CisjaWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKK3R5cGVk
ZWYgc3RydWN0IENHUG9pbnQgTlNQb2ludDsKKyNlbHNlCit0eXBlZGVmIHN0cnVjdCBfTlNQb2lu
dCBOU1BvaW50OworI2VuZGlmCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKK3R5cGVkZWYg
c3RydWN0IHRhZ1BPSU5UIFBPSU5UOwordHlwZWRlZiBzdHJ1Y3QgdGFnUE9JTlRTIFBPSU5UUzsK
KyNlbGlmIFBMQVRGT1JNKFFUKQorUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRUG9pbnRGOwor
UVRfRU5EX05BTUVTUEFDRQorI2VsaWYgUExBVEZPUk0oR1RLKQordHlwZWRlZiBzdHJ1Y3QgX0dk
a1BvaW50IEdka1BvaW50OworI2VsaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCUG9pbnQ7Cisj
ZWxpZiBQTEFURk9STShFRkwpCit0eXBlZGVmIHN0cnVjdCBfRXZhc19Qb2ludCBFdmFzX1BvaW50
OworI2VuZGlmCisKKyNpZiBQTEFURk9STShXWCkKK2NsYXNzIHd4UG9pbnQ7CisjZW5kaWYKKwor
I2lmIFBMQVRGT1JNKEJSRVdNUCkKK3R5cGVkZWYgc3RydWN0IF9wb2ludCBBRUVQb2ludDsKKyNl
bmRpZgorCisjaWYgVVNFKFNLSUEpCitzdHJ1Y3QgU2tQb2ludDsKK3N0cnVjdCBTa0lQb2ludDsK
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpeGVkUG9pbnQgeworcHVi
bGljOgorICAgIEZpeGVkUG9pbnQoKSA6IG1feCgwKSwgbV95KDApIHsgfQorICAgIEZpeGVkUG9p
bnQoQXBwVW5pdCB4LCBBcHBVbml0IHkpIDogbV94KHgpLCBtX3koeSkgeyB9CisgICAgRml4ZWRQ
b2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIDogbV94KHBvaW50LngoKSksIG1feShwb2ludC55
KCkpIHsgfQorICAgIGV4cGxpY2l0IEZpeGVkUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgc2l6ZSkg
OiBtX3goc2l6ZS54KCkpLCBtX3koc2l6ZS55KCkpIHsgfQorCisgICAgc3RhdGljIEZpeGVkUG9p
bnQgemVybygpIHsgcmV0dXJuIEZpeGVkUG9pbnQoKTsgfQorCisgICAgQXBwVW5pdCB4KCkgY29u
c3QgeyByZXR1cm4gbV94OyB9CisgICAgQXBwVW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9
CisKKyAgICB2b2lkIHNldFgoQXBwVW5pdCB4KSB7IG1feCA9IHg7IH0KKyAgICB2b2lkIHNldFko
QXBwVW5pdCB5KSB7IG1feSA9IHk7IH0KKworICAgIHZvaWQgbW92ZShjb25zdCBGaXhlZFNpemUm
IHMpIHsgbW92ZShzLndpZHRoKCksIHMuaGVpZ2h0KCkpOyB9IAorICAgIHZvaWQgbW92ZUJ5KGNv
bnN0IEZpeGVkUG9pbnQmIG9mZnNldCkgeyBtb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkpOyB9
CisgICAgdm9pZCBtb3ZlKEFwcFVuaXQgZHgsIEFwcFVuaXQgZHkpIHsgbV94ICs9IGR4OyBtX3kg
Kz0gZHk7IH0KKyAgICB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkKKyAgICB7CisgICAg
ICAgIG1feCAqPSBzeDsKKyAgICAgICAgbV95ICo9IHN5OworICAgIH0KKyAgICAKKyAgICBGaXhl
ZFBvaW50IGV4cGFuZGVkVG8oY29uc3QgRml4ZWRQb2ludCYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gRml4ZWRQb2ludChtX3ggPiBvdGhlci5tX3ggPyBtX3ggOiBvdGhlci5t
X3gsCisgICAgICAgICAgICBtX3kgPiBvdGhlci5tX3kgPyBtX3kgOiBvdGhlci5tX3kpOworICAg
IH0KKworICAgIEZpeGVkUG9pbnQgc2hydW5rVG8oY29uc3QgRml4ZWRQb2ludCYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gRml4ZWRQb2ludChtX3ggPCBvdGhlci5tX3ggPyBt
X3ggOiBvdGhlci5tX3gsCisgICAgICAgICAgICBtX3kgPCBvdGhlci5tX3kgPyBtX3kgOiBvdGhl
ci5tX3kpOworICAgIH0KKworICAgIHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCisgICAgewor
ICAgICAgICAqdGhpcyA9IGV4cGFuZGVkVG8oemVybygpKTsKKyAgICB9CisKKyAgICBGaXhlZFBv
aW50IHRyYW5zcG9zZWRQb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRml4ZWRQ
b2ludChtX3ksIG1feCk7CisgICAgfQorCisjaWYgVVNFKENHKSB8fCBVU0UoU0tJQV9PTl9NQUNf
Q0hST01JVU0pCisgICAgZXhwbGljaXQgRml4ZWRQb2ludChjb25zdCBDR1BvaW50Jik7IC8vIGRv
bid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgb3BlcmF0b3IgQ0dQ
b2ludCgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBPUyhEQVJXSU4pICYmICFQTEFURk9STShRVCkg
JiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpCisg
ICAgZXhwbGljaXQgRml4ZWRQb2ludChjb25zdCBOU1BvaW50Jik7IC8vIGRvbid0IGRvIHRoaXMg
aW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgb3BlcmF0b3IgTlNQb2ludCgpIGNvbnN0
OworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgRml4ZWRQb2ludChjb25zdCBQT0lO
VCYpOworICAgIG9wZXJhdG9yIFBPSU5UKCkgY29uc3Q7CisgICAgRml4ZWRQb2ludChjb25zdCBQ
T0lOVFMmKTsKKyAgICBvcGVyYXRvciBQT0lOVFMoKSBjb25zdDsKKyNlbGlmIFBMQVRGT1JNKFFU
KQorICAgIEZpeGVkUG9pbnQoY29uc3QgUVBvaW50RiYpOworICAgIG9wZXJhdG9yIFFQb2ludEYo
KSBjb25zdDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBGaXhlZFBvaW50KGNvbnN0IEdka1Bv
aW50Jik7CisgICAgb3BlcmF0b3IgR2RrUG9pbnQoKSBjb25zdDsKKyNlbGlmIFBMQVRGT1JNKEhB
SUtVKQorICAgIGV4cGxpY2l0IEZpeGVkUG9pbnQoY29uc3QgQlBvaW50Jik7CisgICAgb3BlcmF0
b3IgQlBvaW50KCkgY29uc3Q7CisjZWxpZiBQTEFURk9STShFRkwpCisgICAgZXhwbGljaXQgRml4
ZWRQb2ludChjb25zdCBFdmFzX1BvaW50Jik7CisgICAgb3BlcmF0b3IgRXZhc19Qb2ludCgpIGNv
bnN0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShXWCkKKyAgICBGaXhlZFBvaW50KGNvbnN0IHd4
UG9pbnQmKTsKKyAgICBvcGVyYXRvciB3eFBvaW50KCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFBM
QVRGT1JNKEJSRVdNUCkKKyAgICBGaXhlZFBvaW50KGNvbnN0IEFFRVBvaW50Jik7CisgICAgb3Bl
cmF0b3IgQUVFUG9pbnQoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgVVNFKFNLSUEpCisgICAgRml4
ZWRQb2ludChjb25zdCBTa1BvaW50Jik7CisgICAgb3BlcmF0b3IgU2tJUG9pbnQoKSBjb25zdDsK
KyAgICBvcGVyYXRvciBTa1BvaW50KCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBB
cHBVbml0IG1feCwgbV95OworfTsKKworaW5saW5lIEZpeGVkUG9pbnQmIG9wZXJhdG9yKz0oRml4
ZWRQb2ludCYgYSwgY29uc3QgRml4ZWRTaXplJiBiKQoreworICAgIGEubW92ZShiLndpZHRoKCks
IGIuaGVpZ2h0KCkpOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgRml4ZWRQb2ludCYgb3Bl
cmF0b3ItPShGaXhlZFBvaW50JiBhLCBjb25zdCBGaXhlZFNpemUmIGIpCit7CisgICAgYS5tb3Zl
KC1iLndpZHRoKCksIC1iLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZp
eGVkUG9pbnQgb3BlcmF0b3IrKGNvbnN0IEZpeGVkUG9pbnQmIGEsIGNvbnN0IEZpeGVkU2l6ZSYg
YikKK3sKKyAgICByZXR1cm4gRml4ZWRQb2ludChhLngoKSArIGIud2lkdGgoKSwgYS55KCkgKyBi
LmhlaWdodCgpKTsKK30KKworaW5saW5lIEZpeGVkUG9pbnQgb3BlcmF0b3IrKGNvbnN0IEZpeGVk
UG9pbnQmIGEsIGNvbnN0IEZpeGVkUG9pbnQmIGIpCit7CisgICAgcmV0dXJuIEZpeGVkUG9pbnQo
YS54KCkgKyBiLngoKSwgYS55KCkgKyBiLnkoKSk7Cit9CisKK2lubGluZSBGaXhlZFNpemUgb3Bl
cmF0b3ItKGNvbnN0IEZpeGVkUG9pbnQmIGEsIGNvbnN0IEZpeGVkUG9pbnQmIGIpCit7CisgICAg
cmV0dXJuIEZpeGVkU2l6ZShhLngoKSAtIGIueCgpLCBhLnkoKSAtIGIueSgpKTsKK30KKworaW5s
aW5lIEZpeGVkUG9pbnQgb3BlcmF0b3ItKGNvbnN0IEZpeGVkUG9pbnQmIGEsIGNvbnN0IEZpeGVk
U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gRml4ZWRQb2ludChhLngoKSAtIGIud2lkdGgoKSwgYS55
KCkgLSBiLmhlaWdodCgpKTsKK30KKworaW5saW5lIEZpeGVkUG9pbnQgb3BlcmF0b3ItKGNvbnN0
IEZpeGVkUG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiBGaXhlZFBvaW50KC1wb2ludC54KCks
IC1wb2ludC55KCkpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZpeGVkUG9p
bnQmIGEsIGNvbnN0IEZpeGVkUG9pbnQmIGIpCit7CisgICAgcmV0dXJuIGEueCgpID09IGIueCgp
ICYmIGEueSgpID09IGIueSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZp
eGVkUG9pbnQmIGEsIGNvbnN0IEZpeGVkUG9pbnQmIGIpCit7CisgICAgcmV0dXJuIGEueCgpICE9
IGIueCgpIHx8IGEueSgpICE9IGIueSgpOworfQorCitpbmxpbmUgRml4ZWRQb2ludCB0b1BvaW50
KGNvbnN0IEZpeGVkU2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gRml4ZWRQb2ludChzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpOworfQorCitpbmxpbmUgRml4ZWRTaXplIHRvU2l6ZShjb25z
dCBGaXhlZFBvaW50JiBhKQoreworICAgIHJldHVybiBGaXhlZFNpemUoYS54KCksIGEueSgpKTsK
K30KKworaW5saW5lIEludFBvaW50IGZsb29yZWRJbnRQb2ludChjb25zdCBGaXhlZFBvaW50JiBw
b2ludCkKK3sKKyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLnRvSW50KCksIHBvaW50Lnko
KS50b0ludCgpKTsKK30KKworaW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2ludChjb25zdCBG
aXhlZFBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLnJvdW5k
KCksIHBvaW50LnkoKS5yb3VuZCgpKTsKK30KKworaW5saW5lIEludFBvaW50IGNlaWxlZEludFBv
aW50KGNvbnN0IEZpeGVkUG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiBJbnRQb2ludChwb2lu
dC54KCkuY2VpbCgpLCBwb2ludC55KCkuY2VpbCgpKTsKK30KKworI2lmIFBMQVRGT1JNKFFUKQor
aW5saW5lIFFEYXRhU3RyZWFtJiBvcGVyYXRvcjw8KFFEYXRhU3RyZWFtJiBzdHJlYW0sIGNvbnN0
IEZpeGVkUG9pbnQmIHBvaW50KQoreworICAgIHN0cmVhbSA8PCBwb2ludC54KCkudG9GbG9hdCgp
IDw8IHBvaW50LnkoKS50b0Zsb2F0KCk7CisgICAgcmV0dXJuIHN0cmVhbTsKK30KKworaW5saW5l
IFFEYXRhU3RyZWFtJiBvcGVyYXRvcj4+KFFEYXRhU3RyZWFtJiBzdHJlYW0sIEZpeGVkUG9pbnQm
IHBvaW50KQoreworICAgIGZsb2F0IHgsIHk7CisgICAgc3RyZWFtID4+IHggPj4geTsKKyAgICBw
b2ludC5zZXRYKHgpOworICAgIHBvaW50LnNldFkoeSk7CisgICAgcmV0dXJuIHN0cmVhbTsKK30K
KyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGaXhlZFBvaW50
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZpeGVkUmVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRSZWN0
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zp
eGVkUmVjdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJp
Z2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGaXhlZFJlY3QuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgPGFsZ29yaXRobT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaXhlZFJlY3Q6
OkZpeGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCisgICAgOiBtX2xvY2F0aW9uKEZpeGVkUG9p
bnQoci54KCksIHIueSgpKSkKKyAgICAsIG1fc2l6ZShGaXhlZFNpemUoci53aWR0aCgpLCByLmhl
aWdodCgpKSkKK3sKK30KKworYm9vbCBGaXhlZFJlY3Q6OmludGVyc2VjdHMoY29uc3QgRml4ZWRS
ZWN0JiBvdGhlcikgY29uc3QKK3sKKyAgICAvLyBDaGVja2luZyBlbXB0aW5lc3MgaGFuZGxlcyBu
ZWdhdGl2ZSB3aWR0aHMgYXMgd2VsbCBhcyB6ZXJvLgorICAgIHJldHVybiAhaXNFbXB0eSgpICYm
ICFvdGhlci5pc0VtcHR5KCkKKyAgICAgICAgJiYgeCgpIDwgb3RoZXIubWF4WCgpICYmIG90aGVy
LngoKSA8IG1heFgoKQorICAgICAgICAmJiB5KCkgPCBvdGhlci5tYXhZKCkgJiYgb3RoZXIueSgp
IDwgbWF4WSgpOworfQorCitib29sIEZpeGVkUmVjdDo6Y29udGFpbnMoY29uc3QgRml4ZWRSZWN0
JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4geCgpIDw9IG90aGVyLngoKSAmJiBtYXhYKCkg
Pj0gb3RoZXIubWF4WCgpCisgICAgICAgICYmIHkoKSA8PSBvdGhlci55KCkgJiYgbWF4WSgpID49
IG90aGVyLm1heFkoKTsKK30KKwordm9pZCBGaXhlZFJlY3Q6OmludGVyc2VjdChjb25zdCBGaXhl
ZFJlY3QmIG90aGVyKQoreworICAgIEFwcFVuaXQgeCA9IHN0ZDo6bWF4KHgoKSwgb3RoZXIueCgp
KTsKKyAgICBBcHBVbml0IHkgPSBzdGQ6Om1heCh5KCksIG90aGVyLnkoKSk7CisgICAgQXBwVW5p
dCBtYXhYID0gc3RkOjptaW4obWF4WCgpLCBvdGhlci5tYXhYKCkpOworICAgIEFwcFVuaXQgbWF4
WSA9IHN0ZDo6bWluKG1heFkoKSwgb3RoZXIubWF4WSgpKTsKKworICAgIC8vIFJldHVybiBhIGNs
ZWFuIGVtcHR5IHJlY3RhbmdsZSBmb3Igbm9uLWludGVyc2VjdGluZyBjYXNlcy4KKyAgICBpZiAo
eCA+PSBtYXhYIHx8IHkgPj0gbWF4WSkgeworICAgICAgICB4ID0gMDsKKyAgICAgICAgeSA9IDA7
CisgICAgICAgIG1heFggPSAwOworICAgICAgICBtYXhZID0gMDsKKyAgICB9CisKKyAgICBtX2xv
Y2F0aW9uLnNldFgoeCk7CisgICAgbV9sb2NhdGlvbi5zZXRZKHkpOworICAgIG1fc2l6ZS5zZXRX
aWR0aChtYXhYIC0geCk7CisgICAgbV9zaXplLnNldEhlaWdodChtYXhZIC0geSk7Cit9CisKK3Zv
aWQgRml4ZWRSZWN0Ojp1bml0ZShjb25zdCBGaXhlZFJlY3QmIG90aGVyKQoreworICAgIC8vIEhh
bmRsZSBlbXB0eSBzcGVjaWFsIGNhc2VzIGZpcnN0LgorICAgIGlmIChvdGhlci5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoaXNFbXB0eSgpKSB7CisgICAgICAgICp0aGlzID0g
b3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBcHBVbml0IHggPSBzdGQ6Om1p
bih4KCksIG90aGVyLngoKSk7CisgICAgQXBwVW5pdCB5ID0gc3RkOjptaW4oeSgpLCBvdGhlci55
KCkpOworICAgIEFwcFVuaXQgbWF4WCA9IHN0ZDo6bWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKTsK
KyAgICBBcHBVbml0IG1heFkgPSBzdGQ6Om1heChtYXhZKCksIG90aGVyLm1heFkoKSk7CisKKyAg
ICBtX2xvY2F0aW9uLnNldFgoeCk7CisgICAgbV9sb2NhdGlvbi5zZXRZKHkpOworICAgIG1fc2l6
ZS5zZXRXaWR0aChtYXhYIC0geCk7CisgICAgbV9zaXplLnNldEhlaWdodChtYXhZIC0geSk7Cit9
CisKK3ZvaWQgRml4ZWRSZWN0Ojp1bml0ZUlmTm9uWmVybyhjb25zdCBGaXhlZFJlY3QmIG90aGVy
KQoreworICAgIC8vIEhhbmRsZSBlbXB0eSBzcGVjaWFsIGNhc2VzIGZpcnN0LgorICAgIGlmICgh
b3RoZXIud2lkdGgoKSAmJiAhb3RoZXIuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXdpZHRoKCkgJiYgIWhlaWdodCgpKSB7CisgICAgICAgICp0aGlzID0gb3RoZXI7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBcHBVbml0IHggPSBzdGQ6Om1pbih4KCksIG90aGVy
LngoKSk7CisgICAgQXBwVW5pdCB5ID0gc3RkOjptaW4oeSgpLCBvdGhlci55KCkpOworICAgIEFw
cFVuaXQgbWF4WCA9IHN0ZDo6bWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKTsKKyAgICBBcHBVbml0
IG1heFkgPSBzdGQ6Om1heChtYXhZKCksIG90aGVyLm1heFkoKSk7CisKKyAgICBtX2xvY2F0aW9u
LnNldFgoeCk7CisgICAgbV9sb2NhdGlvbi5zZXRZKHkpOworICAgIG1fc2l6ZS5zZXRXaWR0aCht
YXhYIC0geCk7CisgICAgbV9zaXplLnNldEhlaWdodChtYXhZIC0geSk7Cit9CisKK3ZvaWQgRml4
ZWRSZWN0OjpzY2FsZShmbG9hdCBzKQoreworICAgIG1fbG9jYXRpb24uc2V0WCh4KCkgKiBzKTsK
KyAgICBtX2xvY2F0aW9uLnNldFkoeSgpICogcyk7CisgICAgbV9zaXplLnNldFdpZHRoKHdpZHRo
KCkgKiBzKTsKKyAgICBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCgpICogcyk7Cit9CisKK0ZpeGVk
UmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEZpeGVkUmVjdD4mIHJlY3RzKQoreworICAgIEZp
eGVkUmVjdCByZXN1bHQ7CisKKyAgICBzaXplX3QgY291bnQgPSByZWN0cy5zaXplKCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICByZXN1bHQudW5pdGUo
cmVjdHNbaV0pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSW50UmVjdCBlbmNsb3NpbmdJ
bnRSZWN0KGNvbnN0IEZpeGVkUmVjdCYgcmVjdCkKK3sKKyAgICBmbG9hdCB4ID0gZmxvb3JmKHJl
Y3QueCgpLnRvRmxvYXQoKSk7CisgICAgZmxvYXQgeSA9IGZsb29yZihyZWN0LnkoKS50b0Zsb2F0
KCkpOworICAgIGZsb2F0IHdpZHRoID0gY2VpbGYocmVjdC5tYXhYKCkudG9GbG9hdCgpKSAtIHg7
CisgICAgZmxvYXQgaGVpZ2h0ID0gY2VpbGYocmVjdC5tYXhZKCkudG9GbG9hdCgpKSAtIHk7CisK
KyAgICByZXR1cm4gSW50UmVjdChjbGFtcFRvSW50ZWdlcih4KSwgY2xhbXBUb0ludGVnZXIoeSks
IAorICAgICAgICAgICAgICAgICAgIGNsYW1wVG9JbnRlZ2VyKHdpZHRoKSwgY2xhbXBUb0ludGVn
ZXIoaGVpZ2h0KSk7Cit9CisKK0ZpeGVkUmVjdCBlbmNsb3NpbmdGaXhlZFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBGaXhlZFJlY3QocmVjdC54KCksIHJlY3QueSgp
LAorICAgICAgICAgICAgICAgICAgICAgcmVjdC5tYXhYKCkgLSByZWN0LngoKSArIEFwcFVuaXQ6
OmVwc2lsb24oKSwKKyAgICAgICAgICAgICAgICAgICAgIHJlY3QubWF4WSgpIC0gcmVjdC55KCkg
KyBBcHBVbml0OjplcHNpbG9uKCkpOworfQorCitJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3Qo
Y29uc3QgRml4ZWRSZWN0JiByZWN0KQoreworICAgIEludFBvaW50IHJvdW5kZWRMb2NhdGlvbiA9
IHJvdW5kZWRJbnRQb2ludChyZWN0LmxvY2F0aW9uKCkpOworICAgIHJldHVybiBJbnRSZWN0KHJv
dW5kZWRMb2NhdGlvbiwgSW50U2l6ZSgocmVjdC54KCkgKyByZWN0LndpZHRoKCkpLnJvdW5kKCkg
LSByb3VuZGVkTG9jYXRpb24ueCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAocmVjdC55KCkgKyByZWN0LmhlaWdodCgpKS5yb3VuZCgpIC0gcm91bmRlZExv
Y2F0aW9uLnkoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3QuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZpeGVkUmVjdC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZpeGVkUmVjdF9oCisjZGVmaW5lIEZpeGVkUmVj
dF9oCisKKyNpbmNsdWRlICJGaXhlZFBvaW50LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIFVTRShDRykgfHwgVVNFKFNLSUFfT05fTUFDX0NI
Uk9NSVVNKQordHlwZWRlZiBzdHJ1Y3QgQ0dSZWN0IENHUmVjdDsKKyNlbmRpZgorCisjaWYgUExB
VEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikpIHx8IChQTEFU
Rk9STShRVCkgJiYgVVNFKFFUS0lUKSkKKyNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNf
Q0dHRU9NRVRSWV9UWVBFUwordHlwZWRlZiBzdHJ1Y3QgQ0dSZWN0IE5TUmVjdDsKKyNlbHNlCit0
eXBlZGVmIHN0cnVjdCBfTlNSZWN0IE5TUmVjdDsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBQTEFU
Rk9STShRVCkKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUVJlY3RGOworUVRfRU5EX05BTUVT
UEFDRQorI2VsaWYgUExBVEZPUk0oR1RLKQorI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCit0eXBl
ZGVmIHN0cnVjdCBfR2RrUmVjdGFuZ2xlIEdka1JlY3RhbmdsZTsKKyNlbmRpZgorI2VsaWYgUExB
VEZPUk0oSEFJS1UpCitjbGFzcyBCUmVjdDsKKyNlbGlmIFBMQVRGT1JNKEVGTCkKK3R5cGVkZWYg
c3RydWN0IF9FaW5hX1JlY3RhbmdsZSBFaW5hX1JlY3RhbmdsZTsKKyNlbmRpZgorCisjaWYgVVNF
KENBSVJPKQordHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3JlY3RhbmdsZV9pbnQgY2Fpcm9fcmVjdGFu
Z2xlX2ludF90OworI2VuZGlmCisKKyNpZiBQTEFURk9STShXWCkKK2NsYXNzIHd4UmVjdDsKKyNl
bmRpZgorCisjaWYgVVNFKFNLSUEpCitzdHJ1Y3QgU2tSZWN0Oworc3RydWN0IFNrSVJlY3Q7Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFJlY3Q7CisKK2NsYXNz
IEZpeGVkUmVjdCB7CitwdWJsaWM6CisgICAgRml4ZWRSZWN0KCkgeyB9CisgICAgRml4ZWRSZWN0
KGNvbnN0IEZpeGVkUG9pbnQmIGxvY2F0aW9uLCBjb25zdCBGaXhlZFNpemUmIHNpemUpCisgICAg
ICAgIDogbV9sb2NhdGlvbihsb2NhdGlvbiksIG1fc2l6ZShzaXplKSB7IH0KKyAgICBGaXhlZFJl
Y3QoQXBwVW5pdCB4LCBBcHBVbml0IHksIEFwcFVuaXQgd2lkdGgsIEFwcFVuaXQgaGVpZ2h0KQor
ICAgICAgICA6IG1fbG9jYXRpb24oRml4ZWRQb2ludCh4LCB5KSksIG1fc2l6ZShGaXhlZFNpemUo
d2lkdGgsIGhlaWdodCkpIHsgfQorICAgIEZpeGVkUmVjdChjb25zdCBGbG9hdFBvaW50JiBsb2Nh
dGlvbiwgY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6IG1fbG9jYXRpb24obG9jYXRp
b24pLCBtX3NpemUoc2l6ZSkgeyB9CisgICAgRml4ZWRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3Qp
IDogbV9sb2NhdGlvbihyZWN0LmxvY2F0aW9uKCkpLCBtX3NpemUocmVjdC5zaXplKCkpIHsgfQor
CisgICAgZXhwbGljaXQgRml4ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOyAvLyBkb24ndCBkbyB0
aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQorICAgICAgICAKKyAgICBGaXhlZFBvaW50
IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQorICAgIEZpeGVkU2l6ZSBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICB2b2lkIHNldExvY2F0aW9uKGNv
bnN0IEZpeGVkUG9pbnQmIGxvY2F0aW9uKSB7IG1fbG9jYXRpb24gPSBsb2NhdGlvbjsgfQorICAg
IHZvaWQgc2V0U2l6ZShjb25zdCBGaXhlZFNpemUmIHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQor
CisgICAgQXBwVW5pdCB4KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi54KCk7IH0KKyAgICBB
cHBVbml0IHkoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uLnkoKTsgfQorICAgIEFwcFVuaXQg
bWF4WCgpIGNvbnN0IHsgcmV0dXJuIHgoKSArIHdpZHRoKCk7IH0KKyAgICBBcHBVbml0IG1heFko
KSBjb25zdCB7IHJldHVybiB5KCkgKyBoZWlnaHQoKTsgfQorICAgIEFwcFVuaXQgd2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQorICAgIEFwcFVuaXQgaGVpZ2h0KCkgY29u
c3QgeyByZXR1cm4gbV9zaXplLmhlaWdodCgpOyB9CisKKyAgICB2b2lkIHNldFgoQXBwVW5pdCB4
KSB7IG1fbG9jYXRpb24uc2V0WCh4KTsgfQorICAgIHZvaWQgc2V0WShBcHBVbml0IHkpIHsgbV9s
b2NhdGlvbi5zZXRZKHkpOyB9CisgICAgdm9pZCBzZXRXaWR0aChBcHBVbml0IHdpZHRoKSB7IG1f
c2l6ZS5zZXRXaWR0aCh3aWR0aCk7IH0KKyAgICB2b2lkIHNldEhlaWdodChBcHBVbml0IGhlaWdo
dCkgeyBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCk7IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KKworICAgIC8vIE5PVEU6IFRoZSByZXN1
bHQgaXMgcm91bmRlZCB0byBpbnRlZ2VyIHZhbHVlcywgYW5kIHRodXMgbWF5IGJlIG5vdCB0aGUg
ZXhhY3QKKyAgICAvLyBjZW50ZXIgcG9pbnQuCisgICAgRml4ZWRQb2ludCBjZW50ZXIoKSBjb25z
dCB7IHJldHVybiBGaXhlZFBvaW50KHgoKSArIHdpZHRoKCkgLyAyLCB5KCkgKyBoZWlnaHQoKSAv
IDIpOyB9CisKKyAgICB2b2lkIG1vdmUoY29uc3QgRml4ZWRTaXplJiBzaXplKSB7IG1fbG9jYXRp
b24gKz0gc2l6ZTsgfSAKKyAgICB2b2lkIG1vdmVCeShjb25zdCBGaXhlZFBvaW50JiBvZmZzZXQp
IHsgbV9sb2NhdGlvbi5tb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkpOyB9CisgICAgdm9pZCBt
b3ZlKEFwcFVuaXQgZHgsIEFwcFVuaXQgZHkpIHsgbV9sb2NhdGlvbi5tb3ZlKGR4LCBkeSk7IH0g
CisKKyAgICB2b2lkIGV4cGFuZChjb25zdCBGaXhlZFNpemUmIHNpemUpIHsgbV9zaXplICs9IHNp
emU7IH0KKyAgICB2b2lkIGV4cGFuZChBcHBVbml0IGR3LCBBcHBVbml0IGRoKSB7IG1fc2l6ZS5l
eHBhbmQoZHcsIGRoKTsgfQorICAgIHZvaWQgY29udHJhY3QoY29uc3QgRml4ZWRTaXplJiBzaXpl
KSB7IG1fc2l6ZSAtPSBzaXplOyB9CisgICAgdm9pZCBjb250cmFjdChBcHBVbml0IGR3LCBBcHBV
bml0IGRoKSB7IG1fc2l6ZS5leHBhbmQoLWR3LCAtZGgpOyB9CisKKyAgICB2b2lkIHNoaWZ0WEVk
Z2VUbyhBcHBVbml0IGVkZ2UpCisgICAgeworICAgICAgICBBcHBVbml0IGRlbHRhID0gZWRnZSAt
IHgoKTsKKyAgICAgICAgc2V0WChlZGdlKTsKKyAgICAgICAgc2V0V2lkdGgoc3RkOjptYXg8QXBw
VW5pdD4oMCwgd2lkdGgoKSAtIGRlbHRhKSk7CisgICAgfQorICAgIHZvaWQgc2hpZnRNYXhYRWRn
ZVRvKEFwcFVuaXQgZWRnZSkKKyAgICB7CisgICAgICAgIEFwcFVuaXQgZGVsdGEgPSBlZGdlIC0g
bWF4WCgpOworICAgICAgICBzZXRXaWR0aChzdGQ6Om1heDxBcHBVbml0PigwLCB3aWR0aCgpICsg
ZGVsdGEpKTsKKyAgICB9CisgICAgdm9pZCBzaGlmdFlFZGdlVG8oQXBwVW5pdCBlZGdlKQorICAg
IHsKKyAgICAgICAgQXBwVW5pdCBkZWx0YSA9IGVkZ2UgLSB5KCk7CisgICAgICAgIHNldFkoZWRn
ZSk7CisgICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxBcHBVbml0PigwLCBoZWlnaHQoKSAtIGRl
bHRhKSk7CisgICAgfQorICAgIHZvaWQgc2hpZnRNYXhZRWRnZVRvKEFwcFVuaXQgZWRnZSkKKyAg
ICB7CisgICAgICAgIEFwcFVuaXQgZGVsdGEgPSBlZGdlIC0gbWF4WSgpOworICAgICAgICBzZXRI
ZWlnaHQoc3RkOjptYXg8QXBwVW5pdD4oMCwgaGVpZ2h0KCkgKyBkZWx0YSkpOworICAgIH0KKwor
ICAgIEZpeGVkUG9pbnQgbWluWE1pbllDb3JuZXIoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9u
OyB9IC8vIHR5cGljYWxseSB0b3BMZWZ0CisgICAgRml4ZWRQb2ludCBtYXhYTWluWUNvcm5lcigp
IGNvbnN0IHsgcmV0dXJuIEZpeGVkUG9pbnQobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgo
KSwgbV9sb2NhdGlvbi55KCkpOyB9IC8vIHR5cGljYWxseSB0b3BSaWdodAorICAgIEZpeGVkUG9p
bnQgbWluWE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBGaXhlZFBvaW50KG1fbG9jYXRpb24u
eCgpLCBtX2xvY2F0aW9uLnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJv
dHRvbUxlZnQKKyAgICBGaXhlZFBvaW50IG1heFhNYXhZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4g
Rml4ZWRQb2ludChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnko
KSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJvdHRvbVJpZ2h0CisgICAgCisg
ICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IEZpeGVkUmVjdCYpIGNvbnN0OworICAgIGJvb2wgY29u
dGFpbnMoY29uc3QgRml4ZWRSZWN0JikgY29uc3Q7CisKKyAgICAvLyBUaGlzIGNoZWNrcyB0byBz
ZWUgaWYgdGhlIHJlY3QgY29udGFpbnMgeCx5IGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZS4KKyAg
ICAvLyBFcXVpdmFsZW50IHRvIGNoZWNraW5nIGlmIHRoZSByZWN0IGNvbnRhaW5zIGEgMXgxIHJl
Y3QgYmVsb3cgYW5kIHRvIHRoZSByaWdodCBvZiAocHgscHkpLgorICAgIGJvb2wgY29udGFpbnMo
QXBwVW5pdCBweCwgQXBwVW5pdCBweSkgY29uc3QKKyAgICAgICAgeyByZXR1cm4gcHggPj0geCgp
ICYmIHB4IDwgbWF4WCgpICYmIHB5ID49IHkoKSAmJiBweSA8IG1heFkoKTsgfQorICAgIGJvb2wg
Y29udGFpbnMoY29uc3QgRml4ZWRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5z
KHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQorCisgICAgdm9pZCBpbnRlcnNlY3QoY29uc3QgRml4
ZWRSZWN0Jik7CisgICAgdm9pZCB1bml0ZShjb25zdCBGaXhlZFJlY3QmKTsKKyAgICB2b2lkIHVu
aXRlSWZOb25aZXJvKGNvbnN0IEZpeGVkUmVjdCYpOworCisgICAgdm9pZCBpbmZsYXRlWChBcHBV
bml0IGR4KQorICAgIHsKKyAgICAgICAgbV9sb2NhdGlvbi5zZXRYKG1fbG9jYXRpb24ueCgpIC0g
ZHgpOworICAgICAgICBtX3NpemUuc2V0V2lkdGgobV9zaXplLndpZHRoKCkgKyBkeCArIGR4KTsK
KyAgICB9CisgICAgdm9pZCBpbmZsYXRlWShBcHBVbml0IGR5KQorICAgIHsKKyAgICAgICAgbV9s
b2NhdGlvbi5zZXRZKG1fbG9jYXRpb24ueSgpIC0gZHkpOworICAgICAgICBtX3NpemUuc2V0SGVp
Z2h0KG1fc2l6ZS5oZWlnaHQoKSArIGR5ICsgZHkpOworICAgIH0KKyAgICB2b2lkIGluZmxhdGUo
QXBwVW5pdCBkKSB7IGluZmxhdGVYKGQpOyBpbmZsYXRlWShkKTsgfQorICAgIHZvaWQgc2NhbGUo
ZmxvYXQgcyk7CisKKyAgICBGaXhlZFJlY3QgdHJhbnNwb3NlZFJlY3QoKSBjb25zdCB7IHJldHVy
biBGaXhlZFJlY3QobV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSwgbV9zaXplLnRyYW5zcG9z
ZWRTaXplKCkpOyB9CisKKyNpZiBQTEFURk9STShXWCkKKyAgICBGaXhlZFJlY3QoY29uc3Qgd3hS
ZWN0Jik7CisgICAgb3BlcmF0b3Igd3hSZWN0KCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKFFUKQorICAgIEZpeGVkUmVjdChjb25zdCBRUmVjdEYmKTsKKyAgICBvcGVyYXRvciBRUmVj
dEYoKSBjb25zdDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05f
MgorICAgIEZpeGVkUmVjdChjb25zdCBHZGtSZWN0YW5nbGUmKTsKKyAgICBvcGVyYXRvciBHZGtS
ZWN0YW5nbGUoKSBjb25zdDsKKyNlbmRpZgorI2VsaWYgUExBVEZPUk0oSEFJS1UpCisgICAgZXhw
bGljaXQgRml4ZWRSZWN0KGNvbnN0IEJSZWN0Jik7CisgICAgb3BlcmF0b3IgQlJlY3QoKSBjb25z
dDsKKyNlbGlmIFBMQVRGT1JNKEVGTCkKKyAgICBleHBsaWNpdCBGaXhlZFJlY3QoY29uc3QgRWlu
YV9SZWN0YW5nbGUmKTsKKyAgICBvcGVyYXRvciBFaW5hX1JlY3RhbmdsZSgpIGNvbnN0OworI2Vu
ZGlmCisKKyNpZiBVU0UoQ0FJUk8pCisgICAgRml4ZWRSZWN0KGNvbnN0IGNhaXJvX3JlY3Rhbmds
ZV9pbnRfdCYpOworICAgIG9wZXJhdG9yIGNhaXJvX3JlY3RhbmdsZV9pbnRfdCgpIGNvbnN0Owor
I2VuZGlmCisKKyNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkKKyAgICBG
aXhlZFJlY3QoY29uc3QgQ0dSZWN0Jik7CisgICAgb3BlcmF0b3IgQ0dSZWN0KCkgY29uc3Q7Cisj
ZW5kaWYKKworI2lmIFVTRShTS0lBKQorICAgIEZpeGVkUmVjdChjb25zdCBTa1JlY3QmKTsKKyAg
ICBvcGVyYXRvciBTa1JlY3QoKSBjb25zdDsKKyAgICBvcGVyYXRvciBTa0lSZWN0KCkgY29uc3Q7
CisjZW5kaWYKKworI2lmIChQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQ
RVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTKSkgXAorICAgICAgICB8fCAoUExBVEZPUk0oQ0hS
T01JVU0pICYmIE9TKERBUldJTikpICB8fCAoUExBVEZPUk0oUVQpICYmIFVTRShRVEtJVCkpCisg
ICAgRml4ZWRSZWN0KGNvbnN0IE5TUmVjdCYpOworICAgIG9wZXJhdG9yIE5TUmVjdCgpIGNvbnN0
OworI2VuZGlmCisKKyAgICBzdGF0aWMgRml4ZWRSZWN0IGluZmluaXRlUmVjdCgpIHtyZXR1cm4g
Rml4ZWRSZWN0KEFwcFVuaXQ6Om1pbigpIC8gMiwgQXBwVW5pdDo6bWluKCkgLyAyLCBBcHBVbml0
OjptYXgoKSwgQXBwVW5pdDo6bWF4KCkpOyB9CisKK3ByaXZhdGU6CisgICAgRml4ZWRQb2ludCBt
X2xvY2F0aW9uOworICAgIEZpeGVkU2l6ZSBtX3NpemU7Cit9OworCitpbmxpbmUgRml4ZWRSZWN0
IGludGVyc2VjdGlvbihjb25zdCBGaXhlZFJlY3QmIGEsIGNvbnN0IEZpeGVkUmVjdCYgYikKK3sK
KyAgICBGaXhlZFJlY3QgYyA9IGE7CisgICAgYy5pbnRlcnNlY3QoYik7CisgICAgcmV0dXJuIGM7
Cit9CisKK2lubGluZSBGaXhlZFJlY3QgdW5pb25SZWN0KGNvbnN0IEZpeGVkUmVjdCYgYSwgY29u
c3QgRml4ZWRSZWN0JiBiKQoreworICAgIEZpeGVkUmVjdCBjID0gYTsKKyAgICBjLnVuaXRlKGIp
OworICAgIHJldHVybiBjOworfQorCitGaXhlZFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxG
aXhlZFJlY3Q+Jik7CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRml4ZWRSZWN0JiBh
LCBjb25zdCBGaXhlZFJlY3QmIGIpCit7CisgICAgcmV0dXJuIGEubG9jYXRpb24oKSA9PSBiLmxv
Y2F0aW9uKCkgJiYgYS5zaXplKCkgPT0gYi5zaXplKCk7Cit9CisKK2lubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgRml4ZWRSZWN0JiBhLCBjb25zdCBGaXhlZFJlY3QmIGIpCit7CisgICAgcmV0
dXJuIGEubG9jYXRpb24oKSAhPSBiLmxvY2F0aW9uKCkgfHwgYS5zaXplKCkgIT0gYi5zaXplKCk7
Cit9CisKK0ludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGaXhlZFJlY3QmKTsKK0ZpeGVk
UmVjdCBlbmNsb3NpbmdGaXhlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CitJbnRSZWN0IHBpeGVs
U25hcHBlZEludFJlY3QoY29uc3QgRml4ZWRSZWN0Jik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEZpeGVkUmVjdF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GaXhlZFNpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZpeGVkU2l6ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFNpemUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaXhlZFNpemUuaCIKKwor
I2luY2x1ZGUgIkZpeGVkUG9pbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRTaXpl
IHBpeGVsU25hcHBlZEludFNpemUoY29uc3QgRml4ZWRTaXplJiBzLCBjb25zdCBGaXhlZFBvaW50
JiBwKQoreworICAgIHJldHVybiBJbnRTaXplKHNuYXBTaXplVG9QaXhlbChzLndpZHRoKCksIHAu
eCgpKSwgc25hcFNpemVUb1BpeGVsKHMuaGVpZ2h0KCksIHAueSgpKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zp
eGVkU2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZpeGVkU2l6ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRml4ZWRTaXplLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICog
Q29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
Rml4ZWRTaXplX2gKKyNkZWZpbmUgRml4ZWRTaXplX2gKKworI2lmIFVTRShDRykgfHwgVVNFKFNL
SUFfT05fTUFDX0NIUk9NSVVNKQordHlwZWRlZiBzdHJ1Y3QgQ0dTaXplIENHU2l6ZTsKKyNlbmRp
ZgorCisjaWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oUVQpICYmIFVTRShRVEtJVCkpCisj
aWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKK3R5cGVkZWYg
c3RydWN0IENHU2l6ZSBOU1NpemU7CisjZWxzZQordHlwZWRlZiBzdHJ1Y3QgX05TU2l6ZSBOU1Np
emU7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0lOKQordHlwZWRlZiBzdHJ1Y3Qg
dGFnU0laRSBTSVpFOworI2VsaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8cWdsb2JhbC5oPgor
UVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRU2l6ZUY7CitRVF9FTkRfTkFNRVNQQUNFCisjZWxp
ZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJTaXplOworI2VuZGlmCisKKyNpZiBQTEFURk9STShX
WCkKK2NsYXNzIHd4U2l6ZTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQlJFV01QKQordHlwZWRl
ZiBzdHJ1Y3QgQUVFU2l6ZSBBRUVTaXplOworI2VuZGlmCisKKyNpbmNsdWRlICJBcHBVbml0Lmgi
CisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpeGVkUG9pbnQ7CisKK2NsYXNzIEZpeGVkU2l6ZSB7Citw
dWJsaWM6CisgICAgRml4ZWRTaXplKCkgOiBtX3dpZHRoKDApLCBtX2hlaWdodCgwKSB7IH0KKyAg
ICBGaXhlZFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgOiBtX3dpZHRoKHNpemUud2lkdGgoKSks
IG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpIHsgfQorICAgIEZpeGVkU2l6ZShBcHBVbml0IHdpZHRo
LCBBcHBVbml0IGhlaWdodCkgOiBtX3dpZHRoKHdpZHRoKSwgbV9oZWlnaHQoaGVpZ2h0KSB7IH0K
KworICAgIGV4cGxpY2l0IEZpeGVkU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpIDogbV93aWR0
aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKSB7IH0KKyAgICAKKyAgICBB
cHBVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorICAgIEFwcFVuaXQgaGVp
Z2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKworICAgIHZvaWQgc2V0V2lkdGgoQXBw
VW5pdCB3aWR0aCkgeyBtX3dpZHRoID0gd2lkdGg7IH0KKyAgICB2b2lkIHNldEhlaWdodChBcHBV
bml0IGhlaWdodCkgeyBtX2hlaWdodCA9IGhlaWdodDsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gbV93aWR0aCA8PSAwIHx8IG1faGVpZ2h0IDw9IDA7IH0KKyAgICBib29s
IGlzWmVybygpIGNvbnN0IHsgcmV0dXJuICFtX3dpZHRoICYmICFtX2hlaWdodDsgfQorCisgICAg
ZmxvYXQgYXNwZWN0UmF0aW8oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV93
aWR0aCkgLyBzdGF0aWNfY2FzdDxmbG9hdD4obV9oZWlnaHQpOyB9CisgICAgCisgICAgdm9pZCBl
eHBhbmQoQXBwVW5pdCB3aWR0aCwgQXBwVW5pdCBoZWlnaHQpCisgICAgeworICAgICAgICBtX3dp
ZHRoICs9IHdpZHRoOworICAgICAgICBtX2hlaWdodCArPSBoZWlnaHQ7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc2NhbGUoZmxvYXQgc2NhbGUpCisgICAgeworICAgICAgICBtX3dpZHRoID0gc3Rh
dGljX2Nhc3Q8aW50PihzdGF0aWNfY2FzdDxmbG9hdD4obV93aWR0aCkgKiBzY2FsZSk7CisgICAg
ICAgIG1faGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0aWNfY2FzdDxmbG9hdD4obV9oZWln
aHQpICogc2NhbGUpOworICAgIH0KKyAgICAKKyAgICBGaXhlZFNpemUgZXhwYW5kZWRUbyhjb25z
dCBGaXhlZFNpemUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEZpeGVkU2l6
ZShtX3dpZHRoID4gb3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAorICAg
ICAgICAgICAgbV9oZWlnaHQgPiBvdGhlci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3RoZXIubV9o
ZWlnaHQpOworICAgIH0KKworICAgIEZpeGVkU2l6ZSBzaHJ1bmtUbyhjb25zdCBGaXhlZFNpemUm
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEZpeGVkU2l6ZShtX3dpZHRoIDwg
b3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAorICAgICAgICAgICAgbV9o
ZWlnaHQgPCBvdGhlci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3RoZXIubV9oZWlnaHQpOworICAg
IH0KKworICAgIHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCisgICAgeworICAgICAgICAqdGhp
cyA9IGV4cGFuZGVkVG8oRml4ZWRTaXplKCkpOworICAgIH0KKworICAgIEZpeGVkU2l6ZSB0cmFu
c3Bvc2VkU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRml4ZWRTaXplKG1faGVp
Z2h0LCBtX3dpZHRoKTsKKyAgICB9CisKKyNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19D
SFJPTUlVTSkKKyAgICBleHBsaWNpdCBGaXhlZFNpemUoY29uc3QgQ0dTaXplJik7IC8vIGRvbid0
IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgb3BlcmF0b3IgQ0dTaXpl
KCkgY29uc3Q7CisjZW5kaWYKKworI2lmIChQTEFURk9STShNQUMpIHx8IChQTEFURk9STShRVCkg
JiYgVVNFKFFUS0lUKSkgfHwgUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikpICYmICFk
ZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTKQorICAgIGV4
cGxpY2l0IEZpeGVkU2l6ZShjb25zdCBOU1NpemUgJik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGlj
aXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgb3BlcmF0b3IgTlNTaXplKCkgY29uc3Q7CisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBGaXhlZFNpemUoY29uc3QgU0laRSYpOworICAg
IG9wZXJhdG9yIFNJWkUoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQpCisgICAg
Rml4ZWRTaXplKGNvbnN0IFFTaXplRiYpOworICAgIG9wZXJhdG9yIFFTaXplRigpIGNvbnN0Owor
I2VuZGlmCisKKyNpZiBQTEFURk9STShIQUlLVSkKKyAgICBleHBsaWNpdCBGaXhlZFNpemUoY29u
c3QgQlNpemUmKTsKKyAgICBvcGVyYXRvciBCU2l6ZSgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBQ
TEFURk9STShXWCkKKyAgICBGaXhlZFNpemUoY29uc3Qgd3hTaXplJik7CisgICAgb3BlcmF0b3Ig
d3hTaXplKCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEJSRVdNUCkKKyAgICBGaXhl
ZFNpemUoY29uc3QgQUVFU2l6ZSYpOworICAgIG9wZXJhdG9yIEFFRVNpemUoKSBjb25zdDsKKyNl
bmRpZgorCitwcml2YXRlOgorICAgIEFwcFVuaXQgbV93aWR0aCwgbV9oZWlnaHQ7Cit9OworCitp
bmxpbmUgRml4ZWRTaXplJiBvcGVyYXRvcis9KEZpeGVkU2l6ZSYgYSwgY29uc3QgRml4ZWRTaXpl
JiBiKQoreworICAgIGEuc2V0V2lkdGgoYS53aWR0aCgpICsgYi53aWR0aCgpKTsKKyAgICBhLnNl
dEhlaWdodChhLmhlaWdodCgpICsgYi5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGE7Cit9CisKK2lu
bGluZSBGaXhlZFNpemUmIG9wZXJhdG9yLT0oRml4ZWRTaXplJiBhLCBjb25zdCBGaXhlZFNpemUm
IGIpCit7CisgICAgYS5zZXRXaWR0aChhLndpZHRoKCkgLSBiLndpZHRoKCkpOworICAgIGEuc2V0
SGVpZ2h0KGEuaGVpZ2h0KCkgLSBiLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5s
aW5lIEZpeGVkU2l6ZSBvcGVyYXRvcisoY29uc3QgRml4ZWRTaXplJiBhLCBjb25zdCBGaXhlZFNp
emUmIGIpCit7CisgICAgcmV0dXJuIEZpeGVkU2l6ZShhLndpZHRoKCkgKyBiLndpZHRoKCksIGEu
aGVpZ2h0KCkgKyBiLmhlaWdodCgpKTsKK30KKworaW5saW5lIEZpeGVkU2l6ZSBvcGVyYXRvci0o
Y29uc3QgRml4ZWRTaXplJiBhLCBjb25zdCBGaXhlZFNpemUmIGIpCit7CisgICAgcmV0dXJuIEZp
eGVkU2l6ZShhLndpZHRoKCkgLSBiLndpZHRoKCksIGEuaGVpZ2h0KCkgLSBiLmhlaWdodCgpKTsK
K30KKworaW5saW5lIEZpeGVkU2l6ZSBvcGVyYXRvci0oY29uc3QgRml4ZWRTaXplJiBzaXplKQor
eworICAgIHJldHVybiBGaXhlZFNpemUoLXNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpOwor
fQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZpeGVkU2l6ZSYgYSwgY29uc3QgRml4
ZWRTaXplJiBiKQoreworICAgIHJldHVybiBhLndpZHRoKCkgPT0gYi53aWR0aCgpICYmIGEuaGVp
Z2h0KCkgPT0gYi5oZWlnaHQoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBG
aXhlZFNpemUmIGEsIGNvbnN0IEZpeGVkU2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53aWR0aCgp
ICE9IGIud2lkdGgoKSB8fCBhLmhlaWdodCgpICE9IGIuaGVpZ2h0KCk7Cit9CisKK2lubGluZSBJ
bnRTaXplIGZsb29yZWRJbnRTaXplKGNvbnN0IEZpeGVkU2l6ZSYgcykKK3sKKyAgICByZXR1cm4g
SW50U2l6ZShzLndpZHRoKCkudG9JbnQoKSwgcy5oZWlnaHQoKS50b0ludCgpKTsKK30KKworaW5s
aW5lIEludFNpemUgcm91bmRlZEludFNpemUoY29uc3QgRml4ZWRTaXplJiBzKQoreworICAgIHJl
dHVybiBJbnRTaXplKHMud2lkdGgoKS5yb3VuZCgpLCBzLmhlaWdodCgpLnJvdW5kKCkpOworfQor
CitJbnRTaXplIHBpeGVsU25hcHBlZEludFNpemUoY29uc3QgRml4ZWRTaXplJiwgY29uc3QgRml4
ZWRQb2ludCYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGaXhlZFNp
emVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludC5jcHAJKHJldmlzaW9uIDEwNTE5NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxMCBAQAog
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgot
I2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiRml4ZWRQb2ludC5o
IgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCisj
aW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5j
bHVkZSA8bWF0aC5oPgogCkBAIC00MCw2ICs0MSwxMCBAQCBGbG9hdFBvaW50OjpGbG9hdFBvaW50
KGNvbnN0IEludFBvaW50JiBwCiB7CiB9CiAKK0Zsb2F0UG9pbnQ6OkZsb2F0UG9pbnQoY29uc3Qg
Rml4ZWRQb2ludCYgcCkgOiBtX3gocC54KCkpLCBtX3kocC55KCkpCit7Cit9CisKIHZvaWQgRmxv
YXRQb2ludDo6bm9ybWFsaXplKCkKIHsKICAgICBmbG9hdCB0ZW1wTGVuZ3RoID0gbGVuZ3RoKCk7
CkBAIC01NSw2ICs2MCwxOCBAQCBmbG9hdCBGbG9hdFBvaW50OjpsZW5ndGgoKSBjb25zdAogICAg
IHJldHVybiBzcXJ0ZihsZW5ndGhTcXVhcmVkKCkpOwogfQogCit2b2lkIEZsb2F0UG9pbnQ6Om1v
dmUoY29uc3QgRml4ZWRTaXplJiBzaXplKQoreworICAgIG1feCArPSBzaXplLndpZHRoKCk7Cisg
ICAgbV95ICs9IHNpemUuaGVpZ2h0KCk7Cit9CisKK3ZvaWQgRmxvYXRQb2ludDo6bW92ZUJ5KGNv
bnN0IEZpeGVkUG9pbnQmIHBvaW50KQoreworICAgIG1feCArPSBwb2ludC54KCk7CisgICAgbV95
ICs9IHBvaW50LnkoKTsKK30KKwogRmxvYXRQb2ludCBGbG9hdFBvaW50OjptYXRyaXhUcmFuc2Zv
cm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pIGNvbnN0CiB7CiAgICAgZG91Ymxl
IG5ld1gsIG5ld1k7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRQb2ludC5oCShyZXZpc2lvbiAxMDUxOTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEzICs2MCwxNSBA
QCBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIGNs
YXNzIEludFBvaW50OwogY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEZpeGVkUG9pbnQ7CitjbGFzcyBG
aXhlZFNpemU7CiAKIGNsYXNzIEZsb2F0UG9pbnQgewogcHVibGljOgogICAgIEZsb2F0UG9pbnQo
KSA6IG1feCgwKSwgbV95KDApIHsgfQogICAgIEZsb2F0UG9pbnQoZmxvYXQgeCwgZmxvYXQgeSkg
OiBtX3goeCksIG1feSh5KSB7IH0KICAgICBGbG9hdFBvaW50KGNvbnN0IEludFBvaW50Jik7Ci0K
KyAgICBGbG9hdFBvaW50KGNvbnN0IEZpeGVkUG9pbnQmKTsKIAogICAgIHN0YXRpYyBGbG9hdFBv
aW50IHplcm8oKSB7IHJldHVybiBGbG9hdFBvaW50KCk7IH0KIApAQCAtOTIsNiArOTQsNyBAQCBw
dWJsaWM6CiAgICAgICAgIG1feCArPSBhLndpZHRoKCk7CiAgICAgICAgIG1feSArPSBhLmhlaWdo
dCgpOwogICAgIH0KKyAgICB2b2lkIG1vdmUoY29uc3QgRml4ZWRTaXplJik7CiAgICAgdm9pZCBt
b3ZlKGNvbnN0IEZsb2F0U2l6ZSYgYSkKICAgICB7CiAgICAgICAgIG1feCArPSBhLndpZHRoKCk7
CkBAIC0xMDIsNiArMTA1LDcgQEAgcHVibGljOgogICAgICAgICBtX3ggKz0gYS54KCk7CiAgICAg
ICAgIG1feSArPSBhLnkoKTsKICAgICB9CisgICAgdm9pZCBtb3ZlQnkoY29uc3QgRml4ZWRQb2lu
dCYgYSk7CiAgICAgdm9pZCBtb3ZlQnkoY29uc3QgRmxvYXRQb2ludCYgYSkKICAgICB7CiAgICAg
ICAgIG1feCArPSBhLngoKTsKQEAgLTEzMSw2ICsxMzUsMTcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gRmxvYXRQb2ludChzdGQ6Om1heChtX3gsIG90aGVyLm1feCksIHN0ZDo6bWF4KG1feSwg
b3RoZXIubV95KSk7CiAgICAgfQogCisgICAgRmxvYXRQb2ludCBzaHJ1bmtUbyhjb25zdCBGbG9h
dFBvaW50JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGbG9hdFBvaW50KG1f
eCA8IG90aGVyLm1feCA/IG1feCA6IG90aGVyLm1feCwKKyAgICAgICAgICAgIG1feSA8IG90aGVy
Lm1feSA/IG1feSA6IG90aGVyLm1feSk7CisgICAgfQorCisgICAgdm9pZCBjbGFtcE5lZ2F0aXZl
VG9aZXJvKCkKKyAgICB7CisgICAgICAgICp0aGlzID0gZXhwYW5kZWRUbyh6ZXJvKCkpOworICAg
IH0KKwogICAgIEZsb2F0UG9pbnQgdHJhbnNwb3NlZFBvaW50KCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiBGbG9hdFBvaW50KG1feSwgbV94KTsKQEAgLTIzOSw2ICsyNTQsMTEgQEAgaW5s
aW5lIEludFNpemUgZmxvb3JlZEludFNpemUoY29uc3QgRmxvYQogICAgIHJldHVybiBJbnRTaXpl
KHN0YXRpY19jYXN0PGludD4ocC54KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHAueSgpKSk7CiB9CiAK
K2lubGluZSBGbG9hdFBvaW50IHRvUG9pbnQoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAg
IHJldHVybiBGbG9hdFBvaW50KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Cit9CisKIGZs
b2F0IGZpbmRTbG9wZShjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIs
IGZsb2F0JiBjKTsKIAogLy8gRmluZCBwb2ludCB3aGVyZSBsaW5lcyB0aHJvdWdoIHRoZSB0d28g
cGFpcnMgb2YgcG9pbnRzIGludGVyc2VjdC4gUmV0dXJucyBmYWxzZSBpZiB0aGUgbGluZXMgZG9u
J3QgaW50ZXJzZWN0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRSZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFJlY3QuY3BwCShyZXZpc2lvbiAxMDUxOTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAKKyNpbmNs
dWRlICJGaXhlZFJlY3QuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtNDIsNiArNDMsMTAgQEAgRmxv
YXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgSW50UmVjdCYgcikgOgogewogfQogCitGbG9hdFJlY3Q6
OkZsb2F0UmVjdChjb25zdCBGaXhlZFJlY3QmIHIpIDogbV9sb2NhdGlvbihyLmxvY2F0aW9uKCkp
LCBtX3NpemUoci5zaXplKCkpCit7Cit9CisKIEZsb2F0UmVjdCBGbG9hdFJlY3Q6Om5hcnJvd1By
ZWNpc2lvbihkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCkK
IHsKICAgICByZXR1cm4gRmxvYXRSZWN0KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoeCksIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoeSksIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQod2lkdGgpLCBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KGhlaWdodCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHJldmlzaW9uIDEwNTE5NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
Niw2ICs2Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFZHUmVjdDsKICNlbmRpZgog
CitjbGFzcyBGaXhlZFJlY3Q7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgSW50UG9pbnQ7CiAKQEAg
LTgyLDYgKzgzLDcgQEAgcHVibGljOgogICAgIEZsb2F0UmVjdChmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQogICAgICAgICA6IG1fbG9jYXRpb24oRmxvYXRQb2lu
dCh4LCB5KSksIG1fc2l6ZShGbG9hdFNpemUod2lkdGgsIGhlaWdodCkpIHsgfQogICAgIEZsb2F0
UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgRmxvYXRSZWN0KGNvbnN0IEZpeGVkUmVjdCYpOwog
CiAgICAgc3RhdGljIEZsb2F0UmVjdCBuYXJyb3dQcmVjaXNpb24oZG91YmxlIHgsIGRvdWJsZSB5
LCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAJKHJldmlzaW9uIDEwNTE5NCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJG
bG9hdFNpemUuaCIKIAorI2luY2x1ZGUgIkZpeGVkU2l6ZS5oIgogI2luY2x1ZGUgIkZsb2F0Q29u
dmVyc2lvbi5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlIDxsaW1pdHM+CkBAIC00
MCw2ICs0MSwxMCBAQCBGbG9hdFNpemU6OkZsb2F0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplCiB7
CiB9CiAKK0Zsb2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0IEZpeGVkU2l6ZSYgc2l6ZSkgOiBtX3dp
ZHRoKHNpemUud2lkdGgoKSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpCit7Cit9CisKIGZsb2F0
IEZsb2F0U2l6ZTo6ZGlhZ29uYWxMZW5ndGgoKSBjb25zdAogewogICAgIHJldHVybiBzcXJ0Zihk
aWFnb25hbExlbmd0aFNxdWFyZWQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFNpemUuaAkocmV2aXNpb24gMTA1MTk0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEy
ICs0NiwxNCBAQCB0eXBlZGVmIHN0cnVjdCBfTlNTaXplIE5TU2l6ZTsKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEZpeGVkU2l6ZTsKIAogY2xhc3MgRmxvYXRT
aXplIHsKIHB1YmxpYzoKICAgICBGbG9hdFNpemUoKSA6IG1fd2lkdGgoMCksIG1faGVpZ2h0KDAp
IHsgfQogICAgIEZsb2F0U2l6ZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSA6IG1fd2lkdGgo
d2lkdGgpLCBtX2hlaWdodChoZWlnaHQpIHsgfQogICAgIEZsb2F0U2l6ZShjb25zdCBJbnRTaXpl
Jik7CisgICAgRmxvYXRTaXplKGNvbnN0IEZpeGVkU2l6ZSYpOwogCiAgICAgc3RhdGljIEZsb2F0
U2l6ZSBuYXJyb3dQcmVjaXNpb24oZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KTsKIApAQCAt
NjUsNiArNjcsMTEgQEAgcHVibGljOgogICAgIGJvb2wgaXNaZXJvKCkgY29uc3Q7CiAgICAgYm9v
bCBpc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkgY29uc3Q7CiAKKyAgICBib29sIGlzUm91Z2hseUVx
dWFsVG8oY29uc3QgRmxvYXRTaXplJiBzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFicyh3aWR0
aCgpIC0gcy53aWR0aCgpKSA8IDAuMSAmJiBhYnMoaGVpZ2h0KCkgLSBzLmhlaWdodCgpKSA8IDAu
MTsKKyAgICB9CisKICAgICBmbG9hdCBhc3BlY3RSYXRpbygpIGNvbnN0IHsgcmV0dXJuIG1fd2lk
dGggLyBtX2hlaWdodDsgfQogCiAgICAgdm9pZCBleHBhbmQoZmxvYXQgd2lkdGgsIGZsb2F0IGhl
aWdodCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3Qu
Y3BwCShyZXZpc2lvbiAxMDUxOTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbnRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKIAorI2luY2x1ZGUgIkZpeGVkUmVjdC5o
IgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KIApAQCAtNDAs
NiArNDEsMTIgQEAgSW50UmVjdDo6SW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCiB7CiB9CiAK
K0ludFJlY3Q6OkludFJlY3QoY29uc3QgRml4ZWRSZWN0JiByKQorICAgIDogbV9sb2NhdGlvbihm
bG9vcmVkSW50UG9pbnQoci5sb2NhdGlvbigpKSkKKyAgICAsIG1fc2l6ZShmbG9vcmVkSW50U2l6
ZShyLnNpemUoKSkpCit7Cit9CisKIGJvb2wgSW50UmVjdDo6aW50ZXJzZWN0cyhjb25zdCBJbnRS
ZWN0JiBvdGhlcikgY29uc3QKIHsKICAgICAvLyBDaGVja2luZyBlbXB0aW5lc3MgaGFuZGxlcyBu
ZWdhdGl2ZSB3aWR0aHMgYXMgd2VsbCBhcyB6ZXJvLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkocmV2aXNpb24gMTA1MTk0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2
ICs3MSw3IEBAIHN0cnVjdCBTa0lSZWN0OwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBG
bG9hdFJlY3Q7CitjbGFzcyBGaXhlZFJlY3Q7CiAKIGNsYXNzIEludFJlY3QgewogcHVibGljOgpA
QCAtODAsNyArODEsOCBAQCBwdWJsaWM6CiAgICAgSW50UmVjdChpbnQgeCwgaW50IHksIGludCB3
aWR0aCwgaW50IGhlaWdodCkKICAgICAgICAgOiBtX2xvY2F0aW9uKEludFBvaW50KHgsIHkpKSwg
bV9zaXplKEludFNpemUod2lkdGgsIGhlaWdodCkpIHsgfQogCi0gICAgZXhwbGljaXQgSW50UmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2lu
Y2UgaXQncyBsb3NzeQorICAgIGV4cGxpY2l0IEludFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7IC8v
IGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgZXhwbGljaXQg
SW50UmVjdChjb25zdCBGaXhlZFJlY3QmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNp
bmNlIGl0J3MgbG9zc3kKICAgICAgICAgCiAgICAgSW50UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2xvY2F0aW9uOyB9CiAgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9zaXplOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GaXhl
ZFBvaW50Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ZpeGVkUG9pbnRDRy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9GaXhlZFBvaW50Q0cuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaXhlZFBvaW50LmgiCisK
KyNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkKKworI2luY2x1ZGUgPEFw
cGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0ZpeGVkUG9pbnQ6OkZpeGVkUG9pbnQoY29uc3QgQ0dQb2ludCYgcCkgOiBtX3go
cC54KSwgbV95KHAueSkKK3sKK30KKworRml4ZWRQb2ludDo6b3BlcmF0b3IgQ0dQb2ludCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIENHUG9pbnRNYWtlKG1feCwgbV95KTsKK30KKworfQorCisjZW5k
aWYgLy8gVVNFKENHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Rml4ZWRSZWN0Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ZpeGVkUmVjdENHLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ZpeGVkUmVjdENHLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRml4ZWRSZWN0LmgiCisK
KyNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkKKworI2luY2x1ZGUgPEFw
cGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0ZpeGVkUmVjdDo6Rml4ZWRSZWN0KGNvbnN0IENHUmVjdCYgcikgOiBtX2xvY2F0
aW9uKHIub3JpZ2luKSwgbV9zaXplKHIuc2l6ZSkKK3sKK30KKworRml4ZWRSZWN0OjpvcGVyYXRv
ciBDR1JlY3QoKSBjb25zdAoreworICAgIHJldHVybiBDR1JlY3RNYWtlKHgoKSwgeSgpLCB3aWR0
aCgpLCBoZWlnaHQoKSk7Cit9CisKK30KKworI2VuZGlmIC8vIFVTRShDRykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ZpeGVkU2l6ZUNHLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GaXhlZFNpemVDRy5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GaXhl
ZFNpemVDRy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyAKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGaXhlZFNpemUuaCIKKworI2lmIFVTRShDRykgfHwgVVNFKFNLSUFf
T05fTUFDX0NIUk9NSVVNKSB8fCAoUExBVEZPUk0oUVQpICYmIFVTRShRVEtJVCkpCisKKyNpbmNs
dWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitGaXhlZFNpemU6OkZpeGVkU2l6ZShjb25zdCBDR1NpemUmIHMpIDog
bV93aWR0aChzLndpZHRoKSwgbV9oZWlnaHQocy5oZWlnaHQpCit7Cit9CisKK0ZpeGVkU2l6ZTo6
b3BlcmF0b3IgQ0dTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ0dTaXplTWFrZShtX3dpZHRo
LCBtX2hlaWdodCk7Cit9CisKK30KKworI2VuZGlmIC8vIFVTRShDRykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GaXhlZFBvaW50TWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GaXhlZFBvaW50TWFjLm1t
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zp
eGVkUG9pbnRNYWMubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZpeGVkUG9pbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisjaWZuZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCisKK0Zp
eGVkUG9pbnQ6OkZpeGVkUG9pbnQoY29uc3QgTlNQb2ludCYgcCkgOiBtX3gocC54KSwgbV95KHAu
eSkKK3sKK30KKworRml4ZWRQb2ludDo6b3BlcmF0b3IgTlNQb2ludCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIE5TTWFrZVBvaW50KG1feC50b0Zsb2F0KCksIG1feS50b0Zsb2F0KCkpOworfQorCisj
ZW5kaWYKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zp
eGVkUmVjdE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvRml4ZWRSZWN0TWFjLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZpeGVkUmVjdE1hYy5tbQkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRml4ZWRSZWN0LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmbmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNf
Q0dHRU9NRVRSWV9UWVBFUworCitGaXhlZFJlY3Q6OkZpeGVkUmVjdChjb25zdCBOU1JlY3QmIHIp
IDogbV9sb2NhdGlvbihyLm9yaWdpbiksIG1fc2l6ZShyLnNpemUpCit7Cit9CisKK0ZpeGVkUmVj
dDo6b3BlcmF0b3IgTlNSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gTlNNYWtlUmVjdCh4KCks
IHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworfQorCisjZW5kaWYKKworfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZpeGVkU2l6ZU1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRml4ZWRTaXplTWFjLm1t
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zp
eGVkU2l6ZU1hYy5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworIAorI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZpeGVkU2l6ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
KyNpZm5kZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKKworRml4
ZWRTaXplOjpGaXhlZFNpemUoY29uc3QgTlNTaXplJiBzKSA6IG1fd2lkdGgocy53aWR0aCksIG1f
aGVpZ2h0KHMuaGVpZ2h0KQoreworfQorCitGaXhlZFNpemU6Om9wZXJhdG9yIE5TU2l6ZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIE5TTWFrZVNpemUobV93aWR0aCwgbV9oZWlnaHQpOworfQorCisj
ZW5kaWYKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRml4
ZWRQb2ludFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9GaXhlZFBvaW50UXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvRml4ZWRQb2ludFF0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaXhlZFBvaW50Lmgi
CisKKyNpbmNsdWRlIDxRUG9pbnRGPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZpeGVkUG9p
bnQ6OkZpeGVkUG9pbnQoY29uc3QgUVBvaW50RiYgcCkKKyAgICA6IG1feChwLngoKSkKKyAgICAs
IG1feShwLnkoKSkKK3sKK30KKworRml4ZWRQb2ludDo6b3BlcmF0b3IgUVBvaW50RigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFFQb2ludEYobV94LCBtX3kpOworfQorCit9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9GaXhlZFJlY3RRdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRml4ZWRSZWN0UXQuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRml4ZWRS
ZWN0UXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0
IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGaXhlZFJlY3QuaCIKKworI2luY2x1ZGUgPFFSZWN0Rj4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitGaXhlZFJlY3Q6OkZpeGVkUmVjdChjb25zdCBRUmVjdEYmIHIpCisg
ICAgOiBtX2xvY2F0aW9uKHIudG9wTGVmdCgpKQorICAgICwgbV9zaXplKHIud2lkdGgoKQorICAg
ICwgci5oZWlnaHQoKSkKK3sKK30KKworRml4ZWRSZWN0OjpvcGVyYXRvciBRUmVjdEYoKSBjb25z
dAoreworICAgIHJldHVybiBRUmVjdEYoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsKK30K
KworfQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9GaXhlZFNp
emVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRml4ZWRTaXplUXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRml4ZWRTaXplUXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUw
IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpeGVkU2l6ZS5oIgorCisjaW5j
bHVkZSA8UVNpemVGPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZpeGVkU2l6ZTo6Rml4ZWRT
aXplKGNvbnN0IFFTaXplRiYgcCkKKyAgICA6IG1fd2lkdGgocC53aWR0aCgpKQorICAgICwgbV9o
ZWlnaHQocC5oZWlnaHQoKSkKK3sKK30KKworRml4ZWRTaXplOjpvcGVyYXRvciBRU2l6ZUYoKSBj
b25zdAoreworICAgIHJldHVybiBRU2l6ZUYobV93aWR0aCwgbV9oZWlnaHQpOworfQorCit9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZpeGVkUG9pbnRTa2lh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0ZpeGVkUG9pbnRTa2lhLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvRml4ZWRQb2ludFNraWEuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaXhlZFBvaW50LmgiCisK
KyNpbmNsdWRlICJTa1BvaW50LmgiCisjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworRml4ZWRQb2ludDo6Rml4ZWRQb2ludChjb25zdCBTa1BvaW50JiBwKQor
ICAgIDogbV94KHAuZlgpCisgICAgLCBtX3kocC5mWSkKK3sKK30KKworRml4ZWRQb2ludDo6b3Bl
cmF0b3IgU2tQb2ludCgpIGNvbnN0Cit7CisgICAgU2tQb2ludCBwID0geyBXZWJDb3JlRmxvYXRU
b1NrU2NhbGFyKG1feCksIFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIobV95KSB9OworICAgIHJldHVy
biBwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZpeGVkUmVjdFNraWEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRml4ZWRSZWN0U2tpYS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZpeGVk
UmVjdFNraWEuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJp
Z2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGaXhlZFJlY3QuaCIKKworI2luY2x1ZGUgIlNrUmVjdC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZpeGVkUmVjdDo6Rml4ZWRSZWN0KGNvbnN0IFNrUmVjdCYg
cikKKyAgICA6IG1fbG9jYXRpb24oci5mTGVmdCwgci5mVG9wKQorICAgICwgbV9zaXplKHIud2lk
dGgoKSwgci5oZWlnaHQoKSkKK3sKK30KKworRml4ZWRSZWN0OjpvcGVyYXRvciBTa1JlY3QoKSBj
b25zdAoreworICAgIFNrUmVjdCByZWN0ID0geyB4KCksIHkoKSwgbWF4WCgpLCBtYXhZKCkgfTsK
KyAgICByZXR1cm4gcmVjdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123034</attachid>
            <date>2012-01-18 16:37:00 -0800</date>
            <delta_ts>2012-01-31 16:43:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76571-20120118163659.patch</filename>
            <type>text/plain</type>
            <size>97478</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNTMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDEyLTAxLTE4ICBFbWlsIEEg
RWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4gYW5kIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIEFkZCBmaXhlZCBwb2ludCB0eXBlcyBmb3Igc3ViLXBpeGVs
IGxheW91dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzY1NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgZml4ZWQgcG9pbnQgaW1wbGVtZW50YXRpb24gKEFwcFVuaXQpIGFuZCB2ZXJzaW9ucyBvZiB0
aGUgUG9pbnQsIFNpemUKKyAgICAgICAgYW5kIFJlY3QgY2xhc3NlcyB1c2luZyB0aGlzIG5ldyB0
eXBlLgorCisgICAgICAgIEFwcFVuaXQgcmVwcmVzZW50cyB2YWx1ZXMgYXMgbXVsdGlwbGVzIG9m
IDEvNjB0aCBwaXhlbC4gVGhpcyBhbGxvd3MgdXMKKyAgICAgICAgdG8gcmVwcmVzZW50IHN1Yi1w
aXhlbCB2YWx1ZXMgdXNpbmcgaW50ZWdlciBtYXRoIGFuZCBhdm9pZHMgZmxvYXRpbmcKKyAgICAg
ICAgcG9pbnQgcHJlY2lzaW9uIHByb2JsZW1zLgorCisgICAgICAgIEZpeGVkUG9pbnQsIEZpeGVk
U2l6ZSBhbmQgRml4ZWRSZWN0IGFyZSBQb2ludCwgU2l6ZSBhbmQgUmVjdAorICAgICAgICBpbXBs
ZW1lbnRhdGlvbnMgcmVzcGVjdGl2ZWx5IHVzaW5nIHRoaXMgbmV3IHR5cGUuCisKKyAgICAgICAg
QWRkaXRpb25hbGx5LCBwbGF0Zm9ybSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG5l
dyBjbGFzc2VzIGFyZQorICAgICAgICBwcm92aWRlZCB0byBhbGxvdyB0aGVtIHRvIGJlIHVzZWQg
aW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBpbnQgYW5kIGZsb2F0CisgICAgICAgIGJhc2VkIHZlcnNp
b25zIG9mIHNhbWUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICog
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL0FwcFVuaXQuaDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRQb2ludC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3QuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRml4ZWRTaXplLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRml4ZWRTaXplLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UG9pbnQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0U2l6ZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW50UmVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zp
eGVkUG9pbnRDRy5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zp
eGVkUmVjdENHLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRml4
ZWRTaXplQ0cuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRml4
ZWRQb2ludE1hYy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zp
eGVkUmVjdE1hYy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zp
eGVkU2l6ZU1hYy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRml4
ZWRQb2ludFF0LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRml4
ZWRSZWN0UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9GaXhl
ZFNpemVRdC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvRml4
ZWRQb2ludFNraWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0ZpeGVkUmVjdFNraWEuY3BwOiBBZGRlZC4KKwogMjAxMi0wMS0xOCAgRXJpYyBDYXJsc29uICA8
ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBQcm92aWRlIGFjY2VzcyB0byB1c2Vy
J3MgbGlzdCBvZiBwcmVmZXJyZWQgbGFuZ3VhZ2VzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMTA1MzM0KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTEwODcsNiArMTA4Nyw4IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3QuY3BwCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvRml4ZWRTaXplLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UXVhZC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQko
cmV2aXNpb24gMTA1MzM0KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQko
d29ya2luZyBjb3B5KQpAQCAtMjkyNiw2ICsyOTI2LDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0vRkVHYXVzc2lh
bkJsdXJORU9OLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
YXJtL0ZFTGlnaHRpbmdORU9OLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9hcm0vRkVMaWdodGluZ05FT04uaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRml4ZWRQb2ludC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GaXhlZFJlY3QuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
aXhlZFJlY3QuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRTaXpl
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRTaXplLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcCBcCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCShyZXZpc2lvbiAxMDUzMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJ
KHdvcmtpbmcgY29weSkKQEAgLTMzOTAsNiArMzM5MCw4IEBACiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvRml4ZWRSZWN0LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvRml4ZWRTaXplLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAnLApAQCAt
MzQ5MCw2ICszNDkyLDkgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9S
ZWZQdHJDYWlyby5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFu
c2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvQ29sb3JDRy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zp
eGVkUG9pbnRDRy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ZpeGVk
UmVjdENHLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvRml4ZWRTaXpl
Q0cuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBvaW50Q0cu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcCcsCkBA
IC0zODIwLDYgKzM4MjUsOSBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9D
b21wbGV4VGV4dENvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckFUU1VJLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRml4ZWRQb2ludE1hYy5tbScsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZpeGVkUmVjdE1hYy5tbScsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZpeGVkU2l6ZU1hYy5tbScsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW0nLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFJlY3RNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9GbG9hdFNpemVNYWMubW0nLApAQCAtMzg4NCw2ICszODkyLDkgQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9Db2xvclF0LmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvRXh0ZW5zaW9uczNEUXQuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9FeHRlbnNpb25zM0RRdC5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9GaXhlZFBvaW50UXQuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9xdC9GaXhlZFJlY3RRdC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZpeGVkU2l6ZVF0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvcXQvRmxvYXRQb2ludFF0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvRmxvYXRSZWN0UXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Gb250Q2FjaGVRdC5jcHAnLApAQCAtMzkyMCw2ICszOTMxLDggQEAKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFF0LmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNwYXJlbmN5TGF5ZXIuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tp
YS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZpeGVkUG9pbnRTa2lh
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GaXhlZFJlY3RTa2lh
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GbG9hdFBvaW50U2tp
YS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRmxvYXRSZWN0U2tp
YS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udENhY2hlU2tp
YS5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHJldmlz
aW9uIDEwNTMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTczLDYgKzE1NzMsOSBAQAogICAgICAgICAgICAgWydpbmNsdWRl
JywgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hY1xcLm1tJCddLAogICAgICAgICAgICAgWydpbmNs
dWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hY1xcLm1tJCddLAogICAgICAgICAg
ICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xs
ZXJDb3JlVGV4dFxcLm1tJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9GaXhlZFBvaW50TWFjXFwubW0kJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUn
LCAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZpeGVkUmVjdE1hY1xcLm1tJCddLAorICAgICAgICAg
ICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GaXhlZFNpemVNYWNcXC5tbSQn
XSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRQ
b2ludE1hY1xcLm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9GbG9hdFJlY3RNYWNcXC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRTaXplTWFjXFwubW0kJ10sCkBAIC0xNjUwLDYgKzE2
NTMsOSBAQAogICAgICAgICB9XSwKICAgICAgICAgWydPUz09Im1hYyIgYW5kIHVzZV9za2lhPT0x
JywgewogICAgICAgICAgICdzb3VyY2VzLyc6IFsKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdw
bGF0Zm9ybS9ncmFwaGljcy9jZy9GaXhlZFBvaW50Q0dcXC5jcHAkJ10sCisgICAgICAgICAgICBb
J2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvRml4ZWRSZWN0Q0dcXC5jcHAkJ10sCisg
ICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvRml4ZWRTaXplQ0dc
XC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2cv
RmxvYXRQb2ludENHXFwuY3BwJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHXFwuY3BwJCddLAogICAgICAgICAgICAgWydpbmNsdWRl
JywgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHXFwuY3BwJCddLApJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDEw
NTMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjMwNiw2ICsyNjMwNiwxMCBAQAogCQkJTmFtZT0icGxhdGZvcm0i
CiAJCQk+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQXBwVW5pdC5o
IgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxBcmVuYS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMjczNTcsNiArMjczNjEsMjYg
QEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXEZpeGVkUG9pbnQuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJ
CQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZpeGVkUmVj
dC5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGaXhlZFJlY3QuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4K
KwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZpeGVk
U2l6ZS5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGaXhlZFNpemUuaCIKKwkJCQkJPgorCQkJCTwvRmls
ZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZs
b2F0UG9pbnQuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpAQCAtMjgzNDgsNiArMjgzNzIsMTgg
QEAKIAkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQkJCTwvRmlsZT4KIAkJCQkJPEZpbGUK
KwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2dcRml4ZWRQb2ludENH
LmNwcCIKKwkJCQkJCT4KKwkJCQkJPC9GaWxlPgorCQkJCQk8RmlsZQorCQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjZ1xGaXhlZFJlY3RDRy5jcHAiCisJCQkJCQk+CisJ
CQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUKKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcY2dcRml4ZWRTaXplQ0cuY3BwIgorCQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJCQkJ
CTxGaWxlCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXEZsb2F0
UG9pbnRDRy5jcHAiCiAJCQkJCQk+CiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDEwNTMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzExLDYgKzMxMSwxNyBAQAogCQkxNDk0N0ZG
RTEyRjgwQ0QyMDBBMEY2MzEgLyogRG9jdW1lbnRPcmRlcmVkTWFwLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDk0N0ZGQzEyRjgwQ0QyMDBBMEY2MzEg
LyogRG9jdW1lbnRPcmRlcmVkTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMTQ5OTNCRTUwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDk5M0JFMzBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJ
MTQ5OTNCRTYwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ5OTNCRTQwQjJGMkIxQzAwNTA0
OTdGIC8qIEZvY3VzQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTE0QzBBMkIyMTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFBvaW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQUI3NzE1
ODE0NDRDQkQ0MDBFQzRDNEMgLyogRml4ZWRQb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0QzBBMkIzMTQ0NjMyMUUwMDUyMDc5OCAvKiBG
aXhlZFBvaW50Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkFCNzcxQUExNDQ0RjI0NTAwRUM0QzRDIC8qIEZpeGVkUG9pbnRDRy5jcHAgKi87IH07
CisJCTE0QzBBMkI1MTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFBvaW50TWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkFCNzcxQTcxNDQ0RjIyRTAw
RUM0QzRDIC8qIEZpeGVkUG9pbnRNYWMubW0gKi87IH07CisJCTE0QzBBMkI2MTQ0NjMyMUUwMDUy
MDc5OCAvKiBGaXhlZFJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkFCNzcxNTYxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkUmVjdC5jcHAgKi87
IH07CisJCTE0QzBBMkI3MTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFJlY3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MTU1MTQ0NENCRDQwMEVD
NEM0QyAvKiBGaXhlZFJlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkxNEMwQTJCODE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRSZWN0Q0cuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkFCNzcxQTkx
NDQ0RjI0NTAwRUM0QzRDIC8qIEZpeGVkUmVjdENHLmNwcCAqLzsgfTsKKwkJMTRDMEEyQkExNDQ2
MzIxRTAwNTIwNzk4IC8qIEZpeGVkUmVjdE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MUE2MTQ0NEYyMkUwMEVDNEM0QyAvKiBGaXhlZFJl
Y3RNYWMubW0gKi87IH07CisJCTE0QzBBMkJCMTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFNpemUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkFCNzcx
NTMxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkU2l6ZS5jcHAgKi87IH07CisJCTE0QzBBMkJDMTQ0
NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFNpemUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MTUyMTQ0NENCRDQwMEVDNEM0QyAvKiBGaXhlZFNpemUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNEMw
QTJCRDE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRTaXplQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkFCNzcxQTgxNDQ0RjI0NTAwRUM0QzRDIC8q
IEZpeGVkU2l6ZUNHLmNwcCAqLzsgfTsKKwkJMTRDMEEyQkYxNDQ2MzIxRTAwNTIwNzk4IC8qIEZp
eGVkU2l6ZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJBQjc3MUE1MTQ0NEYyMkUwMEVDNEM0QyAvKiBGaXhlZFNpemVNYWMubW0gKi87IH07CiAJ
CTE0QzlBNUVBMEIzRDEwNUYwMDVBMDIzMiAvKiBTZXR0aW5ncy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEM5QTVFOTBCM0QxMDVGMDA1QTAyMzIg
LyogU2V0dGluZ3MuY3BwICovOyB9OwogCQkxNENEOEQ4MjEwNkI1MjkwMDBBNDZEMjMgLyogSlNT
aGFyZWRXb3JrZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTRDRDhEODExMDZCNTI5MDAwQTQ2RDIzIC8qIEpTU2hhcmVkV29ya2VyQ3Vz
dG9tLmNwcCAqLzsgfTsKIAkJMTRDRjc4QTQwOUY1OENCRjAwRUIzNjY1IC8qIEpTQ1NTVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDRjc4
QTMwOUY1OENCRjAwRUIzNjY1IC8qIEpTQ1NTVmFsdWUuY3BwICovOyB9OwpAQCAtNDk1Nyw2ICs0
OTY4LDcgQEAKIAkJQjhEQkRCNEMxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1h
bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJE
QjQ4MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggKi87IH07CiAJCUI4
REJEQjREMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ5MTMw
QjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCAqLzsgfTsKIAkJ
QjhEQkRCNEUxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjRBMTMw
QjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggKi87IH07CisJCUJB
QjIyQUQ0MTRCN0EwMkQwMEQ4QUJBNiAvKiBBcHBVbml0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQUI3NzE1MDE0NDRDQkI0MDBFQzRDNEMgLyogQXBw
VW5pdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUJBQ0YyOTAxMTNCMkEwRDUwMDc4MUY5MCAvKiBMYXlvdXRUeXBlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkFDRjI5MDAxM0IyQTBENTAwNzgxRjkw
IC8qIExheW91dFR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQkMwMEYwMDQwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDBFRkZFMEUwQTE4NTUw
MEZEMDRFMyAvKiBET01GaWxlLmggKi87IH07CiAJCUJDMDBGMDA1MEUwQTE4NTUwMEZEMDRFMyAv
KiBET01GaWxlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMwMEVGRkYwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gKi87IH07CkBAIC0xMTgy
NSw2ICsxMTgzNywxOCBAQAogCQlCOERCREI0ODEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0
aW9uQ29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXRTZWxlY3Rp
b25Db21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4REJEQjQ5MTMwQjBG
OEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCOERCREI0QTEzMEIwRjhBMDBGNUNEQjEgLyog
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUJBQjc3MTUwMTQ0NENCQjQwMEVDNEM0QyAvKiBBcHBVbml0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcFVuaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQkFCNzcxNTIxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkU2l6ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGaXhlZFNpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQkFCNzcxNTMxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkU2l6ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaXhlZFNpemUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlCQUI3NzE1NTE0NDRDQkQ0MDBFQzRDNEMgLyogRml4ZWRSZWN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpeGVkUmVjdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlCQUI3NzE1NjE0NDRDQkQ0MDBFQzRDNEMgLyogRml4ZWRS
ZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpeGVkUmVjdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJBQjc3MTU4MTQ0NENCRDQwMEVDNEM0
QyAvKiBGaXhlZFBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpeGVk
UG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkFCNzcxQTUxNDQ0RjIyRTAw
RUM0QzRDIC8qIEZpeGVkU2l6ZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IEZpeGVkU2l6ZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QkFCNzcxQTYxNDQ0RjIyRTAwRUM0QzRDIC8qIEZpeGVkUmVjdE1hYy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZpeGVkUmVjdE1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQkFCNzcxQTcxNDQ0RjIyRTAwRUM0QzRDIC8qIEZpeGVkUG9pbnRN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGaXhlZFBvaW50
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQUI3NzFBODE0NDRGMjQ1MDBF
QzRDNEMgLyogRml4ZWRTaXplQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRml4ZWRTaXplQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQUI3
NzFBOTE0NDRGMjQ1MDBFQzRDNEMgLyogRml4ZWRSZWN0Q0cuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRml4ZWRSZWN0Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlCQUI3NzFBQTE0NDRGMjQ1MDBFQzRDNEMgLyogRml4ZWRQb2ludENHLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpeGVkUG9pbnRDRy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJBQ0YyOTAwMTNCMkEwRDUwMDc4MUY5MCAvKiBM
YXlvdXRUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRUeXBl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAwRUZGRTBFMEExODU1MDBGRDA0
RTMgLyogRE9NRmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01GaWxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDBFRkZGMEUwQTE4NTUwMEZEMDRF
MyAvKiBET01GaWxlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
RE9NRmlsZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NTg2LDYgKzE4NjEw
LDkgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMEZDRjMzMjMw
RjJCOTcxNTAwNEI2Nzk1IC8qIENvbG9yQ0cuY3BwICovLAorCQkJCUJBQjc3MUE4MTQ0NEYyNDUw
MEVDNEM0QyAvKiBGaXhlZFNpemVDRy5jcHAgKi8sCisJCQkJQkFCNzcxQTkxNDQ0RjI0NTAwRUM0
QzRDIC8qIEZpeGVkUmVjdENHLmNwcCAqLywKKwkJCQlCQUI3NzFBQTE0NDRGMjQ1MDBFQzRDNEMg
LyogRml4ZWRQb2ludENHLmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyog
RmxvYXRQb2ludENHLmNwcCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRSZWN0Q0cuY3BwICovLAogCQkJCUIyNzUzNTJEMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNp
emVDRy5jcHAgKi8sCkBAIC0xODYyMiw2ICsxODY0OSw5IEBACiAJCQkJMzdDMjM2MEYxMDk3RUU3
NzAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5oICovLAogCQkJCTM3QzIzODFGMTA5
OEM4NDIwMEVGOUY3MiAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXJBVFNVSS5jcHAgKi8sCiAJCQkJ
MzdDMjM4MjAxMDk4Qzg0MjAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0
Lm1tICovLAorCQkJCUJBQjc3MUE1MTQ0NEYyMkUwMEVDNEM0QyAvKiBGaXhlZFNpemVNYWMubW0g
Ki8sCisJCQkJQkFCNzcxQTYxNDQ0RjIyRTAwRUM0QzRDIC8qIEZpeGVkUmVjdE1hYy5tbSAqLywK
KwkJCQlCQUI3NzFBNzE0NDRGMjJFMDBFQzRDNEMgLyogRml4ZWRQb2ludE1hYy5tbSAqLywKIAkJ
CQk0OUFGMkQ2QjE0NDM1RDIxMDAxNkE3ODQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yTWFjLmNw
cCAqLywKIAkJCQlCMjc1MzU0QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludE1hYy5tbSAq
LywKIAkJCQlCMjc1MzU0QzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0TWFjLm1tICovLApA
QCAtMTg2ODEsNiArMTg3MTEsMTEgQEAKIAkJCQk0OUZDN0E0RjE0NDRBRjVGMDBBNUQ4NjQgLyog
RGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCAqLywKIAkJCQk0OUFGMkQ2ODE0NDM1RDA1MDAxNkE3
ODQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmggKi8sCiAJCQkJNkU2N0QyQTgxMjgwRThCRDAw
ODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oICovLAorCQkJCUJBQjc3MTUyMTQ0NENCRDQwMEVDNEM0
QyAvKiBGaXhlZFNpemUuaCAqLywKKwkJCQlCQUI3NzE1MzE0NDRDQkQ0MDBFQzRDNEMgLyogRml4
ZWRTaXplLmNwcCAqLywKKwkJCQlCQUI3NzE1NTE0NDRDQkQ0MDBFQzRDNEMgLyogRml4ZWRSZWN0
LmggKi8sCisJCQkJQkFCNzcxNTYxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkUmVjdC5jcHAgKi8s
CisJCQkJQkFCNzcxNTgxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkUG9pbnQuaCAqLywKIAkJCQlC
Mjc1MzUzQTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5jcHAgKi8sCiAJCQkJQjI3NTM1
M0IwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuaCAqLywKIAkJCQlCMkUyN0M5RDBCMEYy
QjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmNwcCAqLywKQEAgLTE5NTQ0LDYgKzE5NTc5LDcg
QEAKIAkJCQk1MTYwMzAwOTBDQzQyNDU0MDBDOEFDMjUgLyogcG9zaXggKi8sCiAJCQkJMUEyRTZF
NTYwQ0M1NTFFMDAwNEEyMDYyIC8qIHNxbCAqLywKIAkJCQlCMkMzRDlFQzBEMDA2QzFEMDBFRjZG
MjYgLyogdGV4dCAqLywKKwkJCQlCQUI3NzE1MDE0NDRDQkI0MDBFQzRDNEMgLyogQXBwVW5pdC5o
ICovLAogCQkJCUJDRkIyRjc0MDk3QTJFMUEwMEJBNzAzRCAvKiBBcmVuYS5jcHAgKi8sCiAJCQkJ
QkNGQjJGNzUwOTdBMkUxQTAwQkE3MDNEIC8qIEFyZW5hLmggKi8sCiAJCQkJMkVGMUJGRjYxMjFD
QjBCRDAwQzI3NjI3IC8qIEFzeW5jRmlsZVN0cmVhbS5oICovLApAQCAtMjA5ODAsNiArMjEwMTYs
NyBAQAogCQkJCTFBMkFBQzU5MERDMkEzQjEwMEEyMEQ5QSAvKiBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUI0MTcwNjQxMjU2NjJCMzAwNkIyOEZDIC8qIEFw
cGx5QmxvY2tFbGVtZW50Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlERDkwOTlF
NjQ5MjAwNTZFNTgxIC8qIEFwcGx5U3R5bGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQlC
QUIyMkFENDE0QjdBMDJEMDBEOEFCQTYgLyogQXBwVW5pdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTEyREQ4RjYwRDkxRTZBRjAwMEY4OUVFIC8qIEFyY2hpdmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxMkREOEZEMEQ5MUU2QUYwMDBGODlFRSAvKiBBcmNoaXZlRmFjdG9yeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTEyREQ4RkMwRDkxRTZBRjAwMEY4OUVFIC8qIEFyY2hpdmVSZXNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yMjA2MCw2ICsyMjA5Nyw5IEBACiAJCQkJNDlFQ0VCNkUxNDk5Nzkw
RDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFQ0VC
NzAxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTM3MkMwMEQ5MTI5NjE5RjgwMDVDOTU3NSAvKiBGaW5kT3B0aW9ucy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMTRDMEEyQjIxNDQ2MzIxRTAwNTIwNzk4IC8qIEZpeGVkUG9pbnQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTE0QzBBMkI3MTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFJlY3QuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTE0QzBBMkJDMTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFNpemUuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4Q0ZGMDRGMEExNTRGMDkwMDBBNDIzNCAvKiBGaXhlZFRhYmxl
TGF5b3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzA3M0JBQTBDMzk5QjFGMDAwRjU5NzkgLyog
RmxvYXRDb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjc1MzU2OTBCMDUzODE0MDAy
Q0U2NEYgLyogRmxvYXRQb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTExMiw2ICsyNTE1Miwx
NCBAQAogCQkJCTMxMzEzRjY1MTQ0M0IzNUYwMDZFMkE5MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUVDRUI2RDE0OTk3OTBEMDBDREQzQTQgLyogRmls
dGVyT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RUNFQjZGMTQ5OTc5MEQwMENE
RDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0QzBBMkIz
MTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFBvaW50Q0cuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MTRDMEEyQjUxNDQ2MzIxRTAwNTIwNzk4IC8qIEZpeGVkUG9pbnRNYWMubW0gaW4gU291cmNlcyAq
LywKKwkJCQkxNEMwQTJCNjE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRSZWN0LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTE0QzBBMkI4MTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFJlY3RDRy5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkxNEMwQTJCQTE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRSZWN0
TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMTRDMEEyQkIxNDQ2MzIxRTAwNTIwNzk4IC8qIEZp
eGVkU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxNEMwQTJCRDE0NDYzMjFFMDA1MjA3OTgg
LyogRml4ZWRTaXplQ0cuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRDMEEyQkYxNDQ2MzIxRTAw
NTIwNzk4IC8qIEZpeGVkU2l6ZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4Q0ZGMDREMEEx
NTRGMDkwMDBBNDIzNCAvKiBGaXhlZFRhYmxlTGF5b3V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyNzUzNTY4MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUIyRTI3QzlGMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9BcHBVbml0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXBwVW5pdC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXBwVW5pdC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDUxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEFwcFVuaXRfaAorI2RlZmluZSBBcHBVbml0X2gKKworI2luY2x1
ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgaW50IGtGaXhlZFBvaW50RGVub21p
bmF0b3IgPSA2MDsKK2NvbnN0IGludCBpbnRNYXhGb3JBcHBVbml0ID0gSU5UX01BWCAvIGtGaXhl
ZFBvaW50RGVub21pbmF0b3I7Citjb25zdCBpbnQgaW50TWluRm9yQXBwVW5pdCA9IC1pbnRNYXhG
b3JBcHBVbml0OworCitjbGFzcyBBcHBVbml0IHsKK3B1YmxpYzoKKyAgICBBcHBVbml0KCkgOiBt
X3ZhbHVlKDApIHsgfQorICAgIEFwcFVuaXQoaW50IHZhbHVlKSB7IG1fdmFsdWUgPSB2YWx1ZSAq
IGtGaXhlZFBvaW50RGVub21pbmF0b3I7IH0KKyAgICBBcHBVbml0KHVuc2lnbmVkIHNob3J0IHZh
bHVlKSB7IG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7IH0KKyAgICBB
cHBVbml0KHVuc2lnbmVkIGludCB2YWx1ZSkgeyBtX3ZhbHVlID0gdmFsdWUgKiBrRml4ZWRQb2lu
dERlbm9taW5hdG9yOyB9CisgICAgQXBwVW5pdChsb25nIHVuc2lnbmVkIGludCB2YWx1ZSkgeyBt
X3ZhbHVlID0gdmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yOyB9CisgICAgQXBwVW5pdChm
bG9hdCB2YWx1ZSkgeyBtX3ZhbHVlID0gdmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yOyB9
CisgICAgQXBwVW5pdChkb3VibGUgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9p
bnREZW5vbWluYXRvcjsgfQorICAgIEFwcFVuaXQoY29uc3QgQXBwVW5pdCYgdmFsdWUpIHsgbV92
YWx1ZSA9IHZhbHVlLnJhd1ZhbHVlKCk7IH0KKworICAgIGlubGluZSBpbnQgdG9JbnQoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsgfQorICAgIGlubGlu
ZSB1bnNpZ25lZCB0b1Vuc2lnbmVkKCkgY29uc3QgeyBBU1NFUlQobV92YWx1ZSA+PSAwKTsgcmV0
dXJuIHRvSW50KCk7IH0KKyAgICBpbmxpbmUgZmxvYXQgdG9GbG9hdCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PGZsb2F0PihtX3ZhbHVlKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7IH0K
KyAgICBpbmxpbmUgZG91YmxlIHRvRG91YmxlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
ZG91YmxlPihtX3ZhbHVlKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7IH0KKworICAgIG9wZXJh
dG9yIGludCgpIGNvbnN0IHsgcmV0dXJuIHRvSW50KCk7IH0KKyAgICBvcGVyYXRvciB1bnNpZ25l
ZCgpIGNvbnN0IHsgcmV0dXJuIHRvVW5zaWduZWQoKTsgfQorICAgIG9wZXJhdG9yIGxvbmcgdW5z
aWduZWQgaW50KCkgY29uc3QgeyByZXR1cm4gdG9VbnNpZ25lZCgpOyB9CisgICAgb3BlcmF0b3Ig
ZmxvYXQoKSBjb25zdCB7IHJldHVybiB0b0Zsb2F0KCk7IH0KKyAgICBvcGVyYXRvciBkb3VibGUo
KSBjb25zdCB7IHJldHVybiB0b0RvdWJsZSgpOyB9CisgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgIGlubGluZSBpbnQgcmF3VmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlOyB9CisgICAgaW5saW5lIHZvaWQgc2V0UmF3VmFsdWUoaW50IHZhbHVl
KSB7IG1fdmFsdWUgPSB2YWx1ZTsgfQorCisgICAgaW5saW5lIEFwcFVuaXQgYWJzKCkKKyAgICB7
CisgICAgICAgIEFwcFVuaXQgcmV0dXJuVmFsdWU7CisgICAgICAgIHJldHVyblZhbHVlLnNldFJh
d1ZhbHVlKDo6YWJzKG1fdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAg
IH0KKyNpZiBPUyhEQVJXSU4pCisgICAgaW5saW5lIGludCB3dGZfY2VpbCgpCisjZWxzZQorICAg
IGlubGluZSBpbnQgY2VpbCgpCisjZW5kaWYKKyAgICB7CisgICAgICAgIHJldHVybiAobV92YWx1
ZSA+IDAgPyBtX3ZhbHVlICsga0ZpeGVkUG9pbnREZW5vbWluYXRvciAtIDEgOiBtX3ZhbHVlIC0g
a0ZpeGVkUG9pbnREZW5vbWluYXRvciArIDEpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyAg
ICB9CisgICAgaW5saW5lIGludCByb3VuZCgpCisgICAgeworICAgICAgICBpZiAobV92YWx1ZSA+
IDApCisgICAgICAgICAgICByZXR1cm4gKG1fdmFsdWUgKyAoa0ZpeGVkUG9pbnREZW5vbWluYXRv
ciAvIDIpKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisgICAgICAgIHJldHVybiAobV92YWx1
ZSAtIChrRml4ZWRQb2ludERlbm9taW5hdG9yIC8gMikpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRv
cjsKKyAgICB9CisKKyAgICBpbmxpbmUgaW50IGZsb29yKCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0b0ludCgpOworICAgIH0KKworICAgIHN0YXRpYyBmbG9hdCBlcHNpbG9uKCkgeyByZXR1cm4g
MSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7IH0KKyAgICBzdGF0aWMgY29uc3QgQXBwVW5pdCBt
YXgoKQorICAgIHsKKyAgICAgICAgQXBwVW5pdCBtOworICAgICAgICBtLm1fdmFsdWUgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworICAgICAgICByZXR1cm4gbTsKKyAgICB9Cisg
ICAgc3RhdGljIGNvbnN0IEFwcFVuaXQgbWluKCkKKyAgICB7CisgICAgICAgIEFwcFVuaXQgbTsK
KyAgICAgICAgbS5tX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKKyAg
ICAgICAgcmV0dXJuIG07CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBpbnQgbV92YWx1ZTsK
K307CisKK2lubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgQXBwVW5pdCYgYSwgY29uc3QgQXBw
VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYS5yYXdWYWx1ZSgpIDw9IGIucmF3VmFsdWUoKTsKK30K
KworaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBBcHBVbml0JiBhLCBmbG9hdCBiKQorewor
ICAgIHJldHVybiBhLnRvRmxvYXQoKSA8PSBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9
KGNvbnN0IEFwcFVuaXQmIGEsIGludCBiKQoreworICAgIHJldHVybiBhIDw9IEFwcFVuaXQoYik7
Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgZmxvYXQgYSwgY29uc3QgQXBwVW5p
dCYgYikKK3sKKyAgICByZXR1cm4gYSA8PSBiLnRvRmxvYXQoKTsKK30KKworaW5saW5lIGJvb2wg
b3BlcmF0b3I8PShjb25zdCBpbnQgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sKKyAgICByZXR1cm4g
QXBwVW5pdChhKSA8PSBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IEFwcFVu
aXQmIGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEucmF3VmFsdWUoKSA+PSBi
LnJhd1ZhbHVlKCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgQXBwVW5pdCYg
YSwgaW50IGIpCit7CisgICAgcmV0dXJuIGEgPj0gQXBwVW5pdChiKTsKK30KKworaW5saW5lIGJv
b2wgb3BlcmF0b3I+PShjb25zdCBmbG9hdCBhLCBjb25zdCBBcHBVbml0JiBiKQoreworICAgIHJl
dHVybiBhID49IGIudG9GbG9hdCgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0
IEFwcFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEudG9GbG9hdCgpID49IGI7Cit9
CisKK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgaW50IGEsIGNvbnN0IEFwcFVuaXQmIGIp
Cit7CisgICAgcmV0dXJuIEFwcFVuaXQoYSkgPj0gYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0
b3I8KGNvbnN0IEFwcFVuaXQmIGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEu
cmF3VmFsdWUoKSA8IGIucmF3VmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IEFwcFVuaXQmIGEsIGludCBiKQoreworICAgIHJldHVybiBhIDwgQXBwVW5pdChiKTsKK30K
KworaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEFwcFVuaXQmIGEsIGZsb2F0IGIpCit7Cisg
ICAgcmV0dXJuIGEudG9GbG9hdCgpIDwgYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IGludCBhLCBjb25zdCBBcHBVbml0JiBiKQoreworICAgIHJldHVybiBBcHBVbml0KGEpIDwg
YjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEFwcFVu
aXQmIGIpCit7CisgICAgcmV0dXJuIGEgPCBiLnRvRmxvYXQoKTsKK30KKworaW5saW5lIGJvb2wg
b3BlcmF0b3I+KGNvbnN0IEFwcFVuaXQmIGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAgcmV0
dXJuIGEucmF3VmFsdWUoKSA+IGIucmF3VmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0
b3I+KGNvbnN0IEFwcFVuaXQmIGEsIGRvdWJsZSBiKQoreworICAgIHJldHVybiBhLnRvRG91Ymxl
KCkgPiBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgQXBwVW5pdCYgYSwgZmxv
YXQgYikKK3sKKyAgICByZXR1cm4gYS50b0Zsb2F0KCkgPiBiOworfQorCitpbmxpbmUgYm9vbCBv
cGVyYXRvcj4oY29uc3QgQXBwVW5pdCYgYSwgaW50IGIpCit7CisgICAgcmV0dXJuIGEgPiBBcHBV
bml0KGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgaW50IGEsIGNvbnN0IEFw
cFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEFwcFVuaXQoYSkgPiBiOworfQorCitpbmxpbmUgYm9v
bCBvcGVyYXRvcj4oY29uc3QgZmxvYXQgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sKKyAgICByZXR1
cm4gYSA+IGIudG9GbG9hdCgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgZG91
YmxlIGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgPiBiLnRvRG91YmxlKCk7
Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQXBwVW5pdCYgYSwgY29uc3QgQXBw
VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYS5yYXdWYWx1ZSgpICE9IGIucmF3VmFsdWUoKTsKK30K
KworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBcHBVbml0JiBhLCBmbG9hdCBiKQorewor
ICAgIHJldHVybiBhICE9IEFwcFVuaXQoYik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgaW50IGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEFwcFVuaXQoYSkg
IT0gYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBcHBVbml0JiBhLCBpbnQg
YikKK3sKKyAgICByZXR1cm4gYSAhPSBBcHBVbml0KGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEFwcFVuaXQmIGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAgcmV0dXJu
IGEucmF3VmFsdWUoKSA9PSBiLnJhd1ZhbHVlKCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgQXBwVW5pdCYgYSwgaW50IGIpCit7CisgICAgcmV0dXJuIGEudG9JbnQoKSA9PSBi
OworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGludCBhLCBjb25zdCBBcHBVbml0
JiBiKQoreworICAgIHJldHVybiBhID09IGIudG9JbnQoKTsKK30KKworaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBBcHBVbml0JiBhLCBmbG9hdCBiKQoreworICAgIHJldHVybiBhID09IEFw
cFVuaXQoYik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZmxvYXQgYSwgY29u
c3QgQXBwVW5pdCYgYikKK3sKKyAgICByZXR1cm4gYSA9PSBiLnRvRmxvYXQoKTsKK30KKworLy8g
Rm9yIG11bHRpcGxpY2F0aW9uIHRoYXQncyBwcm9uZSB0byBvdmVyZmxvdywgdGhpcyBib3VuZHMg
aXQgdG8gQXBwVW5pdDo6bWF4KCkgYW5kIDo6bWluKCkKK2lubGluZSBBcHBVbml0IGJvdW5kZWRN
dWx0aXBseShjb25zdCBBcHBVbml0JiBhLCBjb25zdCBBcHBVbml0JiBiKQoreworICAgIEFwcFVu
aXQgcmV0dXJuVmFsOworICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZSgoYS5yYXdWYWx1ZSgpIC8g
a0ZpeGVkUG9pbnREZW5vbWluYXRvcikgKiBiLnJhd1ZhbHVlKCkpOworICAgIGlmICgoYS5yYXdW
YWx1ZSgpID49IDAgJiYgYi5yYXdWYWx1ZSgpID49IDApIHx8IChhLnJhd1ZhbHVlKCkgPCAwICYm
IGIucmF3VmFsdWUoKSA8IDApKSB7CisgICAgICAgIGlmIChyZXR1cm5WYWwucmF3VmFsdWUoKSA8
IDApCisgICAgICAgICAgICByZXR1cm4gQXBwVW5pdDo6bWF4KCk7CisgICAgICAgIHJldHVybiBy
ZXR1cm5WYWw7CisgICAgfQorICAgIGlmIChyZXR1cm5WYWwucmF3VmFsdWUoKSA+IDApCisgICAg
ICAgIHJldHVybiBBcHBVbml0OjptaW4oKTsKKyAgICByZXR1cm4gcmV0dXJuVmFsOworfQorCitp
bmxpbmUgQXBwVW5pdCBvcGVyYXRvciooY29uc3QgQXBwVW5pdCYgYSwgY29uc3QgQXBwVW5pdCYg
YikKK3sKKyAgICBBcHBVbml0IHJldHVyblZhbDsKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUo
KGEucmF3VmFsdWUoKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3IpICogYi5yYXdWYWx1ZSgpKTsK
KyAgICBBU1NFUlQoKGEucmF3VmFsdWUoKSA+PSAwICYmIGIucmF3VmFsdWUoKSA+PSAwICYmIHJl
dHVyblZhbC5yYXdWYWx1ZSgpID49IDApCisgICAgICAgICAgIHx8IChhLnJhd1ZhbHVlKCkgPCAw
ICYmIGIucmF3VmFsdWUoKSA8IDAgJiYgcmV0dXJuVmFsLnJhd1ZhbHVlKCkgPj0gMCkKKyAgICAg
ICAgICAgfHwgKChhLnJhd1ZhbHVlKCkgPCAwIHx8IGIucmF3VmFsdWUoKSA8IDApICYmIHJldHVy
blZhbC5yYXdWYWx1ZSgpIDw9IDApKTsKKyAgICByZXR1cm4gcmV0dXJuVmFsOworfSAgICAKKwor
aW5saW5lIGRvdWJsZSBvcGVyYXRvciooY29uc3QgQXBwVW5pdCYgYSwgZG91YmxlIGIpCit7Cisg
ICAgcmV0dXJuIGEudG9Eb3VibGUoKSAqIGI7Cit9CisKK2lubGluZSBmbG9hdCBvcGVyYXRvcioo
Y29uc3QgQXBwVW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gYS50b0Zsb2F0KCkgKiBi
OworfQorCitpbmxpbmUgQXBwVW5pdCBvcGVyYXRvciooY29uc3QgQXBwVW5pdCYgYSwgaW50IGIp
Cit7CisgICAgcmV0dXJuIGEgKiBBcHBVbml0KGIpOworfQorCitpbmxpbmUgQXBwVW5pdCBvcGVy
YXRvciooY29uc3QgQXBwVW5pdCYgYSwgdW5zaWduZWQgYikKK3sKKyAgICByZXR1cm4gYSAqIEFw
cFVuaXQoYik7Cit9CisKK2lubGluZSBBcHBVbml0IG9wZXJhdG9yKihjb25zdCBBcHBVbml0JiBh
LCBsb25nIHVuc2lnbmVkIGludCBiKQoreworICAgIHJldHVybiBhICogQXBwVW5pdChiKTsKK30K
KworaW5saW5lIEFwcFVuaXQgb3BlcmF0b3IqKGxvbmcgdW5zaWduZWQgaW50IGEsIGNvbnN0IEFw
cFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEFwcFVuaXQoYSkgKiBiOworfQorCitpbmxpbmUgQXBw
VW5pdCBvcGVyYXRvcioodW5zaWduZWQgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sKKyAgICByZXR1
cm4gQXBwVW5pdChhKSAqIGI7Cit9CisKK2lubGluZSBBcHBVbml0IG9wZXJhdG9yKihjb25zdCBp
bnQgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sKKyAgICByZXR1cm4gQXBwVW5pdChhKSAqIGI7Cit9
CisKK2lubGluZSBmbG9hdCBvcGVyYXRvciooY29uc3QgZmxvYXQgYSwgY29uc3QgQXBwVW5pdCYg
YikKK3sKKyAgICByZXR1cm4gYSAqIGIudG9GbG9hdCgpOworfQorCitpbmxpbmUgZG91YmxlIG9w
ZXJhdG9yKihjb25zdCBkb3VibGUgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sKKyAgICByZXR1cm4g
YSAqIGIudG9Eb3VibGUoKTsKK30KKworaW5saW5lIEFwcFVuaXQgb3BlcmF0b3IvKGNvbnN0IEFw
cFVuaXQmIGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAgQXBwVW5pdCByZXR1cm5WYWw7Cisg
ICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKGtGaXhlZFBvaW50RGVub21pbmF0b3IgKiAoYS5yYXdW
YWx1ZSgpIC8gYi5yYXdWYWx1ZSgpKSk7CisgICAgQVNTRVJUKCgoYS5yYXdWYWx1ZSgpID49IDAp
ICYmIChiLnJhd1ZhbHVlKCkgPj0gMCkgJiYgKHJldHVyblZhbC5yYXdWYWx1ZSgpID49IDApKQor
ICAgICAgICAgICB8fCAoKGEucmF3VmFsdWUoKSA8IDApICYmIChiLnJhd1ZhbHVlKCkgPCAwKSAm
JiAocmV0dXJuVmFsLnJhd1ZhbHVlKCkgPj0gMCkpCisgICAgICAgICAgIHx8ICgoKGEucmF3VmFs
dWUoKSA8IDApIHx8IChiLnJhd1ZhbHVlKCkgPCAwKSkgJiYgKHJldHVyblZhbC5yYXdWYWx1ZSgp
IDw9IDApKSk7CisgICAgcmV0dXJuIHJldHVyblZhbDsKK30gICAgCisKK2lubGluZSBmbG9hdCBv
cGVyYXRvci8oY29uc3QgQXBwVW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gYS50b0Zs
b2F0KCkgLyBiOworfQorCitpbmxpbmUgZG91YmxlIG9wZXJhdG9yLyhjb25zdCBBcHBVbml0JiBh
LCBkb3VibGUgYikKK3sKKyAgICByZXR1cm4gYS50b0RvdWJsZSgpIC8gYjsKK30KKworaW5saW5l
IEFwcFVuaXQgb3BlcmF0b3IvKGNvbnN0IEFwcFVuaXQmIGEsIGludCBiKQoreworICAgIHJldHVy
biBhIC8gQXBwVW5pdChiKTsKK30KKworaW5saW5lIEFwcFVuaXQgb3BlcmF0b3IvKGNvbnN0IEFw
cFVuaXQmIGEsIHVuc2lnbmVkIGludCBiKQoreworICAgIHJldHVybiBhIC8gQXBwVW5pdChiKTsK
K30KKworaW5saW5lIGZsb2F0IG9wZXJhdG9yLyhjb25zdCBmbG9hdCBhLCBjb25zdCBBcHBVbml0
JiBiKQoreworICAgIHJldHVybiBhIC8gYi50b0Zsb2F0KCk7Cit9CisKK2lubGluZSBBcHBVbml0
IG9wZXJhdG9yLyhjb25zdCBpbnQgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sKKyAgICByZXR1cm4g
QXBwVW5pdChhKSAvIGI7Cit9CisKK2lubGluZSBBcHBVbml0IG9wZXJhdG9yLyh1bnNpZ25lZCBp
bnQgYSwgY29uc3QgQXBwVW5pdCYgYikKK3sKKyAgICByZXR1cm4gQXBwVW5pdChhKSAvIGI7Cit9
CisKK2lubGluZSBBcHBVbml0IG9wZXJhdG9yKyhjb25zdCBBcHBVbml0JiBhLCBjb25zdCBBcHBV
bml0JiBiKQoreworICAgIEFwcFVuaXQgcmV0dXJuVmFsOworICAgIHJldHVyblZhbC5zZXRSYXdW
YWx1ZShhLnJhd1ZhbHVlKCkgKyBiLnJhd1ZhbHVlKCkpOworICAgIHJldHVybiByZXR1cm5WYWw7
Cit9CisKK2lubGluZSBBcHBVbml0IG9wZXJhdG9yKyhjb25zdCBBcHBVbml0JiBhLCBpbnQgYikK
K3sKKyAgICByZXR1cm4gYSArIEFwcFVuaXQoYik7Cit9CisKK2lubGluZSBmbG9hdCBvcGVyYXRv
cisoY29uc3QgQXBwVW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gYS50b0Zsb2F0KCkg
KyBiOworfQorCitpbmxpbmUgZG91YmxlIG9wZXJhdG9yKyhjb25zdCBBcHBVbml0JiBhLCBkb3Vi
bGUgYikKK3sKKyAgICByZXR1cm4gYS50b0RvdWJsZSgpICsgYjsKK30KKworaW5saW5lIEFwcFVu
aXQgb3BlcmF0b3IrKGNvbnN0IGludCBhLCBjb25zdCBBcHBVbml0JiBiKQoreworICAgIHJldHVy
biBBcHBVbml0KGEpICsgYjsKK30KKworaW5saW5lIGZsb2F0IG9wZXJhdG9yKyhjb25zdCBmbG9h
dCBhLCBjb25zdCBBcHBVbml0JiBiKQoreworICAgIHJldHVybiBhICsgYi50b0Zsb2F0KCk7Cit9
CisKK2lubGluZSBBcHBVbml0IG9wZXJhdG9yLShjb25zdCBBcHBVbml0JiBhLCBjb25zdCBBcHBV
bml0JiBiKQoreworICAgIEFwcFVuaXQgcmV0dXJuVmFsOworICAgIHJldHVyblZhbC5zZXRSYXdW
YWx1ZShhLnJhd1ZhbHVlKCkgLSBiLnJhd1ZhbHVlKCkpOworICAgIHJldHVybiByZXR1cm5WYWw7
Cit9CisKK2lubGluZSBBcHBVbml0IG9wZXJhdG9yLShjb25zdCBBcHBVbml0JiBhLCBpbnQgYikK
K3sKKyAgICByZXR1cm4gYSAtIEFwcFVuaXQoYik7Cit9CisKK2lubGluZSBmbG9hdCBvcGVyYXRv
ci0oY29uc3QgQXBwVW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gYS50b0Zsb2F0KCkg
LSBiOworfQorCitpbmxpbmUgQXBwVW5pdCBvcGVyYXRvci0oY29uc3QgaW50IGEsIGNvbnN0IEFw
cFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEFwcFVuaXQoYSkgLSBiOworfQorCitpbmxpbmUgZmxv
YXQgb3BlcmF0b3ItKGNvbnN0IGZsb2F0IGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAgcmV0
dXJuIGEgLSBiLnRvRmxvYXQoKTsKK30KKworaW5saW5lIEFwcFVuaXQgb3BlcmF0b3ItKGNvbnN0
IEFwcFVuaXQmIGEpCit7CisgICAgQXBwVW5pdCByZXR1cm5WYWw7CisgICAgcmV0dXJuVmFsLnNl
dFJhd1ZhbHVlKC1hLnJhd1ZhbHVlKCkpOworICAgIHJldHVybiByZXR1cm5WYWw7Cit9CisKK2lu
bGluZSBBcHBVbml0JiBvcGVyYXRvcis9KEFwcFVuaXQmIGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7
CisgICAgYSA9IGEgKyBiOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgQXBwVW5pdCYgb3Bl
cmF0b3IrPShBcHBVbml0JiBhLCBpbnQgYikKK3sKKyAgICBhID0gYSArIGI7CisgICAgcmV0dXJu
IGE7Cit9CisKK2lubGluZSBmbG9hdCYgb3BlcmF0b3IrPShmbG9hdCYgYSwgY29uc3QgQXBwVW5p
dCYgYikKK3sKKyAgICBhID0gYSArIGIudG9GbG9hdCgpOworICAgIHJldHVybiBhOworfQorCitp
bmxpbmUgQXBwVW5pdCYgb3BlcmF0b3ItPShBcHBVbml0JiBhLCBpbnQgYikKK3sKKyAgICBhID0g
YSAtIGI7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBBcHBVbml0JiBvcGVyYXRvci09KEFw
cFVuaXQmIGEsIGNvbnN0IEFwcFVuaXQmIGIpCit7CisgICAgYSA9IGEgLSBiOworICAgIHJldHVy
biBhOworfQorCitpbmxpbmUgZmxvYXQmIG9wZXJhdG9yLT0oZmxvYXQmIGEsIGNvbnN0IEFwcFVu
aXQmIGIpCit7CisgICAgYSA9IGEgLSBiLnRvRmxvYXQoKTsKKyAgICByZXR1cm4gYTsKK30KKwor
aW5saW5lIEFwcFVuaXQmIG9wZXJhdG9yKj0oQXBwVW5pdCYgYSwgaW50IGIpCit7CisgICAgYSA9
IGEgKiBiOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgQXBwVW5pdCYgb3BlcmF0b3IqPShB
cHBVbml0JiBhLCBmbG9hdCBiKQoreworICAgIGEgPSBhICogYjsKKyAgICByZXR1cm4gYTsKK30K
KworaW5saW5lIGludCBzbmFwU2l6ZVRvUGl4ZWwoQXBwVW5pdCBzaXplLCBBcHBVbml0IGxvY2F0
aW9uKSAKK3sKKyAgICByZXR1cm4gKGxvY2F0aW9uICsgc2l6ZSkucm91bmQoKSAtIGxvY2F0aW9u
LnJvdW5kKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEFwcFVu
aXRfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRQb2ludC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZpeGVkUG9p
bnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zp
eGVkUG9pbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNzEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGaXhlZFBv
aW50X2gKKyNkZWZpbmUgRml4ZWRQb2ludF9oCisKKyNpbmNsdWRlICJGaXhlZFNpemUuaCIKKyNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworI2lm
IFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPFFEYXRhU3RyZWFtPgorI2VuZGlmCisKKyNpZiBVU0Uo
Q0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkKK3R5cGVkZWYgc3RydWN0IENHUG9pbnQg
Q0dQb2ludDsKKyNlbmRpZgorCisKKyNpZiBPUyhEQVJXSU4pICYmICFQTEFURk9STShRVCkKKyNp
ZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwordHlwZWRlZiBz
dHJ1Y3QgQ0dQb2ludCBOU1BvaW50OworI2Vsc2UKK3R5cGVkZWYgc3RydWN0IF9OU1BvaW50IE5T
UG9pbnQ7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0lOKQordHlwZWRlZiBzdHJ1
Y3QgdGFnUE9JTlQgUE9JTlQ7Cit0eXBlZGVmIHN0cnVjdCB0YWdQT0lOVFMgUE9JTlRTOworI2Vs
aWYgUExBVEZPUk0oUVQpCitRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNzIFFQb2ludEY7CitRVF9F
TkRfTkFNRVNQQUNFCisjZWxpZiBQTEFURk9STShHVEspCit0eXBlZGVmIHN0cnVjdCBfR2RrUG9p
bnQgR2RrUG9pbnQ7CisjZWxpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJQb2ludDsKKyNlbGlm
IFBMQVRGT1JNKEVGTCkKK3R5cGVkZWYgc3RydWN0IF9FdmFzX1BvaW50IEV2YXNfUG9pbnQ7Cisj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKFdYKQorY2xhc3Mgd3hQb2ludDsKKyNlbmRpZgorCisjaWYg
UExBVEZPUk0oQlJFV01QKQordHlwZWRlZiBzdHJ1Y3QgX3BvaW50IEFFRVBvaW50OworI2VuZGlm
CisKKyNpZiBVU0UoU0tJQSkKK3N0cnVjdCBTa1BvaW50Oworc3RydWN0IFNrSVBvaW50OworI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRml4ZWRQb2ludCB7CitwdWJsaWM6
CisgICAgRml4ZWRQb2ludCgpIDogbV94KDApLCBtX3koMCkgeyB9CisgICAgRml4ZWRQb2ludChB
cHBVbml0IHgsIEFwcFVuaXQgeSkgOiBtX3goeCksIG1feSh5KSB7IH0KKyAgICBGaXhlZFBvaW50
KGNvbnN0IEludFBvaW50JiBwb2ludCkgOiBtX3gocG9pbnQueCgpKSwgbV95KHBvaW50LnkoKSkg
eyB9CisgICAgZXhwbGljaXQgRml4ZWRQb2ludChjb25zdCBGbG9hdFBvaW50JiBzaXplKSA6IG1f
eChzaXplLngoKSksIG1feShzaXplLnkoKSkgeyB9CisKKyAgICBzdGF0aWMgRml4ZWRQb2ludCB6
ZXJvKCkgeyByZXR1cm4gRml4ZWRQb2ludCgpOyB9CisKKyAgICBBcHBVbml0IHgoKSBjb25zdCB7
IHJldHVybiBtX3g7IH0KKyAgICBBcHBVbml0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KKwor
ICAgIHZvaWQgc2V0WChBcHBVbml0IHgpIHsgbV94ID0geDsgfQorICAgIHZvaWQgc2V0WShBcHBV
bml0IHkpIHsgbV95ID0geTsgfQorCisgICAgdm9pZCBtb3ZlKGNvbnN0IEZpeGVkU2l6ZSYgcykg
eyBtb3ZlKHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7IH0gCisgICAgdm9pZCBtb3ZlQnkoY29uc3Qg
Rml4ZWRQb2ludCYgb2Zmc2V0KSB7IG1vdmUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7IH0KKyAg
ICB2b2lkIG1vdmUoQXBwVW5pdCBkeCwgQXBwVW5pdCBkeSkgeyBtX3ggKz0gZHg7IG1feSArPSBk
eTsgfQorICAgIHZvaWQgc2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KQorICAgIHsKKyAgICAgICAg
bV94ICo9IHN4OworICAgICAgICBtX3kgKj0gc3k7CisgICAgfQorICAgIAorICAgIEZpeGVkUG9p
bnQgZXhwYW5kZWRUbyhjb25zdCBGaXhlZFBvaW50JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBGaXhlZFBvaW50KG1feCA+IG90aGVyLm1feCA/IG1feCA6IG90aGVyLm1feCwK
KyAgICAgICAgICAgIG1feSA+IG90aGVyLm1feSA/IG1feSA6IG90aGVyLm1feSk7CisgICAgfQor
CisgICAgRml4ZWRQb2ludCBzaHJ1bmtUbyhjb25zdCBGaXhlZFBvaW50JiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBGaXhlZFBvaW50KG1feCA8IG90aGVyLm1feCA/IG1feCA6
IG90aGVyLm1feCwKKyAgICAgICAgICAgIG1feSA8IG90aGVyLm1feSA/IG1feSA6IG90aGVyLm1f
eSk7CisgICAgfQorCisgICAgdm9pZCBjbGFtcE5lZ2F0aXZlVG9aZXJvKCkKKyAgICB7CisgICAg
ICAgICp0aGlzID0gZXhwYW5kZWRUbyh6ZXJvKCkpOworICAgIH0KKworICAgIEZpeGVkUG9pbnQg
dHJhbnNwb3NlZFBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGaXhlZFBvaW50
KG1feSwgbV94KTsKKyAgICB9CisKKyNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJP
TUlVTSkKKyAgICBleHBsaWNpdCBGaXhlZFBvaW50KGNvbnN0IENHUG9pbnQmKTsgLy8gZG9uJ3Qg
ZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKKyAgICBvcGVyYXRvciBDR1BvaW50
KCkgY29uc3Q7CisjZW5kaWYKKworI2lmIE9TKERBUldJTikgJiYgIVBMQVRGT1JNKFFUKSAmJiAh
ZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykKKyAgICBl
eHBsaWNpdCBGaXhlZFBvaW50KGNvbnN0IE5TUG9pbnQmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBs
aWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKKyAgICBvcGVyYXRvciBOU1BvaW50KCkgY29uc3Q7Cisj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBGaXhlZFBvaW50KGNvbnN0IFBPSU5UJik7
CisgICAgb3BlcmF0b3IgUE9JTlQoKSBjb25zdDsKKyAgICBGaXhlZFBvaW50KGNvbnN0IFBPSU5U
UyYpOworICAgIG9wZXJhdG9yIFBPSU5UUygpIGNvbnN0OworI2VsaWYgUExBVEZPUk0oUVQpCisg
ICAgRml4ZWRQb2ludChjb25zdCBRUG9pbnRGJik7CisgICAgb3BlcmF0b3IgUVBvaW50RigpIGNv
bnN0OworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIEZpeGVkUG9pbnQoY29uc3QgR2RrUG9pbnQm
KTsKKyAgICBvcGVyYXRvciBHZGtQb2ludCgpIGNvbnN0OworI2VsaWYgUExBVEZPUk0oSEFJS1Up
CisgICAgZXhwbGljaXQgRml4ZWRQb2ludChjb25zdCBCUG9pbnQmKTsKKyAgICBvcGVyYXRvciBC
UG9pbnQoKSBjb25zdDsKKyNlbGlmIFBMQVRGT1JNKEVGTCkKKyAgICBleHBsaWNpdCBGaXhlZFBv
aW50KGNvbnN0IEV2YXNfUG9pbnQmKTsKKyAgICBvcGVyYXRvciBFdmFzX1BvaW50KCkgY29uc3Q7
CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdYKQorICAgIEZpeGVkUG9pbnQoY29uc3Qgd3hQb2lu
dCYpOworICAgIG9wZXJhdG9yIHd4UG9pbnQoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgUExBVEZP
Uk0oQlJFV01QKQorICAgIEZpeGVkUG9pbnQoY29uc3QgQUVFUG9pbnQmKTsKKyAgICBvcGVyYXRv
ciBBRUVQb2ludCgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBVU0UoU0tJQSkKKyAgICBGaXhlZFBv
aW50KGNvbnN0IFNrUG9pbnQmKTsKKyAgICBvcGVyYXRvciBTa0lQb2ludCgpIGNvbnN0OworICAg
IG9wZXJhdG9yIFNrUG9pbnQoKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEFwcFVu
aXQgbV94LCBtX3k7Cit9OworCitpbmxpbmUgRml4ZWRQb2ludCYgb3BlcmF0b3IrPShGaXhlZFBv
aW50JiBhLCBjb25zdCBGaXhlZFNpemUmIGIpCit7CisgICAgYS5tb3ZlKGIud2lkdGgoKSwgYi5o
ZWlnaHQoKSk7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBGaXhlZFBvaW50JiBvcGVyYXRv
ci09KEZpeGVkUG9pbnQmIGEsIGNvbnN0IEZpeGVkU2l6ZSYgYikKK3sKKyAgICBhLm1vdmUoLWIu
d2lkdGgoKSwgLWIuaGVpZ2h0KCkpOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgRml4ZWRQ
b2ludCBvcGVyYXRvcisoY29uc3QgRml4ZWRQb2ludCYgYSwgY29uc3QgRml4ZWRTaXplJiBiKQor
eworICAgIHJldHVybiBGaXhlZFBvaW50KGEueCgpICsgYi53aWR0aCgpLCBhLnkoKSArIGIuaGVp
Z2h0KCkpOworfQorCitpbmxpbmUgRml4ZWRQb2ludCBvcGVyYXRvcisoY29uc3QgRml4ZWRQb2lu
dCYgYSwgY29uc3QgRml4ZWRQb2ludCYgYikKK3sKKyAgICByZXR1cm4gRml4ZWRQb2ludChhLngo
KSArIGIueCgpLCBhLnkoKSArIGIueSgpKTsKK30KKworaW5saW5lIEZpeGVkU2l6ZSBvcGVyYXRv
ci0oY29uc3QgRml4ZWRQb2ludCYgYSwgY29uc3QgRml4ZWRQb2ludCYgYikKK3sKKyAgICByZXR1
cm4gRml4ZWRTaXplKGEueCgpIC0gYi54KCksIGEueSgpIC0gYi55KCkpOworfQorCitpbmxpbmUg
Rml4ZWRQb2ludCBvcGVyYXRvci0oY29uc3QgRml4ZWRQb2ludCYgYSwgY29uc3QgRml4ZWRTaXpl
JiBiKQoreworICAgIHJldHVybiBGaXhlZFBvaW50KGEueCgpIC0gYi53aWR0aCgpLCBhLnkoKSAt
IGIuaGVpZ2h0KCkpOworfQorCitpbmxpbmUgRml4ZWRQb2ludCBvcGVyYXRvci0oY29uc3QgRml4
ZWRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuIEZpeGVkUG9pbnQoLXBvaW50LngoKSwgLXBv
aW50LnkoKSk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRml4ZWRQb2ludCYg
YSwgY29uc3QgRml4ZWRQb2ludCYgYikKK3sKKyAgICByZXR1cm4gYS54KCkgPT0gYi54KCkgJiYg
YS55KCkgPT0gYi55KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRml4ZWRQ
b2ludCYgYSwgY29uc3QgRml4ZWRQb2ludCYgYikKK3sKKyAgICByZXR1cm4gYS54KCkgIT0gYi54
KCkgfHwgYS55KCkgIT0gYi55KCk7Cit9CisKK2lubGluZSBGaXhlZFBvaW50IHRvUG9pbnQoY29u
c3QgRml4ZWRTaXplJiBzaXplKQoreworICAgIHJldHVybiBGaXhlZFBvaW50KHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSk7Cit9CisKK2lubGluZSBGaXhlZFNpemUgdG9TaXplKGNvbnN0IEZp
eGVkUG9pbnQmIGEpCit7CisgICAgcmV0dXJuIEZpeGVkU2l6ZShhLngoKSwgYS55KCkpOworfQor
CitpbmxpbmUgSW50UG9pbnQgZmxvb3JlZEludFBvaW50KGNvbnN0IEZpeGVkUG9pbnQmIHBvaW50
KQoreworICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCkudG9JbnQoKSwgcG9pbnQueSgpLnRv
SW50KCkpOworfQorCitpbmxpbmUgSW50UG9pbnQgcm91bmRlZEludFBvaW50KGNvbnN0IEZpeGVk
UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCkucm91bmQoKSwg
cG9pbnQueSgpLnJvdW5kKCkpOworfQorCitpbmxpbmUgSW50UG9pbnQgY2VpbGVkSW50UG9pbnQo
Y29uc3QgRml4ZWRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuIEludFBvaW50KHBvaW50Lngo
KS5jZWlsKCksIHBvaW50LnkoKS5jZWlsKCkpOworfQorCisjaWYgUExBVEZPUk0oUVQpCitpbmxp
bmUgUURhdGFTdHJlYW0mIG9wZXJhdG9yPDwoUURhdGFTdHJlYW0mIHN0cmVhbSwgY29uc3QgRml4
ZWRQb2ludCYgcG9pbnQpCit7CisgICAgc3RyZWFtIDw8IHBvaW50LngoKS50b0Zsb2F0KCkgPDwg
cG9pbnQueSgpLnRvRmxvYXQoKTsKKyAgICByZXR1cm4gc3RyZWFtOworfQorCitpbmxpbmUgUURh
dGFTdHJlYW0mIG9wZXJhdG9yPj4oUURhdGFTdHJlYW0mIHN0cmVhbSwgRml4ZWRQb2ludCYgcG9p
bnQpCit7CisgICAgZmxvYXQgeCwgeTsKKyAgICBzdHJlYW0gPj4geCA+PiB5OworICAgIHBvaW50
LnNldFgoeCk7CisgICAgcG9pbnQuc2V0WSh5KTsKKyAgICByZXR1cm4gc3RyZWFtOworfQorI2Vu
ZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZpeGVkUG9pbnRfaApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRSZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3QuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRS
ZWN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkZpeGVkUmVjdC5oIgorCisjaW5jbHVkZSAiQXBwVW5pdC5oIgorI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitGaXhlZFJlY3Q6OkZpeGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCisgICAgOiBt
X2xvY2F0aW9uKEZpeGVkUG9pbnQoci54KCksIHIueSgpKSkKKyAgICAsIG1fc2l6ZShGaXhlZFNp
emUoci53aWR0aCgpLCByLmhlaWdodCgpKSkKK3sKK30KKworYm9vbCBGaXhlZFJlY3Q6OmludGVy
c2VjdHMoY29uc3QgRml4ZWRSZWN0JiBvdGhlcikgY29uc3QKK3sKKyAgICAvLyBDaGVja2luZyBl
bXB0aW5lc3MgaGFuZGxlcyBuZWdhdGl2ZSB3aWR0aHMgYXMgd2VsbCBhcyB6ZXJvLgorICAgIHJl
dHVybiAhaXNFbXB0eSgpICYmICFvdGhlci5pc0VtcHR5KCkKKyAgICAgICAgJiYgeCgpIDwgb3Ro
ZXIubWF4WCgpICYmIG90aGVyLngoKSA8IG1heFgoKQorICAgICAgICAmJiB5KCkgPCBvdGhlci5t
YXhZKCkgJiYgb3RoZXIueSgpIDwgbWF4WSgpOworfQorCitib29sIEZpeGVkUmVjdDo6Y29udGFp
bnMoY29uc3QgRml4ZWRSZWN0JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4geCgpIDw9IG90
aGVyLngoKSAmJiBtYXhYKCkgPj0gb3RoZXIubWF4WCgpCisgICAgICAgICYmIHkoKSA8PSBvdGhl
ci55KCkgJiYgbWF4WSgpID49IG90aGVyLm1heFkoKTsKK30KKwordm9pZCBGaXhlZFJlY3Q6Omlu
dGVyc2VjdChjb25zdCBGaXhlZFJlY3QmIG90aGVyKQoreworICAgIEFwcFVuaXQgbmV3WCA9IHN0
ZDo6bWF4KHgoKSwgb3RoZXIueCgpKTsKKyAgICBBcHBVbml0IG5ld1kgPSBzdGQ6Om1heCh5KCks
IG90aGVyLnkoKSk7CisgICAgQXBwVW5pdCBuZXdNYXhYID0gc3RkOjptaW4obWF4WCgpLCBvdGhl
ci5tYXhYKCkpOworICAgIEFwcFVuaXQgbmV3TWF4WSA9IHN0ZDo6bWluKG1heFkoKSwgb3RoZXIu
bWF4WSgpKTsKKworICAgIC8vIFJldHVybiBhIGNsZWFuIGVtcHR5IHJlY3RhbmdsZSBmb3Igbm9u
LWludGVyc2VjdGluZyBjYXNlcy4KKyAgICBpZiAobmV3WCA+PSBuZXdNYXhYIHx8IG5ld1kgPj0g
bmV3TWF4WSkgeworICAgICAgICBuZXdYID0gMDsKKyAgICAgICAgbmV3WSA9IDA7CisgICAgICAg
IG5ld01heFggPSAwOworICAgICAgICBuZXdNYXhZID0gMDsKKyAgICB9CisKKyAgICBtX2xvY2F0
aW9uLnNldFgobmV3WCk7CisgICAgbV9sb2NhdGlvbi5zZXRZKG5ld1kpOworICAgIG1fc2l6ZS5z
ZXRXaWR0aChuZXdNYXhYIC0gbmV3WCk7CisgICAgbV9zaXplLnNldEhlaWdodChuZXdNYXhZIC0g
bmV3WSk7Cit9CisKK3ZvaWQgRml4ZWRSZWN0Ojp1bml0ZShjb25zdCBGaXhlZFJlY3QmIG90aGVy
KQoreworICAgIC8vIEhhbmRsZSBlbXB0eSBzcGVjaWFsIGNhc2VzIGZpcnN0LgorICAgIGlmIChv
dGhlci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoaXNFbXB0eSgpKSB7Cisg
ICAgICAgICp0aGlzID0gb3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBcHBV
bml0IG5ld1ggPSBzdGQ6Om1pbih4KCksIG90aGVyLngoKSk7CisgICAgQXBwVW5pdCBuZXdZID0g
c3RkOjptaW4oeSgpLCBvdGhlci55KCkpOworICAgIEFwcFVuaXQgbmV3TWF4WCA9IHN0ZDo6bWF4
KG1heFgoKSwgb3RoZXIubWF4WCgpKTsKKyAgICBBcHBVbml0IG5ld01heFkgPSBzdGQ6Om1heCht
YXhZKCksIG90aGVyLm1heFkoKSk7CisKKyAgICBtX2xvY2F0aW9uLnNldFgobmV3WCk7CisgICAg
bV9sb2NhdGlvbi5zZXRZKG5ld1kpOworICAgIG1fc2l6ZS5zZXRXaWR0aChuZXdNYXhYIC0gbmV3
WCk7CisgICAgbV9zaXplLnNldEhlaWdodChuZXdNYXhZIC0gbmV3WSk7Cit9CisKK3ZvaWQgRml4
ZWRSZWN0Ojp1bml0ZUlmTm9uWmVybyhjb25zdCBGaXhlZFJlY3QmIG90aGVyKQoreworICAgIC8v
IEhhbmRsZSBlbXB0eSBzcGVjaWFsIGNhc2VzIGZpcnN0LgorICAgIGlmICghb3RoZXIud2lkdGgo
KSAmJiAhb3RoZXIuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXdpZHRoKCkg
JiYgIWhlaWdodCgpKSB7CisgICAgICAgICp0aGlzID0gb3RoZXI7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBcHBVbml0IG5ld1ggPSBzdGQ6Om1pbih4KCksIG90aGVyLngoKSk7Cisg
ICAgQXBwVW5pdCBuZXdZID0gc3RkOjptaW4oeSgpLCBvdGhlci55KCkpOworICAgIEFwcFVuaXQg
bmV3TWF4WCA9IHN0ZDo6bWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKTsKKyAgICBBcHBVbml0IG5l
d01heFkgPSBzdGQ6Om1heChtYXhZKCksIG90aGVyLm1heFkoKSk7CisKKyAgICBtX2xvY2F0aW9u
LnNldFgobmV3WCk7CisgICAgbV9sb2NhdGlvbi5zZXRZKG5ld1kpOworICAgIG1fc2l6ZS5zZXRX
aWR0aChuZXdNYXhYIC0gbmV3WCk7CisgICAgbV9zaXplLnNldEhlaWdodChuZXdNYXhZIC0gbmV3
WSk7Cit9CisKK3ZvaWQgRml4ZWRSZWN0OjpzY2FsZShmbG9hdCBzKQoreworICAgIG1fbG9jYXRp
b24uc2V0WCh4KCkgKiBzKTsKKyAgICBtX2xvY2F0aW9uLnNldFkoeSgpICogcyk7CisgICAgbV9z
aXplLnNldFdpZHRoKHdpZHRoKCkgKiBzKTsKKyAgICBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCgp
ICogcyk7Cit9CisKK0ZpeGVkUmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEZpeGVkUmVjdD4m
IHJlY3RzKQoreworICAgIEZpeGVkUmVjdCByZXN1bHQ7CisKKyAgICBzaXplX3QgY291bnQgPSBy
ZWN0cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAg
ICAgICByZXN1bHQudW5pdGUocmVjdHNbaV0pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
SW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEZpeGVkUmVjdCYgcmVjdCkKK3sKKyAgICBm
bG9hdCB4ID0gZmxvb3JmKHJlY3QueCgpLnRvRmxvYXQoKSk7CisgICAgZmxvYXQgeSA9IGZsb29y
ZihyZWN0LnkoKS50b0Zsb2F0KCkpOworICAgIGZsb2F0IHdpZHRoID0gY2VpbGYocmVjdC5tYXhY
KCkudG9GbG9hdCgpKSAtIHg7CisgICAgZmxvYXQgaGVpZ2h0ID0gY2VpbGYocmVjdC5tYXhZKCku
dG9GbG9hdCgpKSAtIHk7CisKKyAgICByZXR1cm4gSW50UmVjdChjbGFtcFRvSW50ZWdlcih4KSwg
Y2xhbXBUb0ludGVnZXIoeSksIAorICAgICAgICAgICAgICAgICAgIGNsYW1wVG9JbnRlZ2VyKHdp
ZHRoKSwgY2xhbXBUb0ludGVnZXIoaGVpZ2h0KSk7Cit9CisKK0ZpeGVkUmVjdCBlbmNsb3NpbmdG
aXhlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBGaXhlZFJlY3Qo
cmVjdC54KCksIHJlY3QueSgpLAorICAgICAgICAgICAgICAgICAgICAgcmVjdC5tYXhYKCkgLSBy
ZWN0LngoKSArIEFwcFVuaXQ6OmVwc2lsb24oKSwKKyAgICAgICAgICAgICAgICAgICAgIHJlY3Qu
bWF4WSgpIC0gcmVjdC55KCkgKyBBcHBVbml0OjplcHNpbG9uKCkpOworfQorCitJbnRSZWN0IHBp
eGVsU25hcHBlZEludFJlY3QoY29uc3QgRml4ZWRSZWN0JiByZWN0KQoreworICAgIEludFBvaW50
IHJvdW5kZWRMb2NhdGlvbiA9IHJvdW5kZWRJbnRQb2ludChyZWN0LmxvY2F0aW9uKCkpOworICAg
IHJldHVybiBJbnRSZWN0KHJvdW5kZWRMb2NhdGlvbiwgSW50U2l6ZSgocmVjdC54KCkgKyByZWN0
LndpZHRoKCkpLnJvdW5kKCkgLSByb3VuZGVkTG9jYXRpb24ueCgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVjdC55KCkgKyByZWN0LmhlaWdodCgpKS5y
b3VuZCgpIC0gcm91bmRlZExvY2F0aW9uLnkoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3Qu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZpeGVk
UmVjdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZpeGVkUmVjdF9o
CisjZGVmaW5lIEZpeGVkUmVjdF9oCisKKyNpbmNsdWRlICJGaXhlZFBvaW50LmgiCisjaW5jbHVk
ZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIFVTRShDRykgfHwg
VVNFKFNLSUFfT05fTUFDX0NIUk9NSVVNKQordHlwZWRlZiBzdHJ1Y3QgQ0dSZWN0IENHUmVjdDsK
KyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIE9T
KERBUldJTikpIHx8IChQTEFURk9STShRVCkgJiYgVVNFKFFUS0lUKSkKKyNpZmRlZiBOU0dFT01F
VFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwordHlwZWRlZiBzdHJ1Y3QgQ0dSZWN0
IE5TUmVjdDsKKyNlbHNlCit0eXBlZGVmIHN0cnVjdCBfTlNSZWN0IE5TUmVjdDsKKyNlbmRpZgor
I2VuZGlmCisKKyNpZiBQTEFURk9STShRVCkKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUVJl
Y3RGOworUVRfRU5EX05BTUVTUEFDRQorI2VsaWYgUExBVEZPUk0oR1RLKQorI2lmZGVmIEdUS19B
UElfVkVSU0lPTl8yCit0eXBlZGVmIHN0cnVjdCBfR2RrUmVjdGFuZ2xlIEdka1JlY3RhbmdsZTsK
KyNlbmRpZgorI2VsaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCUmVjdDsKKyNlbGlmIFBMQVRG
T1JNKEVGTCkKK3R5cGVkZWYgc3RydWN0IF9FaW5hX1JlY3RhbmdsZSBFaW5hX1JlY3RhbmdsZTsK
KyNlbmRpZgorCisjaWYgVVNFKENBSVJPKQordHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3JlY3Rhbmds
ZV9pbnQgY2Fpcm9fcmVjdGFuZ2xlX2ludF90OworI2VuZGlmCisKKyNpZiBQTEFURk9STShXWCkK
K2NsYXNzIHd4UmVjdDsKKyNlbmRpZgorCisjaWYgVVNFKFNLSUEpCitzdHJ1Y3QgU2tSZWN0Owor
c3RydWN0IFNrSVJlY3Q7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBG
bG9hdFJlY3Q7CisKK2NsYXNzIEZpeGVkUmVjdCB7CitwdWJsaWM6CisgICAgRml4ZWRSZWN0KCkg
eyB9CisgICAgRml4ZWRSZWN0KGNvbnN0IEZpeGVkUG9pbnQmIGxvY2F0aW9uLCBjb25zdCBGaXhl
ZFNpemUmIHNpemUpCisgICAgICAgIDogbV9sb2NhdGlvbihsb2NhdGlvbiksIG1fc2l6ZShzaXpl
KSB7IH0KKyAgICBGaXhlZFJlY3QoQXBwVW5pdCB4LCBBcHBVbml0IHksIEFwcFVuaXQgd2lkdGgs
IEFwcFVuaXQgaGVpZ2h0KQorICAgICAgICA6IG1fbG9jYXRpb24oRml4ZWRQb2ludCh4LCB5KSks
IG1fc2l6ZShGaXhlZFNpemUod2lkdGgsIGhlaWdodCkpIHsgfQorICAgIEZpeGVkUmVjdChjb25z
dCBGbG9hdFBvaW50JiBsb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6
IG1fbG9jYXRpb24obG9jYXRpb24pLCBtX3NpemUoc2l6ZSkgeyB9CisgICAgRml4ZWRSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpIDogbV9sb2NhdGlvbihyZWN0LmxvY2F0aW9uKCkpLCBtX3NpemUo
cmVjdC5zaXplKCkpIHsgfQorCisgICAgZXhwbGljaXQgRml4ZWRSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQorICAgICAg
ICAKKyAgICBGaXhlZFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsg
fQorICAgIEZpeGVkU2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICB2
b2lkIHNldExvY2F0aW9uKGNvbnN0IEZpeGVkUG9pbnQmIGxvY2F0aW9uKSB7IG1fbG9jYXRpb24g
PSBsb2NhdGlvbjsgfQorICAgIHZvaWQgc2V0U2l6ZShjb25zdCBGaXhlZFNpemUmIHNpemUpIHsg
bV9zaXplID0gc2l6ZTsgfQorCisgICAgQXBwVW5pdCB4KCkgY29uc3QgeyByZXR1cm4gbV9sb2Nh
dGlvbi54KCk7IH0KKyAgICBBcHBVbml0IHkoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uLnko
KTsgfQorICAgIEFwcFVuaXQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIHgoKSArIHdpZHRoKCk7IH0K
KyAgICBBcHBVbml0IG1heFkoKSBjb25zdCB7IHJldHVybiB5KCkgKyBoZWlnaHQoKTsgfQorICAg
IEFwcFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQorICAgIEFw
cFVuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9zaXplLmhlaWdodCgpOyB9CisKKyAgICB2
b2lkIHNldFgoQXBwVW5pdCB4KSB7IG1fbG9jYXRpb24uc2V0WCh4KTsgfQorICAgIHZvaWQgc2V0
WShBcHBVbml0IHkpIHsgbV9sb2NhdGlvbi5zZXRZKHkpOyB9CisgICAgdm9pZCBzZXRXaWR0aChB
cHBVbml0IHdpZHRoKSB7IG1fc2l6ZS5zZXRXaWR0aCh3aWR0aCk7IH0KKyAgICB2b2lkIHNldEhl
aWdodChBcHBVbml0IGhlaWdodCkgeyBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCk7IH0KKworICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KKworICAg
IC8vIE5PVEU6IFRoZSByZXN1bHQgaXMgcm91bmRlZCB0byBpbnRlZ2VyIHZhbHVlcywgYW5kIHRo
dXMgbWF5IGJlIG5vdCB0aGUgZXhhY3QKKyAgICAvLyBjZW50ZXIgcG9pbnQuCisgICAgRml4ZWRQ
b2ludCBjZW50ZXIoKSBjb25zdCB7IHJldHVybiBGaXhlZFBvaW50KHgoKSArIHdpZHRoKCkgLyAy
LCB5KCkgKyBoZWlnaHQoKSAvIDIpOyB9CisKKyAgICB2b2lkIG1vdmUoY29uc3QgRml4ZWRTaXpl
JiBzaXplKSB7IG1fbG9jYXRpb24gKz0gc2l6ZTsgfSAKKyAgICB2b2lkIG1vdmVCeShjb25zdCBG
aXhlZFBvaW50JiBvZmZzZXQpIHsgbV9sb2NhdGlvbi5tb3ZlKG9mZnNldC54KCksIG9mZnNldC55
KCkpOyB9CisgICAgdm9pZCBtb3ZlKEFwcFVuaXQgZHgsIEFwcFVuaXQgZHkpIHsgbV9sb2NhdGlv
bi5tb3ZlKGR4LCBkeSk7IH0gCisKKyAgICB2b2lkIGV4cGFuZChjb25zdCBGaXhlZFNpemUmIHNp
emUpIHsgbV9zaXplICs9IHNpemU7IH0KKyAgICB2b2lkIGV4cGFuZChBcHBVbml0IGR3LCBBcHBV
bml0IGRoKSB7IG1fc2l6ZS5leHBhbmQoZHcsIGRoKTsgfQorICAgIHZvaWQgY29udHJhY3QoY29u
c3QgRml4ZWRTaXplJiBzaXplKSB7IG1fc2l6ZSAtPSBzaXplOyB9CisgICAgdm9pZCBjb250cmFj
dChBcHBVbml0IGR3LCBBcHBVbml0IGRoKSB7IG1fc2l6ZS5leHBhbmQoLWR3LCAtZGgpOyB9CisK
KyAgICB2b2lkIHNoaWZ0WEVkZ2VUbyhBcHBVbml0IGVkZ2UpCisgICAgeworICAgICAgICBBcHBV
bml0IGRlbHRhID0gZWRnZSAtIHgoKTsKKyAgICAgICAgc2V0WChlZGdlKTsKKyAgICAgICAgc2V0
V2lkdGgoc3RkOjptYXg8QXBwVW5pdD4oMCwgd2lkdGgoKSAtIGRlbHRhKSk7CisgICAgfQorICAg
IHZvaWQgc2hpZnRNYXhYRWRnZVRvKEFwcFVuaXQgZWRnZSkKKyAgICB7CisgICAgICAgIEFwcFVu
aXQgZGVsdGEgPSBlZGdlIC0gbWF4WCgpOworICAgICAgICBzZXRXaWR0aChzdGQ6Om1heDxBcHBV
bml0PigwLCB3aWR0aCgpICsgZGVsdGEpKTsKKyAgICB9CisgICAgdm9pZCBzaGlmdFlFZGdlVG8o
QXBwVW5pdCBlZGdlKQorICAgIHsKKyAgICAgICAgQXBwVW5pdCBkZWx0YSA9IGVkZ2UgLSB5KCk7
CisgICAgICAgIHNldFkoZWRnZSk7CisgICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxBcHBVbml0
PigwLCBoZWlnaHQoKSAtIGRlbHRhKSk7CisgICAgfQorICAgIHZvaWQgc2hpZnRNYXhZRWRnZVRv
KEFwcFVuaXQgZWRnZSkKKyAgICB7CisgICAgICAgIEFwcFVuaXQgZGVsdGEgPSBlZGdlIC0gbWF4
WSgpOworICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXg8QXBwVW5pdD4oMCwgaGVpZ2h0KCkgKyBk
ZWx0YSkpOworICAgIH0KKworICAgIEZpeGVkUG9pbnQgbWluWE1pbllDb3JuZXIoKSBjb25zdCB7
IHJldHVybiBtX2xvY2F0aW9uOyB9IC8vIHR5cGljYWxseSB0b3BMZWZ0CisgICAgRml4ZWRQb2lu
dCBtYXhYTWluWUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEZpeGVkUG9pbnQobV9sb2NhdGlvbi54
KCkgKyBtX3NpemUud2lkdGgoKSwgbV9sb2NhdGlvbi55KCkpOyB9IC8vIHR5cGljYWxseSB0b3BS
aWdodAorICAgIEZpeGVkUG9pbnQgbWluWE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBGaXhl
ZFBvaW50KG1fbG9jYXRpb24ueCgpLCBtX2xvY2F0aW9uLnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7
IH0gLy8gdHlwaWNhbGx5IGJvdHRvbUxlZnQKKyAgICBGaXhlZFBvaW50IG1heFhNYXhZQ29ybmVy
KCkgY29uc3QgeyByZXR1cm4gRml4ZWRQb2ludChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0
aCgpLCBtX2xvY2F0aW9uLnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJv
dHRvbVJpZ2h0CisgICAgCisgICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IEZpeGVkUmVjdCYpIGNv
bnN0OworICAgIGJvb2wgY29udGFpbnMoY29uc3QgRml4ZWRSZWN0JikgY29uc3Q7CisKKyAgICAv
LyBUaGlzIGNoZWNrcyB0byBzZWUgaWYgdGhlIHJlY3QgY29udGFpbnMgeCx5IGluIHRoZSB0cmFk
aXRpb25hbCBzZW5zZS4KKyAgICAvLyBFcXVpdmFsZW50IHRvIGNoZWNraW5nIGlmIHRoZSByZWN0
IGNvbnRhaW5zIGEgMXgxIHJlY3QgYmVsb3cgYW5kIHRvIHRoZSByaWdodCBvZiAocHgscHkpLgor
ICAgIGJvb2wgY29udGFpbnMoQXBwVW5pdCBweCwgQXBwVW5pdCBweSkgY29uc3QKKyAgICAgICAg
eyByZXR1cm4gcHggPj0geCgpICYmIHB4IDwgbWF4WCgpICYmIHB5ID49IHkoKSAmJiBweSA8IG1h
eFkoKTsgfQorICAgIGJvb2wgY29udGFpbnMoY29uc3QgRml4ZWRQb2ludCYgcG9pbnQpIGNvbnN0
IHsgcmV0dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQorCisgICAgdm9pZCBp
bnRlcnNlY3QoY29uc3QgRml4ZWRSZWN0Jik7CisgICAgdm9pZCB1bml0ZShjb25zdCBGaXhlZFJl
Y3QmKTsKKyAgICB2b2lkIHVuaXRlSWZOb25aZXJvKGNvbnN0IEZpeGVkUmVjdCYpOworCisgICAg
dm9pZCBpbmZsYXRlWChBcHBVbml0IGR4KQorICAgIHsKKyAgICAgICAgbV9sb2NhdGlvbi5zZXRY
KG1fbG9jYXRpb24ueCgpIC0gZHgpOworICAgICAgICBtX3NpemUuc2V0V2lkdGgobV9zaXplLndp
ZHRoKCkgKyBkeCArIGR4KTsKKyAgICB9CisgICAgdm9pZCBpbmZsYXRlWShBcHBVbml0IGR5KQor
ICAgIHsKKyAgICAgICAgbV9sb2NhdGlvbi5zZXRZKG1fbG9jYXRpb24ueSgpIC0gZHkpOworICAg
ICAgICBtX3NpemUuc2V0SGVpZ2h0KG1fc2l6ZS5oZWlnaHQoKSArIGR5ICsgZHkpOworICAgIH0K
KyAgICB2b2lkIGluZmxhdGUoQXBwVW5pdCBkKSB7IGluZmxhdGVYKGQpOyBpbmZsYXRlWShkKTsg
fQorICAgIHZvaWQgc2NhbGUoZmxvYXQgcyk7CisKKyAgICBGaXhlZFJlY3QgdHJhbnNwb3NlZFJl
Y3QoKSBjb25zdCB7IHJldHVybiBGaXhlZFJlY3QobV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQo
KSwgbV9zaXplLnRyYW5zcG9zZWRTaXplKCkpOyB9CisKKyNpZiBQTEFURk9STShXWCkKKyAgICBG
aXhlZFJlY3QoY29uc3Qgd3hSZWN0Jik7CisgICAgb3BlcmF0b3Igd3hSZWN0KCkgY29uc3Q7Cisj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKFFUKQorICAgIEZpeGVkUmVjdChjb25zdCBRUmVjdEYmKTsK
KyAgICBvcGVyYXRvciBRUmVjdEYoKSBjb25zdDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyNpZmRl
ZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIEZpeGVkUmVjdChjb25zdCBHZGtSZWN0YW5nbGUmKTsK
KyAgICBvcGVyYXRvciBHZGtSZWN0YW5nbGUoKSBjb25zdDsKKyNlbmRpZgorI2VsaWYgUExBVEZP
Uk0oSEFJS1UpCisgICAgZXhwbGljaXQgRml4ZWRSZWN0KGNvbnN0IEJSZWN0Jik7CisgICAgb3Bl
cmF0b3IgQlJlY3QoKSBjb25zdDsKKyNlbGlmIFBMQVRGT1JNKEVGTCkKKyAgICBleHBsaWNpdCBG
aXhlZFJlY3QoY29uc3QgRWluYV9SZWN0YW5nbGUmKTsKKyAgICBvcGVyYXRvciBFaW5hX1JlY3Rh
bmdsZSgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBVU0UoQ0FJUk8pCisgICAgRml4ZWRSZWN0KGNv
bnN0IGNhaXJvX3JlY3RhbmdsZV9pbnRfdCYpOworICAgIG9wZXJhdG9yIGNhaXJvX3JlY3Rhbmds
ZV9pbnRfdCgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01B
Q19DSFJPTUlVTSkKKyAgICBGaXhlZFJlY3QoY29uc3QgQ0dSZWN0Jik7CisgICAgb3BlcmF0b3Ig
Q0dSZWN0KCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFVTRShTS0lBKQorICAgIEZpeGVkUmVjdChj
b25zdCBTa1JlY3QmKTsKKyAgICBvcGVyYXRvciBTa1JlY3QoKSBjb25zdDsKKyAgICBvcGVyYXRv
ciBTa0lSZWN0KCkgY29uc3Q7CisjZW5kaWYKKworI2lmIChQTEFURk9STShNQUMpICYmICFkZWZp
bmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTKSkgXAorICAgICAg
ICB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikpICB8fCAoUExBVEZPUk0oUVQp
ICYmIFVTRShRVEtJVCkpCisgICAgRml4ZWRSZWN0KGNvbnN0IE5TUmVjdCYpOworICAgIG9wZXJh
dG9yIE5TUmVjdCgpIGNvbnN0OworI2VuZGlmCisKKyAgICBzdGF0aWMgRml4ZWRSZWN0IGluZmlu
aXRlUmVjdCgpIHtyZXR1cm4gRml4ZWRSZWN0KEFwcFVuaXQ6Om1pbigpIC8gMiwgQXBwVW5pdDo6
bWluKCkgLyAyLCBBcHBVbml0OjptYXgoKSwgQXBwVW5pdDo6bWF4KCkpOyB9CisKK3ByaXZhdGU6
CisgICAgRml4ZWRQb2ludCBtX2xvY2F0aW9uOworICAgIEZpeGVkU2l6ZSBtX3NpemU7Cit9Owor
CitpbmxpbmUgRml4ZWRSZWN0IGludGVyc2VjdGlvbihjb25zdCBGaXhlZFJlY3QmIGEsIGNvbnN0
IEZpeGVkUmVjdCYgYikKK3sKKyAgICBGaXhlZFJlY3QgYyA9IGE7CisgICAgYy5pbnRlcnNlY3Qo
Yik7CisgICAgcmV0dXJuIGM7Cit9CisKK2lubGluZSBGaXhlZFJlY3QgdW5pb25SZWN0KGNvbnN0
IEZpeGVkUmVjdCYgYSwgY29uc3QgRml4ZWRSZWN0JiBiKQoreworICAgIEZpeGVkUmVjdCBjID0g
YTsKKyAgICBjLnVuaXRlKGIpOworICAgIHJldHVybiBjOworfQorCitGaXhlZFJlY3QgdW5pb25S
ZWN0KGNvbnN0IFZlY3RvcjxGaXhlZFJlY3Q+Jik7CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgRml4ZWRSZWN0JiBhLCBjb25zdCBGaXhlZFJlY3QmIGIpCit7CisgICAgcmV0dXJuIGEu
bG9jYXRpb24oKSA9PSBiLmxvY2F0aW9uKCkgJiYgYS5zaXplKCkgPT0gYi5zaXplKCk7Cit9CisK
K2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRml4ZWRSZWN0JiBhLCBjb25zdCBGaXhlZFJl
Y3QmIGIpCit7CisgICAgcmV0dXJuIGEubG9jYXRpb24oKSAhPSBiLmxvY2F0aW9uKCkgfHwgYS5z
aXplKCkgIT0gYi5zaXplKCk7Cit9CisKK0ludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBG
aXhlZFJlY3QmKTsKK0ZpeGVkUmVjdCBlbmNsb3NpbmdGaXhlZFJlY3QoY29uc3QgRmxvYXRSZWN0
Jik7CitJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoY29uc3QgRml4ZWRSZWN0Jik7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZpeGVkUmVjdF9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFNpemUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZpeGVkU2l6ZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFNpemUuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGaXhlZFNpemUuaCIKKworI2luY2x1ZGUgIkZpeGVkUG9pbnQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitJbnRTaXplIHBpeGVsU25hcHBlZEludFNpemUoY29uc3QgRml4ZWRTaXplJiBz
LCBjb25zdCBGaXhlZFBvaW50JiBwKQoreworICAgIHJldHVybiBJbnRTaXplKHNuYXBTaXplVG9Q
aXhlbChzLndpZHRoKCksIHAueCgpKSwgc25hcFNpemVUb1BpeGVsKHMuaGVpZ2h0KCksIHAueSgp
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZpeGVkU2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZpeGVkU2l6ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRTaXplLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjE4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRml4ZWRTaXplX2gKKyNkZWZpbmUgRml4ZWRTaXplX2gKKworI2lm
IFVTRShDRykgfHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NSVVNKQordHlwZWRlZiBzdHJ1Y3QgQ0dT
aXplIENHU2l6ZTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oUVQp
ICYmIFVTRShRVEtJVCkpCisjaWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVU
UllfVFlQRVMKK3R5cGVkZWYgc3RydWN0IENHU2l6ZSBOU1NpemU7CisjZWxzZQordHlwZWRlZiBz
dHJ1Y3QgX05TU2l6ZSBOU1NpemU7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0lO
KQordHlwZWRlZiBzdHJ1Y3QgdGFnU0laRSBTSVpFOworI2VsaWYgUExBVEZPUk0oUVQpCisjaW5j
bHVkZSA8cWdsb2JhbC5oPgorUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRU2l6ZUY7CitRVF9F
TkRfTkFNRVNQQUNFCisjZWxpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJTaXplOworI2VuZGlm
CisKKyNpZiBQTEFURk9STShXWCkKK2NsYXNzIHd4U2l6ZTsKKyNlbmRpZgorCisjaWYgUExBVEZP
Uk0oQlJFV01QKQordHlwZWRlZiBzdHJ1Y3QgQUVFU2l6ZSBBRUVTaXplOworI2VuZGlmCisKKyNp
bmNsdWRlICJBcHBVbml0LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiSW50
U2l6ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpeGVkUG9pbnQ7CisKK2Ns
YXNzIEZpeGVkU2l6ZSB7CitwdWJsaWM6CisgICAgRml4ZWRTaXplKCkgOiBtX3dpZHRoKDApLCBt
X2hlaWdodCgwKSB7IH0KKyAgICBGaXhlZFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgOiBtX3dp
ZHRoKHNpemUud2lkdGgoKSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpIHsgfQorICAgIEZpeGVk
U2l6ZShBcHBVbml0IHdpZHRoLCBBcHBVbml0IGhlaWdodCkgOiBtX3dpZHRoKHdpZHRoKSwgbV9o
ZWlnaHQoaGVpZ2h0KSB7IH0KKworICAgIGV4cGxpY2l0IEZpeGVkU2l6ZShjb25zdCBGbG9hdFNp
emUmIHNpemUpIDogbV93aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgp
KSB7IH0KKyAgICAKKyAgICBBcHBVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsg
fQorICAgIEFwcFVuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKworICAg
IHZvaWQgc2V0V2lkdGgoQXBwVW5pdCB3aWR0aCkgeyBtX3dpZHRoID0gd2lkdGg7IH0KKyAgICB2
b2lkIHNldEhlaWdodChBcHBVbml0IGhlaWdodCkgeyBtX2hlaWdodCA9IGhlaWdodDsgfQorCisg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV93aWR0aCA8PSAwIHx8IG1faGVpZ2h0
IDw9IDA7IH0KKyAgICBib29sIGlzWmVybygpIGNvbnN0IHsgcmV0dXJuICFtX3dpZHRoICYmICFt
X2hlaWdodDsgfQorCisgICAgZmxvYXQgYXNwZWN0UmF0aW8oKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4obV93aWR0aCkgLyBzdGF0aWNfY2FzdDxmbG9hdD4obV9oZWlnaHQpOyB9
CisgICAgCisgICAgdm9pZCBleHBhbmQoQXBwVW5pdCB3aWR0aCwgQXBwVW5pdCBoZWlnaHQpCisg
ICAgeworICAgICAgICBtX3dpZHRoICs9IHdpZHRoOworICAgICAgICBtX2hlaWdodCArPSBoZWln
aHQ7CisgICAgfQorICAgIAorICAgIHZvaWQgc2NhbGUoZmxvYXQgc2NhbGUpCisgICAgeworICAg
ICAgICBtX3dpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0aWNfY2FzdDxmbG9hdD4obV93aWR0
aCkgKiBzY2FsZSk7CisgICAgICAgIG1faGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0aWNf
Y2FzdDxmbG9hdD4obV9oZWlnaHQpICogc2NhbGUpOworICAgIH0KKyAgICAKKyAgICBGaXhlZFNp
emUgZXhwYW5kZWRUbyhjb25zdCBGaXhlZFNpemUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEZpeGVkU2l6ZShtX3dpZHRoID4gb3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBv
dGhlci5tX3dpZHRoLAorICAgICAgICAgICAgbV9oZWlnaHQgPiBvdGhlci5tX2hlaWdodCA/IG1f
aGVpZ2h0IDogb3RoZXIubV9oZWlnaHQpOworICAgIH0KKworICAgIEZpeGVkU2l6ZSBzaHJ1bmtU
byhjb25zdCBGaXhlZFNpemUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEZp
eGVkU2l6ZShtX3dpZHRoIDwgb3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRo
LAorICAgICAgICAgICAgbV9oZWlnaHQgPCBvdGhlci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3Ro
ZXIubV9oZWlnaHQpOworICAgIH0KKworICAgIHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCisg
ICAgeworICAgICAgICAqdGhpcyA9IGV4cGFuZGVkVG8oRml4ZWRTaXplKCkpOworICAgIH0KKwor
ICAgIEZpeGVkU2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gRml4ZWRTaXplKG1faGVpZ2h0LCBtX3dpZHRoKTsKKyAgICB9CisKKyNpZiBVU0UoQ0cpIHx8
IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkKKyAgICBleHBsaWNpdCBGaXhlZFNpemUoY29uc3Qg
Q0dTaXplJik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5Cisg
ICAgb3BlcmF0b3IgQ0dTaXplKCkgY29uc3Q7CisjZW5kaWYKKworI2lmIChQTEFURk9STShNQUMp
IHx8IChQTEFURk9STShRVCkgJiYgVVNFKFFUS0lUKSkgfHwgUExBVEZPUk0oQ0hST01JVU0pICYm
IE9TKERBUldJTikpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01F
VFJZX1RZUEVTKQorICAgIGV4cGxpY2l0IEZpeGVkU2l6ZShjb25zdCBOU1NpemUgJik7IC8vIGRv
bid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgb3BlcmF0b3IgTlNT
aXplKCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBGaXhlZFNpemUo
Y29uc3QgU0laRSYpOworICAgIG9wZXJhdG9yIFNJWkUoKSBjb25zdDsKKyNlbmRpZgorCisjaWYg
UExBVEZPUk0oUVQpCisgICAgRml4ZWRTaXplKGNvbnN0IFFTaXplRiYpOworICAgIG9wZXJhdG9y
IFFTaXplRigpIGNvbnN0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShIQUlLVSkKKyAgICBleHBs
aWNpdCBGaXhlZFNpemUoY29uc3QgQlNpemUmKTsKKyAgICBvcGVyYXRvciBCU2l6ZSgpIGNvbnN0
OworI2VuZGlmCisKKyNpZiBQTEFURk9STShXWCkKKyAgICBGaXhlZFNpemUoY29uc3Qgd3hTaXpl
Jik7CisgICAgb3BlcmF0b3Igd3hTaXplKCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFBMQVRGT1JN
KEJSRVdNUCkKKyAgICBGaXhlZFNpemUoY29uc3QgQUVFU2l6ZSYpOworICAgIG9wZXJhdG9yIEFF
RVNpemUoKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEFwcFVuaXQgbV93aWR0aCwg
bV9oZWlnaHQ7Cit9OworCitpbmxpbmUgRml4ZWRTaXplJiBvcGVyYXRvcis9KEZpeGVkU2l6ZSYg
YSwgY29uc3QgRml4ZWRTaXplJiBiKQoreworICAgIGEuc2V0V2lkdGgoYS53aWR0aCgpICsgYi53
aWR0aCgpKTsKKyAgICBhLnNldEhlaWdodChhLmhlaWdodCgpICsgYi5oZWlnaHQoKSk7CisgICAg
cmV0dXJuIGE7Cit9CisKK2lubGluZSBGaXhlZFNpemUmIG9wZXJhdG9yLT0oRml4ZWRTaXplJiBh
LCBjb25zdCBGaXhlZFNpemUmIGIpCit7CisgICAgYS5zZXRXaWR0aChhLndpZHRoKCkgLSBiLndp
ZHRoKCkpOworICAgIGEuc2V0SGVpZ2h0KGEuaGVpZ2h0KCkgLSBiLmhlaWdodCgpKTsKKyAgICBy
ZXR1cm4gYTsKK30KKworaW5saW5lIEZpeGVkU2l6ZSBvcGVyYXRvcisoY29uc3QgRml4ZWRTaXpl
JiBhLCBjb25zdCBGaXhlZFNpemUmIGIpCit7CisgICAgcmV0dXJuIEZpeGVkU2l6ZShhLndpZHRo
KCkgKyBiLndpZHRoKCksIGEuaGVpZ2h0KCkgKyBiLmhlaWdodCgpKTsKK30KKworaW5saW5lIEZp
eGVkU2l6ZSBvcGVyYXRvci0oY29uc3QgRml4ZWRTaXplJiBhLCBjb25zdCBGaXhlZFNpemUmIGIp
Cit7CisgICAgcmV0dXJuIEZpeGVkU2l6ZShhLndpZHRoKCkgLSBiLndpZHRoKCksIGEuaGVpZ2h0
KCkgLSBiLmhlaWdodCgpKTsKK30KKworaW5saW5lIEZpeGVkU2l6ZSBvcGVyYXRvci0oY29uc3Qg
Rml4ZWRTaXplJiBzaXplKQoreworICAgIHJldHVybiBGaXhlZFNpemUoLXNpemUud2lkdGgoKSwg
LXNpemUuaGVpZ2h0KCkpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZpeGVk
U2l6ZSYgYSwgY29uc3QgRml4ZWRTaXplJiBiKQoreworICAgIHJldHVybiBhLndpZHRoKCkgPT0g
Yi53aWR0aCgpICYmIGEuaGVpZ2h0KCkgPT0gYi5oZWlnaHQoKTsKK30KKworaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBGaXhlZFNpemUmIGEsIGNvbnN0IEZpeGVkU2l6ZSYgYikKK3sKKyAg
ICByZXR1cm4gYS53aWR0aCgpICE9IGIud2lkdGgoKSB8fCBhLmhlaWdodCgpICE9IGIuaGVpZ2h0
KCk7Cit9CisKK2lubGluZSBJbnRTaXplIGZsb29yZWRJbnRTaXplKGNvbnN0IEZpeGVkU2l6ZSYg
cykKK3sKKyAgICByZXR1cm4gSW50U2l6ZShzLndpZHRoKCkudG9JbnQoKSwgcy5oZWlnaHQoKS50
b0ludCgpKTsKK30KKworaW5saW5lIEludFNpemUgcm91bmRlZEludFNpemUoY29uc3QgRml4ZWRT
aXplJiBzKQoreworICAgIHJldHVybiBJbnRTaXplKHMud2lkdGgoKS5yb3VuZCgpLCBzLmhlaWdo
dCgpLnJvdW5kKCkpOworfQorCitJbnRTaXplIHBpeGVsU25hcHBlZEludFNpemUoY29uc3QgRml4
ZWRTaXplJiwgY29uc3QgRml4ZWRQb2ludCYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBGaXhlZFNpemVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRQb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAJKHJldmlzaW9uIDEwNTMzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw5ICsyOCwxMCBAQAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKIAogI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5j
bHVkZSAiRml4ZWRQb2ludC5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1
ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNs
dWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8bWF0aC5oPgogCkBAIC00MCw2ICs0MSwxMCBAQCBGbG9h
dFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IEludFBvaW50JiBwCiB7CiB9CiAKK0Zsb2F0UG9pbnQ6
OkZsb2F0UG9pbnQoY29uc3QgRml4ZWRQb2ludCYgcCkgOiBtX3gocC54KCkpLCBtX3kocC55KCkp
Cit7Cit9CisKIHZvaWQgRmxvYXRQb2ludDo6bm9ybWFsaXplKCkKIHsKICAgICBmbG9hdCB0ZW1w
TGVuZ3RoID0gbGVuZ3RoKCk7CkBAIC01NSw2ICs2MCwxOCBAQCBmbG9hdCBGbG9hdFBvaW50Ojps
ZW5ndGgoKSBjb25zdAogICAgIHJldHVybiBzcXJ0ZihsZW5ndGhTcXVhcmVkKCkpOwogfQogCit2
b2lkIEZsb2F0UG9pbnQ6Om1vdmUoY29uc3QgRml4ZWRTaXplJiBzaXplKQoreworICAgIG1feCAr
PSBzaXplLndpZHRoKCk7CisgICAgbV95ICs9IHNpemUuaGVpZ2h0KCk7Cit9CisKK3ZvaWQgRmxv
YXRQb2ludDo6bW92ZUJ5KGNvbnN0IEZpeGVkUG9pbnQmIHBvaW50KQoreworICAgIG1feCArPSBw
b2ludC54KCk7CisgICAgbV95ICs9IHBvaW50LnkoKTsKK30KKwogRmxvYXRQb2ludCBGbG9hdFBv
aW50OjptYXRyaXhUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pIGNv
bnN0CiB7CiAgICAgZG91YmxlIG5ld1gsIG5ld1k7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCShyZXZpc2lvbiAxMDUzMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTYwLDEzICs2MCwxNSBAQCBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBUcmFuc2Zv
cm1hdGlvbk1hdHJpeDsKIGNsYXNzIEludFBvaW50OwogY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEZp
eGVkUG9pbnQ7CitjbGFzcyBGaXhlZFNpemU7CiAKIGNsYXNzIEZsb2F0UG9pbnQgewogcHVibGlj
OgogICAgIEZsb2F0UG9pbnQoKSA6IG1feCgwKSwgbV95KDApIHsgfQogICAgIEZsb2F0UG9pbnQo
ZmxvYXQgeCwgZmxvYXQgeSkgOiBtX3goeCksIG1feSh5KSB7IH0KICAgICBGbG9hdFBvaW50KGNv
bnN0IEludFBvaW50Jik7Ci0KKyAgICBGbG9hdFBvaW50KGNvbnN0IEZpeGVkUG9pbnQmKTsKIAog
ICAgIHN0YXRpYyBGbG9hdFBvaW50IHplcm8oKSB7IHJldHVybiBGbG9hdFBvaW50KCk7IH0KIApA
QCAtOTIsNiArOTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1feCArPSBhLndpZHRoKCk7CiAgICAg
ICAgIG1feSArPSBhLmhlaWdodCgpOwogICAgIH0KKyAgICB2b2lkIG1vdmUoY29uc3QgRml4ZWRT
aXplJik7CiAgICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgYSkKICAgICB7CiAgICAgICAg
IG1feCArPSBhLndpZHRoKCk7CkBAIC0xMDIsNiArMTA1LDcgQEAgcHVibGljOgogICAgICAgICBt
X3ggKz0gYS54KCk7CiAgICAgICAgIG1feSArPSBhLnkoKTsKICAgICB9CisgICAgdm9pZCBtb3Zl
QnkoY29uc3QgRml4ZWRQb2ludCYgYSk7CiAgICAgdm9pZCBtb3ZlQnkoY29uc3QgRmxvYXRQb2lu
dCYgYSkKICAgICB7CiAgICAgICAgIG1feCArPSBhLngoKTsKQEAgLTEzMSw2ICsxMzUsMTcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gRmxvYXRQb2ludChzdGQ6Om1heChtX3gsIG90aGVyLm1f
eCksIHN0ZDo6bWF4KG1feSwgb3RoZXIubV95KSk7CiAgICAgfQogCisgICAgRmxvYXRQb2ludCBz
aHJ1bmtUbyhjb25zdCBGbG9hdFBvaW50JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBGbG9hdFBvaW50KG1feCA8IG90aGVyLm1feCA/IG1feCA6IG90aGVyLm1feCwKKyAgICAg
ICAgICAgIG1feSA8IG90aGVyLm1feSA/IG1feSA6IG90aGVyLm1feSk7CisgICAgfQorCisgICAg
dm9pZCBjbGFtcE5lZ2F0aXZlVG9aZXJvKCkKKyAgICB7CisgICAgICAgICp0aGlzID0gZXhwYW5k
ZWRUbyh6ZXJvKCkpOworICAgIH0KKwogICAgIEZsb2F0UG9pbnQgdHJhbnNwb3NlZFBvaW50KCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBGbG9hdFBvaW50KG1feSwgbV94KTsKQEAgLTIz
OSw2ICsyNTQsMTEgQEAgaW5saW5lIEludFNpemUgZmxvb3JlZEludFNpemUoY29uc3QgRmxvYQog
ICAgIHJldHVybiBJbnRTaXplKHN0YXRpY19jYXN0PGludD4ocC54KCkpLCBzdGF0aWNfY2FzdDxp
bnQ+KHAueSgpKSk7CiB9CiAKK2lubGluZSBGbG9hdFBvaW50IHRvUG9pbnQoY29uc3QgRmxvYXRT
aXplJiBzaXplKQoreworICAgIHJldHVybiBGbG9hdFBvaW50KHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSk7Cit9CisKIGZsb2F0IGZpbmRTbG9wZShjb25zdCBGbG9hdFBvaW50JiBwMSwgY29u
c3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0JiBjKTsKIAogLy8gRmluZCBwb2ludCB3aGVyZSBsaW5l
cyB0aHJvdWdoIHRoZSB0d28gcGFpcnMgb2YgcG9pbnRzIGludGVyc2VjdC4gUmV0dXJucyBmYWxz
ZSBpZiB0aGUgbGluZXMgZG9uJ3QgaW50ZXJzZWN0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCShyZXZpc2lvbiAxMDUzMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCiAKKyNpbmNsdWRlICJGaXhlZFJlY3QuaCIKICNpbmNsdWRlICJGbG9hdENvbnZl
cnNpb24uaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAt
NDIsNiArNDMsMTAgQEAgRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgSW50UmVjdCYgcikgOgog
ewogfQogCitGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBGaXhlZFJlY3QmIHIpIDogbV9sb2Nh
dGlvbihyLmxvY2F0aW9uKCkpLCBtX3NpemUoci5zaXplKCkpCit7Cit9CisKIEZsb2F0UmVjdCBG
bG9hdFJlY3Q6Om5hcnJvd1ByZWNpc2lvbihkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB3aWR0
aCwgZG91YmxlIGhlaWdodCkKIHsKICAgICByZXR1cm4gRmxvYXRSZWN0KG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoeCksIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoeSksIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQod2lkdGgpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGhlaWdodCkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHJldmlzaW9uIDEw
NTMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IFZHUmVjdDsKICNlbmRpZgogCitjbGFzcyBGaXhlZFJlY3Q7CiBjbGFzcyBJbnRSZWN0OwogY2xh
c3MgSW50UG9pbnQ7CiAKQEAgLTgyLDYgKzgzLDcgQEAgcHVibGljOgogICAgIEZsb2F0UmVjdChm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQogICAgICAgICA6IG1f
bG9jYXRpb24oRmxvYXRQb2ludCh4LCB5KSksIG1fc2l6ZShGbG9hdFNpemUod2lkdGgsIGhlaWdo
dCkpIHsgfQogICAgIEZsb2F0UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgRmxvYXRSZWN0KGNv
bnN0IEZpeGVkUmVjdCYpOwogCiAgICAgc3RhdGljIEZsb2F0UmVjdCBuYXJyb3dQcmVjaXNpb24o
ZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAJKHJl
dmlzaW9uIDEwNTMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
U2l6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKIAorI2luY2x1ZGUgIkZpeGVkU2l6ZS5oIgog
I2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNs
dWRlIDxsaW1pdHM+CkBAIC00MCw2ICs0MSwxMCBAQCBGbG9hdFNpemU6OkZsb2F0U2l6ZShjb25z
dCBJbnRTaXplJiBzaXplCiB7CiB9CiAKK0Zsb2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0IEZpeGVk
U2l6ZSYgc2l6ZSkgOiBtX3dpZHRoKHNpemUud2lkdGgoKSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0
KCkpCit7Cit9CisKIGZsb2F0IEZsb2F0U2l6ZTo6ZGlhZ29uYWxMZW5ndGgoKSBjb25zdAogewog
ICAgIHJldHVybiBzcXJ0ZihkaWFnb25hbExlbmd0aFNxdWFyZWQoKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAkocmV2aXNpb24gMTA1MzM0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDEyICs0NiwxNCBAQCB0eXBlZGVmIHN0cnVjdCBfTlNTaXplIE5TU2l6
ZTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEZpeGVkU2l6
ZTsKIAogY2xhc3MgRmxvYXRTaXplIHsKIHB1YmxpYzoKICAgICBGbG9hdFNpemUoKSA6IG1fd2lk
dGgoMCksIG1faGVpZ2h0KDApIHsgfQogICAgIEZsb2F0U2l6ZShmbG9hdCB3aWR0aCwgZmxvYXQg
aGVpZ2h0KSA6IG1fd2lkdGgod2lkdGgpLCBtX2hlaWdodChoZWlnaHQpIHsgfQogICAgIEZsb2F0
U2l6ZShjb25zdCBJbnRTaXplJik7CisgICAgRmxvYXRTaXplKGNvbnN0IEZpeGVkU2l6ZSYpOwog
CiAgICAgc3RhdGljIEZsb2F0U2l6ZSBuYXJyb3dQcmVjaXNpb24oZG91YmxlIHdpZHRoLCBkb3Vi
bGUgaGVpZ2h0KTsKIApAQCAtNjUsNiArNjcsMTEgQEAgcHVibGljOgogICAgIGJvb2wgaXNaZXJv
KCkgY29uc3Q7CiAgICAgYm9vbCBpc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkgY29uc3Q7CiAKKyAg
ICBib29sIGlzUm91Z2hseUVxdWFsVG8oY29uc3QgRmxvYXRTaXplJiBzKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFicyh3aWR0aCgpIC0gcy53aWR0aCgpKSA8IDAuMSAmJiBhYnMoaGVpZ2h0KCkg
LSBzLmhlaWdodCgpKSA8IDAuMTsKKyAgICB9CisKICAgICBmbG9hdCBhc3BlY3RSYXRpbygpIGNv
bnN0IHsgcmV0dXJuIG1fd2lkdGggLyBtX2hlaWdodDsgfQogCiAgICAgdm9pZCBleHBhbmQoZmxv
YXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ludFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ludFJlY3QuY3BwCShyZXZpc2lvbiAxMDUzMzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKIAorI2lu
Y2x1ZGUgIkZpeGVkUmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgPGFs
Z29yaXRobT4KIApAQCAtNDAsNiArNDEsMTIgQEAgSW50UmVjdDo6SW50UmVjdChjb25zdCBGbG9h
dFJlY3QmIHIpCiB7CiB9CiAKK0ludFJlY3Q6OkludFJlY3QoY29uc3QgRml4ZWRSZWN0JiByKQor
ICAgIDogbV9sb2NhdGlvbihmbG9vcmVkSW50UG9pbnQoci5sb2NhdGlvbigpKSkKKyAgICAsIG1f
c2l6ZShmbG9vcmVkSW50U2l6ZShyLnNpemUoKSkpCit7Cit9CisKIGJvb2wgSW50UmVjdDo6aW50
ZXJzZWN0cyhjb25zdCBJbnRSZWN0JiBvdGhlcikgY29uc3QKIHsKICAgICAvLyBDaGVja2luZyBl
bXB0aW5lc3MgaGFuZGxlcyBuZWdhdGl2ZSB3aWR0aHMgYXMgd2VsbCBhcyB6ZXJvLgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkocmV2aXNpb24gMTA1
MzM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBAIHN0cnVjdCBTa0lSZWN0OwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBGaXhlZFJlY3Q7CiAKIGNsYXNzIElu
dFJlY3QgewogcHVibGljOgpAQCAtODAsNyArODEsOCBAQCBwdWJsaWM6CiAgICAgSW50UmVjdChp
bnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICAgICAgOiBtX2xvY2F0aW9u
KEludFBvaW50KHgsIHkpKSwgbV9zaXplKEludFNpemUod2lkdGgsIGhlaWdodCkpIHsgfQogCi0g
ICAgZXhwbGljaXQgSW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpOyAvLyBkb24ndCBkbyB0
aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQorICAgIGV4cGxpY2l0IEludFJlY3QoY29u
c3QgRmxvYXRSZWN0Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxv
c3N5CisgICAgZXhwbGljaXQgSW50UmVjdChjb25zdCBGaXhlZFJlY3QmKTsgLy8gZG9uJ3QgZG8g
dGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKICAgICAgICAgCiAgICAgSW50UG9pbnQg
bG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9CiAgICAgSW50U2l6ZSBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9GaXhlZFBvaW50Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ZpeGVkUG9pbnRDRy5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GaXhlZFBvaW50Q0cuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGaXhlZFBvaW50LmgiCisKKyNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlV
TSkKKworI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZpeGVkUG9pbnQ6OkZpeGVkUG9pbnQoY29uc3Qg
Q0dQb2ludCYgcCkgOiBtX3gocC54KSwgbV95KHAueSkKK3sKK30KKworRml4ZWRQb2ludDo6b3Bl
cmF0b3IgQ0dQb2ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIENHUG9pbnRNYWtlKG1feCwgbV95
KTsKK30KKworfQorCisjZW5kaWYgLy8gVVNFKENHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvRml4ZWRSZWN0Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ZpeGVkUmVjdENHLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ZpeGVkUmVjdENHLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRml4ZWRSZWN0LmgiCisKKyNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlV
TSkKKworI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZpeGVkUmVjdDo6Rml4ZWRSZWN0KGNvbnN0IENH
UmVjdCYgcikgOiBtX2xvY2F0aW9uKHIub3JpZ2luKSwgbV9zaXplKHIuc2l6ZSkKK3sKK30KKwor
Rml4ZWRSZWN0OjpvcGVyYXRvciBDR1JlY3QoKSBjb25zdAoreworICAgIHJldHVybiBDR1JlY3RN
YWtlKHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7Cit9CisKK30KKworI2VuZGlmIC8vIFVT
RShDRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ZpeGVkU2l6
ZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9GaXhlZFNpemVDRy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9GaXhlZFNpemVDRy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KyAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaXhlZFNpemUuaCIKKworI2lmIFVT
RShDRykgfHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NSVVNKSB8fCAoUExBVEZPUk0oUVQpICYmIFVT
RShRVEtJVCkpCisKKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2Vy
dmljZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaXhlZFNpemU6OkZpeGVkU2l6ZShj
b25zdCBDR1NpemUmIHMpIDogbV93aWR0aChzLndpZHRoKSwgbV9oZWlnaHQocy5oZWlnaHQpCit7
Cit9CisKK0ZpeGVkU2l6ZTo6b3BlcmF0b3IgQ0dTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Q0dTaXplTWFrZShtX3dpZHRoLCBtX2hlaWdodCk7Cit9CisKK30KKworI2VuZGlmIC8vIFVTRShD
RykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GaXhlZFBvaW50
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9GaXhlZFBvaW50TWFjLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0ZpeGVkUG9pbnRNYWMubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpeGVkUG9pbnQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisjaWZuZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dF
T01FVFJZX1RZUEVTCisKK0ZpeGVkUG9pbnQ6OkZpeGVkUG9pbnQoY29uc3QgTlNQb2ludCYgcCkg
OiBtX3gocC54KSwgbV95KHAueSkKK3sKK30KKworRml4ZWRQb2ludDo6b3BlcmF0b3IgTlNQb2lu
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIE5TTWFrZVBvaW50KG1feC50b0Zsb2F0KCksIG1feS50
b0Zsb2F0KCkpOworfQorCisjZW5kaWYKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0ZpeGVkUmVjdE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRml4ZWRSZWN0TWFjLm1tCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZpeGVkUmVjdE1hYy5tbQko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRml4ZWRSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmbmRlZiBOU0dFT01F
VFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUworCitGaXhlZFJlY3Q6OkZpeGVkUmVj
dChjb25zdCBOU1JlY3QmIHIpIDogbV9sb2NhdGlvbihyLm9yaWdpbiksIG1fc2l6ZShyLnNpemUp
Cit7Cit9CisKK0ZpeGVkUmVjdDo6b3BlcmF0b3IgTlNSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gTlNNYWtlUmVjdCh4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworfQorCisjZW5kaWYK
KworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZpeGVkU2l6
ZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvRml4ZWRTaXplTWFjLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0ZpeGVkU2l6ZU1hYy5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworIAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpeGVkU2l6ZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyNpZm5kZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VP
TUVUUllfVFlQRVMKKworRml4ZWRTaXplOjpGaXhlZFNpemUoY29uc3QgTlNTaXplJiBzKSA6IG1f
d2lkdGgocy53aWR0aCksIG1faGVpZ2h0KHMuaGVpZ2h0KQoreworfQorCitGaXhlZFNpemU6Om9w
ZXJhdG9yIE5TU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIE5TTWFrZVNpemUobV93aWR0aCwg
bV9oZWlnaHQpOworfQorCisjZW5kaWYKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRml4ZWRQb2ludFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9GaXhlZFBvaW50UXQuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRml4ZWRQb2ludFF0LmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJGaXhlZFBvaW50LmgiCisKKyNpbmNsdWRlIDxRUG9pbnRGPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0ZpeGVkUG9pbnQ6OkZpeGVkUG9pbnQoY29uc3QgUVBvaW50RiYgcCkKKyAgICA6
IG1feChwLngoKSkKKyAgICAsIG1feShwLnkoKSkKK3sKK30KKworRml4ZWRQb2ludDo6b3BlcmF0
b3IgUVBvaW50RigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFFQb2ludEYobV94LCBtX3kpOworfQor
Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9GaXhlZFJlY3RR
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
Rml4ZWRSZWN0UXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvRml4ZWRSZWN0UXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBA
CisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaXhlZFJlY3QuaCIKKworI2luY2x1ZGUg
PFFSZWN0Rj4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaXhlZFJlY3Q6OkZpeGVkUmVjdChj
b25zdCBRUmVjdEYmIHIpCisgICAgOiBtX2xvY2F0aW9uKHIudG9wTGVmdCgpKQorICAgICwgbV9z
aXplKHIud2lkdGgoKQorICAgICwgci5oZWlnaHQoKSkKK3sKK30KKworRml4ZWRSZWN0OjpvcGVy
YXRvciBRUmVjdEYoKSBjb25zdAoreworICAgIHJldHVybiBRUmVjdEYoeCgpLCB5KCksIHdpZHRo
KCksIGhlaWdodCgpKTsKK30KKworfQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9GaXhlZFNpemVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvRml4ZWRTaXplUXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRml4ZWRTaXplUXQuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZp
eGVkU2l6ZS5oIgorCisjaW5jbHVkZSA8UVNpemVGPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0ZpeGVkU2l6ZTo6Rml4ZWRTaXplKGNvbnN0IFFTaXplRiYgcCkKKyAgICA6IG1fd2lkdGgocC53
aWR0aCgpKQorICAgICwgbV9oZWlnaHQocC5oZWlnaHQoKSkKK3sKK30KKworRml4ZWRTaXplOjpv
cGVyYXRvciBRU2l6ZUYoKSBjb25zdAoreworICAgIHJldHVybiBRU2l6ZUYobV93aWR0aCwgbV9o
ZWlnaHQpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ZpeGVkUG9pbnRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ZpeGVkUG9pbnRTa2lhLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRml4ZWRQb2ludFNraWEuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGaXhlZFBvaW50LmgiCisKKyNpbmNsdWRlICJTa1BvaW50LmgiCisjaW5jbHVkZSAiU2tpYVV0
aWxzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRml4ZWRQb2ludDo6Rml4ZWRQb2ludChj
b25zdCBTa1BvaW50JiBwKQorICAgIDogbV94KHAuZlgpCisgICAgLCBtX3kocC5mWSkKK3sKK30K
KworRml4ZWRQb2ludDo6b3BlcmF0b3IgU2tQb2ludCgpIGNvbnN0Cit7CisgICAgU2tQb2ludCBw
ID0geyBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKG1feCksIFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIo
bV95KSB9OworICAgIHJldHVybiBwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZpeGVkUmVjdFNraWEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRml4
ZWRSZWN0U2tpYS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ZpeGVkUmVjdFNraWEuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUw
IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaXhlZFJlY3QuaCIKKworI2luY2x1
ZGUgIlNrUmVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZpeGVkUmVjdDo6Rml4ZWRS
ZWN0KGNvbnN0IFNrUmVjdCYgcikKKyAgICA6IG1fbG9jYXRpb24oci5mTGVmdCwgci5mVG9wKQor
ICAgICwgbV9zaXplKHIud2lkdGgoKSwgci5oZWlnaHQoKSkKK3sKK30KKworRml4ZWRSZWN0Ojpv
cGVyYXRvciBTa1JlY3QoKSBjb25zdAoreworICAgIFNrUmVjdCByZWN0ID0geyB4KCksIHkoKSwg
bWF4WCgpLCBtYXhZKCkgfTsKKyAgICByZXR1cm4gcmVjdDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124846</attachid>
            <date>2012-01-31 16:43:39 -0800</date>
            <delta_ts>2012-02-07 16:15:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76571-20120131164338.patch</filename>
            <type>text/plain</type>
            <size>82215</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjQwNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDEyLTAxLTMxICBFbWlsIEEg
RWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4gYW5kIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIEFkZCBmaXhlZCBwb2ludCB0eXBlcyBmb3Igc3ViLXBpeGVs
IGxheW91dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzY1NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgZml4ZWQgcG9pbnQgdmVyc2lvbnMgb2YgdGhlIFBvaW50LCBTaXplIGFuZCBSZWN0IGNsYXNz
ZXMgdXNpbmcKKyAgICAgICAgdGhlIG5ldyBBcHBVbml0IHR5cGUgYW5kIHN3aXRjaCBMYXlvdXRV
bml0L1BvaW50L1NpemUvUmVjdCBvdmVyIHRvCisgICAgICAgIHRoZSBmaXhlZCBwb2ludCBpbXBs
ZW1lbnRhdGlvbnMuCisKKyAgICAgICAgRml4ZWRQb2ludCwgRml4ZWRTaXplIGFuZCBGaXhlZFJl
Y3QgYXJlIFBvaW50LCBTaXplIGFuZCBSZWN0CisgICAgICAgIGltcGxlbWVudGF0aW9ucyByZXNw
ZWN0aXZlbHkgdXNpbmcgdGhpcyBuZXcgdHlwZS4KKworICAgICAgICBBZGRpdGlvbmFsbHksIHBs
YXRmb3JtIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgbmV3IGNsYXNzZXMgYXJlCisg
ICAgICAgIHByb3ZpZGVkIHRvIGFsbG93IHRoZW0gdG8gYmUgdXNlZCBpbiB0aGUgc2FtZSB3YXkg
YXMgdGhlIGludCBhbmQgZmxvYXQKKyAgICAgICAgYmFzZWQgdmVyc2lvbnMgb2Ygc2FtZS4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUu
Z3lwOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRQb2ludC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3QuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3QuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvRml4ZWRTaXplLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRml4ZWRTaXplLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UG9pbnQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0U2l6ZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ZpeGVkUG9pbnRDRy5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ZpeGVkUmVjdENHLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Rml4ZWRTaXplQ0cuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Rml4ZWRQb2ludE1hYy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ZpeGVkUmVjdE1hYy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ZpeGVkU2l6ZU1hYy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
Rml4ZWRQb2ludFF0LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
Rml4ZWRSZWN0UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9G
aXhlZFNpemVRdC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEv
Rml4ZWRQb2ludFNraWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ZpeGVkUmVjdFNraWEuY3BwOiBBZGRlZC4KKwogMjAxMi0wMS0zMSAgU2FtaSBLeW9zdGls
YSAgPHNreW9zdGlsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIENvbXBvc2l0
b3IgZGVidWcgYm9yZGVycyBhcmUgbm90IHNjYWxlZCBjb3JyZWN0bHkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAxMDY0MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTA5NCw2ICsxMDk0LDggQEAgU0VUKFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVy
YXRlZEltYWdlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZpeGVkUmVjdC5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9GaXhlZFNpemUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCShyZXZpc2lvbiAxMDY0MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQwLDYgKzI5NDAsMTEgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2Fy
bS9GRUdhdXNzaWFuQmx1ck5FT04uaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9hcm0vRkVMaWdodGluZ05FT04uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUxpZ2h0aW5nTkVPTi5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFBvaW50LmggXAorCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZpeGVkUmVjdC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZpeGVkUmVjdC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GaXhlZFNpemUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhl
ZFNpemUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNE
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmgg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwIFwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDEwNjQwNikKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzAwMyw2ICszMDAzLDggQEAKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3QuY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9GaXhlZFNpemUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludDNELmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFk
LmNwcCcsCkBAIC0zMTAzLDYgKzMxMDUsOSBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1JlZlB0ckNhaXJvLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4Q2Fpcm8uY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvRml4ZWRQb2ludENHLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvRml4ZWRSZWN0Q0cuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9GaXhlZFNpemVDRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zs
b2F0UG9pbnRDRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0
UmVjdENHLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRTaXpl
Q0cuY3BwJywKQEAgLTM0NDMsNiArMzQ0OCw5IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQVRTVUkuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQu
bW0nLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GaXhlZFBvaW50TWFjLm1t
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRml4ZWRSZWN0TWFjLm1tJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRml4ZWRTaXplTWFjLm1tJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRQb2ludE1hYy5tbScsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UmVjdE1hYy5tbScsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0U2l6ZU1hYy5tbScsCkBAIC0zNTA3LDYg
KzM1MTUsOSBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbG9yUXQuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9FeHRlbnNpb25zM0RRdC5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3F0L0V4dGVuc2lvbnMzRFF0LmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZpeGVkUG9pbnRRdC5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZpeGVkUmVjdFF0LmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvRml4ZWRTaXplUXQuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFBvaW50UXQuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFJlY3RRdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcCcsCkBAIC0zNTQzLDYgKzM1NTQsOCBAQAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc3BhcmVuY3lMYXll
ci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2lu
Z2xlRnJhbWVTa2lhLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRml4
ZWRQb2ludFNraWEuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zp
eGVkUmVjdFNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zs
b2F0UG9pbnRTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9G
bG9hdFJlY3RTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9G
b250Q2FjaGVTa2lhLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJD
b3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3Jl
Lmd5cAkocmV2aXNpb24gMTA2NDA2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTE1NTIsNiArMTU1Miw5IEBACiAgICAgICAgICAg
ICBbJ2luY2x1ZGUnLCAncmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjXFwubW0kJ10sCiAgICAgICAg
ICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjXFwubW0kJ10s
CiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhU
ZXh0Q29udHJvbGxlckNvcmVUZXh0XFwubW0kJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAn
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZpeGVkUG9pbnRNYWNcXC5tbSQnXSwKKyAgICAgICAgICAg
IFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRml4ZWRSZWN0TWFjXFwubW0kJ10s
CisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZpeGVkU2l6
ZU1hY1xcLm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9GbG9hdFBvaW50TWFjXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UmVjdE1hY1xcLm1tJCddLAogICAgICAgICAgICAgWydp
bmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFNpemVNYWNcXC5tbSQnXSwKQEAg
LTE2MjksNiArMTYzMiw5IEBACiAgICAgICAgIH1dLAogICAgICAgICBbJ09TPT0ibWFjIiBhbmQg
dXNlX3NraWE9PTEnLCB7CiAgICAgICAgICAgJ3NvdXJjZXMvJzogWworICAgICAgICAgICAgWydp
bmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ZpeGVkUG9pbnRDR1xcLmNwcCQnXSwKKyAg
ICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9GaXhlZFJlY3RDR1xc
LmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9G
aXhlZFNpemVDR1xcLmNwcCQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9n
cmFwaGljcy9jZy9GbG9hdFBvaW50Q0dcXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUn
LCAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0dcXC5jcHAkJ10sCiAgICAgICAgICAg
ICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRTaXplQ0dcXC5jcHAkJ10s
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagko
cmV2aXNpb24gMTA2NDA2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI3NDQ5LDYgKzI3NDQ5LDI2IEBACiAJCQkJCT4K
IAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xGaXhlZFBvaW50LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGaXhlZFJlY3QuY3BwIgorCQkJ
CQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcRml4ZWRSZWN0LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUK
KwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGaXhlZFNpemUuY3BwIgor
CQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3NcRml4ZWRTaXplLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZp
bGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFBvaW50LmNw
cCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KQEAgLTI4NDQwLDYgKzI4NDYwLDE4IEBACiAJCQkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJCQk8L0ZpbGU+CiAJCQkJCTxGaWxlCisJCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXEZpeGVkUG9pbnRDRy5jcHAiCisJCQkJ
CQk+CisJCQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUKKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3NcY2dcRml4ZWRSZWN0Q0cuY3BwIgorCQkJCQkJPgorCQkJCQk8L0ZpbGU+
CisJCQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNn
XEZpeGVkU2l6ZUNHLmNwcCIKKwkJCQkJCT4KKwkJCQkJPC9GaWxlPgorCQkJCQk8RmlsZQogCQkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjZ1xGbG9hdFBvaW50Q0cuY3Bw
IgogCQkJCQkJPgogCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMDY0
MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTMxMyw2ICszMTMsMTcgQEAKIAkJMTQ5NDdGRkUxMkY4MENEMjAw
QTBGNjMxIC8qIERvY3VtZW50T3JkZXJlZE1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ5NDdGRkMxMkY4MENEMjAwQTBGNjMxIC8qIERvY3VtZW50
T3JkZXJlZE1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTE0OTkzQkU1MEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ5OTNCRTMwQjJG
MkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxlci5jcHAgKi87IH07CiAJCTE0OTkzQkU2MEIy
RjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OTkzQkU0MEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1
c0NvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkxNEMwQTJCMjE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRQb2ludC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkFCNzcxNTgxNDQ0Q0JENDAw
RUM0QzRDIC8qIEZpeGVkUG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkxNEMwQTJCMzE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRQb2ludENH
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3
MUFBMTQ0NEYyNDUwMEVDNEM0QyAvKiBGaXhlZFBvaW50Q0cuY3BwICovOyB9OworCQkxNEMwQTJC
NTE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRQb2ludE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MUE3MTQ0NEYyMkUwMEVDNEM0QyAvKiBG
aXhlZFBvaW50TWFjLm1tICovOyB9OworCQkxNEMwQTJCNjE0NDYzMjFFMDA1MjA3OTggLyogRml4
ZWRSZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJBQjc3MTU2MTQ0NENCRDQwMEVDNEM0QyAvKiBGaXhlZFJlY3QuY3BwICovOyB9OworCQkxNEMw
QTJCNzE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQUI3NzE1NTE0NDRDQkQ0MDBFQzRDNEMgLyogRml4
ZWRSZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMTRDMEEyQjgxNDQ2MzIxRTAwNTIwNzk4IC8qIEZpeGVkUmVjdENHLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MUE5MTQ0NEYyNDUwMEVD
NEM0QyAvKiBGaXhlZFJlY3RDRy5jcHAgKi87IH07CisJCTE0QzBBMkJBMTQ0NjMyMUUwMDUyMDc5
OCAvKiBGaXhlZFJlY3RNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQUI3NzFBNjE0NDRGMjJFMDBFQzRDNEMgLyogRml4ZWRSZWN0TWFjLm1tICov
OyB9OworCQkxNEMwQTJCQjE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRTaXplLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MTUzMTQ0NENCRDQw
MEVDNEM0QyAvKiBGaXhlZFNpemUuY3BwICovOyB9OworCQkxNEMwQTJCQzE0NDYzMjFFMDA1MjA3
OTggLyogRml4ZWRTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQUI3NzE1MjE0NDRDQkQ0MDBFQzRDNEMgLyogRml4ZWRTaXplLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTRDMEEyQkQxNDQ2MzIx
RTAwNTIwNzk4IC8qIEZpeGVkU2l6ZUNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MUE4MTQ0NEYyNDUwMEVDNEM0QyAvKiBGaXhlZFNpemVD
Ry5jcHAgKi87IH07CisJCTE0QzBBMkJGMTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFNpemVNYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQUI3NzFB
NTE0NDRGMjJFMDBFQzRDNEMgLyogRml4ZWRTaXplTWFjLm1tICovOyB9OwogCQkxNEM5QTVFQTBC
M0QxMDVGMDA1QTAyMzIgLyogU2V0dGluZ3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDOUE1RTkwQjNEMTA1RjAwNUEwMjMyIC8qIFNldHRpbmdz
LmNwcCAqLzsgfTsKIAkJMTRDRDhEODIxMDZCNTI5MDAwQTQ2RDIzIC8qIEpTU2hhcmVkV29ya2Vy
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0Q0Q4RDgxMTA2QjUyOTAwMEE0NkQyMyAvKiBKU1NoYXJlZFdvcmtlckN1c3RvbS5jcHAgKi87
IH07CiAJCTE0Q0Y3OEE0MDlGNThDQkYwMEVCMzY2NSAvKiBKU0NTU1ZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0Y3OEEzMDlGNThDQkYw
MEVCMzY2NSAvKiBKU0NTU1ZhbHVlLmNwcCAqLzsgfTsKQEAgLTExODM3LDYgKzExODQ4LDE3IEBA
CiAJCUI4REJEQjQ4MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldFNlbGVjdGlvbkNvbW1hbmQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjhEQkRCNDkxMzBCMEY4QTAwRjVDREIxIC8qIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUI4REJEQjRBMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkFCNzcxNTIx
NDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkU2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGaXhlZFNpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkFCNzcx
NTMxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkU2l6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGaXhlZFNpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCQUI3NzE1NTE0NDRDQkQ0MDBFQzRDNEMgLyogRml4ZWRSZWN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpeGVkUmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQUI3NzE1NjE0NDRDQkQ0MDBFQzRDNEMgLyogRml4ZWRSZWN0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpeGVkUmVjdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUJBQjc3MTU4MTQ0NENCRDQwMEVDNEM0QyAvKiBGaXhlZFBvaW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpeGVkUG9pbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkFCNzcxQTUxNDQ0RjIyRTAwRUM0QzRDIC8qIEZpeGVk
U2l6ZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZpeGVk
U2l6ZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkFCNzcxQTYxNDQ0RjIy
RTAwRUM0QzRDIC8qIEZpeGVkUmVjdE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEZpeGVkUmVjdE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQkFCNzcxQTcxNDQ0RjIyRTAwRUM0QzRDIC8qIEZpeGVkUG9pbnRNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGaXhlZFBvaW50TWFjLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlCQUI3NzFBODE0NDRGMjQ1MDBFQzRDNEMgLyogRml4ZWRT
aXplQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRml4ZWRTaXpl
Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQUI3NzFBOTE0NDRGMjQ1MDBF
QzRDNEMgLyogRml4ZWRSZWN0Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRml4ZWRSZWN0Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQUI3
NzFBQTE0NDRGMjQ1MDBFQzRDNEMgLyogRml4ZWRQb2ludENHLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpeGVkUG9pbnRDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJBQ0YyOTAwMTNCMkEwRDUwMDc4MUY5MCAvKiBMYXlvdXRUeXBlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRUeXBlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzAwRUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01GaWxlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDMDBFRkZGMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NRmlsZS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NjA2LDYgKzE4NjI4LDkgQEAKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMEZDRjMzMjMwRjJCOTcxNTAwNEI2Nzk1
IC8qIENvbG9yQ0cuY3BwICovLAorCQkJCUJBQjc3MUE4MTQ0NEYyNDUwMEVDNEM0QyAvKiBGaXhl
ZFNpemVDRy5jcHAgKi8sCisJCQkJQkFCNzcxQTkxNDQ0RjI0NTAwRUM0QzRDIC8qIEZpeGVkUmVj
dENHLmNwcCAqLywKKwkJCQlCQUI3NzFBQTE0NDRGMjQ1MDBFQzRDNEMgLyogRml4ZWRQb2ludENH
LmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNw
cCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwICov
LAogCQkJCUIyNzUzNTJEMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVDRy5jcHAgKi8sCkBA
IC0xODY0Miw2ICsxODY2Nyw5IEBACiAJCQkJMzdDMjM2MEYxMDk3RUU3NzAwRUY5RjcyIC8qIENv
bXBsZXhUZXh0Q29udHJvbGxlci5oICovLAogCQkJCTM3QzIzODFGMTA5OEM4NDIwMEVGOUY3MiAv
KiBDb21wbGV4VGV4dENvbnRyb2xsZXJBVFNVSS5jcHAgKi8sCiAJCQkJMzdDMjM4MjAxMDk4Qzg0
MjAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tICovLAorCQkJCUJB
Qjc3MUE1MTQ0NEYyMkUwMEVDNEM0QyAvKiBGaXhlZFNpemVNYWMubW0gKi8sCisJCQkJQkFCNzcx
QTYxNDQ0RjIyRTAwRUM0QzRDIC8qIEZpeGVkUmVjdE1hYy5tbSAqLywKKwkJCQlCQUI3NzFBNzE0
NDRGMjJFMDBFQzRDNEMgLyogRml4ZWRQb2ludE1hYy5tbSAqLywKIAkJCQk0OUFGMkQ2QjE0NDM1
RDIxMDAxNkE3ODQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yTWFjLmNwcCAqLywKIAkJCQlCMjc1
MzU0QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludE1hYy5tbSAqLywKIAkJCQlCMjc1MzU0
QzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0TWFjLm1tICovLApAQCAtMTg3MDEsNiArMTg3
MjksMTEgQEAKIAkJCQk0OUZDN0E0RjE0NDRBRjVGMDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hN
b25pdG9yLmNwcCAqLywKIAkJCQk0OUFGMkQ2ODE0NDM1RDA1MDAxNkE3ODQgLyogRGlzcGxheVJl
ZnJlc2hNb25pdG9yLmggKi8sCiAJCQkJNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVu
c2lvbnMzRC5oICovLAorCQkJCUJBQjc3MTUyMTQ0NENCRDQwMEVDNEM0QyAvKiBGaXhlZFNpemUu
aCAqLywKKwkJCQlCQUI3NzE1MzE0NDRDQkQ0MDBFQzRDNEMgLyogRml4ZWRTaXplLmNwcCAqLywK
KwkJCQlCQUI3NzE1NTE0NDRDQkQ0MDBFQzRDNEMgLyogRml4ZWRSZWN0LmggKi8sCisJCQkJQkFC
NzcxNTYxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkUmVjdC5jcHAgKi8sCisJCQkJQkFCNzcxNTgx
NDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkUG9pbnQuaCAqLywKIAkJCQlCMjc1MzUzQTBCMDUzODE0
MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5jcHAgKi8sCiAJCQkJQjI3NTM1M0IwQjA1MzgxNDAwMkNF
NjRGIC8qIEZsb2F0UG9pbnQuaCAqLywKIAkJCQlCMkUyN0M5RDBCMEYyQjA5MDBGMTdDN0IgLyog
RmxvYXRQb2ludDNELmNwcCAqLywKQEAgLTIyMDg3LDYgKzIyMTIwLDkgQEAKIAkJCQk0OUVDRUI2
RTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0OUVDRUI3MDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzcyQzAwRDkxMjk2MTlGODAwNUM5NTc1IC8qIEZpbmRPcHRpb25zLmggaW4g
SGVhZGVycyAqLywKKwkJCQkxNEMwQTJCMjE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRQb2ludC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMTRDMEEyQjcxNDQ2MzIxRTAwNTIwNzk4IC8qIEZpeGVkUmVj
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTRDMEEyQkMxNDQ2MzIxRTAwNTIwNzk4IC8qIEZpeGVk
U2l6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkYwNEYwQTE1NEYwOTAwMEE0MjM0IC8qIEZp
eGVkVGFibGVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDczQkFBMEMzOTlCMUYwMDBG
NTk3OSAvKiBGbG9hdENvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUIyNzUzNTY5MEIw
NTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI1MTQ2LDYg
KzI1MTgyLDE0IEBACiAJCQkJMzEzMTNGNjUxNDQzQjM1RjAwNkUyQTkwIC8qIEZpbHRlckVmZmVj
dFJlbmRlcmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RUNFQjZEMTQ5OTc5MEQwMENERDNB
NCAvKiBGaWx0ZXJPcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlFQ0VCNkYxNDk5
NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MTRDMEEyQjMxNDQ2MzIxRTAwNTIwNzk4IC8qIEZpeGVkUG9pbnRDRy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkxNEMwQTJCNTE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRQb2ludE1hYy5tbSBpbiBT
b3VyY2VzICovLAorCQkJCTE0QzBBMkI2MTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFJlY3QuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMTRDMEEyQjgxNDQ2MzIxRTAwNTIwNzk4IC8qIEZpeGVkUmVj
dENHLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0QzBBMkJBMTQ0NjMyMUUwMDUyMDc5OCAvKiBG
aXhlZFJlY3RNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQkxNEMwQTJCQjE0NDYzMjFFMDA1MjA3
OTggLyogRml4ZWRTaXplLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0QzBBMkJEMTQ0NjMyMUUw
MDUyMDc5OCAvKiBGaXhlZFNpemVDRy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxNEMwQTJCRjE0
NDYzMjFFMDA1MjA3OTggLyogRml4ZWRTaXplTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQThD
RkYwNEQwQTE1NEYwOTAwMEE0MjM0IC8qIEZpeGVkVGFibGVMYXlvdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjI3NTM1NjgwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjJFMjdDOUYwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZpeGVkUG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GaXhlZFBvaW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GaXhlZFBvaW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjcxIEBACisv
KgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgRml4ZWRQb2ludF9oCisjZGVmaW5lIEZpeGVkUG9pbnRfaAorCisjaW5jbHVkZSAiRml4
ZWRTaXplLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CisKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxRRGF0YVN0cmVhbT4KKyNlbmRp
ZgorCisjaWYgVVNFKENHKSB8fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01JVU0pCit0eXBlZGVmIHN0
cnVjdCBDR1BvaW50IENHUG9pbnQ7CisjZW5kaWYKKworCisjaWYgT1MoREFSV0lOKSAmJiAhUExB
VEZPUk0oUVQpCisjaWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQ
RVMKK3R5cGVkZWYgc3RydWN0IENHUG9pbnQgTlNQb2ludDsKKyNlbHNlCit0eXBlZGVmIHN0cnVj
dCBfTlNQb2ludCBOU1BvaW50OworI2VuZGlmCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikK
K3R5cGVkZWYgc3RydWN0IHRhZ1BPSU5UIFBPSU5UOwordHlwZWRlZiBzdHJ1Y3QgdGFnUE9JTlRT
IFBPSU5UUzsKKyNlbGlmIFBMQVRGT1JNKFFUKQorUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBR
UG9pbnRGOworUVRfRU5EX05BTUVTUEFDRQorI2VsaWYgUExBVEZPUk0oR1RLKQordHlwZWRlZiBz
dHJ1Y3QgX0dka1BvaW50IEdka1BvaW50OworI2VsaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBC
UG9pbnQ7CisjZWxpZiBQTEFURk9STShFRkwpCit0eXBlZGVmIHN0cnVjdCBfRXZhc19Qb2ludCBF
dmFzX1BvaW50OworI2VuZGlmCisKKyNpZiBQTEFURk9STShXWCkKK2NsYXNzIHd4UG9pbnQ7Cisj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKEJSRVdNUCkKK3R5cGVkZWYgc3RydWN0IF9wb2ludCBBRUVQ
b2ludDsKKyNlbmRpZgorCisjaWYgVVNFKFNLSUEpCitzdHJ1Y3QgU2tQb2ludDsKK3N0cnVjdCBT
a0lQb2ludDsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpeGVkUG9p
bnQgeworcHVibGljOgorICAgIEZpeGVkUG9pbnQoKSA6IG1feCgwKSwgbV95KDApIHsgfQorICAg
IEZpeGVkUG9pbnQoQXBwVW5pdCB4LCBBcHBVbml0IHkpIDogbV94KHgpLCBtX3koeSkgeyB9Cisg
ICAgRml4ZWRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIDogbV94KHBvaW50LngoKSksIG1f
eShwb2ludC55KCkpIHsgfQorICAgIGV4cGxpY2l0IEZpeGVkUG9pbnQoY29uc3QgRmxvYXRQb2lu
dCYgc2l6ZSkgOiBtX3goc2l6ZS54KCkpLCBtX3koc2l6ZS55KCkpIHsgfQorCisgICAgc3RhdGlj
IEZpeGVkUG9pbnQgemVybygpIHsgcmV0dXJuIEZpeGVkUG9pbnQoKTsgfQorCisgICAgQXBwVW5p
dCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9CisgICAgQXBwVW5pdCB5KCkgY29uc3QgeyByZXR1
cm4gbV95OyB9CisKKyAgICB2b2lkIHNldFgoQXBwVW5pdCB4KSB7IG1feCA9IHg7IH0KKyAgICB2
b2lkIHNldFkoQXBwVW5pdCB5KSB7IG1feSA9IHk7IH0KKworICAgIHZvaWQgbW92ZShjb25zdCBG
aXhlZFNpemUmIHMpIHsgbW92ZShzLndpZHRoKCksIHMuaGVpZ2h0KCkpOyB9IAorICAgIHZvaWQg
bW92ZUJ5KGNvbnN0IEZpeGVkUG9pbnQmIG9mZnNldCkgeyBtb3ZlKG9mZnNldC54KCksIG9mZnNl
dC55KCkpOyB9CisgICAgdm9pZCBtb3ZlKEFwcFVuaXQgZHgsIEFwcFVuaXQgZHkpIHsgbV94ICs9
IGR4OyBtX3kgKz0gZHk7IH0KKyAgICB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkKKyAg
ICB7CisgICAgICAgIG1feCAqPSBzeDsKKyAgICAgICAgbV95ICo9IHN5OworICAgIH0KKyAgICAK
KyAgICBGaXhlZFBvaW50IGV4cGFuZGVkVG8oY29uc3QgRml4ZWRQb2ludCYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gRml4ZWRQb2ludChtX3ggPiBvdGhlci5tX3ggPyBtX3gg
OiBvdGhlci5tX3gsCisgICAgICAgICAgICBtX3kgPiBvdGhlci5tX3kgPyBtX3kgOiBvdGhlci5t
X3kpOworICAgIH0KKworICAgIEZpeGVkUG9pbnQgc2hydW5rVG8oY29uc3QgRml4ZWRQb2ludCYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRml4ZWRQb2ludChtX3ggPCBvdGhl
ci5tX3ggPyBtX3ggOiBvdGhlci5tX3gsCisgICAgICAgICAgICBtX3kgPCBvdGhlci5tX3kgPyBt
X3kgOiBvdGhlci5tX3kpOworICAgIH0KKworICAgIHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygp
CisgICAgeworICAgICAgICAqdGhpcyA9IGV4cGFuZGVkVG8oemVybygpKTsKKyAgICB9CisKKyAg
ICBGaXhlZFBvaW50IHRyYW5zcG9zZWRQb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gRml4ZWRQb2ludChtX3ksIG1feCk7CisgICAgfQorCisjaWYgVVNFKENHKSB8fCBVU0UoU0tJ
QV9PTl9NQUNfQ0hST01JVU0pCisgICAgZXhwbGljaXQgRml4ZWRQb2ludChjb25zdCBDR1BvaW50
Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgb3Bl
cmF0b3IgQ0dQb2ludCgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBPUyhEQVJXSU4pICYmICFQTEFU
Rk9STShRVCkgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllf
VFlQRVMpCisgICAgZXhwbGljaXQgRml4ZWRQb2ludChjb25zdCBOU1BvaW50Jik7IC8vIGRvbid0
IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgb3BlcmF0b3IgTlNQb2lu
dCgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgRml4ZWRQb2ludChj
b25zdCBQT0lOVCYpOworICAgIG9wZXJhdG9yIFBPSU5UKCkgY29uc3Q7CisgICAgRml4ZWRQb2lu
dChjb25zdCBQT0lOVFMmKTsKKyAgICBvcGVyYXRvciBQT0lOVFMoKSBjb25zdDsKKyNlbGlmIFBM
QVRGT1JNKFFUKQorICAgIEZpeGVkUG9pbnQoY29uc3QgUVBvaW50RiYpOworICAgIG9wZXJhdG9y
IFFQb2ludEYoKSBjb25zdDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBGaXhlZFBvaW50KGNv
bnN0IEdka1BvaW50Jik7CisgICAgb3BlcmF0b3IgR2RrUG9pbnQoKSBjb25zdDsKKyNlbGlmIFBM
QVRGT1JNKEhBSUtVKQorICAgIGV4cGxpY2l0IEZpeGVkUG9pbnQoY29uc3QgQlBvaW50Jik7Cisg
ICAgb3BlcmF0b3IgQlBvaW50KCkgY29uc3Q7CisjZWxpZiBQTEFURk9STShFRkwpCisgICAgZXhw
bGljaXQgRml4ZWRQb2ludChjb25zdCBFdmFzX1BvaW50Jik7CisgICAgb3BlcmF0b3IgRXZhc19Q
b2ludCgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShXWCkKKyAgICBGaXhlZFBvaW50
KGNvbnN0IHd4UG9pbnQmKTsKKyAgICBvcGVyYXRvciB3eFBvaW50KCkgY29uc3Q7CisjZW5kaWYK
KworI2lmIFBMQVRGT1JNKEJSRVdNUCkKKyAgICBGaXhlZFBvaW50KGNvbnN0IEFFRVBvaW50Jik7
CisgICAgb3BlcmF0b3IgQUVFUG9pbnQoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgVVNFKFNLSUEp
CisgICAgRml4ZWRQb2ludChjb25zdCBTa1BvaW50Jik7CisgICAgb3BlcmF0b3IgU2tJUG9pbnQo
KSBjb25zdDsKKyAgICBvcGVyYXRvciBTa1BvaW50KCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0
ZToKKyAgICBBcHBVbml0IG1feCwgbV95OworfTsKKworaW5saW5lIEZpeGVkUG9pbnQmIG9wZXJh
dG9yKz0oRml4ZWRQb2ludCYgYSwgY29uc3QgRml4ZWRTaXplJiBiKQoreworICAgIGEubW92ZShi
LndpZHRoKCksIGIuaGVpZ2h0KCkpOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgRml4ZWRQ
b2ludCYgb3BlcmF0b3ItPShGaXhlZFBvaW50JiBhLCBjb25zdCBGaXhlZFNpemUmIGIpCit7Cisg
ICAgYS5tb3ZlKC1iLndpZHRoKCksIC1iLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKwor
aW5saW5lIEZpeGVkUG9pbnQgb3BlcmF0b3IrKGNvbnN0IEZpeGVkUG9pbnQmIGEsIGNvbnN0IEZp
eGVkU2l6ZSYgYikKK3sKKyAgICByZXR1cm4gRml4ZWRQb2ludChhLngoKSArIGIud2lkdGgoKSwg
YS55KCkgKyBiLmhlaWdodCgpKTsKK30KKworaW5saW5lIEZpeGVkUG9pbnQgb3BlcmF0b3IrKGNv
bnN0IEZpeGVkUG9pbnQmIGEsIGNvbnN0IEZpeGVkUG9pbnQmIGIpCit7CisgICAgcmV0dXJuIEZp
eGVkUG9pbnQoYS54KCkgKyBiLngoKSwgYS55KCkgKyBiLnkoKSk7Cit9CisKK2lubGluZSBGaXhl
ZFNpemUgb3BlcmF0b3ItKGNvbnN0IEZpeGVkUG9pbnQmIGEsIGNvbnN0IEZpeGVkUG9pbnQmIGIp
Cit7CisgICAgcmV0dXJuIEZpeGVkU2l6ZShhLngoKSAtIGIueCgpLCBhLnkoKSAtIGIueSgpKTsK
K30KKworaW5saW5lIEZpeGVkUG9pbnQgb3BlcmF0b3ItKGNvbnN0IEZpeGVkUG9pbnQmIGEsIGNv
bnN0IEZpeGVkU2l6ZSYgYikKK3sKKyAgICByZXR1cm4gRml4ZWRQb2ludChhLngoKSAtIGIud2lk
dGgoKSwgYS55KCkgLSBiLmhlaWdodCgpKTsKK30KKworaW5saW5lIEZpeGVkUG9pbnQgb3BlcmF0
b3ItKGNvbnN0IEZpeGVkUG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiBGaXhlZFBvaW50KC1w
b2ludC54KCksIC1wb2ludC55KCkpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEZpeGVkUG9pbnQmIGEsIGNvbnN0IEZpeGVkUG9pbnQmIGIpCit7CisgICAgcmV0dXJuIGEueCgp
ID09IGIueCgpICYmIGEueSgpID09IGIueSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEZpeGVkUG9pbnQmIGEsIGNvbnN0IEZpeGVkUG9pbnQmIGIpCit7CisgICAgcmV0dXJu
IGEueCgpICE9IGIueCgpIHx8IGEueSgpICE9IGIueSgpOworfQorCitpbmxpbmUgRml4ZWRQb2lu
dCB0b1BvaW50KGNvbnN0IEZpeGVkU2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gRml4ZWRQb2lu
dChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworfQorCitpbmxpbmUgRml4ZWRTaXplIHRv
U2l6ZShjb25zdCBGaXhlZFBvaW50JiBhKQoreworICAgIHJldHVybiBGaXhlZFNpemUoYS54KCks
IGEueSgpKTsKK30KKworaW5saW5lIEludFBvaW50IGZsb29yZWRJbnRQb2ludChjb25zdCBGaXhl
ZFBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLnRvSW50KCks
IHBvaW50LnkoKS50b0ludCgpKTsKK30KKworaW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2lu
dChjb25zdCBGaXhlZFBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQu
eCgpLnJvdW5kKCksIHBvaW50LnkoKS5yb3VuZCgpKTsKK30KKworaW5saW5lIEludFBvaW50IGNl
aWxlZEludFBvaW50KGNvbnN0IEZpeGVkUG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiBJbnRQ
b2ludChwb2ludC54KCkuY2VpbCgpLCBwb2ludC55KCkuY2VpbCgpKTsKK30KKworI2lmIFBMQVRG
T1JNKFFUKQoraW5saW5lIFFEYXRhU3RyZWFtJiBvcGVyYXRvcjw8KFFEYXRhU3RyZWFtJiBzdHJl
YW0sIGNvbnN0IEZpeGVkUG9pbnQmIHBvaW50KQoreworICAgIHN0cmVhbSA8PCBwb2ludC54KCku
dG9GbG9hdCgpIDw8IHBvaW50LnkoKS50b0Zsb2F0KCk7CisgICAgcmV0dXJuIHN0cmVhbTsKK30K
KworaW5saW5lIFFEYXRhU3RyZWFtJiBvcGVyYXRvcj4+KFFEYXRhU3RyZWFtJiBzdHJlYW0sIEZp
eGVkUG9pbnQmIHBvaW50KQoreworICAgIGZsb2F0IHgsIHk7CisgICAgc3RyZWFtID4+IHggPj4g
eTsKKyAgICBwb2ludC5zZXRYKHgpOworICAgIHBvaW50LnNldFkoeSk7CisgICAgcmV0dXJuIHN0
cmVhbTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBG
aXhlZFBvaW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZpeGVk
UmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rml4ZWRSZWN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZpeGVkUmVjdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTY3IEBACisvKgor
ICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaXhlZFJlY3QuaCIKKworI2luY2x1ZGUgIkFwcFVu
aXQuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworRml4ZWRSZWN0OjpGaXhlZFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByKQorICAgIDogbV9sb2NhdGlvbihGaXhlZFBvaW50KHIueCgpLCByLnkoKSkpCisgICAgLCBt
X3NpemUoRml4ZWRTaXplKHIud2lkdGgoKSwgci5oZWlnaHQoKSkpCit7Cit9CisKK2Jvb2wgRml4
ZWRSZWN0OjppbnRlcnNlY3RzKGNvbnN0IEZpeGVkUmVjdCYgb3RoZXIpIGNvbnN0Cit7CisgICAg
Ly8gQ2hlY2tpbmcgZW1wdGluZXNzIGhhbmRsZXMgbmVnYXRpdmUgd2lkdGhzIGFzIHdlbGwgYXMg
emVyby4KKyAgICByZXR1cm4gIWlzRW1wdHkoKSAmJiAhb3RoZXIuaXNFbXB0eSgpCisgICAgICAg
ICYmIHgoKSA8IG90aGVyLm1heFgoKSAmJiBvdGhlci54KCkgPCBtYXhYKCkKKyAgICAgICAgJiYg
eSgpIDwgb3RoZXIubWF4WSgpICYmIG90aGVyLnkoKSA8IG1heFkoKTsKK30KKworYm9vbCBGaXhl
ZFJlY3Q6OmNvbnRhaW5zKGNvbnN0IEZpeGVkUmVjdCYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHgoKSA8PSBvdGhlci54KCkgJiYgbWF4WCgpID49IG90aGVyLm1heFgoKQorICAgICAgICAm
JiB5KCkgPD0gb3RoZXIueSgpICYmIG1heFkoKSA+PSBvdGhlci5tYXhZKCk7Cit9CisKK3ZvaWQg
Rml4ZWRSZWN0OjppbnRlcnNlY3QoY29uc3QgRml4ZWRSZWN0JiBvdGhlcikKK3sKKyAgICBBcHBV
bml0IG5ld1ggPSBzdGQ6Om1heCh4KCksIG90aGVyLngoKSk7CisgICAgQXBwVW5pdCBuZXdZID0g
c3RkOjptYXgoeSgpLCBvdGhlci55KCkpOworICAgIEFwcFVuaXQgbmV3TWF4WCA9IHN0ZDo6bWlu
KG1heFgoKSwgb3RoZXIubWF4WCgpKTsKKyAgICBBcHBVbml0IG5ld01heFkgPSBzdGQ6Om1pbiht
YXhZKCksIG90aGVyLm1heFkoKSk7CisKKyAgICAvLyBSZXR1cm4gYSBjbGVhbiBlbXB0eSByZWN0
YW5nbGUgZm9yIG5vbi1pbnRlcnNlY3RpbmcgY2FzZXMuCisgICAgaWYgKG5ld1ggPj0gbmV3TWF4
WCB8fCBuZXdZID49IG5ld01heFkpIHsKKyAgICAgICAgbmV3WCA9IDA7CisgICAgICAgIG5ld1kg
PSAwOworICAgICAgICBuZXdNYXhYID0gMDsKKyAgICAgICAgbmV3TWF4WSA9IDA7CisgICAgfQor
CisgICAgbV9sb2NhdGlvbi5zZXRYKG5ld1gpOworICAgIG1fbG9jYXRpb24uc2V0WShuZXdZKTsK
KyAgICBtX3NpemUuc2V0V2lkdGgobmV3TWF4WCAtIG5ld1gpOworICAgIG1fc2l6ZS5zZXRIZWln
aHQobmV3TWF4WSAtIG5ld1kpOworfQorCit2b2lkIEZpeGVkUmVjdDo6dW5pdGUoY29uc3QgRml4
ZWRSZWN0JiBvdGhlcikKK3sKKyAgICAvLyBIYW5kbGUgZW1wdHkgc3BlY2lhbCBjYXNlcyBmaXJz
dC4KKyAgICBpZiAob3RoZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGlz
RW1wdHkoKSkgeworICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQXBwVW5pdCBuZXdYID0gc3RkOjptaW4oeCgpLCBvdGhlci54KCkpOworICAgIEFw
cFVuaXQgbmV3WSA9IHN0ZDo6bWluKHkoKSwgb3RoZXIueSgpKTsKKyAgICBBcHBVbml0IG5ld01h
eFggPSBzdGQ6Om1heChtYXhYKCksIG90aGVyLm1heFgoKSk7CisgICAgQXBwVW5pdCBuZXdNYXhZ
ID0gc3RkOjptYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpOworCisgICAgbV9sb2NhdGlvbi5zZXRY
KG5ld1gpOworICAgIG1fbG9jYXRpb24uc2V0WShuZXdZKTsKKyAgICBtX3NpemUuc2V0V2lkdGgo
bmV3TWF4WCAtIG5ld1gpOworICAgIG1fc2l6ZS5zZXRIZWlnaHQobmV3TWF4WSAtIG5ld1kpOwor
fQorCit2b2lkIEZpeGVkUmVjdDo6dW5pdGVJZk5vblplcm8oY29uc3QgRml4ZWRSZWN0JiBvdGhl
cikKK3sKKyAgICAvLyBIYW5kbGUgZW1wdHkgc3BlY2lhbCBjYXNlcyBmaXJzdC4KKyAgICBpZiAo
IW90aGVyLndpZHRoKCkgJiYgIW90aGVyLmhlaWdodCgpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKCF3aWR0aCgpICYmICFoZWlnaHQoKSkgeworICAgICAgICAqdGhpcyA9IG90aGVyOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQXBwVW5pdCBuZXdYID0gc3RkOjptaW4oeCgpLCBv
dGhlci54KCkpOworICAgIEFwcFVuaXQgbmV3WSA9IHN0ZDo6bWluKHkoKSwgb3RoZXIueSgpKTsK
KyAgICBBcHBVbml0IG5ld01heFggPSBzdGQ6Om1heChtYXhYKCksIG90aGVyLm1heFgoKSk7Cisg
ICAgQXBwVW5pdCBuZXdNYXhZID0gc3RkOjptYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpOworCisg
ICAgbV9sb2NhdGlvbi5zZXRYKG5ld1gpOworICAgIG1fbG9jYXRpb24uc2V0WShuZXdZKTsKKyAg
ICBtX3NpemUuc2V0V2lkdGgobmV3TWF4WCAtIG5ld1gpOworICAgIG1fc2l6ZS5zZXRIZWlnaHQo
bmV3TWF4WSAtIG5ld1kpOworfQorCit2b2lkIEZpeGVkUmVjdDo6c2NhbGUoZmxvYXQgcykKK3sK
KyAgICBtX2xvY2F0aW9uLnNldFgoeCgpICogcyk7CisgICAgbV9sb2NhdGlvbi5zZXRZKHkoKSAq
IHMpOworICAgIG1fc2l6ZS5zZXRXaWR0aCh3aWR0aCgpICogcyk7CisgICAgbV9zaXplLnNldEhl
aWdodChoZWlnaHQoKSAqIHMpOworfQorCitGaXhlZFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3Rv
cjxGaXhlZFJlY3Q+JiByZWN0cykKK3sKKyAgICBGaXhlZFJlY3QgcmVzdWx0OworCisgICAgc2l6
ZV90IGNvdW50ID0gcmVjdHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkKKyAgICAgICAgcmVzdWx0LnVuaXRlKHJlY3RzW2ldKTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK0ludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGaXhlZFJlY3QmIHJl
Y3QpCit7CisgICAgZmxvYXQgeCA9IGZsb29yZihyZWN0LngoKS50b0Zsb2F0KCkpOworICAgIGZs
b2F0IHkgPSBmbG9vcmYocmVjdC55KCkudG9GbG9hdCgpKTsKKyAgICBmbG9hdCB3aWR0aCA9IGNl
aWxmKHJlY3QubWF4WCgpLnRvRmxvYXQoKSkgLSB4OworICAgIGZsb2F0IGhlaWdodCA9IGNlaWxm
KHJlY3QubWF4WSgpLnRvRmxvYXQoKSkgLSB5OworCisgICAgcmV0dXJuIEludFJlY3QoY2xhbXBU
b0ludGVnZXIoeCksIGNsYW1wVG9JbnRlZ2VyKHkpLCAKKyAgICAgICAgICAgICAgICAgICBjbGFt
cFRvSW50ZWdlcih3aWR0aCksIGNsYW1wVG9JbnRlZ2VyKGhlaWdodCkpOworfQorCitGaXhlZFJl
Y3QgZW5jbG9zaW5nRml4ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1
cm4gRml4ZWRSZWN0KHJlY3QueCgpLCByZWN0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgIHJl
Y3QubWF4WCgpIC0gcmVjdC54KCkgKyBBcHBVbml0OjplcHNpbG9uKCksCisgICAgICAgICAgICAg
ICAgICAgICByZWN0Lm1heFkoKSAtIHJlY3QueSgpICsgQXBwVW5pdDo6ZXBzaWxvbigpKTsKK30K
KworSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnN0IEZpeGVkUmVjdCYgcmVjdCkKK3sK
KyAgICBJbnRQb2ludCByb3VuZGVkTG9jYXRpb24gPSByb3VuZGVkSW50UG9pbnQocmVjdC5sb2Nh
dGlvbigpKTsKKyAgICByZXR1cm4gSW50UmVjdChyb3VuZGVkTG9jYXRpb24sIEludFNpemUoKHJl
Y3QueCgpICsgcmVjdC53aWR0aCgpKS5yb3VuZCgpIC0gcm91bmRlZExvY2F0aW9uLngoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlY3QueSgpICsgcmVj
dC5oZWlnaHQoKSkucm91bmQoKSAtIHJvdW5kZWRMb2NhdGlvbi55KCkpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rml4ZWRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRml4ZWRSZWN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GaXhlZFJlY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBGaXhlZFJlY3RfaAorI2RlZmluZSBGaXhlZFJlY3RfaAorCisjaW5jbHVkZSAiRml4ZWRQb2lu
dC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNp
ZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkKK3R5cGVkZWYgc3RydWN0IENH
UmVjdCBDR1JlY3Q7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRGT1JNKENI
Uk9NSVVNKSAmJiBPUyhEQVJXSU4pKSB8fCAoUExBVEZPUk0oUVQpICYmIFVTRShRVEtJVCkpCisj
aWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKK3R5cGVkZWYg
c3RydWN0IENHUmVjdCBOU1JlY3Q7CisjZWxzZQordHlwZWRlZiBzdHJ1Y3QgX05TUmVjdCBOU1Jl
Y3Q7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQpCitRVF9CRUdJTl9OQU1FU1BB
Q0UKK2NsYXNzIFFSZWN0RjsKK1FUX0VORF9OQU1FU1BBQ0UKKyNlbGlmIFBMQVRGT1JNKEdUSykK
KyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgordHlwZWRlZiBzdHJ1Y3QgX0dka1JlY3RhbmdsZSBH
ZGtSZWN0YW5nbGU7CisjZW5kaWYKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQlJlY3Q7
CisjZWxpZiBQTEFURk9STShFRkwpCit0eXBlZGVmIHN0cnVjdCBfRWluYV9SZWN0YW5nbGUgRWlu
YV9SZWN0YW5nbGU7CisjZW5kaWYKKworI2lmIFVTRShDQUlSTykKK3R5cGVkZWYgc3RydWN0IF9j
YWlyb19yZWN0YW5nbGVfaW50IGNhaXJvX3JlY3RhbmdsZV9pbnRfdDsKKyNlbmRpZgorCisjaWYg
UExBVEZPUk0oV1gpCitjbGFzcyB3eFJlY3Q7CisjZW5kaWYKKworI2lmIFVTRShTS0lBKQorc3Ry
dWN0IFNrUmVjdDsKK3N0cnVjdCBTa0lSZWN0OworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgRmxvYXRSZWN0OworCitjbGFzcyBGaXhlZFJlY3QgeworcHVibGljOgorICAg
IEZpeGVkUmVjdCgpIHsgfQorICAgIEZpeGVkUmVjdChjb25zdCBGaXhlZFBvaW50JiBsb2NhdGlv
biwgY29uc3QgRml4ZWRTaXplJiBzaXplKQorICAgICAgICA6IG1fbG9jYXRpb24obG9jYXRpb24p
LCBtX3NpemUoc2l6ZSkgeyB9CisgICAgRml4ZWRSZWN0KEFwcFVuaXQgeCwgQXBwVW5pdCB5LCBB
cHBVbml0IHdpZHRoLCBBcHBVbml0IGhlaWdodCkKKyAgICAgICAgOiBtX2xvY2F0aW9uKEZpeGVk
UG9pbnQoeCwgeSkpLCBtX3NpemUoRml4ZWRTaXplKHdpZHRoLCBoZWlnaHQpKSB7IH0KKyAgICBG
aXhlZFJlY3QoY29uc3QgRmxvYXRQb2ludCYgbG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSkKKyAgICAgICAgOiBtX2xvY2F0aW9uKGxvY2F0aW9uKSwgbV9zaXplKHNpemUpIHsgfQorICAg
IEZpeGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSA6IG1fbG9jYXRpb24ocmVjdC5sb2NhdGlv
bigpKSwgbV9zaXplKHJlY3Quc2l6ZSgpKSB7IH0KKworICAgIGV4cGxpY2l0IEZpeGVkUmVjdChj
b25zdCBGbG9hdFJlY3QmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3Mg
bG9zc3kKKyAgICAgICAgCisgICAgRml4ZWRQb2ludCBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fbG9jYXRpb247IH0KKyAgICBGaXhlZFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQorCisgICAgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBGaXhlZFBvaW50JiBsb2NhdGlvbikg
eyBtX2xvY2F0aW9uID0gbG9jYXRpb247IH0KKyAgICB2b2lkIHNldFNpemUoY29uc3QgRml4ZWRT
aXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KKworICAgIEFwcFVuaXQgeCgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9jYXRpb24ueCgpOyB9CisgICAgQXBwVW5pdCB5KCkgY29uc3QgeyByZXR1cm4g
bV9sb2NhdGlvbi55KCk7IH0KKyAgICBBcHBVbml0IG1heFgoKSBjb25zdCB7IHJldHVybiB4KCkg
KyB3aWR0aCgpOyB9CisgICAgQXBwVW5pdCBtYXhZKCkgY29uc3QgeyByZXR1cm4geSgpICsgaGVp
Z2h0KCk7IH0KKyAgICBBcHBVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zaXplLndpZHRo
KCk7IH0KKyAgICBBcHBVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQo
KTsgfQorCisgICAgdm9pZCBzZXRYKEFwcFVuaXQgeCkgeyBtX2xvY2F0aW9uLnNldFgoeCk7IH0K
KyAgICB2b2lkIHNldFkoQXBwVW5pdCB5KSB7IG1fbG9jYXRpb24uc2V0WSh5KTsgfQorICAgIHZv
aWQgc2V0V2lkdGgoQXBwVW5pdCB3aWR0aCkgeyBtX3NpemUuc2V0V2lkdGgod2lkdGgpOyB9Cisg
ICAgdm9pZCBzZXRIZWlnaHQoQXBwVW5pdCBoZWlnaHQpIHsgbV9zaXplLnNldEhlaWdodChoZWln
aHQpOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaXNFbXB0
eSgpOyB9CisKKyAgICAvLyBOT1RFOiBUaGUgcmVzdWx0IGlzIHJvdW5kZWQgdG8gaW50ZWdlciB2
YWx1ZXMsIGFuZCB0aHVzIG1heSBiZSBub3QgdGhlIGV4YWN0CisgICAgLy8gY2VudGVyIHBvaW50
LgorICAgIEZpeGVkUG9pbnQgY2VudGVyKCkgY29uc3QgeyByZXR1cm4gRml4ZWRQb2ludCh4KCkg
KyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQorCisgICAgdm9pZCBtb3ZlKGNv
bnN0IEZpeGVkU2l6ZSYgc2l6ZSkgeyBtX2xvY2F0aW9uICs9IHNpemU7IH0gCisgICAgdm9pZCBt
b3ZlQnkoY29uc3QgRml4ZWRQb2ludCYgb2Zmc2V0KSB7IG1fbG9jYXRpb24ubW92ZShvZmZzZXQu
eCgpLCBvZmZzZXQueSgpKTsgfQorICAgIHZvaWQgbW92ZShBcHBVbml0IGR4LCBBcHBVbml0IGR5
KSB7IG1fbG9jYXRpb24ubW92ZShkeCwgZHkpOyB9IAorCisgICAgdm9pZCBleHBhbmQoY29uc3Qg
Rml4ZWRTaXplJiBzaXplKSB7IG1fc2l6ZSArPSBzaXplOyB9CisgICAgdm9pZCBleHBhbmQoQXBw
VW5pdCBkdywgQXBwVW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKGR3LCBkaCk7IH0KKyAgICB2b2lk
IGNvbnRyYWN0KGNvbnN0IEZpeGVkU2l6ZSYgc2l6ZSkgeyBtX3NpemUgLT0gc2l6ZTsgfQorICAg
IHZvaWQgY29udHJhY3QoQXBwVW5pdCBkdywgQXBwVW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKC1k
dywgLWRoKTsgfQorCisgICAgdm9pZCBzaGlmdFhFZGdlVG8oQXBwVW5pdCBlZGdlKQorICAgIHsK
KyAgICAgICAgQXBwVW5pdCBkZWx0YSA9IGVkZ2UgLSB4KCk7CisgICAgICAgIHNldFgoZWRnZSk7
CisgICAgICAgIHNldFdpZHRoKHN0ZDo6bWF4PEFwcFVuaXQ+KDAsIHdpZHRoKCkgLSBkZWx0YSkp
OworICAgIH0KKyAgICB2b2lkIHNoaWZ0TWF4WEVkZ2VUbyhBcHBVbml0IGVkZ2UpCisgICAgewor
ICAgICAgICBBcHBVbml0IGRlbHRhID0gZWRnZSAtIG1heFgoKTsKKyAgICAgICAgc2V0V2lkdGgo
c3RkOjptYXg8QXBwVW5pdD4oMCwgd2lkdGgoKSArIGRlbHRhKSk7CisgICAgfQorICAgIHZvaWQg
c2hpZnRZRWRnZVRvKEFwcFVuaXQgZWRnZSkKKyAgICB7CisgICAgICAgIEFwcFVuaXQgZGVsdGEg
PSBlZGdlIC0geSgpOworICAgICAgICBzZXRZKGVkZ2UpOworICAgICAgICBzZXRIZWlnaHQoc3Rk
OjptYXg8QXBwVW5pdD4oMCwgaGVpZ2h0KCkgLSBkZWx0YSkpOworICAgIH0KKyAgICB2b2lkIHNo
aWZ0TWF4WUVkZ2VUbyhBcHBVbml0IGVkZ2UpCisgICAgeworICAgICAgICBBcHBVbml0IGRlbHRh
ID0gZWRnZSAtIG1heFkoKTsKKyAgICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4PEFwcFVuaXQ+KDAs
IGhlaWdodCgpICsgZGVsdGEpKTsKKyAgICB9CisKKyAgICBGaXhlZFBvaW50IG1pblhNaW5ZQ29y
bmVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfSAvLyB0eXBpY2FsbHkgdG9wTGVmdAor
ICAgIEZpeGVkUG9pbnQgbWF4WE1pbllDb3JuZXIoKSBjb25zdCB7IHJldHVybiBGaXhlZFBvaW50
KG1fbG9jYXRpb24ueCgpICsgbV9zaXplLndpZHRoKCksIG1fbG9jYXRpb24ueSgpKTsgfSAvLyB0
eXBpY2FsbHkgdG9wUmlnaHQKKyAgICBGaXhlZFBvaW50IG1pblhNYXhZQ29ybmVyKCkgY29uc3Qg
eyByZXR1cm4gRml4ZWRQb2ludChtX2xvY2F0aW9uLngoKSwgbV9sb2NhdGlvbi55KCkgKyBtX3Np
emUuaGVpZ2h0KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21MZWZ0CisgICAgRml4ZWRQb2ludCBt
YXhYTWF4WUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEZpeGVkUG9pbnQobV9sb2NhdGlvbi54KCkg
KyBtX3NpemUud2lkdGgoKSwgbV9sb2NhdGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0KCkpOyB9IC8v
IHR5cGljYWxseSBib3R0b21SaWdodAorICAgIAorICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBG
aXhlZFJlY3QmKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZpeGVkUmVjdCYpIGNv
bnN0OworCisgICAgLy8gVGhpcyBjaGVja3MgdG8gc2VlIGlmIHRoZSByZWN0IGNvbnRhaW5zIHgs
eSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuCisgICAgLy8gRXF1aXZhbGVudCB0byBjaGVja2lu
ZyBpZiB0aGUgcmVjdCBjb250YWlucyBhIDF4MSByZWN0IGJlbG93IGFuZCB0byB0aGUgcmlnaHQg
b2YgKHB4LHB5KS4KKyAgICBib29sIGNvbnRhaW5zKEFwcFVuaXQgcHgsIEFwcFVuaXQgcHkpIGNv
bnN0CisgICAgICAgIHsgcmV0dXJuIHB4ID49IHgoKSAmJiBweCA8IG1heFgoKSAmJiBweSA+PSB5
KCkgJiYgcHkgPCBtYXhZKCk7IH0KKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZpeGVkUG9pbnQm
IHBvaW50KSBjb25zdCB7IHJldHVybiBjb250YWlucyhwb2ludC54KCksIHBvaW50LnkoKSk7IH0K
KworICAgIHZvaWQgaW50ZXJzZWN0KGNvbnN0IEZpeGVkUmVjdCYpOworICAgIHZvaWQgdW5pdGUo
Y29uc3QgRml4ZWRSZWN0Jik7CisgICAgdm9pZCB1bml0ZUlmTm9uWmVybyhjb25zdCBGaXhlZFJl
Y3QmKTsKKworICAgIHZvaWQgaW5mbGF0ZVgoQXBwVW5pdCBkeCkKKyAgICB7CisgICAgICAgIG1f
bG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4KTsKKyAgICAgICAgbV9zaXplLnNldFdp
ZHRoKG1fc2l6ZS53aWR0aCgpICsgZHggKyBkeCk7CisgICAgfQorICAgIHZvaWQgaW5mbGF0ZVko
QXBwVW5pdCBkeSkKKyAgICB7CisgICAgICAgIG1fbG9jYXRpb24uc2V0WShtX2xvY2F0aW9uLnko
KSAtIGR5KTsKKyAgICAgICAgbV9zaXplLnNldEhlaWdodChtX3NpemUuaGVpZ2h0KCkgKyBkeSAr
IGR5KTsKKyAgICB9CisgICAgdm9pZCBpbmZsYXRlKEFwcFVuaXQgZCkgeyBpbmZsYXRlWChkKTsg
aW5mbGF0ZVkoZCk7IH0KKyAgICB2b2lkIHNjYWxlKGZsb2F0IHMpOworCisgICAgRml4ZWRSZWN0
IHRyYW5zcG9zZWRSZWN0KCkgY29uc3QgeyByZXR1cm4gRml4ZWRSZWN0KG1fbG9jYXRpb24udHJh
bnNwb3NlZFBvaW50KCksIG1fc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpKTsgfQorCisjaWYgUExBVEZP
Uk0oV1gpCisgICAgRml4ZWRSZWN0KGNvbnN0IHd4UmVjdCYpOworICAgIG9wZXJhdG9yIHd4UmVj
dCgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShRVCkKKyAgICBGaXhlZFJlY3QoY29u
c3QgUVJlY3RGJik7CisgICAgb3BlcmF0b3IgUVJlY3RGKCkgY29uc3Q7CisjZWxpZiBQTEFURk9S
TShHVEspCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBGaXhlZFJlY3QoY29uc3QgR2Rr
UmVjdGFuZ2xlJik7CisgICAgb3BlcmF0b3IgR2RrUmVjdGFuZ2xlKCkgY29uc3Q7CisjZW5kaWYK
KyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorICAgIGV4cGxpY2l0IEZpeGVkUmVjdChjb25zdCBCUmVj
dCYpOworICAgIG9wZXJhdG9yIEJSZWN0KCkgY29uc3Q7CisjZWxpZiBQTEFURk9STShFRkwpCisg
ICAgZXhwbGljaXQgRml4ZWRSZWN0KGNvbnN0IEVpbmFfUmVjdGFuZ2xlJik7CisgICAgb3BlcmF0
b3IgRWluYV9SZWN0YW5nbGUoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgVVNFKENBSVJPKQorICAg
IEZpeGVkUmVjdChjb25zdCBjYWlyb19yZWN0YW5nbGVfaW50X3QmKTsKKyAgICBvcGVyYXRvciBj
YWlyb19yZWN0YW5nbGVfaW50X3QoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgVVNFKENHKSB8fCBV
U0UoU0tJQV9PTl9NQUNfQ0hST01JVU0pCisgICAgRml4ZWRSZWN0KGNvbnN0IENHUmVjdCYpOwor
ICAgIG9wZXJhdG9yIENHUmVjdCgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBVU0UoU0tJQSkKKyAg
ICBGaXhlZFJlY3QoY29uc3QgU2tSZWN0Jik7CisgICAgb3BlcmF0b3IgU2tSZWN0KCkgY29uc3Q7
CisgICAgb3BlcmF0b3IgU2tJUmVjdCgpIGNvbnN0OworI2VuZGlmCisKKyNpZiAoUExBVEZPUk0o
TUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBF
UykpIFwKKyAgICAgICAgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKSAgfHwg
KFBMQVRGT1JNKFFUKSAmJiBVU0UoUVRLSVQpKQorICAgIEZpeGVkUmVjdChjb25zdCBOU1JlY3Qm
KTsKKyAgICBvcGVyYXRvciBOU1JlY3QoKSBjb25zdDsKKyNlbmRpZgorCisgICAgc3RhdGljIEZp
eGVkUmVjdCBpbmZpbml0ZVJlY3QoKSB7cmV0dXJuIEZpeGVkUmVjdChBcHBVbml0OjptaW4oKSAv
IDIsIEFwcFVuaXQ6Om1pbigpIC8gMiwgQXBwVW5pdDo6bWF4KCksIEFwcFVuaXQ6Om1heCgpKTsg
fQorCitwcml2YXRlOgorICAgIEZpeGVkUG9pbnQgbV9sb2NhdGlvbjsKKyAgICBGaXhlZFNpemUg
bV9zaXplOworfTsKKworaW5saW5lIEZpeGVkUmVjdCBpbnRlcnNlY3Rpb24oY29uc3QgRml4ZWRS
ZWN0JiBhLCBjb25zdCBGaXhlZFJlY3QmIGIpCit7CisgICAgRml4ZWRSZWN0IGMgPSBhOworICAg
IGMuaW50ZXJzZWN0KGIpOworICAgIHJldHVybiBjOworfQorCitpbmxpbmUgRml4ZWRSZWN0IHVu
aW9uUmVjdChjb25zdCBGaXhlZFJlY3QmIGEsIGNvbnN0IEZpeGVkUmVjdCYgYikKK3sKKyAgICBG
aXhlZFJlY3QgYyA9IGE7CisgICAgYy51bml0ZShiKTsKKyAgICByZXR1cm4gYzsKK30KKworRml4
ZWRSZWN0IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8Rml4ZWRSZWN0PiYpOworCitpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEZpeGVkUmVjdCYgYSwgY29uc3QgRml4ZWRSZWN0JiBiKQorewor
ICAgIHJldHVybiBhLmxvY2F0aW9uKCkgPT0gYi5sb2NhdGlvbigpICYmIGEuc2l6ZSgpID09IGIu
c2l6ZSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZpeGVkUmVjdCYgYSwg
Y29uc3QgRml4ZWRSZWN0JiBiKQoreworICAgIHJldHVybiBhLmxvY2F0aW9uKCkgIT0gYi5sb2Nh
dGlvbigpIHx8IGEuc2l6ZSgpICE9IGIuc2l6ZSgpOworfQorCitJbnRSZWN0IGVuY2xvc2luZ0lu
dFJlY3QoY29uc3QgRml4ZWRSZWN0Jik7CitGaXhlZFJlY3QgZW5jbG9zaW5nRml4ZWRSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpOworSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnN0IEZpeGVk
UmVjdCYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGaXhlZFJlY3Rf
aApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRTaXplLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFNpemUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRml4
ZWRTaXplLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRml4ZWRTaXplLmgiCisKKyNpbmNsdWRlICJGaXhlZFBvaW50LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50U2l6ZSBwaXhlbFNuYXBwZWRJbnRTaXplKGNvbnN0
IEZpeGVkU2l6ZSYgcywgY29uc3QgRml4ZWRQb2ludCYgcCkKK3sKKyAgICByZXR1cm4gSW50U2l6
ZShzbmFwU2l6ZVRvUGl4ZWwocy53aWR0aCgpLCBwLngoKSksIHNuYXBTaXplVG9QaXhlbChzLmhl
aWdodCgpLCBwLnkoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFNpemUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFNpemUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZpeGVkU2l6ZS5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZpeGVkU2l6ZV9oCisjZGVmaW5lIEZpeGVk
U2l6ZV9oCisKKyNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkKK3R5cGVk
ZWYgc3RydWN0IENHU2l6ZSBDR1NpemU7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykgfHwg
KFBMQVRGT1JNKFFUKSAmJiBVU0UoUVRLSVQpKQorI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FN
RV9BU19DR0dFT01FVFJZX1RZUEVTCit0eXBlZGVmIHN0cnVjdCBDR1NpemUgTlNTaXplOworI2Vs
c2UKK3R5cGVkZWYgc3RydWN0IF9OU1NpemUgTlNTaXplOworI2VuZGlmCisjZW5kaWYKKworI2lm
IFBMQVRGT1JNKFdJTikKK3R5cGVkZWYgc3RydWN0IHRhZ1NJWkUgU0laRTsKKyNlbGlmIFBMQVRG
T1JNKFFUKQorI2luY2x1ZGUgPHFnbG9iYWwuaD4KK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3Mg
UVNpemVGOworUVRfRU5EX05BTUVTUEFDRQorI2VsaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBC
U2l6ZTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV1gpCitjbGFzcyB3eFNpemU7CisjZW5kaWYK
KworI2lmIFBMQVRGT1JNKEJSRVdNUCkKK3R5cGVkZWYgc3RydWN0IEFFRVNpemUgQUVFU2l6ZTsK
KyNlbmRpZgorCisjaW5jbHVkZSAiQXBwVW5pdC5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgor
I2luY2x1ZGUgIkludFNpemUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaXhl
ZFBvaW50OworCitjbGFzcyBGaXhlZFNpemUgeworcHVibGljOgorICAgIEZpeGVkU2l6ZSgpIDog
bV93aWR0aCgwKSwgbV9oZWlnaHQoMCkgeyB9CisgICAgRml4ZWRTaXplKGNvbnN0IEludFNpemUm
IHNpemUpIDogbV93aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKSB7
IH0KKyAgICBGaXhlZFNpemUoQXBwVW5pdCB3aWR0aCwgQXBwVW5pdCBoZWlnaHQpIDogbV93aWR0
aCh3aWR0aCksIG1faGVpZ2h0KGhlaWdodCkgeyB9CisKKyAgICBleHBsaWNpdCBGaXhlZFNpemUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKSA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKSwgbV9oZWlnaHQo
c2l6ZS5oZWlnaHQoKSkgeyB9CisgICAgCisgICAgQXBwVW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fd2lkdGg7IH0KKyAgICBBcHBVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVp
Z2h0OyB9CisKKyAgICB2b2lkIHNldFdpZHRoKEFwcFVuaXQgd2lkdGgpIHsgbV93aWR0aCA9IHdp
ZHRoOyB9CisgICAgdm9pZCBzZXRIZWlnaHQoQXBwVW5pdCBoZWlnaHQpIHsgbV9oZWlnaHQgPSBo
ZWlnaHQ7IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGggPD0g
MCB8fCBtX2hlaWdodCA8PSAwOyB9CisgICAgYm9vbCBpc1plcm8oKSBjb25zdCB7IHJldHVybiAh
bV93aWR0aCAmJiAhbV9oZWlnaHQ7IH0KKworICAgIGZsb2F0IGFzcGVjdFJhdGlvKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fd2lkdGgpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG1faGVpZ2h0KTsgfQorICAgIAorICAgIHZvaWQgZXhwYW5kKEFwcFVuaXQgd2lkdGgsIEFwcFVu
aXQgaGVpZ2h0KQorICAgIHsKKyAgICAgICAgbV93aWR0aCArPSB3aWR0aDsKKyAgICAgICAgbV9o
ZWlnaHQgKz0gaGVpZ2h0OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNjYWxlKGZsb2F0IHNjYWxl
KQorICAgIHsKKyAgICAgICAgbV93aWR0aCA9IHN0YXRpY19jYXN0PGludD4oc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG1fd2lkdGgpICogc2NhbGUpOworICAgICAgICBtX2hlaWdodCA9IHN0YXRpY19jYXN0
PGludD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1faGVpZ2h0KSAqIHNjYWxlKTsKKyAgICB9CisgICAg
CisgICAgRml4ZWRTaXplIGV4cGFuZGVkVG8oY29uc3QgRml4ZWRTaXplJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBGaXhlZFNpemUobV93aWR0aCA+IG90aGVyLm1fd2lkdGgg
PyBtX3dpZHRoIDogb3RoZXIubV93aWR0aCwKKyAgICAgICAgICAgIG1faGVpZ2h0ID4gb3RoZXIu
bV9oZWlnaHQgPyBtX2hlaWdodCA6IG90aGVyLm1faGVpZ2h0KTsKKyAgICB9CisKKyAgICBGaXhl
ZFNpemUgc2hydW5rVG8oY29uc3QgRml4ZWRTaXplJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBGaXhlZFNpemUobV93aWR0aCA8IG90aGVyLm1fd2lkdGggPyBtX3dpZHRoIDog
b3RoZXIubV93aWR0aCwKKyAgICAgICAgICAgIG1faGVpZ2h0IDwgb3RoZXIubV9oZWlnaHQgPyBt
X2hlaWdodCA6IG90aGVyLm1faGVpZ2h0KTsKKyAgICB9CisKKyAgICB2b2lkIGNsYW1wTmVnYXRp
dmVUb1plcm8oKQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKEZpeGVkU2l6ZSgp
KTsKKyAgICB9CisKKyAgICBGaXhlZFNpemUgdHJhbnNwb3NlZFNpemUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIEZpeGVkU2l6ZShtX2hlaWdodCwgbV93aWR0aCk7CisgICAgfQorCisj
aWYgVVNFKENHKSB8fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01JVU0pCisgICAgZXhwbGljaXQgRml4
ZWRTaXplKGNvbnN0IENHU2l6ZSYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2Ug
aXQncyBsb3NzeQorICAgIG9wZXJhdG9yIENHU2l6ZSgpIGNvbnN0OworI2VuZGlmCisKKyNpZiAo
UExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oUVQpICYmIFVTRShRVEtJVCkpIHx8IFBMQVRGT1JN
KENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NB
TUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykKKyAgICBleHBsaWNpdCBGaXhlZFNpemUoY29uc3QgTlNT
aXplICYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQorICAg
IG9wZXJhdG9yIE5TU2l6ZSgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisg
ICAgRml4ZWRTaXplKGNvbnN0IFNJWkUmKTsKKyAgICBvcGVyYXRvciBTSVpFKCkgY29uc3Q7Cisj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKFFUKQorICAgIEZpeGVkU2l6ZShjb25zdCBRU2l6ZUYmKTsK
KyAgICBvcGVyYXRvciBRU2l6ZUYoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSEFJ
S1UpCisgICAgZXhwbGljaXQgRml4ZWRTaXplKGNvbnN0IEJTaXplJik7CisgICAgb3BlcmF0b3Ig
QlNpemUoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV1gpCisgICAgRml4ZWRTaXpl
KGNvbnN0IHd4U2l6ZSYpOworICAgIG9wZXJhdG9yIHd4U2l6ZSgpIGNvbnN0OworI2VuZGlmCisK
KyNpZiBQTEFURk9STShCUkVXTVApCisgICAgRml4ZWRTaXplKGNvbnN0IEFFRVNpemUmKTsKKyAg
ICBvcGVyYXRvciBBRUVTaXplKCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBBcHBV
bml0IG1fd2lkdGgsIG1faGVpZ2h0OworfTsKKworaW5saW5lIEZpeGVkU2l6ZSYgb3BlcmF0b3Ir
PShGaXhlZFNpemUmIGEsIGNvbnN0IEZpeGVkU2l6ZSYgYikKK3sKKyAgICBhLnNldFdpZHRoKGEu
d2lkdGgoKSArIGIud2lkdGgoKSk7CisgICAgYS5zZXRIZWlnaHQoYS5oZWlnaHQoKSArIGIuaGVp
Z2h0KCkpOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgRml4ZWRTaXplJiBvcGVyYXRvci09
KEZpeGVkU2l6ZSYgYSwgY29uc3QgRml4ZWRTaXplJiBiKQoreworICAgIGEuc2V0V2lkdGgoYS53
aWR0aCgpIC0gYi53aWR0aCgpKTsKKyAgICBhLnNldEhlaWdodChhLmhlaWdodCgpIC0gYi5oZWln
aHQoKSk7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBGaXhlZFNpemUgb3BlcmF0b3IrKGNv
bnN0IEZpeGVkU2l6ZSYgYSwgY29uc3QgRml4ZWRTaXplJiBiKQoreworICAgIHJldHVybiBGaXhl
ZFNpemUoYS53aWR0aCgpICsgYi53aWR0aCgpLCBhLmhlaWdodCgpICsgYi5oZWlnaHQoKSk7Cit9
CisKK2lubGluZSBGaXhlZFNpemUgb3BlcmF0b3ItKGNvbnN0IEZpeGVkU2l6ZSYgYSwgY29uc3Qg
Rml4ZWRTaXplJiBiKQoreworICAgIHJldHVybiBGaXhlZFNpemUoYS53aWR0aCgpIC0gYi53aWR0
aCgpLCBhLmhlaWdodCgpIC0gYi5oZWlnaHQoKSk7Cit9CisKK2lubGluZSBGaXhlZFNpemUgb3Bl
cmF0b3ItKGNvbnN0IEZpeGVkU2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gRml4ZWRTaXplKC1z
aXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBGaXhlZFNpemUmIGEsIGNvbnN0IEZpeGVkU2l6ZSYgYikKK3sKKyAgICByZXR1cm4g
YS53aWR0aCgpID09IGIud2lkdGgoKSAmJiBhLmhlaWdodCgpID09IGIuaGVpZ2h0KCk7Cit9CisK
K2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRml4ZWRTaXplJiBhLCBjb25zdCBGaXhlZFNp
emUmIGIpCit7CisgICAgcmV0dXJuIGEud2lkdGgoKSAhPSBiLndpZHRoKCkgfHwgYS5oZWlnaHQo
KSAhPSBiLmhlaWdodCgpOworfQorCitpbmxpbmUgSW50U2l6ZSBmbG9vcmVkSW50U2l6ZShjb25z
dCBGaXhlZFNpemUmIHMpCit7CisgICAgcmV0dXJuIEludFNpemUocy53aWR0aCgpLnRvSW50KCks
IHMuaGVpZ2h0KCkudG9JbnQoKSk7Cit9CisKK2lubGluZSBJbnRTaXplIHJvdW5kZWRJbnRTaXpl
KGNvbnN0IEZpeGVkU2l6ZSYgcykKK3sKKyAgICByZXR1cm4gSW50U2l6ZShzLndpZHRoKCkucm91
bmQoKSwgcy5oZWlnaHQoKS5yb3VuZCgpKTsKK30KKworSW50U2l6ZSBwaXhlbFNuYXBwZWRJbnRT
aXplKGNvbnN0IEZpeGVkU2l6ZSYsIGNvbnN0IEZpeGVkUG9pbnQmKTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRml4ZWRTaXplX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCShyZXZpc2lvbiAxMDY0MDYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMTAgQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAK
ICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oIgorI2luY2x1ZGUgIkZpeGVkUG9pbnQuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNp
b24uaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPG1hdGguaD4KIApAQCAtNDAsNiAr
NDEsMTAgQEAgRmxvYXRQb2ludDo6RmxvYXRQb2ludChjb25zdCBJbnRQb2ludCYgcAogewogfQog
CitGbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IEZpeGVkUG9pbnQmIHApIDogbV94KHAueCgp
KSwgbV95KHAueSgpKQoreworfQorCiB2b2lkIEZsb2F0UG9pbnQ6Om5vcm1hbGl6ZSgpCiB7CiAg
ICAgZmxvYXQgdGVtcExlbmd0aCA9IGxlbmd0aCgpOwpAQCAtNTUsNiArNjAsMTggQEAgZmxvYXQg
RmxvYXRQb2ludDo6bGVuZ3RoKCkgY29uc3QKICAgICByZXR1cm4gc3FydGYobGVuZ3RoU3F1YXJl
ZCgpKTsKIH0KIAordm9pZCBGbG9hdFBvaW50Ojptb3ZlKGNvbnN0IEZpeGVkU2l6ZSYgc2l6ZSkK
K3sKKyAgICBtX3ggKz0gc2l6ZS53aWR0aCgpOworICAgIG1feSArPSBzaXplLmhlaWdodCgpOwor
fQorCit2b2lkIEZsb2F0UG9pbnQ6Om1vdmVCeShjb25zdCBGaXhlZFBvaW50JiBwb2ludCkKK3sK
KyAgICBtX3ggKz0gcG9pbnQueCgpOworICAgIG1feSArPSBwb2ludC55KCk7Cit9CisKIEZsb2F0
UG9pbnQgRmxvYXRQb2ludDo6bWF0cml4VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtKSBjb25zdAogewogICAgIGRvdWJsZSBuZXdYLCBuZXdZOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAkocmV2aXNpb24gMTA2
NDA2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MCwxMyArNjAsMTUgQEAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwog
Y2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiBjbGFzcyBJbnRQb2ludDsKIGNsYXNzIEludFNp
emU7CitjbGFzcyBGaXhlZFBvaW50OworY2xhc3MgRml4ZWRTaXplOwogCiBjbGFzcyBGbG9hdFBv
aW50IHsKIHB1YmxpYzoKICAgICBGbG9hdFBvaW50KCkgOiBtX3goMCksIG1feSgwKSB7IH0KICAg
ICBGbG9hdFBvaW50KGZsb2F0IHgsIGZsb2F0IHkpIDogbV94KHgpLCBtX3koeSkgeyB9CiAgICAg
RmxvYXRQb2ludChjb25zdCBJbnRQb2ludCYpOwotCisgICAgRmxvYXRQb2ludChjb25zdCBGaXhl
ZFBvaW50Jik7CiAKICAgICBzdGF0aWMgRmxvYXRQb2ludCB6ZXJvKCkgeyByZXR1cm4gRmxvYXRQ
b2ludCgpOyB9CiAKQEAgLTkyLDYgKzk0LDcgQEAgcHVibGljOgogICAgICAgICBtX3ggKz0gYS53
aWR0aCgpOwogICAgICAgICBtX3kgKz0gYS5oZWlnaHQoKTsKICAgICB9CisgICAgdm9pZCBtb3Zl
KGNvbnN0IEZpeGVkU2l6ZSYpOwogICAgIHZvaWQgbW92ZShjb25zdCBGbG9hdFNpemUmIGEpCiAg
ICAgewogICAgICAgICBtX3ggKz0gYS53aWR0aCgpOwpAQCAtMTAyLDYgKzEwNSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgbV94ICs9IGEueCgpOwogICAgICAgICBtX3kgKz0gYS55KCk7CiAgICAgfQor
ICAgIHZvaWQgbW92ZUJ5KGNvbnN0IEZpeGVkUG9pbnQmIGEpOwogICAgIHZvaWQgbW92ZUJ5KGNv
bnN0IEZsb2F0UG9pbnQmIGEpCiAgICAgewogICAgICAgICBtX3ggKz0gYS54KCk7CkBAIC0xMzEs
NiArMTM1LDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoc3RkOjptYXgo
bV94LCBvdGhlci5tX3gpLCBzdGQ6Om1heChtX3ksIG90aGVyLm1feSkpOwogICAgIH0KIAorICAg
IEZsb2F0UG9pbnQgc2hydW5rVG8oY29uc3QgRmxvYXRQb2ludCYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gRmxvYXRQb2ludChtX3ggPCBvdGhlci5tX3ggPyBtX3ggOiBvdGhl
ci5tX3gsCisgICAgICAgICAgICBtX3kgPCBvdGhlci5tX3kgPyBtX3kgOiBvdGhlci5tX3kpOwor
ICAgIH0KKworICAgIHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCisgICAgeworICAgICAgICAq
dGhpcyA9IGV4cGFuZGVkVG8oemVybygpKTsKKyAgICB9CisKICAgICBGbG9hdFBvaW50IHRyYW5z
cG9zZWRQb2ludCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gRmxvYXRQb2ludChtX3ks
IG1feCk7CkBAIC0yMzksNiArMjU0LDExIEBAIGlubGluZSBJbnRTaXplIGZsb29yZWRJbnRTaXpl
KGNvbnN0IEZsb2EKICAgICByZXR1cm4gSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHAueCgpKSwg
c3RhdGljX2Nhc3Q8aW50PihwLnkoKSkpOwogfQogCitpbmxpbmUgRmxvYXRQb2ludCB0b1BvaW50
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gRmxvYXRQb2ludChzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpOworfQorCiBmbG9hdCBmaW5kU2xvcGUoY29uc3QgRmxvYXRQ
b2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCYgYyk7CiAKIC8vIEZpbmQgcG9p
bnQgd2hlcmUgbGluZXMgdGhyb3VnaCB0aGUgdHdvIHBhaXJzIG9mIHBvaW50cyBpbnRlcnNlY3Qu
IFJldHVybnMgZmFsc2UgaWYgdGhlIGxpbmVzIGRvbid0IGludGVyc2VjdC4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAkocmV2aXNpb24g
MTA2NDA2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogCisjaW5jbHVkZSAiRml4ZWRSZWN0LmgiCiAjaW5jbHVk
ZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgPGFs
Z29yaXRobT4KQEAgLTQyLDYgKzQzLDEwIEBAIEZsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IElu
dFJlY3QmIHIpIDoKIHsKIH0KIAorRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgRml4ZWRSZWN0
JiByKSA6IG1fbG9jYXRpb24oci5sb2NhdGlvbigpKSwgbV9zaXplKHIuc2l6ZSgpKQoreworfQor
CiBGbG9hdFJlY3QgRmxvYXRSZWN0OjpuYXJyb3dQcmVjaXNpb24oZG91YmxlIHgsIGRvdWJsZSB5
LCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpCiB7CiAgICAgcmV0dXJuIEZsb2F0UmVjdChu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHgpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHkpLCBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KHdpZHRoKSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChoZWlnaHQp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5o
CShyZXZpc2lvbiAxMDY0MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBWR1JlY3Q7CiAjZW5kaWYKIAorY2xhc3MgRml4ZWRSZWN0OwogY2xhc3Mg
SW50UmVjdDsKIGNsYXNzIEludFBvaW50OwogCkBAIC04Miw2ICs4Myw3IEBAIHB1YmxpYzoKICAg
ICBGbG9hdFJlY3QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkK
ICAgICAgICAgOiBtX2xvY2F0aW9uKEZsb2F0UG9pbnQoeCwgeSkpLCBtX3NpemUoRmxvYXRTaXpl
KHdpZHRoLCBoZWlnaHQpKSB7IH0KICAgICBGbG9hdFJlY3QoY29uc3QgSW50UmVjdCYpOworICAg
IEZsb2F0UmVjdChjb25zdCBGaXhlZFJlY3QmKTsKIAogICAgIHN0YXRpYyBGbG9hdFJlY3QgbmFy
cm93UHJlY2lzaW9uKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHdpZHRoLCBkb3VibGUgaGVp
Z2h0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXpl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFNpemUuY3BwCShyZXZpc2lvbiAxMDY0MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFNpemUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAKKyNpbmNsdWRlICJG
aXhlZFNpemUuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJJbnRT
aXplLmgiCiAjaW5jbHVkZSA8bGltaXRzPgpAQCAtNDAsNiArNDEsMTAgQEAgRmxvYXRTaXplOjpG
bG9hdFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZQogewogfQogCitGbG9hdFNpemU6OkZsb2F0U2l6
ZShjb25zdCBGaXhlZFNpemUmIHNpemUpIDogbV93aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdo
dChzaXplLmhlaWdodCgpKQoreworfQorCiBmbG9hdCBGbG9hdFNpemU6OmRpYWdvbmFsTGVuZ3Ro
KCkgY29uc3QKIHsKICAgICByZXR1cm4gc3FydGYoZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgJKHJl
dmlzaW9uIDEwNjQwNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
U2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMiArNDYsMTQgQEAgdHlwZWRlZiBzdHJ1Y3Qg
X05TU2l6ZSBOU1NpemU7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEludFNpemU7Citj
bGFzcyBGaXhlZFNpemU7CiAKIGNsYXNzIEZsb2F0U2l6ZSB7CiBwdWJsaWM6CiAgICAgRmxvYXRT
aXplKCkgOiBtX3dpZHRoKDApLCBtX2hlaWdodCgwKSB7IH0KICAgICBGbG9hdFNpemUoZmxvYXQg
d2lkdGgsIGZsb2F0IGhlaWdodCkgOiBtX3dpZHRoKHdpZHRoKSwgbV9oZWlnaHQoaGVpZ2h0KSB7
IH0KICAgICBGbG9hdFNpemUoY29uc3QgSW50U2l6ZSYpOworICAgIEZsb2F0U2l6ZShjb25zdCBG
aXhlZFNpemUmKTsKIAogICAgIHN0YXRpYyBGbG9hdFNpemUgbmFycm93UHJlY2lzaW9uKGRvdWJs
ZSB3aWR0aCwgZG91YmxlIGhlaWdodCk7CiAKQEAgLTY1LDYgKzY3LDExIEBAIHB1YmxpYzoKICAg
ICBib29sIGlzWmVybygpIGNvbnN0OwogICAgIGJvb2wgaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgp
IGNvbnN0OwogCisgICAgYm9vbCBpc1JvdWdobHlFcXVhbFRvKGNvbnN0IEZsb2F0U2l6ZSYgcykK
KyAgICB7CisgICAgICAgIHJldHVybiBhYnMod2lkdGgoKSAtIHMud2lkdGgoKSkgPCAwLjEgJiYg
YWJzKGhlaWdodCgpIC0gcy5oZWlnaHQoKSkgPCAwLjE7CisgICAgfQorCiAgICAgZmxvYXQgYXNw
ZWN0UmF0aW8oKSBjb25zdCB7IHJldHVybiBtX3dpZHRoIC8gbV9oZWlnaHQ7IH0KIAogICAgIHZv
aWQgZXhwYW5kKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAkocmV2aXNpb24gMTA2NDA2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCiAKKyNpbmNsdWRlICJGaXhlZFJlY3QuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
ICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKQEAgLTQwLDYgKzQxLDEyIEBAIEludFJlY3Q6OkludFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByKQogewogfQogCitJbnRSZWN0OjpJbnRSZWN0KGNvbnN0IEZp
eGVkUmVjdCYgcikKKyAgICA6IG1fbG9jYXRpb24oZmxvb3JlZEludFBvaW50KHIubG9jYXRpb24o
KSkpCisgICAgLCBtX3NpemUoZmxvb3JlZEludFNpemUoci5zaXplKCkpKQoreworfQorCiBib29s
IEludFJlY3Q6OmludGVyc2VjdHMoY29uc3QgSW50UmVjdCYgb3RoZXIpIGNvbnN0CiB7CiAgICAg
Ly8gQ2hlY2tpbmcgZW1wdGluZXNzIGhhbmRsZXMgbmVnYXRpdmUgd2lkdGhzIGFzIHdlbGwgYXMg
emVyby4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJ
KHJldmlzaW9uIDEwNjQwNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQCBzdHJ1Y3QgU2tJUmVjdDsK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgRml4ZWRSZWN0
OwogCiBjbGFzcyBJbnRSZWN0IHsKIHB1YmxpYzoKQEAgLTgwLDcgKzgxLDggQEAgcHVibGljOgog
ICAgIEludFJlY3QoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgICAg
IDogbV9sb2NhdGlvbihJbnRQb2ludCh4LCB5KSksIG1fc2l6ZShJbnRTaXplKHdpZHRoLCBoZWln
aHQpKSB7IH0KIAotICAgIGV4cGxpY2l0IEludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KTsg
Ly8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKKyAgICBleHBsaWNp
dCBJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkg
c2luY2UgaXQncyBsb3NzeQorICAgIGV4cGxpY2l0IEludFJlY3QoY29uc3QgRml4ZWRSZWN0Jik7
IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CiAgICAgICAgIAog
ICAgIEludFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQogICAg
IEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRml4ZWRQb2ludENHLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GaXhlZFBvaW50Q0cuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRml4ZWRQ
b2ludENHLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRml4ZWRQb2ludC5oIgorCisjaWYgVVNFKENHKSB8fCBVU0UoU0tJQV9P
Tl9NQUNfQ0hST01JVU0pCisKKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0
aW9uU2VydmljZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaXhlZFBvaW50OjpGaXhl
ZFBvaW50KGNvbnN0IENHUG9pbnQmIHApIDogbV94KHAueCksIG1feShwLnkpCit7Cit9CisKK0Zp
eGVkUG9pbnQ6Om9wZXJhdG9yIENHUG9pbnQoKSBjb25zdAoreworICAgIHJldHVybiBDR1BvaW50
TWFrZShtX3gsIG1feSk7Cit9CisKK30KKworI2VuZGlmIC8vIFVTRShDRykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ZpeGVkUmVjdENHLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GaXhlZFJlY3RDRy5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GaXhl
ZFJlY3RDRy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZpeGVkUmVjdC5oIgorCisjaWYgVVNFKENHKSB8fCBVU0UoU0tJQV9P
Tl9NQUNfQ0hST01JVU0pCisKKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0
aW9uU2VydmljZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaXhlZFJlY3Q6OkZpeGVk
UmVjdChjb25zdCBDR1JlY3QmIHIpIDogbV9sb2NhdGlvbihyLm9yaWdpbiksIG1fc2l6ZShyLnNp
emUpCit7Cit9CisKK0ZpeGVkUmVjdDo6b3BlcmF0b3IgQ0dSZWN0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gQ0dSZWN0TWFrZSh4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworfQorCit9CisK
KyNlbmRpZiAvLyBVU0UoQ0cpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9GaXhlZFNpemVDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvRml4ZWRTaXplQ0cuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRml4ZWRTaXplQ0cuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisgCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRml4ZWRTaXpl
LmgiCisKKyNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkgfHwgKFBMQVRG
T1JNKFFUKSAmJiBVU0UoUVRLSVQpKQorCisjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9B
cHBsaWNhdGlvblNlcnZpY2VzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRml4ZWRTaXpl
OjpGaXhlZFNpemUoY29uc3QgQ0dTaXplJiBzKSA6IG1fd2lkdGgocy53aWR0aCksIG1faGVpZ2h0
KHMuaGVpZ2h0KQoreworfQorCitGaXhlZFNpemU6Om9wZXJhdG9yIENHU2l6ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIENHU2l6ZU1ha2UobV93aWR0aCwgbV9oZWlnaHQpOworfQorCit9CisKKyNl
bmRpZiAvLyBVU0UoQ0cpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvRml4ZWRQb2ludE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvRml4ZWRQb2ludE1hYy5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GaXhlZFBvaW50TWFjLm1tCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaXhlZFBv
aW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmbmRlZiBOU0dFT01FVFJZX1RZUEVT
X1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUworCitGaXhlZFBvaW50OjpGaXhlZFBvaW50KGNvbnN0
IE5TUG9pbnQmIHApIDogbV94KHAueCksIG1feShwLnkpCit7Cit9CisKK0ZpeGVkUG9pbnQ6Om9w
ZXJhdG9yIE5TUG9pbnQoKSBjb25zdAoreworICAgIHJldHVybiBOU01ha2VQb2ludChtX3gudG9G
bG9hdCgpLCBtX3kudG9GbG9hdCgpKTsKK30KKworI2VuZGlmCisKK30KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GaXhlZFJlY3RNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZpeGVkUmVjdE1hYy5tbQko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GaXhl
ZFJlY3RNYWMubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZpeGVkUmVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNp
Zm5kZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKKworRml4ZWRS
ZWN0OjpGaXhlZFJlY3QoY29uc3QgTlNSZWN0JiByKSA6IG1fbG9jYXRpb24oci5vcmlnaW4pLCBt
X3NpemUoci5zaXplKQoreworfQorCitGaXhlZFJlY3Q6Om9wZXJhdG9yIE5TUmVjdCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIE5TTWFrZVJlY3QoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsK
K30KKworI2VuZGlmCisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9GaXhlZFNpemVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0ZpeGVkU2l6ZU1hYy5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GaXhlZFNpemVNYWMubW0JKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKyAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaXhlZFNp
emUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWZuZGVmIE5TR0VPTUVUUllfVFlQRVNf
U0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCisKK0ZpeGVkU2l6ZTo6Rml4ZWRTaXplKGNvbnN0IE5T
U2l6ZSYgcykgOiBtX3dpZHRoKHMud2lkdGgpLCBtX2hlaWdodChzLmhlaWdodCkKK3sKK30KKwor
Rml4ZWRTaXplOjpvcGVyYXRvciBOU1NpemUoKSBjb25zdAoreworICAgIHJldHVybiBOU01ha2VT
aXplKG1fd2lkdGgsIG1faGVpZ2h0KTsKK30KKworI2VuZGlmCisKK30KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZpeGVkUG9pbnRRdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRml4ZWRQb2ludFF0LmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZpeGVk
UG9pbnRRdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRml4ZWRQb2ludC5oIgorCisjaW5jbHVkZSA8UVBvaW50Rj4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitGaXhlZFBvaW50OjpGaXhlZFBvaW50KGNvbnN0IFFQb2lu
dEYmIHApCisgICAgOiBtX3gocC54KCkpCisgICAgLCBtX3kocC55KCkpCit7Cit9CisKK0ZpeGVk
UG9pbnQ6Om9wZXJhdG9yIFFQb2ludEYoKSBjb25zdAoreworICAgIHJldHVybiBRUG9pbnRGKG1f
eCwgbV95KTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRml4ZWRSZWN0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZpeGVkUmVjdFF0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZpeGVkUmVjdFF0LmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRml4ZWRSZWN0Lmgi
CisKKyNpbmNsdWRlIDxRUmVjdEY+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRml4ZWRSZWN0
OjpGaXhlZFJlY3QoY29uc3QgUVJlY3RGJiByKQorICAgIDogbV9sb2NhdGlvbihyLnRvcExlZnQo
KSkKKyAgICAsIG1fc2l6ZShyLndpZHRoKCkKKyAgICAsIHIuaGVpZ2h0KCkpCit7Cit9CisKK0Zp
eGVkUmVjdDo6b3BlcmF0b3IgUVJlY3RGKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUVJlY3RGKHgo
KSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7Cit9CisKK30KKwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRml4ZWRTaXplUXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZpeGVkU2l6ZVF0LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZpeGVkU2l6ZVF0
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGaXhlZFNpemUuaCIKKworI2luY2x1ZGUgPFFTaXplRj4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitGaXhlZFNpemU6OkZpeGVkU2l6ZShjb25zdCBRU2l6ZUYmIHApCisgICAg
OiBtX3dpZHRoKHAud2lkdGgoKSkKKyAgICAsIG1faGVpZ2h0KHAuaGVpZ2h0KCkpCit7Cit9CisK
K0ZpeGVkU2l6ZTo6b3BlcmF0b3IgUVNpemVGKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUVNpemVG
KG1fd2lkdGgsIG1faGVpZ2h0KTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9GaXhlZFBvaW50U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GaXhlZFBvaW50U2tpYS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZpeGVkUG9p
bnRTa2lhLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRml4ZWRQb2ludC5oIgorCisjaW5jbHVkZSAiU2tQb2ludC5oIgorI2lu
Y2x1ZGUgIlNraWFVdGlscy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZpeGVkUG9pbnQ6
OkZpeGVkUG9pbnQoY29uc3QgU2tQb2ludCYgcCkKKyAgICA6IG1feChwLmZYKQorICAgICwgbV95
KHAuZlkpCit7Cit9CisKK0ZpeGVkUG9pbnQ6Om9wZXJhdG9yIFNrUG9pbnQoKSBjb25zdAorewor
ICAgIFNrUG9pbnQgcCA9IHsgV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihtX3gpLCBXZWJDb3JlRmxv
YXRUb1NrU2NhbGFyKG1feSkgfTsKKyAgICByZXR1cm4gcDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GaXhl
ZFJlY3RTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0ZpeGVkUmVjdFNraWEuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GaXhlZFJlY3RTa2lhLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRml4ZWRSZWN0
LmgiCisKKyNpbmNsdWRlICJTa1JlY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaXhl
ZFJlY3Q6OkZpeGVkUmVjdChjb25zdCBTa1JlY3QmIHIpCisgICAgOiBtX2xvY2F0aW9uKHIuZkxl
ZnQsIHIuZlRvcCkKKyAgICAsIG1fc2l6ZShyLndpZHRoKCksIHIuaGVpZ2h0KCkpCit7Cit9CisK
K0ZpeGVkUmVjdDo6b3BlcmF0b3IgU2tSZWN0KCkgY29uc3QKK3sKKyAgICBTa1JlY3QgcmVjdCA9
IHsgeCgpLCB5KCksIG1heFgoKSwgbWF4WSgpIH07CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125951</attachid>
            <date>2012-02-07 16:16:01 -0800</date>
            <delta_ts>2012-02-10 17:46:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76571-20120207161600.patch</filename>
            <type>text/plain</type>
            <size>45594</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjk5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDEyLTAyLTA3ICBFbWlsIEEg
RWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4gYW5kIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIEFkZCBmaXhlZCBwb2ludCB0eXBlcyBmb3Igc3ViLXBpeGVs
IGxheW91dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzY1NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgZml4ZWQgcG9pbnQgdmVyc2lvbnMgb2YgdGhlIFBvaW50LCBTaXplIGFuZCBSZWN0IGNsYXNz
ZXMgdXNpbmcKKyAgICAgICAgdGhlIG5ldyBBcHBVbml0IHR5cGUgYW5kIHN3aXRjaCBMYXlvdXRV
bml0L1BvaW50L1NpemUvUmVjdCBvdmVyIHRvCisgICAgICAgIHRoZSBmaXhlZCBwb2ludCBpbXBs
ZW1lbnRhdGlvbnMuCisKKyAgICAgICAgRml4ZWRQb2ludCwgRml4ZWRTaXplIGFuZCBGaXhlZFJl
Y3QgYXJlIFBvaW50LCBTaXplIGFuZCBSZWN0CisgICAgICAgIGltcGxlbWVudGF0aW9ucyByZXNw
ZWN0aXZlbHkgdXNpbmcgdGhpcyBuZXcgdHlwZS4KKworICAgICAgICBBZGRpdGlvbmFsbHksIHBs
YXRmb3JtIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgbmV3IGNsYXNzZXMgYXJlCisg
ICAgICAgIHByb3ZpZGVkIHRvIGFsbG93IHRoZW0gdG8gYmUgdXNlZCBpbiB0aGUgc2FtZSB3YXkg
YXMgdGhlIGludCBhbmQgZmxvYXQKKyAgICAgICAgYmFzZWQgdmVyc2lvbnMgb2Ygc2FtZS4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUu
Z3lwOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRQb2ludC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3QuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3QuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvRml4ZWRTaXplLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRml4ZWRTaXplLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UG9pbnQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0U2l6ZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oOgorCiAyMDEyLTAyLTA3ICBKZXIgTm9ibGUgIDxqZXIu
bm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4OyBtYWtlIE9T
U3RhdHVzIHRoZSBleHBsaWNpdCByZXR1cm4gdHlwZSBmb3IgQ01UaW1lYmFzZSBmdW5jdGlvbnMu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTA2OTk2KQorKysgU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwOTQsNiArMTA5NCw4IEBA
IFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9GaXhl
ZFJlY3QuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRTaXplLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludDNELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTA2OTk2KQorKysgU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjkzOSw2ICsyOTM5
LDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9hcm0vRkVHYXVzc2lhbkJsdXJORU9OLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFTGlnaHRpbmdORU9OLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0vRkVMaWdodGluZ05FT04u
aCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRQb2ludC5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3QuY3BwIFwKKwlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFJlY3QuaCBcCisJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRTaXplLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRml4ZWRTaXplLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UG9pbnQzRC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UG9pbnQzRC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFBvaW50LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMDY5OTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTMwMDQsNiArMzAw
NCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVk
SW1hZ2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5l
cmF0ZWRJbWFnZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25z
M0QuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRSZWN0LmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRTaXplLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UXVhZC5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDEwNjk5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzUwNSw2
ICsyNzUwNSwyNiBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRml4ZWRQb2ludC5oIgorCQkJCQk+CisJCQkJ
PC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3NcRml4ZWRSZWN0LmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZpeGVkUmVjdC5oIgorCQkJCQk+CisJ
CQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcRml4ZWRTaXplLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZpeGVkU2l6ZS5oIgorCQkJCQk+
CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcRmxvYXRQb2ludC5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxMDY5OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMxMyw2ICszMTMsMTEgQEAKIAkJMTQ5NDdGRkUx
MkY4MENEMjAwQTBGNjMxIC8qIERvY3VtZW50T3JkZXJlZE1hcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ5NDdGRkMxMkY4MENEMjAwQTBGNjMxIC8q
IERvY3VtZW50T3JkZXJlZE1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTE0OTkzQkU1MEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xs
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ5
OTNCRTMwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxlci5jcHAgKi87IH07CiAJCTE0
OTkzQkU2MEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OTkzQkU0MEIyRjJCMUMwMDUwNDk3
RiAvKiBGb2N1c0NvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkxNEMwQTJCMjE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRQb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkFCNzcxNTgx
NDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkUG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNEMwQTJCNjE0NDYzMjFFMDA1MjA3OTggLyogRml4
ZWRSZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJBQjc3MTU2MTQ0NENCRDQwMEVDNEM0QyAvKiBGaXhlZFJlY3QuY3BwICovOyB9OworCQkxNEMw
QTJCNzE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQUI3NzE1NTE0NDRDQkQ0MDBFQzRDNEMgLyogRml4
ZWRSZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMTRDMEEyQkIxNDQ2MzIxRTAwNTIwNzk4IC8qIEZpeGVkU2l6ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQUI3NzE1MzE0NDRDQkQ0MDBFQzRD
NEMgLyogRml4ZWRTaXplLmNwcCAqLzsgfTsKKwkJMTRDMEEyQkMxNDQ2MzIxRTAwNTIwNzk4IC8q
IEZpeGVkU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkFCNzcxNTIxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkU2l6ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0QzlBNUVBMEIzRDEwNUYwMDVB
MDIzMiAvKiBTZXR0aW5ncy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNEM5QTVFOTBCM0QxMDVGMDA1QTAyMzIgLyogU2V0dGluZ3MuY3BwICovOyB9
OwogCQkxNENEOEQ4MjEwNkI1MjkwMDBBNDZEMjMgLyogSlNTaGFyZWRXb3JrZXJDdXN0b20uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDRDhEODEx
MDZCNTI5MDAwQTQ2RDIzIC8qIEpTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcCAqLzsgfTsKIAkJMTRD
Rjc4QTQwOUY1OENCRjAwRUIzNjY1IC8qIEpTQ1NTVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDRjc4QTMwOUY1OENCRjAwRUIzNjY1IC8q
IEpTQ1NTVmFsdWUuY3BwICovOyB9OwpAQCAtMTE4NzcsNiArMTE4ODIsMTEgQEAKIAkJQjhEQkRC
NDgxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0U2VsZWN0aW9uQ29tbWFuZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCOERCREI0OTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
cGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjhEQkRCNEExMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQUI3NzE1MjE0NDRDQkQ0MDBF
QzRDNEMgLyogRml4ZWRTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZp
eGVkU2l6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQUI3NzE1MzE0NDRDQkQ0
MDBFQzRDNEMgLyogRml4ZWRTaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZpeGVkU2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJBQjc3
MTU1MTQ0NENCRDQwMEVDNEM0QyAvKiBGaXhlZFJlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRml4ZWRSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJB
Qjc3MTU2MTQ0NENCRDQwMEVDNEM0QyAvKiBGaXhlZFJlY3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRml4ZWRSZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQkFCNzcxNTgxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkUG9pbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRml4ZWRQb2ludC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCQUNGMjkwMDEzQjJBMEQ1MDA3ODFGOTAgLyogTGF5b3V0VHlwZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0VHlwZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMEVGRkUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NRmlsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzAwRUZGRjBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTUZpbGUubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODc4NCw2ICsxODc5NCwxMSBAQAogCQkJCTQ5
RkM3QTRGMTQ0NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwICovLAog
CQkJCTQ5QUYyRDY4MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCAq
LywKIAkJCQk2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi8sCisJ
CQkJQkFCNzcxNTIxNDQ0Q0JENDAwRUM0QzRDIC8qIEZpeGVkU2l6ZS5oICovLAorCQkJCUJBQjc3
MTUzMTQ0NENCRDQwMEVDNEM0QyAvKiBGaXhlZFNpemUuY3BwICovLAorCQkJCUJBQjc3MTU1MTQ0
NENCRDQwMEVDNEM0QyAvKiBGaXhlZFJlY3QuaCAqLywKKwkJCQlCQUI3NzE1NjE0NDRDQkQ0MDBF
QzRDNEMgLyogRml4ZWRSZWN0LmNwcCAqLywKKwkJCQlCQUI3NzE1ODE0NDRDQkQ0MDBFQzRDNEMg
LyogRml4ZWRQb2ludC5oICovLAogCQkJCUIyNzUzNTNBMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9h
dFBvaW50LmNwcCAqLywKIAkJCQlCMjc1MzUzQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2lu
dC5oICovLAogCQkJCUIyRTI3QzlEMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuY3Bw
ICovLApAQCAtMjIxNjYsNiArMjIxODEsOSBAQAogCQkJCTQ5RUNFQjZFMTQ5OTc5MEQwMENERDNB
NCAvKiBGaWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RUNFQjcwMTQ5OTc5
MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzJD
MDBEOTEyOTYxOUY4MDA1Qzk1NzUgLyogRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTE0QzBBMkIyMTQ0NjMyMUUwMDUyMDc5OCAvKiBGaXhlZFBvaW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQkxNEMwQTJCNzE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRSZWN0LmggaW4gSGVhZGVycyAq
LywKKwkJCQkxNEMwQTJCQzE0NDYzMjFFMDA1MjA3OTggLyogRml4ZWRTaXplLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOENGRjA0RjBBMTU0RjA5MDAwQTQyMzQgLyogRml4ZWRUYWJsZUxheW91dC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwNzNCQUEwQzM5OUIxRjAwMEY1OTc5IC8qIEZsb2F0Q29u
dmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjI3NTM1NjkwQjA1MzgxNDAwMkNFNjRGIC8q
IEZsb2F0UG9pbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjUyMzMsNiArMjUyNTEsOCBAQAogCQkJ
CTMxMzEzRjY1MTQ0M0IzNUYwMDZFMkE5MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk0OUVDRUI2RDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RUNFQjZGMTQ5OTc5MEQwMENERDNBNCAvKiBG
aWx0ZXJPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0QzBBMkI2MTQ0NjMyMUUw
MDUyMDc5OCAvKiBGaXhlZFJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRDMEEyQkIxNDQ2
MzIxRTAwNTIwNzk4IC8qIEZpeGVkU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOENGRjA0
RDBBMTU0RjA5MDAwQTQyMzQgLyogRml4ZWRUYWJsZUxheW91dC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCMjc1MzU2ODBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCMkUyN0M5RjBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmNwcCBp
biBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRml4
ZWRQb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZpeGVkUG9pbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZpeGVkUG9pbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBGaXhlZFBvaW50X2gKKyNkZWZpbmUgRml4ZWRQb2ludF9oCisKKyNpbmNsdWRlICJGaXhlZFNp
emUuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaXhlZFBvaW50IHsKK3B1YmxpYzoK
KyAgICBGaXhlZFBvaW50KCkgOiBtX3goMCksIG1feSgwKSB7IH0KKyAgICBGaXhlZFBvaW50KEZy
YWN0aW9uYWxMYXlvdXRVbml0IHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHkpIDogbV94KHgpLCBt
X3koeSkgeyB9CisgICAgRml4ZWRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIDogbV94KHBv
aW50LngoKSksIG1feShwb2ludC55KCkpIHsgfQorICAgIGV4cGxpY2l0IEZpeGVkUG9pbnQoY29u
c3QgRmxvYXRQb2ludCYgc2l6ZSkgOiBtX3goc2l6ZS54KCkpLCBtX3koc2l6ZS55KCkpIHsgfQor
CisgICAgc3RhdGljIEZpeGVkUG9pbnQgemVybygpIHsgcmV0dXJuIEZpeGVkUG9pbnQoKTsgfQor
CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1feDsgfQorICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KKworICAgIHZv
aWQgc2V0WChGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KSB7IG1feCA9IHg7IH0KKyAgICB2b2lkIHNl
dFkoRnJhY3Rpb25hbExheW91dFVuaXQgeSkgeyBtX3kgPSB5OyB9CisKKyAgICB2b2lkIG1vdmUo
Y29uc3QgRml4ZWRTaXplJiBzKSB7IG1vdmUocy53aWR0aCgpLCBzLmhlaWdodCgpKTsgfSAKKyAg
ICB2b2lkIG1vdmVCeShjb25zdCBGaXhlZFBvaW50JiBvZmZzZXQpIHsgbW92ZShvZmZzZXQueCgp
LCBvZmZzZXQueSgpKTsgfQorICAgIHZvaWQgbW92ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeCwg
RnJhY3Rpb25hbExheW91dFVuaXQgZHkpIHsgbV94ICs9IGR4OyBtX3kgKz0gZHk7IH0KKyAgICB2
b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkKKyAgICB7CisgICAgICAgIG1feCAqPSBzeDsK
KyAgICAgICAgbV95ICo9IHN5OworICAgIH0KKyAgICAKKyAgICBGaXhlZFBvaW50IGV4cGFuZGVk
VG8oY29uc3QgRml4ZWRQb2ludCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
Rml4ZWRQb2ludChtX3ggPiBvdGhlci5tX3ggPyBtX3ggOiBvdGhlci5tX3gsCisgICAgICAgICAg
ICBtX3kgPiBvdGhlci5tX3kgPyBtX3kgOiBvdGhlci5tX3kpOworICAgIH0KKworICAgIEZpeGVk
UG9pbnQgc2hydW5rVG8oY29uc3QgRml4ZWRQb2ludCYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gRml4ZWRQb2ludChtX3ggPCBvdGhlci5tX3ggPyBtX3ggOiBvdGhlci5tX3gs
CisgICAgICAgICAgICBtX3kgPCBvdGhlci5tX3kgPyBtX3kgOiBvdGhlci5tX3kpOworICAgIH0K
KworICAgIHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCisgICAgeworICAgICAgICAqdGhpcyA9
IGV4cGFuZGVkVG8oemVybygpKTsKKyAgICB9CisKKyAgICBGaXhlZFBvaW50IHRyYW5zcG9zZWRQ
b2ludCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRml4ZWRQb2ludChtX3ksIG1feCk7
CisgICAgfQorCitwcml2YXRlOgorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1feCwgbV95Owor
fTsKKworaW5saW5lIEZpeGVkUG9pbnQmIG9wZXJhdG9yKz0oRml4ZWRQb2ludCYgYSwgY29uc3Qg
Rml4ZWRTaXplJiBiKQoreworICAgIGEubW92ZShiLndpZHRoKCksIGIuaGVpZ2h0KCkpOworICAg
IHJldHVybiBhOworfQorCitpbmxpbmUgRml4ZWRQb2ludCYgb3BlcmF0b3ItPShGaXhlZFBvaW50
JiBhLCBjb25zdCBGaXhlZFNpemUmIGIpCit7CisgICAgYS5tb3ZlKC1iLndpZHRoKCksIC1iLmhl
aWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZpeGVkUG9pbnQgb3BlcmF0b3Ir
KGNvbnN0IEZpeGVkUG9pbnQmIGEsIGNvbnN0IEZpeGVkU2l6ZSYgYikKK3sKKyAgICByZXR1cm4g
Rml4ZWRQb2ludChhLngoKSArIGIud2lkdGgoKSwgYS55KCkgKyBiLmhlaWdodCgpKTsKK30KKwor
aW5saW5lIEZpeGVkUG9pbnQgb3BlcmF0b3IrKGNvbnN0IEZpeGVkUG9pbnQmIGEsIGNvbnN0IEZp
eGVkUG9pbnQmIGIpCit7CisgICAgcmV0dXJuIEZpeGVkUG9pbnQoYS54KCkgKyBiLngoKSwgYS55
KCkgKyBiLnkoKSk7Cit9CisKK2lubGluZSBGaXhlZFNpemUgb3BlcmF0b3ItKGNvbnN0IEZpeGVk
UG9pbnQmIGEsIGNvbnN0IEZpeGVkUG9pbnQmIGIpCit7CisgICAgcmV0dXJuIEZpeGVkU2l6ZShh
LngoKSAtIGIueCgpLCBhLnkoKSAtIGIueSgpKTsKK30KKworaW5saW5lIEZpeGVkUG9pbnQgb3Bl
cmF0b3ItKGNvbnN0IEZpeGVkUG9pbnQmIGEsIGNvbnN0IEZpeGVkU2l6ZSYgYikKK3sKKyAgICBy
ZXR1cm4gRml4ZWRQb2ludChhLngoKSAtIGIud2lkdGgoKSwgYS55KCkgLSBiLmhlaWdodCgpKTsK
K30KKworaW5saW5lIEZpeGVkUG9pbnQgb3BlcmF0b3ItKGNvbnN0IEZpeGVkUG9pbnQmIHBvaW50
KQoreworICAgIHJldHVybiBGaXhlZFBvaW50KC1wb2ludC54KCksIC1wb2ludC55KCkpOworfQor
CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZpeGVkUG9pbnQmIGEsIGNvbnN0IEZpeGVk
UG9pbnQmIGIpCit7CisgICAgcmV0dXJuIGEueCgpID09IGIueCgpICYmIGEueSgpID09IGIueSgp
OworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZpeGVkUG9pbnQmIGEsIGNvbnN0
IEZpeGVkUG9pbnQmIGIpCit7CisgICAgcmV0dXJuIGEueCgpICE9IGIueCgpIHx8IGEueSgpICE9
IGIueSgpOworfQorCitpbmxpbmUgRml4ZWRQb2ludCB0b1BvaW50KGNvbnN0IEZpeGVkU2l6ZSYg
c2l6ZSkKK3sKKyAgICByZXR1cm4gRml4ZWRQb2ludChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpOworfQorCitpbmxpbmUgRml4ZWRTaXplIHRvU2l6ZShjb25zdCBGaXhlZFBvaW50JiBhKQor
eworICAgIHJldHVybiBGaXhlZFNpemUoYS54KCksIGEueSgpKTsKK30KKworaW5saW5lIEludFBv
aW50IGZsb29yZWRJbnRQb2ludChjb25zdCBGaXhlZFBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1
cm4gSW50UG9pbnQocG9pbnQueCgpLnRvSW50KCksIHBvaW50LnkoKS50b0ludCgpKTsKK30KKwor
aW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2ludChjb25zdCBGaXhlZFBvaW50JiBwb2ludCkK
K3sKKyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLnJvdW5kKCksIHBvaW50LnkoKS5yb3Vu
ZCgpKTsKK30KKworaW5saW5lIEludFBvaW50IGNlaWxlZEludFBvaW50KGNvbnN0IEZpeGVkUG9p
bnQmIHBvaW50KQoreworICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCkuY2VpbCgpLCBwb2lu
dC55KCkuY2VpbCgpKTsKK30KKworI2lmIFBMQVRGT1JNKFFUKQoraW5saW5lIFFEYXRhU3RyZWFt
JiBvcGVyYXRvcjw8KFFEYXRhU3RyZWFtJiBzdHJlYW0sIGNvbnN0IEZpeGVkUG9pbnQmIHBvaW50
KQoreworICAgIHN0cmVhbSA8PCBwb2ludC54KCkudG9GbG9hdCgpIDw8IHBvaW50LnkoKS50b0Zs
b2F0KCk7CisgICAgcmV0dXJuIHN0cmVhbTsKK30KKworaW5saW5lIFFEYXRhU3RyZWFtJiBvcGVy
YXRvcj4+KFFEYXRhU3RyZWFtJiBzdHJlYW0sIEZpeGVkUG9pbnQmIHBvaW50KQoreworICAgIGZs
b2F0IHgsIHk7CisgICAgc3RyZWFtID4+IHggPj4geTsKKyAgICBwb2ludC5zZXRYKHgpOworICAg
IHBvaW50LnNldFkoeSk7CisgICAgcmV0dXJuIHN0cmVhbTsKK30KKyNlbmRpZgorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGaXhlZFBvaW50X2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZpeGVkUmVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRml4ZWRSZWN0LmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZpeGVkUmVjdC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
aXhlZFJlY3QuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZyYWN0aW9u
YWxMYXlvdXRVbml0LmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0ZpeGVkUmVjdDo6Rml4ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKKyAgICA6IG1f
bG9jYXRpb24oRml4ZWRQb2ludChyLngoKSwgci55KCkpKQorICAgICwgbV9zaXplKEZpeGVkU2l6
ZShyLndpZHRoKCksIHIuaGVpZ2h0KCkpKQoreworfQorCitib29sIEZpeGVkUmVjdDo6aW50ZXJz
ZWN0cyhjb25zdCBGaXhlZFJlY3QmIG90aGVyKSBjb25zdAoreworICAgIC8vIENoZWNraW5nIGVt
cHRpbmVzcyBoYW5kbGVzIG5lZ2F0aXZlIHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCisgICAgcmV0
dXJuICFpc0VtcHR5KCkgJiYgIW90aGVyLmlzRW1wdHkoKQorICAgICAgICAmJiB4KCkgPCBvdGhl
ci5tYXhYKCkgJiYgb3RoZXIueCgpIDwgbWF4WCgpCisgICAgICAgICYmIHkoKSA8IG90aGVyLm1h
eFkoKSAmJiBvdGhlci55KCkgPCBtYXhZKCk7Cit9CisKK2Jvb2wgRml4ZWRSZWN0Ojpjb250YWlu
cyhjb25zdCBGaXhlZFJlY3QmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiB4KCkgPD0gb3Ro
ZXIueCgpICYmIG1heFgoKSA+PSBvdGhlci5tYXhYKCkKKyAgICAgICAgJiYgeSgpIDw9IG90aGVy
LnkoKSAmJiBtYXhZKCkgPj0gb3RoZXIubWF4WSgpOworfQorCit2b2lkIEZpeGVkUmVjdDo6aW50
ZXJzZWN0KGNvbnN0IEZpeGVkUmVjdCYgb3RoZXIpCit7CisgICAgRnJhY3Rpb25hbExheW91dFVu
aXQgbmV3WCA9IHN0ZDo6bWF4KHgoKSwgb3RoZXIueCgpKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBuZXdZID0gc3RkOjptYXgoeSgpLCBvdGhlci55KCkpOworICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0IG5ld01heFggPSBzdGQ6Om1pbihtYXhYKCksIG90aGVyLm1heFgoKSk7CisgICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgbmV3TWF4WSA9IHN0ZDo6bWluKG1heFkoKSwgb3RoZXIubWF4WSgp
KTsKKworICAgIC8vIFJldHVybiBhIGNsZWFuIGVtcHR5IHJlY3RhbmdsZSBmb3Igbm9uLWludGVy
c2VjdGluZyBjYXNlcy4KKyAgICBpZiAobmV3WCA+PSBuZXdNYXhYIHx8IG5ld1kgPj0gbmV3TWF4
WSkgeworICAgICAgICBuZXdYID0gMDsKKyAgICAgICAgbmV3WSA9IDA7CisgICAgICAgIG5ld01h
eFggPSAwOworICAgICAgICBuZXdNYXhZID0gMDsKKyAgICB9CisKKyAgICBtX2xvY2F0aW9uLnNl
dFgobmV3WCk7CisgICAgbV9sb2NhdGlvbi5zZXRZKG5ld1kpOworICAgIG1fc2l6ZS5zZXRXaWR0
aChuZXdNYXhYIC0gbmV3WCk7CisgICAgbV9zaXplLnNldEhlaWdodChuZXdNYXhZIC0gbmV3WSk7
Cit9CisKK3ZvaWQgRml4ZWRSZWN0Ojp1bml0ZShjb25zdCBGaXhlZFJlY3QmIG90aGVyKQorewor
ICAgIC8vIEhhbmRsZSBlbXB0eSBzcGVjaWFsIGNhc2VzIGZpcnN0LgorICAgIGlmIChvdGhlci5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoaXNFbXB0eSgpKSB7CisgICAgICAg
ICp0aGlzID0gb3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBuZXdYID0gc3RkOjptaW4oeCgpLCBvdGhlci54KCkpOworICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IG5ld1kgPSBzdGQ6Om1pbih5KCksIG90aGVyLnkoKSk7CisgICAgRnJhY3Rp
b25hbExheW91dFVuaXQgbmV3TWF4WCA9IHN0ZDo6bWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKTsK
KyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBuZXdNYXhZID0gc3RkOjptYXgobWF4WSgpLCBvdGhl
ci5tYXhZKCkpOworCisgICAgbV9sb2NhdGlvbi5zZXRYKG5ld1gpOworICAgIG1fbG9jYXRpb24u
c2V0WShuZXdZKTsKKyAgICBtX3NpemUuc2V0V2lkdGgobmV3TWF4WCAtIG5ld1gpOworICAgIG1f
c2l6ZS5zZXRIZWlnaHQobmV3TWF4WSAtIG5ld1kpOworfQorCit2b2lkIEZpeGVkUmVjdDo6dW5p
dGVJZk5vblplcm8oY29uc3QgRml4ZWRSZWN0JiBvdGhlcikKK3sKKyAgICAvLyBIYW5kbGUgZW1w
dHkgc3BlY2lhbCBjYXNlcyBmaXJzdC4KKyAgICBpZiAoIW90aGVyLndpZHRoKCkgJiYgIW90aGVy
LmhlaWdodCgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF3aWR0aCgpICYmICFoZWlnaHQo
KSkgeworICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgRnJhY3Rpb25hbExheW91dFVuaXQgbmV3WCA9IHN0ZDo6bWluKHgoKSwgb3RoZXIueCgpKTsK
KyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBuZXdZID0gc3RkOjptaW4oeSgpLCBvdGhlci55KCkp
OworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG5ld01heFggPSBzdGQ6Om1heChtYXhYKCksIG90
aGVyLm1heFgoKSk7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbmV3TWF4WSA9IHN0ZDo6bWF4
KG1heFkoKSwgb3RoZXIubWF4WSgpKTsKKworICAgIG1fbG9jYXRpb24uc2V0WChuZXdYKTsKKyAg
ICBtX2xvY2F0aW9uLnNldFkobmV3WSk7CisgICAgbV9zaXplLnNldFdpZHRoKG5ld01heFggLSBu
ZXdYKTsKKyAgICBtX3NpemUuc2V0SGVpZ2h0KG5ld01heFkgLSBuZXdZKTsKK30KKwordm9pZCBG
aXhlZFJlY3Q6OnNjYWxlKGZsb2F0IHMpCit7CisgICAgbV9sb2NhdGlvbi5zZXRYKHgoKSAqIHMp
OworICAgIG1fbG9jYXRpb24uc2V0WSh5KCkgKiBzKTsKKyAgICBtX3NpemUuc2V0V2lkdGgod2lk
dGgoKSAqIHMpOworICAgIG1fc2l6ZS5zZXRIZWlnaHQoaGVpZ2h0KCkgKiBzKTsKK30KKworRml4
ZWRSZWN0IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8Rml4ZWRSZWN0PiYgcmVjdHMpCit7CisgICAg
Rml4ZWRSZWN0IHJlc3VsdDsKKworICAgIHNpemVfdCBjb3VudCA9IHJlY3RzLnNpemUoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIHJlc3VsdC51bml0
ZShyZWN0c1tpXSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitJbnRSZWN0IGVuY2xvc2lu
Z0ludFJlY3QoY29uc3QgRml4ZWRSZWN0JiByZWN0KQoreworICAgIGZsb2F0IHggPSBmbG9vcmYo
cmVjdC54KCkudG9GbG9hdCgpKTsKKyAgICBmbG9hdCB5ID0gZmxvb3JmKHJlY3QueSgpLnRvRmxv
YXQoKSk7CisgICAgZmxvYXQgd2lkdGggPSBjZWlsZihyZWN0Lm1heFgoKS50b0Zsb2F0KCkpIC0g
eDsKKyAgICBmbG9hdCBoZWlnaHQgPSBjZWlsZihyZWN0Lm1heFkoKS50b0Zsb2F0KCkpIC0geTsK
KworICAgIHJldHVybiBJbnRSZWN0KGNsYW1wVG9JbnRlZ2VyKHgpLCBjbGFtcFRvSW50ZWdlcih5
KSwgCisgICAgICAgICAgICAgICAgICAgY2xhbXBUb0ludGVnZXIod2lkdGgpLCBjbGFtcFRvSW50
ZWdlcihoZWlnaHQpKTsKK30KKworRml4ZWRSZWN0IGVuY2xvc2luZ0ZpeGVkUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIEZpeGVkUmVjdChyZWN0LngoKSwgcmVjdC55
KCksCisgICAgICAgICAgICAgICAgICAgICByZWN0Lm1heFgoKSAtIHJlY3QueCgpICsgRnJhY3Rp
b25hbExheW91dFVuaXQ6OmVwc2lsb24oKSwKKyAgICAgICAgICAgICAgICAgICAgIHJlY3QubWF4
WSgpIC0gcmVjdC55KCkgKyBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6ZXBzaWxvbigpKTsKK30KKwor
SW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnN0IEZpeGVkUmVjdCYgcmVjdCkKK3sKKyAg
ICBJbnRQb2ludCByb3VuZGVkTG9jYXRpb24gPSByb3VuZGVkSW50UG9pbnQocmVjdC5sb2NhdGlv
bigpKTsKKyAgICByZXR1cm4gSW50UmVjdChyb3VuZGVkTG9jYXRpb24sIEludFNpemUoKHJlY3Qu
eCgpICsgcmVjdC53aWR0aCgpKS5yb3VuZCgpIC0gcm91bmRlZExvY2F0aW9uLngoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlY3QueSgpICsgcmVjdC5o
ZWlnaHQoKSkucm91bmQoKSAtIHJvdW5kZWRMb2NhdGlvbi55KCkpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRml4
ZWRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rml4ZWRSZWN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GaXhlZFJlY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBG
aXhlZFJlY3RfaAorI2RlZmluZSBGaXhlZFJlY3RfaAorCisjaW5jbHVkZSAiRml4ZWRQb2ludC5o
IgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRSZWN0OworCitjbGFzcyBGaXhlZFJlY3Qgewor
cHVibGljOgorICAgIEZpeGVkUmVjdCgpIHsgfQorICAgIEZpeGVkUmVjdChjb25zdCBGaXhlZFBv
aW50JiBsb2NhdGlvbiwgY29uc3QgRml4ZWRTaXplJiBzaXplKQorICAgICAgICA6IG1fbG9jYXRp
b24obG9jYXRpb24pLCBtX3NpemUoc2l6ZSkgeyB9CisgICAgRml4ZWRSZWN0KEZyYWN0aW9uYWxM
YXlvdXRVbml0IHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHksIEZyYWN0aW9uYWxMYXlvdXRVbml0
IHdpZHRoLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQpCisgICAgICAgIDogbV9sb2NhdGlv
bihGaXhlZFBvaW50KHgsIHkpKSwgbV9zaXplKEZpeGVkU2l6ZSh3aWR0aCwgaGVpZ2h0KSkgeyB9
CisgICAgRml4ZWRSZWN0KGNvbnN0IEZsb2F0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBGbG9hdFNp
emUmIHNpemUpCisgICAgICAgIDogbV9sb2NhdGlvbihsb2NhdGlvbiksIG1fc2l6ZShzaXplKSB7
IH0KKyAgICBGaXhlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgOiBtX2xvY2F0aW9uKHJlY3Qu
bG9jYXRpb24oKSksIG1fc2l6ZShyZWN0LnNpemUoKSkgeyB9CisKKyAgICBleHBsaWNpdCBGaXhl
ZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5j
ZSBpdCdzIGxvc3N5CisgICAgICAgIAorICAgIEZpeGVkUG9pbnQgbG9jYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2xvY2F0aW9uOyB9CisgICAgRml4ZWRTaXplIHNpemUoKSBjb25zdCB7IHJldHVy
biBtX3NpemU7IH0KKworICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgRml4ZWRQb2ludCYgbG9j
YXRpb24pIHsgbV9sb2NhdGlvbiA9IGxvY2F0aW9uOyB9CisgICAgdm9pZCBzZXRTaXplKGNvbnN0
IEZpeGVkU2l6ZSYgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CisKKyAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCB4KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi54KCk7IH0KKyAgICBGcmFjdGlv
bmFsTGF5b3V0VW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi55KCk7IH0KKyAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBtYXhYKCkgY29uc3QgeyByZXR1cm4geCgpICsgd2lkdGgoKTsg
fQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heFkoKSBjb25zdCB7IHJldHVybiB5KCkgKyBo
ZWlnaHQoKTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplLndpZHRoKCk7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQoKSBj
b25zdCB7IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7IH0KKworICAgIHZvaWQgc2V0WChGcmFjdGlv
bmFsTGF5b3V0VW5pdCB4KSB7IG1fbG9jYXRpb24uc2V0WCh4KTsgfQorICAgIHZvaWQgc2V0WShG
cmFjdGlvbmFsTGF5b3V0VW5pdCB5KSB7IG1fbG9jYXRpb24uc2V0WSh5KTsgfQorICAgIHZvaWQg
c2V0V2lkdGgoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgpIHsgbV9zaXplLnNldFdpZHRoKHdp
ZHRoKTsgfQorICAgIHZvaWQgc2V0SGVpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkg
eyBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCk7IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KKworICAgIC8vIE5PVEU6IFRoZSByZXN1bHQg
aXMgcm91bmRlZCB0byBpbnRlZ2VyIHZhbHVlcywgYW5kIHRodXMgbWF5IGJlIG5vdCB0aGUgZXhh
Y3QKKyAgICAvLyBjZW50ZXIgcG9pbnQuCisgICAgRml4ZWRQb2ludCBjZW50ZXIoKSBjb25zdCB7
IHJldHVybiBGaXhlZFBvaW50KHgoKSArIHdpZHRoKCkgLyAyLCB5KCkgKyBoZWlnaHQoKSAvIDIp
OyB9CisKKyAgICB2b2lkIG1vdmUoY29uc3QgRml4ZWRTaXplJiBzaXplKSB7IG1fbG9jYXRpb24g
Kz0gc2l6ZTsgfSAKKyAgICB2b2lkIG1vdmVCeShjb25zdCBGaXhlZFBvaW50JiBvZmZzZXQpIHsg
bV9sb2NhdGlvbi5tb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkpOyB9CisgICAgdm9pZCBtb3Zl
KEZyYWN0aW9uYWxMYXlvdXRVbml0IGR4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkgeyBtX2xv
Y2F0aW9uLm1vdmUoZHgsIGR5KTsgfSAKKworICAgIHZvaWQgZXhwYW5kKGNvbnN0IEZpeGVkU2l6
ZSYgc2l6ZSkgeyBtX3NpemUgKz0gc2l6ZTsgfQorICAgIHZvaWQgZXhwYW5kKEZyYWN0aW9uYWxM
YXlvdXRVbml0IGR3LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKGR3
LCBkaCk7IH0KKyAgICB2b2lkIGNvbnRyYWN0KGNvbnN0IEZpeGVkU2l6ZSYgc2l6ZSkgeyBtX3Np
emUgLT0gc2l6ZTsgfQorICAgIHZvaWQgY29udHJhY3QoRnJhY3Rpb25hbExheW91dFVuaXQgZHcs
IEZyYWN0aW9uYWxMYXlvdXRVbml0IGRoKSB7IG1fc2l6ZS5leHBhbmQoLWR3LCAtZGgpOyB9CisK
KyAgICB2b2lkIHNoaWZ0WEVkZ2VUbyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBlZGdlKQorICAgIHsK
KyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0geCgpOworICAgICAg
ICBzZXRYKGVkZ2UpOworICAgICAgICBzZXRXaWR0aChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0
VW5pdD4oMCwgd2lkdGgoKSAtIGRlbHRhKSk7CisgICAgfQorICAgIHZvaWQgc2hpZnRNYXhYRWRn
ZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCisgICAgeworICAgICAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSBtYXhYKCk7CisgICAgICAgIHNldFdpZHRoKHN0ZDo6
bWF4PEZyYWN0aW9uYWxMYXlvdXRVbml0PigwLCB3aWR0aCgpICsgZGVsdGEpKTsKKyAgICB9Cisg
ICAgdm9pZCBzaGlmdFlFZGdlVG8oRnJhY3Rpb25hbExheW91dFVuaXQgZWRnZSkKKyAgICB7Cisg
ICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAtIHkoKTsKKyAgICAgICAg
c2V0WShlZGdlKTsKKyAgICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4PEZyYWN0aW9uYWxMYXlvdXRV
bml0PigwLCBoZWlnaHQoKSAtIGRlbHRhKSk7CisgICAgfQorICAgIHZvaWQgc2hpZnRNYXhZRWRn
ZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCisgICAgeworICAgICAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSBtYXhZKCk7CisgICAgICAgIHNldEhlaWdodChzdGQ6
Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwgaGVpZ2h0KCkgKyBkZWx0YSkpOworICAgIH0K
KworICAgIEZpeGVkUG9pbnQgbWluWE1pbllDb3JuZXIoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0
aW9uOyB9IC8vIHR5cGljYWxseSB0b3BMZWZ0CisgICAgRml4ZWRQb2ludCBtYXhYTWluWUNvcm5l
cigpIGNvbnN0IHsgcmV0dXJuIEZpeGVkUG9pbnQobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lk
dGgoKSwgbV9sb2NhdGlvbi55KCkpOyB9IC8vIHR5cGljYWxseSB0b3BSaWdodAorICAgIEZpeGVk
UG9pbnQgbWluWE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBGaXhlZFBvaW50KG1fbG9jYXRp
b24ueCgpLCBtX2xvY2F0aW9uLnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5
IGJvdHRvbUxlZnQKKyAgICBGaXhlZFBvaW50IG1heFhNYXhZQ29ybmVyKCkgY29uc3QgeyByZXR1
cm4gRml4ZWRQb2ludChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9u
LnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJvdHRvbVJpZ2h0CisgICAg
CisgICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IEZpeGVkUmVjdCYpIGNvbnN0OworICAgIGJvb2wg
Y29udGFpbnMoY29uc3QgRml4ZWRSZWN0JikgY29uc3Q7CisKKyAgICAvLyBUaGlzIGNoZWNrcyB0
byBzZWUgaWYgdGhlIHJlY3QgY29udGFpbnMgeCx5IGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZS4K
KyAgICAvLyBFcXVpdmFsZW50IHRvIGNoZWNraW5nIGlmIHRoZSByZWN0IGNvbnRhaW5zIGEgMXgx
IHJlY3QgYmVsb3cgYW5kIHRvIHRoZSByaWdodCBvZiAocHgscHkpLgorICAgIGJvb2wgY29udGFp
bnMoRnJhY3Rpb25hbExheW91dFVuaXQgcHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHB5KSBjb25z
dAorICAgICAgICB7IHJldHVybiBweCA+PSB4KCkgJiYgcHggPCBtYXhYKCkgJiYgcHkgPj0geSgp
ICYmIHB5IDwgbWF4WSgpOyB9CisgICAgYm9vbCBjb250YWlucyhjb25zdCBGaXhlZFBvaW50JiBw
b2ludCkgY29uc3QgeyByZXR1cm4gY29udGFpbnMocG9pbnQueCgpLCBwb2ludC55KCkpOyB9CisK
KyAgICB2b2lkIGludGVyc2VjdChjb25zdCBGaXhlZFJlY3QmKTsKKyAgICB2b2lkIHVuaXRlKGNv
bnN0IEZpeGVkUmVjdCYpOworICAgIHZvaWQgdW5pdGVJZk5vblplcm8oY29uc3QgRml4ZWRSZWN0
Jik7CisKKyAgICB2b2lkIGluZmxhdGVYKEZyYWN0aW9uYWxMYXlvdXRVbml0IGR4KQorICAgIHsK
KyAgICAgICAgbV9sb2NhdGlvbi5zZXRYKG1fbG9jYXRpb24ueCgpIC0gZHgpOworICAgICAgICBt
X3NpemUuc2V0V2lkdGgobV9zaXplLndpZHRoKCkgKyBkeCArIGR4KTsKKyAgICB9CisgICAgdm9p
ZCBpbmZsYXRlWShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkKKyAgICB7CisgICAgICAgIG1fbG9j
YXRpb24uc2V0WShtX2xvY2F0aW9uLnkoKSAtIGR5KTsKKyAgICAgICAgbV9zaXplLnNldEhlaWdo
dChtX3NpemUuaGVpZ2h0KCkgKyBkeSArIGR5KTsKKyAgICB9CisgICAgdm9pZCBpbmZsYXRlKEZy
YWN0aW9uYWxMYXlvdXRVbml0IGQpIHsgaW5mbGF0ZVgoZCk7IGluZmxhdGVZKGQpOyB9CisgICAg
dm9pZCBzY2FsZShmbG9hdCBzKTsKKworICAgIEZpeGVkUmVjdCB0cmFuc3Bvc2VkUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIEZpeGVkUmVjdChtX2xvY2F0aW9uLnRyYW5zcG9zZWRQb2ludCgpLCBtX3Np
emUudHJhbnNwb3NlZFNpemUoKSk7IH0KKworICAgIHN0YXRpYyBGaXhlZFJlY3QgaW5maW5pdGVS
ZWN0KCkge3JldHVybiBGaXhlZFJlY3QoRnJhY3Rpb25hbExheW91dFVuaXQ6Om1pbigpIC8gMiwg
RnJhY3Rpb25hbExheW91dFVuaXQ6Om1pbigpIC8gMiwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om1h
eCgpLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCkpOyB9CisKK3ByaXZhdGU6CisgICAgRml4
ZWRQb2ludCBtX2xvY2F0aW9uOworICAgIEZpeGVkU2l6ZSBtX3NpemU7Cit9OworCitpbmxpbmUg
Rml4ZWRSZWN0IGludGVyc2VjdGlvbihjb25zdCBGaXhlZFJlY3QmIGEsIGNvbnN0IEZpeGVkUmVj
dCYgYikKK3sKKyAgICBGaXhlZFJlY3QgYyA9IGE7CisgICAgYy5pbnRlcnNlY3QoYik7CisgICAg
cmV0dXJuIGM7Cit9CisKK2lubGluZSBGaXhlZFJlY3QgdW5pb25SZWN0KGNvbnN0IEZpeGVkUmVj
dCYgYSwgY29uc3QgRml4ZWRSZWN0JiBiKQoreworICAgIEZpeGVkUmVjdCBjID0gYTsKKyAgICBj
LnVuaXRlKGIpOworICAgIHJldHVybiBjOworfQorCitGaXhlZFJlY3QgdW5pb25SZWN0KGNvbnN0
IFZlY3RvcjxGaXhlZFJlY3Q+Jik7CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRml4
ZWRSZWN0JiBhLCBjb25zdCBGaXhlZFJlY3QmIGIpCit7CisgICAgcmV0dXJuIGEubG9jYXRpb24o
KSA9PSBiLmxvY2F0aW9uKCkgJiYgYS5zaXplKCkgPT0gYi5zaXplKCk7Cit9CisKK2lubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgRml4ZWRSZWN0JiBhLCBjb25zdCBGaXhlZFJlY3QmIGIpCit7
CisgICAgcmV0dXJuIGEubG9jYXRpb24oKSAhPSBiLmxvY2F0aW9uKCkgfHwgYS5zaXplKCkgIT0g
Yi5zaXplKCk7Cit9CisKK0ludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGaXhlZFJlY3Qm
KTsKK0ZpeGVkUmVjdCBlbmNsb3NpbmdGaXhlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CitJbnRS
ZWN0IHBpeGVsU25hcHBlZEludFJlY3QoY29uc3QgRml4ZWRSZWN0Jik7CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZpeGVkUmVjdF9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFNpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZpeGVkU2l6ZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GaXhlZFNpemUuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaXhlZFNp
emUuaCIKKworI2luY2x1ZGUgIkZpeGVkUG9pbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitJbnRTaXplIHBpeGVsU25hcHBlZEludFNpemUoY29uc3QgRml4ZWRTaXplJiBzLCBjb25zdCBG
aXhlZFBvaW50JiBwKQoreworICAgIHJldHVybiBJbnRTaXplKHNuYXBTaXplVG9QaXhlbChzLndp
ZHRoKCksIHAueCgpKSwgc25hcFNpemVUb1BpeGVsKHMuaGVpZ2h0KCksIHAueSgpKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZpeGVkU2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZpeGVkU2l6ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRml4ZWRTaXplLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUyIEBA
CisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgRml4ZWRTaXplX2gKKyNkZWZpbmUgRml4ZWRTaXplX2gKKworI2luY2x1ZGUgIkZs
b2F0U2l6ZS5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCisjaW5jbHVkZSAi
SW50U2l6ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpeGVkUG9pbnQ7CisK
K2NsYXNzIEZpeGVkU2l6ZSB7CitwdWJsaWM6CisgICAgRml4ZWRTaXplKCkgOiBtX3dpZHRoKDAp
LCBtX2hlaWdodCgwKSB7IH0KKyAgICBGaXhlZFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgOiBt
X3dpZHRoKHNpemUud2lkdGgoKSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpIHsgfQorICAgIEZp
eGVkU2l6ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExheW91dFVuaXQg
aGVpZ2h0KSA6IG1fd2lkdGgod2lkdGgpLCBtX2hlaWdodChoZWlnaHQpIHsgfQorCisgICAgZXhw
bGljaXQgRml4ZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgOiBtX3dpZHRoKHNpemUud2lk
dGgoKSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpIHsgfQorICAgIAorICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CisKKyAgICB2
b2lkIHNldFdpZHRoKEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKSB7IG1fd2lkdGggPSB3aWR0
aDsgfQorICAgIHZvaWQgc2V0SGVpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkgeyBt
X2hlaWdodCA9IGhlaWdodDsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
bV93aWR0aCA8PSAwIHx8IG1faGVpZ2h0IDw9IDA7IH0KKyAgICBib29sIGlzWmVybygpIGNvbnN0
IHsgcmV0dXJuICFtX3dpZHRoICYmICFtX2hlaWdodDsgfQorCisgICAgZmxvYXQgYXNwZWN0UmF0
aW8oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV93aWR0aCkgLyBzdGF0aWNf
Y2FzdDxmbG9hdD4obV9oZWlnaHQpOyB9CisgICAgCisgICAgdm9pZCBleHBhbmQoRnJhY3Rpb25h
bExheW91dFVuaXQgd2lkdGgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkKKyAgICB7Cisg
ICAgICAgIG1fd2lkdGggKz0gd2lkdGg7CisgICAgICAgIG1faGVpZ2h0ICs9IGhlaWdodDsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBzY2FsZShmbG9hdCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1f
d2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRpY19jYXN0PGZsb2F0PihtX3dpZHRoKSAqIHNj
YWxlKTsKKyAgICAgICAgbV9oZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRpY19jYXN0PGZs
b2F0PihtX2hlaWdodCkgKiBzY2FsZSk7CisgICAgfQorICAgIAorICAgIEZpeGVkU2l6ZSBleHBh
bmRlZFRvKGNvbnN0IEZpeGVkU2l6ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gRml4ZWRTaXplKG1fd2lkdGggPiBvdGhlci5tX3dpZHRoID8gbV93aWR0aCA6IG90aGVyLm1f
d2lkdGgsCisgICAgICAgICAgICBtX2hlaWdodCA+IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQg
OiBvdGhlci5tX2hlaWdodCk7CisgICAgfQorCisgICAgRml4ZWRTaXplIHNocnVua1RvKGNvbnN0
IEZpeGVkU2l6ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRml4ZWRTaXpl
KG1fd2lkdGggPCBvdGhlci5tX3dpZHRoID8gbV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCisgICAg
ICAgICAgICBtX2hlaWdodCA8IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hl
aWdodCk7CisgICAgfQorCisgICAgdm9pZCBjbGFtcE5lZ2F0aXZlVG9aZXJvKCkKKyAgICB7Cisg
ICAgICAgICp0aGlzID0gZXhwYW5kZWRUbyhGaXhlZFNpemUoKSk7CisgICAgfQorCisgICAgRml4
ZWRTaXplIHRyYW5zcG9zZWRTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGaXhl
ZFNpemUobV9oZWlnaHQsIG1fd2lkdGgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBtX3dpZHRoLCBtX2hlaWdodDsKK307CisKK2lubGluZSBGaXhlZFNpemUm
IG9wZXJhdG9yKz0oRml4ZWRTaXplJiBhLCBjb25zdCBGaXhlZFNpemUmIGIpCit7CisgICAgYS5z
ZXRXaWR0aChhLndpZHRoKCkgKyBiLndpZHRoKCkpOworICAgIGEuc2V0SGVpZ2h0KGEuaGVpZ2h0
KCkgKyBiLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZpeGVkU2l6ZSYg
b3BlcmF0b3ItPShGaXhlZFNpemUmIGEsIGNvbnN0IEZpeGVkU2l6ZSYgYikKK3sKKyAgICBhLnNl
dFdpZHRoKGEud2lkdGgoKSAtIGIud2lkdGgoKSk7CisgICAgYS5zZXRIZWlnaHQoYS5oZWlnaHQo
KSAtIGIuaGVpZ2h0KCkpOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgRml4ZWRTaXplIG9w
ZXJhdG9yKyhjb25zdCBGaXhlZFNpemUmIGEsIGNvbnN0IEZpeGVkU2l6ZSYgYikKK3sKKyAgICBy
ZXR1cm4gRml4ZWRTaXplKGEud2lkdGgoKSArIGIud2lkdGgoKSwgYS5oZWlnaHQoKSArIGIuaGVp
Z2h0KCkpOworfQorCitpbmxpbmUgRml4ZWRTaXplIG9wZXJhdG9yLShjb25zdCBGaXhlZFNpemUm
IGEsIGNvbnN0IEZpeGVkU2l6ZSYgYikKK3sKKyAgICByZXR1cm4gRml4ZWRTaXplKGEud2lkdGgo
KSAtIGIud2lkdGgoKSwgYS5oZWlnaHQoKSAtIGIuaGVpZ2h0KCkpOworfQorCitpbmxpbmUgRml4
ZWRTaXplIG9wZXJhdG9yLShjb25zdCBGaXhlZFNpemUmIHNpemUpCit7CisgICAgcmV0dXJuIEZp
eGVkU2l6ZSgtc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSk7Cit9CisKK2lubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgRml4ZWRTaXplJiBhLCBjb25zdCBGaXhlZFNpemUmIGIpCit7Cisg
ICAgcmV0dXJuIGEud2lkdGgoKSA9PSBiLndpZHRoKCkgJiYgYS5oZWlnaHQoKSA9PSBiLmhlaWdo
dCgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZpeGVkU2l6ZSYgYSwgY29u
c3QgRml4ZWRTaXplJiBiKQoreworICAgIHJldHVybiBhLndpZHRoKCkgIT0gYi53aWR0aCgpIHx8
IGEuaGVpZ2h0KCkgIT0gYi5oZWlnaHQoKTsKK30KKworaW5saW5lIEludFNpemUgZmxvb3JlZElu
dFNpemUoY29uc3QgRml4ZWRTaXplJiBzKQoreworICAgIHJldHVybiBJbnRTaXplKHMud2lkdGgo
KS50b0ludCgpLCBzLmhlaWdodCgpLnRvSW50KCkpOworfQorCitpbmxpbmUgSW50U2l6ZSByb3Vu
ZGVkSW50U2l6ZShjb25zdCBGaXhlZFNpemUmIHMpCit7CisgICAgcmV0dXJuIEludFNpemUocy53
aWR0aCgpLnJvdW5kKCksIHMuaGVpZ2h0KCkucm91bmQoKSk7Cit9CisKK0ludFNpemUgcGl4ZWxT
bmFwcGVkSW50U2l6ZShjb25zdCBGaXhlZFNpemUmLCBjb25zdCBGaXhlZFBvaW50Jik7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZpeGVkU2l6ZV9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAkocmV2aXNp
b24gMTA2OTk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDEwIEBACiAjaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiVHJhbnNm
b3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJGaXhlZFBvaW50LmgiCiAjaW5jbHVkZSAiRmxv
YXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDxtYXRoLmg+CiAK
QEAgLTQwLDYgKzQxLDEwIEBAIEZsb2F0UG9pbnQ6OkZsb2F0UG9pbnQoY29uc3QgSW50UG9pbnQm
IHAKIHsKIH0KIAorRmxvYXRQb2ludDo6RmxvYXRQb2ludChjb25zdCBGaXhlZFBvaW50JiBwKSA6
IG1feChwLngoKSksIG1feShwLnkoKSkKK3sKK30KKwogdm9pZCBGbG9hdFBvaW50Ojpub3JtYWxp
emUoKQogewogICAgIGZsb2F0IHRlbXBMZW5ndGggPSBsZW5ndGgoKTsKQEAgLTU1LDYgKzYwLDE4
IEBAIGZsb2F0IEZsb2F0UG9pbnQ6Omxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuIHNxcnRmKGxl
bmd0aFNxdWFyZWQoKSk7CiB9CiAKK3ZvaWQgRmxvYXRQb2ludDo6bW92ZShjb25zdCBGaXhlZFNp
emUmIHNpemUpCit7CisgICAgbV94ICs9IHNpemUud2lkdGgoKTsKKyAgICBtX3kgKz0gc2l6ZS5o
ZWlnaHQoKTsKK30KKwordm9pZCBGbG9hdFBvaW50Ojptb3ZlQnkoY29uc3QgRml4ZWRQb2ludCYg
cG9pbnQpCit7CisgICAgbV94ICs9IHBvaW50LngoKTsKKyAgICBtX3kgKz0gcG9pbnQueSgpOwor
fQorCiBGbG9hdFBvaW50IEZsb2F0UG9pbnQ6Om1hdHJpeFRyYW5zZm9ybShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSkgY29uc3QKIHsKICAgICBkb3VibGUgbmV3WCwgbmV3WTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgJKHJl
dmlzaW9uIDEwNjk5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTMgKzYwLDE1IEBAIGNsYXNzIEFmZmluZVRy
YW5zZm9ybTsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwogY2xhc3MgSW50UG9pbnQ7CiBj
bGFzcyBJbnRTaXplOworY2xhc3MgRml4ZWRQb2ludDsKK2NsYXNzIEZpeGVkU2l6ZTsKIAogY2xh
c3MgRmxvYXRQb2ludCB7CiBwdWJsaWM6CiAgICAgRmxvYXRQb2ludCgpIDogbV94KDApLCBtX3ko
MCkgeyB9CiAgICAgRmxvYXRQb2ludChmbG9hdCB4LCBmbG9hdCB5KSA6IG1feCh4KSwgbV95KHkp
IHsgfQogICAgIEZsb2F0UG9pbnQoY29uc3QgSW50UG9pbnQmKTsKLQorICAgIEZsb2F0UG9pbnQo
Y29uc3QgRml4ZWRQb2ludCYpOwogCiAgICAgc3RhdGljIEZsb2F0UG9pbnQgemVybygpIHsgcmV0
dXJuIEZsb2F0UG9pbnQoKTsgfQogCkBAIC05Miw2ICs5NCw3IEBAIHB1YmxpYzoKICAgICAgICAg
bV94ICs9IGEud2lkdGgoKTsKICAgICAgICAgbV95ICs9IGEuaGVpZ2h0KCk7CiAgICAgfQorICAg
IHZvaWQgbW92ZShjb25zdCBGaXhlZFNpemUmKTsKICAgICB2b2lkIG1vdmUoY29uc3QgRmxvYXRT
aXplJiBhKQogICAgIHsKICAgICAgICAgbV94ICs9IGEud2lkdGgoKTsKQEAgLTEwMiw2ICsxMDUs
NyBAQCBwdWJsaWM6CiAgICAgICAgIG1feCArPSBhLngoKTsKICAgICAgICAgbV95ICs9IGEueSgp
OwogICAgIH0KKyAgICB2b2lkIG1vdmVCeShjb25zdCBGaXhlZFBvaW50JiBhKTsKICAgICB2b2lk
IG1vdmVCeShjb25zdCBGbG9hdFBvaW50JiBhKQogICAgIHsKICAgICAgICAgbV94ICs9IGEueCgp
OwpAQCAtMTMxLDYgKzEzNSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBGbG9hdFBvaW50
KHN0ZDo6bWF4KG1feCwgb3RoZXIubV94KSwgc3RkOjptYXgobV95LCBvdGhlci5tX3kpKTsKICAg
ICB9CiAKKyAgICBGbG9hdFBvaW50IHNocnVua1RvKGNvbnN0IEZsb2F0UG9pbnQmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQobV94IDwgb3RoZXIubV94ID8g
bV94IDogb3RoZXIubV94LAorICAgICAgICAgICAgbV95IDwgb3RoZXIubV95ID8gbV95IDogb3Ro
ZXIubV95KTsKKyAgICB9CisKKyAgICB2b2lkIGNsYW1wTmVnYXRpdmVUb1plcm8oKQorICAgIHsK
KyAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKHplcm8oKSk7CisgICAgfQorCiAgICAgRmxvYXRQ
b2ludCB0cmFuc3Bvc2VkUG9pbnQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIEZsb2F0
UG9pbnQobV95LCBtX3gpOwpAQCAtMjM5LDYgKzI1NCwxMSBAQCBpbmxpbmUgSW50U2l6ZSBmbG9v
cmVkSW50U2l6ZShjb25zdCBGbG9hCiAgICAgcmV0dXJuIEludFNpemUoc3RhdGljX2Nhc3Q8aW50
PihwLngoKSksIHN0YXRpY19jYXN0PGludD4ocC55KCkpKTsKIH0KIAoraW5saW5lIEZsb2F0UG9p
bnQgdG9Qb2ludChjb25zdCBGbG9hdFNpemUmIHNpemUpCit7CisgICAgcmV0dXJuIEZsb2F0UG9p
bnQoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKK30KKwogZmxvYXQgZmluZFNsb3BlKGNv
bnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgZmxvYXQmIGMpOwogCiAv
LyBGaW5kIHBvaW50IHdoZXJlIGxpbmVzIHRocm91Z2ggdGhlIHR3byBwYWlycyBvZiBwb2ludHMg
aW50ZXJzZWN0LiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBsaW5lcyBkb24ndCBpbnRlcnNlY3QuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAJ
KHJldmlzaW9uIDEwNjk5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKIAorI2luY2x1ZGUgIkZpeGVkUmVjdC5o
IgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNp
bmNsdWRlIDxhbGdvcml0aG0+CkBAIC00Miw2ICs0MywxMCBAQCBGbG9hdFJlY3Q6OkZsb2F0UmVj
dChjb25zdCBJbnRSZWN0JiByKSA6CiB7CiB9CiAKK0Zsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0
IEZpeGVkUmVjdCYgcikgOiBtX2xvY2F0aW9uKHIubG9jYXRpb24oKSksIG1fc2l6ZShyLnNpemUo
KSkKK3sKK30KKwogRmxvYXRSZWN0IEZsb2F0UmVjdDo6bmFycm93UHJlY2lzaW9uKGRvdWJsZSB4
LCBkb3VibGUgeSwgZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KQogewogICAgIHJldHVybiBG
bG9hdFJlY3QobmFycm93UHJlY2lzaW9uVG9GbG9hdCh4KSwgbmFycm93UHJlY2lzaW9uVG9GbG9h
dCh5KSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdCh3aWR0aCksIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoaGVpZ2h0KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuaAkocmV2aXNpb24gMTA2OTk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgVkdSZWN0OwogI2VuZGlmCiAKK2NsYXNzIEZpeGVkUmVj
dDsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBJbnRQb2ludDsKIApAQCAtODIsNiArODMsNyBAQCBw
dWJsaWM6CiAgICAgRmxvYXRSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9h
dCBoZWlnaHQpCiAgICAgICAgIDogbV9sb2NhdGlvbihGbG9hdFBvaW50KHgsIHkpKSwgbV9zaXpl
KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkgeyB9CiAgICAgRmxvYXRSZWN0KGNvbnN0IEludFJl
Y3QmKTsKKyAgICBGbG9hdFJlY3QoY29uc3QgRml4ZWRSZWN0Jik7CiAKICAgICBzdGF0aWMgRmxv
YXRSZWN0IG5hcnJvd1ByZWNpc2lvbihkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB3aWR0aCwg
ZG91YmxlIGhlaWdodCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0U2l6ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRTaXplLmNwcAkocmV2aXNpb24gMTA2OTk2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogCisj
aW5jbHVkZSAiRml4ZWRTaXplLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5j
bHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgPGxpbWl0cz4KQEAgLTQwLDYgKzQxLDEwIEBAIEZs
b2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0IEludFNpemUmIHNpemUKIHsKIH0KIAorRmxvYXRTaXpl
OjpGbG9hdFNpemUoY29uc3QgRml4ZWRTaXplJiBzaXplKSA6IG1fd2lkdGgoc2l6ZS53aWR0aCgp
KSwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkKK3sKK30KKwogZmxvYXQgRmxvYXRTaXplOjpkaWFn
b25hbExlbmd0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNxcnRmKGRpYWdvbmFsTGVuZ3RoU3F1
YXJlZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
U2l6ZS5oCShyZXZpc2lvbiAxMDY5OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFNpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTIgKzQ2LDE0IEBAIHR5cGVk
ZWYgc3RydWN0IF9OU1NpemUgTlNTaXplOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJ
bnRTaXplOworY2xhc3MgRml4ZWRTaXplOwogCiBjbGFzcyBGbG9hdFNpemUgewogcHVibGljOgog
ICAgIEZsb2F0U2l6ZSgpIDogbV93aWR0aCgwKSwgbV9oZWlnaHQoMCkgeyB9CiAgICAgRmxvYXRT
aXplKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpIDogbV93aWR0aCh3aWR0aCksIG1faGVpZ2h0
KGhlaWdodCkgeyB9CiAgICAgRmxvYXRTaXplKGNvbnN0IEludFNpemUmKTsKKyAgICBGbG9hdFNp
emUoY29uc3QgRml4ZWRTaXplJik7CiAKICAgICBzdGF0aWMgRmxvYXRTaXplIG5hcnJvd1ByZWNp
c2lvbihkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpOwogCkBAIC02NSw2ICs2NywxMSBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpc1plcm8oKSBjb25zdDsKICAgICBib29sIGlzRXhwcmVzc2libGVB
c0ludFNpemUoKSBjb25zdDsKIAorICAgIGJvb2wgaXNSb3VnaGx5RXF1YWxUbyhjb25zdCBGbG9h
dFNpemUmIHMpCisgICAgeworICAgICAgICByZXR1cm4gYWJzKHdpZHRoKCkgLSBzLndpZHRoKCkp
IDwgMC4xICYmIGFicyhoZWlnaHQoKSAtIHMuaGVpZ2h0KCkpIDwgMC4xOworICAgIH0KKwogICAg
IGZsb2F0IGFzcGVjdFJhdGlvKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aCAvIG1faGVpZ2h0OyB9
CiAKICAgICB2b2lkIGV4cGFuZChmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAJKHJldmlzaW9uIDEw
Njk5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSW50UmVjdC5oIgogCisjaW5jbHVkZSAiRml4ZWRSZWN0LmgiCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCkBAIC00MCw2ICs0MSwxMiBAQCBJbnRS
ZWN0OjpJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKIHsKIH0KIAorSW50UmVjdDo6SW50UmVj
dChjb25zdCBGaXhlZFJlY3QmIHIpCisgICAgOiBtX2xvY2F0aW9uKGZsb29yZWRJbnRQb2ludChy
LmxvY2F0aW9uKCkpKQorICAgICwgbV9zaXplKGZsb29yZWRJbnRTaXplKHIuc2l6ZSgpKSkKK3sK
K30KKwogYm9vbCBJbnRSZWN0OjppbnRlcnNlY3RzKGNvbnN0IEludFJlY3QmIG90aGVyKSBjb25z
dAogewogICAgIC8vIENoZWNraW5nIGVtcHRpbmVzcyBoYW5kbGVzIG5lZ2F0aXZlIHdpZHRocyBh
cyB3ZWxsIGFzIHplcm8uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bnRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50UmVjdC5oCShyZXZpc2lvbiAxMDY5OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbnRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAgc3RydWN0
IFNrSVJlY3Q7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UmVjdDsKK2NsYXNz
IEZpeGVkUmVjdDsKIAogY2xhc3MgSW50UmVjdCB7CiBwdWJsaWM6CkBAIC04MCw3ICs4MSw4IEBA
IHB1YmxpYzoKICAgICBJbnRSZWN0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQogICAgICAgICA6IG1fbG9jYXRpb24oSW50UG9pbnQoeCwgeSkpLCBtX3NpemUoSW50U2l6ZSh3
aWR0aCwgaGVpZ2h0KSkgeyB9CiAKLSAgICBleHBsaWNpdCBJbnRSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCk7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5Cisg
ICAgZXhwbGljaXQgSW50UmVjdChjb25zdCBGbG9hdFJlY3QmKTsgLy8gZG9uJ3QgZG8gdGhpcyBp
bXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKKyAgICBleHBsaWNpdCBJbnRSZWN0KGNvbnN0IEZp
eGVkUmVjdCYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQog
ICAgICAgICAKICAgICBJbnRQb2ludCBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRp
b247IH0KICAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126608</attachid>
            <date>2012-02-10 17:46:18 -0800</date>
            <delta_ts>2012-02-13 10:15:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76571-20120210174617.patch</filename>
            <type>text/plain</type>
            <size>49871</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDEyLTAyLTEwICBFbWlsIEEg
RWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4gYW5kIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIEFkZCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQvU2l6ZS9SZWN0
IGZvciBzdWItcGl4ZWwgbGF5b3V0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NjU3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBmaXhlZCBwb2ludCB2ZXJzaW9ucyBvZiB0aGUgUG9pbnQsIFNpemUg
YW5kIFJlY3QgY2xhc3NlcyB1c2luZworICAgICAgICB0aGUgbmV3IEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCB0eXBlIGFuZC4KKworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQsIEZyYWN0aW9u
YWxMYXlvdXRTaXplIGFuZCBGcmFjdGlvbmFsTGF5b3V0UmVjdCBhcmUKKyAgICAgICAgUG9pbnQs
IFNpemUgYW5kIFJlY3QgaW1wbGVtZW50YXRpb25zIHJlc3BlY3RpdmVseSB1c2luZyB0aGlzIG5l
dyB0eXBlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIFdlYkNvcmUub3JkZXI6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHBsYXRmb3JtL0ZyYWN0aW9uYWxMYXlvdXRVbml0Lmg6CisgICAgICAg
IEZpeGVkIGEgY291cGxlIG9mIHR5cG9zIGFuZCBzaWduZWQvdW5zaWduZWQgYnVncy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RmxvYXRQb2ludDo6RmxvYXRQb2ludCk6CisgICAgICAgIEFkZCBleHBsaWNpdCBGbG9hdFBv
aW50KEZyYWN0aW9uYWxMYXlvdXRQb2ludCkgY29uc3RydWN0b3IuCisgICAgICAgIAorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRQb2ludDo6bW92ZSk6CisgICAgICAgIEFkZCBtb3ZlKEZyYWN0aW9u
YWxMYXlvdXRTaXplKSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3Jl
OjpGbG9hdFBvaW50Ojptb3ZlQnkpOgorICAgICAgICBBZGQgbW92ZUJ5KEZyYWN0aW9uYWxMYXlv
dXRQb2ludCkgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6RmxvYXRSZWN0KToKKyAgICAgICAgQWRkIGV4
cGxpY2l0IEZsb2F0UmVjdEZyYWN0aW9uYWxMYXlvdXRSZWN0KSBjb25zdHJ1Y3Rvci4KKyAgICAg
ICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0Lmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKEZsb2F0UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRTaXplLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0U2l6ZTo6RmxvYXRTaXpl
KToKKyAgICAgICAgQWRkIGV4cGxpY2l0IEZsb2F0U2l6ZShGcmFjdGlvbmFsTGF5b3V0U2l6ZSkg
Y29uc3RydWN0b3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UG9pbnQuaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVj
dC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0
U2l6ZS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxM
YXlvdXRTaXplLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6SW50UmVjdCk6CisgICAgICAgIEFkZCBl
eHBsaWNpdCBJbnRSZWN0KEZyYWN0aW9uYWxMYXlvdXRSZWN0KSBjb25zdHJ1Y3Rvci4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaDoKKwogMjAxMi0wMi0wOSAgTGV2aSBX
ZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIHBpeGVsU25hcHBl
ZEludFJlY3QgbWV0aG9kCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTA3NDU1
KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEw
OTQsNiArMTA5NCw4IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9GcmFjdGlvbmFsTGF5b3V0U2l6ZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBv
aW50LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0JKHJldmlzaW9uIDEwNzQ1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTI5NDMsNiArMjk0MywxMSBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZF
R2F1c3NpYW5CbHVyTkVPTi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL2FybS9GRUxpZ2h0aW5nTkVPTi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFTGlnaHRpbmdORU9OLmggXAorCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRQb2ludC5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmggXAorCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRTaXplLmNwcCBc
CisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwIFwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkJKHJldmlzaW9uIDEwNzQ1NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzAwNCw2ICszMDA0LDggQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRTaXplLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UXVhZC5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5vcmRl
cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCShyZXZpc2lvbiAx
MDc0NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDMyMCw3ICsxMDMyMCw3IEBAIF9fWk43V2ViQ29yZTlDU1NQYXJzZXIxMXBhcnNlQ2FudmFz
RVJOM1cKIF9fWk5LN1dlYkNvcmU4Q1NTVmFsdWUxMmlzSW1hZ2VWYWx1ZUV2CiBfX1pOSzdXZWJD
b3JlMjJDU1NJbWFnZUdlbmVyYXRvclZhbHVlMjFpc0ltYWdlR2VuZXJhdG9yVmFsdWVFdgogX19a
TjdXZWJDb3JlMjJDU1NJbWFnZUdlbmVyYXRvclZhbHVlMTRnZW5lcmF0ZWRJbWFnZUV2Ci1fX1pO
SzdXZWJDb3JlMTRDU1NDYW52YXNWYWx1ZTExaXNGaXhlZFNpemVFdgorX19aTks3V2ViQ29yZTE0
Q1NTQ2FudmFzVmFsdWUxMWlzRnJhY3Rpb25hbExheW91dFNpemVFdgogX19aTjdXZWJDb3JlMTlT
dHlsZUdlbmVyYXRlZEltYWdlOWFkZENsaWVudEVQTlNfMTJSZW5kZXJPYmplY3RFCiBfX1pON1dl
YkNvcmUyMkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU5YWRkQ2xpZW50RVBOU18xMlJlbmRlck9iamVj
dEVSS05TXzdJbnRTaXplRQogX19aTjdXZWJDb3JlNDZqc0RvY3VtZW50UHJvdG90eXBlRnVuY3Rp
b25HZXRDU1NDYW52YXNDb250ZXh0RVBOM0pTQzlFeGVjU3RhdGVFCkBAIC0xMDQ1NCw3ICsxMDQ1
NCw3IEBAIF9fWk43V2ViQ29yZTE1Q1NTUmVmbGVjdFZhbHVlRDBFdgogX19aTjdXZWJDb3JlOUNT
U1BhcnNlcjE2cGFyc2VCb3JkZXJJbWFnZUVpYlJOM1dURjZSZWZQdHJJTlNfOENTU1ZhbHVlRUVF
CiBfX1pON1dlYkNvcmUyM0JvcmRlckltYWdlUGFyc2VDb250ZXh0MTdjb21taXRCb3JkZXJJbWFn
ZUVQTlNfOUNTU1BhcnNlckViCiBfX1pON1dlYkNvcmUyM0JvcmRlckltYWdlUGFyc2VDb250ZXh0
RDFFdgotX19aTks3V2ViQ29yZTIyQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTExaXNGaXhlZFNpemVF
dgorX19aTks3V2ViQ29yZTIyQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTExaXNGcmFjdGlvbmFsTGF5
b3V0U2l6ZUV2CiBfX1pON1dlYkNvcmUxNkNTU0dyYWRpZW50VmFsdWU1aW1hZ2VFUE5TXzEyUmVu
ZGVyT2JqZWN0RVJLTlNfN0ludFNpemVFCiBfX1pOSzNXVEY5SGFzaFRhYmxlSVBON1dlYkNvcmUx
MlJlbmRlck9iamVjdEVTdDRwYWlySVMzX1M0X0lOUzFfN0ludFNpemVFaUVFTlNfMThQYWlyRmly
c3RFeHRyYWN0b3JJUzdfRUVOU183UHRySGFzaElTM19FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNf
MTBIYXNoVHJhaXRzSVMzX0VFTlNEX0lTNl9FRUVFU0VfRThjb250YWluc0lTM19OU18yMklkZW50
aXR5SGFzaFRyYW5zbGF0b3JJUzNfUzdfU0JfRUVFRWJSS1RfCiBfX1pON1dlYkNvcmUyMkNTU0lt
YWdlR2VuZXJhdG9yVmFsdWU4Z2V0SW1hZ2VFUE5TXzEyUmVuZGVyT2JqZWN0RVJLTlNfN0ludFNp
emVFCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agkocmV2aXNpb24gMTA3NDU1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI3NTA5LDYgKzI3NTA5LDI2IEBACiAJCQkJ
CT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xGaXhlZFBvaW50LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUK
KwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGaXhlZFJlY3QuY3BwIgor
CQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3NcRml4ZWRSZWN0LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZp
bGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGaXhlZFNpemUuY3Bw
IgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcRml4ZWRTaXplLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJ
PEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFBvaW50
LmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEwNzQ1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMzE0LDYgKzMxNCwxMSBAQAogCQkxNDk0N0ZGRTEyRjgwQ0QyMDBBMEY2MzEgLyog
RG9jdW1lbnRPcmRlcmVkTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDk0N0ZGQzEyRjgwQ0QyMDBBMEY2MzEgLyogRG9jdW1lbnRPcmRlcmVkTWFw
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ5
OTNCRTUwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDk5M0JFMzBCMkYyQjFDMDA1MDQ5
N0YgLyogRm9jdXNDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJMTQ5OTNCRTYwQjJGMkIxQzAwNTA0
OTdGIC8qIEZvY3VzQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQ5OTNCRTQwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0
QzBBMkIyMTQ0NjMyMUUwMDUyMDc5OCAvKiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MTU4MTQ0NENCRDQw
MEVDNEM0QyAvKiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNEMwQTJCNjE0NDYzMjFFMDA1MjA3OTggLyog
RnJhY3Rpb25hbExheW91dFJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkFCNzcxNTYxNDQ0Q0JENDAwRUM0QzRDIC8qIEZyYWN0aW9uYWxMYXlv
dXRSZWN0LmNwcCAqLzsgfTsKKwkJMTRDMEEyQjcxNDQ2MzIxRTAwNTIwNzk4IC8qIEZyYWN0aW9u
YWxMYXlvdXRSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQUI3NzE1NTE0NDRDQkQ0MDBFQzRDNEMgLyogRnJhY3Rpb25hbExheW91dFJlY3QuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNEMwQTJC
QjE0NDYzMjFFMDA1MjA3OTggLyogRnJhY3Rpb25hbExheW91dFNpemUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkFCNzcxNTMxNDQ0Q0JENDAwRUM0
QzRDIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmNwcCAqLzsgfTsKKwkJMTRDMEEyQkMxNDQ2MzIx
RTAwNTIwNzk4IC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQUI3NzE1MjE0NDRDQkQ0MDBFQzRDNEMgLyogRnJh
Y3Rpb25hbExheW91dFNpemUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkxNEM5QTVFQTBCM0QxMDVGMDA1QTAyMzIgLyogU2V0dGluZ3MuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDOUE1RTkwQjNE
MTA1RjAwNUEwMjMyIC8qIFNldHRpbmdzLmNwcCAqLzsgfTsKIAkJMTRDRDhEODIxMDZCNTI5MDAw
QTQ2RDIzIC8qIEpTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0Q4RDgxMTA2QjUyOTAwMEE0NkQyMyAvKiBKU1No
YXJlZFdvcmtlckN1c3RvbS5jcHAgKi87IH07CiAJCTE0Q0Y3OEE0MDlGNThDQkYwMEVCMzY2NSAv
KiBKU0NTU1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0Q0Y3OEEzMDlGNThDQkYwMEVCMzY2NSAvKiBKU0NTU1ZhbHVlLmNwcCAqLzsgfTsK
QEAgLTE4ODA0LDYgKzE4ODA5LDExIEBACiAJCQkJNDlGQzdBNEYxNDQ0QUY1RjAwQTVEODY0IC8q
IERpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAgKi8sCiAJCQkJNDlBRjJENjgxNDQzNUQwNTAwMTZB
Nzg0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5oICovLAogCQkJCTZFNjdEMkE4MTI4MEU4QkQw
MDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCAqLywKKwkJCQlCQUI3NzE1MjE0NDRDQkQ0MDBFQzRD
NEMgLyogRnJhY3Rpb25hbExheW91dFNpemUuaCAqLywKKwkJCQlCQUI3NzE1MzE0NDRDQkQ0MDBF
QzRDNEMgLyogRnJhY3Rpb25hbExheW91dFNpemUuY3BwICovLAorCQkJCUJBQjc3MTU1MTQ0NENC
RDQwMEVDNEM0QyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5oICovLAorCQkJCUJBQjc3MTU2MTQ0
NENCRDQwMEVDNEM0QyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAgKi8sCisJCQkJQkFCNzcx
NTgxNDQ0Q0JENDAwRUM0QzRDIC8qIEZyYWN0aW9uYWxMYXlvdXRQb2ludC5oICovLAogCQkJCUIy
NzUzNTNBMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmNwcCAqLywKIAkJCQlCMjc1MzUz
QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5oICovLAogCQkJCUIyRTI3QzlEMEIwRjJC
MDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuY3BwICovLApAQCAtMjIxODksNiArMjIxOTksOSBA
QAogCQkJCTQ5RUNFQjZFMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQ5RUNFQjcwMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRp
b25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzJDMDBEOTEyOTYxOUY4MDA1Qzk1NzUgLyogRmlu
ZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0QzBBMkIyMTQ0NjMyMUUwMDUyMDc5OCAv
KiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0QzBBMkI3MTQ0
NjMyMUUwMDUyMDc5OCAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMTRDMEEyQkMxNDQ2MzIxRTAwNTIwNzk4IC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOENGRjA0RjBBMTU0RjA5MDAwQTQyMzQgLyogRml4ZWRUYWJsZUxh
eW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwNzNCQUEwQzM5OUIxRjAwMEY1OTc5IC8qIEZs
b2F0Q29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjI3NTM1NjkwQjA1MzgxNDAwMkNF
NjRGIC8qIEZsb2F0UG9pbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjUyNjEsNiArMjUyNzQsOCBA
QAogCQkJCTMxMzEzRjY1MTQ0M0IzNUYwMDZFMkE5MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUVDRUI2RDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVy
T3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RUNFQjZGMTQ5OTc5MEQwMENERDNB
NCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0QzBBMkI2MTQ0
NjMyMUUwMDUyMDc5OCAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkxNEMwQTJCQjE0NDYzMjFFMDA1MjA3OTggLyogRnJhY3Rpb25hbExheW91dFNpemUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQThDRkYwNEQwQTE1NEYwOTAwMEE0MjM0IC8qIEZpeGVkVGFi
bGVMYXlvdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NjgwQjA1MzgxNDAwMkNFNjRG
IC8qIEZsb2F0UG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJFMjdDOUYwQjBGMkIwOTAw
RjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0ZyYWN0aW9uYWxMYXlvdXRVbml0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25hbExheW91dFVuaXQuaAkocmV2aXNpb24gMTA3
NDU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25hbExheW91dFVuaXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIHByaXZhdGU6CiAgICAgfQogICAgIGlu
bGluZSBib29sIGlzSW5Cb3VuZHModW5zaWduZWQgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1
cm4gdmFsdWUgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpIC8ga0ZpeGVkUG9pbnRE
ZW5vbWluYXRvcjsKKyAgICAgICAgcmV0dXJuIHZhbHVlIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRv
cjsKICAgICB9CiAgICAgaW5saW5lIGJvb2wgaXNJbkJvdW5kcyhkb3VibGUgdmFsdWUpCiAgICAg
ewpAQCAtMjYyLDEyICsyNjIsMTIgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFj
dGlvbmFsTAogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBhLCBpbnQgYikKIHsKLSAgICByZXR1cm4gYSA9PSBGcmFjdGlvbkxheW91dFVuaXQoYik7
CisgICAgcmV0dXJuIGEgPT0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7CiB9CiAKIGlubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBi
KQogewotICAgIHJldHVybiBGcmFjdGlvbkxheW91dFVuaXQoYSkgPT0gYjsKKyAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFVuaXQoYSkgPT0gYjsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKQEAgLTI5Nyw3ICsyOTcs
NyBAQCBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IqKGNvCiB7CiAgICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOwogICAgIGxvbmcgbG9uZyByYXdWYWwgPSBzdGF0
aWNfY2FzdDxsb25nIGxvbmc+KGEucmF3VmFsdWUoKSkgKiBiLnJhd1ZhbHVlKCkgLyBrRml4ZWRQ
b2ludERlbm9taW5hdG9yOwotICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZSgoYS5yYXdWYWx1ZSgp
IC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcikgKiBiLnJhd1ZhbHVlKCkpOworICAgIHJldHVyblZh
bC5zZXRSYXdWYWx1ZShyYXdWYWwpOwogICAgIHJldHVybiByZXR1cm5WYWw7CiB9ICAgIAogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNw
cAkocmV2aXNpb24gMTA3NDU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRQb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDEwIEBACiAjaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UG9p
bnQuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJJbnRQb2ludC5o
IgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8bGltaXRzPgog
I2luY2x1ZGUgPG1hdGguaD4KIApAQCAtNDAsNiArNDEsMTAgQEAgRmxvYXRQb2ludDo6RmxvYXRQ
b2ludChjb25zdCBJbnRQb2ludCYgcAogewogfQogCitGbG9hdFBvaW50OjpGbG9hdFBvaW50KGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcCkgOiBtX3gocC54KCkpLCBtX3kocC55KCkpCit7
Cit9CisKIHZvaWQgRmxvYXRQb2ludDo6bm9ybWFsaXplKCkKIHsKICAgICBmbG9hdCB0ZW1wTGVu
Z3RoID0gbGVuZ3RoKCk7CkBAIC01NSw2ICs2MCwxOCBAQCBmbG9hdCBGbG9hdFBvaW50OjpsZW5n
dGgoKSBjb25zdAogICAgIHJldHVybiBzcXJ0ZihsZW5ndGhTcXVhcmVkKCkpOwogfQogCit2b2lk
IEZsb2F0UG9pbnQ6Om1vdmUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpCit7Cisg
ICAgbV94ICs9IHNpemUud2lkdGgoKTsKKyAgICBtX3kgKz0gc2l6ZS5oZWlnaHQoKTsKK30KKwor
dm9pZCBGbG9hdFBvaW50Ojptb3ZlQnkoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2lu
dCkKK3sKKyAgICBtX3ggKz0gcG9pbnQueCgpOworICAgIG1feSArPSBwb2ludC55KCk7Cit9CisK
IEZsb2F0UG9pbnQgRmxvYXRQb2ludDo6bWF0cml4VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtKSBjb25zdAogewogICAgIGRvdWJsZSBuZXdYLCBuZXdZOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAkocmV2aXNp
b24gMTA3NDU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMyArNjAsMTUgQEAgY2xhc3MgQWZmaW5lVHJhbnNm
b3JtOwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiBjbGFzcyBJbnRQb2ludDsKIGNsYXNz
IEludFNpemU7CitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQ7CitjbGFzcyBGcmFjdGlvbmFs
TGF5b3V0U2l6ZTsKIAogY2xhc3MgRmxvYXRQb2ludCB7CiBwdWJsaWM6CiAgICAgRmxvYXRQb2lu
dCgpIDogbV94KDApLCBtX3koMCkgeyB9CiAgICAgRmxvYXRQb2ludChmbG9hdCB4LCBmbG9hdCB5
KSA6IG1feCh4KSwgbV95KHkpIHsgfQogICAgIEZsb2F0UG9pbnQoY29uc3QgSW50UG9pbnQmKTsK
LQorICAgIEZsb2F0UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50Jik7CiAKICAgICBz
dGF0aWMgRmxvYXRQb2ludCB6ZXJvKCkgeyByZXR1cm4gRmxvYXRQb2ludCgpOyB9CiAKQEAgLTky
LDYgKzk0LDcgQEAgcHVibGljOgogICAgICAgICBtX3ggKz0gYS53aWR0aCgpOwogICAgICAgICBt
X3kgKz0gYS5oZWlnaHQoKTsKICAgICB9CisgICAgdm9pZCBtb3ZlKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRTaXplJik7CiAgICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgYSkKICAgICB7CiAg
ICAgICAgIG1feCArPSBhLndpZHRoKCk7CkBAIC0xMDIsNiArMTA1LDcgQEAgcHVibGljOgogICAg
ICAgICBtX3ggKz0gYS54KCk7CiAgICAgICAgIG1feSArPSBhLnkoKTsKICAgICB9CisgICAgdm9p
ZCBtb3ZlQnkoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50Jik7CiAgICAgdm9pZCBtb3ZlQnko
Y29uc3QgRmxvYXRQb2ludCYgYSkKICAgICB7CiAgICAgICAgIG1feCArPSBhLngoKTsKQEAgLTEz
MSw2ICsxMzUsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gRmxvYXRQb2ludChzdGQ6Om1h
eChtX3gsIG90aGVyLm1feCksIHN0ZDo6bWF4KG1feSwgb3RoZXIubV95KSk7CiAgICAgfQogCisg
ICAgRmxvYXRQb2ludCBzaHJ1bmtUbyhjb25zdCBGbG9hdFBvaW50JiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBGbG9hdFBvaW50KG1feCA8IG90aGVyLm1feCA/IG1feCA6IG90
aGVyLm1feCwKKyAgICAgICAgICAgIG1feSA8IG90aGVyLm1feSA/IG1feSA6IG90aGVyLm1feSk7
CisgICAgfQorCisgICAgdm9pZCBjbGFtcE5lZ2F0aXZlVG9aZXJvKCkKKyAgICB7CisgICAgICAg
ICp0aGlzID0gZXhwYW5kZWRUbyh6ZXJvKCkpOworICAgIH0KKwogICAgIEZsb2F0UG9pbnQgdHJh
bnNwb3NlZFBvaW50KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBGbG9hdFBvaW50KG1f
eSwgbV94KTsKQEAgLTIzOSw2ICsyNTQsMTEgQEAgaW5saW5lIEludFNpemUgZmxvb3JlZEludFNp
emUoY29uc3QgRmxvYQogICAgIHJldHVybiBJbnRTaXplKHN0YXRpY19jYXN0PGludD4ocC54KCkp
LCBzdGF0aWNfY2FzdDxpbnQ+KHAueSgpKSk7CiB9CiAKK2lubGluZSBGbG9hdFBvaW50IHRvUG9p
bnQoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIHJldHVybiBGbG9hdFBvaW50KHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Cit9CisKIGZsb2F0IGZpbmRTbG9wZShjb25zdCBGbG9h
dFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0JiBjKTsKIAogLy8gRmluZCBw
b2ludCB3aGVyZSBsaW5lcyB0aHJvdWdoIHRoZSB0d28gcGFpcnMgb2YgcG9pbnRzIGludGVyc2Vj
dC4gUmV0dXJucyBmYWxzZSBpZiB0aGUgbGluZXMgZG9uJ3QgaW50ZXJzZWN0LgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCShyZXZpc2lv
biAxMDc0NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJGcmFjdGlvbmFs
TGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+
CiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtNDIsNiArNDMsMTAgQEAgRmxvYXRSZWN0OjpGbG9hdFJl
Y3QoY29uc3QgSW50UmVjdCYgcikgOgogewogfQogCitGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgcikgOiBtX2xvY2F0aW9uKHIubG9jYXRpb24oKSksIG1f
c2l6ZShyLnNpemUoKSkKK3sKK30KKwogRmxvYXRSZWN0IEZsb2F0UmVjdDo6bmFycm93UHJlY2lz
aW9uKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KQogewog
ICAgIHJldHVybiBGbG9hdFJlY3QobmFycm93UHJlY2lzaW9uVG9GbG9hdCh4KSwgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCh5KSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdCh3aWR0aCksIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoaGVpZ2h0KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuaAkocmV2aXNpb24gMTA3NDU1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYg
KzY2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgVkdSZWN0OwogI2VuZGlmCiAKK2Ns
YXNzIEZyYWN0aW9uYWxMYXlvdXRSZWN0OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEludFBvaW50
OwogCkBAIC04Miw2ICs4Myw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFJlY3QoZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKICAgICAgICAgOiBtX2xvY2F0aW9uKEZs
b2F0UG9pbnQoeCwgeSkpLCBtX3NpemUoRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpKSB7IH0KICAg
ICBGbG9hdFJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIEZsb2F0UmVjdChjb25zdCBGcmFjdGlv
bmFsTGF5b3V0UmVjdCYpOwogCiAgICAgc3RhdGljIEZsb2F0UmVjdCBuYXJyb3dQcmVjaXNpb24o
ZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAJKHJl
dmlzaW9uIDEwNzQ1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
U2l6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKIAorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlv
dXRTaXplLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiSW50U2l6
ZS5oIgogI2luY2x1ZGUgPGxpbWl0cz4KQEAgLTQwLDYgKzQxLDEwIEBAIEZsb2F0U2l6ZTo6Rmxv
YXRTaXplKGNvbnN0IEludFNpemUmIHNpemUKIHsKIH0KIAorRmxvYXRTaXplOjpGbG9hdFNpemUo
Y29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIDogbV93aWR0aChzaXplLndpZHRoKCkp
LCBtX2hlaWdodChzaXplLmhlaWdodCgpKQoreworfQorCiBmbG9hdCBGbG9hdFNpemU6OmRpYWdv
bmFsTGVuZ3RoKCkgY29uc3QKIHsKICAgICByZXR1cm4gc3FydGYoZGlhZ29uYWxMZW5ndGhTcXVh
cmVkKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXpl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRT
aXplLmgJKHJldmlzaW9uIDEwNzQ1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0U2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMiArNDYsMTQgQEAgdHlwZWRl
ZiBzdHJ1Y3QgX05TU2l6ZSBOU1NpemU7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElu
dFNpemU7CitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0U2l6ZTsKIAogY2xhc3MgRmxvYXRTaXplIHsK
IHB1YmxpYzoKICAgICBGbG9hdFNpemUoKSA6IG1fd2lkdGgoMCksIG1faGVpZ2h0KDApIHsgfQog
ICAgIEZsb2F0U2l6ZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSA6IG1fd2lkdGgod2lkdGgp
LCBtX2hlaWdodChoZWlnaHQpIHsgfQogICAgIEZsb2F0U2l6ZShjb25zdCBJbnRTaXplJik7Cisg
ICAgRmxvYXRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJik7CiAKICAgICBzdGF0aWMg
RmxvYXRTaXplIG5hcnJvd1ByZWNpc2lvbihkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpOwog
CkBAIC02NSw2ICs2NywxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1plcm8oKSBjb25zdDsKICAg
ICBib29sIGlzRXhwcmVzc2libGVBc0ludFNpemUoKSBjb25zdDsKIAorICAgIGJvb2wgaXNSb3Vn
aGx5RXF1YWxUbyhjb25zdCBGbG9hdFNpemUmIHMpCisgICAgeworICAgICAgICByZXR1cm4gYWJz
KHdpZHRoKCkgLSBzLndpZHRoKCkpIDwgMC4xICYmIGFicyhoZWlnaHQoKSAtIHMuaGVpZ2h0KCkp
IDwgMC4xOworICAgIH0KKwogICAgIGZsb2F0IGFzcGVjdFJhdGlvKCkgY29uc3QgeyByZXR1cm4g
bV93aWR0aCAvIG1faGVpZ2h0OyB9CiAKICAgICB2b2lkIGV4cGFuZChmbG9hdCB3aWR0aCwgZmxv
YXQgaGVpZ2h0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFBvaW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UG9pbnQuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGcmFjdGlvbmFsTGF5b3V0UG9pbnRfaAor
I2RlZmluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnRfaAorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5o
IgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRTaXplLmgiCisjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQgeworcHVibGljOgorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCgpIDogbV94KDApLCBt
X3koMCkgeyB9CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50KEZyYWN0aW9uYWxMYXlvdXRVbml0
IHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHkpIDogbV94KHgpLCBtX3koeSkgeyB9CisgICAgRnJh
Y3Rpb25hbExheW91dFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgOiBtX3gocG9pbnQueCgp
KSwgbV95KHBvaW50LnkoKSkgeyB9CisgICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFBvaW50
KGNvbnN0IEZsb2F0UG9pbnQmIHNpemUpIDogbV94KHNpemUueCgpKSwgbV95KHNpemUueSgpKSB7
IH0KKworICAgIHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgemVybygpIHsgcmV0dXJuIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCgpOyB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KCkg
Y29uc3QgeyByZXR1cm4gbV94OyB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgeSgpIGNvbnN0
IHsgcmV0dXJuIG1feTsgfQorCisgICAgdm9pZCBzZXRYKEZyYWN0aW9uYWxMYXlvdXRVbml0IHgp
IHsgbV94ID0geDsgfQorICAgIHZvaWQgc2V0WShGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KSB7IG1f
eSA9IHk7IH0KKworICAgIHZvaWQgbW92ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgcykg
eyBtb3ZlKHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7IH0gCisgICAgdm9pZCBtb3ZlQnkoY29uc3Qg
RnJhY3Rpb25hbExheW91dFBvaW50JiBvZmZzZXQpIHsgbW92ZShvZmZzZXQueCgpLCBvZmZzZXQu
eSgpKTsgfQorICAgIHZvaWQgbW92ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeCwgRnJhY3Rpb25h
bExheW91dFVuaXQgZHkpIHsgbV94ICs9IGR4OyBtX3kgKz0gZHk7IH0KKyAgICB2b2lkIHNjYWxl
KGZsb2F0IHN4LCBmbG9hdCBzeSkKKyAgICB7CisgICAgICAgIG1feCAqPSBzeDsKKyAgICAgICAg
bV95ICo9IHN5OworICAgIH0KKyAgICAKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgZXhwYW5k
ZWRUbyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX3ggPiBvdGhlci5tX3ggPyBtX3gg
OiBvdGhlci5tX3gsCisgICAgICAgICAgICBtX3kgPiBvdGhlci5tX3kgPyBtX3kgOiBvdGhlci5t
X3kpOworICAgIH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBzaHJ1bmtUbyhjb25zdCBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX3ggPCBvdGhlci5tX3ggPyBtX3ggOiBvdGhlci5tX3gs
CisgICAgICAgICAgICBtX3kgPCBvdGhlci5tX3kgPyBtX3kgOiBvdGhlci5tX3kpOworICAgIH0K
KworICAgIHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCisgICAgeworICAgICAgICAqdGhpcyA9
IGV4cGFuZGVkVG8oemVybygpKTsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQg
dHJhbnNwb3NlZFBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQobV95LCBtX3gpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBtX3gsIG1feTsKK307CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQm
IG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0U2l6ZSYgYikKK3sKKyAgICBhLm1vdmUoYi53aWR0aCgpLCBiLmhlaWdodCgpKTsKKyAgICBy
ZXR1cm4gYTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3BlcmF0b3ItPShG
cmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQor
eworICAgIGEubW92ZSgtYi53aWR0aCgpLCAtYi5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGE7Cit9
CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAg
cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChhLngoKSArIGIud2lkdGgoKSwgYS55KCkgKyBi
LmhlaWdodCgpKTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvciso
Y29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChhLngoKSArIGIueCgp
LCBhLnkoKSArIGIueSgpKTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIG9wZXJh
dG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRQb2ludCYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoYS54KCkgLSBi
LngoKSwgYS55KCkgLSBiLnkoKSk7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQg
b3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25h
bExheW91dFNpemUmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChhLngo
KSAtIGIud2lkdGgoKSwgYS55KCkgLSBiLmhlaWdodCgpKTsKK30KKworaW5saW5lIEZyYWN0aW9u
YWxMYXlvdXRQb2ludCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2lu
dCkKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KC1wb2ludC54KCksIC1wb2lu
dC55KCkpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBiKQoreworICAgIHJldHVy
biBhLngoKSA9PSBiLngoKSAmJiBhLnkoKSA9PSBiLnkoKTsKK30KKworaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRQb2ludCYgYikKK3sKKyAgICByZXR1cm4gYS54KCkgIT0gYi54KCkgfHwgYS55KCkgIT0g
Yi55KCk7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgdG9Qb2ludChjb25zdCBG
cmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91
dFBvaW50KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Cit9CisKK2lubGluZSBGcmFjdGlv
bmFsTGF5b3V0U2l6ZSB0b1NpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhKQorewor
ICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShhLngoKSwgYS55KCkpOworfQorCitpbmxp
bmUgSW50UG9pbnQgZmxvb3JlZEludFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYg
cG9pbnQpCit7CisgICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKS50b0ludCgpLCBwb2ludC55
KCkudG9JbnQoKSk7Cit9CisKK2lubGluZSBJbnRQb2ludCByb3VuZGVkSW50UG9pbnQoY29uc3Qg
RnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4gSW50UG9pbnQocG9p
bnQueCgpLnJvdW5kKCksIHBvaW50LnkoKS5yb3VuZCgpKTsKK30KKworaW5saW5lIEludFBvaW50
IGNlaWxlZEludFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpCit7Cisg
ICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKS5jZWlsKCksIHBvaW50LnkoKS5jZWlsKCkpOwor
fQorCisjaWYgUExBVEZPUk0oUVQpCitpbmxpbmUgUURhdGFTdHJlYW0mIG9wZXJhdG9yPDwoUURh
dGFTdHJlYW0mIHN0cmVhbSwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkKK3sK
KyAgICBzdHJlYW0gPDwgcG9pbnQueCgpLnRvRmxvYXQoKSA8PCBwb2ludC55KCkudG9GbG9hdCgp
OworICAgIHJldHVybiBzdHJlYW07Cit9CisKK2lubGluZSBRRGF0YVN0cmVhbSYgb3BlcmF0b3I+
PihRRGF0YVN0cmVhbSYgc3RyZWFtLCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQorewor
ICAgIGZsb2F0IHgsIHk7CisgICAgc3RyZWFtID4+IHggPj4geTsKKyAgICBwb2ludC5zZXRYKHgp
OworICAgIHBvaW50LnNldFkoeSk7CisgICAgcmV0dXJuIHN0cmVhbTsKK30KKyNlbmRpZgorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5b3V0UG9pbnRf
aApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91
dFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZyYWN0aW9u
YWxMYXlvdXRSZWN0LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGcmFj
dGlvbmFsTGF5b3V0VW5pdC5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitGcmFjdGlvbmFsTGF5b3V0UmVjdDo6RnJhY3Rpb25hbExheW91dFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByKQorICAgIDogbV9sb2NhdGlvbihGcmFjdGlvbmFsTGF5b3V0UG9pbnQo
ci54KCksIHIueSgpKSkKKyAgICAsIG1fc2l6ZShGcmFjdGlvbmFsTGF5b3V0U2l6ZShyLndpZHRo
KCksIHIuaGVpZ2h0KCkpKQoreworfQorCitib29sIEZyYWN0aW9uYWxMYXlvdXRSZWN0OjppbnRl
cnNlY3RzKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikgY29uc3QKK3sKKyAgICAv
LyBDaGVja2luZyBlbXB0aW5lc3MgaGFuZGxlcyBuZWdhdGl2ZSB3aWR0aHMgYXMgd2VsbCBhcyB6
ZXJvLgorICAgIHJldHVybiAhaXNFbXB0eSgpICYmICFvdGhlci5pc0VtcHR5KCkKKyAgICAgICAg
JiYgeCgpIDwgb3RoZXIubWF4WCgpICYmIG90aGVyLngoKSA8IG1heFgoKQorICAgICAgICAmJiB5
KCkgPCBvdGhlci5tYXhZKCkgJiYgb3RoZXIueSgpIDwgbWF4WSgpOworfQorCitib29sIEZyYWN0
aW9uYWxMYXlvdXRSZWN0Ojpjb250YWlucyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgb3Ro
ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHgoKSA8PSBvdGhlci54KCkgJiYgbWF4WCgpID49IG90
aGVyLm1heFgoKQorICAgICAgICAmJiB5KCkgPD0gb3RoZXIueSgpICYmIG1heFkoKSA+PSBvdGhl
ci5tYXhZKCk7Cit9CisKK3ZvaWQgRnJhY3Rpb25hbExheW91dFJlY3Q6OmludGVyc2VjdChjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpCit7CisgICAgRnJhY3Rpb25hbExheW91dFVu
aXQgbmV3WCA9IHN0ZDo6bWF4KHgoKSwgb3RoZXIueCgpKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBuZXdZID0gc3RkOjptYXgoeSgpLCBvdGhlci55KCkpOworICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0IG5ld01heFggPSBzdGQ6Om1pbihtYXhYKCksIG90aGVyLm1heFgoKSk7CisgICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgbmV3TWF4WSA9IHN0ZDo6bWluKG1heFkoKSwgb3RoZXIubWF4WSgp
KTsKKworICAgIC8vIFJldHVybiBhIGNsZWFuIGVtcHR5IHJlY3RhbmdsZSBmb3Igbm9uLWludGVy
c2VjdGluZyBjYXNlcy4KKyAgICBpZiAobmV3WCA+PSBuZXdNYXhYIHx8IG5ld1kgPj0gbmV3TWF4
WSkgeworICAgICAgICBuZXdYID0gMDsKKyAgICAgICAgbmV3WSA9IDA7CisgICAgICAgIG5ld01h
eFggPSAwOworICAgICAgICBuZXdNYXhZID0gMDsKKyAgICB9CisKKyAgICBtX2xvY2F0aW9uLnNl
dFgobmV3WCk7CisgICAgbV9sb2NhdGlvbi5zZXRZKG5ld1kpOworICAgIG1fc2l6ZS5zZXRXaWR0
aChuZXdNYXhYIC0gbmV3WCk7CisgICAgbV9zaXplLnNldEhlaWdodChuZXdNYXhZIC0gbmV3WSk7
Cit9CisKK3ZvaWQgRnJhY3Rpb25hbExheW91dFJlY3Q6OnVuaXRlKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRSZWN0JiBvdGhlcikKK3sKKyAgICAvLyBIYW5kbGUgZW1wdHkgc3BlY2lhbCBjYXNlcyBm
aXJzdC4KKyAgICBpZiAob3RoZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KGlzRW1wdHkoKSkgeworICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbmV3WCA9IHN0ZDo6bWluKHgoKSwgb3Ro
ZXIueCgpKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBuZXdZID0gc3RkOjptaW4oeSgpLCBv
dGhlci55KCkpOworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG5ld01heFggPSBzdGQ6Om1heCht
YXhYKCksIG90aGVyLm1heFgoKSk7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbmV3TWF4WSA9
IHN0ZDo6bWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKTsKKworICAgIG1fbG9jYXRpb24uc2V0WChu
ZXdYKTsKKyAgICBtX2xvY2F0aW9uLnNldFkobmV3WSk7CisgICAgbV9zaXplLnNldFdpZHRoKG5l
d01heFggLSBuZXdYKTsKKyAgICBtX3NpemUuc2V0SGVpZ2h0KG5ld01heFkgLSBuZXdZKTsKK30K
Kwordm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6dW5pdGVJZk5vblplcm8oY29uc3QgRnJhY3Rp
b25hbExheW91dFJlY3QmIG90aGVyKQoreworICAgIC8vIEhhbmRsZSBlbXB0eSBzcGVjaWFsIGNh
c2VzIGZpcnN0LgorICAgIGlmICghb3RoZXIud2lkdGgoKSAmJiAhb3RoZXIuaGVpZ2h0KCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIXdpZHRoKCkgJiYgIWhlaWdodCgpKSB7CisgICAgICAg
ICp0aGlzID0gb3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBuZXdYID0gc3RkOjptaW4oeCgpLCBvdGhlci54KCkpOworICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IG5ld1kgPSBzdGQ6Om1pbih5KCksIG90aGVyLnkoKSk7CisgICAgRnJhY3Rp
b25hbExheW91dFVuaXQgbmV3TWF4WCA9IHN0ZDo6bWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKTsK
KyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBuZXdNYXhZID0gc3RkOjptYXgobWF4WSgpLCBvdGhl
ci5tYXhZKCkpOworCisgICAgbV9sb2NhdGlvbi5zZXRYKG5ld1gpOworICAgIG1fbG9jYXRpb24u
c2V0WShuZXdZKTsKKyAgICBtX3NpemUuc2V0V2lkdGgobmV3TWF4WCAtIG5ld1gpOworICAgIG1f
c2l6ZS5zZXRIZWlnaHQobmV3TWF4WSAtIG5ld1kpOworfQorCit2b2lkIEZyYWN0aW9uYWxMYXlv
dXRSZWN0OjpzY2FsZShmbG9hdCBzKQoreworICAgIG1fbG9jYXRpb24uc2V0WCh4KCkgKiBzKTsK
KyAgICBtX2xvY2F0aW9uLnNldFkoeSgpICogcyk7CisgICAgbV9zaXplLnNldFdpZHRoKHdpZHRo
KCkgKiBzKTsKKyAgICBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCgpICogcyk7Cit9CisKK0ZyYWN0
aW9uYWxMYXlvdXRSZWN0IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8RnJhY3Rpb25hbExheW91dFJl
Y3Q+JiByZWN0cykKK3sKKyAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCByZXN1bHQ7CisKKyAgICBz
aXplX3QgY291bnQgPSByZWN0cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQorICAgICAgICByZXN1bHQudW5pdGUocmVjdHNbaV0pOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRSZWN0JiByZWN0KQoreworICAgIGZsb2F0IHggPSBmbG9vcmYocmVjdC54KCkudG9GbG9h
dCgpKTsKKyAgICBmbG9hdCB5ID0gZmxvb3JmKHJlY3QueSgpLnRvRmxvYXQoKSk7CisgICAgZmxv
YXQgd2lkdGggPSBjZWlsZihyZWN0Lm1heFgoKS50b0Zsb2F0KCkpIC0geDsKKyAgICBmbG9hdCBo
ZWlnaHQgPSBjZWlsZihyZWN0Lm1heFkoKS50b0Zsb2F0KCkpIC0geTsKKworICAgIHJldHVybiBJ
bnRSZWN0KGNsYW1wVG9JbnRlZ2VyKHgpLCBjbGFtcFRvSW50ZWdlcih5KSwgCisgICAgICAgICAg
ICAgICAgICAgY2xhbXBUb0ludGVnZXIod2lkdGgpLCBjbGFtcFRvSW50ZWdlcihoZWlnaHQpKTsK
K30KKworRnJhY3Rpb25hbExheW91dFJlY3QgZW5jbG9zaW5nRnJhY3Rpb25hbExheW91dFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UmVj
dChyZWN0LngoKSwgcmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgICByZWN0Lm1heFgoKSAt
IHJlY3QueCgpICsgRnJhY3Rpb25hbExheW91dFVuaXQ6OmVwc2lsb24oKSwKKyAgICAgICAgICAg
ICAgICAgICAgIHJlY3QubWF4WSgpIC0gcmVjdC55KCkgKyBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6
ZXBzaWxvbigpKTsKK30KKworSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRSZWN0JiByZWN0KQoreworICAgIEludFBvaW50IHJvdW5kZWRMb2NhdGlvbiA9
IHJvdW5kZWRJbnRQb2ludChyZWN0LmxvY2F0aW9uKCkpOworICAgIHJldHVybiBJbnRSZWN0KHJv
dW5kZWRMb2NhdGlvbiwgSW50U2l6ZSgocmVjdC54KCkgKyByZWN0LndpZHRoKCkpLnJvdW5kKCkg
LSByb3VuZGVkTG9jYXRpb24ueCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAocmVjdC55KCkgKyByZWN0LmhlaWdodCgpKS5yb3VuZCgpIC0gcm91bmRlZExv
Y2F0aW9uLnkoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRS
ZWN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
cmFjdGlvbmFsTGF5b3V0UmVjdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEZyYWN0aW9uYWxMYXlvdXRSZWN0X2gKKyNkZWZpbmUgRnJhY3Rpb25hbExheW91dFJlY3Rf
aAorCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFBvaW50LmgiCisjaW5jbHVkZSAiSW50UmVj
dC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBGbG9hdFJlY3Q7CisKK2NsYXNzIEZyYWN0aW9uYWxMYXlvdXRSZWN0IHsKK3B1YmxpYzoK
KyAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCgpIHsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgbG9jYXRpb24sIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRTaXplJiBzaXplKQorICAgICAgICA6IG1fbG9jYXRpb24obG9jYXRpb24pLCBtX3NpemUo
c2l6ZSkgeyB9CisgICAgRnJhY3Rpb25hbExheW91dFJlY3QoRnJhY3Rpb25hbExheW91dFVuaXQg
eCwgRnJhY3Rpb25hbExheW91dFVuaXQgeSwgRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgsIEZy
YWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkKKyAgICAgICAgOiBtX2xvY2F0aW9uKEZyYWN0aW9u
YWxMYXlvdXRQb2ludCh4LCB5KSksIG1fc2l6ZShGcmFjdGlvbmFsTGF5b3V0U2l6ZSh3aWR0aCwg
aGVpZ2h0KSkgeyB9CisgICAgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxvYXRQb2ludCYg
bG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBtX2xvY2F0aW9uKGxv
Y2F0aW9uKSwgbV9zaXplKHNpemUpIHsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0
IEludFJlY3QmIHJlY3QpIDogbV9sb2NhdGlvbihyZWN0LmxvY2F0aW9uKCkpLCBtX3NpemUocmVj
dC5zaXplKCkpIHsgfQorCisgICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3Qg
RmxvYXRSZWN0Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5
CisgICAgICAgIAorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBsb2NhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fbG9jYXRpb247IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgbG9jYXRpb24pIHsgbV9sb2NhdGlvbiA9IGxvY2F0aW9uOyB9Cisg
ICAgdm9pZCBzZXRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6
ZSA9IHNpemU7IH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHgoKSBjb25zdCB7IHJldHVy
biBtX2xvY2F0aW9uLngoKTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHkoKSBjb25zdCB7
IHJldHVybiBtX2xvY2F0aW9uLnkoKTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heFgo
KSBjb25zdCB7IHJldHVybiB4KCkgKyB3aWR0aCgpOyB9CisgICAgRnJhY3Rpb25hbExheW91dFVu
aXQgbWF4WSgpIGNvbnN0IHsgcmV0dXJuIHkoKSArIGhlaWdodCgpOyB9CisgICAgRnJhY3Rpb25h
bExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQorICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWln
aHQoKTsgfQorCisgICAgdm9pZCBzZXRYKEZyYWN0aW9uYWxMYXlvdXRVbml0IHgpIHsgbV9sb2Nh
dGlvbi5zZXRYKHgpOyB9CisgICAgdm9pZCBzZXRZKEZyYWN0aW9uYWxMYXlvdXRVbml0IHkpIHsg
bV9sb2NhdGlvbi5zZXRZKHkpOyB9CisgICAgdm9pZCBzZXRXaWR0aChGcmFjdGlvbmFsTGF5b3V0
VW5pdCB3aWR0aCkgeyBtX3NpemUuc2V0V2lkdGgod2lkdGgpOyB9CisgICAgdm9pZCBzZXRIZWln
aHQoRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KSB7IG1fc2l6ZS5zZXRIZWlnaHQoaGVpZ2h0
KTsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zaXplLmlzRW1wdHko
KTsgfQorCisgICAgLy8gTk9URTogVGhlIHJlc3VsdCBpcyByb3VuZGVkIHRvIGludGVnZXIgdmFs
dWVzLCBhbmQgdGh1cyBtYXkgYmUgbm90IHRoZSBleGFjdAorICAgIC8vIGNlbnRlciBwb2ludC4K
KyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgY2VudGVyKCkgY29uc3QgeyByZXR1cm4gRnJhY3Rp
b25hbExheW91dFBvaW50KHgoKSArIHdpZHRoKCkgLyAyLCB5KCkgKyBoZWlnaHQoKSAvIDIpOyB9
CisKKyAgICB2b2lkIG1vdmUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIHsgbV9s
b2NhdGlvbiArPSBzaXplOyB9IAorICAgIHZvaWQgbW92ZUJ5KGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRQb2ludCYgb2Zmc2V0KSB7IG1fbG9jYXRpb24ubW92ZShvZmZzZXQueCgpLCBvZmZzZXQueSgp
KTsgfQorICAgIHZvaWQgbW92ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeCwgRnJhY3Rpb25hbExh
eW91dFVuaXQgZHkpIHsgbV9sb2NhdGlvbi5tb3ZlKGR4LCBkeSk7IH0gCisKKyAgICB2b2lkIGV4
cGFuZChjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX3NpemUgKz0gc2l6ZTsg
fQorICAgIHZvaWQgZXhwYW5kKEZyYWN0aW9uYWxMYXlvdXRVbml0IGR3LCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKGR3LCBkaCk7IH0KKyAgICB2b2lkIGNvbnRyYWN0
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSAtPSBzaXplOyB9Cisg
ICAgdm9pZCBjb250cmFjdChGcmFjdGlvbmFsTGF5b3V0VW5pdCBkdywgRnJhY3Rpb25hbExheW91
dFVuaXQgZGgpIHsgbV9zaXplLmV4cGFuZCgtZHcsIC1kaCk7IH0KKworICAgIHZvaWQgc2hpZnRY
RWRnZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCisgICAgeworICAgICAgICBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSB4KCk7CisgICAgICAgIHNldFgoZWRnZSk7Cisg
ICAgICAgIHNldFdpZHRoKHN0ZDo6bWF4PEZyYWN0aW9uYWxMYXlvdXRVbml0PigwLCB3aWR0aCgp
IC0gZGVsdGEpKTsKKyAgICB9CisgICAgdm9pZCBzaGlmdE1heFhFZGdlVG8oRnJhY3Rpb25hbExh
eW91dFVuaXQgZWRnZSkKKyAgICB7CisgICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRlbHRh
ID0gZWRnZSAtIG1heFgoKTsKKyAgICAgICAgc2V0V2lkdGgoc3RkOjptYXg8RnJhY3Rpb25hbExh
eW91dFVuaXQ+KDAsIHdpZHRoKCkgKyBkZWx0YSkpOworICAgIH0KKyAgICB2b2lkIHNoaWZ0WUVk
Z2VUbyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBlZGdlKQorICAgIHsKKyAgICAgICAgRnJhY3Rpb25h
bExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0geSgpOworICAgICAgICBzZXRZKGVkZ2UpOworICAg
ICAgICBzZXRIZWlnaHQoc3RkOjptYXg8RnJhY3Rpb25hbExheW91dFVuaXQ+KDAsIGhlaWdodCgp
IC0gZGVsdGEpKTsKKyAgICB9CisgICAgdm9pZCBzaGlmdE1heFlFZGdlVG8oRnJhY3Rpb25hbExh
eW91dFVuaXQgZWRnZSkKKyAgICB7CisgICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRlbHRh
ID0gZWRnZSAtIG1heFkoKTsKKyAgICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4PEZyYWN0aW9uYWxM
YXlvdXRVbml0PigwLCBoZWlnaHQoKSArIGRlbHRhKSk7CisgICAgfQorCisgICAgRnJhY3Rpb25h
bExheW91dFBvaW50IG1pblhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsg
fSAvLyB0eXBpY2FsbHkgdG9wTGVmdAorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtYXhYTWlu
WUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX2xvY2F0aW9u
LngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSk7IH0gLy8gdHlwaWNhbGx5IHRv
cFJpZ2h0CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IG1pblhNYXhZQ29ybmVyKCkgY29uc3Qg
eyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1fbG9jYXRpb24ueCgpLCBtX2xvY2F0aW9u
LnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJvdHRvbUxlZnQKKyAgICBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQgbWF4WE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSwgbV9sb2Nh
dGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21SaWdodAor
ICAgIAorICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpIGNv
bnN0OworICAgIGJvb2wgY29udGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKSBjb25z
dDsKKworICAgIC8vIFRoaXMgY2hlY2tzIHRvIHNlZSBpZiB0aGUgcmVjdCBjb250YWlucyB4LHkg
aW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLgorICAgIC8vIEVxdWl2YWxlbnQgdG8gY2hlY2tpbmcg
aWYgdGhlIHJlY3QgY29udGFpbnMgYSAxeDEgcmVjdCBiZWxvdyBhbmQgdG8gdGhlIHJpZ2h0IG9m
IChweCxweSkuCisgICAgYm9vbCBjb250YWlucyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBweCwgRnJh
Y3Rpb25hbExheW91dFVuaXQgcHkpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIHB4ID49IHgoKSAm
JiBweCA8IG1heFgoKSAmJiBweSA+PSB5KCkgJiYgcHkgPCBtYXhZKCk7IH0KKyAgICBib29sIGNv
bnRhaW5zKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJu
IGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQorCisgICAgdm9pZCBpbnRlcnNlY3Qo
Y29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsKKyAgICB2b2lkIHVuaXRlKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRSZWN0Jik7CisgICAgdm9pZCB1bml0ZUlmTm9uWmVybyhjb25zdCBGcmFjdGlv
bmFsTGF5b3V0UmVjdCYpOworCisgICAgdm9pZCBpbmZsYXRlWChGcmFjdGlvbmFsTGF5b3V0VW5p
dCBkeCkKKyAgICB7CisgICAgICAgIG1fbG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4
KTsKKyAgICAgICAgbV9zaXplLnNldFdpZHRoKG1fc2l6ZS53aWR0aCgpICsgZHggKyBkeCk7Cisg
ICAgfQorICAgIHZvaWQgaW5mbGF0ZVkoRnJhY3Rpb25hbExheW91dFVuaXQgZHkpCisgICAgewor
ICAgICAgICBtX2xvY2F0aW9uLnNldFkobV9sb2NhdGlvbi55KCkgLSBkeSk7CisgICAgICAgIG1f
c2l6ZS5zZXRIZWlnaHQobV9zaXplLmhlaWdodCgpICsgZHkgKyBkeSk7CisgICAgfQorICAgIHZv
aWQgaW5mbGF0ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkKSB7IGluZmxhdGVYKGQpOyBpbmZsYXRl
WShkKTsgfQorICAgIHZvaWQgc2NhbGUoZmxvYXQgcyk7CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0
UmVjdCB0cmFuc3Bvc2VkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRSZWN0
KG1fbG9jYXRpb24udHJhbnNwb3NlZFBvaW50KCksIG1fc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpKTsg
fQorCisgICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGluZmluaXRlUmVjdCgpIHtyZXR1
cm4gRnJhY3Rpb25hbExheW91dFJlY3QoRnJhY3Rpb25hbExheW91dFVuaXQ6Om1pbigpIC8gMiwg
RnJhY3Rpb25hbExheW91dFVuaXQ6Om1pbigpIC8gMiwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om1h
eCgpLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCkpOyB9CisKK3ByaXZhdGU6CisgICAgRnJh
Y3Rpb25hbExheW91dFBvaW50IG1fbG9jYXRpb247CisgICAgRnJhY3Rpb25hbExheW91dFNpemUg
bV9zaXplOworfTsKKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGludGVyc2VjdGlvbihj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3Qm
IGIpCit7CisgICAgRnJhY3Rpb25hbExheW91dFJlY3QgYyA9IGE7CisgICAgYy5pbnRlcnNlY3Qo
Yik7CisgICAgcmV0dXJuIGM7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0UmVjdCB1bmlv
blJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRSZWN0JiBiKQoreworICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGMgPSBhOworICAgIGMudW5p
dGUoYik7CisgICAgcmV0dXJuIGM7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRSZWN0IHVuaW9uUmVj
dChjb25zdCBWZWN0b3I8RnJhY3Rpb25hbExheW91dFJlY3Q+Jik7CisKK2lubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEsIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRSZWN0JiBiKQoreworICAgIHJldHVybiBhLmxvY2F0aW9uKCkgPT0gYi5sb2NhdGlvbigp
ICYmIGEuc2l6ZSgpID09IGIuc2l6ZSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYg
YikKK3sKKyAgICByZXR1cm4gYS5sb2NhdGlvbigpICE9IGIubG9jYXRpb24oKSB8fCBhLnNpemUo
KSAhPSBiLnNpemUoKTsKK30KKworSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRSZWN0Jik7CitGcmFjdGlvbmFsTGF5b3V0UmVjdCBlbmNsb3NpbmdGcmFjdGlv
bmFsTGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKK0ludFJlY3QgcGl4ZWxTbmFwcGVkSW50
UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5b3V0UmVjdF9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0U2l6ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFNp
emUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RnJhY3Rpb25hbExheW91dFNpemUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACisv
KgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0U2l6ZS5oIgorCisj
aW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFBvaW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworSW50U2l6ZSBwaXhlbFNuYXBwZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXpl
JiBzLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHApCit7CisgICAgcmV0dXJuIEludFNp
emUoc25hcFNpemVUb1BpeGVsKHMud2lkdGgoKSwgcC54KCkpLCBzbmFwU2l6ZVRvUGl4ZWwocy5o
ZWlnaHQoKSwgcC55KCkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5
b3V0U2l6ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRnJhY3Rpb25hbExheW91dFNpemUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBGcmFjdGlvbmFsTGF5b3V0U2l6ZV9oCisjZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRT
aXplX2gKKworI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlv
dXRVbml0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZyYWN0aW9uYWxMYXlvdXRQb2ludDsKKworY2xhc3MgRnJhY3Rpb25hbExheW91dFNp
emUgeworcHVibGljOgorICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplKCkgOiBtX3dpZHRoKDApLCBt
X2hlaWdodCgwKSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBJbnRTaXplJiBz
aXplKSA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKSwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkgeyB9
CisgICAgRnJhY3Rpb25hbExheW91dFNpemUoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgsIEZy
YWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkgOiBtX3dpZHRoKHdpZHRoKSwgbV9oZWlnaHQoaGVp
Z2h0KSB7IH0KKworICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkgOiBtX3dpZHRoKHNpemUud2lkdGgoKSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0
KCkpIHsgfQorICAgIAorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gbV93aWR0aDsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIG1faGVpZ2h0OyB9CisKKyAgICB2b2lkIHNldFdpZHRoKEZyYWN0aW9uYWxMYXlv
dXRVbml0IHdpZHRoKSB7IG1fd2lkdGggPSB3aWR0aDsgfQorICAgIHZvaWQgc2V0SGVpZ2h0KEZy
YWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkgeyBtX2hlaWdodCA9IGhlaWdodDsgfQorCisgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV93aWR0aCA8PSAwIHx8IG1faGVpZ2h0IDw9
IDA7IH0KKyAgICBib29sIGlzWmVybygpIGNvbnN0IHsgcmV0dXJuICFtX3dpZHRoICYmICFtX2hl
aWdodDsgfQorCisgICAgZmxvYXQgYXNwZWN0UmF0aW8oKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4obV93aWR0aCkgLyBzdGF0aWNfY2FzdDxmbG9hdD4obV9oZWlnaHQpOyB9Cisg
ICAgCisgICAgdm9pZCBleHBhbmQoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgsIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGhlaWdodCkKKyAgICB7CisgICAgICAgIG1fd2lkdGggKz0gd2lkdGg7Cisg
ICAgICAgIG1faGVpZ2h0ICs9IGhlaWdodDsKKyAgICB9CisgICAgCisgICAgdm9pZCBzY2FsZShm
bG9hdCBzY2FsZSkKKyAgICB7CisgICAgICAgIG1fd2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KHN0
YXRpY19jYXN0PGZsb2F0PihtX3dpZHRoKSAqIHNjYWxlKTsKKyAgICAgICAgbV9oZWlnaHQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHN0YXRpY19jYXN0PGZsb2F0PihtX2hlaWdodCkgKiBzY2FsZSk7Cisg
ICAgfQorICAgIAorICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplIGV4cGFuZGVkVG8oY29uc3QgRnJh
Y3Rpb25hbExheW91dFNpemUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEZy
YWN0aW9uYWxMYXlvdXRTaXplKG1fd2lkdGggPiBvdGhlci5tX3dpZHRoID8gbV93aWR0aCA6IG90
aGVyLm1fd2lkdGgsCisgICAgICAgICAgICBtX2hlaWdodCA+IG90aGVyLm1faGVpZ2h0ID8gbV9o
ZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7CisgICAgfQorCisgICAgRnJhY3Rpb25hbExheW91dFNp
emUgc2hydW5rVG8oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKG1fd2lkdGggPCBvdGhlci5t
X3dpZHRoID8gbV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCisgICAgICAgICAgICBtX2hlaWdodCA8
IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7CisgICAgfQorCisg
ICAgdm9pZCBjbGFtcE5lZ2F0aXZlVG9aZXJvKCkKKyAgICB7CisgICAgICAgICp0aGlzID0gZXhw
YW5kZWRUbyhGcmFjdGlvbmFsTGF5b3V0U2l6ZSgpKTsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFNpemUobV9oZWlnaHQsIG1fd2lkdGgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX3dpZHRoLCBtX2hlaWdodDsKK307CisKK2lu
bGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgb3BlcmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0U2l6
ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAgYS5zZXRXaWR0aChh
LndpZHRoKCkgKyBiLndpZHRoKCkpOworICAgIGEuc2V0SGVpZ2h0KGEuaGVpZ2h0KCkgKyBiLmhl
aWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXpl
JiBvcGVyYXRvci09KEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0U2l6ZSYgYikKK3sKKyAgICBhLnNldFdpZHRoKGEud2lkdGgoKSAtIGIud2lkdGgoKSk7Cisg
ICAgYS5zZXRIZWlnaHQoYS5oZWlnaHQoKSAtIGIuaGVpZ2h0KCkpOworICAgIHJldHVybiBhOwor
fQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAgICBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoYS53aWR0aCgpICsgYi53aWR0aCgpLCBhLmhlaWdo
dCgpICsgYi5oZWlnaHQoKSk7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBvcGVy
YXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRTaXplJiBiKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShhLndpZHRoKCkg
LSBiLndpZHRoKCksIGEuaGVpZ2h0KCkgLSBiLmhlaWdodCgpKTsKK30KKworaW5saW5lIEZyYWN0
aW9uYWxMYXlvdXRTaXplIG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6
ZSkKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoLXNpemUud2lkdGgoKSwgLXNp
emUuaGVpZ2h0KCkpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAgICBy
ZXR1cm4gYS53aWR0aCgpID09IGIud2lkdGgoKSAmJiBhLmhlaWdodCgpID09IGIuaGVpZ2h0KCk7
Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUm
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoreworICAgIHJldHVybiBhLndpZHRo
KCkgIT0gYi53aWR0aCgpIHx8IGEuaGVpZ2h0KCkgIT0gYi5oZWlnaHQoKTsKK30KKworaW5saW5l
IEludFNpemUgZmxvb3JlZEludFNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHMpCit7
CisgICAgcmV0dXJuIEludFNpemUocy53aWR0aCgpLnRvSW50KCksIHMuaGVpZ2h0KCkudG9JbnQo
KSk7Cit9CisKK2lubGluZSBJbnRTaXplIHJvdW5kZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRTaXplJiBzKQoreworICAgIHJldHVybiBJbnRTaXplKHMud2lkdGgoKS5yb3VuZCgpLCBz
LmhlaWdodCgpLnJvdW5kKCkpOworfQorCitJbnRTaXplIHBpeGVsU25hcHBlZEludFNpemUoY29u
c3QgRnJhY3Rpb25hbExheW91dFNpemUmLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmKTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRnJhY3Rpb25hbExheW91dFNp
emVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5j
cHAJKHJldmlzaW9uIDEwNzQ1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogCisjaW5jbHVkZSAiRnJhY3Rpb25hbExh
eW91dFJlY3QuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+
CiAKQEAgLTQwLDYgKzQxLDEyIEBAIEludFJlY3Q6OkludFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
KQogewogfQogCitJbnRSZWN0OjpJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBy
KQorICAgIDogbV9sb2NhdGlvbihmbG9vcmVkSW50UG9pbnQoci5sb2NhdGlvbigpKSkKKyAgICAs
IG1fc2l6ZShmbG9vcmVkSW50U2l6ZShyLnNpemUoKSkpCit7Cit9CisKIGJvb2wgSW50UmVjdDo6
aW50ZXJzZWN0cyhjb25zdCBJbnRSZWN0JiBvdGhlcikgY29uc3QKIHsKICAgICAvLyBDaGVja2lu
ZyBlbXB0aW5lc3MgaGFuZGxlcyBuZWdhdGl2ZSB3aWR0aHMgYXMgd2VsbCBhcyB6ZXJvLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkocmV2aXNpb24g
MTA3NDU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBAIHN0cnVjdCBTa0lSZWN0OwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0UmVj
dDsKIAogY2xhc3MgSW50UmVjdCB7CiBwdWJsaWM6CkBAIC04MCw3ICs4MSw4IEBAIHB1YmxpYzoK
ICAgICBJbnRSZWN0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgICAg
ICA6IG1fbG9jYXRpb24oSW50UG9pbnQoeCwgeSkpLCBtX3NpemUoSW50U2l6ZSh3aWR0aCwgaGVp
Z2h0KSkgeyB9CiAKLSAgICBleHBsaWNpdCBJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCk7
IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgZXhwbGlj
aXQgSW50UmVjdChjb25zdCBGbG9hdFJlY3QmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5
IHNpbmNlIGl0J3MgbG9zc3kKKyAgICBleHBsaWNpdCBJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRSZWN0Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5
CiAgICAgICAgIAogICAgIEludFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2Nh
dGlvbjsgfQogICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126789</attachid>
            <date>2012-02-13 10:15:57 -0800</date>
            <delta_ts>2012-02-14 15:41:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76571-20120213101556.patch</filename>
            <type>text/plain</type>
            <size>49957</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzU4MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDEyLTAyLTEzICBFbWlsIEEg
RWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4gYW5kIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIEFkZCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQvU2l6ZS9SZWN0
IGZvciBzdWItcGl4ZWwgbGF5b3V0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NjU3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBmaXhlZCBwb2ludCB2ZXJzaW9ucyBvZiB0aGUgUG9pbnQsIFNpemUg
YW5kIFJlY3QgY2xhc3NlcyB1c2luZworICAgICAgICB0aGUgbmV3IEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCB0eXBlIGFuZC4KKworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQsIEZyYWN0aW9u
YWxMYXlvdXRTaXplIGFuZCBGcmFjdGlvbmFsTGF5b3V0UmVjdCBhcmUKKyAgICAgICAgUG9pbnQs
IFNpemUgYW5kIFJlY3QgaW1wbGVtZW50YXRpb25zIHJlc3BlY3RpdmVseSB1c2luZyB0aGlzIG5l
dyB0eXBlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIFdlYkNvcmUub3JkZXI6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHBsYXRmb3JtL0ZyYWN0aW9uYWxMYXlvdXRVbml0Lmg6CisgICAgICAg
IEZpeGVkIGEgY291cGxlIG9mIHR5cG9zIGFuZCBzaWduZWQvdW5zaWduZWQgYnVncy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RmxvYXRQb2ludDo6RmxvYXRQb2ludCk6CisgICAgICAgIEFkZCBleHBsaWNpdCBGbG9hdFBv
aW50KEZyYWN0aW9uYWxMYXlvdXRQb2ludCkgY29uc3RydWN0b3IuCisgICAgICAgIAorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRQb2ludDo6bW92ZSk6CisgICAgICAgIEFkZCBtb3ZlKEZyYWN0aW9u
YWxMYXlvdXRTaXplKSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3Jl
OjpGbG9hdFBvaW50Ojptb3ZlQnkpOgorICAgICAgICBBZGQgbW92ZUJ5KEZyYWN0aW9uYWxMYXlv
dXRQb2ludCkgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6RmxvYXRSZWN0KToKKyAgICAgICAgQWRkIGV4
cGxpY2l0IEZsb2F0UmVjdEZyYWN0aW9uYWxMYXlvdXRSZWN0KSBjb25zdHJ1Y3Rvci4KKyAgICAg
ICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0Lmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKEZsb2F0UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRTaXplLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0U2l6ZTo6RmxvYXRTaXpl
KToKKyAgICAgICAgQWRkIGV4cGxpY2l0IEZsb2F0U2l6ZShGcmFjdGlvbmFsTGF5b3V0U2l6ZSkg
Y29uc3RydWN0b3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UG9pbnQuaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVj
dC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0
U2l6ZS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxM
YXlvdXRTaXplLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6SW50UmVjdCk6CisgICAgICAgIEFkZCBl
eHBsaWNpdCBJbnRSZWN0KEZyYWN0aW9uYWxMYXlvdXRSZWN0KSBjb25zdHJ1Y3Rvci4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaDoKKwogMjAxMi0wMi0xMCAgVnNldm9s
b2QgVmxhc292ICA8dnNldmlrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9y
OiBNYWtlIFNjcmlwdHNOYXZpZ2F0b3IgZGVmYXVsdCBmaWxlIHNlbGVjdG9yLgpJbmRleDogU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEwNzU4MykKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDk3LDYgKzEwOTcsOCBAQCBTRVQoV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRl
R2VuZXJhdGVkSW1hZ2UuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91
dFJlY3QuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50M0QuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNw
cApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMDc1ODMpCisr
KyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0y
OTUxLDYgKzI5NTEsMTEgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUdhdXNzaWFuQmx1ck5FT04uaCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0vRkVMaWdodGluZ05FT04u
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUxp
Z2h0aW5nTkVPTi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlv
bmFsTGF5b3V0UG9pbnQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJh
Y3Rpb25hbExheW91dFJlY3QuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GcmFjdGlvbmFsTGF5b3V0U2l6ZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRTaXplLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMDc1
ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTMw
MDksNiArMzAwOSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRl
R2VuZXJhdGVkSW1hZ2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Dcm9z
c2ZhZGVHZW5lcmF0ZWRJbWFnZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9F
eHRlbnNpb25zM0QuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25h
bExheW91dFJlY3QuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlv
bmFsTGF5b3V0U2l6ZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UG9pbnQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0Qu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwJywKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5vcmRlcgkocmV2aXNpb24gMTA3NTgzKQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5vcmRlcgkod29ya2luZyBjb3B5KQpAQCAtMTAzMjAsNyArMTAzMjAsNyBAQCBfX1pO
N1dlYkNvcmU5Q1NTUGFyc2VyMTFwYXJzZUNhbnZhc0VSTjNXCiBfX1pOSzdXZWJDb3JlOENTU1Zh
bHVlMTJpc0ltYWdlVmFsdWVFdgogX19aTks3V2ViQ29yZTIyQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZTIxaXNJbWFnZUdlbmVyYXRvclZhbHVlRXYKIF9fWk43V2ViQ29yZTIyQ1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZTE0Z2VuZXJhdGVkSW1hZ2VFdgotX19aTks3V2ViQ29yZTE0Q1NTQ2FudmFzVmFsdWUx
MWlzRml4ZWRTaXplRXYKK19fWk5LN1dlYkNvcmUxNENTU0NhbnZhc1ZhbHVlMTFpc0ZyYWN0aW9u
YWxMYXlvdXRTaXplRXYKIF9fWk43V2ViQ29yZTE5U3R5bGVHZW5lcmF0ZWRJbWFnZTlhZGRDbGll
bnRFUE5TXzEyUmVuZGVyT2JqZWN0RQogX19aTjdXZWJDb3JlMjJDU1NJbWFnZUdlbmVyYXRvclZh
bHVlOWFkZENsaWVudEVQTlNfMTJSZW5kZXJPYmplY3RFUktOU183SW50U2l6ZUUKIF9fWk43V2Vi
Q29yZTQ2anNEb2N1bWVudFByb3RvdHlwZUZ1bmN0aW9uR2V0Q1NTQ2FudmFzQ29udGV4dEVQTjNK
U0M5RXhlY1N0YXRlRQpAQCAtMTA0NTQsNyArMTA0NTQsNyBAQCBfX1pON1dlYkNvcmUxNUNTU1Jl
ZmxlY3RWYWx1ZUQwRXYKIF9fWk43V2ViQ29yZTlDU1NQYXJzZXIxNnBhcnNlQm9yZGVySW1hZ2VF
aWJSTjNXVEY2UmVmUHRySU5TXzhDU1NWYWx1ZUVFRQogX19aTjdXZWJDb3JlMjNCb3JkZXJJbWFn
ZVBhcnNlQ29udGV4dDE3Y29tbWl0Qm9yZGVySW1hZ2VFUE5TXzlDU1NQYXJzZXJFYgogX19aTjdX
ZWJDb3JlMjNCb3JkZXJJbWFnZVBhcnNlQ29udGV4dEQxRXYKLV9fWk5LN1dlYkNvcmUyMkNTU0lt
YWdlR2VuZXJhdG9yVmFsdWUxMWlzRml4ZWRTaXplRXYKK19fWk5LN1dlYkNvcmUyMkNTU0ltYWdl
R2VuZXJhdG9yVmFsdWUxMWlzRnJhY3Rpb25hbExheW91dFNpemVFdgogX19aTjdXZWJDb3JlMTZD
U1NHcmFkaWVudFZhbHVlNWltYWdlRVBOU18xMlJlbmRlck9iamVjdEVSS05TXzdJbnRTaXplRQog
X19aTkszV1RGOUhhc2hUYWJsZUlQTjdXZWJDb3JlMTJSZW5kZXJPYmplY3RFU3Q0cGFpcklTM19T
NF9JTlMxXzdJbnRTaXplRWlFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM3X0VFTlNfN1B0ckhh
c2hJUzNfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TRF9JUzZf
RUVFRVNFX0U4Y29udGFpbnNJUzNfTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySVMzX1M3X1NC
X0VFRUViUktUXwogX19aTjdXZWJDb3JlMjJDU1NJbWFnZUdlbmVyYXRvclZhbHVlOGdldEltYWdl
RVBOU18xMlJlbmRlck9iamVjdEVSS05TXzdJbnRTaXplRQpJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDEwNzU4MykKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0yNzUyNSw2ICsyNzUyNSwyNiBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRnJhY3Rpb25hbExheW91
dFBvaW50LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAiCisJCQkJ
CT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgor
CQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRnJhY3Rp
b25hbExheW91dFNpemUuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRnJhY3Rpb25hbExheW91dFNpemUu
aCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXEZsb2F0UG9pbnQuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTA3NTgzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQsNiArMzE0LDExIEBACiAJ
CTE0OTQ3RkZFMTJGODBDRDIwMEEwRjYzMSAvKiBEb2N1bWVudE9yZGVyZWRNYXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OTQ3RkZDMTJGODBDRDIw
MEEwRjYzMSAvKiBEb2N1bWVudE9yZGVyZWRNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDk5M0JFNTBCMkYyQjFDMDA1MDQ5N0YgLyogRm9j
dXNDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0OTkzQkUzMEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuY3BwICov
OyB9OwogCQkxNDk5M0JFNjBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDk5M0JFNDBCMkYy
QjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTRDMEEyQjIxNDQ2MzIxRTAwNTIwNzk4IC8qIEZy
YWN0aW9uYWxMYXlvdXRQb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkFCNzcxNTgxNDQ0Q0JENDAwRUM0QzRDIC8qIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTE0QzBBMkI2MTQ0NjMyMUUwMDUyMDc5OCAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQUI3NzE1NjE0NDRD
QkQ0MDBFQzRDNEMgLyogRnJhY3Rpb25hbExheW91dFJlY3QuY3BwICovOyB9OworCQkxNEMwQTJC
NzE0NDYzMjFFMDA1MjA3OTggLyogRnJhY3Rpb25hbExheW91dFJlY3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQjc3MTU1MTQ0NENCRDQwMEVDNEM0
QyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTE0QzBBMkJCMTQ0NjMyMUUwMDUyMDc5OCAvKiBGcmFjdGlv
bmFsTGF5b3V0U2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQUI3NzE1MzE0NDRDQkQ0MDBFQzRDNEMgLyogRnJhY3Rpb25hbExheW91dFNpemUu
Y3BwICovOyB9OworCQkxNEMwQTJCQzE0NDYzMjFFMDA1MjA3OTggLyogRnJhY3Rpb25hbExheW91
dFNpemUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJB
Qjc3MTUyMTQ0NENCRDQwMEVDNEM0QyAvKiBGcmFjdGlvbmFsTGF5b3V0U2l6ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0QzlBNUVBMEIzRDEw
NUYwMDVBMDIzMiAvKiBTZXR0aW5ncy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNEM5QTVFOTBCM0QxMDVGMDA1QTAyMzIgLyogU2V0dGluZ3MuY3Bw
ICovOyB9OwogCQkxNENEOEQ4MjEwNkI1MjkwMDBBNDZEMjMgLyogSlNTaGFyZWRXb3JrZXJDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRD
RDhEODExMDZCNTI5MDAwQTQ2RDIzIC8qIEpTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcCAqLzsgfTsK
IAkJMTRDRjc4QTQwOUY1OENCRjAwRUIzNjY1IC8qIEpTQ1NTVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDRjc4QTMwOUY1OENCRjAwRUIz
NjY1IC8qIEpTQ1NTVmFsdWUuY3BwICovOyB9OwpAQCAtMTg4MTMsNiArMTg4MTgsMTEgQEAKIAkJ
CQk0OUZDN0E0RjE0NDRBRjVGMDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCAq
LywKIAkJCQk0OUFGMkQ2ODE0NDM1RDA1MDAxNkE3ODQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9y
LmggKi8sCiAJCQkJNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oICov
LAorCQkJCUJBQjc3MTUyMTQ0NENCRDQwMEVDNEM0QyAvKiBGcmFjdGlvbmFsTGF5b3V0U2l6ZS5o
ICovLAorCQkJCUJBQjc3MTUzMTQ0NENCRDQwMEVDNEM0QyAvKiBGcmFjdGlvbmFsTGF5b3V0U2l6
ZS5jcHAgKi8sCisJCQkJQkFCNzcxNTUxNDQ0Q0JENDAwRUM0QzRDIC8qIEZyYWN0aW9uYWxMYXlv
dXRSZWN0LmggKi8sCisJCQkJQkFCNzcxNTYxNDQ0Q0JENDAwRUM0QzRDIC8qIEZyYWN0aW9uYWxM
YXlvdXRSZWN0LmNwcCAqLywKKwkJCQlCQUI3NzE1ODE0NDRDQkQ0MDBFQzRDNEMgLyogRnJhY3Rp
b25hbExheW91dFBvaW50LmggKi8sCiAJCQkJQjI3NTM1M0EwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0UG9pbnQuY3BwICovLAogCQkJCUIyNzUzNTNCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBv
aW50LmggKi8sCiAJCQkJQjJFMjdDOUQwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5j
cHAgKi8sCkBAIC0yMjE5NCw2ICsyMjIwNCw5IEBACiAJCQkJNDlFQ0VCNkUxNDk5NzkwRDAwQ0RE
M0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFQ0VCNzAxNDk5
NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3
MkMwMEQ5MTI5NjE5RjgwMDVDOTU3NSAvKiBGaW5kT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMTRDMEEyQjIxNDQ2MzIxRTAwNTIwNzk4IC8qIEZyYWN0aW9uYWxMYXlvdXRQb2ludC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMTRDMEEyQjcxNDQ2MzIxRTAwNTIwNzk4IC8qIEZyYWN0aW9uYWxM
YXlvdXRSZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEMwQTJCQzE0NDYzMjFFMDA1MjA3OTgg
LyogRnJhY3Rpb25hbExheW91dFNpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0ZGMDRGMEEx
NTRGMDkwMDBBNDIzNCAvKiBGaXhlZFRhYmxlTGF5b3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzA3M0JBQTBDMzk5QjFGMDAwRjU5NzkgLyogRmxvYXRDb252ZXJzaW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCMjc1MzU2OTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yNTI2Niw2ICsyNTI3OSw4IEBACiAJCQkJMzEzMTNGNjUxNDQzQjM1RjAwNkUy
QTkwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RUNF
QjZEMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNDlFQ0VCNkYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMTRDMEEyQjYxNDQ2MzIxRTAwNTIwNzk4IC8qIEZyYWN0aW9uYWxM
YXlvdXRSZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0QzBBMkJCMTQ0NjMyMUUwMDUyMDc5
OCAvKiBGcmFjdGlvbmFsTGF5b3V0U2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOENGRjA0
RDBBMTU0RjA5MDAwQTQyMzQgLyogRml4ZWRUYWJsZUxheW91dC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCMjc1MzU2ODBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCMkUyN0M5RjBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmNwcCBp
biBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25hbExh
eW91dFVuaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GcmFjdGlv
bmFsTGF5b3V0VW5pdC5oCShyZXZpc2lvbiAxMDc1ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9GcmFjdGlvbmFsTGF5b3V0VW5pdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1
LDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgaW5saW5lIGJvb2wgaXNJbkJvdW5kcyh1bnNpZ25l
ZCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZSA8IHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWF4KCkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworICAgICAgICByZXR1cm4g
dmFsdWUgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwogICAgIH0KICAgICBpbmxpbmUgYm9vbCBp
c0luQm91bmRzKGRvdWJsZSB2YWx1ZSkKICAgICB7CkBAIC0yNjIsMTIgKzI2MiwxMiBAQCBpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMCiAKIGlubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQogewotICAgIHJldHVy
biBhID09IEZyYWN0aW9uTGF5b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSA9PSBGcmFjdGlvbmFs
TGF5b3V0VW5pdChiKTsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpbnQgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uTGF5
b3V0VW5pdChhKSA9PSBiOworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSA9PSBi
OwogfQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBmbG9hdCBiKQpAQCAtMjk3LDcgKzI5Nyw3IEBAIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBvcGVyYXRvciooY28KIHsKICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7
CiAgICAgbG9uZyBsb25nIHJhd1ZhbCA9IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oYS5yYXdWYWx1
ZSgpKSAqIGIucmF3VmFsdWUoKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0gICAgcmV0dXJu
VmFsLnNldFJhd1ZhbHVlKChhLnJhd1ZhbHVlKCkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yKSAq
IGIucmF3VmFsdWUoKSk7CisgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHJhd1ZhbCk7CiAgICAg
cmV0dXJuIHJldHVyblZhbDsKIH0gICAgCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCShyZXZpc2lvbiAxMDc1ODMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsOSArMjgsMTAgQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAKICNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgor
I2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRQb2ludC5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVy
c2lvbi5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8bWF0aC5oPgogCkBAIC00MCw2
ICs0MSwxMCBAQCBGbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IEludFBvaW50JiBwCiB7CiB9
CiAKK0Zsb2F0UG9pbnQ6OkZsb2F0UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBw
KSA6IG1feChwLngoKSksIG1feShwLnkoKSkKK3sKK30KKwogdm9pZCBGbG9hdFBvaW50Ojpub3Jt
YWxpemUoKQogewogICAgIGZsb2F0IHRlbXBMZW5ndGggPSBsZW5ndGgoKTsKQEAgLTU1LDYgKzYw
LDE4IEBAIGZsb2F0IEZsb2F0UG9pbnQ6Omxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuIHNxcnRm
KGxlbmd0aFNxdWFyZWQoKSk7CiB9CiAKK3ZvaWQgRmxvYXRQb2ludDo6bW92ZShjb25zdCBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX3ggKz0gc2l6ZS53aWR0aCgpOworICAg
IG1feSArPSBzaXplLmhlaWdodCgpOworfQorCit2b2lkIEZsb2F0UG9pbnQ6Om1vdmVCeShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQoreworICAgIG1feCArPSBwb2ludC54KCk7
CisgICAgbV95ICs9IHBvaW50LnkoKTsKK30KKwogRmxvYXRQb2ludCBGbG9hdFBvaW50OjptYXRy
aXhUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pIGNvbnN0CiB7CiAg
ICAgZG91YmxlIG5ld1gsIG5ld1k7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2ludC5oCShyZXZpc2lvbiAxMDc1ODMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEz
ICs2MCwxNSBAQCBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDsKIGNsYXNzIEludFBvaW50OwogY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEZyYWN0aW9uYWxM
YXlvdXRQb2ludDsKK2NsYXNzIEZyYWN0aW9uYWxMYXlvdXRTaXplOwogCiBjbGFzcyBGbG9hdFBv
aW50IHsKIHB1YmxpYzoKICAgICBGbG9hdFBvaW50KCkgOiBtX3goMCksIG1feSgwKSB7IH0KICAg
ICBGbG9hdFBvaW50KGZsb2F0IHgsIGZsb2F0IHkpIDogbV94KHgpLCBtX3koeSkgeyB9CiAgICAg
RmxvYXRQb2ludChjb25zdCBJbnRQb2ludCYpOwotCisgICAgRmxvYXRQb2ludChjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmKTsKIAogICAgIHN0YXRpYyBGbG9hdFBvaW50IHplcm8oKSB7IHJl
dHVybiBGbG9hdFBvaW50KCk7IH0KIApAQCAtOTIsNiArOTQsNyBAQCBwdWJsaWM6CiAgICAgICAg
IG1feCArPSBhLndpZHRoKCk7CiAgICAgICAgIG1feSArPSBhLmhlaWdodCgpOwogICAgIH0KKyAg
ICB2b2lkIG1vdmUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmKTsKICAgICB2b2lkIG1vdmUo
Y29uc3QgRmxvYXRTaXplJiBhKQogICAgIHsKICAgICAgICAgbV94ICs9IGEud2lkdGgoKTsKQEAg
LTEwMiw2ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1feCArPSBhLngoKTsKICAgICAgICAg
bV95ICs9IGEueSgpOwogICAgIH0KKyAgICB2b2lkIG1vdmVCeShjb25zdCBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQmKTsKICAgICB2b2lkIG1vdmVCeShjb25zdCBGbG9hdFBvaW50JiBhKQogICAgIHsK
ICAgICAgICAgbV94ICs9IGEueCgpOwpAQCAtMTMxLDYgKzEzNSwxNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBGbG9hdFBvaW50KHN0ZDo6bWF4KG1feCwgb3RoZXIubV94KSwgc3RkOjptYXgo
bV95LCBvdGhlci5tX3kpKTsKICAgICB9CiAKKyAgICBGbG9hdFBvaW50IHNocnVua1RvKGNvbnN0
IEZsb2F0UG9pbnQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEZsb2F0UG9p
bnQobV94IDwgb3RoZXIubV94ID8gbV94IDogb3RoZXIubV94LAorICAgICAgICAgICAgbV95IDwg
b3RoZXIubV95ID8gbV95IDogb3RoZXIubV95KTsKKyAgICB9CisKKyAgICB2b2lkIGNsYW1wTmVn
YXRpdmVUb1plcm8oKQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKHplcm8oKSk7
CisgICAgfQorCiAgICAgRmxvYXRQb2ludCB0cmFuc3Bvc2VkUG9pbnQoKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQobV95LCBtX3gpOwpAQCAtMjM5LDYgKzI1NCwxMSBA
QCBpbmxpbmUgSW50U2l6ZSBmbG9vcmVkSW50U2l6ZShjb25zdCBGbG9hCiAgICAgcmV0dXJuIElu
dFNpemUoc3RhdGljX2Nhc3Q8aW50PihwLngoKSksIHN0YXRpY19jYXN0PGludD4ocC55KCkpKTsK
IH0KIAoraW5saW5lIEZsb2F0UG9pbnQgdG9Qb2ludChjb25zdCBGbG9hdFNpemUmIHNpemUpCit7
CisgICAgcmV0dXJuIEZsb2F0UG9pbnQoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKK30K
KwogZmxvYXQgZmluZFNsb3BlKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50
JiBwMiwgZmxvYXQmIGMpOwogCiAvLyBGaW5kIHBvaW50IHdoZXJlIGxpbmVzIHRocm91Z2ggdGhl
IHR3byBwYWlycyBvZiBwb2ludHMgaW50ZXJzZWN0LiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBsaW5l
cyBkb24ndCBpbnRlcnNlY3QuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UmVjdC5jcHAJKHJldmlzaW9uIDEwNzU4MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKIAogI2luY2x1ZGUgIkZsb2F0Q29udmVy
c2lvbi5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxtYXRoLmg+CkBAIC00Miw2
ICs0MywxMCBAQCBGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBJbnRSZWN0JiByKSA6CiB7CiB9
CiAKK0Zsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiByKSA6
IG1fbG9jYXRpb24oci5sb2NhdGlvbigpKSwgbV9zaXplKHIuc2l6ZSgpKQoreworfQorCiBGbG9h
dFJlY3QgRmxvYXRSZWN0OjpuYXJyb3dQcmVjaXNpb24oZG91YmxlIHgsIGRvdWJsZSB5LCBkb3Vi
bGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpCiB7CiAgICAgcmV0dXJuIEZsb2F0UmVjdChuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KHgpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHkpLCBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KHdpZHRoKSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChoZWlnaHQpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCShyZXZp
c2lvbiAxMDc1ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBWR1JlY3Q7CiAjZW5kaWYKIAorY2xhc3MgRnJhY3Rpb25hbExheW91dFJlY3Q7CiBj
bGFzcyBJbnRSZWN0OwogY2xhc3MgSW50UG9pbnQ7CiAKQEAgLTgyLDYgKzgzLDcgQEAgcHVibGlj
OgogICAgIEZsb2F0UmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVp
Z2h0KQogICAgICAgICA6IG1fbG9jYXRpb24oRmxvYXRQb2ludCh4LCB5KSksIG1fc2l6ZShGbG9h
dFNpemUod2lkdGgsIGhlaWdodCkpIHsgfQogICAgIEZsb2F0UmVjdChjb25zdCBJbnRSZWN0Jik7
CisgICAgRmxvYXRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7CiAKICAgICBzdGF0
aWMgRmxvYXRSZWN0IG5hcnJvd1ByZWNpc2lvbihkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB3
aWR0aCwgZG91YmxlIGhlaWdodCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0U2l6ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcAkocmV2aXNpb24gMTA3NTgzKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5o
IgogCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFNpemUuaCIKICNpbmNsdWRlICJGbG9hdENv
bnZlcnNpb24uaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSA8bGltaXRzPgpAQCAt
NDAsNiArNDEsMTAgQEAgRmxvYXRTaXplOjpGbG9hdFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZQog
ewogfQogCitGbG9hdFNpemU6OkZsb2F0U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYg
c2l6ZSkgOiBtX3dpZHRoKHNpemUud2lkdGgoKSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpCit7
Cit9CisKIGZsb2F0IEZsb2F0U2l6ZTo6ZGlhZ29uYWxMZW5ndGgoKSBjb25zdAogewogICAgIHJl
dHVybiBzcXJ0ZihkaWFnb25hbExlbmd0aFNxdWFyZWQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAkocmV2aXNpb24gMTA3NTgzKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDEyICs0NiwxNCBAQCB0eXBlZGVmIHN0cnVjdCBfTlNTaXplIE5TU2l6ZTsKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEZyYWN0aW9uYWxMYXlv
dXRTaXplOwogCiBjbGFzcyBGbG9hdFNpemUgewogcHVibGljOgogICAgIEZsb2F0U2l6ZSgpIDog
bV93aWR0aCgwKSwgbV9oZWlnaHQoMCkgeyB9CiAgICAgRmxvYXRTaXplKGZsb2F0IHdpZHRoLCBm
bG9hdCBoZWlnaHQpIDogbV93aWR0aCh3aWR0aCksIG1faGVpZ2h0KGhlaWdodCkgeyB9CiAgICAg
RmxvYXRTaXplKGNvbnN0IEludFNpemUmKTsKKyAgICBGbG9hdFNpemUoY29uc3QgRnJhY3Rpb25h
bExheW91dFNpemUmKTsKIAogICAgIHN0YXRpYyBGbG9hdFNpemUgbmFycm93UHJlY2lzaW9uKGRv
dWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCk7CiAKQEAgLTY1LDYgKzY3LDExIEBAIHB1YmxpYzoK
ICAgICBib29sIGlzWmVybygpIGNvbnN0OwogICAgIGJvb2wgaXNFeHByZXNzaWJsZUFzSW50U2l6
ZSgpIGNvbnN0OwogCisgICAgYm9vbCBpc1JvdWdobHlFcXVhbFRvKGNvbnN0IEZsb2F0U2l6ZSYg
cykKKyAgICB7CisgICAgICAgIHJldHVybiBhYnMod2lkdGgoKSAtIHMud2lkdGgoKSkgPCAwLjEg
JiYgYWJzKGhlaWdodCgpIC0gcy5oZWlnaHQoKSkgPCAwLjE7CisgICAgfQorCiAgICAgZmxvYXQg
YXNwZWN0UmF0aW8oKSBjb25zdCB7IHJldHVybiBtX3dpZHRoIC8gbV9oZWlnaHQ7IH0KIAogICAg
IHZvaWQgZXhwYW5kKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UG9pbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UG9p
bnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zy
YWN0aW9uYWxMYXlvdXRQb2ludC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEZyYWN0aW9uYWxMYXlvdXRQb2ludF9oCisjZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRQb2lu
dF9oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91
dFNpemUuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB7CitwdWJsaWM6CisgICAgRnJhY3Rp
b25hbExheW91dFBvaW50KCkgOiBtX3goMCksIG1feSgwKSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQoRnJhY3Rpb25hbExheW91dFVuaXQgeCwgRnJhY3Rpb25hbExheW91dFVuaXQgeSkg
OiBtX3goeCksIG1feSh5KSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgSW50
UG9pbnQmIHBvaW50KSA6IG1feChwb2ludC54KCkpLCBtX3kocG9pbnQueSgpKSB7IH0KKyAgICBl
eHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgc2l6ZSkgOiBt
X3goc2l6ZS54KCkpLCBtX3koc2l6ZS55KCkpIHsgfQorCisgICAgc3RhdGljIEZyYWN0aW9uYWxM
YXlvdXRQb2ludCB6ZXJvKCkgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KCk7IH0KKwor
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KKyAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9CisKKyAgICB2b2lk
IHNldFgoRnJhY3Rpb25hbExheW91dFVuaXQgeCkgeyBtX3ggPSB4OyB9CisgICAgdm9pZCBzZXRZ
KEZyYWN0aW9uYWxMYXlvdXRVbml0IHkpIHsgbV95ID0geTsgfQorCisgICAgdm9pZCBtb3ZlKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzKSB7IG1vdmUocy53aWR0aCgpLCBzLmhlaWdodCgp
KTsgfSAKKyAgICB2b2lkIG1vdmVCeShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9mZnNl
dCkgeyBtb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkpOyB9CisgICAgdm9pZCBtb3ZlKEZyYWN0
aW9uYWxMYXlvdXRVbml0IGR4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkgeyBtX3ggKz0gZHg7
IG1feSArPSBkeTsgfQorICAgIHZvaWQgc2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KQorICAgIHsK
KyAgICAgICAgbV94ICo9IHN4OworICAgICAgICBtX3kgKj0gc3k7CisgICAgfQorICAgIAorICAg
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCBleHBhbmRlZFRvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91
dFBvaW50KG1feCA+IG90aGVyLm1feCA/IG1feCA6IG90aGVyLm1feCwKKyAgICAgICAgICAgIG1f
eSA+IG90aGVyLm1feSA/IG1feSA6IG90aGVyLm1feSk7CisgICAgfQorCisgICAgRnJhY3Rpb25h
bExheW91dFBvaW50IHNocnVua1RvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1feCA8
IG90aGVyLm1feCA/IG1feCA6IG90aGVyLm1feCwKKyAgICAgICAgICAgIG1feSA8IG90aGVyLm1f
eSA/IG1feSA6IG90aGVyLm1feSk7CisgICAgfQorCisgICAgdm9pZCBjbGFtcE5lZ2F0aXZlVG9a
ZXJvKCkKKyAgICB7CisgICAgICAgICp0aGlzID0gZXhwYW5kZWRUbyh6ZXJvKCkpOworICAgIH0K
KworICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB0cmFuc3Bvc2VkUG9pbnQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX3ksIG1feCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1feCwgbV95OworfTsKKwor
aW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3BlcmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0
UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoreworICAgIGEubW92ZShi
LndpZHRoKCksIGIuaGVpZ2h0KCkpOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgRnJhY3Rp
b25hbExheW91dFBvaW50JiBvcGVyYXRvci09KEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29u
c3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAgYS5tb3ZlKC1iLndpZHRoKCksIC1i
LmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50
KGEueCgpICsgYi53aWR0aCgpLCBhLnkoKSArIGIuaGVpZ2h0KCkpOworfQorCitpbmxpbmUgRnJh
Y3Rpb25hbExheW91dFBvaW50IG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQm
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rp
b25hbExheW91dFBvaW50KGEueCgpICsgYi54KCksIGEueSgpICsgYi55KCkpOworfQorCitpbmxp
bmUgRnJhY3Rpb25hbExheW91dFNpemUgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBiKQoreworICAgIHJldHVybiBG
cmFjdGlvbmFsTGF5b3V0U2l6ZShhLngoKSAtIGIueCgpLCBhLnkoKSAtIGIueSgpKTsKK30KKwor
aW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExh
eW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAgICByZXR1
cm4gRnJhY3Rpb25hbExheW91dFBvaW50KGEueCgpIC0gYi53aWR0aCgpLCBhLnkoKSAtIGIuaGVp
Z2h0KCkpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50IG9wZXJhdG9yLShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQoLXBvaW50LngoKSwgLXBvaW50LnkoKSk7Cit9CisKK2lubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQmIGIpCit7CisgICAgcmV0dXJuIGEueCgpID09IGIueCgpICYmIGEueSgpID09
IGIueSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBiKQoreworICAgIHJldHVy
biBhLngoKSAhPSBiLngoKSB8fCBhLnkoKSAhPSBiLnkoKTsKK30KKworaW5saW5lIEZyYWN0aW9u
YWxMYXlvdXRQb2ludCB0b1BvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKQor
eworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpKTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIHRvU2l6ZShjb25zdCBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRT
aXplKGEueCgpLCBhLnkoKSk7Cit9CisKK2lubGluZSBJbnRQb2ludCBmbG9vcmVkSW50UG9pbnQo
Y29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4gSW50UG9p
bnQocG9pbnQueCgpLnRvSW50KCksIHBvaW50LnkoKS50b0ludCgpKTsKK30KKworaW5saW5lIElu
dFBvaW50IHJvdW5kZWRJbnRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50
KQoreworICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCkucm91bmQoKSwgcG9pbnQueSgpLnJv
dW5kKCkpOworfQorCitpbmxpbmUgSW50UG9pbnQgY2VpbGVkSW50UG9pbnQoY29uc3QgRnJhY3Rp
b25hbExheW91dFBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgp
LmNlaWwoKSwgcG9pbnQueSgpLmNlaWwoKSk7Cit9CisKKyNpZiBQTEFURk9STShRVCkKK2lubGlu
ZSBRRGF0YVN0cmVhbSYgb3BlcmF0b3I8PChRRGF0YVN0cmVhbSYgc3RyZWFtLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQoreworICAgIHN0cmVhbSA8PCBwb2ludC54KCkudG9G
bG9hdCgpIDw8IHBvaW50LnkoKS50b0Zsb2F0KCk7CisgICAgcmV0dXJuIHN0cmVhbTsKK30KKwor
aW5saW5lIFFEYXRhU3RyZWFtJiBvcGVyYXRvcj4+KFFEYXRhU3RyZWFtJiBzdHJlYW0sIEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpCit7CisgICAgZmxvYXQgeCwgeTsKKyAgICBzdHJlYW0g
Pj4geCA+PiB5OworICAgIHBvaW50LnNldFgoeCk7CisgICAgcG9pbnQuc2V0WSh5KTsKKyAgICBy
ZXR1cm4gc3RyZWFtOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEZyYWN0aW9uYWxMYXlvdXRQb2ludF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25h
bExheW91dFJlY3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKKworI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCisjaW5jbHVk
ZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZyYWN0aW9uYWxMYXlvdXRS
ZWN0OjpGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCisgICAgOiBtX2xv
Y2F0aW9uKEZyYWN0aW9uYWxMYXlvdXRQb2ludChyLngoKSwgci55KCkpKQorICAgICwgbV9zaXpl
KEZyYWN0aW9uYWxMYXlvdXRTaXplKHIud2lkdGgoKSwgci5oZWlnaHQoKSkpCit7Cit9CisKK2Jv
b2wgRnJhY3Rpb25hbExheW91dFJlY3Q6OmludGVyc2VjdHMoY29uc3QgRnJhY3Rpb25hbExheW91
dFJlY3QmIG90aGVyKSBjb25zdAoreworICAgIC8vIENoZWNraW5nIGVtcHRpbmVzcyBoYW5kbGVz
IG5lZ2F0aXZlIHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCisgICAgcmV0dXJuICFpc0VtcHR5KCkg
JiYgIW90aGVyLmlzRW1wdHkoKQorICAgICAgICAmJiB4KCkgPCBvdGhlci5tYXhYKCkgJiYgb3Ro
ZXIueCgpIDwgbWF4WCgpCisgICAgICAgICYmIHkoKSA8IG90aGVyLm1heFkoKSAmJiBvdGhlci55
KCkgPCBtYXhZKCk7Cit9CisKK2Jvb2wgRnJhY3Rpb25hbExheW91dFJlY3Q6OmNvbnRhaW5zKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4geCgp
IDw9IG90aGVyLngoKSAmJiBtYXhYKCkgPj0gb3RoZXIubWF4WCgpCisgICAgICAgICYmIHkoKSA8
PSBvdGhlci55KCkgJiYgbWF4WSgpID49IG90aGVyLm1heFkoKTsKK30KKwordm9pZCBGcmFjdGlv
bmFsTGF5b3V0UmVjdDo6aW50ZXJzZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhl
cikKK3sKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBuZXdYID0gc3RkOjptYXgoeCgpLCBvdGhl
ci54KCkpOworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG5ld1kgPSBzdGQ6Om1heCh5KCksIG90
aGVyLnkoKSk7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbmV3TWF4WCA9IHN0ZDo6bWluKG1h
eFgoKSwgb3RoZXIubWF4WCgpKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBuZXdNYXhZID0g
c3RkOjptaW4obWF4WSgpLCBvdGhlci5tYXhZKCkpOworCisgICAgLy8gUmV0dXJuIGEgY2xlYW4g
ZW1wdHkgcmVjdGFuZ2xlIGZvciBub24taW50ZXJzZWN0aW5nIGNhc2VzLgorICAgIGlmIChuZXdY
ID49IG5ld01heFggfHwgbmV3WSA+PSBuZXdNYXhZKSB7CisgICAgICAgIG5ld1ggPSAwOworICAg
ICAgICBuZXdZID0gMDsKKyAgICAgICAgbmV3TWF4WCA9IDA7CisgICAgICAgIG5ld01heFkgPSAw
OworICAgIH0KKworICAgIG1fbG9jYXRpb24uc2V0WChuZXdYKTsKKyAgICBtX2xvY2F0aW9uLnNl
dFkobmV3WSk7CisgICAgbV9zaXplLnNldFdpZHRoKG5ld01heFggLSBuZXdYKTsKKyAgICBtX3Np
emUuc2V0SGVpZ2h0KG5ld01heFkgLSBuZXdZKTsKK30KKwordm9pZCBGcmFjdGlvbmFsTGF5b3V0
UmVjdDo6dW5pdGUoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKQoreworICAgIC8v
IEhhbmRsZSBlbXB0eSBzcGVjaWFsIGNhc2VzIGZpcnN0LgorICAgIGlmIChvdGhlci5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoaXNFbXB0eSgpKSB7CisgICAgICAgICp0aGlz
ID0gb3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBuZXdYID0gc3RkOjptaW4oeCgpLCBvdGhlci54KCkpOworICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0IG5ld1kgPSBzdGQ6Om1pbih5KCksIG90aGVyLnkoKSk7CisgICAgRnJhY3Rpb25hbExh
eW91dFVuaXQgbmV3TWF4WCA9IHN0ZDo6bWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKTsKKyAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBuZXdNYXhZID0gc3RkOjptYXgobWF4WSgpLCBvdGhlci5tYXhZ
KCkpOworCisgICAgbV9sb2NhdGlvbi5zZXRYKG5ld1gpOworICAgIG1fbG9jYXRpb24uc2V0WShu
ZXdZKTsKKyAgICBtX3NpemUuc2V0V2lkdGgobmV3TWF4WCAtIG5ld1gpOworICAgIG1fc2l6ZS5z
ZXRIZWlnaHQobmV3TWF4WSAtIG5ld1kpOworfQorCit2b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0
Ojp1bml0ZUlmTm9uWmVybyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpCit7Cisg
ICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNpYWwgY2FzZXMgZmlyc3QuCisgICAgaWYgKCFvdGhlci53
aWR0aCgpICYmICFvdGhlci5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghd2lk
dGgoKSAmJiAhaGVpZ2h0KCkpIHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG5ld1ggPSBzdGQ6Om1pbih4
KCksIG90aGVyLngoKSk7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbmV3WSA9IHN0ZDo6bWlu
KHkoKSwgb3RoZXIueSgpKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBuZXdNYXhYID0gc3Rk
OjptYXgobWF4WCgpLCBvdGhlci5tYXhYKCkpOworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG5l
d01heFkgPSBzdGQ6Om1heChtYXhZKCksIG90aGVyLm1heFkoKSk7CisKKyAgICBtX2xvY2F0aW9u
LnNldFgobmV3WCk7CisgICAgbV9sb2NhdGlvbi5zZXRZKG5ld1kpOworICAgIG1fc2l6ZS5zZXRX
aWR0aChuZXdNYXhYIC0gbmV3WCk7CisgICAgbV9zaXplLnNldEhlaWdodChuZXdNYXhZIC0gbmV3
WSk7Cit9CisKK3ZvaWQgRnJhY3Rpb25hbExheW91dFJlY3Q6OnNjYWxlKGZsb2F0IHMpCit7Cisg
ICAgbV9sb2NhdGlvbi5zZXRYKHgoKSAqIHMpOworICAgIG1fbG9jYXRpb24uc2V0WSh5KCkgKiBz
KTsKKyAgICBtX3NpemUuc2V0V2lkdGgod2lkdGgoKSAqIHMpOworICAgIG1fc2l6ZS5zZXRIZWln
aHQoaGVpZ2h0KCkgKiBzKTsKK30KKworRnJhY3Rpb25hbExheW91dFJlY3QgdW5pb25SZWN0KGNv
bnN0IFZlY3RvcjxGcmFjdGlvbmFsTGF5b3V0UmVjdD4mIHJlY3RzKQoreworICAgIEZyYWN0aW9u
YWxMYXlvdXRSZWN0IHJlc3VsdDsKKworICAgIHNpemVfdCBjb3VudCA9IHJlY3RzLnNpemUoKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIHJlc3VsdC51
bml0ZShyZWN0c1tpXSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitJbnRSZWN0IGVuY2xv
c2luZ0ludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIHJlY3QpCit7CisgICAgZmxv
YXQgeCA9IGZsb29yZihyZWN0LngoKS50b0Zsb2F0KCkpOworICAgIGZsb2F0IHkgPSBmbG9vcmYo
cmVjdC55KCkudG9GbG9hdCgpKTsKKyAgICBmbG9hdCB3aWR0aCA9IGNlaWxmKHJlY3QubWF4WCgp
LnRvRmxvYXQoKSkgLSB4OworICAgIGZsb2F0IGhlaWdodCA9IGNlaWxmKHJlY3QubWF4WSgpLnRv
RmxvYXQoKSkgLSB5OworCisgICAgcmV0dXJuIEludFJlY3QoY2xhbXBUb0ludGVnZXIoeCksIGNs
YW1wVG9JbnRlZ2VyKHkpLCAKKyAgICAgICAgICAgICAgICAgICBjbGFtcFRvSW50ZWdlcih3aWR0
aCksIGNsYW1wVG9JbnRlZ2VyKGhlaWdodCkpOworfQorCitGcmFjdGlvbmFsTGF5b3V0UmVjdCBl
bmNsb3NpbmdGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7Cisg
ICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRSZWN0KHJlY3QueCgpLCByZWN0LnkoKSwKKyAgICAg
ICAgICAgICAgICAgICAgIHJlY3QubWF4WCgpIC0gcmVjdC54KCkgKyBGcmFjdGlvbmFsTGF5b3V0
VW5pdDo6ZXBzaWxvbigpLAorICAgICAgICAgICAgICAgICAgICAgcmVjdC5tYXhZKCkgLSByZWN0
LnkoKSArIEZyYWN0aW9uYWxMYXlvdXRVbml0OjplcHNpbG9uKCkpOworfQorCitJbnRSZWN0IHBp
eGVsU25hcHBlZEludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIHJlY3QpCit7Cisg
ICAgSW50UG9pbnQgcm91bmRlZExvY2F0aW9uID0gcm91bmRlZEludFBvaW50KHJlY3QubG9jYXRp
b24oKSk7CisgICAgcmV0dXJuIEludFJlY3Qocm91bmRlZExvY2F0aW9uLCBJbnRTaXplKChyZWN0
LngoKSArIHJlY3Qud2lkdGgoKSkucm91bmQoKSAtIHJvdW5kZWRMb2NhdGlvbi54KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWN0LnkoKSArIHJlY3Qu
aGVpZ2h0KCkpLnJvdW5kKCkgLSByb3VuZGVkTG9jYXRpb24ueSgpKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zy
YWN0aW9uYWxMYXlvdXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTgzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnJhY3Rpb25hbExheW91dFJlY3RfaAor
I2RlZmluZSBGcmFjdGlvbmFsTGF5b3V0UmVjdF9oCisKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5
b3V0UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0UmVjdDsKKworY2xhc3MgRnJh
Y3Rpb25hbExheW91dFJlY3QgeworcHVibGljOgorICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0KCkg
eyB9CisgICAgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50
JiBsb2NhdGlvbiwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpCisgICAgICAgIDog
bV9sb2NhdGlvbihsb2NhdGlvbiksIG1fc2l6ZShzaXplKSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5
b3V0UmVjdChGcmFjdGlvbmFsTGF5b3V0VW5pdCB4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB5LCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KQor
ICAgICAgICA6IG1fbG9jYXRpb24oRnJhY3Rpb25hbExheW91dFBvaW50KHgsIHkpKSwgbV9zaXpl
KEZyYWN0aW9uYWxMYXlvdXRTaXplKHdpZHRoLCBoZWlnaHQpKSB7IH0KKyAgICBGcmFjdGlvbmFs
TGF5b3V0UmVjdChjb25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBz
aXplKQorICAgICAgICA6IG1fbG9jYXRpb24obG9jYXRpb24pLCBtX3NpemUoc2l6ZSkgeyB9Cisg
ICAgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgOiBtX2xvY2F0aW9u
KHJlY3QubG9jYXRpb24oKSksIG1fc2l6ZShyZWN0LnNpemUoKSkgeyB9CisKKyAgICBleHBsaWNp
dCBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmKTsgLy8gZG9uJ3QgZG8gdGhp
cyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKKyAgICAgICAgCisgICAgRnJhY3Rpb25hbExh
eW91dFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQorICAgIEZy
YWN0aW9uYWxMYXlvdXRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworICAg
IHZvaWQgc2V0TG9jYXRpb24oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBsb2NhdGlvbikg
eyBtX2xvY2F0aW9uID0gbG9jYXRpb247IH0KKyAgICB2b2lkIHNldFNpemUoY29uc3QgRnJhY3Rp
b25hbExheW91dFNpemUmIHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQorCisgICAgRnJhY3Rpb25h
bExheW91dFVuaXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb24ueCgpOyB9CisgICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb24ueSgpOyB9Cisg
ICAgRnJhY3Rpb25hbExheW91dFVuaXQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIHgoKSArIHdpZHRo
KCk7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtYXhZKCkgY29uc3QgeyByZXR1cm4geSgp
ICsgaGVpZ2h0KCk7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZS53aWR0aCgpOyB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplLmhlaWdodCgpOyB9CisKKyAgICB2b2lkIHNldFgoRnJh
Y3Rpb25hbExheW91dFVuaXQgeCkgeyBtX2xvY2F0aW9uLnNldFgoeCk7IH0KKyAgICB2b2lkIHNl
dFkoRnJhY3Rpb25hbExheW91dFVuaXQgeSkgeyBtX2xvY2F0aW9uLnNldFkoeSk7IH0KKyAgICB2
b2lkIHNldFdpZHRoKEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKSB7IG1fc2l6ZS5zZXRXaWR0
aCh3aWR0aCk7IH0KKyAgICB2b2lkIHNldEhlaWdodChGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWln
aHQpIHsgbV9zaXplLnNldEhlaWdodChoZWlnaHQpOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiBtX3NpemUuaXNFbXB0eSgpOyB9CisKKyAgICAvLyBOT1RFOiBUaGUgcmVz
dWx0IGlzIHJvdW5kZWQgdG8gaW50ZWdlciB2YWx1ZXMsIGFuZCB0aHVzIG1heSBiZSBub3QgdGhl
IGV4YWN0CisgICAgLy8gY2VudGVyIHBvaW50LgorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBj
ZW50ZXIoKSBjb25zdCB7IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoeCgpICsgd2lkdGgo
KSAvIDIsIHkoKSArIGhlaWdodCgpIC8gMik7IH0KKworICAgIHZvaWQgbW92ZShjb25zdCBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX2xvY2F0aW9uICs9IHNpemU7IH0gCisgICAgdm9p
ZCBtb3ZlQnkoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBvZmZzZXQpIHsgbV9sb2NhdGlv
bi5tb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkpOyB9CisgICAgdm9pZCBtb3ZlKEZyYWN0aW9u
YWxMYXlvdXRVbml0IGR4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkgeyBtX2xvY2F0aW9uLm1v
dmUoZHgsIGR5KTsgfSAKKworICAgIHZvaWQgZXhwYW5kKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRT
aXplJiBzaXplKSB7IG1fc2l6ZSArPSBzaXplOyB9CisgICAgdm9pZCBleHBhbmQoRnJhY3Rpb25h
bExheW91dFVuaXQgZHcsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRoKSB7IG1fc2l6ZS5leHBhbmQo
ZHcsIGRoKTsgfQorICAgIHZvaWQgY29udHJhY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUm
IHNpemUpIHsgbV9zaXplIC09IHNpemU7IH0KKyAgICB2b2lkIGNvbnRyYWN0KEZyYWN0aW9uYWxM
YXlvdXRVbml0IGR3LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKC1k
dywgLWRoKTsgfQorCisgICAgdm9pZCBzaGlmdFhFZGdlVG8oRnJhY3Rpb25hbExheW91dFVuaXQg
ZWRnZSkKKyAgICB7CisgICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAt
IHgoKTsKKyAgICAgICAgc2V0WChlZGdlKTsKKyAgICAgICAgc2V0V2lkdGgoc3RkOjptYXg8RnJh
Y3Rpb25hbExheW91dFVuaXQ+KDAsIHdpZHRoKCkgLSBkZWx0YSkpOworICAgIH0KKyAgICB2b2lk
IHNoaWZ0TWF4WEVkZ2VUbyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBlZGdlKQorICAgIHsKKyAgICAg
ICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0gbWF4WCgpOworICAgICAgICBz
ZXRXaWR0aChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwgd2lkdGgoKSArIGRlbHRh
KSk7CisgICAgfQorICAgIHZvaWQgc2hpZnRZRWRnZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVk
Z2UpCisgICAgeworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSB5
KCk7CisgICAgICAgIHNldFkoZWRnZSk7CisgICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxGcmFj
dGlvbmFsTGF5b3V0VW5pdD4oMCwgaGVpZ2h0KCkgLSBkZWx0YSkpOworICAgIH0KKyAgICB2b2lk
IHNoaWZ0TWF4WUVkZ2VUbyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBlZGdlKQorICAgIHsKKyAgICAg
ICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0gbWF4WSgpOworICAgICAgICBz
ZXRIZWlnaHQoc3RkOjptYXg8RnJhY3Rpb25hbExheW91dFVuaXQ+KDAsIGhlaWdodCgpICsgZGVs
dGEpKTsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWluWE1pbllDb3JuZXIo
KSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9IC8vIHR5cGljYWxseSB0b3BMZWZ0CisgICAg
RnJhY3Rpb25hbExheW91dFBvaW50IG1heFhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFBvaW50KG1fbG9jYXRpb24ueCgpICsgbV9zaXplLndpZHRoKCksIG1fbG9j
YXRpb24ueSgpKTsgfSAvLyB0eXBpY2FsbHkgdG9wUmlnaHQKKyAgICBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQgbWluWE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQobV9sb2NhdGlvbi54KCksIG1fbG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgpKTsgfSAv
LyB0eXBpY2FsbHkgYm90dG9tTGVmdAorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtYXhYTWF4
WUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX2xvY2F0aW9u
LngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7
IH0gLy8gdHlwaWNhbGx5IGJvdHRvbVJpZ2h0CisgICAgCisgICAgYm9vbCBpbnRlcnNlY3RzKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JikgY29uc3Q7CisgICAgYm9vbCBjb250YWlucyhjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpIGNvbnN0OworCisgICAgLy8gVGhpcyBjaGVja3MgdG8g
c2VlIGlmIHRoZSByZWN0IGNvbnRhaW5zIHgseSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuCisg
ICAgLy8gRXF1aXZhbGVudCB0byBjaGVja2luZyBpZiB0aGUgcmVjdCBjb250YWlucyBhIDF4MSBy
ZWN0IGJlbG93IGFuZCB0byB0aGUgcmlnaHQgb2YgKHB4LHB5KS4KKyAgICBib29sIGNvbnRhaW5z
KEZyYWN0aW9uYWxMYXlvdXRVbml0IHB4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBweSkgY29uc3QK
KyAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYmIHB4IDwgbWF4WCgpICYmIHB5ID49IHkoKSAm
JiBweSA8IG1heFkoKTsgfQorICAgIGJvb2wgY29udGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91
dFBvaW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4gY29udGFpbnMocG9pbnQueCgpLCBwb2ludC55
KCkpOyB9CisKKyAgICB2b2lkIGludGVyc2VjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYp
OworICAgIHZvaWQgdW5pdGUoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsKKyAgICB2b2lk
IHVuaXRlSWZOb25aZXJvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7CisKKyAgICB2b2lk
IGluZmxhdGVYKEZyYWN0aW9uYWxMYXlvdXRVbml0IGR4KQorICAgIHsKKyAgICAgICAgbV9sb2Nh
dGlvbi5zZXRYKG1fbG9jYXRpb24ueCgpIC0gZHgpOworICAgICAgICBtX3NpemUuc2V0V2lkdGgo
bV9zaXplLndpZHRoKCkgKyBkeCArIGR4KTsKKyAgICB9CisgICAgdm9pZCBpbmZsYXRlWShGcmFj
dGlvbmFsTGF5b3V0VW5pdCBkeSkKKyAgICB7CisgICAgICAgIG1fbG9jYXRpb24uc2V0WShtX2xv
Y2F0aW9uLnkoKSAtIGR5KTsKKyAgICAgICAgbV9zaXplLnNldEhlaWdodChtX3NpemUuaGVpZ2h0
KCkgKyBkeSArIGR5KTsKKyAgICB9CisgICAgdm9pZCBpbmZsYXRlKEZyYWN0aW9uYWxMYXlvdXRV
bml0IGQpIHsgaW5mbGF0ZVgoZCk7IGluZmxhdGVZKGQpOyB9CisgICAgdm9pZCBzY2FsZShmbG9h
dCBzKTsKKworICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IHRyYW5zcG9zZWRSZWN0KCkgY29uc3Qg
eyByZXR1cm4gRnJhY3Rpb25hbExheW91dFJlY3QobV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQo
KSwgbV9zaXplLnRyYW5zcG9zZWRTaXplKCkpOyB9CisKKyAgICBzdGF0aWMgRnJhY3Rpb25hbExh
eW91dFJlY3QgaW5maW5pdGVSZWN0KCkge3JldHVybiBGcmFjdGlvbmFsTGF5b3V0UmVjdChGcmFj
dGlvbmFsTGF5b3V0VW5pdDo6bWluKCkgLyAyLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWluKCkg
LyAyLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCksIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpt
YXgoKSk7IH0KKworcHJpdmF0ZToKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbV9sb2NhdGlv
bjsKKyAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBtX3NpemU7Cit9OworCitpbmxpbmUgRnJhY3Rp
b25hbExheW91dFJlY3QgaW50ZXJzZWN0aW9uKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYikKK3sKKyAgICBGcmFjdGlvbmFsTGF5b3V0
UmVjdCBjID0gYTsKKyAgICBjLmludGVyc2VjdChiKTsKKyAgICByZXR1cm4gYzsKK30KKworaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRSZWN0IHVuaW9uUmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0
UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGIpCit7CisgICAgRnJhY3Rpb25h
bExheW91dFJlY3QgYyA9IGE7CisgICAgYy51bml0ZShiKTsKKyAgICByZXR1cm4gYzsKK30KKwor
RnJhY3Rpb25hbExheW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxGcmFjdGlvbmFsTGF5
b3V0UmVjdD4mKTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5
b3V0UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGIpCit7CisgICAgcmV0dXJu
IGEubG9jYXRpb24oKSA9PSBiLmxvY2F0aW9uKCkgJiYgYS5zaXplKCkgPT0gYi5zaXplKCk7Cit9
CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEs
IGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBiKQoreworICAgIHJldHVybiBhLmxvY2F0aW9u
KCkgIT0gYi5sb2NhdGlvbigpIHx8IGEuc2l6ZSgpICE9IGIuc2l6ZSgpOworfQorCitJbnRSZWN0
IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsKK0ZyYWN0aW9u
YWxMYXlvdXRSZWN0IGVuY2xvc2luZ0ZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpOworSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRS
ZWN0Jik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZyYWN0aW9uYWxM
YXlvdXRSZWN0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0
aW9uYWxMYXlvdXRTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0U2l6ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0U2l6ZS5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZyYWN0aW9uYWxMYXlvdXRTaXplLmgiCisKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UG9p
bnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRTaXplIHBpeGVsU25hcHBlZEludFNp
emUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHMsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCYgcCkKK3sKKyAgICByZXR1cm4gSW50U2l6ZShzbmFwU2l6ZVRvUGl4ZWwocy53aWR0aCgp
LCBwLngoKSksIHNuYXBTaXplVG9QaXhlbChzLmhlaWdodCgpLCBwLnkoKSkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GcmFjdGlvbmFsTGF5b3V0U2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRTaXplLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0U2l6ZS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRTaXpl
X2gKKyNkZWZpbmUgRnJhY3Rpb25hbExheW91dFNpemVfaAorCisjaW5jbHVkZSAiRmxvYXRTaXpl
LmgiCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKKyNpbmNsdWRlICJJbnRTaXpl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJhY3Rpb25hbExheW91dFBvaW50
OworCitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0U2l6ZSB7CitwdWJsaWM6CisgICAgRnJhY3Rpb25h
bExheW91dFNpemUoKSA6IG1fd2lkdGgoMCksIG1faGVpZ2h0KDApIHsgfQorICAgIEZyYWN0aW9u
YWxMYXlvdXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpIDogbV93aWR0aChzaXplLndpZHRoKCkp
LCBtX2hlaWdodChzaXplLmhlaWdodCgpKSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZShG
cmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KSA6
IG1fd2lkdGgod2lkdGgpLCBtX2hlaWdodChoZWlnaHQpIHsgfQorCisgICAgZXhwbGljaXQgRnJh
Y3Rpb25hbExheW91dFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKSA6IG1fd2lkdGgoc2l6ZS53
aWR0aCgpKSwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkgeyB9CisgICAgCisgICAgRnJhY3Rpb25h
bExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgRnJhY3Rp
b25hbExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKworICAg
IHZvaWQgc2V0V2lkdGgoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgpIHsgbV93aWR0aCA9IHdp
ZHRoOyB9CisgICAgdm9pZCBzZXRIZWlnaHQoRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KSB7
IG1faGVpZ2h0ID0gaGVpZ2h0OyB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX3dpZHRoIDw9IDAgfHwgbV9oZWlnaHQgPD0gMDsgfQorICAgIGJvb2wgaXNaZXJvKCkgY29u
c3QgeyByZXR1cm4gIW1fd2lkdGggJiYgIW1faGVpZ2h0OyB9CisKKyAgICBmbG9hdCBhc3BlY3RS
YXRpbygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX3dpZHRoKSAvIHN0YXRp
Y19jYXN0PGZsb2F0PihtX2hlaWdodCk7IH0KKyAgICAKKyAgICB2b2lkIGV4cGFuZChGcmFjdGlv
bmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KQorICAgIHsK
KyAgICAgICAgbV93aWR0aCArPSB3aWR0aDsKKyAgICAgICAgbV9oZWlnaHQgKz0gaGVpZ2h0Owor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNjYWxlKGZsb2F0IHNjYWxlKQorICAgIHsKKyAgICAgICAg
bV93aWR0aCA9IHN0YXRpY19jYXN0PGludD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fd2lkdGgpICog
c2NhbGUpOworICAgICAgICBtX2hlaWdodCA9IHN0YXRpY19jYXN0PGludD4oc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG1faGVpZ2h0KSAqIHNjYWxlKTsKKyAgICB9CisgICAgCisgICAgRnJhY3Rpb25hbExh
eW91dFNpemUgZXhwYW5kZWRUbyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUobV93aWR0aCA+
IG90aGVyLm1fd2lkdGggPyBtX3dpZHRoIDogb3RoZXIubV93aWR0aCwKKyAgICAgICAgICAgIG1f
aGVpZ2h0ID4gb3RoZXIubV9oZWlnaHQgPyBtX2hlaWdodCA6IG90aGVyLm1faGVpZ2h0KTsKKyAg
ICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBzaHJ1bmtUbyhjb25zdCBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRnJhY3Rpb25h
bExheW91dFNpemUobV93aWR0aCA8IG90aGVyLm1fd2lkdGggPyBtX3dpZHRoIDogb3RoZXIubV93
aWR0aCwKKyAgICAgICAgICAgIG1faGVpZ2h0IDwgb3RoZXIubV9oZWlnaHQgPyBtX2hlaWdodCA6
IG90aGVyLm1faGVpZ2h0KTsKKyAgICB9CisKKyAgICB2b2lkIGNsYW1wTmVnYXRpdmVUb1plcm8o
KQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKEZyYWN0aW9uYWxMYXlvdXRTaXpl
KCkpOworICAgIH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplIHRyYW5zcG9zZWRTaXplKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShtX2hlaWdo
dCwgbV93aWR0aCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IG1fd2lkdGgsIG1faGVpZ2h0OworfTsKKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplJiBv
cGVyYXRvcis9KEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSYgYikKK3sKKyAgICBhLnNldFdpZHRoKGEud2lkdGgoKSArIGIud2lkdGgoKSk7CisgICAg
YS5zZXRIZWlnaHQoYS5oZWlnaHQoKSArIGIuaGVpZ2h0KCkpOworICAgIHJldHVybiBhOworfQor
CitpbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUmIG9wZXJhdG9yLT0oRnJhY3Rpb25hbExheW91
dFNpemUmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoreworICAgIGEuc2V0V2lk
dGgoYS53aWR0aCgpIC0gYi53aWR0aCgpKTsKKyAgICBhLnNldEhlaWdodChhLmhlaWdodCgpIC0g
Yi5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRTaXplJiBiKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShh
LndpZHRoKCkgKyBiLndpZHRoKCksIGEuaGVpZ2h0KCkgKyBiLmhlaWdodCgpKTsKK30KKworaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAgcmV0dXJuIEZy
YWN0aW9uYWxMYXlvdXRTaXplKGEud2lkdGgoKSAtIGIud2lkdGgoKSwgYS5oZWlnaHQoKSAtIGIu
aGVpZ2h0KCkpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgb3BlcmF0b3ItKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKQoreworICAgIHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSgtc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSk7Cit9CisKK2lubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRTaXplJiBiKQoreworICAgIHJldHVybiBhLndpZHRoKCkgPT0gYi53aWR0aCgp
ICYmIGEuaGVpZ2h0KCkgPT0gYi5oZWlnaHQoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNp
emUmIGIpCit7CisgICAgcmV0dXJuIGEud2lkdGgoKSAhPSBiLndpZHRoKCkgfHwgYS5oZWlnaHQo
KSAhPSBiLmhlaWdodCgpOworfQorCitpbmxpbmUgSW50U2l6ZSBmbG9vcmVkSW50U2l6ZShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgcykKK3sKKyAgICByZXR1cm4gSW50U2l6ZShzLndpZHRo
KCkudG9JbnQoKSwgcy5oZWlnaHQoKS50b0ludCgpKTsKK30KKworaW5saW5lIEludFNpemUgcm91
bmRlZEludFNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHMpCit7CisgICAgcmV0dXJu
IEludFNpemUocy53aWR0aCgpLnJvdW5kKCksIHMuaGVpZ2h0KCkucm91bmQoKSk7Cit9CisKK0lu
dFNpemUgcGl4ZWxTbmFwcGVkSW50U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5b3V0U2l6ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAkocmV2aXNpb24gMTA3NTgzKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KIApAQCAtNDAsNiArNDEsMTIgQEAgSW50UmVj
dDo6SW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCiB7CiB9CiAKK0ludFJlY3Q6OkludFJlY3Qo
Y29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIHIpCisgICAgOiBtX2xvY2F0aW9uKGZsb29yZWRJ
bnRQb2ludChyLmxvY2F0aW9uKCkpKQorICAgICwgbV9zaXplKGZsb29yZWRJbnRTaXplKHIuc2l6
ZSgpKSkKK3sKK30KKwogYm9vbCBJbnRSZWN0OjppbnRlcnNlY3RzKGNvbnN0IEludFJlY3QmIG90
aGVyKSBjb25zdAogewogICAgIC8vIENoZWNraW5nIGVtcHRpbmVzcyBoYW5kbGVzIG5lZ2F0aXZl
IHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbnRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW50UmVjdC5oCShyZXZpc2lvbiAxMDc1ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcg
QEAgc3RydWN0IFNrSVJlY3Q7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UmVj
dDsKK2NsYXNzIEZyYWN0aW9uYWxMYXlvdXRSZWN0OwogCiBjbGFzcyBJbnRSZWN0IHsKIHB1Ymxp
YzoKQEAgLTgwLDcgKzgxLDggQEAgcHVibGljOgogICAgIEludFJlY3QoaW50IHgsIGludCB5LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgICAgIDogbV9sb2NhdGlvbihJbnRQb2ludCh4LCB5
KSksIG1fc2l6ZShJbnRTaXplKHdpZHRoLCBoZWlnaHQpKSB7IH0KIAotICAgIGV4cGxpY2l0IElu
dFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5
IHNpbmNlIGl0J3MgbG9zc3kKKyAgICBleHBsaWNpdCBJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
OyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQorICAgIGV4cGxp
Y2l0IEludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsgLy8gZG9uJ3QgZG8gdGhp
cyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKICAgICAgICAgCiAgICAgSW50UG9pbnQgbG9j
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9CiAgICAgSW50U2l6ZSBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127066</attachid>
            <date>2012-02-14 15:41:46 -0800</date>
            <delta_ts>2012-02-15 16:00:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76571-20120214154145.patch</filename>
            <type>text/plain</type>
            <size>49131</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzc0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDEyLTAyLTE0ICBFbWlsIEEg
RWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4gYW5kIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIEFkZCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQvU2l6ZS9SZWN0
IGZvciBzdWItcGl4ZWwgbGF5b3V0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NjU3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBmaXhlZCBwb2ludCB2ZXJzaW9ucyBvZiB0aGUgUG9pbnQsIFNpemUg
YW5kIFJlY3QgY2xhc3NlcyB1c2luZworICAgICAgICB0aGUgbmV3IEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCB0eXBlIGFuZC4KKworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQsIEZyYWN0aW9u
YWxMYXlvdXRTaXplIGFuZCBGcmFjdGlvbmFsTGF5b3V0UmVjdCBhcmUKKyAgICAgICAgUG9pbnQs
IFNpemUgYW5kIFJlY3QgaW1wbGVtZW50YXRpb25zIHJlc3BlY3RpdmVseSB1c2luZyB0aGlzIG5l
dyB0eXBlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIFdlYkNvcmUub3JkZXI6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHBsYXRmb3JtL0ZyYWN0aW9uYWxMYXlvdXRVbml0Lmg6CisgICAgICAg
IEZpeGVkIGEgY291cGxlIG9mIHR5cG9zIGFuZCBzaWduZWQvdW5zaWduZWQgYnVncy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RmxvYXRQb2ludDo6RmxvYXRQb2ludCk6CisgICAgICAgIEFkZCBleHBsaWNpdCBGbG9hdFBv
aW50KEZyYWN0aW9uYWxMYXlvdXRQb2ludCkgY29uc3RydWN0b3IuCisgICAgICAgIAorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRQb2ludDo6bW92ZSk6CisgICAgICAgIEFkZCBtb3ZlKEZyYWN0aW9u
YWxMYXlvdXRTaXplKSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3Jl
OjpGbG9hdFBvaW50Ojptb3ZlQnkpOgorICAgICAgICBBZGQgbW92ZUJ5KEZyYWN0aW9uYWxMYXlv
dXRQb2ludCkgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6RmxvYXRSZWN0KToKKyAgICAgICAgQWRkIGV4
cGxpY2l0IEZsb2F0UmVjdEZyYWN0aW9uYWxMYXlvdXRSZWN0KSBjb25zdHJ1Y3Rvci4KKyAgICAg
ICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0Lmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKEZsb2F0UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRTaXplLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0U2l6ZTo6RmxvYXRTaXpl
KToKKyAgICAgICAgQWRkIGV4cGxpY2l0IEZsb2F0U2l6ZShGcmFjdGlvbmFsTGF5b3V0U2l6ZSkg
Y29uc3RydWN0b3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UG9pbnQuaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVj
dC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0
U2l6ZS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxM
YXlvdXRTaXplLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6SW50UmVjdCk6CisgICAgICAgIEFkZCBl
eHBsaWNpdCBJbnRSZWN0KEZyYWN0aW9uYWxMYXlvdXRSZWN0KSBjb25zdHJ1Y3Rvci4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaDoKKwogMjAxMi0wMi0xNCAgUmFteWEg
Q2hhbmRyYXNla2FyYW4gIDxjcmFteWFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBMYXN0IGNoYXJh
Y3RlciBkaXNwbGF5IGZvciBwYXNzd29yZHMgaW4gQW5kcm9pZC4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiAxMDc3NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMTA5Nyw2ICsxMDk3LDggQEAgU0VUKFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRl
ZEltYWdlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRTaXplLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludDNELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTA3NzQzKQorKysgU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjk1Nyw2ICsy
OTU3LDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9hcm0vRkVHYXVzc2lhbkJsdXJORU9OLmggXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFTGlnaHRpbmdORU9OLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0vRkVMaWdodGluZ05F
T04uaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91
dFBvaW50LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxM
YXlvdXRSZWN0LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFJlY3QuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJh
Y3Rpb25hbExheW91dFNpemUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GcmFjdGlvbmFsTGF5b3V0U2l6ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50M0QuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFBvaW50M0QuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludC5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTA3NzQzKQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zMDA5LDYgKzMw
MDksOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRl
ZEltYWdlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2Vu
ZXJhdGVkSW1hZ2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9u
czNELmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRS
ZWN0LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91
dFNpemUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcCcsCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUub3JkZXIJKHJldmlzaW9uIDEwNzc0MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
b3JkZXIJKHdvcmtpbmcgY29weSkKQEAgLTEwMzIwLDcgKzEwMzIwLDcgQEAgX19aTjdXZWJDb3Jl
OUNTU1BhcnNlcjExcGFyc2VDYW52YXNFUk4zVwogX19aTks3V2ViQ29yZThDU1NWYWx1ZTEyaXNJ
bWFnZVZhbHVlRXYKIF9fWk5LN1dlYkNvcmUyMkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUyMWlzSW1h
Z2VHZW5lcmF0b3JWYWx1ZUV2CiBfX1pON1dlYkNvcmUyMkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUx
NGdlbmVyYXRlZEltYWdlRXYKLV9fWk5LN1dlYkNvcmUxNENTU0NhbnZhc1ZhbHVlMTFpc0ZpeGVk
U2l6ZUV2CitfX1pOSzdXZWJDb3JlMTRDU1NDYW52YXNWYWx1ZTExaXNGcmFjdGlvbmFsTGF5b3V0
U2l6ZUV2CiBfX1pON1dlYkNvcmUxOVN0eWxlR2VuZXJhdGVkSW1hZ2U5YWRkQ2xpZW50RVBOU18x
MlJlbmRlck9iamVjdEUKIF9fWk43V2ViQ29yZTIyQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTlhZGRD
bGllbnRFUE5TXzEyUmVuZGVyT2JqZWN0RVJLTlNfN0ludFNpemVFCiBfX1pON1dlYkNvcmU0Nmpz
RG9jdW1lbnRQcm90b3R5cGVGdW5jdGlvbkdldENTU0NhbnZhc0NvbnRleHRFUE4zSlNDOUV4ZWNT
dGF0ZUUKQEAgLTEwNDU0LDcgKzEwNDU0LDcgQEAgX19aTjdXZWJDb3JlMTVDU1NSZWZsZWN0VmFs
dWVEMEV2CiBfX1pON1dlYkNvcmU5Q1NTUGFyc2VyMTZwYXJzZUJvcmRlckltYWdlRWliUk4zV1RG
NlJlZlB0cklOU184Q1NTVmFsdWVFRUUKIF9fWk43V2ViQ29yZTIzQm9yZGVySW1hZ2VQYXJzZUNv
bnRleHQxN2NvbW1pdEJvcmRlckltYWdlRVBOU185Q1NTUGFyc2VyRWIKIF9fWk43V2ViQ29yZTIz
Qm9yZGVySW1hZ2VQYXJzZUNvbnRleHREMUV2Ci1fX1pOSzdXZWJDb3JlMjJDU1NJbWFnZUdlbmVy
YXRvclZhbHVlMTFpc0ZpeGVkU2l6ZUV2CitfX1pOSzdXZWJDb3JlMjJDU1NJbWFnZUdlbmVyYXRv
clZhbHVlMTFpc0ZyYWN0aW9uYWxMYXlvdXRTaXplRXYKIF9fWk43V2ViQ29yZTE2Q1NTR3JhZGll
bnRWYWx1ZTVpbWFnZUVQTlNfMTJSZW5kZXJPYmplY3RFUktOU183SW50U2l6ZUUKIF9fWk5LM1dU
RjlIYXNoVGFibGVJUE43V2ViQ29yZTEyUmVuZGVyT2JqZWN0RVN0NHBhaXJJUzNfUzRfSU5TMV83
SW50U2l6ZUVpRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTN19FRU5TXzdQdHJIYXNoSVMzX0VF
TlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzNfRUVOU0RfSVM2X0VFRUVTRV9F
OGNvbnRhaW5zSVMzX05TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklTM19TN19TQl9FRUVFYlJL
VF8KIF9fWk43V2ViQ29yZTIyQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZThnZXRJbWFnZUVQTlNfMTJS
ZW5kZXJPYmplY3RFUktOU183SW50U2l6ZUUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAxMDc3NDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc1
MjUsNiArMjc1MjUsMjYgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZyYWN0aW9uYWxMYXlvdXRQb2ludC5o
IgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcRnJhY3Rpb25hbExheW91dFJlY3QuY3BwIgorCQkJCQk+CisJCQkJ
PC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3NcRnJhY3Rpb25hbExheW91dFJlY3QuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8Rmls
ZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZyYWN0aW9uYWxMYXlv
dXRTaXplLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZyYWN0aW9uYWxMYXlvdXRTaXplLmgiCisJCQkJ
CT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xGbG9hdFBvaW50LmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDEwNzc0MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzE0LDYgKzMxNCwxMSBAQAogCQkxNDk0N0ZG
RTEyRjgwQ0QyMDBBMEY2MzEgLyogRG9jdW1lbnRPcmRlcmVkTWFwLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDk0N0ZGQzEyRjgwQ0QyMDBBMEY2MzEg
LyogRG9jdW1lbnRPcmRlcmVkTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMTQ5OTNCRTUwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDk5M0JFMzBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJ
MTQ5OTNCRTYwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ5OTNCRTQwQjJGMkIxQzAwNTA0
OTdGIC8qIEZvY3VzQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTE0QzBBMkIyMTQ0NjMyMUUwMDUyMDc5OCAvKiBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJBQjc3MTU4MTQ0NENCRDQwMEVDNEM0QyAvKiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNEMwQTJC
NjE0NDYzMjFFMDA1MjA3OTggLyogRnJhY3Rpb25hbExheW91dFJlY3QuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkFCNzcxNTYxNDQ0Q0JENDAwRUM0
QzRDIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCAqLzsgfTsKKwkJMTRDMEEyQjcxNDQ2MzIx
RTAwNTIwNzk4IC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQUI3NzE1NTE0NDRDQkQ0MDBFQzRDNEMgLyogRnJh
Y3Rpb25hbExheW91dFJlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkxNEMwQTJCQjE0NDYzMjFFMDA1MjA3OTggLyogRnJhY3Rpb25hbExheW91
dFNpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkFCNzcxNTMxNDQ0Q0JENDAwRUM0QzRDIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmNwcCAqLzsg
fTsKKwkJMTRDMEEyQkMxNDQ2MzIxRTAwNTIwNzk4IC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQUI3NzE1MjE0
NDRDQkQ0MDBFQzRDNEMgLyogRnJhY3Rpb25hbExheW91dFNpemUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNEM5QTVFQTBCM0QxMDVGMDA1QTAy
MzIgLyogU2V0dGluZ3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTRDOUE1RTkwQjNEMTA1RjAwNUEwMjMyIC8qIFNldHRpbmdzLmNwcCAqLzsgfTsK
IAkJMTRDRDhEODIxMDZCNTI5MDAwQTQ2RDIzIC8qIEpTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0Q4RDgxMTA2
QjUyOTAwMEE0NkQyMyAvKiBKU1NoYXJlZFdvcmtlckN1c3RvbS5jcHAgKi87IH07CiAJCTE0Q0Y3
OEE0MDlGNThDQkYwMEVCMzY2NSAvKiBKU0NTU1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0Y3OEEzMDlGNThDQkYwMEVCMzY2NSAvKiBK
U0NTU1ZhbHVlLmNwcCAqLzsgfTsKQEAgLTE4ODc4LDYgKzE4ODgzLDExIEBACiAJCQkJNDlGQzdB
NEYxNDQ0QUY1RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAgKi8sCiAJCQkJ
NDlBRjJENjgxNDQzNUQwNTAwMTZBNzg0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5oICovLAog
CQkJCTZFNjdEMkE4MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCAqLywKKwkJCQlC
QUI3NzE1MjE0NDRDQkQ0MDBFQzRDNEMgLyogRnJhY3Rpb25hbExheW91dFNpemUuaCAqLywKKwkJ
CQlCQUI3NzE1MzE0NDRDQkQ0MDBFQzRDNEMgLyogRnJhY3Rpb25hbExheW91dFNpemUuY3BwICov
LAorCQkJCUJBQjc3MTU1MTQ0NENCRDQwMEVDNEM0QyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5o
ICovLAorCQkJCUJBQjc3MTU2MTQ0NENCRDQwMEVDNEM0QyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVj
dC5jcHAgKi8sCisJCQkJQkFCNzcxNTgxNDQ0Q0JENDAwRUM0QzRDIC8qIEZyYWN0aW9uYWxMYXlv
dXRQb2ludC5oICovLAogCQkJCUIyNzUzNTNBMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50
LmNwcCAqLywKIAkJCQlCMjc1MzUzQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5oICov
LAogCQkJCUIyRTI3QzlEMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuY3BwICovLApA
QCAtMjIyNjEsNiArMjIyNzEsOSBAQAogCQkJCTQ5RUNFQjZFMTQ5OTc5MEQwMENERDNBNCAvKiBG
aWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RUNFQjcwMTQ5OTc5MEQwMENE
RDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzJDMDBEOTEy
OTYxOUY4MDA1Qzk1NzUgLyogRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0QzBB
MkIyMTQ0NjMyMUUwMDUyMDc5OCAvKiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTE0QzBBMkI3MTQ0NjMyMUUwMDUyMDc5OCAvKiBGcmFjdGlvbmFsTGF5b3V0UmVj
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTRDMEEyQkMxNDQ2MzIxRTAwNTIwNzk4IC8qIEZyYWN0
aW9uYWxMYXlvdXRTaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOENGRjA0RjBBMTU0RjA5MDAw
QTQyMzQgLyogRml4ZWRUYWJsZUxheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwNzNCQUEw
QzM5OUIxRjAwMEY1OTc5IC8qIEZsb2F0Q29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjI3NTM1NjkwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuaCBpbiBIZWFkZXJzICovLApA
QCAtMjUzMzUsNiArMjUzNDgsOCBAQAogCQkJCTMxMzEzRjY1MTQ0M0IzNUYwMDZFMkE5MCAvKiBG
aWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUVDRUI2RDE0OTk3
OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5
RUNFQjZGMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTE0QzBBMkI2MTQ0NjMyMUUwMDUyMDc5OCAvKiBGcmFjdGlvbmFsTGF5b3V0UmVj
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxNEMwQTJCQjE0NDYzMjFFMDA1MjA3OTggLyogRnJh
Y3Rpb25hbExheW91dFNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDRkYwNEQwQTE1NEYw
OTAwMEE0MjM0IC8qIEZpeGVkVGFibGVMYXlvdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3
NTM1NjgwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjJFMjdDOUYwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZyYWN0aW9uYWxMYXlvdXRVbml0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25hbExheW91
dFVuaXQuaAkocmV2aXNpb24gMTA3NzQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJh
Y3Rpb25hbExheW91dFVuaXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIHBy
aXZhdGU6CiAgICAgfQogICAgIGlubGluZSBib29sIGlzSW5Cb3VuZHModW5zaWduZWQgdmFsdWUp
CiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWUgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1heCgpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyAgICAgICAgcmV0dXJuIHZhbHVlIDwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpIC8g
a0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKICAgICB9CiAgICAgaW5saW5lIGJvb2wgaXNJbkJvdW5k
cyhkb3VibGUgdmFsdWUpCiAgICAgewpAQCAtMjYyLDEyICsyNjIsMTIgQEAgaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTAogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKIHsKLSAgICByZXR1cm4gYSA9PSBG
cmFjdGlvbkxheW91dFVuaXQoYik7CisgICAgcmV0dXJuIGEgPT0gRnJhY3Rpb25hbExheW91dFVu
aXQoYik7CiB9CiAKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgaW50IGEsIGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBiKQogewotICAgIHJldHVybiBGcmFjdGlvbkxheW91dFVuaXQo
YSkgPT0gYjsKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgPT0gYjsKIH0KIAog
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxv
YXQgYikKQEAgLTI5Nyw3ICsyOTcsNyBAQCBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3Bl
cmF0b3IqKGNvCiB7CiAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOwogICAgIGxv
bmcgbG9uZyByYXdWYWwgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGEucmF3VmFsdWUoKSkgKiBi
LnJhd1ZhbHVlKCkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwotICAgIHJldHVyblZhbC5zZXRS
YXdWYWx1ZSgoYS5yYXdWYWx1ZSgpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcikgKiBiLnJhd1Zh
bHVlKCkpOworICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShyYXdWYWwpOwogICAgIHJldHVybiBy
ZXR1cm5WYWw7CiB9ICAgIAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFBvaW50LmNwcAkocmV2aXNpb24gMTA3NzQzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDkgKzI4LDEwIEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogCiAjaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRl
ICJGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIK
ICNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4Lmgi
CiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPG1hdGguaD4KIApAQCAtNDAsNiArNDEsMTAg
QEAgRmxvYXRQb2ludDo6RmxvYXRQb2ludChjb25zdCBJbnRQb2ludCYgcAogewogfQogCitGbG9h
dFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcCkgOiBtX3go
cC54KCkpLCBtX3kocC55KCkpCit7Cit9CisKIHZvaWQgRmxvYXRQb2ludDo6bm9ybWFsaXplKCkK
IHsKICAgICBmbG9hdCB0ZW1wTGVuZ3RoID0gbGVuZ3RoKCk7CkBAIC01NSw2ICs2MCwxOCBAQCBm
bG9hdCBGbG9hdFBvaW50OjpsZW5ndGgoKSBjb25zdAogICAgIHJldHVybiBzcXJ0ZihsZW5ndGhT
cXVhcmVkKCkpOwogfQogCit2b2lkIEZsb2F0UG9pbnQ6Om1vdmUoY29uc3QgRnJhY3Rpb25hbExh
eW91dFNpemUmIHNpemUpCit7CisgICAgbV94ICs9IHNpemUud2lkdGgoKTsKKyAgICBtX3kgKz0g
c2l6ZS5oZWlnaHQoKTsKK30KKwordm9pZCBGbG9hdFBvaW50Ojptb3ZlQnkoY29uc3QgRnJhY3Rp
b25hbExheW91dFBvaW50JiBwb2ludCkKK3sKKyAgICBtX3ggKz0gcG9pbnQueCgpOworICAgIG1f
eSArPSBwb2ludC55KCk7Cit9CisKIEZsb2F0UG9pbnQgRmxvYXRQb2ludDo6bWF0cml4VHJhbnNm
b3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKSBjb25zdAogewogICAgIGRvdWJs
ZSBuZXdYLCBuZXdZOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UG9pbnQuaAkocmV2aXNpb24gMTA3NzQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMyArNjAsMTUg
QEAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiBj
bGFzcyBJbnRQb2ludDsKIGNsYXNzIEludFNpemU7CitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQ7CitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0U2l6ZTsKIAogY2xhc3MgRmxvYXRQb2ludCB7CiBw
dWJsaWM6CiAgICAgRmxvYXRQb2ludCgpIDogbV94KDApLCBtX3koMCkgeyB9CiAgICAgRmxvYXRQ
b2ludChmbG9hdCB4LCBmbG9hdCB5KSA6IG1feCh4KSwgbV95KHkpIHsgfQogICAgIEZsb2F0UG9p
bnQoY29uc3QgSW50UG9pbnQmKTsKLQorICAgIEZsb2F0UG9pbnQoY29uc3QgRnJhY3Rpb25hbExh
eW91dFBvaW50Jik7CiAKICAgICBzdGF0aWMgRmxvYXRQb2ludCB6ZXJvKCkgeyByZXR1cm4gRmxv
YXRQb2ludCgpOyB9CiAKQEAgLTkyLDYgKzk0LDcgQEAgcHVibGljOgogICAgICAgICBtX3ggKz0g
YS53aWR0aCgpOwogICAgICAgICBtX3kgKz0gYS5oZWlnaHQoKTsKICAgICB9CisgICAgdm9pZCBt
b3ZlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJik7CiAgICAgdm9pZCBtb3ZlKGNvbnN0IEZs
b2F0U2l6ZSYgYSkKICAgICB7CiAgICAgICAgIG1feCArPSBhLndpZHRoKCk7CkBAIC0xMDIsNiAr
MTA1LDcgQEAgcHVibGljOgogICAgICAgICBtX3ggKz0gYS54KCk7CiAgICAgICAgIG1feSArPSBh
LnkoKTsKICAgICB9CisgICAgdm9pZCBtb3ZlQnkoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50
Jik7CiAgICAgdm9pZCBtb3ZlQnkoY29uc3QgRmxvYXRQb2ludCYgYSkKICAgICB7CiAgICAgICAg
IG1feCArPSBhLngoKTsKQEAgLTEzMSw2ICsxMzUsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gRmxvYXRQb2ludChzdGQ6Om1heChtX3gsIG90aGVyLm1feCksIHN0ZDo6bWF4KG1feSwgb3Ro
ZXIubV95KSk7CiAgICAgfQogCisgICAgRmxvYXRQb2ludCBzaHJ1bmtUbyhjb25zdCBGbG9hdFBv
aW50JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGbG9hdFBvaW50KG1feCA8
IG90aGVyLm1feCA/IG1feCA6IG90aGVyLm1feCwKKyAgICAgICAgICAgIG1feSA8IG90aGVyLm1f
eSA/IG1feSA6IG90aGVyLm1feSk7CisgICAgfQorCisgICAgdm9pZCBjbGFtcE5lZ2F0aXZlVG9a
ZXJvKCkKKyAgICB7CisgICAgICAgICp0aGlzID0gZXhwYW5kZWRUbyh6ZXJvKCkpOworICAgIH0K
KwogICAgIEZsb2F0UG9pbnQgdHJhbnNwb3NlZFBvaW50KCkgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBGbG9hdFBvaW50KG1feSwgbV94KTsKQEAgLTIzOSw2ICsyNTQsMTEgQEAgaW5saW5l
IEludFNpemUgZmxvb3JlZEludFNpemUoY29uc3QgRmxvYQogICAgIHJldHVybiBJbnRTaXplKHN0
YXRpY19jYXN0PGludD4ocC54KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHAueSgpKSk7CiB9CiAKK2lu
bGluZSBGbG9hdFBvaW50IHRvUG9pbnQoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIHJl
dHVybiBGbG9hdFBvaW50KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Cit9CisKIGZsb2F0
IGZpbmRTbG9wZShjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZs
b2F0JiBjKTsKIAogLy8gRmluZCBwb2ludCB3aGVyZSBsaW5lcyB0aHJvdWdoIHRoZSB0d28gcGFp
cnMgb2YgcG9pbnRzIGludGVyc2VjdC4gUmV0dXJucyBmYWxzZSBpZiB0aGUgbGluZXMgZG9uJ3Qg
aW50ZXJzZWN0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRS
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuY3BwCShyZXZpc2lvbiAxMDc3NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIK
KyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
ICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtNDIsNiArNDMsMTAg
QEAgRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgSW50UmVjdCYgcikgOgogewogfQogCitGbG9h
dFJlY3Q6OkZsb2F0UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgcikgOiBtX2xvY2F0
aW9uKHIubG9jYXRpb24oKSksIG1fc2l6ZShyLnNpemUoKSkKK3sKK30KKwogRmxvYXRSZWN0IEZs
b2F0UmVjdDo6bmFycm93UHJlY2lzaW9uKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHdpZHRo
LCBkb3VibGUgaGVpZ2h0KQogewogICAgIHJldHVybiBGbG9hdFJlY3QobmFycm93UHJlY2lzaW9u
VG9GbG9hdCh4KSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdCh5KSwgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCh3aWR0aCksIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoaGVpZ2h0KSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAkocmV2aXNpb24gMTA3
NzQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
VkdSZWN0OwogI2VuZGlmCiAKK2NsYXNzIEZyYWN0aW9uYWxMYXlvdXRSZWN0OwogY2xhc3MgSW50
UmVjdDsKIGNsYXNzIEludFBvaW50OwogCkBAIC04Miw2ICs4Myw3IEBAIHB1YmxpYzoKICAgICBG
bG9hdFJlY3QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKICAg
ICAgICAgOiBtX2xvY2F0aW9uKEZsb2F0UG9pbnQoeCwgeSkpLCBtX3NpemUoRmxvYXRTaXplKHdp
ZHRoLCBoZWlnaHQpKSB7IH0KICAgICBGbG9hdFJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIEZs
b2F0UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOwogCiAgICAgc3RhdGljIEZsb2F0
UmVjdCBuYXJyb3dQcmVjaXNpb24oZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgd2lkdGgsIGRv
dWJsZSBoZWlnaHQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFNpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0U2l6ZS5jcHAJKHJldmlzaW9uIDEwNzc0MykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKIAorI2lu
Y2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9u
LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgPGxpbWl0cz4KQEAgLTQwLDYgKzQx
LDEwIEBAIEZsb2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0IEludFNpemUmIHNpemUKIHsKIH0KIAor
RmxvYXRTaXplOjpGbG9hdFNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIDog
bV93aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKQoreworfQorCiBm
bG9hdCBGbG9hdFNpemU6OmRpYWdvbmFsTGVuZ3RoKCkgY29uc3QKIHsKICAgICByZXR1cm4gc3Fy
dGYoZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgJKHJldmlzaW9uIDEwNzc0MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NiwxMiArNDYsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgX05TU2l6ZSBOU1NpemU7CiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEludFNpemU7CitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0U2l6ZTsK
IAogY2xhc3MgRmxvYXRTaXplIHsKIHB1YmxpYzoKICAgICBGbG9hdFNpemUoKSA6IG1fd2lkdGgo
MCksIG1faGVpZ2h0KDApIHsgfQogICAgIEZsb2F0U2l6ZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVp
Z2h0KSA6IG1fd2lkdGgod2lkdGgpLCBtX2hlaWdodChoZWlnaHQpIHsgfQogICAgIEZsb2F0U2l6
ZShjb25zdCBJbnRTaXplJik7CisgICAgRmxvYXRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRT
aXplJik7CiAKICAgICBzdGF0aWMgRmxvYXRTaXplIG5hcnJvd1ByZWNpc2lvbihkb3VibGUgd2lk
dGgsIGRvdWJsZSBoZWlnaHQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GcmFjdGlvbmFsTGF5b3V0UG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UG9pbnQuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRQb2lu
dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZyYWN0aW9uYWxMYXlv
dXRQb2ludF9oCisjZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludF9oCisKKyNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFNpemUuaCIKKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyYWN0
aW9uYWxMYXlvdXRQb2ludCB7CitwdWJsaWM6CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50KCkg
OiBtX3goMCksIG1feSgwKSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoRnJhY3Rpb25h
bExheW91dFVuaXQgeCwgRnJhY3Rpb25hbExheW91dFVuaXQgeSkgOiBtX3goeCksIG1feSh5KSB7
IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSA6IG1f
eChwb2ludC54KCkpLCBtX3kocG9pbnQueSgpKSB7IH0KKyAgICBleHBsaWNpdCBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgc2l6ZSkgOiBtX3goc2l6ZS54KCkpLCBtX3ko
c2l6ZS55KCkpIHsgfQorCisgICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB6ZXJvKCkg
eyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KCk7IH0KKworICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9CisKKyAgICB2b2lkIHNldFgoRnJhY3Rpb25hbExh
eW91dFVuaXQgeCkgeyBtX3ggPSB4OyB9CisgICAgdm9pZCBzZXRZKEZyYWN0aW9uYWxMYXlvdXRV
bml0IHkpIHsgbV95ID0geTsgfQorCisgICAgdm9pZCBtb3ZlKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRTaXplJiBzKSB7IG1vdmUocy53aWR0aCgpLCBzLmhlaWdodCgpKTsgfSAKKyAgICB2b2lkIG1v
dmVCeShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBtb3ZlKG9mZnNldC54
KCksIG9mZnNldC55KCkpOyB9CisgICAgdm9pZCBtb3ZlKEZyYWN0aW9uYWxMYXlvdXRVbml0IGR4
LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkgeyBtX3ggKz0gZHg7IG1feSArPSBkeTsgfQorICAg
IHZvaWQgc2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KQorICAgIHsKKyAgICAgICAgbV94ICo9IHN4
OworICAgICAgICBtX3kgKj0gc3k7CisgICAgfQorICAgIAorICAgIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCBleHBhbmRlZFRvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KHN0ZDo6bWF4KG1f
eCwgb3RoZXIubV94KSwgc3RkOjptYXgobV95LCBvdGhlci5tX3kpKTsKKyAgICB9CisKKyAgICBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQgc2hydW5rVG8oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQoc3RkOjptaW4obV94LCBvdGhlci5tX3gpLCBzdGQ6Om1pbihtX3ksIG90aGVyLm1feSkpOwor
ICAgIH0KKworICAgIHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCisgICAgeworICAgICAgICAq
dGhpcyA9IGV4cGFuZGVkVG8oemVybygpKTsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQgdHJhbnNwb3NlZFBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQobV95LCBtX3gpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBtX3gsIG1feTsKK307CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlv
bmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAgICBhLm1vdmUoYi53aWR0aCgpLCBiLmhlaWdodCgpKTsK
KyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3BlcmF0
b3ItPShGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXpl
JiBiKQoreworICAgIGEubW92ZSgtYi53aWR0aCgpLCAtYi5oZWlnaHQoKSk7CisgICAgcmV0dXJu
IGE7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgb3BlcmF0b3IrKGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7
CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChhLngoKSArIGIud2lkdGgoKSwgYS55
KCkgKyBiLmhlaWdodCgpKTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBvcGVy
YXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChhLngoKSAr
IGIueCgpLCBhLnkoKSArIGIueSgpKTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXpl
IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRQb2ludCYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoYS54
KCkgLSBiLngoKSwgYS55KCkgLSBiLnkoKSk7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2lu
dChhLngoKSAtIGIud2lkdGgoKSwgYS55KCkgLSBiLmhlaWdodCgpKTsKK30KKworaW5saW5lIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50
JiBwb2ludCkKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KC1wb2ludC54KCks
IC1wb2ludC55KCkpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBiKQoreworICAg
IHJldHVybiBhLngoKSA9PSBiLngoKSAmJiBhLnkoKSA9PSBiLnkoKTsKK30KKworaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgYikKK3sKKyAgICByZXR1cm4gYS54KCkgIT0gYi54KCkgfHwgYS55
KCkgIT0gYi55KCk7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgdG9Qb2ludChj
b25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25h
bExheW91dFBvaW50KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Cit9CisKK2lubGluZSBG
cmFjdGlvbmFsTGF5b3V0U2l6ZSB0b1NpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBh
KQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShhLngoKSwgYS55KCkpOworfQor
CitpbmxpbmUgSW50UG9pbnQgZmxvb3JlZEludFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKS50b0ludCgpLCBw
b2ludC55KCkudG9JbnQoKSk7Cit9CisKK2lubGluZSBJbnRQb2ludCByb3VuZGVkSW50UG9pbnQo
Y29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4gSW50UG9p
bnQocG9pbnQueCgpLnJvdW5kKCksIHBvaW50LnkoKS5yb3VuZCgpKTsKK30KKworaW5saW5lIElu
dFBvaW50IGNlaWxlZEludFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQp
Cit7CisgICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKS5jZWlsKCksIHBvaW50LnkoKS5jZWls
KCkpOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZyYWN0aW9u
YWxMYXlvdXRQb2ludF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
cmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx
MiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZyYWN0aW9uYWxMYXlvdXRSZWN0OjpGcmFjdGlvbmFs
TGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCisgICAgOiBtX2xvY2F0aW9uKEZyYWN0aW9u
YWxMYXlvdXRQb2ludChyLmxvY2F0aW9uKCkpKQorICAgICwgbV9zaXplKEZyYWN0aW9uYWxMYXlv
dXRTaXplKHIuc2l6ZSgpKSkKK3sKK30KKworYm9vbCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6aW50
ZXJzZWN0cyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpIGNvbnN0Cit7CisgICAg
Ly8gQ2hlY2tpbmcgZW1wdGluZXNzIGhhbmRsZXMgbmVnYXRpdmUgd2lkdGhzIGFzIHdlbGwgYXMg
emVyby4KKyAgICByZXR1cm4gIWlzRW1wdHkoKSAmJiAhb3RoZXIuaXNFbXB0eSgpCisgICAgICAg
ICYmIHgoKSA8IG90aGVyLm1heFgoKSAmJiBvdGhlci54KCkgPCBtYXhYKCkKKyAgICAgICAgJiYg
eSgpIDwgb3RoZXIubWF4WSgpICYmIG90aGVyLnkoKSA8IG1heFkoKTsKK30KKworYm9vbCBGcmFj
dGlvbmFsTGF5b3V0UmVjdDo6Y29udGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90
aGVyKSBjb25zdAoreworICAgIHJldHVybiB4KCkgPD0gb3RoZXIueCgpICYmIG1heFgoKSA+PSBv
dGhlci5tYXhYKCkKKyAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBtYXhZKCkgPj0gb3Ro
ZXIubWF4WSgpOworfQorCit2b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0OjppbnRlcnNlY3QoY29u
c3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKQoreworICAgIEZyYWN0aW9uYWxMYXlvdXRV
bml0IG5ld1ggPSBzdGQ6Om1heCh4KCksIG90aGVyLngoKSk7CisgICAgRnJhY3Rpb25hbExheW91
dFVuaXQgbmV3WSA9IHN0ZDo6bWF4KHkoKSwgb3RoZXIueSgpKTsKKyAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBuZXdNYXhYID0gc3RkOjptaW4obWF4WCgpLCBvdGhlci5tYXhYKCkpOworICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0IG5ld01heFkgPSBzdGQ6Om1pbihtYXhZKCksIG90aGVyLm1heFko
KSk7CisKKyAgICAvLyBSZXR1cm4gYSBjbGVhbiBlbXB0eSByZWN0YW5nbGUgZm9yIG5vbi1pbnRl
cnNlY3RpbmcgY2FzZXMuCisgICAgaWYgKG5ld1ggPj0gbmV3TWF4WCB8fCBuZXdZID49IG5ld01h
eFkpIHsKKyAgICAgICAgbmV3WCA9IDA7CisgICAgICAgIG5ld1kgPSAwOworICAgICAgICBuZXdN
YXhYID0gMDsKKyAgICAgICAgbmV3TWF4WSA9IDA7CisgICAgfQorCisgICAgbV9sb2NhdGlvbi5z
ZXRYKG5ld1gpOworICAgIG1fbG9jYXRpb24uc2V0WShuZXdZKTsKKyAgICBtX3NpemUuc2V0V2lk
dGgobmV3TWF4WCAtIG5ld1gpOworICAgIG1fc2l6ZS5zZXRIZWlnaHQobmV3TWF4WSAtIG5ld1kp
OworfQorCit2b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0Ojp1bml0ZShjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UmVjdCYgb3RoZXIpCit7CisgICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNpYWwgY2FzZXMg
Zmlyc3QuCisgICAgaWYgKG90aGVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
IChpc0VtcHR5KCkpIHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG5ld1ggPSBzdGQ6Om1pbih4KCksIG90
aGVyLngoKSk7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbmV3WSA9IHN0ZDo6bWluKHkoKSwg
b3RoZXIueSgpKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBuZXdNYXhYID0gc3RkOjptYXgo
bWF4WCgpLCBvdGhlci5tYXhYKCkpOworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG5ld01heFkg
PSBzdGQ6Om1heChtYXhZKCksIG90aGVyLm1heFkoKSk7CisKKyAgICBtX2xvY2F0aW9uLnNldFgo
bmV3WCk7CisgICAgbV9sb2NhdGlvbi5zZXRZKG5ld1kpOworICAgIG1fc2l6ZS5zZXRXaWR0aChu
ZXdNYXhYIC0gbmV3WCk7CisgICAgbV9zaXplLnNldEhlaWdodChuZXdNYXhZIC0gbmV3WSk7Cit9
CisKK3ZvaWQgRnJhY3Rpb25hbExheW91dFJlY3Q6OnVuaXRlSWZOb25aZXJvKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikKK3sKKyAgICAvLyBIYW5kbGUgZW1wdHkgc3BlY2lhbCBj
YXNlcyBmaXJzdC4KKyAgICBpZiAoIW90aGVyLndpZHRoKCkgJiYgIW90aGVyLmhlaWdodCgpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKCF3aWR0aCgpICYmICFoZWlnaHQoKSkgeworICAgICAg
ICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRnJhY3Rpb25h
bExheW91dFVuaXQgbmV3WCA9IHN0ZDo6bWluKHgoKSwgb3RoZXIueCgpKTsKKyAgICBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBuZXdZID0gc3RkOjptaW4oeSgpLCBvdGhlci55KCkpOworICAgIEZyYWN0
aW9uYWxMYXlvdXRVbml0IG5ld01heFggPSBzdGQ6Om1heChtYXhYKCksIG90aGVyLm1heFgoKSk7
CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbmV3TWF4WSA9IHN0ZDo6bWF4KG1heFkoKSwgb3Ro
ZXIubWF4WSgpKTsKKworICAgIG1fbG9jYXRpb24uc2V0WChuZXdYKTsKKyAgICBtX2xvY2F0aW9u
LnNldFkobmV3WSk7CisgICAgbV9zaXplLnNldFdpZHRoKG5ld01heFggLSBuZXdYKTsKKyAgICBt
X3NpemUuc2V0SGVpZ2h0KG5ld01heFkgLSBuZXdZKTsKK30KKwordm9pZCBGcmFjdGlvbmFsTGF5
b3V0UmVjdDo6c2NhbGUoZmxvYXQgcykKK3sKKyAgICBtX2xvY2F0aW9uLnNldFgoeCgpICogcyk7
CisgICAgbV9sb2NhdGlvbi5zZXRZKHkoKSAqIHMpOworICAgIG1fc2l6ZS5zZXRXaWR0aCh3aWR0
aCgpICogcyk7CisgICAgbV9zaXplLnNldEhlaWdodChoZWlnaHQoKSAqIHMpOworfQorCitGcmFj
dGlvbmFsTGF5b3V0UmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEZyYWN0aW9uYWxMYXlvdXRS
ZWN0PiYgcmVjdHMpCit7CisgICAgRnJhY3Rpb25hbExheW91dFJlY3QgcmVzdWx0OworCisgICAg
c2l6ZV90IGNvdW50ID0gcmVjdHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkKKyAgICAgICAgcmVzdWx0LnVuaXRlKHJlY3RzW2ldKTsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK0ludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UmVjdCYgcmVjdCkKK3sKKyAgICBmbG9hdCB4ID0gZmxvb3JmKHJlY3QueCgpLnRvRmxv
YXQoKSk7CisgICAgZmxvYXQgeSA9IGZsb29yZihyZWN0LnkoKS50b0Zsb2F0KCkpOworICAgIGZs
b2F0IHdpZHRoID0gY2VpbGYocmVjdC5tYXhYKCkudG9GbG9hdCgpKSAtIHg7CisgICAgZmxvYXQg
aGVpZ2h0ID0gY2VpbGYocmVjdC5tYXhZKCkudG9GbG9hdCgpKSAtIHk7CisKKyAgICByZXR1cm4g
SW50UmVjdChjbGFtcFRvSW50ZWdlcih4KSwgY2xhbXBUb0ludGVnZXIoeSksIAorICAgICAgICAg
ICAgICAgICAgIGNsYW1wVG9JbnRlZ2VyKHdpZHRoKSwgY2xhbXBUb0ludGVnZXIoaGVpZ2h0KSk7
Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRSZWN0IGVuY2xvc2luZ0ZyYWN0aW9uYWxMYXlvdXRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFJl
Y3QocmVjdC54KCksIHJlY3QueSgpLAorICAgICAgICAgICAgICAgICAgICAgcmVjdC5tYXhYKCkg
LSByZWN0LngoKSArIEZyYWN0aW9uYWxMYXlvdXRVbml0OjplcHNpbG9uKCksCisgICAgICAgICAg
ICAgICAgICAgICByZWN0Lm1heFkoKSAtIHJlY3QueSgpICsgRnJhY3Rpb25hbExheW91dFVuaXQ6
OmVwc2lsb24oKSk7Cit9CisKK0ludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UmVjdCYgcmVjdCkKK3sKKyAgICBJbnRQb2ludCByb3VuZGVkTG9jYXRpb24g
PSByb3VuZGVkSW50UG9pbnQocmVjdC5sb2NhdGlvbigpKTsKKyAgICByZXR1cm4gSW50UmVjdChy
b3VuZGVkTG9jYXRpb24sIEludFNpemUoKHJlY3QueCgpICsgcmVjdC53aWR0aCgpKS5yb3VuZCgp
IC0gcm91bmRlZExvY2F0aW9uLngoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSkucm91bmQoKSAtIHJvdW5kZWRM
b2NhdGlvbi55KCkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0
UmVjdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RnJhY3Rpb25hbExheW91dFJlY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBGcmFjdGlvbmFsTGF5b3V0UmVjdF9oCisjZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRSZWN0
X2gKKworI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRQb2ludC5oIgorI2luY2x1ZGUgIkludFJl
Y3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRmxvYXRSZWN0OworCitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0UmVjdCB7CitwdWJsaWM6
CisgICAgRnJhY3Rpb25hbExheW91dFJlY3QoKSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0UmVj
dChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBtX2xvY2F0aW9uKGxvY2F0aW9uKSwgbV9zaXpl
KHNpemUpIHsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0KEZyYWN0aW9uYWxMYXlvdXRVbml0
IHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHksIEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoLCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQpCisgICAgICAgIDogbV9sb2NhdGlvbihGcmFjdGlv
bmFsTGF5b3V0UG9pbnQoeCwgeSkpLCBtX3NpemUoRnJhY3Rpb25hbExheW91dFNpemUod2lkdGgs
IGhlaWdodCkpIHsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UG9pbnQm
IGxvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDogbV9sb2NhdGlvbihs
b2NhdGlvbiksIG1fc2l6ZShzaXplKSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25z
dCBJbnRSZWN0JiByZWN0KSA6IG1fbG9jYXRpb24ocmVjdC5sb2NhdGlvbigpKSwgbV9zaXplKHJl
Y3Quc2l6ZSgpKSB7IH0KKworICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3Nz
eQorICAgICAgICAKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2xvY2F0aW9uOyB9CisgICAgRnJhY3Rpb25hbExheW91dFNpemUgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmIGxvY2F0aW9uKSB7IG1fbG9jYXRpb24gPSBsb2NhdGlvbjsgfQor
ICAgIHZvaWQgc2V0U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX3Np
emUgPSBzaXplOyB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KCkgY29uc3QgeyByZXR1
cm4gbV9sb2NhdGlvbi54KCk7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KCkgY29uc3Qg
eyByZXR1cm4gbV9sb2NhdGlvbi55KCk7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtYXhY
KCkgY29uc3QgeyByZXR1cm4geCgpICsgd2lkdGgoKTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRV
bml0IG1heFkoKSBjb25zdCB7IHJldHVybiB5KCkgKyBoZWlnaHQoKTsgfQorICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zaXplLndpZHRoKCk7IH0KKyAg
ICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaGVp
Z2h0KCk7IH0KKworICAgIHZvaWQgc2V0WChGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KSB7IG1fbG9j
YXRpb24uc2V0WCh4KTsgfQorICAgIHZvaWQgc2V0WShGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KSB7
IG1fbG9jYXRpb24uc2V0WSh5KTsgfQorICAgIHZvaWQgc2V0V2lkdGgoRnJhY3Rpb25hbExheW91
dFVuaXQgd2lkdGgpIHsgbV9zaXplLnNldFdpZHRoKHdpZHRoKTsgfQorICAgIHZvaWQgc2V0SGVp
Z2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkgeyBtX3NpemUuc2V0SGVpZ2h0KGhlaWdo
dCk7IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5
KCk7IH0KKworICAgIC8vIE5PVEU6IFRoZSByZXN1bHQgaXMgcm91bmRlZCB0byBpbnRlZ2VyIHZh
bHVlcywgYW5kIHRodXMgbWF5IGJlIG5vdCB0aGUgZXhhY3QKKyAgICAvLyBjZW50ZXIgcG9pbnQu
CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IGNlbnRlcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRQb2ludCh4KCkgKyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsg
fQorCisgICAgdm9pZCBtb3ZlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1f
bG9jYXRpb24gKz0gc2l6ZTsgfSAKKyAgICB2b2lkIG1vdmVCeShjb25zdCBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQmIG9mZnNldCkgeyBtX2xvY2F0aW9uLm1vdmUob2Zmc2V0LngoKSwgb2Zmc2V0Lnko
KSk7IH0KKyAgICB2b2lkIG1vdmUoRnJhY3Rpb25hbExheW91dFVuaXQgZHgsIEZyYWN0aW9uYWxM
YXlvdXRVbml0IGR5KSB7IG1fbG9jYXRpb24ubW92ZShkeCwgZHkpOyB9IAorCisgICAgdm9pZCBl
eHBhbmQoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIHsgbV9zaXplICs9IHNpemU7
IH0KKyAgICB2b2lkIGV4cGFuZChGcmFjdGlvbmFsTGF5b3V0VW5pdCBkdywgRnJhY3Rpb25hbExh
eW91dFVuaXQgZGgpIHsgbV9zaXplLmV4cGFuZChkdywgZGgpOyB9CisgICAgdm9pZCBjb250cmFj
dChjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX3NpemUgLT0gc2l6ZTsgfQor
ICAgIHZvaWQgY29udHJhY3QoRnJhY3Rpb25hbExheW91dFVuaXQgZHcsIEZyYWN0aW9uYWxMYXlv
dXRVbml0IGRoKSB7IG1fc2l6ZS5leHBhbmQoLWR3LCAtZGgpOyB9CisKKyAgICB2b2lkIHNoaWZ0
WEVkZ2VUbyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBlZGdlKQorICAgIHsKKyAgICAgICAgRnJhY3Rp
b25hbExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0geCgpOworICAgICAgICBzZXRYKGVkZ2UpOwor
ICAgICAgICBzZXRXaWR0aChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwgd2lkdGgo
KSAtIGRlbHRhKSk7CisgICAgfQorICAgIHZvaWQgc2hpZnRNYXhYRWRnZVRvKEZyYWN0aW9uYWxM
YXlvdXRVbml0IGVkZ2UpCisgICAgeworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkZWx0
YSA9IGVkZ2UgLSBtYXhYKCk7CisgICAgICAgIHNldFdpZHRoKHN0ZDo6bWF4PEZyYWN0aW9uYWxM
YXlvdXRVbml0PigwLCB3aWR0aCgpICsgZGVsdGEpKTsKKyAgICB9CisgICAgdm9pZCBzaGlmdFlF
ZGdlVG8oRnJhY3Rpb25hbExheW91dFVuaXQgZWRnZSkKKyAgICB7CisgICAgICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAtIHkoKTsKKyAgICAgICAgc2V0WShlZGdlKTsKKyAg
ICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4PEZyYWN0aW9uYWxMYXlvdXRVbml0PigwLCBoZWlnaHQo
KSAtIGRlbHRhKSk7CisgICAgfQorICAgIHZvaWQgc2hpZnRNYXhZRWRnZVRvKEZyYWN0aW9uYWxM
YXlvdXRVbml0IGVkZ2UpCisgICAgeworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkZWx0
YSA9IGVkZ2UgLSBtYXhZKCk7CisgICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxGcmFjdGlvbmFs
TGF5b3V0VW5pdD4oMCwgaGVpZ2h0KCkgKyBkZWx0YSkpOworICAgIH0KKworICAgIEZyYWN0aW9u
YWxMYXlvdXRQb2ludCBtaW5YTWluWUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247
IH0gLy8gdHlwaWNhbGx5IHRvcExlZnQKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWF4WE1p
bllDb3JuZXIoKSBjb25zdCB7IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQobV9sb2NhdGlv
bi54KCkgKyBtX3NpemUud2lkdGgoKSwgbV9sb2NhdGlvbi55KCkpOyB9IC8vIHR5cGljYWxseSB0
b3BSaWdodAorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtaW5YTWF4WUNvcm5lcigpIGNvbnN0
IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX2xvY2F0aW9uLngoKSwgbV9sb2NhdGlv
bi55KCkgKyBtX3NpemUuaGVpZ2h0KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21MZWZ0CisgICAg
RnJhY3Rpb25hbExheW91dFBvaW50IG1heFhNYXhZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFBvaW50KG1fbG9jYXRpb24ueCgpICsgbV9zaXplLndpZHRoKCksIG1fbG9j
YXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90dG9tUmlnaHQK
KyAgICAKKyAgICBib29sIGludGVyc2VjdHMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKSBj
b25zdDsKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JikgY29u
c3Q7CisKKyAgICAvLyBUaGlzIGNoZWNrcyB0byBzZWUgaWYgdGhlIHJlY3QgY29udGFpbnMgeCx5
IGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZS4KKyAgICAvLyBFcXVpdmFsZW50IHRvIGNoZWNraW5n
IGlmIHRoZSByZWN0IGNvbnRhaW5zIGEgMXgxIHJlY3QgYmVsb3cgYW5kIHRvIHRoZSByaWdodCBv
ZiAocHgscHkpLgorICAgIGJvb2wgY29udGFpbnMoRnJhY3Rpb25hbExheW91dFVuaXQgcHgsIEZy
YWN0aW9uYWxMYXlvdXRVbml0IHB5KSBjb25zdAorICAgICAgICB7IHJldHVybiBweCA+PSB4KCkg
JiYgcHggPCBtYXhYKCkgJiYgcHkgPj0geSgpICYmIHB5IDwgbWF4WSgpOyB9CisgICAgYm9vbCBj
b250YWlucyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdCB7IHJldHVy
biBjb250YWlucyhwb2ludC54KCksIHBvaW50LnkoKSk7IH0KKworICAgIHZvaWQgaW50ZXJzZWN0
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7CisgICAgdm9pZCB1bml0ZShjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UmVjdCYpOworICAgIHZvaWQgdW5pdGVJZk5vblplcm8oY29uc3QgRnJhY3Rp
b25hbExheW91dFJlY3QmKTsKKworICAgIHZvaWQgaW5mbGF0ZVgoRnJhY3Rpb25hbExheW91dFVu
aXQgZHgpCisgICAgeworICAgICAgICBtX2xvY2F0aW9uLnNldFgobV9sb2NhdGlvbi54KCkgLSBk
eCk7CisgICAgICAgIG1fc2l6ZS5zZXRXaWR0aChtX3NpemUud2lkdGgoKSArIGR4ICsgZHgpOwor
ICAgIH0KKyAgICB2b2lkIGluZmxhdGVZKEZyYWN0aW9uYWxMYXlvdXRVbml0IGR5KQorICAgIHsK
KyAgICAgICAgbV9sb2NhdGlvbi5zZXRZKG1fbG9jYXRpb24ueSgpIC0gZHkpOworICAgICAgICBt
X3NpemUuc2V0SGVpZ2h0KG1fc2l6ZS5oZWlnaHQoKSArIGR5ICsgZHkpOworICAgIH0KKyAgICB2
b2lkIGluZmxhdGUoRnJhY3Rpb25hbExheW91dFVuaXQgZCkgeyBpbmZsYXRlWChkKTsgaW5mbGF0
ZVkoZCk7IH0KKyAgICB2b2lkIHNjYWxlKGZsb2F0IHMpOworCisgICAgRnJhY3Rpb25hbExheW91
dFJlY3QgdHJhbnNwb3NlZFJlY3QoKSBjb25zdCB7IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UmVj
dChtX2xvY2F0aW9uLnRyYW5zcG9zZWRQb2ludCgpLCBtX3NpemUudHJhbnNwb3NlZFNpemUoKSk7
IH0KKworICAgIHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0UmVjdCBpbmZpbml0ZVJlY3QoKSB7cmV0
dXJuIEZyYWN0aW9uYWxMYXlvdXRSZWN0KEZyYWN0aW9uYWxMYXlvdXRVbml0OjptaW4oKSAvIDIs
IEZyYWN0aW9uYWxMYXlvdXRVbml0OjptaW4oKSAvIDIsIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpt
YXgoKSwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpKTsgfQorCitwcml2YXRlOgorICAgIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCBtX2xvY2F0aW9uOworICAgIEZyYWN0aW9uYWxMYXlvdXRTaXpl
IG1fc2l6ZTsKK307CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0UmVjdCBpbnRlcnNlY3Rpb24o
Y29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0
JiBiKQoreworICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGMgPSBhOworICAgIGMuaW50ZXJzZWN0
KGIpOworICAgIHJldHVybiBjOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFJlY3QgdW5p
b25SZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0UmVjdCYgYikKK3sKKyAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCBjID0gYTsKKyAgICBjLnVu
aXRlKGIpOworICAgIHJldHVybiBjOworfQorCitGcmFjdGlvbmFsTGF5b3V0UmVjdCB1bmlvblJl
Y3QoY29uc3QgVmVjdG9yPEZyYWN0aW9uYWxMYXlvdXRSZWN0PiYpOworCitpbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UmVjdCYgYikKK3sKKyAgICByZXR1cm4gYS5sb2NhdGlvbigpID09IGIubG9jYXRpb24o
KSAmJiBhLnNpemUoKSA9PSBiLnNpemUoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3Qm
IGIpCit7CisgICAgcmV0dXJuIGEubG9jYXRpb24oKSAhPSBiLmxvY2F0aW9uKCkgfHwgYS5zaXpl
KCkgIT0gYi5zaXplKCk7Cit9CisKK0ludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UmVjdCYpOworRnJhY3Rpb25hbExheW91dFJlY3QgZW5jbG9zaW5nRnJhY3Rp
b25hbExheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CitJbnRSZWN0IHBpeGVsU25hcHBlZElu
dFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRnJhY3Rpb25hbExheW91dFJlY3RfaApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRT
aXplLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZyYWN0aW9uYWxMYXlvdXRTaXplLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFNpemUuaCIKKwor
I2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRQb2ludC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0ludFNpemUgcGl4ZWxTbmFwcGVkSW50U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6
ZSYgcywgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwKQoreworICAgIHJldHVybiBJbnRT
aXplKHNuYXBTaXplVG9QaXhlbChzLndpZHRoKCksIHAueCgpKSwgc25hcFNpemVUb1BpeGVsKHMu
aGVpZ2h0KCksIHAueSgpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRTaXplLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExh
eW91dFNpemUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZyYWN0aW9uYWxMYXlvdXRTaXplLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUyIEBA
CisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgRnJhY3Rpb25hbExheW91dFNpemVfaAorI2RlZmluZSBGcmFjdGlvbmFsTGF5b3V0
U2l6ZV9oCisKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5
b3V0VW5pdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQ7CisKK2NsYXNzIEZyYWN0aW9uYWxMYXlvdXRT
aXplIHsKK3B1YmxpYzoKKyAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSgpIDogbV93aWR0aCgwKSwg
bV9oZWlnaHQoMCkgeyB9CisgICAgRnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgSW50U2l6ZSYg
c2l6ZSkgOiBtX3dpZHRoKHNpemUud2lkdGgoKSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpIHsg
fQorICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplKEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoLCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQpIDogbV93aWR0aCh3aWR0aCksIG1faGVpZ2h0KGhl
aWdodCkgeyB9CisKKyAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBGbG9h
dFNpemUmIHNpemUpIDogbV93aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdo
dCgpKSB7IH0KKyAgICAKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fd2lkdGg7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25z
dCB7IHJldHVybiBtX2hlaWdodDsgfQorCisgICAgdm9pZCBzZXRXaWR0aChGcmFjdGlvbmFsTGF5
b3V0VW5pdCB3aWR0aCkgeyBtX3dpZHRoID0gd2lkdGg7IH0KKyAgICB2b2lkIHNldEhlaWdodChG
cmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQpIHsgbV9oZWlnaHQgPSBoZWlnaHQ7IH0KKworICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGggPD0gMCB8fCBtX2hlaWdodCA8
PSAwOyB9CisgICAgYm9vbCBpc1plcm8oKSBjb25zdCB7IHJldHVybiAhbV93aWR0aCAmJiAhbV9o
ZWlnaHQ7IH0KKworICAgIGZsb2F0IGFzcGVjdFJhdGlvKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG1fd2lkdGgpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1faGVpZ2h0KTsgfQor
ICAgIAorICAgIHZvaWQgZXhwYW5kKEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoLCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBoZWlnaHQpCisgICAgeworICAgICAgICBtX3dpZHRoICs9IHdpZHRoOwor
ICAgICAgICBtX2hlaWdodCArPSBoZWlnaHQ7CisgICAgfQorICAgIAorICAgIHZvaWQgc2NhbGUo
ZmxvYXQgc2NhbGUpCisgICAgeworICAgICAgICBtX3dpZHRoID0gc3RhdGljX2Nhc3Q8aW50Pihz
dGF0aWNfY2FzdDxmbG9hdD4obV93aWR0aCkgKiBzY2FsZSk7CisgICAgICAgIG1faGVpZ2h0ID0g
c3RhdGljX2Nhc3Q8aW50PihzdGF0aWNfY2FzdDxmbG9hdD4obV9oZWlnaHQpICogc2NhbGUpOwor
ICAgIH0KKyAgICAKKyAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBleHBhbmRlZFRvKGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRTaXplJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBG
cmFjdGlvbmFsTGF5b3V0U2l6ZShtX3dpZHRoID4gb3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBv
dGhlci5tX3dpZHRoLAorICAgICAgICAgICAgbV9oZWlnaHQgPiBvdGhlci5tX2hlaWdodCA/IG1f
aGVpZ2h0IDogb3RoZXIubV9oZWlnaHQpOworICAgIH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRT
aXplIHNocnVua1RvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShtX3dpZHRoIDwgb3RoZXIu
bV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAorICAgICAgICAgICAgbV9oZWlnaHQg
PCBvdGhlci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3RoZXIubV9oZWlnaHQpOworICAgIH0KKwor
ICAgIHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCisgICAgeworICAgICAgICAqdGhpcyA9IGV4
cGFuZGVkVG8oRnJhY3Rpb25hbExheW91dFNpemUoKSk7CisgICAgfQorCisgICAgRnJhY3Rpb25h
bExheW91dFNpemUgdHJhbnNwb3NlZFNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IEZyYWN0aW9uYWxMYXlvdXRTaXplKG1faGVpZ2h0LCBtX3dpZHRoKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbV93aWR0aCwgbV9oZWlnaHQ7Cit9OworCitp
bmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFNp
emUmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoreworICAgIGEuc2V0V2lkdGgo
YS53aWR0aCgpICsgYi53aWR0aCgpKTsKKyAgICBhLnNldEhlaWdodChhLmhlaWdodCgpICsgYi5o
ZWlnaHQoKSk7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6
ZSYgb3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExh
eW91dFNpemUmIGIpCit7CisgICAgYS5zZXRXaWR0aChhLndpZHRoKCkgLSBiLndpZHRoKCkpOwor
ICAgIGEuc2V0SGVpZ2h0KGEuaGVpZ2h0KCkgLSBiLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsK
K30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIG9wZXJhdG9yKyhjb25zdCBGcmFjdGlv
bmFsTGF5b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAg
cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKGEud2lkdGgoKSArIGIud2lkdGgoKSwgYS5oZWln
aHQoKSArIGIuaGVpZ2h0KCkpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgb3Bl
cmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoYS53aWR0aCgp
IC0gYi53aWR0aCgpLCBhLmhlaWdodCgpIC0gYi5oZWlnaHQoKSk7Cit9CisKK2lubGluZSBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNp
emUpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKC1zaXplLndpZHRoKCksIC1z
aXplLmhlaWdodCgpKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlv
bmFsTGF5b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAg
cmV0dXJuIGEud2lkdGgoKSA9PSBiLndpZHRoKCkgJiYgYS5oZWlnaHQoKSA9PSBiLmhlaWdodCgp
OworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXpl
JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53aWR0
aCgpICE9IGIud2lkdGgoKSB8fCBhLmhlaWdodCgpICE9IGIuaGVpZ2h0KCk7Cit9CisKK2lubGlu
ZSBJbnRTaXplIGZsb29yZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzKQor
eworICAgIHJldHVybiBJbnRTaXplKHMud2lkdGgoKS50b0ludCgpLCBzLmhlaWdodCgpLnRvSW50
KCkpOworfQorCitpbmxpbmUgSW50U2l6ZSByb3VuZGVkSW50U2l6ZShjb25zdCBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSYgcykKK3sKKyAgICByZXR1cm4gSW50U2l6ZShzLndpZHRoKCkucm91bmQoKSwg
cy5oZWlnaHQoKS5yb3VuZCgpKTsKK30KKworSW50U2l6ZSBwaXhlbFNuYXBwZWRJbnRTaXplKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50Jik7
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZyYWN0aW9uYWxMYXlvdXRT
aXplX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3Qu
Y3BwCShyZXZpc2lvbiAxMDc3NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbnRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKIAorI2luY2x1ZGUgIkZyYWN0aW9uYWxM
YXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGht
PgogCkBAIC00MCw2ICs0MSwxMiBAQCBJbnRSZWN0OjpJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cikKIHsKIH0KIAorSW50UmVjdDo6SW50UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYg
cikKKyAgICA6IG1fbG9jYXRpb24oZmxvb3JlZEludFBvaW50KHIubG9jYXRpb24oKSkpCisgICAg
LCBtX3NpemUoZmxvb3JlZEludFNpemUoci5zaXplKCkpKQoreworfQorCiBib29sIEludFJlY3Q6
OmludGVyc2VjdHMoY29uc3QgSW50UmVjdCYgb3RoZXIpIGNvbnN0CiB7CiAgICAgLy8gQ2hlY2tp
bmcgZW1wdGluZXNzIGhhbmRsZXMgbmVnYXRpdmUgd2lkdGhzIGFzIHdlbGwgYXMgemVyby4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHJldmlzaW9u
IDEwNzc0MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQCBzdHJ1Y3QgU2tJUmVjdDsKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgRnJhY3Rpb25hbExheW91dFJl
Y3Q7CiAKIGNsYXNzIEludFJlY3QgewogcHVibGljOgpAQCAtODAsNyArODEsOCBAQCBwdWJsaWM6
CiAgICAgSW50UmVjdChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICAg
ICAgOiBtX2xvY2F0aW9uKEludFBvaW50KHgsIHkpKSwgbV9zaXplKEludFNpemUod2lkdGgsIGhl
aWdodCkpIHsgfQogCi0gICAgZXhwbGljaXQgSW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
OyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQorICAgIGV4cGxp
Y2l0IEludFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRs
eSBzaW5jZSBpdCdzIGxvc3N5CisgICAgZXhwbGljaXQgSW50UmVjdChjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UmVjdCYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3Nz
eQogICAgICAgICAKICAgICBJbnRQb2ludCBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbG9j
YXRpb247IH0KICAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127262</attachid>
            <date>2012-02-15 16:00:58 -0800</date>
            <delta_ts>2012-02-16 06:07:48 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-76571-20120215160057.patch</filename>
            <type>text/plain</type>
            <size>54921</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDEyLTAyLTE0ICBFbWlsIEEg
RWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4gYW5kIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIEFkZCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQvU2l6ZS9SZWN0
IGZvciBzdWItcGl4ZWwgbGF5b3V0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NjU3MQorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgor
CisgICAgICAgIEFkZCBmaXhlZCBwb2ludCB2ZXJzaW9ucyBvZiB0aGUgUG9pbnQsIFNpemUgYW5k
IFJlY3QgY2xhc3NlcyB1c2luZworICAgICAgICB0aGUgbmV3IEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCB0eXBlIGFuZC4KKworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQsIEZyYWN0aW9uYWxM
YXlvdXRTaXplIGFuZCBGcmFjdGlvbmFsTGF5b3V0UmVjdCBhcmUKKyAgICAgICAgUG9pbnQsIFNp
emUgYW5kIFJlY3QgaW1wbGVtZW50YXRpb25zIHJlc3BlY3RpdmVseSB1c2luZyB0aGlzIG5ldyB0
eXBlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIFdlYkNvcmUub3JkZXI6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHBsYXRmb3JtL0ZyYWN0aW9uYWxMYXlvdXRVbml0Lmg6CisgICAgICAgIEZp
eGVkIGEgY291cGxlIG9mIHR5cG9zIGFuZCBzaWduZWQvdW5zaWduZWQgYnVncy4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RmxvYXRQb2ludDo6RmxvYXRQb2ludCk6CisgICAgICAgIEFkZCBleHBsaWNpdCBGbG9hdFBvaW50
KEZyYWN0aW9uYWxMYXlvdXRQb2ludCkgY29uc3RydWN0b3IuCisgICAgICAgIAorICAgICAgICAo
V2ViQ29yZTo6RmxvYXRQb2ludDo6bW92ZSk6CisgICAgICAgIEFkZCBtb3ZlKEZyYWN0aW9uYWxM
YXlvdXRTaXplKSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpG
bG9hdFBvaW50Ojptb3ZlQnkpOgorICAgICAgICBBZGQgbW92ZUJ5KEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCkgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFBvaW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6RmxvYXRSZWN0KToKKyAgICAgICAgQWRkIGV4cGxp
Y2l0IEZsb2F0UmVjdEZyYWN0aW9uYWxMYXlvdXRSZWN0KSBjb25zdHJ1Y3Rvci4KKyAgICAgICAg
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0Lmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKEZsb2F0UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRTaXplLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0U2l6ZTo6RmxvYXRTaXplKToK
KyAgICAgICAgQWRkIGV4cGxpY2l0IEZsb2F0U2l6ZShGcmFjdGlvbmFsTGF5b3V0U2l6ZSkgY29u
c3RydWN0b3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UG9pbnQuaDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5o
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0U2l6
ZS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlv
dXRTaXplLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6SW50UmVjdCk6CisgICAgICAgIEFkZCBleHBs
aWNpdCBJbnRSZWN0KEZyYWN0aW9uYWxMYXlvdXRSZWN0KSBjb25zdHJ1Y3Rvci4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaDoKKwogMjAxMi0wMi0xNSAgQW5kZXJzIENh
cmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFdoZWVsIGV2ZW50cyBzaG91
bGQgYmUgcmUtZGlzcGF0Y2hlZCB0byB0aGUgc2Nyb2xsaW5nIHRocmVhZApJbmRleDogU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQJKHJldmlzaW9uIDEwNzg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDk4LDYgKzEwOTgsOCBAQCBTRVQoV2ViQ29yZV9T
T1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2Vu
ZXJhdGVkSW1hZ2UuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJl
Y3QuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFBvaW50M0QuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcApJ
bmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMDc4NDEpCisrKyBT
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yOTU3
LDYgKzI5NTcsMTEgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUdhdXNzaWFuQmx1ck5FT04uaCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0vRkVMaWdodGluZ05FT04uY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUxpZ2h0
aW5nTkVPTi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFs
TGF5b3V0UG9pbnQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFJlY3QuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
cmFjdGlvbmFsTGF5b3V0UmVjdC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GcmFjdGlvbmFsTGF5b3V0U2l6ZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRTaXplLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UG9pbnQzRC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFBvaW50LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMDc4NDEp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTMwMDks
NiArMzAwOSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2Vu
ZXJhdGVkSW1hZ2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2Zh
ZGVHZW5lcmF0ZWRJbWFnZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9FeHRl
bnNpb25zM0QuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExh
eW91dFJlY3QuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFs
TGF5b3V0U2l6ZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9p
bnQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwJywKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5vcmRlcgkocmV2aXNpb24gMTA3ODQxKQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5vcmRlcgkod29ya2luZyBjb3B5KQpAQCAtMTAzMjAsNyArMTAzMjAsNyBAQCBfX1pON1dl
YkNvcmU5Q1NTUGFyc2VyMTFwYXJzZUNhbnZhc0VSTjNXCiBfX1pOSzdXZWJDb3JlOENTU1ZhbHVl
MTJpc0ltYWdlVmFsdWVFdgogX19aTks3V2ViQ29yZTIyQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTIx
aXNJbWFnZUdlbmVyYXRvclZhbHVlRXYKIF9fWk43V2ViQ29yZTIyQ1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZTE0Z2VuZXJhdGVkSW1hZ2VFdgotX19aTks3V2ViQ29yZTE0Q1NTQ2FudmFzVmFsdWUxMWlz
Rml4ZWRTaXplRXYKK19fWk5LN1dlYkNvcmUxNENTU0NhbnZhc1ZhbHVlMTFpc0ZyYWN0aW9uYWxM
YXlvdXRTaXplRXYKIF9fWk43V2ViQ29yZTE5U3R5bGVHZW5lcmF0ZWRJbWFnZTlhZGRDbGllbnRF
UE5TXzEyUmVuZGVyT2JqZWN0RQogX19aTjdXZWJDb3JlMjJDU1NJbWFnZUdlbmVyYXRvclZhbHVl
OWFkZENsaWVudEVQTlNfMTJSZW5kZXJPYmplY3RFUktOU183SW50U2l6ZUUKIF9fWk43V2ViQ29y
ZTQ2anNEb2N1bWVudFByb3RvdHlwZUZ1bmN0aW9uR2V0Q1NTQ2FudmFzQ29udGV4dEVQTjNKU0M5
RXhlY1N0YXRlRQpAQCAtMTA0NTQsNyArMTA0NTQsNyBAQCBfX1pON1dlYkNvcmUxNUNTU1JlZmxl
Y3RWYWx1ZUQwRXYKIF9fWk43V2ViQ29yZTlDU1NQYXJzZXIxNnBhcnNlQm9yZGVySW1hZ2VFaWJS
TjNXVEY2UmVmUHRySU5TXzhDU1NWYWx1ZUVFRQogX19aTjdXZWJDb3JlMjNCb3JkZXJJbWFnZVBh
cnNlQ29udGV4dDE3Y29tbWl0Qm9yZGVySW1hZ2VFUE5TXzlDU1NQYXJzZXJFYgogX19aTjdXZWJD
b3JlMjNCb3JkZXJJbWFnZVBhcnNlQ29udGV4dEQxRXYKLV9fWk5LN1dlYkNvcmUyMkNTU0ltYWdl
R2VuZXJhdG9yVmFsdWUxMWlzRml4ZWRTaXplRXYKK19fWk5LN1dlYkNvcmUyMkNTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWUxMWlzRnJhY3Rpb25hbExheW91dFNpemVFdgogX19aTjdXZWJDb3JlMTZDU1NH
cmFkaWVudFZhbHVlNWltYWdlRVBOU18xMlJlbmRlck9iamVjdEVSS05TXzdJbnRTaXplRQogX19a
TkszV1RGOUhhc2hUYWJsZUlQTjdXZWJDb3JlMTJSZW5kZXJPYmplY3RFU3Q0cGFpcklTM19TNF9J
TlMxXzdJbnRTaXplRWlFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM3X0VFTlNfN1B0ckhhc2hJ
UzNfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TRF9JUzZfRUVF
RVNFX0U4Y29udGFpbnNJUzNfTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySVMzX1M3X1NCX0VF
RUViUktUXwogX19aTjdXZWJDb3JlMjJDU1NJbWFnZUdlbmVyYXRvclZhbHVlOGdldEltYWdlRVBO
U18xMlJlbmRlck9iamVjdEVSS05TXzdJbnRTaXplRQpJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDEwNzg0MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzUyNSw2ICsyNzUyNSwyNiBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRnJhY3Rpb25hbExheW91dFBv
aW50LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAiCisJCQkJCT4K
KwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJ
CTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRnJhY3Rpb25h
bExheW91dFNpemUuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRnJhY3Rpb25hbExheW91dFNpemUuaCIK
KwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXEZsb2F0UG9pbnQuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTA3ODQxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yOTcsNiArMjk3LDEyIEBACiAJCTE0
MzJFODQ5MEM1MTQ5M0YwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzMkU4NDgwQzUxNDkzRjAwQjE1MDBG
IC8qIEdDQ29udHJvbGxlci5jcHAgKi87IH07CiAJCTE0NDlFMjRDMTA3RDRBODQwMEI1NzkzRiAv
KiBKU0NhbGxiYWNrRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQ0OUUyNEExMDdENEE4NDAwQjU3OTNGIC8qIEpTQ2FsbGJhY2tEYXRhLmggKi87
IH07CiAJCTE0NDlFMjg3MTA3RDREQjQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ5RTI4NjEwN0Q0
REI0MDBCNTc5M0YgLyogSlNDYWxsYmFja0RhdGEuY3BwICovOyB9OworCQkxNDRGQ0U1MjE0RUM3
OUJDMDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFVuaXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEZDRTUxMTRFQzc5QkMwMDBEMTdBMyAvKiBG
cmFjdGlvbmFsTGF5b3V0VW5pdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTE0NEZDRTU5MTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0NEZDRTU0MTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNDRGQ0U1QTE0
RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFJlY3QuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0RkNFNTUxNEVDNzlFNzAwMEQxN0Ez
IC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCAqLzsgfTsKKwkJMTQ0RkNFNUIxNEVDNzlFNzAw
MEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDRGQ0U1NjE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rp
b25hbExheW91dFJlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkxNDRGQ0U1QzE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFNp
emUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0
RkNFNTcxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmNwcCAqLzsgfTsK
KwkJMTQ0RkNFNUQxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDRGQ0U1ODE0RUM3
OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFNpemUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDY0RTA2QzEzNUVDMTA2MDBGREIwMEEg
LyogSlNNZWRpYUxpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQ2NEUwNkIxMzVFQzEwNjAwRkRCMDBBIC8qIEpTTWVkaWFMaXN0Q3Vz
dG9tLmNwcCAqLzsgfTsKIAkJMTQ3N0U3NzYwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VDYWNoZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDc3RTc3
NDBCRjQxMzRBMDAxNTI4NzIgLyogUGFnZUNhY2hlLmNwcCAqLzsgfTsKIAkJMTQ3N0U3NzcwQkY0
MTM0QTAwMTUyODcyIC8qIFBhZ2VDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTQ3N0U3NzUwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VDYWNoZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00OTkw
LDcgKzQ5OTYsNiBAQAogCQlCOERCREI0QzEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9u
Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjhEQkRCNDgxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCAqLzsgfTsK
IAkJQjhEQkRCNEQxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjhEQkRC
NDkxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwICovOyB9
OwogCQlCOERCREI0RTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFu
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjhEQkRC
NEExMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCAqLzsgfTsK
LQkJQkFCMjJBRDQxNEI3QTAyRDAwRDhBQkE2IC8qIEZyYWN0aW9uYWxMYXlvdXRVbml0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQUI3NzE1MDE0NDRD
QkI0MDBFQzRDNEMgLyogRnJhY3Rpb25hbExheW91dFVuaXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQUNGMjkwMTEzQjJBMEQ1MDA3ODFGOTAg
LyogTGF5b3V0VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJBQ0YyOTAwMTNCMkEwRDUwMDc4MUY5MCAvKiBMYXlvdXRUeXBlcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMDBGMDA0MEUwQTE4
NTUwMEZEMDRFMyAvKiBET01GaWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzAwRUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oICovOyB9
OwogCQlCQzAwRjAwNTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDBFRkZGMEUwQTE4NTUwMEZEMDRF
MyAvKiBET01GaWxlLm1tICovOyB9OwpAQCAtNzAxNiw2ICs3MDIxLDEyIEBACiAJCTE0MzJFODQ4
MEM1MTQ5M0YwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEdDQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0NDlFMjRBMTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbGxiYWNrRGF0YS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQ5RTI4NjEwN0Q0REI0MDBCNTc5M0YgLyogSlNDYWxs
YmFja0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYWxs
YmFja0RhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDRGQ0U1MTE0RUM3
OUJDMDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFVuaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRnJhY3Rpb25hbExheW91dFVuaXQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMTQ0RkNFNTQxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQ0RkNFNTUxNEVDNzlFNzAw
MEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMTQ0RkNFNTYxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlv
dXRSZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYWN0aW9uYWxMYXlv
dXRSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0NEZDRTU3MTRFQzc5RTcw
MDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0U2l6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGcmFjdGlvbmFsTGF5b3V0U2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTE0NEZDRTU4MTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5
b3V0U2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFjdGlvbmFsTGF5
b3V0U2l6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDY0RTA2QjEzNUVDMTA2
MDBGREIwMEEgLyogSlNNZWRpYUxpc3RDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNNZWRpYUxpc3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNDc3RTc3NDBCRjQxMzRBMDAxNTI4NzIgLyogUGFnZUNhY2hlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlQ2FjaGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNDc3RTc3NTBCRjQxMzRBMDAxNTI4NzIgLyogUGFnZUNh
Y2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlQ2FjaGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExOTA0LDcgKzExOTE1LDYgQEAKIAkJQjhEQkRC
NDgxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0U2VsZWN0aW9uQ29tbWFuZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCOERCREI0OTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
cGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjhEQkRCNEExMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQUI3NzE1MDE0NDRDQkI0MDBF
QzRDNEMgLyogRnJhY3Rpb25hbExheW91dFVuaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRnJhY3Rpb25hbExheW91dFVuaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkFDRjI5MDAxM0IyQTBENTAwNzgxRjkwIC8qIExheW91dFR5cGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDMDBFRkZFMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkMwMEVGRkYwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01GaWxlLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTg5MTMsNiArMTg5MjMsMTEgQEAKIAkJCQkzNzIwMjE5ODEw
NjIxM0M2MDBGMjVDNEIgLyogRm9udFNtb290aGluZ01vZGUuaCAqLywKIAkJCQkzNzg0QzM0QTBF
MTFBQTM0MDA3RDhENDggLyogRm9udFRyYWl0c01hc2suaCAqLywKIAkJCQlCQ0U0NDEzNTEyRjc0
OTBCMDA5Qjg0QjggLyogRm9udFdpZHRoVmFyaWFudC5oICovLAorCQkJCTE0NEZDRTU0MTRFQzc5
RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCAqLywKKwkJCQkxNDRGQ0U1NTE0
RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFJlY3QuY3BwICovLAorCQkJCTE0NEZD
RTU2MTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5oICovLAorCQkJCTE0
NEZDRTU3MTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0U2l6ZS5jcHAgKi8sCisJ
CQkJMTQ0RkNFNTgxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggKi8s
CiAJCQkJQkMyM0YwREEwREFGRjRBNDAwOUZEQzkxIC8qIEdlbmVyYXRlZEltYWdlLmggKi8sCiAJ
CQkJQkNFMDRDODkwREFGRjdBMDAwN0EwRjQxIC8qIEdlbmVyYXRvci5oICovLAogCQkJCTJEMkZD
MDU2MTQ2MENENkYwMDI2MzYzMyAvKiBHZW5lcmF0b3JHZW5lcmF0ZWRJbWFnZS5jcHAgKi8sCkBA
IC0xOTc4OCw3ICsxOTgwMyw3IEBACiAJCQkJQzU3RkVERTAxMjEyRUU5QzAwOTdCRTY1IC8qIEZp
bGVTeXN0ZW0uY3BwICovLAogCQkJCTUxNEIzRjcyMEM3MjIwNDcwMDA1MzBERiAvKiBGaWxlU3lz
dGVtLmggKi8sCiAJCQkJQkMwNzNCQTkwQzM5OUIxRjAwMEY1OTc5IC8qIEZsb2F0Q29udmVyc2lv
bi5oICovLAotCQkJCUJBQjc3MTUwMTQ0NENCQjQwMEVDNEM0QyAvKiBGcmFjdGlvbmFsTGF5b3V0
VW5pdC5oICovLAorCQkJCTE0NEZDRTUxMTRFQzc5QkMwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5
b3V0VW5pdC5oICovLAogCQkJCUE4NzQ4QkRGMTJDQkYyREMwMDFGQkE0MSAvKiBIYXNoVG9vbHMu
aCAqLywKIAkJCQlENkZEQUVGMjE0OUMwNjE5MDAzN0IxRTEgLyogSGlzdG9ncmFtU3VwcG9ydC5j
cHAgKi8sCiAJCQkJRDYzMEUyQUIxNDlCRjM0NDAwNUIyRjkzIC8qIEhpc3RvZ3JhbVN1cHBvcnQu
aCAqLywKQEAgLTIxMTg0LDcgKzIxMTk5LDYgQEAKIAkJCQkxQTJBQUM1OTBEQzJBM0IxMDBBMjBE
OUEgLyogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTlCNDE3
MDY0MTI1NjYyQjMwMDZCMjhGQyAvKiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzMzA5REQ5MDk5RTY0OTIwMDU2RTU4MSAvKiBBcHBseVN0eWxlQ29tbWFu
ZC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkFCMjJBRDQxNEI3QTAyRDAwRDhBQkE2IC8qIEZyYWN0
aW9uYWxMYXlvdXRVbml0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJERDhGNjBEOTFFNkFGMDAw
Rjg5RUUgLyogQXJjaGl2ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyREQ4RkQwRDkxRTZBRjAw
MEY4OUVFIC8qIEFyY2hpdmVGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJERDhGQzBE
OTFFNkFGMDAwRjg5RUUgLyogQXJjaGl2ZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywKQEAgLTI0
MjYzLDYgKzI0Mjc3LDEwIEBACiAJCQkJOTdDQzNBRTMxNEU4RTRBMjAwODk0OTg4IC8qIE5hdmln
YXRvclN1cHBsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1OTg5MDU3MTRFOUMyODAwMEU4
RDE4QiAvKiBQYXN0ZWJvYXJkU3RyYXRlZ3kuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1OTg5MDU4
MTRFOUMyOTkwMEU4RDE4QiAvKiBQbGF0Zm9ybVBhc3RlYm9hcmQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTE0NEZDRTUyMTRFQzc5QkMwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0VW5pdC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMTQ0RkNFNTkxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxM
YXlvdXRQb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTQ0RkNFNUIxNEVDNzlFNzAwMEQxN0Ez
IC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkxNDRGQ0U1RDE0
RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFNpemUuaCBpbiBIZWFkZXJzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpA
QCAtMjcyMDYsNiArMjcyMjQsOCBAQAogCQkJCTU3MkU5MkZCMTRFNTQwNTgwMDg3RkZCQSAvKiBT
aGFkb3dSb290TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0NDM0FFMjE0RThFNEEyMDA4
OTQ5ODggLyogTmF2aWdhdG9yU3VwcGxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTk4
OTAyRTE0RTlCMEY4MDBFOEQxOEIgLyogUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJMTQ0RkNFNUExNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRS
ZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0NEZDRTVDMTRFQzc5RTcwMDBEMTdBMyAvKiBG
cmFjdGlvbmFsTGF5b3V0U2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0ZyYWN0aW9uYWxMYXlvdXRVbml0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25hbExheW91dFVuaXQuaAkocmV2aXNpb24gMTA3ODQx
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25hbExheW91dFVuaXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIHByaXZhdGU6CiAgICAgfQogICAgIGlubGlu
ZSBib29sIGlzSW5Cb3VuZHModW5zaWduZWQgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4g
dmFsdWUgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpIC8ga0ZpeGVkUG9pbnREZW5v
bWluYXRvcjsKKyAgICAgICAgcmV0dXJuIHZhbHVlIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsK
ICAgICB9CiAgICAgaW5saW5lIGJvb2wgaXNJbkJvdW5kcyhkb3VibGUgdmFsdWUpCiAgICAgewpA
QCAtMjYyLDEyICsyNjIsMTIgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlv
bmFsTAogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBpbnQgYikKIHsKLSAgICByZXR1cm4gYSA9PSBGcmFjdGlvbkxheW91dFVuaXQoYik7Cisg
ICAgcmV0dXJuIGEgPT0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7CiB9CiAKIGlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQog
ewotICAgIHJldHVybiBGcmFjdGlvbkxheW91dFVuaXQoYSkgPT0gYjsKKyAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFVuaXQoYSkgPT0gYjsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKQEAgLTI5Nyw3ICsyOTcsNyBA
QCBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IqKGNvCiB7CiAgICAgRnJhY3Rp
b25hbExheW91dFVuaXQgcmV0dXJuVmFsOwogICAgIGxvbmcgbG9uZyByYXdWYWwgPSBzdGF0aWNf
Y2FzdDxsb25nIGxvbmc+KGEucmF3VmFsdWUoKSkgKiBiLnJhd1ZhbHVlKCkgLyBrRml4ZWRQb2lu
dERlbm9taW5hdG9yOwotICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZSgoYS5yYXdWYWx1ZSgpIC8g
a0ZpeGVkUG9pbnREZW5vbWluYXRvcikgKiBiLnJhd1ZhbHVlKCkpOworICAgIHJldHVyblZhbC5z
ZXRSYXdWYWx1ZShyYXdWYWwpOwogICAgIHJldHVybiByZXR1cm5WYWw7CiB9ICAgIAogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAko
cmV2aXNpb24gMTA3ODQxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDEwIEBACiAjaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAi
VHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UG9pbnQu
aCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgor
I2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8bGltaXRzPgogI2lu
Y2x1ZGUgPG1hdGguaD4KIApAQCAtNDAsNiArNDEsMTAgQEAgRmxvYXRQb2ludDo6RmxvYXRQb2lu
dChjb25zdCBJbnRQb2ludCYgcAogewogfQogCitGbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcCkgOiBtX3gocC54KCkpLCBtX3kocC55KCkpCit7Cit9
CisKIHZvaWQgRmxvYXRQb2ludDo6bm9ybWFsaXplKCkKIHsKICAgICBmbG9hdCB0ZW1wTGVuZ3Ro
ID0gbGVuZ3RoKCk7CkBAIC01NSw2ICs2MCwxOCBAQCBmbG9hdCBGbG9hdFBvaW50OjpsZW5ndGgo
KSBjb25zdAogICAgIHJldHVybiBzcXJ0ZihsZW5ndGhTcXVhcmVkKCkpOwogfQogCit2b2lkIEZs
b2F0UG9pbnQ6Om1vdmUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpCit7CisgICAg
bV94ICs9IHNpemUud2lkdGgoKTsKKyAgICBtX3kgKz0gc2l6ZS5oZWlnaHQoKTsKK30KKwordm9p
ZCBGbG9hdFBvaW50Ojptb3ZlQnkoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkK
K3sKKyAgICBtX3ggKz0gcG9pbnQueCgpOworICAgIG1feSArPSBwb2ludC55KCk7Cit9CisKIEZs
b2F0UG9pbnQgRmxvYXRQb2ludDo6bWF0cml4VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtKSBjb25zdAogewogICAgIGRvdWJsZSBuZXdYLCBuZXdZOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAkocmV2aXNpb24g
MTA3ODQxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMyArNjAsMTUgQEAgY2xhc3MgQWZmaW5lVHJhbnNmb3Jt
OwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiBjbGFzcyBJbnRQb2ludDsKIGNsYXNzIElu
dFNpemU7CitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQ7CitjbGFzcyBGcmFjdGlvbmFsTGF5
b3V0U2l6ZTsKIAogY2xhc3MgRmxvYXRQb2ludCB7CiBwdWJsaWM6CiAgICAgRmxvYXRQb2ludCgp
IDogbV94KDApLCBtX3koMCkgeyB9CiAgICAgRmxvYXRQb2ludChmbG9hdCB4LCBmbG9hdCB5KSA6
IG1feCh4KSwgbV95KHkpIHsgfQogICAgIEZsb2F0UG9pbnQoY29uc3QgSW50UG9pbnQmKTsKLQor
ICAgIEZsb2F0UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50Jik7CiAKICAgICBzdGF0
aWMgRmxvYXRQb2ludCB6ZXJvKCkgeyByZXR1cm4gRmxvYXRQb2ludCgpOyB9CiAKQEAgLTkyLDYg
Kzk0LDcgQEAgcHVibGljOgogICAgICAgICBtX3ggKz0gYS53aWR0aCgpOwogICAgICAgICBtX3kg
Kz0gYS5oZWlnaHQoKTsKICAgICB9CisgICAgdm9pZCBtb3ZlKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRTaXplJik7CiAgICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgYSkKICAgICB7CiAgICAg
ICAgIG1feCArPSBhLndpZHRoKCk7CkBAIC0xMDIsNiArMTA1LDcgQEAgcHVibGljOgogICAgICAg
ICBtX3ggKz0gYS54KCk7CiAgICAgICAgIG1feSArPSBhLnkoKTsKICAgICB9CisgICAgdm9pZCBt
b3ZlQnkoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50Jik7CiAgICAgdm9pZCBtb3ZlQnkoY29u
c3QgRmxvYXRQb2ludCYgYSkKICAgICB7CiAgICAgICAgIG1feCArPSBhLngoKTsKQEAgLTEzMSw2
ICsxMzUsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gRmxvYXRQb2ludChzdGQ6Om1heCht
X3gsIG90aGVyLm1feCksIHN0ZDo6bWF4KG1feSwgb3RoZXIubV95KSk7CiAgICAgfQogCisgICAg
RmxvYXRQb2ludCBzaHJ1bmtUbyhjb25zdCBGbG9hdFBvaW50JiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBGbG9hdFBvaW50KG1feCA8IG90aGVyLm1feCA/IG1feCA6IG90aGVy
Lm1feCwKKyAgICAgICAgICAgIG1feSA8IG90aGVyLm1feSA/IG1feSA6IG90aGVyLm1feSk7Cisg
ICAgfQorCisgICAgdm9pZCBjbGFtcE5lZ2F0aXZlVG9aZXJvKCkKKyAgICB7CisgICAgICAgICp0
aGlzID0gZXhwYW5kZWRUbyh6ZXJvKCkpOworICAgIH0KKwogICAgIEZsb2F0UG9pbnQgdHJhbnNw
b3NlZFBvaW50KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBGbG9hdFBvaW50KG1feSwg
bV94KTsKQEAgLTIzOSw2ICsyNTQsMTEgQEAgaW5saW5lIEludFNpemUgZmxvb3JlZEludFNpemUo
Y29uc3QgRmxvYQogICAgIHJldHVybiBJbnRTaXplKHN0YXRpY19jYXN0PGludD4ocC54KCkpLCBz
dGF0aWNfY2FzdDxpbnQ+KHAueSgpKSk7CiB9CiAKK2lubGluZSBGbG9hdFBvaW50IHRvUG9pbnQo
Y29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIHJldHVybiBGbG9hdFBvaW50KHNpemUud2lk
dGgoKSwgc2l6ZS5oZWlnaHQoKSk7Cit9CisKIGZsb2F0IGZpbmRTbG9wZShjb25zdCBGbG9hdFBv
aW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0JiBjKTsKIAogLy8gRmluZCBwb2lu
dCB3aGVyZSBsaW5lcyB0aHJvdWdoIHRoZSB0d28gcGFpcnMgb2YgcG9pbnRzIGludGVyc2VjdC4g
UmV0dXJucyBmYWxzZSBpZiB0aGUgbGluZXMgZG9uJ3QgaW50ZXJzZWN0LgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCShyZXZpc2lvbiAx
MDc4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CiAKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5
b3V0UmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAj
aW5jbHVkZSA8bWF0aC5oPgpAQCAtNDIsNiArNDMsMTAgQEAgRmxvYXRSZWN0OjpGbG9hdFJlY3Qo
Y29uc3QgSW50UmVjdCYgcikgOgogewogfQogCitGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBG
cmFjdGlvbmFsTGF5b3V0UmVjdCYgcikgOiBtX2xvY2F0aW9uKHIubG9jYXRpb24oKSksIG1fc2l6
ZShyLnNpemUoKSkKK3sKK30KKwogRmxvYXRSZWN0IEZsb2F0UmVjdDo6bmFycm93UHJlY2lzaW9u
KGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KQogewogICAg
IHJldHVybiBGbG9hdFJlY3QobmFycm93UHJlY2lzaW9uVG9GbG9hdCh4KSwgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCh5KSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdCh3aWR0aCksIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoaGVpZ2h0KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFJlY3QuaAkocmV2aXNpb24gMTA3ODQxKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgVkdSZWN0OwogI2VuZGlmCiAKK2NsYXNz
IEZyYWN0aW9uYWxMYXlvdXRSZWN0OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEludFBvaW50Owog
CkBAIC04Miw2ICs4Myw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFJlY3QoZmxvYXQgeCwgZmxvYXQg
eSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKICAgICAgICAgOiBtX2xvY2F0aW9uKEZsb2F0
UG9pbnQoeCwgeSkpLCBtX3NpemUoRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpKSB7IH0KICAgICBG
bG9hdFJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIEZsb2F0UmVjdChjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UmVjdCYpOwogCiAgICAgc3RhdGljIEZsb2F0UmVjdCBuYXJyb3dQcmVjaXNpb24oZG91
YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAJKHJldmlz
aW9uIDEwNzg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKIAorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRT
aXplLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5o
IgogI2luY2x1ZGUgPGxpbWl0cz4KQEAgLTQwLDYgKzQxLDEwIEBAIEZsb2F0U2l6ZTo6RmxvYXRT
aXplKGNvbnN0IEludFNpemUmIHNpemUKIHsKIH0KIAorRmxvYXRTaXplOjpGbG9hdFNpemUoY29u
c3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIDogbV93aWR0aChzaXplLndpZHRoKCkpLCBt
X2hlaWdodChzaXplLmhlaWdodCgpKQoreworfQorCiBmbG9hdCBGbG9hdFNpemU6OmRpYWdvbmFs
TGVuZ3RoKCkgY29uc3QKIHsKICAgICByZXR1cm4gc3FydGYoZGlhZ29uYWxMZW5ndGhTcXVhcmVk
KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXpl
LmgJKHJldmlzaW9uIDEwNzg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0U2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMiArNDYsMTQgQEAgdHlwZWRlZiBz
dHJ1Y3QgX05TU2l6ZSBOU1NpemU7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEludFNp
emU7CitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0U2l6ZTsKIAogY2xhc3MgRmxvYXRTaXplIHsKIHB1
YmxpYzoKICAgICBGbG9hdFNpemUoKSA6IG1fd2lkdGgoMCksIG1faGVpZ2h0KDApIHsgfQogICAg
IEZsb2F0U2l6ZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSA6IG1fd2lkdGgod2lkdGgpLCBt
X2hlaWdodChoZWlnaHQpIHsgfQogICAgIEZsb2F0U2l6ZShjb25zdCBJbnRTaXplJik7CisgICAg
RmxvYXRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJik7CiAKICAgICBzdGF0aWMgRmxv
YXRTaXplIG5hcnJvd1ByZWNpc2lvbihkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UG9p
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFj
dGlvbmFsTGF5b3V0UG9pbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRQb2ludC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRQb2ludF9oCisjZGVmaW5lIEZyYWN0
aW9uYWxMYXlvdXRQb2ludF9oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAi
RnJhY3Rpb25hbExheW91dFNpemUuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB7CitwdWJs
aWM6CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50KCkgOiBtX3goMCksIG1feSgwKSB7IH0KKyAg
ICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoRnJhY3Rpb25hbExheW91dFVuaXQgeCwgRnJhY3Rpb25h
bExheW91dFVuaXQgeSkgOiBtX3goeCksIG1feSh5KSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSA6IG1feChwb2ludC54KCkpLCBtX3kocG9pbnQu
eSgpKSB7IH0KKyAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQ
b2ludCYgc2l6ZSkgOiBtX3goc2l6ZS54KCkpLCBtX3koc2l6ZS55KCkpIHsgfQorCisgICAgc3Rh
dGljIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB6ZXJvKCkgeyByZXR1cm4gRnJhY3Rpb25hbExheW91
dFBvaW50KCk7IH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHgoKSBjb25zdCB7IHJldHVy
biBtX3g7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV95
OyB9CisKKyAgICB2b2lkIHNldFgoRnJhY3Rpb25hbExheW91dFVuaXQgeCkgeyBtX3ggPSB4OyB9
CisgICAgdm9pZCBzZXRZKEZyYWN0aW9uYWxMYXlvdXRVbml0IHkpIHsgbV95ID0geTsgfQorCisg
ICAgdm9pZCBtb3ZlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzKSB7IG1vdmUocy53aWR0
aCgpLCBzLmhlaWdodCgpKTsgfSAKKyAgICB2b2lkIG1vdmVCeShjb25zdCBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQmIG9mZnNldCkgeyBtb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkpOyB9CisgICAg
dm9pZCBtb3ZlKEZyYWN0aW9uYWxMYXlvdXRVbml0IGR4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBk
eSkgeyBtX3ggKz0gZHg7IG1feSArPSBkeTsgfQorICAgIHZvaWQgc2NhbGUoZmxvYXQgc3gsIGZs
b2F0IHN5KQorICAgIHsKKyAgICAgICAgbV94ICo9IHN4OworICAgICAgICBtX3kgKj0gc3k7Cisg
ICAgfQorICAgIAorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBleHBhbmRlZFRvKGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRQb2ludCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFBvaW50KHN0ZDo6bWF4KG1feCwgb3RoZXIubV94KSwgc3RkOjptYXgo
bV95LCBvdGhlci5tX3kpKTsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgc2hy
dW5rVG8oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoc3RkOjptaW4obV94LCBvdGhlci5t
X3gpLCBzdGQ6Om1pbihtX3ksIG90aGVyLm1feSkpOworICAgIH0KKworICAgIHZvaWQgY2xhbXBO
ZWdhdGl2ZVRvWmVybygpCisgICAgeworICAgICAgICAqdGhpcyA9IGV4cGFuZGVkVG8oemVybygp
KTsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgdHJhbnNwb3NlZFBvaW50KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQobV95LCBt
X3gpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX3gsIG1f
eTsKK307CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9wZXJhdG9yKz0oRnJhY3Rp
b25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAg
ICBhLm1vdmUoYi53aWR0aCgpLCBiLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0UG9p
bnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoreworICAgIGEubW92ZSgtYi53
aWR0aCgpLCAtYi5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxM
YXlvdXRQb2ludChhLngoKSArIGIud2lkdGgoKSwgYS55KCkgKyBiLmhlaWdodCgpKTsKK30KKwor
aW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExh
eW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGIpCit7CisgICAgcmV0
dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChhLngoKSArIGIueCgpLCBhLnkoKSArIGIueSgpKTsK
K30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIG9wZXJhdG9yLShjb25zdCBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikKK3sKKyAg
ICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoYS54KCkgLSBiLngoKSwgYS55KCkgLSBiLnko
KSk7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgb3BlcmF0b3ItKGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7
CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChhLngoKSAtIGIud2lkdGgoKSwgYS55
KCkgLSBiLmhlaWdodCgpKTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBvcGVy
YXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFBvaW50KC1wb2ludC54KCksIC1wb2ludC55KCkpOworfQorCitpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFBvaW50JiBiKQoreworICAgIHJldHVybiBhLngoKSA9PSBiLngoKSAm
JiBhLnkoKSA9PSBiLnkoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikKK3sK
KyAgICByZXR1cm4gYS54KCkgIT0gYi54KCkgfHwgYS55KCkgIT0gYi55KCk7Cit9CisKK2lubGlu
ZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgdG9Qb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6
ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSk7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSB0b1Np
emUoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhKQoreworICAgIHJldHVybiBGcmFjdGlv
bmFsTGF5b3V0U2l6ZShhLngoKSwgYS55KCkpOworfQorCitpbmxpbmUgSW50UG9pbnQgZmxvb3Jl
ZEludFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0
dXJuIEludFBvaW50KHBvaW50LngoKS50b0ludCgpLCBwb2ludC55KCkudG9JbnQoKSk7Cit9CisK
K2lubGluZSBJbnRQb2ludCByb3VuZGVkSW50UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFBv
aW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLnJvdW5kKCksIHBv
aW50LnkoKS5yb3VuZCgpKTsKK30KKworaW5saW5lIEludFBvaW50IGNlaWxlZEludFBvaW50KGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuIEludFBvaW50
KHBvaW50LngoKS5jZWlsKCksIHBvaW50LnkoKS5jZWlsKCkpOworfQorCisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZyYWN0aW9uYWxMYXlvdXRQb2ludF9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25h
bExheW91dFJlY3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJl
Y3QuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlv
dXRVbml0LmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0ZyYWN0aW9uYWxMYXlvdXRSZWN0OjpGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGbG9hdFJl
Y3QmIHIpCisgICAgOiBtX2xvY2F0aW9uKEZyYWN0aW9uYWxMYXlvdXRQb2ludChyLmxvY2F0aW9u
KCkpKQorICAgICwgbV9zaXplKEZyYWN0aW9uYWxMYXlvdXRTaXplKHIuc2l6ZSgpKSkKK3sKK30K
KworYm9vbCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6aW50ZXJzZWN0cyhjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UmVjdCYgb3RoZXIpIGNvbnN0Cit7CisgICAgLy8gQ2hlY2tpbmcgZW1wdGluZXNzIGhh
bmRsZXMgbmVnYXRpdmUgd2lkdGhzIGFzIHdlbGwgYXMgemVyby4KKyAgICByZXR1cm4gIWlzRW1w
dHkoKSAmJiAhb3RoZXIuaXNFbXB0eSgpCisgICAgICAgICYmIHgoKSA8IG90aGVyLm1heFgoKSAm
JiBvdGhlci54KCkgPCBtYXhYKCkKKyAgICAgICAgJiYgeSgpIDwgb3RoZXIubWF4WSgpICYmIG90
aGVyLnkoKSA8IG1heFkoKTsKK30KKworYm9vbCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6Y29udGFp
bnMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKSBjb25zdAoreworICAgIHJldHVy
biB4KCkgPD0gb3RoZXIueCgpICYmIG1heFgoKSA+PSBvdGhlci5tYXhYKCkKKyAgICAgICAgJiYg
eSgpIDw9IG90aGVyLnkoKSAmJiBtYXhZKCkgPj0gb3RoZXIubWF4WSgpOworfQorCit2b2lkIEZy
YWN0aW9uYWxMYXlvdXRSZWN0OjppbnRlcnNlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3Qm
IG90aGVyKQoreworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG5ld1ggPSBzdGQ6Om1heCh4KCks
IG90aGVyLngoKSk7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbmV3WSA9IHN0ZDo6bWF4KHko
KSwgb3RoZXIueSgpKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBuZXdNYXhYID0gc3RkOjpt
aW4obWF4WCgpLCBvdGhlci5tYXhYKCkpOworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG5ld01h
eFkgPSBzdGQ6Om1pbihtYXhZKCksIG90aGVyLm1heFkoKSk7CisKKyAgICAvLyBSZXR1cm4gYSBj
bGVhbiBlbXB0eSByZWN0YW5nbGUgZm9yIG5vbi1pbnRlcnNlY3RpbmcgY2FzZXMuCisgICAgaWYg
KG5ld1ggPj0gbmV3TWF4WCB8fCBuZXdZID49IG5ld01heFkpIHsKKyAgICAgICAgbmV3WCA9IDA7
CisgICAgICAgIG5ld1kgPSAwOworICAgICAgICBuZXdNYXhYID0gMDsKKyAgICAgICAgbmV3TWF4
WSA9IDA7CisgICAgfQorCisgICAgbV9sb2NhdGlvbi5zZXRYKG5ld1gpOworICAgIG1fbG9jYXRp
b24uc2V0WShuZXdZKTsKKyAgICBtX3NpemUuc2V0V2lkdGgobmV3TWF4WCAtIG5ld1gpOworICAg
IG1fc2l6ZS5zZXRIZWlnaHQobmV3TWF4WSAtIG5ld1kpOworfQorCit2b2lkIEZyYWN0aW9uYWxM
YXlvdXRSZWN0Ojp1bml0ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpCit7Cisg
ICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNpYWwgY2FzZXMgZmlyc3QuCisgICAgaWYgKG90aGVyLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAg
KnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IG5ld1ggPSBzdGQ6Om1pbih4KCksIG90aGVyLngoKSk7CisgICAgRnJhY3Rpb25h
bExheW91dFVuaXQgbmV3WSA9IHN0ZDo6bWluKHkoKSwgb3RoZXIueSgpKTsKKyAgICBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBuZXdNYXhYID0gc3RkOjptYXgobWF4WCgpLCBvdGhlci5tYXhYKCkpOwor
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG5ld01heFkgPSBzdGQ6Om1heChtYXhZKCksIG90aGVy
Lm1heFkoKSk7CisKKyAgICBtX2xvY2F0aW9uLnNldFgobmV3WCk7CisgICAgbV9sb2NhdGlvbi5z
ZXRZKG5ld1kpOworICAgIG1fc2l6ZS5zZXRXaWR0aChuZXdNYXhYIC0gbmV3WCk7CisgICAgbV9z
aXplLnNldEhlaWdodChuZXdNYXhZIC0gbmV3WSk7Cit9CisKK3ZvaWQgRnJhY3Rpb25hbExheW91
dFJlY3Q6OnVuaXRlSWZOb25aZXJvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikK
K3sKKyAgICAvLyBIYW5kbGUgZW1wdHkgc3BlY2lhbCBjYXNlcyBmaXJzdC4KKyAgICBpZiAoIW90
aGVyLndpZHRoKCkgJiYgIW90aGVyLmhlaWdodCgpKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KCF3aWR0aCgpICYmICFoZWlnaHQoKSkgeworICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbmV3WCA9IHN0ZDo6
bWluKHgoKSwgb3RoZXIueCgpKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBuZXdZID0gc3Rk
OjptaW4oeSgpLCBvdGhlci55KCkpOworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG5ld01heFgg
PSBzdGQ6Om1heChtYXhYKCksIG90aGVyLm1heFgoKSk7CisgICAgRnJhY3Rpb25hbExheW91dFVu
aXQgbmV3TWF4WSA9IHN0ZDo6bWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKTsKKworICAgIG1fbG9j
YXRpb24uc2V0WChuZXdYKTsKKyAgICBtX2xvY2F0aW9uLnNldFkobmV3WSk7CisgICAgbV9zaXpl
LnNldFdpZHRoKG5ld01heFggLSBuZXdYKTsKKyAgICBtX3NpemUuc2V0SGVpZ2h0KG5ld01heFkg
LSBuZXdZKTsKK30KKwordm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6c2NhbGUoZmxvYXQgcykK
K3sKKyAgICBtX2xvY2F0aW9uLnNldFgoeCgpICogcyk7CisgICAgbV9sb2NhdGlvbi5zZXRZKHko
KSAqIHMpOworICAgIG1fc2l6ZS5zZXRXaWR0aCh3aWR0aCgpICogcyk7CisgICAgbV9zaXplLnNl
dEhlaWdodChoZWlnaHQoKSAqIHMpOworfQorCitGcmFjdGlvbmFsTGF5b3V0UmVjdCB1bmlvblJl
Y3QoY29uc3QgVmVjdG9yPEZyYWN0aW9uYWxMYXlvdXRSZWN0PiYgcmVjdHMpCit7CisgICAgRnJh
Y3Rpb25hbExheW91dFJlY3QgcmVzdWx0OworCisgICAgc2l6ZV90IGNvdW50ID0gcmVjdHMuc2l6
ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgcmVz
dWx0LnVuaXRlKHJlY3RzW2ldKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0ludFJlY3Qg
ZW5jbG9zaW5nSW50UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgcmVjdCkKK3sKKyAg
ICBmbG9hdCB4ID0gZmxvb3JmKHJlY3QueCgpLnRvRmxvYXQoKSk7CisgICAgZmxvYXQgeSA9IGZs
b29yZihyZWN0LnkoKS50b0Zsb2F0KCkpOworICAgIGZsb2F0IHdpZHRoID0gY2VpbGYocmVjdC5t
YXhYKCkudG9GbG9hdCgpKSAtIHg7CisgICAgZmxvYXQgaGVpZ2h0ID0gY2VpbGYocmVjdC5tYXhZ
KCkudG9GbG9hdCgpKSAtIHk7CisKKyAgICByZXR1cm4gSW50UmVjdChjbGFtcFRvSW50ZWdlcih4
KSwgY2xhbXBUb0ludGVnZXIoeSksIAorICAgICAgICAgICAgICAgICAgIGNsYW1wVG9JbnRlZ2Vy
KHdpZHRoKSwgY2xhbXBUb0ludGVnZXIoaGVpZ2h0KSk7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRS
ZWN0IGVuY2xvc2luZ0ZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
K3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFJlY3QocmVjdC54KCksIHJlY3QueSgpLAor
ICAgICAgICAgICAgICAgICAgICAgcmVjdC5tYXhYKCkgLSByZWN0LngoKSArIEZyYWN0aW9uYWxM
YXlvdXRVbml0OjplcHNpbG9uKCksCisgICAgICAgICAgICAgICAgICAgICByZWN0Lm1heFkoKSAt
IHJlY3QueSgpICsgRnJhY3Rpb25hbExheW91dFVuaXQ6OmVwc2lsb24oKSk7Cit9CisKK0ludFJl
Y3QgcGl4ZWxTbmFwcGVkSW50UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgcmVjdCkK
K3sKKyAgICBJbnRQb2ludCByb3VuZGVkTG9jYXRpb24gPSByb3VuZGVkSW50UG9pbnQocmVjdC5s
b2NhdGlvbigpKTsKKyAgICByZXR1cm4gSW50UmVjdChyb3VuZGVkTG9jYXRpb24sIEludFNpemUo
KHJlY3QueCgpICsgcmVjdC53aWR0aCgpKS5yb3VuZCgpIC0gcm91bmRlZExvY2F0aW9uLngoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlY3QueSgpICsg
cmVjdC5oZWlnaHQoKSkucm91bmQoKSAtIHJvdW5kZWRMb2NhdGlvbi55KCkpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRnJhY3Rpb25hbExheW91dFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGcmFjdGlvbmFsTGF5b3V0UmVj
dF9oCisjZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRSZWN0X2gKKworI2luY2x1ZGUgIkZyYWN0aW9u
YWxMYXlvdXRQb2ludC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRSZWN0OworCitjbGFz
cyBGcmFjdGlvbmFsTGF5b3V0UmVjdCB7CitwdWJsaWM6CisgICAgRnJhY3Rpb25hbExheW91dFJl
Y3QoKSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKKyAgICAg
ICAgOiBtX2xvY2F0aW9uKGxvY2F0aW9uKSwgbV9zaXplKHNpemUpIHsgfQorICAgIEZyYWN0aW9u
YWxMYXlvdXRSZWN0KEZyYWN0aW9uYWxMYXlvdXRVbml0IHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0
IHksIEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWln
aHQpCisgICAgICAgIDogbV9sb2NhdGlvbihGcmFjdGlvbmFsTGF5b3V0UG9pbnQoeCwgeSkpLCBt
X3NpemUoRnJhY3Rpb25hbExheW91dFNpemUod2lkdGgsIGhlaWdodCkpIHsgfQorICAgIEZyYWN0
aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBGbG9hdFNp
emUmIHNpemUpCisgICAgICAgIDogbV9sb2NhdGlvbihsb2NhdGlvbiksIG1fc2l6ZShzaXplKSB7
IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSA6IG1fbG9j
YXRpb24ocmVjdC5sb2NhdGlvbigpKSwgbV9zaXplKHJlY3Quc2l6ZSgpKSB7IH0KKworICAgIGV4
cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOyAvLyBkb24ndCBk
byB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQorICAgICAgICAKKyAgICBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9Cisg
ICAgRnJhY3Rpb25hbExheW91dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQor
CisgICAgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGxvY2F0
aW9uKSB7IG1fbG9jYXRpb24gPSBsb2NhdGlvbjsgfQorICAgIHZvaWQgc2V0U2l6ZShjb25zdCBG
cmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CisKKyAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCB4KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi54KCk7IH0KKyAg
ICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi55KCk7
IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtYXhYKCkgY29uc3QgeyByZXR1cm4geCgpICsg
d2lkdGgoKTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heFkoKSBjb25zdCB7IHJldHVy
biB5KCkgKyBoZWlnaHQoKTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplLndpZHRoKCk7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBo
ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7IH0KKworICAgIHZvaWQgc2V0
WChGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KSB7IG1fbG9jYXRpb24uc2V0WCh4KTsgfQorICAgIHZv
aWQgc2V0WShGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KSB7IG1fbG9jYXRpb24uc2V0WSh5KTsgfQor
ICAgIHZvaWQgc2V0V2lkdGgoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgpIHsgbV9zaXplLnNl
dFdpZHRoKHdpZHRoKTsgfQorICAgIHZvaWQgc2V0SGVpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0
IGhlaWdodCkgeyBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCk7IH0KKworICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KKworICAgIC8vIE5PVEU6IFRo
ZSByZXN1bHQgaXMgcm91bmRlZCB0byBpbnRlZ2VyIHZhbHVlcywgYW5kIHRodXMgbWF5IGJlIG5v
dCB0aGUgZXhhY3QKKyAgICAvLyBjZW50ZXIgcG9pbnQuCisgICAgRnJhY3Rpb25hbExheW91dFBv
aW50IGNlbnRlcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludCh4KCkgKyB3
aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQorCisgICAgdm9pZCBtb3ZlKGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fbG9jYXRpb24gKz0gc2l6ZTsgfSAKKyAg
ICB2b2lkIG1vdmVCeShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBtX2xv
Y2F0aW9uLm1vdmUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7IH0KKyAgICB2b2lkIG1vdmUoRnJh
Y3Rpb25hbExheW91dFVuaXQgZHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGR5KSB7IG1fbG9jYXRp
b24ubW92ZShkeCwgZHkpOyB9IAorCisgICAgdm9pZCBleHBhbmQoY29uc3QgRnJhY3Rpb25hbExh
eW91dFNpemUmIHNpemUpIHsgbV9zaXplICs9IHNpemU7IH0KKyAgICB2b2lkIGV4cGFuZChGcmFj
dGlvbmFsTGF5b3V0VW5pdCBkdywgRnJhY3Rpb25hbExheW91dFVuaXQgZGgpIHsgbV9zaXplLmV4
cGFuZChkdywgZGgpOyB9CisgICAgdm9pZCBjb250cmFjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSYgc2l6ZSkgeyBtX3NpemUgLT0gc2l6ZTsgfQorICAgIHZvaWQgY29udHJhY3QoRnJhY3Rp
b25hbExheW91dFVuaXQgZHcsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRoKSB7IG1fc2l6ZS5leHBh
bmQoLWR3LCAtZGgpOyB9CisKKyAgICB2b2lkIHNoaWZ0WEVkZ2VUbyhGcmFjdGlvbmFsTGF5b3V0
VW5pdCBlZGdlKQorICAgIHsKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEgPSBl
ZGdlIC0geCgpOworICAgICAgICBzZXRYKGVkZ2UpOworICAgICAgICBzZXRXaWR0aChzdGQ6Om1h
eDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwgd2lkdGgoKSAtIGRlbHRhKSk7CisgICAgfQorICAg
IHZvaWQgc2hpZnRNYXhYRWRnZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCisgICAgewor
ICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSBtYXhYKCk7CisgICAg
ICAgIHNldFdpZHRoKHN0ZDo6bWF4PEZyYWN0aW9uYWxMYXlvdXRVbml0PigwLCB3aWR0aCgpICsg
ZGVsdGEpKTsKKyAgICB9CisgICAgdm9pZCBzaGlmdFlFZGdlVG8oRnJhY3Rpb25hbExheW91dFVu
aXQgZWRnZSkKKyAgICB7CisgICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRlbHRhID0gZWRn
ZSAtIHkoKTsKKyAgICAgICAgc2V0WShlZGdlKTsKKyAgICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4
PEZyYWN0aW9uYWxMYXlvdXRVbml0PigwLCBoZWlnaHQoKSAtIGRlbHRhKSk7CisgICAgfQorICAg
IHZvaWQgc2hpZnRNYXhZRWRnZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCisgICAgewor
ICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSBtYXhZKCk7CisgICAg
ICAgIHNldEhlaWdodChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwgaGVpZ2h0KCkg
KyBkZWx0YSkpOworICAgIH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtaW5YTWluWUNv
cm5lcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0gLy8gdHlwaWNhbGx5IHRvcExlZnQK
KyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWF4WE1pbllDb3JuZXIoKSBjb25zdCB7IHJldHVy
biBGcmFjdGlvbmFsTGF5b3V0UG9pbnQobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSwg
bV9sb2NhdGlvbi55KCkpOyB9IC8vIHR5cGljYWxseSB0b3BSaWdodAorICAgIEZyYWN0aW9uYWxM
YXlvdXRQb2ludCBtaW5YTWF4WUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlv
dXRQb2ludChtX2xvY2F0aW9uLngoKSwgbV9sb2NhdGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0KCkp
OyB9IC8vIHR5cGljYWxseSBib3R0b21MZWZ0CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IG1h
eFhNYXhZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1fbG9j
YXRpb24ueCgpICsgbV9zaXplLndpZHRoKCksIG1fbG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdo
dCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90dG9tUmlnaHQKKyAgICAKKyAgICBib29sIGludGVyc2Vj
dHMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5z
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JikgY29uc3Q7CisKKyAgICAvLyBUaGlzIGNoZWNr
cyB0byBzZWUgaWYgdGhlIHJlY3QgY29udGFpbnMgeCx5IGluIHRoZSB0cmFkaXRpb25hbCBzZW5z
ZS4KKyAgICAvLyBFcXVpdmFsZW50IHRvIGNoZWNraW5nIGlmIHRoZSByZWN0IGNvbnRhaW5zIGEg
MXgxIHJlY3QgYmVsb3cgYW5kIHRvIHRoZSByaWdodCBvZiAocHgscHkpLgorICAgIGJvb2wgY29u
dGFpbnMoRnJhY3Rpb25hbExheW91dFVuaXQgcHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHB5KSBj
b25zdAorICAgICAgICB7IHJldHVybiBweCA+PSB4KCkgJiYgcHggPCBtYXhYKCkgJiYgcHkgPj0g
eSgpICYmIHB5IDwgbWF4WSgpOyB9CisgICAgYm9vbCBjb250YWlucyhjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdCB7IHJldHVybiBjb250YWlucyhwb2ludC54KCksIHBv
aW50LnkoKSk7IH0KKworICAgIHZvaWQgaW50ZXJzZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRS
ZWN0Jik7CisgICAgdm9pZCB1bml0ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOworICAg
IHZvaWQgdW5pdGVJZk5vblplcm8oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsKKworICAg
IHZvaWQgaW5mbGF0ZVgoRnJhY3Rpb25hbExheW91dFVuaXQgZHgpCisgICAgeworICAgICAgICBt
X2xvY2F0aW9uLnNldFgobV9sb2NhdGlvbi54KCkgLSBkeCk7CisgICAgICAgIG1fc2l6ZS5zZXRX
aWR0aChtX3NpemUud2lkdGgoKSArIGR4ICsgZHgpOworICAgIH0KKyAgICB2b2lkIGluZmxhdGVZ
KEZyYWN0aW9uYWxMYXlvdXRVbml0IGR5KQorICAgIHsKKyAgICAgICAgbV9sb2NhdGlvbi5zZXRZ
KG1fbG9jYXRpb24ueSgpIC0gZHkpOworICAgICAgICBtX3NpemUuc2V0SGVpZ2h0KG1fc2l6ZS5o
ZWlnaHQoKSArIGR5ICsgZHkpOworICAgIH0KKyAgICB2b2lkIGluZmxhdGUoRnJhY3Rpb25hbExh
eW91dFVuaXQgZCkgeyBpbmZsYXRlWChkKTsgaW5mbGF0ZVkoZCk7IH0KKyAgICB2b2lkIHNjYWxl
KGZsb2F0IHMpOworCisgICAgRnJhY3Rpb25hbExheW91dFJlY3QgdHJhbnNwb3NlZFJlY3QoKSBj
b25zdCB7IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UmVjdChtX2xvY2F0aW9uLnRyYW5zcG9zZWRQ
b2ludCgpLCBtX3NpemUudHJhbnNwb3NlZFNpemUoKSk7IH0KKworICAgIHN0YXRpYyBGcmFjdGlv
bmFsTGF5b3V0UmVjdCBpbmZpbml0ZVJlY3QoKSB7cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRSZWN0
KEZyYWN0aW9uYWxMYXlvdXRVbml0OjptaW4oKSAvIDIsIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpt
aW4oKSAvIDIsIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptYXgoKSwgRnJhY3Rpb25hbExheW91dFVu
aXQ6Om1heCgpKTsgfQorCitwcml2YXRlOgorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtX2xv
Y2F0aW9uOworICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplIG1fc2l6ZTsKK307CisKK2lubGluZSBG
cmFjdGlvbmFsTGF5b3V0UmVjdCBpbnRlcnNlY3Rpb24oY29uc3QgRnJhY3Rpb25hbExheW91dFJl
Y3QmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBiKQoreworICAgIEZyYWN0aW9uYWxM
YXlvdXRSZWN0IGMgPSBhOworICAgIGMuaW50ZXJzZWN0KGIpOworICAgIHJldHVybiBjOworfQor
CitpbmxpbmUgRnJhY3Rpb25hbExheW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRSZWN0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYikKK3sKKyAgICBGcmFj
dGlvbmFsTGF5b3V0UmVjdCBjID0gYTsKKyAgICBjLnVuaXRlKGIpOworICAgIHJldHVybiBjOwor
fQorCitGcmFjdGlvbmFsTGF5b3V0UmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEZyYWN0aW9u
YWxMYXlvdXRSZWN0PiYpOworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRSZWN0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYikKK3sKKyAgICBy
ZXR1cm4gYS5sb2NhdGlvbigpID09IGIubG9jYXRpb24oKSAmJiBhLnNpemUoKSA9PSBiLnNpemUo
KTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVj
dCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGIpCit7CisgICAgcmV0dXJuIGEubG9j
YXRpb24oKSAhPSBiLmxvY2F0aW9uKCkgfHwgYS5zaXplKCkgIT0gYi5zaXplKCk7Cit9CisKK0lu
dFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOworRnJh
Y3Rpb25hbExheW91dFJlY3QgZW5jbG9zaW5nRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxv
YXRSZWN0Jik7CitJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoY29uc3QgRnJhY3Rpb25hbExh
eW91dFJlY3QmKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRnJhY3Rp
b25hbExheW91dFJlY3RfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RnJhY3Rpb25hbExheW91dFNpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRTaXplLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRTaXplLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx
MiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRnJhY3Rpb25hbExheW91dFNpemUuaCIKKworI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlv
dXRQb2ludC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFNpemUgcGl4ZWxTbmFwcGVk
SW50U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgcywgY29uc3QgRnJhY3Rpb25hbExh
eW91dFBvaW50JiBwKQoreworICAgIHJldHVybiBJbnRTaXplKHNuYXBTaXplVG9QaXhlbChzLndp
ZHRoKCksIHAueCgpKSwgc25hcFNpemVUb1BpeGVsKHMuaGVpZ2h0KCksIHAueSgpKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRTaXpl
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnJhY3Rpb25hbExheW91
dFNpemVfaAorI2RlZmluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZV9oCisKKyNpbmNsdWRlICJGbG9h
dFNpemUuaCIKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0VW5pdC5oIgorI2luY2x1ZGUgIklu
dFNpemUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQ7CisKK2NsYXNzIEZyYWN0aW9uYWxMYXlvdXRTaXplIHsKK3B1YmxpYzoKKyAgICBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSgpIDogbV93aWR0aCgwKSwgbV9oZWlnaHQoMCkgeyB9CisgICAgRnJh
Y3Rpb25hbExheW91dFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgOiBtX3dpZHRoKHNpemUud2lk
dGgoKSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpIHsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRT
aXplKEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWln
aHQpIDogbV93aWR0aCh3aWR0aCksIG1faGVpZ2h0KGhlaWdodCkgeyB9CisKKyAgICBleHBsaWNp
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpIDogbV93aWR0aChz
aXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKSB7IH0KKyAgICAKKyAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hlaWdodDsgfQor
CisgICAgdm9pZCBzZXRXaWR0aChGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCkgeyBtX3dpZHRo
ID0gd2lkdGg7IH0KKyAgICB2b2lkIHNldEhlaWdodChGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWln
aHQpIHsgbV9oZWlnaHQgPSBoZWlnaHQ7IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fd2lkdGggPD0gMCB8fCBtX2hlaWdodCA8PSAwOyB9CisgICAgYm9vbCBpc1plcm8o
KSBjb25zdCB7IHJldHVybiAhbV93aWR0aCAmJiAhbV9oZWlnaHQ7IH0KKworICAgIGZsb2F0IGFz
cGVjdFJhdGlvKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fd2lkdGgpIC8g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1faGVpZ2h0KTsgfQorICAgIAorICAgIHZvaWQgZXhwYW5kKEZy
YWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQpCisg
ICAgeworICAgICAgICBtX3dpZHRoICs9IHdpZHRoOworICAgICAgICBtX2hlaWdodCArPSBoZWln
aHQ7CisgICAgfQorICAgIAorICAgIHZvaWQgc2NhbGUoZmxvYXQgc2NhbGUpCisgICAgeworICAg
ICAgICBtX3dpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0aWNfY2FzdDxmbG9hdD4obV93aWR0
aCkgKiBzY2FsZSk7CisgICAgICAgIG1faGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0aWNf
Y2FzdDxmbG9hdD4obV9oZWlnaHQpICogc2NhbGUpOworICAgIH0KKyAgICAKKyAgICBGcmFjdGlv
bmFsTGF5b3V0U2l6ZSBleHBhbmRlZFRvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShtX3dp
ZHRoID4gb3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAorICAgICAgICAg
ICAgbV9oZWlnaHQgPiBvdGhlci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3RoZXIubV9oZWlnaHQp
OworICAgIH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplIHNocnVua1RvKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRTaXplJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGcmFj
dGlvbmFsTGF5b3V0U2l6ZShtX3dpZHRoIDwgb3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhl
ci5tX3dpZHRoLAorICAgICAgICAgICAgbV9oZWlnaHQgPCBvdGhlci5tX2hlaWdodCA/IG1faGVp
Z2h0IDogb3RoZXIubV9oZWlnaHQpOworICAgIH0KKworICAgIHZvaWQgY2xhbXBOZWdhdGl2ZVRv
WmVybygpCisgICAgeworICAgICAgICAqdGhpcyA9IGV4cGFuZGVkVG8oRnJhY3Rpb25hbExheW91
dFNpemUoKSk7CisgICAgfQorCisgICAgRnJhY3Rpb25hbExheW91dFNpemUgdHJhbnNwb3NlZFNp
emUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKG1f
aGVpZ2h0LCBtX3dpZHRoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRnJhY3Rpb25hbExheW91
dFVuaXQgbV93aWR0aCwgbV9oZWlnaHQ7Cit9OworCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFNp
emUmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRTaXplJiBiKQoreworICAgIGEuc2V0V2lkdGgoYS53aWR0aCgpICsgYi53aWR0aCgpKTsK
KyAgICBhLnNldEhlaWdodChhLmhlaWdodCgpICsgYi5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGE7
Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgb3BlcmF0b3ItPShGcmFjdGlvbmFs
TGF5b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAgYS5z
ZXRXaWR0aChhLndpZHRoKCkgLSBiLndpZHRoKCkpOworICAgIGEuc2V0SGVpZ2h0KGEuaGVpZ2h0
KCkgLSBiLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxM
YXlvdXRTaXplIG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRT
aXplKGEud2lkdGgoKSArIGIud2lkdGgoKSwgYS5oZWlnaHQoKSArIGIuaGVpZ2h0KCkpOworfQor
CitpbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAgICByZXR1
cm4gRnJhY3Rpb25hbExheW91dFNpemUoYS53aWR0aCgpIC0gYi53aWR0aCgpLCBhLmhlaWdodCgp
IC0gYi5oZWlnaHQoKSk7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBvcGVyYXRv
ci0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpCit7CisgICAgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRTaXplKC1zaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKTsKK30KKworaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAgcmV0dXJuIGEud2lkdGgoKSA9PSBiLndp
ZHRoKCkgJiYgYS5oZWlnaHQoKSA9PSBiLmhlaWdodCgpOworfQorCitpbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53aWR0aCgpICE9IGIud2lkdGgoKSB8fCBhLmhl
aWdodCgpICE9IGIuaGVpZ2h0KCk7Cit9CisKK2lubGluZSBJbnRTaXplIGZsb29yZWRJbnRTaXpl
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzKQoreworICAgIHJldHVybiBJbnRTaXplKHMu
d2lkdGgoKS50b0ludCgpLCBzLmhlaWdodCgpLnRvSW50KCkpOworfQorCitpbmxpbmUgSW50U2l6
ZSByb3VuZGVkSW50U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgcykKK3sKKyAgICBy
ZXR1cm4gSW50U2l6ZShzLndpZHRoKCkucm91bmQoKSwgcy5oZWlnaHQoKS5yb3VuZCgpKTsKK30K
KworSW50U2l6ZSBwaXhlbFNuYXBwZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXpl
JiwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50Jik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEZyYWN0aW9uYWxMYXlvdXRTaXplX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCShyZXZpc2lvbiAxMDc4NDEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklu
dFJlY3QuaCIKIAorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCkBAIC00MCw2ICs0MSwxMiBAQCBJ
bnRSZWN0OjpJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKIHsKIH0KIAorSW50UmVjdDo6SW50
UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgcikKKyAgICA6IG1fbG9jYXRpb24oZmxv
b3JlZEludFBvaW50KHIubG9jYXRpb24oKSkpCisgICAgLCBtX3NpemUoZmxvb3JlZEludFNpemUo
ci5zaXplKCkpKQoreworfQorCiBib29sIEludFJlY3Q6OmludGVyc2VjdHMoY29uc3QgSW50UmVj
dCYgb3RoZXIpIGNvbnN0CiB7CiAgICAgLy8gQ2hlY2tpbmcgZW1wdGluZXNzIGhhbmRsZXMgbmVn
YXRpdmUgd2lkdGhzIGFzIHdlbGwgYXMgemVyby4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHJldmlzaW9uIDEwNzg0MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiAr
NzEsNyBAQCBzdHJ1Y3QgU2tJUmVjdDsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxv
YXRSZWN0OworY2xhc3MgRnJhY3Rpb25hbExheW91dFJlY3Q7CiAKIGNsYXNzIEludFJlY3Qgewog
cHVibGljOgpAQCAtODAsNyArODEsOCBAQCBwdWJsaWM6CiAgICAgSW50UmVjdChpbnQgeCwgaW50
IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICAgICAgOiBtX2xvY2F0aW9uKEludFBvaW50
KHgsIHkpKSwgbV9zaXplKEludFNpemUod2lkdGgsIGhlaWdodCkpIHsgfQogCi0gICAgZXhwbGlj
aXQgSW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxp
Y2l0bHkgc2luY2UgaXQncyBsb3NzeQorICAgIGV4cGxpY2l0IEludFJlY3QoY29uc3QgRmxvYXRS
ZWN0Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAg
ZXhwbGljaXQgSW50UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOyAvLyBkb24ndCBk
byB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQogICAgICAgICAKICAgICBJbnRQb2lu
dCBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0KICAgICBJbnRTaXplIHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>