<?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>78924</bug_id>
          
          <creation_ts>2012-02-17 13:28:09 -0800</creation_ts>
          <short_desc>Add FractionalLayoutRect for sub-pixel layout</short_desc>
          <delta_ts>2012-07-08 10:06:19 -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>78852</dependson>
    
    <dependson>78913</dependson>
          <blocked>76571</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Emil A Eklund">eae</reporter>
          <assigned_to name="Emil A Eklund">eae</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>leviw</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>559470</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-17 13:28:09 -0800</bug_when>
    <thetext>Add FractionalLayoutUnit implementation of rect class. This will use the new FractionalLayoutPoint and FractionalLayoutSize classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559665</commentid>
    <comment_count>1</comment_count>
      <attachid>127678</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-17 17:07:53 -0800</bug_when>
    <thetext>Created attachment 127678
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561075</commentid>
    <comment_count>2</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-21 11:27:42 -0800</bug_when>
    <thetext>This is the last of the new types, any chance you could find the time to review this today?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561105</commentid>
    <comment_count>3</comment_count>
      <attachid>127678</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-21 11:56:42 -0800</bug_when>
    <thetext>Comment on attachment 127678
Patch

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

Seems OK.  It&apos;s difficult to review this accurately as there is a lot of chance for copy/paste error here.  Consider my suggestions for doing less math on the raw components (and hopefully then reducing the amount of code and amount of chance of copy/paste error.)

&gt; Source/WebCore/platform/graphics/FractionalLayoutRect.cpp:65
&gt; +    FractionalLayoutUnit newX = std::max(x(), other.x());
&gt; +    FractionalLayoutUnit newY = std::max(y(), other.y());
&gt; +    FractionalLayoutUnit newMaxX = std::min(maxX(), other.maxX());
&gt; +    FractionalLayoutUnit newMaxY = std::min(maxY(), other.maxY());

I might have done this math on points.
FractionalLayoutPoint newLocation(max(x(), other.x()), max(y(), other.y()));
FractionalLayoutPoint newMaxPoint(min(maxX(), other.maxX()), min(maxY(), other.maxY()));

Then the rest of the function becomes slightly less verbose.

&gt; Source/WebCore/platform/graphics/FractionalLayoutRect.cpp:91
&gt; +    FractionalLayoutUnit newX = std::min(x(), other.x());

I thought we normally added using std; at the top of cpp&apos;s to avoid needing the std:: here?

&gt; Source/WebCore/platform/graphics/FractionalLayoutRect.cpp:128
&gt; +    m_location.setX(x() * s);
&gt; +    m_location.setY(y() * s);
&gt; +    m_size.setWidth(width() * s);
&gt; +    m_size.setHeight(height() * s);

point and size don&apos;t have scale() functions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561121</commentid>
    <comment_count>4</comment_count>
      <attachid>127678</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-21 12:12:03 -0800</bug_when>
    <thetext>Comment on attachment 127678
Patch

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

Thanks!

&gt;&gt; Source/WebCore/platform/graphics/FractionalLayoutRect.cpp:65
&gt;&gt; +    FractionalLayoutUnit newMaxY = std::min(maxY(), other.maxY());
&gt; 
&gt; I might have done this math on points.
&gt; FractionalLayoutPoint newLocation(max(x(), other.x()), max(y(), other.y()));
&gt; FractionalLayoutPoint newMaxPoint(min(maxX(), other.maxX()), min(maxY(), other.maxY()));
&gt; 
&gt; Then the rest of the function becomes slightly less verbose.

Good idea, I&apos;ll update the intersect and unit methods accordingly.

&gt;&gt; Source/WebCore/platform/graphics/FractionalLayoutRect.cpp:91
&gt;&gt; +    FractionalLayoutUnit newX = std::min(x(), other.x());
&gt; 
&gt; I thought we normally added using std; at the top of cpp&apos;s to avoid needing the std:: here?

Right, added using std::max/min.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561183</commentid>
    <comment_count>5</comment_count>
      <attachid>128035</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-21 13:38:30 -0800</bug_when>
    <thetext>Created attachment 128035
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561291</commentid>
    <comment_count>6</comment_count>
      <attachid>128035</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-21 15:35:00 -0800</bug_when>
    <thetext>Comment on attachment 128035
Patch for landing

Rejecting attachment 128035 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
 Source/WebCore/platform/graphics/FloatRect.cpp
patching file Source/WebCore/platform/graphics/FloatRect.h
patching file Source/WebCore/platform/graphics/FractionalLayoutRect.cpp
patching file Source/WebCore/platform/graphics/FractionalLayoutRect.h
patching file Source/WebCore/platform/graphics/IntRect.cpp
patching file Source/WebCore/platform/graphics/IntRect.h

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue/

Full output: http://queues.webkit.org/results/11559290</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561354</commentid>
    <comment_count>7</comment_count>
      <attachid>128035</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-21 16:20:49 -0800</bug_when>
    <thetext>Comment on attachment 128035
Patch for landing

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

&gt; Source/WebCore/platform/graphics/FractionalLayoutRect.cpp:71
&gt; +        newLocation = FractionalLayoutPoint(0, 0);
&gt; +        newMaxPoint = FractionalLayoutPoint(0, 0);

Don&apos;t we have FractionalLayoutPoint::zero()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561359</commentid>
    <comment_count>8</comment_count>
      <attachid>128079</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-21 16:28:26 -0800</bug_when>
    <thetext>Created attachment 128079
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561400</commentid>
    <comment_count>9</comment_count>
      <attachid>128079</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-21 17:18:59 -0800</bug_when>
    <thetext>Comment on attachment 128079
Patch for landing

Clearing flags on attachment: 128079

Committed r108423: &lt;http://trac.webkit.org/changeset/108423&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561401</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-21 17:19:08 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664487</commentid>
    <comment_count>11</comment_count>
      <attachid>128079</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-07-08 10:06:19 -0700</bug_when>
    <thetext>Comment on attachment 128079
Patch for landing

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

&gt; Source/WebCore/platform/graphics/FractionalLayoutRect.cpp:145
&gt; +FractionalLayoutRect enclosingFractionalLayoutRect(const FloatRect&amp; rect)
&gt; +{
&gt; +    return FractionalLayoutRect(rect.x(), rect.y(),
&gt; +                     rect.maxX() - rect.x() + FractionalLayoutUnit::epsilon(),
&gt; +                     rect.maxY() - rect.y() + FractionalLayoutUnit::epsilon());
&gt; +}

Consider, FloatRect rect=(0.0, 0.0, 800.0, 600.0).
This method returns a FractionaLayoutRect(0.0, 800.0 + eps, 600.0 + eps).

enclosingIntRect(FractionalLayoutRect(rect)) yields 0,0 x 801,601.
enclosingIntRect(rect) gives 0,0 x 800,600 as expected.

Am I missing something, or is this a bug?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127678</attachid>
            <date>2012-02-17 17:07:53 -0800</date>
            <delta_ts>2012-02-21 13:38:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78924-20120217170752.patch</filename>
            <type>text/plain</type>
            <size>29575</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODE0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDEyLTAyLTE3ICBFbWlsIEEg
RWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgRnJhY3Rpb25hbExheW91
dFJlY3QgZm9yIHN1Yi1waXhlbCBsYXlvdXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc4OTI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIEZyYWN0aW9uYWxMYXlvdXRVbml0IHZlcnNpb24gb2YgUmVj
dCBjbGFzcy4gVXNlcyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQKKyAgICAgICAgYW5kIEZyYWN0aW9u
YWxMYXlvdXRTaXplIGludGVybmFsbHkuCisKKyAgICAgICAgQWxzbyBhZGQgY29udmVyc2lvbnMg
dG8gaW50L2Zsb2F0IHZlcnNpb25zIG9mIHNhbWUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgor
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6RmxvYXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChGbG9hdFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zy
YWN0aW9uYWxMYXlvdXRSZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjpGcmFjdGlvbmFsTGF5b3V0UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6aW50ZXJzZWN0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6Y29udGFpbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OmludGVyc2VjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6dW5pdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhY3Rpb25hbExheW91dFJlY3Q6OnVuaXRlSWZOb25aZXJvKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjp1bmlvblJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjplbmNsb3NpbmdGcmFjdGlvbmFsTGF5b3V0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpw
aXhlbFNuYXBwZWRJbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlv
bmFsTGF5b3V0UmVjdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRnJh
Y3Rpb25hbExheW91dFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJl
Y3Q6OkZyYWN0aW9uYWxMYXlvdXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxM
YXlvdXRSZWN0Ojpsb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0
UmVjdDo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6c2V0
TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OnNldFNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OngpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OnkpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhY3Rpb25hbExheW91dFJlY3Q6Om1heFgpOgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25h
bExheW91dFJlY3Q6Om1heFkpOgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJl
Y3Q6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjpoZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OnNldFgpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OnNldFkpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OnNldFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjpzZXRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
Y3Rpb25hbExheW91dFJlY3Q6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25h
bExheW91dFJlY3Q6OmNlbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0
UmVjdDo6bW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6bW92
ZUJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjpleHBhbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OmNvbnRyYWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjpzaGlmdFhFZGdlVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OnNoaWZ0TWF4WEVkZ2VUbyk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6c2hpZnRZRWRnZVRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjpzaGlmdE1heFlFZGdlVG8pOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6Om1pblhNaW5ZQ29ybmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjptYXhYTWluWUNvcm5lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6bWluWE1heFlDb3JuZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6Om1heFhNYXhZQ29ybmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0Ojpjb250YWlucyk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6aW5mbGF0ZVgpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OmluZmxhdGVZKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjppbmZsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YWN0aW9uYWxMYXlvdXRSZWN0Ojp0cmFuc3Bvc2VkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFjdGlvbmFsTGF5b3V0UmVjdDo6aW5maW5pdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Omlu
dGVyc2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp1bmlvblJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvciE9KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
dFJlY3Q6OkludFJlY3QpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW50UmVjdC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbnRSZWN0
KToKKwogMjAxMi0wMi0xNyAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQgbWFjIGNvbXBpbGUgZml4ICh1bnVzZWQgcGFyYW1ldGVyIHdh
cm5pbmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEwODEz
OCkKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkK
QEAgLTI5OTUsNiArMjk5NSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFRyYWl0c01hc2suaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udFdpZHRoVmFyaWFudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCBcCisJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuY3BwIFwKKwlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0U2l6ZS5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRTaXplLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvckdlbmVyYXRlZElt
YWdlLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagkocmV2aXNpb24gMTA4MTM4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI3NTI1LDYgKzI3NTI1LDE0IEBA
CiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xGcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAiCisJCQkJCT4KKwkJCQk8
L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGlj
c1xGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRnJhY3Rpb25hbExheW91
dFNpemUuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTA4MTM4KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOTcsMTAgKzI5NywxMSBAQAogCQkxNDMyRTg0OTBDNTE0OTNGMDBCMTUw
MEYgLyogR0NDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0MzJFODQ4MEM1MTQ5M0YwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuY3Bw
ICovOyB9OwogCQkxNDQ5RTI0QzEwN0Q0QTg0MDBCNTc5M0YgLyogSlNDYWxsYmFja0RhdGEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NDlFMjRBMTA3
RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5oICovOyB9OwogCQkxNDQ5RTI4NzEwN0Q0
REI0MDBCNTc5M0YgLyogSlNDYWxsYmFja0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0OUUyODYxMDdENERCNDAwQjU3OTNGIC8qIEpTQ2Fs
bGJhY2tEYXRhLmNwcCAqLzsgfTsKLQkJMTQ0RkNFNTkxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0
aW9uYWxMYXlvdXRQb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQ0RkNFNTQxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRQb2lu
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0
NEZDRTUyMTRFQzc5QkMwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0VW5pdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0RkNFNTExNEVDNzlCQzAw
MEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRVbml0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ0RkNFNUMxNEVDNzlFNzAwMEQxN0EzIC8qIEZy
YWN0aW9uYWxMYXlvdXRTaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0NEZDRTU3MTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0
U2l6ZS5jcHAgKi87IH07CiAJCTE0NEZDRTVEMTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFs
TGF5b3V0U2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQ0RkNFNTgxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTQ0RkNFNTIx
NEVDNzlCQzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRVbml0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDRGQ0U1MTE0RUM3OUJDMDAwRDE3QTMg
LyogRnJhY3Rpb25hbExheW91dFVuaXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkxNDRGQ0ZFMDE0RUYyNTA5MDAwRDE3QTMgLyogRnJhY3Rpb25h
bExheW91dFJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQ0RkNGREUxNEVGMjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNw
cCAqLzsgfTsKKwkJMTQ0RkNGRTExNEVGMjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRS
ZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDRG
Q0ZERjE0RUYyNTA5MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFJlY3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDY0RTA2QzEzNUVDMTA2
MDBGREIwMEEgLyogSlNNZWRpYUxpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2NEUwNkIxMzVFQzEwNjAwRkRCMDBBIC8qIEpTTWVk
aWFMaXN0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJMTQ3N0U3NzYwQkY0MTM0QTAwMTUyODcyIC8qIFBh
Z2VDYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDc3RTc3NDBCRjQxMzRBMDAxNTI4NzIgLyogUGFnZUNhY2hlLmNwcCAqLzsgfTsKIAkJMTQ3
N0U3NzcwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3N0U3NzUwQkY0MTM0QTAwMTUyODcyIC8qIFBh
Z2VDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC03MDIxLDEwICs3MDIyLDEyIEBACiAJCTE0MzJFODQ4MEM1MTQ5M0YwMEIxNTAwRiAvKiBH
Q0NvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdD
Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDlFMjRBMTA3
RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0NhbGxiYWNrRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxNDQ5RTI4NjEwN0Q0REI0MDBCNTc5M0YgLyogSlNDYWxsYmFja0RhdGEuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYWxsYmFja0RhdGEuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxNDRGQ0U1MTE0RUM3OUJDMDAwRDE3QTMgLyogRnJhY3Rp
b25hbExheW91dFVuaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhY3Rp
b25hbExheW91dFVuaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0RkNFNTQx
NEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRQb2ludC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0RkNFNTcxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxM
YXlvdXRTaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYWN0
aW9uYWxMYXlvdXRTaXplLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0RkNF
NTgxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYWN0aW9uYWxMYXlvdXRTaXplLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTE0NEZDRTUxMTRFQzc5QkMwMDBEMTdBMyAvKiBGcmFjdGlvbmFs
TGF5b3V0VW5pdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFjdGlvbmFs
TGF5b3V0VW5pdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDRGQ0ZERTE0RUYy
NTA5MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFJlY3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRnJhY3Rpb25hbExheW91dFJlY3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxNDRGQ0ZERjE0RUYyNTA5MDAwRDE3QTMgLyogRnJhY3Rpb25h
bExheW91dFJlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhY3Rpb25h
bExheW91dFJlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ2NEUwNkIxMzVF
QzEwNjAwRkRCMDBBIC8qIEpTTWVkaWFMaXN0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVkaWFMaXN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMTQ3N0U3NzQwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VDYWNoZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZUNhY2hlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ3N0U3NzUwQkY0MTM0QTAwMTUyODcyIC8qIFBh
Z2VDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUNhY2hlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODkyNiw2ICsxODkyOSw4IEBACiAJCQkJ
Mzc4NEMzNEEwRTExQUEzNDAwN0Q4RDQ4IC8qIEZvbnRUcmFpdHNNYXNrLmggKi8sCiAJCQkJQkNF
NDQxMzUxMkY3NDkwQjAwOUI4NEI4IC8qIEZvbnRXaWR0aFZhcmlhbnQuaCAqLywKIAkJCQkxNDRG
Q0U1NDE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFBvaW50LmggKi8sCisJCQkJ
MTQ0RkNGREUxNEVGMjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCAqLywK
KwkJCQkxNDRGQ0ZERjE0RUYyNTA5MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFJlY3QuaCAq
LywKIAkJCQkxNDRGQ0U1NzE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFNpemUu
Y3BwICovLAogCQkJCTE0NEZDRTU4MTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0
U2l6ZS5oICovLAogCQkJCUJDMjNGMERBMERBRkY0QTQwMDlGREM5MSAvKiBHZW5lcmF0ZWRJbWFn
ZS5oICovLApAQCAtMjQyODEsNiArMjQyODYsNyBAQAogCQkJCUZENTM3MzUzMTM3QjY1MTgwMDAw
OERDRSAvKiBaZXJvUG9sZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0RkNFNTIxNEVDNzlCQzAw
MEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRVbml0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDRG
Q0U1RDE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFNpemUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTE0NEZDRkUxMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNzIyNiw2ICsyNzIzMiw3IEBACiAJCQkJOTc3RTJFMEUx
MkYwRkM5QzAwQzEzMzc5IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ1
MzczNTIxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0NEZDRTVDMTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0U2l6ZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkxNDRGQ0ZFMDE0RUYyNTA5MDAwRDE3QTMgLyogRnJhY3Rpb25hbExh
eW91dFJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAJKHJldmlzaW9uIDEwODEzOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKIAogI2luY2x1ZGUgIkZs
b2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCiAjaW5j
bHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxtYXRoLmg+
CkBAIC00Miw2ICs0MywxMCBAQCBGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBJbnRSZWN0JiBy
KSA6CiB7CiB9CiAKK0Zsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRS
ZWN0JiByKSA6IG1fbG9jYXRpb24oci5sb2NhdGlvbigpKSwgbV9zaXplKHIuc2l6ZSgpKQorewor
fQorCiBGbG9hdFJlY3QgRmxvYXRSZWN0OjpuYXJyb3dQcmVjaXNpb24oZG91YmxlIHgsIGRvdWJs
ZSB5LCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpCiB7CiAgICAgcmV0dXJuIEZsb2F0UmVj
dChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHgpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHkpLCBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHdpZHRoKSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChoZWln
aHQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5oCShyZXZpc2lvbiAxMDgxMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBWR1JlY3Q7CiAjZW5kaWYKIAorY2xhc3MgRnJhY3Rpb25hbExheW91
dFJlY3Q7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgSW50UG9pbnQ7CiAKQEAgLTgyLDYgKzgzLDcg
QEAgcHVibGljOgogICAgIEZsb2F0UmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwg
ZmxvYXQgaGVpZ2h0KQogICAgICAgICA6IG1fbG9jYXRpb24oRmxvYXRQb2ludCh4LCB5KSksIG1f
c2l6ZShGbG9hdFNpemUod2lkdGgsIGhlaWdodCkpIHsgfQogICAgIEZsb2F0UmVjdChjb25zdCBJ
bnRSZWN0Jik7CisgICAgRmxvYXRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7CiAK
ICAgICBzdGF0aWMgRmxvYXRSZWN0IG5hcnJvd1ByZWNpc2lvbihkb3VibGUgeCwgZG91YmxlIHks
IGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlv
bmFsTGF5b3V0UmVjdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICog
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
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgorCisjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKKyNpbmNs
dWRlIDxhbGdvcml0aG0+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRnJhY3Rpb25hbExheW91
dFJlY3Q6OkZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKKyAgICA6IG1f
bG9jYXRpb24oRnJhY3Rpb25hbExheW91dFBvaW50KHIubG9jYXRpb24oKSkpCisgICAgLCBtX3Np
emUoRnJhY3Rpb25hbExheW91dFNpemUoci5zaXplKCkpKQoreworfQorCitib29sIEZyYWN0aW9u
YWxMYXlvdXRSZWN0OjppbnRlcnNlY3RzKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhl
cikgY29uc3QKK3sKKyAgICAvLyBDaGVja2luZyBlbXB0aW5lc3MgaGFuZGxlcyBuZWdhdGl2ZSB3
aWR0aHMgYXMgd2VsbCBhcyB6ZXJvLgorICAgIHJldHVybiAhaXNFbXB0eSgpICYmICFvdGhlci5p
c0VtcHR5KCkKKyAgICAgICAgJiYgeCgpIDwgb3RoZXIubWF4WCgpICYmIG90aGVyLngoKSA8IG1h
eFgoKQorICAgICAgICAmJiB5KCkgPCBvdGhlci5tYXhZKCkgJiYgb3RoZXIueSgpIDwgbWF4WSgp
OworfQorCitib29sIEZyYWN0aW9uYWxMYXlvdXRSZWN0Ojpjb250YWlucyhjb25zdCBGcmFjdGlv
bmFsTGF5b3V0UmVjdCYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHgoKSA8PSBvdGhlci54
KCkgJiYgbWF4WCgpID49IG90aGVyLm1heFgoKQorICAgICAgICAmJiB5KCkgPD0gb3RoZXIueSgp
ICYmIG1heFkoKSA+PSBvdGhlci5tYXhZKCk7Cit9CisKK3ZvaWQgRnJhY3Rpb25hbExheW91dFJl
Y3Q6OmludGVyc2VjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpCit7CisgICAg
RnJhY3Rpb25hbExheW91dFVuaXQgbmV3WCA9IHN0ZDo6bWF4KHgoKSwgb3RoZXIueCgpKTsKKyAg
ICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBuZXdZID0gc3RkOjptYXgoeSgpLCBvdGhlci55KCkpOwor
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG5ld01heFggPSBzdGQ6Om1pbihtYXhYKCksIG90aGVy
Lm1heFgoKSk7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbmV3TWF4WSA9IHN0ZDo6bWluKG1h
eFkoKSwgb3RoZXIubWF4WSgpKTsKKworICAgIC8vIFJldHVybiBhIGNsZWFuIGVtcHR5IHJlY3Rh
bmdsZSBmb3Igbm9uLWludGVyc2VjdGluZyBjYXNlcy4KKyAgICBpZiAobmV3WCA+PSBuZXdNYXhY
IHx8IG5ld1kgPj0gbmV3TWF4WSkgeworICAgICAgICBuZXdYID0gMDsKKyAgICAgICAgbmV3WSA9
IDA7CisgICAgICAgIG5ld01heFggPSAwOworICAgICAgICBuZXdNYXhZID0gMDsKKyAgICB9CisK
KyAgICBtX2xvY2F0aW9uLnNldFgobmV3WCk7CisgICAgbV9sb2NhdGlvbi5zZXRZKG5ld1kpOwor
ICAgIG1fc2l6ZS5zZXRXaWR0aChuZXdNYXhYIC0gbmV3WCk7CisgICAgbV9zaXplLnNldEhlaWdo
dChuZXdNYXhZIC0gbmV3WSk7Cit9CisKK3ZvaWQgRnJhY3Rpb25hbExheW91dFJlY3Q6OnVuaXRl
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikKK3sKKyAgICAvLyBIYW5kbGUgZW1w
dHkgc3BlY2lhbCBjYXNlcyBmaXJzdC4KKyAgICBpZiAob3RoZXIuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKGlzRW1wdHkoKSkgeworICAgICAgICAqdGhpcyA9IG90aGVyOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbmV3WCA9
IHN0ZDo6bWluKHgoKSwgb3RoZXIueCgpKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBuZXdZ
ID0gc3RkOjptaW4oeSgpLCBvdGhlci55KCkpOworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG5l
d01heFggPSBzdGQ6Om1heChtYXhYKCksIG90aGVyLm1heFgoKSk7CisgICAgRnJhY3Rpb25hbExh
eW91dFVuaXQgbmV3TWF4WSA9IHN0ZDo6bWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKTsKKworICAg
IG1fbG9jYXRpb24uc2V0WChuZXdYKTsKKyAgICBtX2xvY2F0aW9uLnNldFkobmV3WSk7CisgICAg
bV9zaXplLnNldFdpZHRoKG5ld01heFggLSBuZXdYKTsKKyAgICBtX3NpemUuc2V0SGVpZ2h0KG5l
d01heFkgLSBuZXdZKTsKK30KKwordm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6dW5pdGVJZk5v
blplcm8oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKQoreworICAgIC8vIEhhbmRs
ZSBlbXB0eSBzcGVjaWFsIGNhc2VzIGZpcnN0LgorICAgIGlmICghb3RoZXIud2lkdGgoKSAmJiAh
b3RoZXIuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXdpZHRoKCkgJiYgIWhl
aWdodCgpKSB7CisgICAgICAgICp0aGlzID0gb3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBuZXdYID0gc3RkOjptaW4oeCgpLCBvdGhlci54
KCkpOworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG5ld1kgPSBzdGQ6Om1pbih5KCksIG90aGVy
LnkoKSk7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbmV3TWF4WCA9IHN0ZDo6bWF4KG1heFgo
KSwgb3RoZXIubWF4WCgpKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBuZXdNYXhZID0gc3Rk
OjptYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpOworCisgICAgbV9sb2NhdGlvbi5zZXRYKG5ld1gp
OworICAgIG1fbG9jYXRpb24uc2V0WShuZXdZKTsKKyAgICBtX3NpemUuc2V0V2lkdGgobmV3TWF4
WCAtIG5ld1gpOworICAgIG1fc2l6ZS5zZXRIZWlnaHQobmV3TWF4WSAtIG5ld1kpOworfQorCit2
b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0OjpzY2FsZShmbG9hdCBzKQoreworICAgIG1fbG9jYXRp
b24uc2V0WCh4KCkgKiBzKTsKKyAgICBtX2xvY2F0aW9uLnNldFkoeSgpICogcyk7CisgICAgbV9z
aXplLnNldFdpZHRoKHdpZHRoKCkgKiBzKTsKKyAgICBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCgp
ICogcyk7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRSZWN0IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8
RnJhY3Rpb25hbExheW91dFJlY3Q+JiByZWN0cykKK3sKKyAgICBGcmFjdGlvbmFsTGF5b3V0UmVj
dCByZXN1bHQ7CisKKyAgICBzaXplX3QgY291bnQgPSByZWN0cy5zaXplKCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICByZXN1bHQudW5pdGUocmVjdHNb
aV0pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiByZWN0KQoreworICAgIGZsb2F0IHggPSBmbG9v
cmYocmVjdC54KCkudG9GbG9hdCgpKTsKKyAgICBmbG9hdCB5ID0gZmxvb3JmKHJlY3QueSgpLnRv
RmxvYXQoKSk7CisgICAgZmxvYXQgd2lkdGggPSBjZWlsZihyZWN0Lm1heFgoKS50b0Zsb2F0KCkp
IC0geDsKKyAgICBmbG9hdCBoZWlnaHQgPSBjZWlsZihyZWN0Lm1heFkoKS50b0Zsb2F0KCkpIC0g
eTsKKworICAgIHJldHVybiBJbnRSZWN0KGNsYW1wVG9JbnRlZ2VyKHgpLCBjbGFtcFRvSW50ZWdl
cih5KSwgCisgICAgICAgICAgICAgICAgICAgY2xhbXBUb0ludGVnZXIod2lkdGgpLCBjbGFtcFRv
SW50ZWdlcihoZWlnaHQpKTsKK30KKworRnJhY3Rpb25hbExheW91dFJlY3QgZW5jbG9zaW5nRnJh
Y3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBG
cmFjdGlvbmFsTGF5b3V0UmVjdChyZWN0LngoKSwgcmVjdC55KCksCisgICAgICAgICAgICAgICAg
ICAgICByZWN0Lm1heFgoKSAtIHJlY3QueCgpICsgRnJhY3Rpb25hbExheW91dFVuaXQ6OmVwc2ls
b24oKSwKKyAgICAgICAgICAgICAgICAgICAgIHJlY3QubWF4WSgpIC0gcmVjdC55KCkgKyBGcmFj
dGlvbmFsTGF5b3V0VW5pdDo6ZXBzaWxvbigpKTsKK30KKworSW50UmVjdCBwaXhlbFNuYXBwZWRJ
bnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiByZWN0KQoreworICAgIEludFBvaW50
IHJvdW5kZWRMb2NhdGlvbiA9IHJvdW5kZWRJbnRQb2ludChyZWN0LmxvY2F0aW9uKCkpOworICAg
IHJldHVybiBJbnRSZWN0KHJvdW5kZWRMb2NhdGlvbiwgSW50U2l6ZSgocmVjdC54KCkgKyByZWN0
LndpZHRoKCkpLnJvdW5kKCkgLSByb3VuZGVkTG9jYXRpb24ueCgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVjdC55KCkgKyByZWN0LmhlaWdodCgpKS5y
b3VuZCgpIC0gcm91bmRlZExvY2F0aW9uLnkoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5
b3V0UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxs
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
TUFHRS4KKyAqLworCisjaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRSZWN0X2gKKyNkZWZpbmUgRnJh
Y3Rpb25hbExheW91dFJlY3RfaAorCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFBvaW50Lmgi
CisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFJlY3Q7CisKK2NsYXNzIEZyYWN0aW9uYWxMYXlv
dXRSZWN0IHsKK3B1YmxpYzoKKyAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCgpIHsgfQorICAgIEZy
YWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgbG9jYXRpb24s
IGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKQorICAgICAgICA6IG1fbG9jYXRpb24o
bG9jYXRpb24pLCBtX3NpemUoc2l6ZSkgeyB9CisgICAgRnJhY3Rpb25hbExheW91dFJlY3QoRnJh
Y3Rpb25hbExheW91dFVuaXQgeCwgRnJhY3Rpb25hbExheW91dFVuaXQgeSwgRnJhY3Rpb25hbExh
eW91dFVuaXQgd2lkdGgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkKKyAgICAgICAgOiBt
X2xvY2F0aW9uKEZyYWN0aW9uYWxMYXlvdXRQb2ludCh4LCB5KSksIG1fc2l6ZShGcmFjdGlvbmFs
TGF5b3V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkgeyB9CisgICAgRnJhY3Rpb25hbExheW91dFJlY3Qo
Y29uc3QgRmxvYXRQb2ludCYgbG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICAg
ICAgOiBtX2xvY2F0aW9uKGxvY2F0aW9uKSwgbV9zaXplKHNpemUpIHsgfQorICAgIEZyYWN0aW9u
YWxMYXlvdXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIDogbV9sb2NhdGlvbihyZWN0LmxvY2F0
aW9uKCkpLCBtX3NpemUocmVjdC5zaXplKCkpIHsgfQorCisgICAgZXhwbGljaXQgRnJhY3Rpb25h
bExheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRs
eSBzaW5jZSBpdCdzIGxvc3N5CisgICAgICAgIAorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBs
b2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0KKyAgICBGcmFjdGlvbmFsTGF5
b3V0U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICB2b2lkIHNldExv
Y2F0aW9uKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgbG9jYXRpb24pIHsgbV9sb2NhdGlv
biA9IGxvY2F0aW9uOyB9CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRT
aXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IHgoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uLngoKTsgfQorICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0IHkoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uLnkoKTsgfQorICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IG1heFgoKSBjb25zdCB7IHJldHVybiB4KCkgKyB3aWR0aCgpOyB9CisgICAg
RnJhY3Rpb25hbExheW91dFVuaXQgbWF4WSgpIGNvbnN0IHsgcmV0dXJuIHkoKSArIGhlaWdodCgp
OyB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3Np
emUud2lkdGgoKTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQorCisgICAgdm9pZCBzZXRYKEZyYWN0aW9uYWxMYXlv
dXRVbml0IHgpIHsgbV9sb2NhdGlvbi5zZXRYKHgpOyB9CisgICAgdm9pZCBzZXRZKEZyYWN0aW9u
YWxMYXlvdXRVbml0IHkpIHsgbV9sb2NhdGlvbi5zZXRZKHkpOyB9CisgICAgdm9pZCBzZXRXaWR0
aChGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCkgeyBtX3NpemUuc2V0V2lkdGgod2lkdGgpOyB9
CisgICAgdm9pZCBzZXRIZWlnaHQoRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KSB7IG1fc2l6
ZS5zZXRIZWlnaHQoaGVpZ2h0KTsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gbV9zaXplLmlzRW1wdHkoKTsgfQorCisgICAgLy8gTk9URTogVGhlIHJlc3VsdCBpcyByb3Vu
ZGVkIHRvIGludGVnZXIgdmFsdWVzLCBhbmQgdGh1cyBtYXkgYmUgbm90IHRoZSBleGFjdAorICAg
IC8vIGNlbnRlciBwb2ludC4KKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgY2VudGVyKCkgY29u
c3QgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KHgoKSArIHdpZHRoKCkgLyAyLCB5KCkg
KyBoZWlnaHQoKSAvIDIpOyB9CisKKyAgICB2b2lkIG1vdmUoY29uc3QgRnJhY3Rpb25hbExheW91
dFNpemUmIHNpemUpIHsgbV9sb2NhdGlvbiArPSBzaXplOyB9IAorICAgIHZvaWQgbW92ZUJ5KGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb2Zmc2V0KSB7IG1fbG9jYXRpb24ubW92ZShvZmZz
ZXQueCgpLCBvZmZzZXQueSgpKTsgfQorICAgIHZvaWQgbW92ZShGcmFjdGlvbmFsTGF5b3V0VW5p
dCBkeCwgRnJhY3Rpb25hbExheW91dFVuaXQgZHkpIHsgbV9sb2NhdGlvbi5tb3ZlKGR4LCBkeSk7
IH0gCisKKyAgICB2b2lkIGV4cGFuZChjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkg
eyBtX3NpemUgKz0gc2l6ZTsgfQorICAgIHZvaWQgZXhwYW5kKEZyYWN0aW9uYWxMYXlvdXRVbml0
IGR3LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKGR3LCBkaCk7IH0K
KyAgICB2b2lkIGNvbnRyYWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1f
c2l6ZSAtPSBzaXplOyB9CisgICAgdm9pZCBjb250cmFjdChGcmFjdGlvbmFsTGF5b3V0VW5pdCBk
dywgRnJhY3Rpb25hbExheW91dFVuaXQgZGgpIHsgbV9zaXplLmV4cGFuZCgtZHcsIC1kaCk7IH0K
KworICAgIHZvaWQgc2hpZnRYRWRnZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCisgICAg
eworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSB4KCk7CisgICAg
ICAgIHNldFgoZWRnZSk7CisgICAgICAgIHNldFdpZHRoKHN0ZDo6bWF4PEZyYWN0aW9uYWxMYXlv
dXRVbml0PigwLCB3aWR0aCgpIC0gZGVsdGEpKTsKKyAgICB9CisgICAgdm9pZCBzaGlmdE1heFhF
ZGdlVG8oRnJhY3Rpb25hbExheW91dFVuaXQgZWRnZSkKKyAgICB7CisgICAgICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAtIG1heFgoKTsKKyAgICAgICAgc2V0V2lkdGgoc3Rk
OjptYXg8RnJhY3Rpb25hbExheW91dFVuaXQ+KDAsIHdpZHRoKCkgKyBkZWx0YSkpOworICAgIH0K
KyAgICB2b2lkIHNoaWZ0WUVkZ2VUbyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBlZGdlKQorICAgIHsK
KyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0geSgpOworICAgICAg
ICBzZXRZKGVkZ2UpOworICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXg8RnJhY3Rpb25hbExheW91
dFVuaXQ+KDAsIGhlaWdodCgpIC0gZGVsdGEpKTsKKyAgICB9CisgICAgdm9pZCBzaGlmdE1heFlF
ZGdlVG8oRnJhY3Rpb25hbExheW91dFVuaXQgZWRnZSkKKyAgICB7CisgICAgICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAtIG1heFkoKTsKKyAgICAgICAgc2V0SGVpZ2h0KHN0
ZDo6bWF4PEZyYWN0aW9uYWxMYXlvdXRVbml0PigwLCBoZWlnaHQoKSArIGRlbHRhKSk7CisgICAg
fQorCisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IG1pblhNaW5ZQ29ybmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2NhdGlvbjsgfSAvLyB0eXBpY2FsbHkgdG9wTGVmdAorICAgIEZyYWN0aW9uYWxM
YXlvdXRQb2ludCBtYXhYTWluWUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlv
dXRQb2ludChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSk7
IH0gLy8gdHlwaWNhbGx5IHRvcFJpZ2h0CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IG1pblhN
YXhZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1fbG9jYXRp
b24ueCgpLCBtX2xvY2F0aW9uLnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5
IGJvdHRvbUxlZnQKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWF4WE1heFlDb3JuZXIoKSBj
b25zdCB7IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQobV9sb2NhdGlvbi54KCkgKyBtX3Np
emUud2lkdGgoKSwgbV9sb2NhdGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0KCkpOyB9IC8vIHR5cGlj
YWxseSBib3R0b21SaWdodAorICAgIAorICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBGcmFjdGlv
bmFsTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIGJvb2wgY29udGFpbnMoY29uc3QgRnJhY3Rpb25h
bExheW91dFJlY3QmKSBjb25zdDsKKworICAgIC8vIFRoaXMgY2hlY2tzIHRvIHNlZSBpZiB0aGUg
cmVjdCBjb250YWlucyB4LHkgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLgorICAgIC8vIEVxdWl2
YWxlbnQgdG8gY2hlY2tpbmcgaWYgdGhlIHJlY3QgY29udGFpbnMgYSAxeDEgcmVjdCBiZWxvdyBh
bmQgdG8gdGhlIHJpZ2h0IG9mIChweCxweSkuCisgICAgYm9vbCBjb250YWlucyhGcmFjdGlvbmFs
TGF5b3V0VW5pdCBweCwgRnJhY3Rpb25hbExheW91dFVuaXQgcHkpIGNvbnN0CisgICAgICAgIHsg
cmV0dXJuIHB4ID49IHgoKSAmJiBweCA8IG1heFgoKSAmJiBweSA+PSB5KCkgJiYgcHkgPCBtYXhZ
KCk7IH0KKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcG9p
bnQpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQorCisg
ICAgdm9pZCBpbnRlcnNlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsKKyAgICB2b2lk
IHVuaXRlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7CisgICAgdm9pZCB1bml0ZUlmTm9u
WmVybyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOworCisgICAgdm9pZCBpbmZsYXRlWChG
cmFjdGlvbmFsTGF5b3V0VW5pdCBkeCkKKyAgICB7CisgICAgICAgIG1fbG9jYXRpb24uc2V0WCht
X2xvY2F0aW9uLngoKSAtIGR4KTsKKyAgICAgICAgbV9zaXplLnNldFdpZHRoKG1fc2l6ZS53aWR0
aCgpICsgZHggKyBkeCk7CisgICAgfQorICAgIHZvaWQgaW5mbGF0ZVkoRnJhY3Rpb25hbExheW91
dFVuaXQgZHkpCisgICAgeworICAgICAgICBtX2xvY2F0aW9uLnNldFkobV9sb2NhdGlvbi55KCkg
LSBkeSk7CisgICAgICAgIG1fc2l6ZS5zZXRIZWlnaHQobV9zaXplLmhlaWdodCgpICsgZHkgKyBk
eSk7CisgICAgfQorICAgIHZvaWQgaW5mbGF0ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkKSB7IGlu
ZmxhdGVYKGQpOyBpbmZsYXRlWShkKTsgfQorICAgIHZvaWQgc2NhbGUoZmxvYXQgcyk7CisKKyAg
ICBGcmFjdGlvbmFsTGF5b3V0UmVjdCB0cmFuc3Bvc2VkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEZy
YWN0aW9uYWxMYXlvdXRSZWN0KG1fbG9jYXRpb24udHJhbnNwb3NlZFBvaW50KCksIG1fc2l6ZS50
cmFuc3Bvc2VkU2l6ZSgpKTsgfQorCisgICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGlu
ZmluaXRlUmVjdCgpIHtyZXR1cm4gRnJhY3Rpb25hbExheW91dFJlY3QoRnJhY3Rpb25hbExheW91
dFVuaXQ6Om1pbigpIC8gMiwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om1pbigpIC8gMiwgRnJhY3Rp
b25hbExheW91dFVuaXQ6Om1heCgpLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCkpOyB9CisK
K3ByaXZhdGU6CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IG1fbG9jYXRpb247CisgICAgRnJh
Y3Rpb25hbExheW91dFNpemUgbV9zaXplOworfTsKKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRS
ZWN0IGludGVyc2VjdGlvbihjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFJlY3QmIGIpCit7CisgICAgRnJhY3Rpb25hbExheW91dFJlY3QgYyA9IGE7
CisgICAgYy5pbnRlcnNlY3QoYik7CisgICAgcmV0dXJuIGM7Cit9CisKK2lubGluZSBGcmFjdGlv
bmFsTGF5b3V0UmVjdCB1bmlvblJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBiKQoreworICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0
IGMgPSBhOworICAgIGMudW5pdGUoYik7CisgICAgcmV0dXJuIGM7Cit9CisKK0ZyYWN0aW9uYWxM
YXlvdXRSZWN0IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8RnJhY3Rpb25hbExheW91dFJlY3Q+Jik7
CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEs
IGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBiKQoreworICAgIHJldHVybiBhLmxvY2F0aW9u
KCkgPT0gYi5sb2NhdGlvbigpICYmIGEuc2l6ZSgpID09IGIuc2l6ZSgpOworfQorCitpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UmVjdCYgYikKK3sKKyAgICByZXR1cm4gYS5sb2NhdGlvbigpICE9IGIubG9j
YXRpb24oKSB8fCBhLnNpemUoKSAhPSBiLnNpemUoKTsKK30KKworSW50UmVjdCBlbmNsb3NpbmdJ
bnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7CitGcmFjdGlvbmFsTGF5b3V0UmVj
dCBlbmNsb3NpbmdGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKK0ludFJl
Y3QgcGl4ZWxTbmFwcGVkSW50UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5b3V0UmVjdF9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAko
cmV2aXNpb24gMTA4MTM4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50
UmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0
UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KIApA
QCAtNDAsNiArNDEsMTIgQEAgSW50UmVjdDo6SW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCiB7
CiB9CiAKK0ludFJlY3Q6OkludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIHIpCisg
ICAgOiBtX2xvY2F0aW9uKGZsb29yZWRJbnRQb2ludChyLmxvY2F0aW9uKCkpKQorICAgICwgbV9z
aXplKGZsb29yZWRJbnRTaXplKHIuc2l6ZSgpKSkKK3sKK30KKwogYm9vbCBJbnRSZWN0OjppbnRl
cnNlY3RzKGNvbnN0IEludFJlY3QmIG90aGVyKSBjb25zdAogewogICAgIC8vIENoZWNraW5nIGVt
cHRpbmVzcyBoYW5kbGVzIG5lZ2F0aXZlIHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCShyZXZpc2lvbiAxMDgx
MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAgc3RydWN0IFNrSVJlY3Q7CiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEZyYWN0aW9uYWxMYXlvdXRSZWN0Owog
CiBjbGFzcyBJbnRSZWN0IHsKIHB1YmxpYzoKQEAgLTgwLDcgKzgxLDggQEAgcHVibGljOgogICAg
IEludFJlY3QoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgICAgIDog
bV9sb2NhdGlvbihJbnRQb2ludCh4LCB5KSksIG1fc2l6ZShJbnRTaXplKHdpZHRoLCBoZWlnaHQp
KSB7IH0KIAotICAgIGV4cGxpY2l0IEludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KTsgLy8g
ZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKKyAgICBleHBsaWNpdCBJ
bnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2lu
Y2UgaXQncyBsb3NzeQorICAgIGV4cGxpY2l0IEludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91
dFJlY3QmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKICAg
ICAgICAgCiAgICAgSW50UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9u
OyB9CiAgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128035</attachid>
            <date>2012-02-21 13:38:30 -0800</date>
            <delta_ts>2012-02-21 16:28:21 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-78924-20120221133828.patch</filename>
            <type>text/plain</type>
            <size>29168</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODE0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDEyLTAyLTE3ICBFbWlsIEEg
RWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgRnJhY3Rpb25hbExheW91
dFJlY3QgZm9yIHN1Yi1waXhlbCBsYXlvdXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc4OTI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlk
ZWwuCisKKyAgICAgICAgQWRkIEZyYWN0aW9uYWxMYXlvdXRVbml0IHZlcnNpb24gb2YgUmVjdCBj
bGFzcy4gVXNlcyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQKKyAgICAgICAgYW5kIEZyYWN0aW9uYWxM
YXlvdXRTaXplIGludGVybmFsbHkuCisKKyAgICAgICAgQWxzbyBhZGQgY29udmVyc2lvbnMgdG8g
aW50L2Zsb2F0IHZlcnNpb25zIG9mIHNhbWUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0UmVjdDo6RmxvYXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChGbG9hdFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0
aW9uYWxMYXlvdXRSZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjpGcmFjdGlvbmFsTGF5b3V0UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6aW50ZXJzZWN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6Y29udGFpbnMpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OmludGVyc2VjdCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6dW5pdGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
Y3Rpb25hbExheW91dFJlY3Q6OnVuaXRlSWZOb25aZXJvKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YWN0aW9uYWxMYXlvdXRSZWN0OjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjp1bmlvblJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjplbmNsb3NpbmdGcmFjdGlvbmFsTGF5b3V0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpwaXhl
bFNuYXBwZWRJbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFs
TGF5b3V0UmVjdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRnJhY3Rp
b25hbExheW91dFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6
OkZyYWN0aW9uYWxMYXlvdXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlv
dXRSZWN0Ojpsb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVj
dDo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6c2V0TG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OnNldFNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OngpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OnkpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
Y3Rpb25hbExheW91dFJlY3Q6Om1heFgpOgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExh
eW91dFJlY3Q6Om1heFkpOgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6
OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjpoZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OnNldFgpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OnNldFkpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OnNldFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YWN0aW9uYWxMYXlvdXRSZWN0OjpzZXRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rp
b25hbExheW91dFJlY3Q6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExh
eW91dFJlY3Q6OmNlbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVj
dDo6bW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6bW92ZUJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjpleHBhbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OmNvbnRyYWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjpzaGlmdFhFZGdlVG8pOgorICAgICAgICAo
V2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OnNoaWZ0TWF4WEVkZ2VUbyk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6c2hpZnRZRWRnZVRvKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjpzaGlmdE1heFlFZGdlVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6Om1pblhNaW5ZQ29ybmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjptYXhYTWluWUNvcm5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6bWluWE1heFlDb3JuZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6Om1heFhNYXhZQ29ybmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0Ojpjb250YWlucyk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6aW5mbGF0ZVgpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OmluZmxhdGVZKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjppbmZsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYWN0
aW9uYWxMYXlvdXRSZWN0Ojp0cmFuc3Bvc2VkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFj
dGlvbmFsTGF5b3V0UmVjdDo6aW5maW5pdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmludGVy
c2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp1bmlvblJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvciE9KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludFJl
Y3Q6OkludFJlY3QpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW50UmVjdC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbnRSZWN0KToK
KwogMjAxMi0wMi0xNyAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQgbWFjIGNvbXBpbGUgZml4ICh1bnVzZWQgcGFyYW1ldGVyIHdhcm5p
bmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEwODEzOCkK
KysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAg
LTI5OTUsNiArMjk5NSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udFRyYWl0c01hc2suaCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFdpZHRoVmFyaWFudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCBcCisJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0U2l6ZS5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRTaXplLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvckdlbmVyYXRlZEltYWdl
LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkocmV2aXNpb24gMTA4MTM4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI3NTI1LDYgKzI3NTI1LDE0IEBACiAJ
CQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xGcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAiCisJCQkJCT4KKwkJCQk8L0Zp
bGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xG
cmFjdGlvbmFsTGF5b3V0UmVjdC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRnJhY3Rpb25hbExheW91dFNp
emUuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTA4MTM4KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTcsMTAgKzI5NywxMSBAQAogCQkxNDMyRTg0OTBDNTE0OTNGMDBCMTUwMEYg
LyogR0NDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0MzJFODQ4MEM1MTQ5M0YwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuY3BwICov
OyB9OwogCQkxNDQ5RTI0QzEwN0Q0QTg0MDBCNTc5M0YgLyogSlNDYWxsYmFja0RhdGEuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NDlFMjRBMTA3RDRB
ODQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5oICovOyB9OwogCQkxNDQ5RTI4NzEwN0Q0REI0
MDBCNTc5M0YgLyogSlNDYWxsYmFja0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0OUUyODYxMDdENERCNDAwQjU3OTNGIC8qIEpTQ2FsbGJh
Y2tEYXRhLmNwcCAqLzsgfTsKLQkJMTQ0RkNFNTkxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9u
YWxMYXlvdXRQb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQ0RkNFNTQxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRQb2ludC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0NEZD
RTUyMTRFQzc5QkMwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0VW5pdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0RkNFNTExNEVDNzlCQzAwMEQx
N0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRVbml0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ0RkNFNUMxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0
aW9uYWxMYXlvdXRTaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0NEZDRTU3MTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0U2l6
ZS5jcHAgKi87IH07CiAJCTE0NEZDRTVEMTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5
b3V0U2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTQ0RkNFNTgxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTQ0RkNFNTIxNEVD
NzlCQzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRVbml0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDRGQ0U1MTE0RUM3OUJDMDAwRDE3QTMgLyog
RnJhY3Rpb25hbExheW91dFVuaXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkxNDRGQ0ZFMDE0RUYyNTA5MDAwRDE3QTMgLyogRnJhY3Rpb25hbExh
eW91dFJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQ0RkNGREUxNEVGMjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCAq
LzsgfTsKKwkJMTQ0RkNGRTExNEVGMjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDRGQ0ZE
RjE0RUYyNTA5MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFJlY3QuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDY0RTA2QzEzNUVDMTA2MDBG
REIwMEEgLyogSlNNZWRpYUxpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2NEUwNkIxMzVFQzEwNjAwRkRCMDBBIC8qIEpTTWVkaWFM
aXN0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJMTQ3N0U3NzYwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VD
YWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDc3RTc3NDBCRjQxMzRBMDAxNTI4NzIgLyogUGFnZUNhY2hlLmNwcCAqLzsgfTsKIAkJMTQ3N0U3
NzcwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3N0U3NzUwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VD
YWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC03MDIxLDEwICs3MDIyLDEyIEBACiAJCTE0MzJFODQ4MEM1MTQ5M0YwMEIxNTAwRiAvKiBHQ0Nv
bnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdDQ29u
dHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDlFMjRBMTA3RDRB
ODQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0NhbGxiYWNrRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDQ5RTI4NjEwN0Q0REI0MDBCNTc5M0YgLyogSlNDYWxsYmFja0RhdGEuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYWxsYmFja0RhdGEuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxNDRGQ0U1MTE0RUM3OUJDMDAwRDE3QTMgLyogRnJhY3Rpb25h
bExheW91dFVuaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhY3Rpb25h
bExheW91dFVuaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0RkNFNTQxNEVD
NzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRQb2ludC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMTQ0RkNFNTcxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlv
dXRTaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYWN0aW9u
YWxMYXlvdXRTaXplLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0RkNFNTgx
NEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZyYWN0aW9uYWxMYXlvdXRTaXplLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTE0NEZDRTUxMTRFQzc5QkMwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5
b3V0VW5pdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFjdGlvbmFsTGF5
b3V0VW5pdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDRGQ0ZERTE0RUYyNTA5
MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFJlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRnJhY3Rpb25hbExheW91dFJlY3QuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxNDRGQ0ZERjE0RUYyNTA5MDAwRDE3QTMgLyogRnJhY3Rpb25hbExh
eW91dFJlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhY3Rpb25hbExh
eW91dFJlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ2NEUwNkIxMzVFQzEw
NjAwRkRCMDBBIC8qIEpTTWVkaWFMaXN0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTTWVkaWFMaXN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQ3N0U3NzQwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VDYWNoZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZUNhY2hlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ3N0U3NzUwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VD
YWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUNhY2hlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODkyNiw2ICsxODkyOSw4IEBACiAJCQkJMzc4
NEMzNEEwRTExQUEzNDAwN0Q4RDQ4IC8qIEZvbnRUcmFpdHNNYXNrLmggKi8sCiAJCQkJQkNFNDQx
MzUxMkY3NDkwQjAwOUI4NEI4IC8qIEZvbnRXaWR0aFZhcmlhbnQuaCAqLywKIAkJCQkxNDRGQ0U1
NDE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFBvaW50LmggKi8sCisJCQkJMTQ0
RkNGREUxNEVGMjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCAqLywKKwkJ
CQkxNDRGQ0ZERjE0RUYyNTA5MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFJlY3QuaCAqLywK
IAkJCQkxNDRGQ0U1NzE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFNpemUuY3Bw
ICovLAogCQkJCTE0NEZDRTU4MTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0U2l6
ZS5oICovLAogCQkJCUJDMjNGMERBMERBRkY0QTQwMDlGREM5MSAvKiBHZW5lcmF0ZWRJbWFnZS5o
ICovLApAQCAtMjQyODEsNiArMjQyODYsNyBAQAogCQkJCUZENTM3MzUzMTM3QjY1MTgwMDAwOERD
RSAvKiBaZXJvUG9sZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0RkNFNTIxNEVDNzlCQzAwMEQx
N0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRVbml0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDRGQ0U1
RDE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFNpemUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTE0NEZDRkUxMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC0yNzIyNiw2ICsyNzIzMiw3IEBACiAJCQkJOTc3RTJFMEUxMkYw
RkM5QzAwQzEzMzc5IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ1Mzcz
NTIxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
NEZDRTVDMTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0U2l6ZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkxNDRGQ0ZFMDE0RUYyNTA5MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91
dFJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAJKHJldmlzaW9uIDEwODEzOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKIAogI2luY2x1ZGUgIkZsb2F0
Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxtYXRoLmg+CkBA
IC00Miw2ICs0MywxMCBAQCBGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBJbnRSZWN0JiByKSA6
CiB7CiB9CiAKK0Zsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0
JiByKSA6IG1fbG9jYXRpb24oci5sb2NhdGlvbigpKSwgbV9zaXplKHIuc2l6ZSgpKQoreworfQor
CiBGbG9hdFJlY3QgRmxvYXRSZWN0OjpuYXJyb3dQcmVjaXNpb24oZG91YmxlIHgsIGRvdWJsZSB5
LCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpCiB7CiAgICAgcmV0dXJuIEZsb2F0UmVjdChu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHgpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHkpLCBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KHdpZHRoKSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChoZWlnaHQp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5o
CShyZXZpc2lvbiAxMDgxMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBWR1JlY3Q7CiAjZW5kaWYKIAorY2xhc3MgRnJhY3Rpb25hbExheW91dFJl
Y3Q7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgSW50UG9pbnQ7CiAKQEAgLTgyLDYgKzgzLDcgQEAg
cHVibGljOgogICAgIEZsb2F0UmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxv
YXQgaGVpZ2h0KQogICAgICAgICA6IG1fbG9jYXRpb24oRmxvYXRQb2ludCh4LCB5KSksIG1fc2l6
ZShGbG9hdFNpemUod2lkdGgsIGhlaWdodCkpIHsgfQogICAgIEZsb2F0UmVjdChjb25zdCBJbnRS
ZWN0Jik7CisgICAgRmxvYXRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7CiAKICAg
ICBzdGF0aWMgRmxvYXRSZWN0IG5hcnJvd1ByZWNpc2lvbihkb3VibGUgeCwgZG91YmxlIHksIGRv
dWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFs
TGF5b3V0UmVjdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogQ29w
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
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgorCisjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKKyNpbmNsdWRl
IDxhbGdvcml0aG0+CisKK3VzaW5nIHN0ZDo6bWF4OwordXNpbmcgc3RkOjptaW47CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworRnJhY3Rpb25hbExheW91dFJlY3Q6OkZyYWN0aW9uYWxMYXlvdXRS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKKyAgICA6IG1fbG9jYXRpb24oRnJhY3Rpb25hbExheW91
dFBvaW50KHIubG9jYXRpb24oKSkpCisgICAgLCBtX3NpemUoRnJhY3Rpb25hbExheW91dFNpemUo
ci5zaXplKCkpKQoreworfQorCitib29sIEZyYWN0aW9uYWxMYXlvdXRSZWN0OjppbnRlcnNlY3Rz
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikgY29uc3QKK3sKKyAgICAvLyBDaGVj
a2luZyBlbXB0aW5lc3MgaGFuZGxlcyBuZWdhdGl2ZSB3aWR0aHMgYXMgd2VsbCBhcyB6ZXJvLgor
ICAgIHJldHVybiAhaXNFbXB0eSgpICYmICFvdGhlci5pc0VtcHR5KCkKKyAgICAgICAgJiYgeCgp
IDwgb3RoZXIubWF4WCgpICYmIG90aGVyLngoKSA8IG1heFgoKQorICAgICAgICAmJiB5KCkgPCBv
dGhlci5tYXhZKCkgJiYgb3RoZXIueSgpIDwgbWF4WSgpOworfQorCitib29sIEZyYWN0aW9uYWxM
YXlvdXRSZWN0Ojpjb250YWlucyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHgoKSA8PSBvdGhlci54KCkgJiYgbWF4WCgpID49IG90aGVyLm1h
eFgoKQorICAgICAgICAmJiB5KCkgPD0gb3RoZXIueSgpICYmIG1heFkoKSA+PSBvdGhlci5tYXhZ
KCk7Cit9CisKK3ZvaWQgRnJhY3Rpb25hbExheW91dFJlY3Q6OmludGVyc2VjdChjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpCit7CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IG5l
d0xvY2F0aW9uKG1heCh4KCksIG90aGVyLngoKSksIG1heCh5KCksIG90aGVyLnkoKSkpOworICAg
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdNYXhQb2ludChtaW4obWF4WCgpLCBvdGhlci5tYXhY
KCkpLCBtaW4obWF4WSgpLCBvdGhlci5tYXhZKCkpKTsKKworICAgIC8vIFJldHVybiBhIGNsZWFu
IGVtcHR5IHJlY3RhbmdsZSBmb3Igbm9uLWludGVyc2VjdGluZyBjYXNlcy4KKyAgICBpZiAobmV3
TG9jYXRpb24ueCgpID49IG5ld01heFBvaW50LngoKSB8fCBuZXdMb2NhdGlvbi55KCkgPj0gbmV3
TWF4UG9pbnQueSgpKSB7CisgICAgICAgIG5ld0xvY2F0aW9uID0gRnJhY3Rpb25hbExheW91dFBv
aW50KDAsIDApOworICAgICAgICBuZXdNYXhQb2ludCA9IEZyYWN0aW9uYWxMYXlvdXRQb2ludCgw
LCAwKTsKKyAgICB9CisKKyAgICBtX2xvY2F0aW9uID0gbmV3TG9jYXRpb247CisgICAgbV9zaXpl
ID0gbmV3TWF4UG9pbnQgLSBuZXdMb2NhdGlvbjsKK30KKwordm9pZCBGcmFjdGlvbmFsTGF5b3V0
UmVjdDo6dW5pdGUoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKQoreworICAgIC8v
IEhhbmRsZSBlbXB0eSBzcGVjaWFsIGNhc2VzIGZpcnN0LgorICAgIGlmIChvdGhlci5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoaXNFbXB0eSgpKSB7CisgICAgICAgICp0aGlz
ID0gb3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQgbmV3TG9jYXRpb24obWluKHgoKSwgb3RoZXIueCgpKSwgbWluKHkoKSwgb3RoZXIueSgp
KSk7CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IG5ld01heFBvaW50KG1heChtYXhYKCksIG90
aGVyLm1heFgoKSksIG1heChtYXhZKCksIG90aGVyLm1heFkoKSkpOworCisgICAgbV9sb2NhdGlv
biA9IG5ld0xvY2F0aW9uOworICAgIG1fc2l6ZSA9IG5ld01heFBvaW50IC0gbmV3TG9jYXRpb247
Cit9CisKK3ZvaWQgRnJhY3Rpb25hbExheW91dFJlY3Q6OnVuaXRlSWZOb25aZXJvKGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikKK3sKKyAgICAvLyBIYW5kbGUgZW1wdHkgc3BlY2lh
bCBjYXNlcyBmaXJzdC4KKyAgICBpZiAoIW90aGVyLndpZHRoKCkgJiYgIW90aGVyLmhlaWdodCgp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF3aWR0aCgpICYmICFoZWlnaHQoKSkgeworICAg
ICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRnJhY3Rp
b25hbExheW91dFBvaW50IG5ld0xvY2F0aW9uKG1pbih4KCksIG90aGVyLngoKSksIG1pbih5KCks
IG90aGVyLnkoKSkpOworICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdNYXhQb2ludChtYXgo
bWF4WCgpLCBvdGhlci5tYXhYKCkpLCBtYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpKTsKKworICAg
IG1fbG9jYXRpb24gPSBuZXdMb2NhdGlvbjsKKyAgICBtX3NpemUgPSBuZXdNYXhQb2ludCAtIG5l
d0xvY2F0aW9uOworfQorCit2b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0OjpzY2FsZShmbG9hdCBz
KQoreworICAgIG1fbG9jYXRpb24uc2NhbGUocywgcyk7CisgICAgbV9zaXplLnNjYWxlKHMpOwor
fQorCitGcmFjdGlvbmFsTGF5b3V0UmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEZyYWN0aW9u
YWxMYXlvdXRSZWN0PiYgcmVjdHMpCit7CisgICAgRnJhY3Rpb25hbExheW91dFJlY3QgcmVzdWx0
OworCisgICAgc2l6ZV90IGNvdW50ID0gcmVjdHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgcmVzdWx0LnVuaXRlKHJlY3RzW2ldKTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0ludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBG
cmFjdGlvbmFsTGF5b3V0UmVjdCYgcmVjdCkKK3sKKyAgICBmbG9hdCB4ID0gZmxvb3JmKHJlY3Qu
eCgpLnRvRmxvYXQoKSk7CisgICAgZmxvYXQgeSA9IGZsb29yZihyZWN0LnkoKS50b0Zsb2F0KCkp
OworICAgIGZsb2F0IHdpZHRoID0gY2VpbGYocmVjdC5tYXhYKCkudG9GbG9hdCgpKSAtIHg7Cisg
ICAgZmxvYXQgaGVpZ2h0ID0gY2VpbGYocmVjdC5tYXhZKCkudG9GbG9hdCgpKSAtIHk7CisKKyAg
ICByZXR1cm4gSW50UmVjdChjbGFtcFRvSW50ZWdlcih4KSwgY2xhbXBUb0ludGVnZXIoeSksIAor
ICAgICAgICAgICAgICAgICAgIGNsYW1wVG9JbnRlZ2VyKHdpZHRoKSwgY2xhbXBUb0ludGVnZXIo
aGVpZ2h0KSk7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRSZWN0IGVuY2xvc2luZ0ZyYWN0aW9uYWxM
YXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25h
bExheW91dFJlY3QocmVjdC54KCksIHJlY3QueSgpLAorICAgICAgICAgICAgICAgICAgICAgcmVj
dC5tYXhYKCkgLSByZWN0LngoKSArIEZyYWN0aW9uYWxMYXlvdXRVbml0OjplcHNpbG9uKCksCisg
ICAgICAgICAgICAgICAgICAgICByZWN0Lm1heFkoKSAtIHJlY3QueSgpICsgRnJhY3Rpb25hbExh
eW91dFVuaXQ6OmVwc2lsb24oKSk7Cit9CisKK0ludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgcmVjdCkKK3sKKyAgICBJbnRQb2ludCByb3VuZGVk
TG9jYXRpb24gPSByb3VuZGVkSW50UG9pbnQocmVjdC5sb2NhdGlvbigpKTsKKyAgICByZXR1cm4g
SW50UmVjdChyb3VuZGVkTG9jYXRpb24sIEludFNpemUoKHJlY3QueCgpICsgcmVjdC53aWR0aCgp
KS5yb3VuZCgpIC0gcm91bmRlZExvY2F0aW9uLngoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSkucm91bmQoKSAt
IHJvdW5kZWRMb2NhdGlvbi55KCkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlv
bmFsTGF5b3V0UmVjdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
ODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
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
Ki8KKworI2lmbmRlZiBGcmFjdGlvbmFsTGF5b3V0UmVjdF9oCisjZGVmaW5lIEZyYWN0aW9uYWxM
YXlvdXRSZWN0X2gKKworI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRQb2ludC5oIgorI2luY2x1
ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgRmxvYXRSZWN0OworCitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0UmVjdCB7
CitwdWJsaWM6CisgICAgRnJhY3Rpb25hbExheW91dFJlY3QoKSB7IH0KKyAgICBGcmFjdGlvbmFs
TGF5b3V0UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBtX2xvY2F0aW9uKGxvY2F0aW9u
KSwgbV9zaXplKHNpemUpIHsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0KEZyYWN0aW9uYWxM
YXlvdXRVbml0IHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHksIEZyYWN0aW9uYWxMYXlvdXRVbml0
IHdpZHRoLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQpCisgICAgICAgIDogbV9sb2NhdGlv
bihGcmFjdGlvbmFsTGF5b3V0UG9pbnQoeCwgeSkpLCBtX3NpemUoRnJhY3Rpb25hbExheW91dFNp
emUod2lkdGgsIGhlaWdodCkpIHsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZs
b2F0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDogbV9s
b2NhdGlvbihsb2NhdGlvbiksIG1fc2l6ZShzaXplKSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSA6IG1fbG9jYXRpb24ocmVjdC5sb2NhdGlvbigpKSwg
bV9zaXplKHJlY3Quc2l6ZSgpKSB7IH0KKworICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2Ug
aXQncyBsb3NzeQorICAgICAgICAKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbG9jYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9CisgICAgRnJhY3Rpb25hbExheW91dFNpemUg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgdm9pZCBzZXRMb2NhdGlvbihj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGxvY2F0aW9uKSB7IG1fbG9jYXRpb24gPSBsb2Nh
dGlvbjsgfQorICAgIHZvaWQgc2V0U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6
ZSkgeyBtX3NpemUgPSBzaXplOyB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KCkgY29u
c3QgeyByZXR1cm4gbV9sb2NhdGlvbi54KCk7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB5
KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi55KCk7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBtYXhYKCkgY29uc3QgeyByZXR1cm4geCgpICsgd2lkdGgoKTsgfQorICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IG1heFkoKSBjb25zdCB7IHJldHVybiB5KCkgKyBoZWlnaHQoKTsgfQorICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zaXplLndpZHRo
KCk7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBt
X3NpemUuaGVpZ2h0KCk7IH0KKworICAgIHZvaWQgc2V0WChGcmFjdGlvbmFsTGF5b3V0VW5pdCB4
KSB7IG1fbG9jYXRpb24uc2V0WCh4KTsgfQorICAgIHZvaWQgc2V0WShGcmFjdGlvbmFsTGF5b3V0
VW5pdCB5KSB7IG1fbG9jYXRpb24uc2V0WSh5KTsgfQorICAgIHZvaWQgc2V0V2lkdGgoRnJhY3Rp
b25hbExheW91dFVuaXQgd2lkdGgpIHsgbV9zaXplLnNldFdpZHRoKHdpZHRoKTsgfQorICAgIHZv
aWQgc2V0SGVpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkgeyBtX3NpemUuc2V0SGVp
Z2h0KGhlaWdodCk7IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZS5pc0VtcHR5KCk7IH0KKworICAgIC8vIE5PVEU6IFRoZSByZXN1bHQgaXMgcm91bmRlZCB0byBp
bnRlZ2VyIHZhbHVlcywgYW5kIHRodXMgbWF5IGJlIG5vdCB0aGUgZXhhY3QKKyAgICAvLyBjZW50
ZXIgcG9pbnQuCisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IGNlbnRlcigpIGNvbnN0IHsgcmV0
dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludCh4KCkgKyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0
KCkgLyAyKTsgfQorCisgICAgdm9pZCBtb3ZlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBz
aXplKSB7IG1fbG9jYXRpb24gKz0gc2l6ZTsgfSAKKyAgICB2b2lkIG1vdmVCeShjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBtX2xvY2F0aW9uLm1vdmUob2Zmc2V0LngoKSwg
b2Zmc2V0LnkoKSk7IH0KKyAgICB2b2lkIG1vdmUoRnJhY3Rpb25hbExheW91dFVuaXQgZHgsIEZy
YWN0aW9uYWxMYXlvdXRVbml0IGR5KSB7IG1fbG9jYXRpb24ubW92ZShkeCwgZHkpOyB9IAorCisg
ICAgdm9pZCBleHBhbmQoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIHsgbV9zaXpl
ICs9IHNpemU7IH0KKyAgICB2b2lkIGV4cGFuZChGcmFjdGlvbmFsTGF5b3V0VW5pdCBkdywgRnJh
Y3Rpb25hbExheW91dFVuaXQgZGgpIHsgbV9zaXplLmV4cGFuZChkdywgZGgpOyB9CisgICAgdm9p
ZCBjb250cmFjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX3NpemUgLT0g
c2l6ZTsgfQorICAgIHZvaWQgY29udHJhY3QoRnJhY3Rpb25hbExheW91dFVuaXQgZHcsIEZyYWN0
aW9uYWxMYXlvdXRVbml0IGRoKSB7IG1fc2l6ZS5leHBhbmQoLWR3LCAtZGgpOyB9CisKKyAgICB2
b2lkIHNoaWZ0WEVkZ2VUbyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBlZGdlKQorICAgIHsKKyAgICAg
ICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0geCgpOworICAgICAgICBzZXRY
KGVkZ2UpOworICAgICAgICBzZXRXaWR0aChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4o
MCwgd2lkdGgoKSAtIGRlbHRhKSk7CisgICAgfQorICAgIHZvaWQgc2hpZnRNYXhYRWRnZVRvKEZy
YWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCisgICAgeworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBkZWx0YSA9IGVkZ2UgLSBtYXhYKCk7CisgICAgICAgIHNldFdpZHRoKHN0ZDo6bWF4PEZy
YWN0aW9uYWxMYXlvdXRVbml0PigwLCB3aWR0aCgpICsgZGVsdGEpKTsKKyAgICB9CisgICAgdm9p
ZCBzaGlmdFlFZGdlVG8oRnJhY3Rpb25hbExheW91dFVuaXQgZWRnZSkKKyAgICB7CisgICAgICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAtIHkoKTsKKyAgICAgICAgc2V0WShl
ZGdlKTsKKyAgICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4PEZyYWN0aW9uYWxMYXlvdXRVbml0Pigw
LCBoZWlnaHQoKSAtIGRlbHRhKSk7CisgICAgfQorICAgIHZvaWQgc2hpZnRNYXhZRWRnZVRvKEZy
YWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCisgICAgeworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBkZWx0YSA9IGVkZ2UgLSBtYXhZKCk7CisgICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxG
cmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwgaGVpZ2h0KCkgKyBkZWx0YSkpOworICAgIH0KKworICAg
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtaW5YTWluWUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIG1f
bG9jYXRpb247IH0gLy8gdHlwaWNhbGx5IHRvcExlZnQKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQgbWF4WE1pbllDb3JuZXIoKSBjb25zdCB7IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQo
bV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSwgbV9sb2NhdGlvbi55KCkpOyB9IC8vIHR5
cGljYWxseSB0b3BSaWdodAorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtaW5YTWF4WUNvcm5l
cigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX2xvY2F0aW9uLngoKSwg
bV9sb2NhdGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21M
ZWZ0CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IG1heFhNYXhZQ29ybmVyKCkgY29uc3QgeyBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1fbG9jYXRpb24ueCgpICsgbV9zaXplLndpZHRo
KCksIG1fbG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90
dG9tUmlnaHQKKyAgICAKKyAgICBib29sIGludGVyc2VjdHMoY29uc3QgRnJhY3Rpb25hbExheW91
dFJlY3QmKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRS
ZWN0JikgY29uc3Q7CisKKyAgICAvLyBUaGlzIGNoZWNrcyB0byBzZWUgaWYgdGhlIHJlY3QgY29u
dGFpbnMgeCx5IGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZS4KKyAgICAvLyBFcXVpdmFsZW50IHRv
IGNoZWNraW5nIGlmIHRoZSByZWN0IGNvbnRhaW5zIGEgMXgxIHJlY3QgYmVsb3cgYW5kIHRvIHRo
ZSByaWdodCBvZiAocHgscHkpLgorICAgIGJvb2wgY29udGFpbnMoRnJhY3Rpb25hbExheW91dFVu
aXQgcHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHB5KSBjb25zdAorICAgICAgICB7IHJldHVybiBw
eCA+PSB4KCkgJiYgcHggPCBtYXhYKCkgJiYgcHkgPj0geSgpICYmIHB5IDwgbWF4WSgpOyB9Cisg
ICAgYm9vbCBjb250YWlucyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KSBjb25z
dCB7IHJldHVybiBjb250YWlucyhwb2ludC54KCksIHBvaW50LnkoKSk7IH0KKworICAgIHZvaWQg
aW50ZXJzZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7CisgICAgdm9pZCB1bml0ZShj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOworICAgIHZvaWQgdW5pdGVJZk5vblplcm8oY29u
c3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsKKworICAgIHZvaWQgaW5mbGF0ZVgoRnJhY3Rpb25h
bExheW91dFVuaXQgZHgpCisgICAgeworICAgICAgICBtX2xvY2F0aW9uLnNldFgobV9sb2NhdGlv
bi54KCkgLSBkeCk7CisgICAgICAgIG1fc2l6ZS5zZXRXaWR0aChtX3NpemUud2lkdGgoKSArIGR4
ICsgZHgpOworICAgIH0KKyAgICB2b2lkIGluZmxhdGVZKEZyYWN0aW9uYWxMYXlvdXRVbml0IGR5
KQorICAgIHsKKyAgICAgICAgbV9sb2NhdGlvbi5zZXRZKG1fbG9jYXRpb24ueSgpIC0gZHkpOwor
ICAgICAgICBtX3NpemUuc2V0SGVpZ2h0KG1fc2l6ZS5oZWlnaHQoKSArIGR5ICsgZHkpOworICAg
IH0KKyAgICB2b2lkIGluZmxhdGUoRnJhY3Rpb25hbExheW91dFVuaXQgZCkgeyBpbmZsYXRlWChk
KTsgaW5mbGF0ZVkoZCk7IH0KKyAgICB2b2lkIHNjYWxlKGZsb2F0IHMpOworCisgICAgRnJhY3Rp
b25hbExheW91dFJlY3QgdHJhbnNwb3NlZFJlY3QoKSBjb25zdCB7IHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0UmVjdChtX2xvY2F0aW9uLnRyYW5zcG9zZWRQb2ludCgpLCBtX3NpemUudHJhbnNwb3Nl
ZFNpemUoKSk7IH0KKworICAgIHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0UmVjdCBpbmZpbml0ZVJl
Y3QoKSB7cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRSZWN0KEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpt
aW4oKSAvIDIsIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptaW4oKSAvIDIsIEZyYWN0aW9uYWxMYXlv
dXRVbml0OjptYXgoKSwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpKTsgfQorCitwcml2YXRl
OgorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtX2xvY2F0aW9uOworICAgIEZyYWN0aW9uYWxM
YXlvdXRTaXplIG1fc2l6ZTsKK307CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0UmVjdCBpbnRl
cnNlY3Rpb24oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEsIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRSZWN0JiBiKQoreworICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGMgPSBhOworICAgIGMu
aW50ZXJzZWN0KGIpOworICAgIHJldHVybiBjOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91
dFJlY3QgdW5pb25SZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UmVjdCYgYikKK3sKKyAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCBjID0gYTsK
KyAgICBjLnVuaXRlKGIpOworICAgIHJldHVybiBjOworfQorCitGcmFjdGlvbmFsTGF5b3V0UmVj
dCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEZyYWN0aW9uYWxMYXlvdXRSZWN0PiYpOworCitpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0UmVjdCYgYikKK3sKKyAgICByZXR1cm4gYS5sb2NhdGlvbigpID09IGIu
bG9jYXRpb24oKSAmJiBhLnNpemUoKSA9PSBiLnNpemUoKTsKK30KKworaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25hbExh
eW91dFJlY3QmIGIpCit7CisgICAgcmV0dXJuIGEubG9jYXRpb24oKSAhPSBiLmxvY2F0aW9uKCkg
fHwgYS5zaXplKCkgIT0gYi5zaXplKCk7Cit9CisKK0ludFJlY3QgZW5jbG9zaW5nSW50UmVjdChj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOworRnJhY3Rpb25hbExheW91dFJlY3QgZW5jbG9z
aW5nRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CitJbnRSZWN0IHBpeGVs
U25hcHBlZEludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRnJhY3Rpb25hbExheW91dFJlY3RfaApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAJKHJldmlzaW9u
IDEwODEzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgogCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIK
ICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKQEAgLTQwLDYg
KzQxLDEyIEBAIEludFJlY3Q6OkludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQogewogfQogCitJ
bnRSZWN0OjpJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiByKQorICAgIDogbV9s
b2NhdGlvbihmbG9vcmVkSW50UG9pbnQoci5sb2NhdGlvbigpKSkKKyAgICAsIG1fc2l6ZShmbG9v
cmVkSW50U2l6ZShyLnNpemUoKSkpCit7Cit9CisKIGJvb2wgSW50UmVjdDo6aW50ZXJzZWN0cyhj
b25zdCBJbnRSZWN0JiBvdGhlcikgY29uc3QKIHsKICAgICAvLyBDaGVja2luZyBlbXB0aW5lc3Mg
aGFuZGxlcyBuZWdhdGl2ZSB3aWR0aHMgYXMgd2VsbCBhcyB6ZXJvLgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkocmV2aXNpb24gMTA4MTM4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC03MSw2ICs3MSw3IEBAIHN0cnVjdCBTa0lSZWN0OwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0UmVjdDsKIAogY2xhc3Mg
SW50UmVjdCB7CiBwdWJsaWM6CkBAIC04MCw3ICs4MSw4IEBAIHB1YmxpYzoKICAgICBJbnRSZWN0
KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgICAgICA6IG1fbG9jYXRp
b24oSW50UG9pbnQoeCwgeSkpLCBtX3NpemUoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSkgeyB9CiAK
LSAgICBleHBsaWNpdCBJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCk7IC8vIGRvbid0IGRv
IHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgZXhwbGljaXQgSW50UmVjdChj
b25zdCBGbG9hdFJlY3QmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3Mg
bG9zc3kKKyAgICBleHBsaWNpdCBJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7
IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CiAgICAgICAgIAog
ICAgIEludFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQogICAg
IEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128079</attachid>
            <date>2012-02-21 16:28:26 -0800</date>
            <delta_ts>2012-07-08 10:06:19 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-78924-20120221162825.patch</filename>
            <type>text/plain</type>
            <size>27421</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODM5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDEyLTAyLTIxICBFbWlsIEEg
RWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgRnJhY3Rpb25hbExheW91
dFJlY3QgZm9yIHN1Yi1waXhlbCBsYXlvdXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc4OTI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlk
ZWwuCisKKyAgICAgICAgQWRkIEZyYWN0aW9uYWxMYXlvdXRVbml0IHZlcnNpb24gb2YgUmVjdCBj
bGFzcy4gVXNlcyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQKKyAgICAgICAgYW5kIEZyYWN0aW9uYWxM
YXlvdXRTaXplIGludGVybmFsbHkuCisKKyAgICAgICAgQWxzbyBhZGQgY29udmVyc2lvbnMgdG8g
aW50L2Zsb2F0IHZlcnNpb25zIG9mIHNhbWUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0UmVjdDo6RmxvYXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChGbG9hdFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0
aW9uYWxMYXlvdXRSZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjpGcmFjdGlvbmFsTGF5b3V0UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6aW50ZXJzZWN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6Y29udGFpbnMpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OmludGVyc2VjdCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6dW5pdGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
Y3Rpb25hbExheW91dFJlY3Q6OnVuaXRlSWZOb25aZXJvKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YWN0aW9uYWxMYXlvdXRSZWN0OjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjp1bmlvblJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjplbmNsb3NpbmdGcmFjdGlvbmFsTGF5b3V0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpwaXhl
bFNuYXBwZWRJbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFs
TGF5b3V0UmVjdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRnJhY3Rp
b25hbExheW91dFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6
OkZyYWN0aW9uYWxMYXlvdXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlv
dXRSZWN0Ojpsb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVj
dDo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6c2V0TG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OnNldFNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OngpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OnkpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
Y3Rpb25hbExheW91dFJlY3Q6Om1heFgpOgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExh
eW91dFJlY3Q6Om1heFkpOgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6
OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjpoZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OnNldFgpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OnNldFkpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OnNldFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YWN0aW9uYWxMYXlvdXRSZWN0OjpzZXRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rp
b25hbExheW91dFJlY3Q6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExh
eW91dFJlY3Q6OmNlbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVj
dDo6bW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6bW92ZUJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjpleHBhbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OmNvbnRyYWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjpzaGlmdFhFZGdlVG8pOgorICAgICAgICAo
V2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OnNoaWZ0TWF4WEVkZ2VUbyk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6c2hpZnRZRWRnZVRvKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjpzaGlmdE1heFlFZGdlVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6Om1pblhNaW5ZQ29ybmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjptYXhYTWluWUNvcm5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6bWluWE1heFlDb3JuZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6Om1heFhNYXhZQ29ybmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0Ojpjb250YWlucyk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5b3V0UmVjdDo6aW5mbGF0ZVgpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OmluZmxhdGVZKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjppbmZsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYWN0
aW9uYWxMYXlvdXRSZWN0Ojp0cmFuc3Bvc2VkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFj
dGlvbmFsTGF5b3V0UmVjdDo6aW5maW5pdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmludGVy
c2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp1bmlvblJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvciE9KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludFJl
Y3Q6OkludFJlY3QpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW50UmVjdC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbnRSZWN0KToK
KwogMjAxMi0wMi0yMSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1l
VmlldyBzaG91bGQgYmUgY29uZGl0aW9uYWwgb24gY29tcG9zaXRpbmcgYmVpbmcgYWN0aXZlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEwODM5MykKKysrIFNv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTI5OTks
NiArMjk5OSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFRyYWl0c01hc2suaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udFdpZHRoVmFyaWFudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0U2l6ZS5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRTaXplLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvckdlbmVyYXRlZEltYWdlLmNwcCBc
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagko
cmV2aXNpb24gMTA4MzkzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI3NTczLDYgKzI3NTczLDE0IEBACiAJCQkJCT4K
IAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xGcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJ
CQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGcmFjdGlv
bmFsTGF5b3V0UmVjdC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRnJhY3Rpb25hbExheW91dFNpemUuY3Bw
IgogCQkJCQk+CiAJCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTA4MzkzKQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDAsNiArMzAwLDggQEAKIAkJMTQ0RkNFNTIxNEVDNzlCQzAwMEQxN0EzIC8qIEZyYWN0
aW9uYWxMYXlvdXRVbml0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDRGQ0U1MTE0RUM3OUJDMDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFVuaXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDRG
Q0U1QzE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFNpemUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0RkNFNTcxNEVDNzlFNzAw
MEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmNwcCAqLzsgfTsKIAkJMTQ0RkNFNUQxNEVD
NzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDRGQ0U1ODE0RUM3OUU3MDAwRDE3QTMgLyog
RnJhY3Rpb25hbExheW91dFNpemUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkxNDRGQ0ZFMDE0RUYyNTA5MDAwRDE3QTMgLyogRnJhY3Rpb25hbExh
eW91dFJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQ0RkNGREUxNEVGMjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCAq
LzsgfTsKKwkJMTQ0RkNGRTExNEVGMjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDRGQ0ZE
RjE0RUYyNTA5MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFJlY3QuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDY0RTA2QzEzNUVDMTA2MDBG
REIwMEEgLyogSlNNZWRpYUxpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2NEUwNkIxMzVFQzEwNjAwRkRCMDBBIC8qIEpTTWVkaWFM
aXN0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJMTQ3N0U3NzYwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VD
YWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDc3RTc3NDBCRjQxMzRBMDAxNTI4NzIgLyogUGFnZUNhY2hlLmNwcCAqLzsgfTsKIAkJMTQ3N0U3
NzcwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3N0U3NzUwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VD
YWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC03MDI0LDYgKzcwMjYsOCBAQAogCQkxNDRGQ0U1NDE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rp
b25hbExheW91dFBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYWN0
aW9uYWxMYXlvdXRQb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDRGQ0U1
NzE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFNpemUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnJhY3Rpb25hbExheW91dFNpemUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDRGQ0U1ODE0RUM3OUU3MDAwRDE3QTMgLyogRnJh
Y3Rpb25hbExheW91dFNpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJh
Y3Rpb25hbExheW91dFNpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQ0RkNG
REUxNEVGMjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQ0RkNGREYxNEVGMjUwOTAwMEQxN0EzIC8qIEZy
YWN0aW9uYWxMYXlvdXRSZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZy
YWN0aW9uYWxMYXlvdXRSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NjRF
MDZCMTM1RUMxMDYwMEZEQjAwQSAvKiBKU01lZGlhTGlzdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01lZGlhTGlzdEN1c3RvbS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NzdFNzc0MEJGNDEzNEEwMDE1Mjg3MiAvKiBQYWdlQ2Fj
aGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VDYWNoZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NzdFNzc1MEJGNDEzNEEwMDE1Mjg3
MiAvKiBQYWdlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VD
YWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg5MzcsNiArMTg5NDEsOCBA
QAogCQkJCTM3ODRDMzRBMEUxMUFBMzQwMDdEOEQ0OCAvKiBGb250VHJhaXRzTWFzay5oICovLAog
CQkJCUJDRTQ0MTM1MTJGNzQ5MEIwMDlCODRCOCAvKiBGb250V2lkdGhWYXJpYW50LmggKi8sCiAJ
CQkJMTQ0RkNFNTQxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRQb2ludC5oICov
LAorCQkJCTE0NEZDRkRFMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5j
cHAgKi8sCisJCQkJMTQ0RkNGREYxNEVGMjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRS
ZWN0LmggKi8sCiAJCQkJMTQ0RkNFNTcxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlv
dXRTaXplLmNwcCAqLywKIAkJCQkxNDRGQ0U1ODE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25h
bExheW91dFNpemUuaCAqLywKIAkJCQlCQzIzRjBEQTBEQUZGNEE0MDA5RkRDOTEgLyogR2VuZXJh
dGVkSW1hZ2UuaCAqLywKQEAgLTI0Mjg5LDYgKzI0Mjk1LDcgQEAKIAkJCQk5NzdFMkUwRjEyRjBG
QzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ1MzczNTMx
MzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEJCRUQw
RjE0RjQwMjVEMDAzRjBCOTggLyogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmggaW4g
SGVhZGVycyAqLywKKwkJCQkxNDRGQ0ZFMTE0RUYyNTA5MDAwRDE3QTMgLyogRnJhY3Rpb25hbExh
eW91dFJlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjcyMzYsNiArMjcyNDMsNyBAQAogCQkJCTk3
N0UyRTBFMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NBdWRpdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUZENTM3MzUyMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9sZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlFNEJCRUQwRTE0RjQwMjVEMDAzRjBCOTggLyogUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0NEZDRkUwMTRFRjI1MDkwMDBEMTdB
MyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAkocmV2aXNpb24g
MTA4MTM4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgogCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiRnJhY3Rpb25hbExh
eW91dFJlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgog
I2luY2x1ZGUgPG1hdGguaD4KQEAgLTQyLDYgKzQzLDEwIEBAIEZsb2F0UmVjdDo6RmxvYXRSZWN0
KGNvbnN0IEludFJlY3QmIHIpIDoKIHsKIH0KIAorRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3Qg
RnJhY3Rpb25hbExheW91dFJlY3QmIHIpIDogbV9sb2NhdGlvbihyLmxvY2F0aW9uKCkpLCBtX3Np
emUoci5zaXplKCkpCit7Cit9CisKIEZsb2F0UmVjdCBGbG9hdFJlY3Q6Om5hcnJvd1ByZWNpc2lv
bihkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCkKIHsKICAg
ICByZXR1cm4gRmxvYXRSZWN0KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoeCksIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoeSksIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQod2lkdGgpLCBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KGhlaWdodCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmgJKHJldmlzaW9uIDEwODEzOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2
Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFZHUmVjdDsKICNlbmRpZgogCitjbGFz
cyBGcmFjdGlvbmFsTGF5b3V0UmVjdDsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBJbnRQb2ludDsK
IApAQCAtODIsNiArODMsNyBAQCBwdWJsaWM6CiAgICAgRmxvYXRSZWN0KGZsb2F0IHgsIGZsb2F0
IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCiAgICAgICAgIDogbV9sb2NhdGlvbihGbG9h
dFBvaW50KHgsIHkpKSwgbV9zaXplKEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkgeyB9CiAgICAg
RmxvYXRSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICBGbG9hdFJlY3QoY29uc3QgRnJhY3Rpb25h
bExheW91dFJlY3QmKTsKIAogICAgIHN0YXRpYyBGbG9hdFJlY3QgbmFycm93UHJlY2lzaW9uKGRv
dWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9u
YWxMYXlvdXRSZWN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRS
ZWN0LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5
b3V0VW5pdC5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKwordXNpbmcgc3RkOjptYXg7Cit1c2lu
ZyBzdGQ6Om1pbjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGcmFjdGlvbmFsTGF5b3V0UmVj
dDo6RnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQorICAgIDogbV9sb2Nh
dGlvbihGcmFjdGlvbmFsTGF5b3V0UG9pbnQoci5sb2NhdGlvbigpKSkKKyAgICAsIG1fc2l6ZShG
cmFjdGlvbmFsTGF5b3V0U2l6ZShyLnNpemUoKSkpCit7Cit9CisKK2Jvb2wgRnJhY3Rpb25hbExh
eW91dFJlY3Q6OmludGVyc2VjdHMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKSBj
b25zdAoreworICAgIC8vIENoZWNraW5nIGVtcHRpbmVzcyBoYW5kbGVzIG5lZ2F0aXZlIHdpZHRo
cyBhcyB3ZWxsIGFzIHplcm8uCisgICAgcmV0dXJuICFpc0VtcHR5KCkgJiYgIW90aGVyLmlzRW1w
dHkoKQorICAgICAgICAmJiB4KCkgPCBvdGhlci5tYXhYKCkgJiYgb3RoZXIueCgpIDwgbWF4WCgp
CisgICAgICAgICYmIHkoKSA8IG90aGVyLm1heFkoKSAmJiBvdGhlci55KCkgPCBtYXhZKCk7Cit9
CisKK2Jvb2wgRnJhY3Rpb25hbExheW91dFJlY3Q6OmNvbnRhaW5zKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRSZWN0JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4geCgpIDw9IG90aGVyLngoKSAm
JiBtYXhYKCkgPj0gb3RoZXIubWF4WCgpCisgICAgICAgICYmIHkoKSA8PSBvdGhlci55KCkgJiYg
bWF4WSgpID49IG90aGVyLm1heFkoKTsKK30KKwordm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6
aW50ZXJzZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikKK3sKKyAgICBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQgbmV3TG9jYXRpb24obWF4KHgoKSwgb3RoZXIueCgpKSwgbWF4KHko
KSwgb3RoZXIueSgpKSk7CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IG5ld01heFBvaW50KG1p
bihtYXhYKCksIG90aGVyLm1heFgoKSksIG1pbihtYXhZKCksIG90aGVyLm1heFkoKSkpOworCisg
ICAgLy8gUmV0dXJuIGEgY2xlYW4gZW1wdHkgcmVjdGFuZ2xlIGZvciBub24taW50ZXJzZWN0aW5n
IGNhc2VzLgorICAgIGlmIChuZXdMb2NhdGlvbi54KCkgPj0gbmV3TWF4UG9pbnQueCgpIHx8IG5l
d0xvY2F0aW9uLnkoKSA+PSBuZXdNYXhQb2ludC55KCkpIHsKKyAgICAgICAgbmV3TG9jYXRpb24g
PSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoMCwgMCk7CisgICAgICAgIG5ld01heFBvaW50ID0gRnJh
Y3Rpb25hbExheW91dFBvaW50KDAsIDApOworICAgIH0KKworICAgIG1fbG9jYXRpb24gPSBuZXdM
b2NhdGlvbjsKKyAgICBtX3NpemUgPSBuZXdNYXhQb2ludCAtIG5ld0xvY2F0aW9uOworfQorCit2
b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0Ojp1bml0ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVj
dCYgb3RoZXIpCit7CisgICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNpYWwgY2FzZXMgZmlyc3QuCisg
ICAgaWYgKG90aGVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpc0VtcHR5
KCkpIHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdMb2NhdGlvbihtaW4oeCgpLCBvdGhlci54KCkp
LCBtaW4oeSgpLCBvdGhlci55KCkpKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TWF4
UG9pbnQobWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWF4KG1heFkoKSwgb3RoZXIubWF4WSgp
KSk7CisKKyAgICBtX2xvY2F0aW9uID0gbmV3TG9jYXRpb247CisgICAgbV9zaXplID0gbmV3TWF4
UG9pbnQgLSBuZXdMb2NhdGlvbjsKK30KKwordm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6dW5p
dGVJZk5vblplcm8oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKQoreworICAgIC8v
IEhhbmRsZSBlbXB0eSBzcGVjaWFsIGNhc2VzIGZpcnN0LgorICAgIGlmICghb3RoZXIud2lkdGgo
KSAmJiAhb3RoZXIuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXdpZHRoKCkg
JiYgIWhlaWdodCgpKSB7CisgICAgICAgICp0aGlzID0gb3RoZXI7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TG9jYXRpb24obWluKHgoKSwg
b3RoZXIueCgpKSwgbWluKHkoKSwgb3RoZXIueSgpKSk7CisgICAgRnJhY3Rpb25hbExheW91dFBv
aW50IG5ld01heFBvaW50KG1heChtYXhYKCksIG90aGVyLm1heFgoKSksIG1heChtYXhZKCksIG90
aGVyLm1heFkoKSkpOworCisgICAgbV9sb2NhdGlvbiA9IG5ld0xvY2F0aW9uOworICAgIG1fc2l6
ZSA9IG5ld01heFBvaW50IC0gbmV3TG9jYXRpb247Cit9CisKK3ZvaWQgRnJhY3Rpb25hbExheW91
dFJlY3Q6OnNjYWxlKGZsb2F0IHMpCit7CisgICAgbV9sb2NhdGlvbi5zY2FsZShzLCBzKTsKKyAg
ICBtX3NpemUuc2NhbGUocyk7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRSZWN0IHVuaW9uUmVjdChj
b25zdCBWZWN0b3I8RnJhY3Rpb25hbExheW91dFJlY3Q+JiByZWN0cykKK3sKKyAgICBGcmFjdGlv
bmFsTGF5b3V0UmVjdCByZXN1bHQ7CisKKyAgICBzaXplX3QgY291bnQgPSByZWN0cy5zaXplKCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICByZXN1bHQu
dW5pdGUocmVjdHNbaV0pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSW50UmVjdCBlbmNs
b3NpbmdJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiByZWN0KQoreworICAgIGZs
b2F0IHggPSBmbG9vcmYocmVjdC54KCkudG9GbG9hdCgpKTsKKyAgICBmbG9hdCB5ID0gZmxvb3Jm
KHJlY3QueSgpLnRvRmxvYXQoKSk7CisgICAgZmxvYXQgd2lkdGggPSBjZWlsZihyZWN0Lm1heFgo
KS50b0Zsb2F0KCkpIC0geDsKKyAgICBmbG9hdCBoZWlnaHQgPSBjZWlsZihyZWN0Lm1heFkoKS50
b0Zsb2F0KCkpIC0geTsKKworICAgIHJldHVybiBJbnRSZWN0KGNsYW1wVG9JbnRlZ2VyKHgpLCBj
bGFtcFRvSW50ZWdlcih5KSwgCisgICAgICAgICAgICAgICAgICAgY2xhbXBUb0ludGVnZXIod2lk
dGgpLCBjbGFtcFRvSW50ZWdlcihoZWlnaHQpKTsKK30KKworRnJhY3Rpb25hbExheW91dFJlY3Qg
ZW5jbG9zaW5nRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorewor
ICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UmVjdChyZWN0LngoKSwgcmVjdC55KCksCisgICAg
ICAgICAgICAgICAgICAgICByZWN0Lm1heFgoKSAtIHJlY3QueCgpICsgRnJhY3Rpb25hbExheW91
dFVuaXQ6OmVwc2lsb24oKSwKKyAgICAgICAgICAgICAgICAgICAgIHJlY3QubWF4WSgpIC0gcmVj
dC55KCkgKyBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6ZXBzaWxvbigpKTsKK30KKworSW50UmVjdCBw
aXhlbFNuYXBwZWRJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiByZWN0KQorewor
ICAgIEludFBvaW50IHJvdW5kZWRMb2NhdGlvbiA9IHJvdW5kZWRJbnRQb2ludChyZWN0LmxvY2F0
aW9uKCkpOworICAgIHJldHVybiBJbnRSZWN0KHJvdW5kZWRMb2NhdGlvbiwgSW50U2l6ZSgocmVj
dC54KCkgKyByZWN0LndpZHRoKCkpLnJvdW5kKCkgLSByb3VuZGVkTG9jYXRpb24ueCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVjdC55KCkgKyByZWN0
LmhlaWdodCgpKS5yb3VuZCgpIC0gcm91bmRlZExvY2F0aW9uLnkoKSkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
cmFjdGlvbmFsTGF5b3V0UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRSZWN0X2gK
KyNkZWZpbmUgRnJhY3Rpb25hbExheW91dFJlY3RfaAorCisjaW5jbHVkZSAiRnJhY3Rpb25hbExh
eW91dFBvaW50LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFJlY3Q7CisKK2NsYXNzIEZy
YWN0aW9uYWxMYXlvdXRSZWN0IHsKK3B1YmxpYzoKKyAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCgp
IHsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCYgbG9jYXRpb24sIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKQorICAgICAgICA6
IG1fbG9jYXRpb24obG9jYXRpb24pLCBtX3NpemUoc2l6ZSkgeyB9CisgICAgRnJhY3Rpb25hbExh
eW91dFJlY3QoRnJhY3Rpb25hbExheW91dFVuaXQgeCwgRnJhY3Rpb25hbExheW91dFVuaXQgeSwg
RnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkK
KyAgICAgICAgOiBtX2xvY2F0aW9uKEZyYWN0aW9uYWxMYXlvdXRQb2ludCh4LCB5KSksIG1fc2l6
ZShGcmFjdGlvbmFsTGF5b3V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkgeyB9CisgICAgRnJhY3Rpb25h
bExheW91dFJlY3QoY29uc3QgRmxvYXRQb2ludCYgbG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkKKyAgICAgICAgOiBtX2xvY2F0aW9uKGxvY2F0aW9uKSwgbV9zaXplKHNpemUpIHsgfQor
ICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIDogbV9sb2NhdGlv
bihyZWN0LmxvY2F0aW9uKCkpLCBtX3NpemUocmVjdC5zaXplKCkpIHsgfQorCisgICAgZXhwbGlj
aXQgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7IC8vIGRvbid0IGRvIHRo
aXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgICAgIAorICAgIEZyYWN0aW9uYWxM
YXlvdXRQb2ludCBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0KKyAgICBG
cmFjdGlvbmFsTGF5b3V0U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAg
ICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgbG9jYXRpb24p
IHsgbV9sb2NhdGlvbiA9IGxvY2F0aW9uOyB9CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KKworICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IHgoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uLngoKTsgfQorICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0IHkoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uLnkoKTsgfQor
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heFgoKSBjb25zdCB7IHJldHVybiB4KCkgKyB3aWR0
aCgpOyB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbWF4WSgpIGNvbnN0IHsgcmV0dXJuIHko
KSArIGhlaWdodCgpOyB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQorCisgICAgdm9pZCBzZXRYKEZy
YWN0aW9uYWxMYXlvdXRVbml0IHgpIHsgbV9sb2NhdGlvbi5zZXRYKHgpOyB9CisgICAgdm9pZCBz
ZXRZKEZyYWN0aW9uYWxMYXlvdXRVbml0IHkpIHsgbV9sb2NhdGlvbi5zZXRZKHkpOyB9CisgICAg
dm9pZCBzZXRXaWR0aChGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCkgeyBtX3NpemUuc2V0V2lk
dGgod2lkdGgpOyB9CisgICAgdm9pZCBzZXRIZWlnaHQoRnJhY3Rpb25hbExheW91dFVuaXQgaGVp
Z2h0KSB7IG1fc2l6ZS5zZXRIZWlnaHQoaGVpZ2h0KTsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplLmlzRW1wdHkoKTsgfQorCisgICAgLy8gTk9URTogVGhlIHJl
c3VsdCBpcyByb3VuZGVkIHRvIGludGVnZXIgdmFsdWVzLCBhbmQgdGh1cyBtYXkgYmUgbm90IHRo
ZSBleGFjdAorICAgIC8vIGNlbnRlciBwb2ludC4KKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQg
Y2VudGVyKCkgY29uc3QgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KHgoKSArIHdpZHRo
KCkgLyAyLCB5KCkgKyBoZWlnaHQoKSAvIDIpOyB9CisKKyAgICB2b2lkIG1vdmUoY29uc3QgRnJh
Y3Rpb25hbExheW91dFNpemUmIHNpemUpIHsgbV9sb2NhdGlvbiArPSBzaXplOyB9IAorICAgIHZv
aWQgbW92ZUJ5KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb2Zmc2V0KSB7IG1fbG9jYXRp
b24ubW92ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsgfQorICAgIHZvaWQgbW92ZShGcmFjdGlv
bmFsTGF5b3V0VW5pdCBkeCwgRnJhY3Rpb25hbExheW91dFVuaXQgZHkpIHsgbV9sb2NhdGlvbi5t
b3ZlKGR4LCBkeSk7IH0gCisKKyAgICB2b2lkIGV4cGFuZChjb25zdCBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSYgc2l6ZSkgeyBtX3NpemUgKz0gc2l6ZTsgfQorICAgIHZvaWQgZXhwYW5kKEZyYWN0aW9u
YWxMYXlvdXRVbml0IGR3LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkaCkgeyBtX3NpemUuZXhwYW5k
KGR3LCBkaCk7IH0KKyAgICB2b2lkIGNvbnRyYWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXpl
JiBzaXplKSB7IG1fc2l6ZSAtPSBzaXplOyB9CisgICAgdm9pZCBjb250cmFjdChGcmFjdGlvbmFs
TGF5b3V0VW5pdCBkdywgRnJhY3Rpb25hbExheW91dFVuaXQgZGgpIHsgbV9zaXplLmV4cGFuZCgt
ZHcsIC1kaCk7IH0KKworICAgIHZvaWQgc2hpZnRYRWRnZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0
IGVkZ2UpCisgICAgeworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2Ug
LSB4KCk7CisgICAgICAgIHNldFgoZWRnZSk7CisgICAgICAgIHNldFdpZHRoKHN0ZDo6bWF4PEZy
YWN0aW9uYWxMYXlvdXRVbml0PigwLCB3aWR0aCgpIC0gZGVsdGEpKTsKKyAgICB9CisgICAgdm9p
ZCBzaGlmdE1heFhFZGdlVG8oRnJhY3Rpb25hbExheW91dFVuaXQgZWRnZSkKKyAgICB7CisgICAg
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAtIG1heFgoKTsKKyAgICAgICAg
c2V0V2lkdGgoc3RkOjptYXg8RnJhY3Rpb25hbExheW91dFVuaXQ+KDAsIHdpZHRoKCkgKyBkZWx0
YSkpOworICAgIH0KKyAgICB2b2lkIHNoaWZ0WUVkZ2VUbyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBl
ZGdlKQorICAgIHsKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0g
eSgpOworICAgICAgICBzZXRZKGVkZ2UpOworICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXg8RnJh
Y3Rpb25hbExheW91dFVuaXQ+KDAsIGhlaWdodCgpIC0gZGVsdGEpKTsKKyAgICB9CisgICAgdm9p
ZCBzaGlmdE1heFlFZGdlVG8oRnJhY3Rpb25hbExheW91dFVuaXQgZWRnZSkKKyAgICB7CisgICAg
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAtIG1heFkoKTsKKyAgICAgICAg
c2V0SGVpZ2h0KHN0ZDo6bWF4PEZyYWN0aW9uYWxMYXlvdXRVbml0PigwLCBoZWlnaHQoKSArIGRl
bHRhKSk7CisgICAgfQorCisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IG1pblhNaW5ZQ29ybmVy
KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfSAvLyB0eXBpY2FsbHkgdG9wTGVmdAorICAg
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtYXhYTWluWUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEZy
YWN0aW9uYWxMYXlvdXRQb2ludChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xv
Y2F0aW9uLnkoKSk7IH0gLy8gdHlwaWNhbGx5IHRvcFJpZ2h0CisgICAgRnJhY3Rpb25hbExheW91
dFBvaW50IG1pblhNYXhZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBv
aW50KG1fbG9jYXRpb24ueCgpLCBtX2xvY2F0aW9uLnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0g
Ly8gdHlwaWNhbGx5IGJvdHRvbUxlZnQKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWF4WE1h
eFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQobV9sb2NhdGlv
bi54KCkgKyBtX3NpemUud2lkdGgoKSwgbV9sb2NhdGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0KCkp
OyB9IC8vIHR5cGljYWxseSBib3R0b21SaWdodAorICAgIAorICAgIGJvb2wgaW50ZXJzZWN0cyhj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIGJvb2wgY29udGFpbnMoY29u
c3QgRnJhY3Rpb25hbExheW91dFJlY3QmKSBjb25zdDsKKworICAgIC8vIFRoaXMgY2hlY2tzIHRv
IHNlZSBpZiB0aGUgcmVjdCBjb250YWlucyB4LHkgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLgor
ICAgIC8vIEVxdWl2YWxlbnQgdG8gY2hlY2tpbmcgaWYgdGhlIHJlY3QgY29udGFpbnMgYSAxeDEg
cmVjdCBiZWxvdyBhbmQgdG8gdGhlIHJpZ2h0IG9mIChweCxweSkuCisgICAgYm9vbCBjb250YWlu
cyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBweCwgRnJhY3Rpb25hbExheW91dFVuaXQgcHkpIGNvbnN0
CisgICAgICAgIHsgcmV0dXJuIHB4ID49IHgoKSAmJiBweCA8IG1heFgoKSAmJiBweSA+PSB5KCkg
JiYgcHkgPCBtYXhZKCk7IH0KKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQu
eSgpKTsgfQorCisgICAgdm9pZCBpbnRlcnNlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3Qm
KTsKKyAgICB2b2lkIHVuaXRlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7CisgICAgdm9p
ZCB1bml0ZUlmTm9uWmVybyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOworCisgICAgdm9p
ZCBpbmZsYXRlWChGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeCkKKyAgICB7CisgICAgICAgIG1fbG9j
YXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4KTsKKyAgICAgICAgbV9zaXplLnNldFdpZHRo
KG1fc2l6ZS53aWR0aCgpICsgZHggKyBkeCk7CisgICAgfQorICAgIHZvaWQgaW5mbGF0ZVkoRnJh
Y3Rpb25hbExheW91dFVuaXQgZHkpCisgICAgeworICAgICAgICBtX2xvY2F0aW9uLnNldFkobV9s
b2NhdGlvbi55KCkgLSBkeSk7CisgICAgICAgIG1fc2l6ZS5zZXRIZWlnaHQobV9zaXplLmhlaWdo
dCgpICsgZHkgKyBkeSk7CisgICAgfQorICAgIHZvaWQgaW5mbGF0ZShGcmFjdGlvbmFsTGF5b3V0
VW5pdCBkKSB7IGluZmxhdGVYKGQpOyBpbmZsYXRlWShkKTsgfQorICAgIHZvaWQgc2NhbGUoZmxv
YXQgcyk7CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCB0cmFuc3Bvc2VkUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRSZWN0KG1fbG9jYXRpb24udHJhbnNwb3NlZFBvaW50
KCksIG1fc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpKTsgfQorCisgICAgc3RhdGljIEZyYWN0aW9uYWxM
YXlvdXRSZWN0IGluZmluaXRlUmVjdCgpIHtyZXR1cm4gRnJhY3Rpb25hbExheW91dFJlY3QoRnJh
Y3Rpb25hbExheW91dFVuaXQ6Om1pbigpIC8gMiwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om1pbigp
IC8gMiwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6
bWF4KCkpOyB9CisKK3ByaXZhdGU6CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IG1fbG9jYXRp
b247CisgICAgRnJhY3Rpb25hbExheW91dFNpemUgbV9zaXplOworfTsKKworaW5saW5lIEZyYWN0
aW9uYWxMYXlvdXRSZWN0IGludGVyc2VjdGlvbihjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYg
YSwgY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGIpCit7CisgICAgRnJhY3Rpb25hbExheW91
dFJlY3QgYyA9IGE7CisgICAgYy5pbnRlcnNlY3QoYik7CisgICAgcmV0dXJuIGM7Cit9CisKK2lu
bGluZSBGcmFjdGlvbmFsTGF5b3V0UmVjdCB1bmlvblJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91
dFJlY3QmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBiKQoreworICAgIEZyYWN0aW9u
YWxMYXlvdXRSZWN0IGMgPSBhOworICAgIGMudW5pdGUoYik7CisgICAgcmV0dXJuIGM7Cit9CisK
K0ZyYWN0aW9uYWxMYXlvdXRSZWN0IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8RnJhY3Rpb25hbExh
eW91dFJlY3Q+Jik7CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExh
eW91dFJlY3QmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBiKQoreworICAgIHJldHVy
biBhLmxvY2F0aW9uKCkgPT0gYi5sb2NhdGlvbigpICYmIGEuc2l6ZSgpID09IGIuc2l6ZSgpOwor
fQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYikKK3sKKyAgICByZXR1cm4gYS5sb2NhdGlv
bigpICE9IGIubG9jYXRpb24oKSB8fCBhLnNpemUoKSAhPSBiLnNpemUoKTsKK30KKworSW50UmVj
dCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7CitGcmFjdGlv
bmFsTGF5b3V0UmVjdCBlbmNsb3NpbmdGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGbG9hdFJl
Y3QmKTsKK0ludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0
UmVjdCYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGcmFjdGlvbmFs
TGF5b3V0UmVjdF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRS
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bnRSZWN0LmNwcAkocmV2aXNpb24gMTA4MTM4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW50UmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAKKyNpbmNsdWRlICJGcmFj
dGlvbmFsTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgPGFs
Z29yaXRobT4KIApAQCAtNDAsNiArNDEsMTIgQEAgSW50UmVjdDo6SW50UmVjdChjb25zdCBGbG9h
dFJlY3QmIHIpCiB7CiB9CiAKK0ludFJlY3Q6OkludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91
dFJlY3QmIHIpCisgICAgOiBtX2xvY2F0aW9uKGZsb29yZWRJbnRQb2ludChyLmxvY2F0aW9uKCkp
KQorICAgICwgbV9zaXplKGZsb29yZWRJbnRTaXplKHIuc2l6ZSgpKSkKK3sKK30KKwogYm9vbCBJ
bnRSZWN0OjppbnRlcnNlY3RzKGNvbnN0IEludFJlY3QmIG90aGVyKSBjb25zdAogewogICAgIC8v
IENoZWNraW5nIGVtcHRpbmVzcyBoYW5kbGVzIG5lZ2F0aXZlIHdpZHRocyBhcyB3ZWxsIGFzIHpl
cm8uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCShy
ZXZpc2lvbiAxMDgxMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRS
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAgc3RydWN0IFNrSVJlY3Q7CiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEZyYWN0aW9uYWxM
YXlvdXRSZWN0OwogCiBjbGFzcyBJbnRSZWN0IHsKIHB1YmxpYzoKQEAgLTgwLDcgKzgxLDggQEAg
cHVibGljOgogICAgIEludFJlY3QoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQp
CiAgICAgICAgIDogbV9sb2NhdGlvbihJbnRQb2ludCh4LCB5KSksIG1fc2l6ZShJbnRTaXplKHdp
ZHRoLCBoZWlnaHQpKSB7IH0KIAotICAgIGV4cGxpY2l0IEludFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKKyAg
ICBleHBsaWNpdCBJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOyAvLyBkb24ndCBkbyB0aGlzIGlt
cGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQorICAgIGV4cGxpY2l0IEludFJlY3QoY29uc3QgRnJh
Y3Rpb25hbExheW91dFJlY3QmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0
J3MgbG9zc3kKICAgICAgICAgCiAgICAgSW50UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2xvY2F0aW9uOyB9CiAgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>