<?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>51490</bug_id>
          
          <creation_ts>2010-12-22 13:08:49 -0800</creation_ts>
          <short_desc>Cleanup SVG code according to the webkit style rules 3</short_desc>
          <delta_ts>2010-12-30 00:38:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>buildbot</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>kling</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>325651</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-12-22 13:08:49 -0800</bug_when>
    <thetext>see bug 51411</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325656</commentid>
    <comment_count>1</comment_count>
      <attachid>77253</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-12-22 13:17:30 -0800</bug_when>
    <thetext>Created attachment 77253
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325658</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-22 13:27:07 -0800</bug_when>
    <thetext>Attachment 77253 did not build on chromium:
Build output: http://queues.webkit.org/results/7319092</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325666</commentid>
    <comment_count>3</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-12-22 13:40:33 -0800</bug_when>
    <thetext>Attachment 77253 did not build on qt:
Build output: http://queues.webkit.org/results/7237125</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325675</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-12-22 13:50:02 -0800</bug_when>
    <thetext>Attachment 77253 did not build on win:
Build output: http://queues.webkit.org/results/7325107</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325686</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-22 14:03:00 -0800</bug_when>
    <thetext>Attachment 77253 did not build on gtk:
Build output: http://queues.webkit.org/results/7200131</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325696</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-22 14:21:03 -0800</bug_when>
    <thetext>Attachment 77253 did not build on mac:
Build output: http://queues.webkit.org/results/7256113</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325698</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-22 14:25:45 -0800</bug_when>
    <thetext>Attachment 77253 did not build on chromium:
Build output: http://queues.webkit.org/results/7281123</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325910</commentid>
    <comment_count>8</comment_count>
      <attachid>77309</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-12-22 23:36:26 -0800</bug_when>
    <thetext>Created attachment 77309
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325965</commentid>
    <comment_count>9</comment_count>
      <attachid>77309</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-12-23 01:01:05 -0800</bug_when>
    <thetext>Comment on attachment 77309
Patch

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

r=me with one small thing and one medium:

&gt; WebCore/ChangeLog:8
&gt; +        Last patch to fix indention and other style issues according to the WebKit style rules in the SVG code.

s/indention/indentation/

&gt; WebCore/svg/SVGSVGElement.cpp:133
&gt; -    double _x = 0.0;
&gt; -    double _y = 0.0;
&gt; +    double m_x = 0.0;
&gt; +    double m_y = 0.0;

This looks quite wrong, m_x and m_y are member variables, and you are shadowing them here.
Use better names please :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325967</commentid>
    <comment_count>10</comment_count>
      <attachid>77309</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-23 01:08:23 -0800</bug_when>
    <thetext>Comment on attachment 77309
Patch

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

In general this looks fine, but the m_x shadowing is bad-news bears.  I&apos;ll leave kling&apos;s r+, but that definitely needs to be fixed before landing.

&gt;&gt; WebCore/svg/SVGSVGElement.cpp:133
&gt;&gt; +    double m_y = 0.0;
&gt; 
&gt; This looks quite wrong, m_x and m_y are member variables, and you are shadowing them here.
&gt; Use better names please :)

We can&apos;t r+ this as-is... This would be bad news bears.

&gt; WebCore/svg/SVGSwitchElement.cpp:53
&gt; +    for (Node* node = firstChild(); node; node = node-&gt;nextSibling()) {
&gt; +        if (node-&gt;isSVGElement()) {
&gt; +            SVGElement* element = static_cast&lt;SVGElement*&gt;(node);
&gt;              if (element &amp;&amp; element-&gt;isValid())
&gt; -                return (n == child); // Only allow this child if it&apos;s the first valid child
&gt; +                return (node == child); // Only allow this child if it&apos;s the first valid child

Does isValid possibly run javascript or triggger any events which could invalidate the node pointer?

&gt; WebCore/svg/animation/SVGSMILElement.h:45
&gt; +    static bool isSMILElement(Node* node);

unneeded arg name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325990</commentid>
    <comment_count>11</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-12-23 01:48:01 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 77309 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77309&amp;action=review
&gt; 
&gt; In general this looks fine, but the m_x shadowing is bad-news bears.  I&apos;ll leave kling&apos;s r+, but that definitely needs to be fixed before landing.

Bad-news bears indeed, I should&apos;ve been more clear that this must be fixed before landing.

&gt; &gt; WebCore/svg/animation/SVGSMILElement.h:45
&gt; &gt; +    static bool isSMILElement(Node* node);
&gt; 
&gt; unneeded arg name.

Good catch :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327018</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-12-27 05:57:01 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 77309 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77309&amp;action=review
&gt; &gt; WebCore/svg/SVGSwitchElement.cpp:53
&gt; &gt; +    for (Node* node = firstChild(); node; node = node-&gt;nextSibling()) {
&gt; &gt; +        if (node-&gt;isSVGElement()) {
&gt; &gt; +            SVGElement* element = static_cast&lt;SVGElement*&gt;(node);
&gt; &gt;              if (element &amp;&amp; element-&gt;isValid())
&gt; &gt; -                return (n == child); // Only allow this child if it&apos;s the first valid child
&gt; &gt; +                return (node == child); // Only allow this child if it&apos;s the first valid child

isValid() is just implemented in SVGTest and is const. It just checks for a certain feature.

Uploading a new patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327047</commentid>
    <comment_count>13</comment_count>
      <attachid>77509</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-12-27 08:42:16 -0800</bug_when>
    <thetext>Created attachment 77509
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327070</commentid>
    <comment_count>14</comment_count>
      <attachid>77509</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-12-27 10:04:02 -0800</bug_when>
    <thetext>Comment on attachment 77509
Patch

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

Still needs some tweaks, r-.

&gt; WebCore/ChangeLog:11
&gt; +        * SVGAllInOne.cpp: check-webkit-style wants a config.h at the beginning
&gt; +        * SVGImage.cpp: One header needs to be in a non-alphabetic order, see FIXME.

Do you know about the &quot;NOLINT&quot; comment.
int _I_want_to_violate_the_style_result; // NOLINT
This suppresses the error message from check-webkit-style. I guess you can make check-webkit-style happy when playing around with this comment, to make it report 0 errors for svg/.

&gt; WebCore/svg/SVGSwitchElement.cpp:50
&gt; +        if (node-&gt;isSVGElement()) {

if (!node-&gt;isSVGElement())
    continue;

&gt; WebCore/svg/SVGSwitchElement.cpp:52
&gt;              if (element &amp;&amp; element-&gt;isValid())

if (!element || !element-&gt;isValid())
    continue;

&gt; WebCore/svg/SVGSwitchElement.cpp:53
&gt; +                return (node == child); // Only allow this child if it&apos;s the first valid child

return node == child.

&gt; WebCore/svg/SVGTransformDistance.cpp:240
&gt; +    return m_transform == AffineTransform() &amp;&amp; !m_angle;

m_transform.isIdentity() ?

&gt; WebCore/svg/animation/SVGSMILElement.cpp:800
&gt; -        if (fmod(repeatingDuration.value(), simpleDuration.value() == 0.))
&gt; +        if (fmod(repeatingDuration.value(), !simpleDuration.value()))

Is this correct??

&gt; WebCore/svg/animation/SVGSMILElement.h:60
&gt; +    enum Restart { RestartAlways, RestartWhenNotActive, RestartNever };

I think these should be
enum Restart {
    RestartAlways,
     .....
}

&gt; WebCore/svg/animation/SVGSMILElement.h:63
&gt; +    enum FillMode { FillRemove, FillFreeze };

Ditto.

&gt; WebCore/svg/animation/SVGSMILElement.h:107
&gt; +    enum BeginOrEnd { Begin, End };

enum BeginOrEnd {
    Begin,
    End
};

&gt; WebCore/svg/animation/SVGSMILElement.h:122
&gt; +        enum Type { EventBase, Syncbase, AccessKey };

Ditto, needs reformatting.

&gt; WebCore/svg/animation/SVGSMILElement.h:150
&gt; +    enum ActiveState { Inactive, Active, Frozen };

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327079</commentid>
    <comment_count>15</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-12-27 10:48:23 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 77509 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77509&amp;action=review
&gt; 
&gt; Still needs some tweaks, r-.
&gt; 
&gt; &gt; WebCore/ChangeLog:11
&gt; &gt; +        * SVGAllInOne.cpp: check-webkit-style wants a config.h at the beginning
&gt; &gt; +        * SVGImage.cpp: One header needs to be in a non-alphabetic order, see FIXME.
&gt; 
&gt; Do you know about the &quot;NOLINT&quot; comment.
No, didn&apos;t know this. But I&apos;d add this after every line on SVGGAllInOne, not the best choice. But it helps on SVGImage. Do you have another suggestion?

&gt; &gt; WebCore/svg/animation/SVGSMILElement.cpp:800
&gt; &gt; -        if (fmod(repeatingDuration.value(), simpleDuration.value() == 0.))
&gt; &gt; +        if (fmod(repeatingDuration.value(), !simpleDuration.value()))
&gt; 
&gt; Is this correct??
Checked it, it is correct. The operator ! just checks if value is finite as well, doesn&apos;t influence the result.

The rest is fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327081</commentid>
    <comment_count>16</comment_count>
      <attachid>77513</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-12-27 11:02:43 -0800</bug_when>
    <thetext>Created attachment 77513
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327840</commentid>
    <comment_count>17</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-12-29 22:50:27 -0800</bug_when>
    <thetext>Committed r74782: &lt;http://trac.webkit.org/changeset/74782&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327845</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-29 23:37:48 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/74782 might have broken Leopard Intel Debug (Tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327849</commentid>
    <comment_count>19</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-12-29 23:48:37 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; http://trac.webkit.org/changeset/74782 might have broken Leopard Intel Debug (Tests)

Checked it, must be a previous bug that broke Leopard. It was broken before the patch got landed.

To the red style bot: I checked the code before uploading this patch. So I guess it is a problem of the bot, not of the code style. It doesn&apos;t mention the problem anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327856</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-30 00:38:30 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/74783 might have broken GTK Linux 64-bit Debug</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77253</attachid>
            <date>2010-12-22 13:17:30 -0800</date>
            <delta_ts>2010-12-22 23:36:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51490-20101222221726.patch</filename>
            <type>text/plain</type>
            <size>65635</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDQ5OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA3IEBACisyMDEwLTEyLTIyICBEaXJrIFNjaHVsemUgIDxrcml0QHdiZWtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xl
YW51cCBTVkcgY29kZSBhY2NvcmRpbmcgdG8gdGhlIHdlYmtpdCBzdHlsZSBydWxlcyAzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTQ5MAorCisgICAg
ICAgIExhc3QgcGF0Y2ggdG8gZml4IGluZGVudGlvbiBhbmQgb3RoZXIgc3R5bGUgaXNzdWVzIGFj
Y29yZGluZyB0byB0aGUgV2ViS2l0IHN0eWxlIHJ1bGVzIGluIHRoZSBTVkcgY29kZS4KKyAgICAg
ICAgSnVzdCB0d28gZmlsZXMgY2FuJ3QgYmUgZml4ZWQgZm9yIGNoZWNrLXdlYmtpdC1zdHlsZS4K
KyAgICAgICAgKiBTVkdBbGxJbk9uZS5jcHA6IGNoZWNrLXdlYmtpdC1zdHlsZSB3YW50cyBhIGNv
bmZpZy5oIGF0IHRoZSBiZWdpbm5pbmcKKyAgICAgICAgKiBTVkdJbWFnZS5jcHA6IE9uZSBoZWFk
ZXIgbmVlZHMgdG8gYmUgaW4gYSBub24tYWxwaGFiZXRpYyBvcmRlciwgc2VlIEZJWE1FLgorCisg
ICAgICAgIE5vIGNoYW5nZXMgb2YgZnVuY3Rpb25hbGl0eSwgc28gbm8gbmV3IHRlc3RzLiAKKwor
ICAgICAgICAqIHN2Zy9TVkdBbGxJbk9uZS5jcHA6CisgICAgICAgICogc3ZnL1NWR0xlbmd0aC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGg6OnNldFZhbHVlKToKKyAgICAgICAgKiBz
dmcvU1ZHUG9seWdvbkVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHUG9seWxpbmVFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6cGFyc2VQcmVzZXJ2ZUFzcGVjdFJhdGlv
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnRyYW5zZm9ybVJl
Y3QpOgorICAgICAgICAqIHN2Zy9TVkdTVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1NWR0VsZW1lbnQ6OnZpZXdwb3J0KToKKyAgICAgICAgKiBzdmcvU1ZHU2V0RWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdTdHlsYWJsZS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5
bGFibGU6On5TVkdTdHlsYWJsZSk6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVs
ZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6Omxv
Y2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxl
ZExvY2F0YWJsZUVsZW1lbnQ6OmlzU3R5bGVkTG9jYXRhYmxlKToKKyAgICAgICAgKiBzdmcvU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUpOgorICAgICAgICAqIHN2
Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N3aXRjaEVsZW1l
bnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIHN2Zy9TVkdUZXN0cy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgor
ICAgICAgICAqIHN2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dENvbnRlbnRFbGVtZW50Ojppc0tub3duQXR0cmlidXRlKToKKyAgICAgICAgKiBz
dmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHVGV4dFBhdGhFbGVt
ZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1RpdGxlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGl0bGVFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKToKKyAgICAgICAgKiBzdmcvU1ZH
VHJhbnNmb3JtRGlzdGFuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtRGlz
dGFuY2U6OlNWR1RyYW5zZm9ybURpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5z
Zm9ybURpc3RhbmNlOjpzY2FsZWREaXN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFu
c2Zvcm1EaXN0YW5jZTo6YWRkU1ZHVHJhbnNmb3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdU
cmFuc2Zvcm1EaXN0YW5jZTo6YWRkU1ZHVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RyYW5zZm9ybURpc3RhbmNlOjphZGRUb1NWR1RyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6aXNaZXJvKToKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNm
b3JtTGlzdC5jcHA6CisgICAgICAgICogc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdVUklSZWZlcmVuY2U6OmdldFRhcmdldCk6CisgICAgICAgICogc3ZnL1NW
R1ZLZXJuRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdWaWV3U3BlYy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyk6CisgICAgICAgICogc3ZnL1NW
R1pvb21BbmRQYW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1pvb21BbmRQYW46OlNWR1pvb21B
bmRQYW4pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHWm9vbUFuZFBhbjo6flNWR1pvb21BbmRQYW4p
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHWm9vbUFuZFBhbjo6em9vbUFuZFBhbik6CisgICAgICAg
ICogc3ZnL1NWR1pvb21FdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHWm9vbUV2ZW50Ojpj
cmVhdGUpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01JTFRpbWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6b3BlcmF0b3IqKToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmg6
CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZTo6U01JTFRpbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6U01JTFRpbWU6OnVucmVzb2x2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWU6Omlu
ZGVmaW5pdGUpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWU6Om9wZXJhdG9yPSk6CisgICAg
ICAgIChXZWJDb3JlOjpTTUlMVGltZTo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRp
bWU6OmlzRmluaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lOjppc0luZGVmaW5pdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWU6OmlzVW5yZXNvbHZlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yIT0pOgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3I+KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPCk6
CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj49KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJh
dG9yPD0pOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U01JTFRpbWVDb250YWluZXI6OnNldERvY3VtZW50T3JkZXJJbmRleGVzRGlydHkpOgor
ICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29uZGl0aW9uRXZlbnRMaXN0ZW5lcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTTUlMRWxlbWVudDo6cmVwZWF0aW5nRHVyYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU01JTEVsZW1lbnQ6OnJlc29sdmVJbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdTTUlMRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0aW9uUGVyY2VudEFuZFJlcGVhdCk6CisgICAg
ICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHU01JTEVsZW1lbnQ6OnRpbWVDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01J
TEVsZW1lbnQ6OmludGVydmFsQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1l
bnQ6OmludGVydmFsRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpwcmV2
aW91c0ludGVydmFsQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OmRv
Y3VtZW50T3JkZXJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6c2V0
RG9jdW1lbnRPcmRlckluZGV4KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFn
ZTo6ZGVjb2RlZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmZyYW1lQXRJbmRl
eCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6Omxhc3RFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyQnVpbGRlcjo6Z2V0RWZmZWN0UmVmZXJlbmNlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJCdWlsZGVyOjphZGRCdWlsdGluRWZmZWN0cyk6CisKIDIwMTAtMTItMjIgIFpo
ZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRo
IFJ1c3NlbGwuCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbGxJbk9uZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvU1ZHQWxsSW5PbmUuY3BwCShyZXZpc2lvbiA3NDQ5MikKKysrIFdlYkNv
cmUvc3ZnL1NWR0FsbEluT25lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDkgKzE0Nyw5IEBA
CiAjaW5jbHVkZSAiU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5jcHAiCiAjaW5jbHVkZSAiU1ZH
VGl0bGVFbGVtZW50LmNwcCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uY3BwIgotI2luY2x1ZGUg
IlNWR1RyYW5zZm9ybWFibGUuY3BwIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybURpc3RhbmNlLmNw
cCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmNwcCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zv
cm1hYmxlLmNwcCIKICNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuY3BwIgogI2luY2x1ZGUgIlNW
R1VzZUVsZW1lbnQuY3BwIgogI2luY2x1ZGUgIlNWR1ZLZXJuRWxlbWVudC5jcHAiCkluZGV4OiBX
ZWJDb3JlL3N2Zy9TVkdMZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0xl
bmd0aC5jcHAJKHJldmlzaW9uIDc0NDkyKQorKysgV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjAzLDIyICsyMDMsMTkgQEAgdm9pZCBTVkdMZW5ndGg6OnNldFZh
bHVlKGZsb2F0IHZhbHVlLCBjbwogICAgIGNhc2UgTGVuZ3RoVHlwZU51bWJlcjoKICAgICAgICAg
bV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSB2YWx1ZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBMZW5ndGhUeXBlUGVyY2VudGFnZToKLSAgICB7CisgICAgY2FzZSBMZW5ndGhUeXBlUGVyY2Vu
dGFnZTogewogICAgICAgICBmbG9hdCByZXN1bHQgPSBjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRz
VG9QZXJjZW50YWdlKHZhbHVlLCBjb250ZXh0LCBlYyk7CiAgICAgICAgIGlmICghZWMpCiAgICAg
ICAgICAgICBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9IHJlc3VsdDsgCiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICBjYXNlIExlbmd0aFR5cGVFTVM6Ci0gICAgeworICAgIGNhc2UgTGVuZ3Ro
VHlwZUVNUzogewogICAgICAgICBmbG9hdCByZXN1bHQgPSBjb252ZXJ0VmFsdWVGcm9tVXNlclVu
aXRzVG9FTVModmFsdWUsIGNvbnRleHQsIGVjKTsKICAgICAgICAgaWYgKCFlYykKICAgICAgICAg
ICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gcmVzdWx0OwogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgY2FzZSBMZW5ndGhUeXBlRVhTOgotICAgIHsKKyAgICBjYXNlIExlbmd0aFR5cGVF
WFM6IHsKICAgICAgICAgZmxvYXQgcmVzdWx0ID0gY29udmVydFZhbHVlRnJvbVVzZXJVbml0c1Rv
RVhTKHZhbHVlLCBjb250ZXh0LCBlYyk7CiAgICAgICAgIGlmICghZWMpCiAgICAgICAgICAgICBt
X3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9IHJlc3VsdDsgCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQ
b2x5Z29uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BvbHlnb25FbGVt
ZW50LmgJKHJldmlzaW9uIDc0NDkyKQorKysgV2ViQ29yZS9zdmcvU1ZHUG9seWdvbkVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTUgKzI2LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotICAgIGNsYXNzIFNWR1BvbHlnb25FbGVtZW50IDogcHVibGljIFNWR1BvbHlFbGVtZW50
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1BvbHlnb25FbGVt
ZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CitjbGFzcyBTVkdQ
b2x5Z29uRWxlbWVudCA6IHB1YmxpYyBTVkdQb2x5RWxlbWVudCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U1ZHUG9seWdvbkVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqKTsKIAotICAgIHByaXZhdGU6Ci0gICAgICAgIFNWR1BvbHlnb25FbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworcHJpdmF0ZToKKyAgICBTVkdQ
b2x5Z29uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAotICAgICAg
ICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29uc3Q7Ci0gICAgfTsKKyAgICB2aXJ0
dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29uc3Q7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5oCShyZXZpc2lvbiA3NDQ5MikK
KysrIFdlYkNvcmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NiwxNSArMjYsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgU1ZHUG9s
eWxpbmVFbGVtZW50IDogcHVibGljIFNWR1BvbHlFbGVtZW50IHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1BvbHlsaW5lRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworY2xhc3MgU1ZHUG9seWxpbmVFbGVtZW50IDogcHVi
bGljIFNWR1BvbHlFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdQ
b2x5bGluZUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsK
IAotICAgIHByaXZhdGU6Ci0gICAgICAgIFNWR1BvbHlsaW5lRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKK3ByaXZhdGU6CisgICAgU1ZHUG9seWxpbmVFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCB0
b1BhdGhEYXRhKFBhdGgmKSBjb25zdDsKLSAgICB9OworICAgIHZpcnR1YWwgdm9pZCB0b1BhdGhE
YXRhKFBhdGgmKSBjb25zdDsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDog
V2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHAJKHJldmlzaW9uIDc0NDkyKQorKysg
V2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDI1ICs2NiwyNSBAQCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIFNWR1ByZXNlcnZlQXNwZWN0
CiAKICAgICAvLyBGSVhNRTogUmV3cml0ZSB0aGlzIHBhcnNlciwgd2l0aG91dCBnb3RvcyEKICAg
ICBpZiAoIXNraXBPcHRpb25hbFNwYWNlcyhjdXJyUGFyYW0sIGVuZCkpCi0gICAgICAgIGdvdG8g
YmFpbF9vdXQ7CisgICAgICAgIGdvdG8gYmFpbE91dDsKIAogICAgIGlmICgqY3VyclBhcmFtID09
ICdkJykgewogICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclBhcmFtLCBlbmQsICJkZWZlciIp
KQotICAgICAgICAgICAgZ290byBiYWlsX291dDsKKyAgICAgICAgICAgIGdvdG8gYmFpbE91dDsK
ICAgICAgICAgLy8gRklYTUU6IFdlIGp1c3QgaWdub3JlIHRoZSAiZGVmZXIiIGhlcmUuCiAgICAg
ICAgIGlmICghc2tpcE9wdGlvbmFsU3BhY2VzKGN1cnJQYXJhbSwgZW5kKSkKLSAgICAgICAgICAg
IGdvdG8gYmFpbF9vdXQ7CisgICAgICAgICAgICBnb3RvIGJhaWxPdXQ7CiAgICAgfQogCiAgICAg
aWYgKCpjdXJyUGFyYW0gPT0gJ24nKSB7CiAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyUGFy
YW0sIGVuZCwgIm5vbmUiKSkKLSAgICAgICAgICAgIGdvdG8gYmFpbF9vdXQ7CisgICAgICAgICAg
ICBnb3RvIGJhaWxPdXQ7CiAgICAgICAgIHNraXBPcHRpb25hbFNwYWNlcyhjdXJyUGFyYW0sIGVu
ZCk7CiAgICAgfSBlbHNlIGlmICgqY3VyclBhcmFtID09ICd4JykgewogICAgICAgICBpZiAoKGVu
ZCAtIGN1cnJQYXJhbSkgPCA4KQotICAgICAgICAgICAgZ290byBiYWlsX291dDsKKyAgICAgICAg
ICAgIGdvdG8gYmFpbE91dDsKICAgICAgICAgaWYgKGN1cnJQYXJhbVsxXSAhPSAnTScgfHwgY3Vy
clBhcmFtWzRdICE9ICdZJyB8fCBjdXJyUGFyYW1bNV0gIT0gJ00nKQotICAgICAgICAgICAgZ290
byBiYWlsX291dDsKKyAgICAgICAgICAgIGdvdG8gYmFpbE91dDsKICAgICAgICAgaWYgKGN1cnJQ
YXJhbVsyXSA9PSAnaScpIHsKICAgICAgICAgICAgIGlmIChjdXJyUGFyYW1bM10gPT0gJ24nKSB7
CiAgICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs2XSA9PSAnaScpIHsKQEAgLTkzLDExICs5
MywxMSBAQCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIFNWR1ByZXNlcnZlQXNwZWN0CiAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJQYXJhbVs3XSA9PSAnZCcpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBhc3BlY3RSYXRpby5tX2FsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9f
WE1JTllNSUQ7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGdvdG8gYmFpbF9vdXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWxPdXQ7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyUGFyYW1bNl0gPT0gJ2EnICYmIGN1cnJQ
YXJhbVs3XSA9PSAneCcpCiAgICAgICAgICAgICAgICAgICAgICBhc3BlY3RSYXRpby5tX2FsaWdu
ID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNQVg7CiAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsX291dDsKKyAgICAgICAgICAgICAgICAg
ICAgIGdvdG8gYmFpbE91dDsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJQYXJhbVszXSA9
PSAnZCcpIHsKICAgICAgICAgICAgICAgICBpZiAoY3VyclBhcmFtWzZdID09ICdpJykgewogICAg
ICAgICAgICAgICAgICAgICBpZiAoY3VyclBhcmFtWzddID09ICduJykKQEAgLTEwNSwxMyArMTA1
LDEzIEBAIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8gU1ZHUHJlc2VydmVBc3BlY3QKICAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoY3VyclBhcmFtWzddID09ICdkJykKICAgICAgICAgICAgICAg
ICAgICAgICAgIGFzcGVjdFJhdGlvLm1fYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19Y
TUlEWU1JRDsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgZ290byBiYWlsX291dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbE91dDsK
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJQYXJhbVs2XSA9PSAnYScgJiYgY3VyclBh
cmFtWzddID09ICd4JykKICAgICAgICAgICAgICAgICAgICAgYXNwZWN0UmF0aW8ubV9hbGlnbiA9
IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUFYOwogICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsX291dDsKKyAgICAgICAgICAgICAgICAgICAg
Z290byBiYWlsT3V0OwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgZ290byBi
YWlsX291dDsKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWxPdXQ7CiAgICAgICAgIH0gZWxzZSBp
ZiAoY3VyclBhcmFtWzJdID09ICdhJyAmJiBjdXJyUGFyYW1bM10gPT0gJ3gnKSB7CiAgICAgICAg
ICAgICBpZiAoY3VyclBhcmFtWzZdID09ICdpJykgewogICAgICAgICAgICAgICAgIGlmIChjdXJy
UGFyYW1bN10gPT0gJ24nKQpAQCAtMTE5LDI2ICsxMTksMjYgQEAgU1ZHUHJlc2VydmVBc3BlY3RS
YXRpbyBTVkdQcmVzZXJ2ZUFzcGVjdAogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJQYXJh
bVs3XSA9PSAnZCcpCiAgICAgICAgICAgICAgICAgICAgIGFzcGVjdFJhdGlvLm1fYWxpZ24gPSBT
VkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1JRDsKICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbF9vdXQ7CisgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFpbE91dDsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyclBhcmFtWzZdID09ICdhJyAm
JiBjdXJyUGFyYW1bN10gPT0gJ3gnKQogICAgICAgICAgICAgICAgIGFzcGVjdFJhdGlvLm1fYWxp
Z24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1BWDsKICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBnb3RvIGJhaWxfb3V0OworICAgICAgICAgICAgICAgIGdvdG8gYmFp
bE91dDsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBnb3RvIGJhaWxfb3V0OworICAgICAg
ICAgICAgZ290byBiYWlsT3V0OwogICAgICAgICBjdXJyUGFyYW0gKz0gODsKICAgICAgICAgc2tp
cE9wdGlvbmFsU3BhY2VzKGN1cnJQYXJhbSwgZW5kKTsKICAgICB9IGVsc2UKLSAgICAgICAgZ290
byBiYWlsX291dDsKKyAgICAgICAgZ290byBiYWlsT3V0OwogCiAgICAgaWYgKGN1cnJQYXJhbSA8
IGVuZCkgewogICAgICAgICBpZiAoKmN1cnJQYXJhbSA9PSAnbScpIHsKICAgICAgICAgICAgIGlm
ICghc2tpcFN0cmluZyhjdXJyUGFyYW0sIGVuZCwgIm1lZXQiKSkKLSAgICAgICAgICAgICAgICBn
b3RvIGJhaWxfb3V0OworICAgICAgICAgICAgICAgIGdvdG8gYmFpbE91dDsKICAgICAgICAgICAg
IHNraXBPcHRpb25hbFNwYWNlcyhjdXJyUGFyYW0sIGVuZCk7CiAgICAgICAgIH0gZWxzZSBpZiAo
KmN1cnJQYXJhbSA9PSAncycpIHsKICAgICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyUGFy
YW0sIGVuZCwgInNsaWNlIikpCi0gICAgICAgICAgICAgICAgZ290byBiYWlsX291dDsKKyAgICAg
ICAgICAgICAgICBnb3RvIGJhaWxPdXQ7CiAgICAgICAgICAgICBza2lwT3B0aW9uYWxTcGFjZXMo
Y3VyclBhcmFtLCBlbmQpOwogICAgICAgICAgICAgaWYgKGFzcGVjdFJhdGlvLm1fYWxpZ24gIT0g
U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fTk9ORSkKICAgICAgICAgICAgICAgICBhc3BlY3RSYXRp
by5tX21lZXRPclNsaWNlID0gU1ZHX01FRVRPUlNMSUNFX1NMSUNFOyAgICAKQEAgLTE0Niw3ICsx
NDYsNyBAQCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIFNWR1ByZXNlcnZlQXNwZWN0CiAgICAgfQog
CiAgICAgaWYgKGVuZCAhPSBjdXJyUGFyYW0gJiYgdmFsaWRhdGUpIHsKLWJhaWxfb3V0OgorYmFp
bE91dDoKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGUgdHdvIHZhbHVlcyBiZSBzZXQgdG8g
VU5LTk9XTiBpbnN0ZWFkPwogICAgICAgICBhc3BlY3RSYXRpby5tX2FsaWduID0gU1ZHX1BSRVNF
UlZFQVNQRUNUUkFUSU9fTk9ORTsKICAgICAgICAgYXNwZWN0UmF0aW8ubV9tZWV0T3JTbGljZSA9
IFNWR19NRUVUT1JTTElDRV9NRUVUOwpAQCAtMTY0LDggKzE2NCw3IEBAIHZvaWQgU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpbzo6dHJhbnNmb3JtUmUKICAgICBzd2l0Y2ggKG1fbWVldE9yU2xpY2UpIHsK
ICAgICBjYXNlIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OlNWR19NRUVUT1JTTElDRV9VTktOT1dO
OgogICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OlNWR19N
RUVUT1JTTElDRV9NRUVUOgotICAgIHsKKyAgICBjYXNlIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86
OlNWR19NRUVUT1JTTElDRV9NRUVUOiB7CiAgICAgICAgIGZsb2F0IHdpZHRoVG9IZWlnaHRNdWx0
aXBsaWVyID0gc3JjUmVjdC5oZWlnaHQoKSAvIHNyY1JlY3Qud2lkdGgoKTsKICAgICAgICAgaWYg
KG9yaWdEZXN0SGVpZ2h0ID4gb3JpZ0Rlc3RXaWR0aCAqIHdpZHRoVG9IZWlnaHRNdWx0aXBsaWVy
KSB7CiAgICAgICAgICAgICBkZXN0UmVjdC5zZXRIZWlnaHQob3JpZ0Rlc3RXaWR0aCAqIHdpZHRo
VG9IZWlnaHRNdWx0aXBsaWVyKTsKQEAgLTIwMyw4ICsyMDIsNyBAQCB2b2lkIFNWR1ByZXNlcnZl
QXNwZWN0UmF0aW86OnRyYW5zZm9ybVJlCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAg
fQotICAgIGNhc2UgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6U1ZHX01FRVRPUlNMSUNFX1NMSUNF
OgotICAgIHsKKyAgICBjYXNlIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OlNWR19NRUVUT1JTTElD
RV9TTElDRTogewogICAgICAgICBmbG9hdCB3aWR0aFRvSGVpZ2h0TXVsdGlwbGllciA9IHNyY1Jl
Y3QuaGVpZ2h0KCkgLyBzcmNSZWN0LndpZHRoKCk7CiAgICAgICAgIC8vIGlmIHRoZSBkZXN0aW5h
dGlvbiBoZWlnaHQgaXMgbGVzcyB0aGFuIHRoZSBoZWlnaHQgb2YgdGhlIGltYWdlIHdlJ2xsIGJl
IGRyYXdpbmcKICAgICAgICAgaWYgKG9yaWdEZXN0SGVpZ2h0IDwgb3JpZ0Rlc3RXaWR0aCAqIHdp
ZHRoVG9IZWlnaHRNdWx0aXBsaWVyKSB7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkocmV2aXNp
b24gNzQ0OTIpCisrKyBXZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI5LDIwICsxMjksMjAgQEAgdm9pZCBTVkdTVkdFbGVtZW50OjpzZXRDb250ZW50U3R5
bGVUeXBlKAogCiBGbG9hdFJlY3QgU1ZHU1ZHRWxlbWVudDo6dmlld3BvcnQoKSBjb25zdAogewot
ICAgIGRvdWJsZSBfeCA9IDAuMDsKLSAgICBkb3VibGUgX3kgPSAwLjA7CisgICAgZG91YmxlIG1f
eCA9IDAuMDsKKyAgICBkb3VibGUgbV95ID0gMC4wOwogICAgIGlmICghaXNPdXRlcm1vc3RTVkco
KSkgewotICAgICAgICBfeCA9IHgoKS52YWx1ZSh0aGlzKTsKLSAgICAgICAgX3kgPSB5KCkudmFs
dWUodGhpcyk7CisgICAgICAgIG1feCA9IHgoKS52YWx1ZSh0aGlzKTsKKyAgICAgICAgbV95ID0g
eSgpLnZhbHVlKHRoaXMpOwogICAgIH0KICAgICBmbG9hdCB3ID0gd2lkdGgoKS52YWx1ZSh0aGlz
KTsKICAgICBmbG9hdCBoID0gaGVpZ2h0KCkudmFsdWUodGhpcyk7CiAgICAgQWZmaW5lVHJhbnNm
b3JtIHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHcsIGgpOwogICAgIGRvdWJsZSB3
RG91YmxlID0gdzsKICAgICBkb3VibGUgaERvdWJsZSA9IGg7Ci0gICAgdmlld0JveC5tYXAoX3gs
IF95LCBfeCwgX3kpOworICAgIHZpZXdCb3gubWFwKG1feCwgbV95LCBtX3gsIG1feSk7CiAgICAg
dmlld0JveC5tYXAodywgaCwgd0RvdWJsZSwgaERvdWJsZSk7Ci0gICAgcmV0dXJuIEZsb2F0UmVj
dDo6bmFycm93UHJlY2lzaW9uKF94LCBfeSwgd0RvdWJsZSwgaERvdWJsZSk7CisgICAgcmV0dXJu
IEZsb2F0UmVjdDo6bmFycm93UHJlY2lzaW9uKG1feCwgbV95LCB3RG91YmxlLCBoRG91YmxlKTsK
IH0KIAogaW50IFNWR1NWR0VsZW1lbnQ6OnJlbGF0aXZlV2lkdGhWYWx1ZSgpIGNvbnN0CkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdTZXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
U1ZHU2V0RWxlbWVudC5oCShyZXZpc2lvbiA3NDQ5MikKKysrIFdlYkNvcmUvc3ZnL1NWR1NldEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDE0IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotICAgIC8vIFNWR0FuaW1hdGVFbGVtZW50IGltcGxlbWVudHMgc3VwZXJzZXQg
b2YgdGhlIGZ1bmN0aW9uYWxpdHkuCi0gICAgY2xhc3MgU1ZHU2V0RWxlbWVudCA6IHB1YmxpYyBT
VkdBbmltYXRlRWxlbWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTVkdTZXRFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBTVkdTZXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOwotICAgIH07CisvLyBTVkdBbmltYXRlRWxlbWVudCBpbXBsZW1lbnRz
IHN1cGVyc2V0IG9mIHRoZSBmdW5jdGlvbmFsaXR5LgorY2xhc3MgU1ZHU2V0RWxlbWVudCA6IHB1
YmxpYyBTVkdBbmltYXRlRWxlbWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
U1ZHU2V0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwor
Citwcml2YXRlOgorICAgIFNWR1NldEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvc3Zn
L1NWR1N0eWxhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU3R5bGFibGUuaAko
cmV2aXNpb24gNzQ0OTIpCisrKyBXZWJDb3JlL3N2Zy9TVkdTdHlsYWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNywxNiArMjcsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xh
c3MgQ1NTVmFsdWU7Ci0gICAgY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKK2NsYXNzIENTU1Zh
bHVlOworY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIAotICAgIGNsYXNzIFNWR1N0eWxhYmxl
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgflNWR1N0eWxhYmxlKCkgeyB9Ci0KLSAg
ICAgICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpID0gMDsKLSAgICAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29u
c3QgU3RyaW5nJikgPSAwOwotICAgIH07CitjbGFzcyBTVkdTdHlsYWJsZSB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+U1ZHU3R5bGFibGUoKSB7IH0KKworICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGUoKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBn
ZXRQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgU3RyaW5nJikgPSAwOworfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRMb2NhdGFibGVF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxl
bWVudC5oCShyZXZpc2lvbiA3NDQ5MikKKysrIFdlYkNvcmUvc3ZnL1NWR1N0eWxlZExvY2F0YWJs
ZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMjYgKzI3LDI2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFNWR0VsZW1lbnQ7CitjbGFzcyBTVkdFbGVtZW50Owog
Ci0gICAgY2xhc3MgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRF
bGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIHB1
YmxpYyBTVkdMb2NhdGFibGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCBTVkdFbGVt
ZW50KiBuZWFyZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgU1ZH
RWxlbWVudCogZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdDsKLQotICAgICAgICB2aXJ0
dWFsIEZsb2F0UmVjdCBnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBk
YXRlKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFN0eWxl
VXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKLSAgICAgICAgdmlydHVh
bCBBZmZpbmVUcmFuc2Zvcm0gZ2V0U2NyZWVuQ1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxv
d1N0eWxlVXBkYXRlKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBs
b2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNjb3BlIG1vZGUp
IGNvbnN0IHsgcmV0dXJuIFNWR0xvY2F0YWJsZTo6bG9jYWxDb29yZGluYXRlU3BhY2VUcmFuc2Zv
cm0obW9kZSk7IH0KLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgU1ZHU3R5bGVkTG9jYXRhYmxl
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlZExvY2F0YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KLSAgICB9OworY2xhc3MgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCA6IHB1Ymxp
YyBTVkdTdHlsZWRFbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZp
cnR1YWwgcHVibGljIFNWR0xvY2F0YWJsZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCBTVkdFbGVt
ZW50KiBuZWFyZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCBTVkdFbGVt
ZW50KiBmYXJ0aGVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0OworCisgICAgdmlydHVhbCBGbG9h
dFJlY3QgZ2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29u
c3Q7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFN0eWxlVXBkYXRlU3RyYXRl
Z3kgPSBBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9y
bSBnZXRTY3JlZW5DVE0oU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNv
bnN0OworCisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxDb29yZGluYXRlU3BhY2VU
cmFuc2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1TY29wZSBtb2RlKSBjb25zdCB7IHJldHVybiBTVkdM
b2NhdGFibGU6OmxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKG1vZGUpOyB9CisKK3Byb3Rl
Y3RlZDoKKyAgICBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlZExvY2F0
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
LmNwcAkocmV2aXNpb24gNzQ0OTIpCisrKyBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDggKzg4LDcgQEAgdm9pZCBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luYwogCiBib29sIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50Ojppc0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQogewotICAgIHJldHVybiBTVkdUcmFuc2Zvcm1hYmxlOjppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSB8fAotICAgICAgICAgICBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50Ojppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKTsKKyAgICByZXR1cm4gU1ZHVHJhbnNmb3JtYWJsZTo6aXNLbm93
bkF0dHJpYnV0ZShhdHRyTmFtZSkgfHwgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6aXNLbm93
bkF0dHJpYnV0ZShhdHRyTmFtZSk7CiB9CiAKIFNWR0VsZW1lbnQqIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50OjpuZWFyZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3QKSW5kZXg6IFdlYkNv
cmUvc3ZnL1NWR1N3aXRjaEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R1N3aXRjaEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3NDQ5MikKKysrIFdlYkNvcmUvc3ZnL1NWR1N3
aXRjaEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYsMTEgQEAgYm9vbCBT
VkdTd2l0Y2hFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZQogICAgIC8vIEZJWE1FOiBUaGlzIGZ1
bmN0aW9uIGRvZXMgbm90IGRvIHdoYXQgdGhlIGNvbW1lbnQgYmVsb3cgaW1wbGllcyBpdCBkb2Vz
LgogICAgIC8vIEl0IHdpbGwgY3JlYXRlIGEgcmVuZGVyZXIgZm9yIGFueSB2YWxpZCBTVkcgZWxl
bWVudCBjaGlsZHJlbiwgbm90IGp1c3QgdGhlIGZpcnN0IG9uZS4KIAotICAgIGZvciAoTm9kZSog
biA9IGZpcnN0Q2hpbGQoKTsgbiAhPSAwOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewotICAgICAg
ICBpZiAobi0+aXNTVkdFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIFNWR0VsZW1lbnQqIGVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obik7CisgICAgZm9yIChOb2RlKiBub2RlID0g
Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgeworICAgICAg
ICBpZiAobm9kZS0+aXNTVkdFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIFNWR0VsZW1lbnQqIGVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSk7CiAgICAgICAgICAgICBpZiAo
ZWxlbWVudCAmJiBlbGVtZW50LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIChu
ID09IGNoaWxkKTsgLy8gT25seSBhbGxvdyB0aGlzIGNoaWxkIGlmIGl0J3MgdGhlIGZpcnN0IHZh
bGlkIGNoaWxkCisgICAgICAgICAgICAgICAgcmV0dXJuIChub2RlID09IGNoaWxkKTsgLy8gT25s
eSBhbGxvdyB0aGlzIGNoaWxkIGlmIGl0J3MgdGhlIGZpcnN0IHZhbGlkIGNoaWxkCiAgICAgICAg
IH0KICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1Rlc3RzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9TVkdUZXN0cy5jcHAJKHJldmlzaW9uIDc0NDkyKQorKysgV2ViQ29yZS9z
dmcvU1ZHVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxMCArNzIsMTIgQEAgYm9vbCBT
VkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cgogICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OnJlcXVpcmVkRmVhdHVyZXNBdHRyKSB7CiAgICAgICAgIG1fcmVxdWlyZWRG
ZWF0dXJlcy52YWx1ZS5yZXNldChhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJlcXVpcmVkRXh0ZW5z
aW9uc0F0dHIpIHsKKyAgICB9CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cmVx
dWlyZWRFeHRlbnNpb25zQXR0cikgewogICAgICAgICBtX3JlcXVpcmVkRXh0ZW5zaW9ucy52YWx1
ZS5yZXNldChhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN5c3RlbUxhbmd1YWdlQXR0cikgeworICAg
IH0KKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzeXN0ZW1MYW5ndWFnZUF0dHIp
IHsKICAgICAgICAgbV9zeXN0ZW1MYW5ndWFnZS52YWx1ZS5yZXNldChhdHRyLT52YWx1ZSgpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHVGV4dENv
bnRlbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVu
dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3NDQ5MikKKysrIFdlYkNvcmUvc3ZnL1NWR1RleHRDb250
ZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMiwxMSArMjIyLDExIEBAIHZvaWQg
U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzdmdBdHRyaWJ1dGUKIAogYm9vbCBTVkdUZXh0Q29udGVu
dEVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
CiB7Ci0gICAgcmV0dXJuIChhdHRyTmFtZS5tYXRjaGVzKFNWR05hbWVzOjpsZW5ndGhBZGp1c3RB
dHRyKSB8fAotICAgICAgICAgICAgYXR0ck5hbWUubWF0Y2hlcyhTVkdOYW1lczo6dGV4dExlbmd0
aEF0dHIpIHx8Ci0gICAgICAgICAgICBTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0
ck5hbWUpIHx8Ci0gICAgICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tu
b3duQXR0cmlidXRlKGF0dHJOYW1lKSB8fAotICAgICAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpOworICAgIHJldHVybiBhdHRyTmFtZS5tYXRjaGVz
KFNWR05hbWVzOjpsZW5ndGhBZGp1c3RBdHRyKQorICAgICAgICAgICAgfHwgYXR0ck5hbWUubWF0
Y2hlcyhTVkdOYW1lczo6dGV4dExlbmd0aEF0dHIpCisgICAgICAgICAgICB8fCBTVkdMYW5nU3Bh
Y2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCisgICAgICAgICAgICB8fCBTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQorICAgICAgICAg
ICAgfHwgU1ZHU3R5bGVkRWxlbWVudDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSk7CiB9CiAK
IGJvb2wgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkgY29u
c3QKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcAkocmV2aXNpb24gNzQ0OTIpCisr
KyBXZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCw5ICsyNCw5IEBACiAjaW5jbHVkZSAiU1ZHVGV4dFBhdGhFbGVtZW50LmgiCiAKICNpbmNsdWRl
ICJBdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dFBhdGguaCIKKyNpbmNsdWRlICJT
VkdOYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NW
R1RleHRQYXRoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1RleHRQYXRo
RWxlbWVudC5oCShyZXZpc2lvbiA3NDQ5MikKKysrIFdlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotICAgIGVudW0gU1ZHVGV4dFBhdGhNZXRob2RUeXBlIHsKK2VudW0gU1ZHVGV4dFBh
dGhNZXRob2RUeXBlIHsKICAgICBTVkdfVEVYVFBBVEhfTUVUSE9EVFlQRV9VTktOT1dOID0gMCwK
ICAgICBTVkdfVEVYVFBBVEhfTUVUSE9EVFlQRV9BTElHTiA9IDEsCiAgICAgU1ZHX1RFWFRQQVRI
X01FVEhPRFRZUEVfU1RSRVRDSCA9IDIKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RpdGxlRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1RpdGxlRWxlbWVudC5oCShyZXZpc2lv
biA3NDQ5MikKKysrIFdlYkNvcmUvc3ZnL1NWR1RpdGxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNywyMCArMjcsMjAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3Mg
U1ZHVGl0bGVFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSB7Ci0gICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdUaXRsZUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFNWR1RpdGxlRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLQotICAgICAgICB2aXJ0dWFs
IHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92
ZWRGcm9tRG9jdW1lbnQoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZChi
b29sIGNoYW5nZWRCeVBhcnNlciA9IGZhbHNlLCBOb2RlKiBiZWZvcmVDaGFuZ2UgPSAwLCBOb2Rl
KiBhZnRlckNoYW5nZSA9IDAsIGludCBjaGlsZENvdW50RGVsdGEgPSAwKTsKK2NsYXNzIFNWR1Rp
dGxlRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRFbGVtZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U1ZHVGl0bGVFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CisKK3ByaXZhdGU6CisgICAgU1ZHVGl0bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOworCisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7
CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJl
Zm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVyQ2hhbmdlID0gMCwgaW50IGNoaWxkQ291bnREZWx0
YSA9IDApOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0
eWxlKikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB9OworICAgIHZpcnR1YWwgYm9vbCByZW5kZXJl
cklzTmVlZGVkKFJlbmRlclN0eWxlKikgeyByZXR1cm4gZmFsc2U7IH0KK307CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtRGlzdGFuY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybURpc3RhbmNlLmNwcAko
cmV2aXNpb24gNzQ0OTIpCisrKyBXZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDIyICs2MSwxOSBAQCBTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6
U1ZHVHJhbnNmb3JtRGlzdGFuCiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1f
TUFUUklYOgogICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBiZSBhYmxlIHRvIHN1YnRyYWN0IHRv
IG1hdHJpY2VzCiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RS
QU5TRk9STV9ST1RBVEU6Ci0gICAgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNG
T1JNX1JPVEFURTogewogICAgICAgICBGbG9hdFNpemUgY2VudGVyRGlzdGFuY2UgPSB0b1NWR1Ry
YW5zZm9ybS5yb3RhdGlvbkNlbnRlcigpIC0gZnJvbVNWR1RyYW5zZm9ybS5yb3RhdGlvbkNlbnRl
cigpOwogICAgICAgICBtX2FuZ2xlID0gdG9TVkdUcmFuc2Zvcm0uYW5nbGUoKSAtIGZyb21TVkdU
cmFuc2Zvcm0uYW5nbGUoKTsKICAgICAgICAgbV9jeCA9IGNlbnRlckRpc3RhbmNlLndpZHRoKCk7
CiAgICAgICAgIG1fY3kgPSBjZW50ZXJEaXN0YW5jZS5oZWlnaHQoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU6
Ci0gICAgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURTog
ewogICAgICAgICBGbG9hdFNpemUgdHJhbnNsYXRpb25EaXN0YW5jZSA9IHRvU1ZHVHJhbnNmb3Jt
LnRyYW5zbGF0ZSgpIC0gZnJvbVNWR1RyYW5zZm9ybS50cmFuc2xhdGUoKTsKICAgICAgICAgbV90
cmFuc2Zvcm0udHJhbnNsYXRlKHRyYW5zbGF0aW9uRGlzdGFuY2Uud2lkdGgoKSwgdHJhbnNsYXRp
b25EaXN0YW5jZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FzZSBT
VkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6Ci0gICAgeworICAgIGNhc2UgU1ZHVHJh
bnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NDQUxFOiB7CiAgICAgICAgIGZsb2F0IHNjYWxlWCA9IHRv
U1ZHVHJhbnNmb3JtLnNjYWxlKCkud2lkdGgoKSAtIGZyb21TVkdUcmFuc2Zvcm0uc2NhbGUoKS53
aWR0aCgpOyAgICAgICAgCiAgICAgICAgIGZsb2F0IHNjYWxlWSA9IHRvU1ZHVHJhbnNmb3JtLnNj
YWxlKCkuaGVpZ2h0KCkgLSBmcm9tU1ZHVHJhbnNmb3JtLnNjYWxlKCkuaGVpZ2h0KCk7CiAgICAg
ICAgIG1fdHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShzY2FsZVgsIHNjYWxlWSk7CkBAIC05OSw4
ICs5Niw3IEBAIFNWR1RyYW5zZm9ybURpc3RhbmNlIFNWR1RyYW5zZm9ybURpc3RhbmMKICAgICBj
YXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TQ0FMRToKICAgICBjYXNlIFNWR1RyYW5z
Zm9ybTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg6CiAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1E
aXN0YW5jZShtX3R5cGUsIG1fYW5nbGUgKiBzY2FsZUZhY3RvciwgbV9jeCAqIHNjYWxlRmFjdG9y
LCBtX2N5ICogc2NhbGVGYWN0b3IsIEFmZmluZVRyYW5zZm9ybShtX3RyYW5zZm9ybSkuc2NhbGUo
c2NhbGVGYWN0b3IpKTsKLSAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9UUkFO
U0xBVEU6Ci0gICAgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5T
TEFURTogewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3VHJhbnNmb3JtKG1fdHJhbnNmb3Jt
KTsKICAgICAgICAgbmV3VHJhbnNmb3JtLnNldEUobV90cmFuc2Zvcm0uZSgpICogc2NhbGVGYWN0
b3IpOwogICAgICAgICBuZXdUcmFuc2Zvcm0uc2V0RihtX3RyYW5zZm9ybS5mKCkgKiBzY2FsZUZh
Y3Rvcik7CkBAIC0xMjQsOCArMTIwLDcgQEAgU1ZHVHJhbnNmb3JtIFNWR1RyYW5zZm9ybURpc3Rh
bmNlOjphZGRTVgogICAgIHN3aXRjaCAoZmlyc3QudHlwZSgpKSB7CiAgICAgY2FzZSBTVkdUcmFu
c2Zvcm06OlNWR19UUkFOU0ZPUk1fVU5LTk9XTjoKICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9y
bSgpOwotICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURToKLSAgICB7
CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fUk9UQVRFOiB7CiAgICAgICAg
IHRyYW5zZm9ybS5zZXRSb3RhdGUoZmlyc3QuYW5nbGUoKSArIHNlY29uZC5hbmdsZSgpLCBmaXJz
dC5yb3RhdGlvbkNlbnRlcigpLngoKSArIHNlY29uZC5yb3RhdGlvbkNlbnRlcigpLngoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdC5yb3RhdGlvbkNlbnRlcigpLnkoKSArIHNl
Y29uZC5yb3RhdGlvbkNlbnRlcigpLnkoKSk7CiAgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CkBA
IC0xMzMsMTUgKzEyOCwxMyBAQCBTVkdUcmFuc2Zvcm0gU1ZHVHJhbnNmb3JtRGlzdGFuY2U6OmFk
ZFNWCiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fTUFUUklYOgogICAgICAg
ICB0cmFuc2Zvcm0uc2V0TWF0cml4KGZpcnN0Lm1hdHJpeCgpICogc2Vjb25kLm1hdHJpeCgpKTsK
ICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybTsKLSAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RS
QU5TRk9STV9UUkFOU0xBVEU6Ci0gICAgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJB
TlNGT1JNX1RSQU5TTEFURTogewogICAgICAgICBmbG9hdCBkeCA9IGZpcnN0LnRyYW5zbGF0ZSgp
LngoKSArIHNlY29uZC50cmFuc2xhdGUoKS54KCk7CiAgICAgICAgIGZsb2F0IGR5ID0gZmlyc3Qu
dHJhbnNsYXRlKCkueSgpICsgc2Vjb25kLnRyYW5zbGF0ZSgpLnkoKTsKICAgICAgICAgdHJhbnNm
b3JtLnNldFRyYW5zbGF0ZShkeCwgZHkpOwogICAgICAgICByZXR1cm4gdHJhbnNmb3JtOwogICAg
IH0KLSAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TQ0FMRToKLSAgICB7Cisg
ICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6IHsKICAgICAgICAgRmxv
YXRTaXplIHNjYWxlID0gZmlyc3Quc2NhbGUoKSArIHNlY29uZC5zY2FsZSgpOwogICAgICAgICB0
cmFuc2Zvcm0uc2V0U2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwogICAgICAg
ICByZXR1cm4gdHJhbnNmb3JtOwpAQCAtMTc3LDE1ICsxNzAsMTMgQEAgdm9pZCBTVkdUcmFuc2Zv
cm1EaXN0YW5jZTo6YWRkU1ZHVHJhbnNmbwogICAgICAgICBtX2N4ICs9IGFic29sdXRlVmFsdWUg
PyBmYWJzZih0cmFuc2Zvcm0ucm90YXRpb25DZW50ZXIoKS54KCkpIDogdHJhbnNmb3JtLnJvdGF0
aW9uQ2VudGVyKCkueCgpOwogICAgICAgICBtX2N5ICs9IGFic29sdXRlVmFsdWUgPyBmYWJzZih0
cmFuc2Zvcm0ucm90YXRpb25DZW50ZXIoKS55KCkpIDogdHJhbnNmb3JtLnJvdGF0aW9uQ2VudGVy
KCkueSgpOwogICAgICAgICAvLyBmYWxsIHRocm91Z2gKLSAgICBjYXNlIFNWR1RyYW5zZm9ybTo6
U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU6Ci0gICAgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpT
VkdfVFJBTlNGT1JNX1RSQU5TTEFURTogewogICAgICAgICBmbG9hdCBkeCA9IGFic29sdXRlVmFs
dWUgPyBmYWJzZih0cmFuc2Zvcm0udHJhbnNsYXRlKCkueCgpKSA6IHRyYW5zZm9ybS50cmFuc2xh
dGUoKS54KCk7CiAgICAgICAgIGZsb2F0IGR5ID0gYWJzb2x1dGVWYWx1ZSA/IGZhYnNmKHRyYW5z
Zm9ybS50cmFuc2xhdGUoKS55KCkpIDogdHJhbnNmb3JtLnRyYW5zbGF0ZSgpLnkoKTsKICAgICAg
ICAgbV90cmFuc2Zvcm0udHJhbnNsYXRlKGR4LCBkeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6Ci0gICAgeworICAg
IGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NDQUxFOiB7CiAgICAgICAgIGZsb2F0
IHNjYWxlWCA9IGFic29sdXRlVmFsdWUgPyBmYWJzZih0cmFuc2Zvcm0uc2NhbGUoKS53aWR0aCgp
KSA6IHRyYW5zZm9ybS5zY2FsZSgpLndpZHRoKCk7CiAgICAgICAgIGZsb2F0IHNjYWxlWSA9IGFi
c29sdXRlVmFsdWUgPyBmYWJzZih0cmFuc2Zvcm0uc2NhbGUoKS5oZWlnaHQoKSkgOiB0cmFuc2Zv
cm0uc2NhbGUoKS5oZWlnaHQoKTsKICAgICAgICAgbV90cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3Jt
KHNjYWxlWCwgc2NhbGVZKTsKQEAgLTIxMiwyMiArMjAzLDE5IEBAIFNWR1RyYW5zZm9ybSBTVkdU
cmFuc2Zvcm1EaXN0YW5jZTo6YWRkVG8KICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybSgpOwog
ICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX01BVFJJWDoKICAgICAgICAgcmV0
dXJuIFNWR1RyYW5zZm9ybSh0cmFuc2Zvcm0ubWF0cml4KCkgKiBtX3RyYW5zZm9ybSk7Ci0gICAg
Y2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOgotICAgIHsKKyAgICBj
YXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU6IHsKICAgICAgICAgRmxv
YXRQb2ludCB0cmFuc2xhdGlvbiA9IHRyYW5zZm9ybS50cmFuc2xhdGUoKTsKICAgICAgICAgdHJh
bnNsYXRpb24gKz0gRmxvYXRTaXplOjpuYXJyb3dQcmVjaXNpb24obV90cmFuc2Zvcm0uZSgpLCBt
X3RyYW5zZm9ybS5mKCkpOwogICAgICAgICBuZXdUcmFuc2Zvcm0uc2V0VHJhbnNsYXRlKHRyYW5z
bGF0aW9uLngoKSwgdHJhbnNsYXRpb24ueSgpKTsKICAgICAgICAgcmV0dXJuIG5ld1RyYW5zZm9y
bTsKICAgICB9Ci0gICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6Ci0g
ICAgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NDQUxFOiB7CiAgICAg
ICAgIEZsb2F0U2l6ZSBzY2FsZSA9IHRyYW5zZm9ybS5zY2FsZSgpOwogICAgICAgICBzY2FsZSAr
PSBGbG9hdFNpemU6Om5hcnJvd1ByZWNpc2lvbihtX3RyYW5zZm9ybS5hKCksIG1fdHJhbnNmb3Jt
LmQoKSk7CiAgICAgICAgIG5ld1RyYW5zZm9ybS5zZXRTY2FsZShzY2FsZS53aWR0aCgpLCBzY2Fs
ZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybiBuZXdUcmFuc2Zvcm07CiAgICAgfQotICAgIGNh
c2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURToKLSAgICB7CisgICAgY2FzZSBT
VkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fUk9UQVRFOiB7CiAgICAgICAgIC8vIEZJWE1FOiBJ
J20gbm90IGNlcnRhaW4gdGhlIHRyYW5zbGF0aW9uIGlzIGNhbGN1bGF0ZWQgY29ycmVjdGx5IGhl
cmUKICAgICAgICAgRmxvYXRQb2ludCBjZW50ZXIgPSB0cmFuc2Zvcm0ucm90YXRpb25DZW50ZXIo
KTsKICAgICAgICAgbmV3VHJhbnNmb3JtLnNldFJvdGF0ZSh0cmFuc2Zvcm0uYW5nbGUoKSArIG1f
YW5nbGUsCkBAIC0yNDksNyArMjM3LDcgQEAgU1ZHVHJhbnNmb3JtIFNWR1RyYW5zZm9ybURpc3Rh
bmNlOjphZGRUbwogCiBib29sIFNWR1RyYW5zZm9ybURpc3RhbmNlOjppc1plcm8oKSBjb25zdAog
ewotICAgIHJldHVybiAobV90cmFuc2Zvcm0gPT0gQWZmaW5lVHJhbnNmb3JtKCkgJiYgbV9hbmds
ZSA9PSAwKTsKKyAgICByZXR1cm4gbV90cmFuc2Zvcm0gPT0gQWZmaW5lVHJhbnNmb3JtKCkgJiYg
IW1fYW5nbGU7CiB9CiAKIGZsb2F0IFNWR1RyYW5zZm9ybURpc3RhbmNlOjpkaXN0YW5jZSgpIGNv
bnN0CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmNwcAkocmV2aXNpb24gNzQ0OTIpCisrKyBX
ZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCAr
MjYsOSBAQAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlNWR1NWR0Vs
ZW1lbnQuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdDb25jYXRlbmF0ZS5oPgorCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHVVJJUmVmZXJlbmNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdVUklSZWZlcmVuY2UuY3BwCShyZXZpc2lvbiA3NDQ5MikK
KysrIFdlYkNvcmUvc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDExICs0OCwxNCBAQCBTdHJpbmcgU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQoY29uc3QgCiAg
ICAgICAgIHNpemVfdCBzdGFydCA9IHVybC5maW5kKCcjJykgKyAxOwogICAgICAgICBzaXplX3Qg
ZW5kID0gdXJsLnJldmVyc2VGaW5kKCcpJyk7CiAgICAgICAgIHJldHVybiB1cmwuc3Vic3RyaW5n
KHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0gICAgfSBlbHNlIGlmICh1cmwuZmluZCgnIycpICE9IG5v
dEZvdW5kKSB7IC8vIGZvcm1hdCBpcyAjdGFyZ2V0CisgICAgfQorICAgIGlmICh1cmwuZmluZCgn
IycpICE9IG5vdEZvdW5kKSB7IC8vIGZvcm1hdCBpcyAjdGFyZ2V0CiAgICAgICAgIHNpemVfdCBz
dGFydCA9IHVybC5maW5kKCcjJykgKyAxOwogICAgICAgICByZXR1cm4gdXJsLnN1YnN0cmluZyhz
dGFydCwgdXJsLmxlbmd0aCgpIC0gc3RhcnQpOwotICAgIH0gZWxzZSAvLyBUaGUgdXJsIGRvZXNu
J3QgaGF2ZSBhbnkgdGFyZ2V0LgotICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorCisg
ICAgLy8gVGhlIHVybCBkb2Vzbid0IGhhdmUgYW55IHRhcmdldC4KKyAgICByZXR1cm4gU3RyaW5n
KCk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5oCShyZXZpc2lvbiA3NDQ5MikKKysr
IFdlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw5ICsy
NCw5IEBACiAjaW5jbHVkZSAiU1ZHRm9udEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJV
dGlsaXRpZXMuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCi0jaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KIAogI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVj
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAJKHJldmlzaW9u
IDc0NDkyKQorKysgV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04Nyw3ICs4Nyw3IEBAIGJvb2wgU1ZHVmlld1NwZWM6OnBhcnNlVmlld1NwZWMoY29uc3QgU3QK
ICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBlbmQsIHN2Z1ZpZXdTcGVjLCBXVEZf
QVJSQVlfTEVOR1RIKHN2Z1ZpZXdTcGVjKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJygnICkKKyAgICBp
ZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGN1cnJWaWV3U3BlYysrOwogCkluZGV4OiBXZWJDb3JlL3N2Zy9T
Vkdab29tQW5kUGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5o
CShyZXZpc2lvbiA3NDQ5MikKKysrIFdlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsMzEgKzI3LDMxIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAg
IGNsYXNzIEF0dHJpYnV0ZTsKLSAgICBjbGFzcyBRdWFsaWZpZWROYW1lOworY2xhc3MgQXR0cmli
dXRlOworY2xhc3MgUXVhbGlmaWVkTmFtZTsKIAotICAgIGNsYXNzIFNWR1pvb21BbmRQYW4gewot
ICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBTVkdab29tQW5kUGFuVHlwZSB7Ci0gICAgICAgICAg
ICBTVkdfWk9PTUFORFBBTl9VTktOT1dOID0gMCwKLSAgICAgICAgICAgIFNWR19aT09NQU5EUEFO
X0RJU0FCTEUgPSAxLAotICAgICAgICAgICAgU1ZHX1pPT01BTkRQQU5fTUFHTklGWSA9IDIKLSAg
ICAgICAgfTsKLQotICAgICAgICBTVkdab29tQW5kUGFuKCkgOiBtX3pvb21BbmRQYW4oU1ZHX1pP
T01BTkRQQU5fTUFHTklGWSkgeyB9Ci0gICAgICAgIHZpcnR1YWwgflNWR1pvb21BbmRQYW4oKSB7
IH0KLQotICAgICAgICB1bnNpZ25lZCBzaG9ydCB6b29tQW5kUGFuKCkgY29uc3QgeyByZXR1cm4g
bV96b29tQW5kUGFuOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRab29tQW5kUGFuKHVuc2ln
bmVkIHNob3J0IHpvb21BbmRQYW4pOworY2xhc3MgU1ZHWm9vbUFuZFBhbiB7CitwdWJsaWM6Cisg
ICAgZW51bSBTVkdab29tQW5kUGFuVHlwZSB7CisgICAgICAgIFNWR19aT09NQU5EUEFOX1VOS05P
V04gPSAwLAorICAgICAgICBTVkdfWk9PTUFORFBBTl9ESVNBQkxFID0gMSwKKyAgICAgICAgU1ZH
X1pPT01BTkRQQU5fTUFHTklGWSA9IDIKKyAgICB9OwogCi0gICAgICAgIGJvb2wgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7Ci0gICAgICAgIGJvb2wgaXNLbm93bkF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJik7CisgICAgU1ZHWm9vbUFuZFBhbigpIDogbV96b29tQW5kUGFu
KFNWR19aT09NQU5EUEFOX01BR05JRlkpIHsgfQorICAgIHZpcnR1YWwgflNWR1pvb21BbmRQYW4o
KSB7IH0KIAotICAgICAgICBib29sIHBhcnNlWm9vbUFuZFBhbihjb25zdCBVQ2hhciomIHN0YXJ0
LCBjb25zdCBVQ2hhciogZW5kKTsKKyAgICB1bnNpZ25lZCBzaG9ydCB6b29tQW5kUGFuKCkgY29u
c3QgeyByZXR1cm4gbV96b29tQW5kUGFuOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFpvb21BbmRQ
YW4odW5zaWduZWQgc2hvcnQgem9vbUFuZFBhbik7CiAKLSAgICBwcml2YXRlOgotICAgICAgICB1
bnNpZ25lZCBzaG9ydCBtX3pvb21BbmRQYW47Ci0gICAgfTsKKyAgICBib29sIHBhcnNlTWFwcGVk
QXR0cmlidXRlKEF0dHJpYnV0ZSopOworICAgIGJvb2wgaXNLbm93bkF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJik7CisKKyAgICBib29sIHBhcnNlWm9vbUFuZFBhbihjb25zdCBVQ2hhciom
IHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kKTsKKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBzaG9y
dCBtX3pvb21BbmRQYW47Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdl
YkNvcmUvc3ZnL1NWR1pvb21FdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1pv
b21FdmVudC5oCShyZXZpc2lvbiA3NDQ5MikKKysrIFdlYkNvcmUvc3ZnL1NWR1pvb21FdmVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCwzNiArMjgsMzYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi0gICAgY2xhc3MgU1ZHWm9vbUV2ZW50IDogcHVibGljIFVJRXZlbnQgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHWm9vbUV2ZW50PiBjcmVhdGUoKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgU1ZHWm9vbUV2ZW50KTsgfQorY2xhc3MgU1ZHWm9vbUV2ZW50IDog
cHVibGljIFVJRXZlbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1pvb21F
dmVudD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1pvb21FdmVudCk7IH0KIAot
ICAgICAgICAvLyAnU1ZHWm9vbUV2ZW50JyBmdW5jdGlvbnMKLSAgICAgICAgRmxvYXRSZWN0IHpv
b21SZWN0U2NyZWVuKCkgY29uc3Q7CisgICAgLy8gJ1NWR1pvb21FdmVudCcgZnVuY3Rpb25zCisg
ICAgRmxvYXRSZWN0IHpvb21SZWN0U2NyZWVuKCkgY29uc3Q7CiAKLSAgICAgICAgZmxvYXQgcHJl
dmlvdXNTY2FsZSgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldFByZXZpb3VzU2NhbGUoZmxvYXQp
OworICAgIGZsb2F0IHByZXZpb3VzU2NhbGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFByZXZpb3Vz
U2NhbGUoZmxvYXQpOwogCi0gICAgICAgIEZsb2F0UG9pbnQgcHJldmlvdXNUcmFuc2xhdGUoKSBj
b25zdDsKKyAgICBGbG9hdFBvaW50IHByZXZpb3VzVHJhbnNsYXRlKCkgY29uc3Q7CiAKLSAgICAg
ICAgZmxvYXQgbmV3U2NhbGUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXROZXdTY2FsZShmbG9h
dCk7CisgICAgZmxvYXQgbmV3U2NhbGUoKSBjb25zdDsKKyAgICB2b2lkIHNldE5ld1NjYWxlKGZs
b2F0KTsKIAotICAgICAgICBGbG9hdFBvaW50IG5ld1RyYW5zbGF0ZSgpIGNvbnN0OworICAgIEZs
b2F0UG9pbnQgbmV3VHJhbnNsYXRlKCkgY29uc3Q7CiAKLSAgICBwcml2YXRlOgotICAgICAgICBT
Vkdab29tRXZlbnQoKTsKK3ByaXZhdGU6CisgICAgU1ZHWm9vbUV2ZW50KCk7CiAKLSAgICAgICAg
dmlydHVhbCBib29sIGlzU1ZHWm9vbUV2ZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlz
U1ZHWm9vbUV2ZW50KCkgY29uc3Q7CiAKLSAgICAgICAgZmxvYXQgbV9uZXdTY2FsZTsKLSAgICAg
ICAgZmxvYXQgbV9wcmV2aW91c1NjYWxlOwotICAgICAgICAKLSAgICAgICAgRmxvYXRSZWN0IG1f
em9vbVJlY3RTY3JlZW47Ci0gICAgICAgIAotICAgICAgICBGbG9hdFBvaW50IG1fbmV3VHJhbnNs
YXRlOwotICAgICAgICBGbG9hdFBvaW50IG1fcHJldmlvdXNUcmFuc2xhdGU7Ci0gICAgfTsKKyAg
ICBmbG9hdCBtX25ld1NjYWxlOworICAgIGZsb2F0IG1fcHJldmlvdXNTY2FsZTsKKworICAgIEZs
b2F0UmVjdCBtX3pvb21SZWN0U2NyZWVuOworCisgICAgRmxvYXRQb2ludCBtX25ld1RyYW5zbGF0
ZTsKKyAgICBGbG9hdFBvaW50IG1fcHJldmlvdXNUcmFuc2xhdGU7Cit9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNwcAkocmV2aXNp
b24gNzQ0OTIpCisrKyBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIFNNSUxUaW1lIFdlYkNvcmU6Om9wZXJhdG9yKihjb25z
dCBTTUlMVGkKIHsKICAgICBpZiAoYS5pc1VucmVzb2x2ZWQoKSB8fCBiLmlzVW5yZXNvbHZlZCgp
KQogICAgICAgICByZXR1cm4gU01JTFRpbWU6OnVucmVzb2x2ZWQoKTsKLSAgICBpZiAoYS52YWx1
ZSgpID09IDAgfHwgYi52YWx1ZSgpID09IDApCisgICAgaWYgKCFhLnZhbHVlKCkgfHwgIWIudmFs
dWUoKSkKICAgICAgICAgcmV0dXJuIFNNSUxUaW1lKDApOwogICAgIGlmIChhLmlzSW5kZWZpbml0
ZSgpIHx8IGIuaXNJbmRlZmluaXRlKCkpCiAgICAgICAgIHJldHVybiBTTUlMVGltZTo6aW5kZWZp
bml0ZSgpOwpJbmRleDogV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmgJKHJldmlzaW9uIDc0NDkyKQor
KysgV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDQxICszMiw0MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBTTUlMVGlt
ZSB7Ci0gICAgcHVibGljOgotICAgICAgICBTTUlMVGltZSgpIDogbV90aW1lKDApIHsgfQotICAg
ICAgICBTTUlMVGltZShkb3VibGUgdGltZSkgOiBtX3RpbWUodGltZSkgeyB9Ci0gICAgICAgIFNN
SUxUaW1lKGNvbnN0IFNNSUxUaW1lJiBvKSA6IG1fdGltZShvLm1fdGltZSkgeyB9Ci0gICAgICAg
IAotICAgICAgICBzdGF0aWMgU01JTFRpbWUgdW5yZXNvbHZlZCgpIHsgcmV0dXJuIHVucmVzb2x2
ZWRWYWx1ZTsgfQotICAgICAgICBzdGF0aWMgU01JTFRpbWUgaW5kZWZpbml0ZSgpIHsgcmV0dXJu
IGluZGVmaW5pdGVWYWx1ZTsgfQotICAgICAgICAKLSAgICAgICAgU01JTFRpbWUmIG9wZXJhdG9y
PShjb25zdCBTTUlMVGltZSYgbykgeyBtX3RpbWUgPSBvLm1fdGltZTsgcmV0dXJuICp0aGlzOyB9
Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZTsgfQotICAgICAg
ICAKLSAgICAgICAgYm9vbCBpc0Zpbml0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZSA8IGluZGVm
aW5pdGVWYWx1ZTsgfQotICAgICAgICBib29sIGlzSW5kZWZpbml0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdGltZSA9PSBpbmRlZmluaXRlVmFsdWU7IH0KLSAgICAgICAgYm9vbCBpc1VucmVzb2x2ZWQo
KSBjb25zdCB7IHJldHVybiBtX3RpbWUgPT0gdW5yZXNvbHZlZFZhbHVlOyB9Ci0gICAgICAgIAot
ICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgdW5yZXNvbHZlZFZhbHVl
OwotICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIGluZGVmaW5pdGVWYWx1ZTsKLQotICAgICAg
ICBkb3VibGUgbV90aW1lOwotICAgIH07Ci0KLSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFNNSUxUaW1lJiBhLCBjb25zdCBTTUlMVGltZSYgYikgeyByZXR1cm4gYS5pc0Zpbml0ZSgp
ICYmIGEudmFsdWUoKSA9PSBiLnZhbHVlKCk7IH0KLSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFNNSUxUaW1lJiBhLCBjb25zdCBTTUlMVGltZSYgYikgeyByZXR1cm4gIW9wZXJhdG9y
PT0oYSwgYik7IH0KLSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgU01JTFRpbWUmIGEs
IGNvbnN0IFNNSUxUaW1lJiBiKSB7IHJldHVybiBhLnZhbHVlKCkgPiBiLnZhbHVlKCk7IH0KLSAg
ICBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgU01JTFRpbWUmIGEsIGNvbnN0IFNNSUxUaW1l
JiBiKSB7IHJldHVybiBhLnZhbHVlKCkgPCBiLnZhbHVlKCk7IH0KLSAgICBpbmxpbmUgYm9vbCBv
cGVyYXRvcj49KGNvbnN0IFNNSUxUaW1lJiBhLCBjb25zdCBTTUlMVGltZSYgYikgeyByZXR1cm4g
YS52YWx1ZSgpID4gYi52YWx1ZSgpIHx8IG9wZXJhdG9yPT0oYSwgYik7IH0KLSAgICBpbmxpbmUg
Ym9vbCBvcGVyYXRvcjw9KGNvbnN0IFNNSUxUaW1lJiBhLCBjb25zdCBTTUlMVGltZSYgYikgeyBy
ZXR1cm4gYS52YWx1ZSgpIDwgYi52YWx1ZSgpIHx8IG9wZXJhdG9yPT0oYSwgYik7IH0KLQotICAg
IFNNSUxUaW1lIG9wZXJhdG9yKyhjb25zdCBTTUlMVGltZSYsIGNvbnN0IFNNSUxUaW1lJik7Ci0g
ICAgU01JTFRpbWUgb3BlcmF0b3ItKGNvbnN0IFNNSUxUaW1lJiwgY29uc3QgU01JTFRpbWUmKTsK
LSAgICAvLyBTbyBtdWx0aXBseWluZyB0aW1lcyBkb2VzIG5vdCBtYWtlIHRvbyBtdWNoIHNlbnNl
IGJ1dCBTTUlMIGRlZmluZXMgaXQgZm9yIGR1cmF0aW9uICogcmVwZWF0Q291bnQKLSAgICBTTUlM
VGltZSBvcGVyYXRvciooY29uc3QgU01JTFRpbWUmLCBjb25zdCBTTUlMVGltZSYpOworY2xhc3Mg
U01JTFRpbWUgeworcHVibGljOgorICAgIFNNSUxUaW1lKCkgOiBtX3RpbWUoMCkgeyB9CisgICAg
U01JTFRpbWUoZG91YmxlIHRpbWUpIDogbV90aW1lKHRpbWUpIHsgfQorICAgIFNNSUxUaW1lKGNv
bnN0IFNNSUxUaW1lJiBvKSA6IG1fdGltZShvLm1fdGltZSkgeyB9CisgICAgCisgICAgc3RhdGlj
IFNNSUxUaW1lIHVucmVzb2x2ZWQoKSB7IHJldHVybiB1bnJlc29sdmVkVmFsdWU7IH0KKyAgICBz
dGF0aWMgU01JTFRpbWUgaW5kZWZpbml0ZSgpIHsgcmV0dXJuIGluZGVmaW5pdGVWYWx1ZTsgfQor
ICAgIAorICAgIFNNSUxUaW1lJiBvcGVyYXRvcj0oY29uc3QgU01JTFRpbWUmIG8pIHsgbV90aW1l
ID0gby5tX3RpbWU7IHJldHVybiAqdGhpczsgfQorICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdGltZTsgfQorICAgIAorICAgIGJvb2wgaXNGaW5pdGUoKSBjb25zdCB7IHJldHVy
biBtX3RpbWUgPCBpbmRlZmluaXRlVmFsdWU7IH0KKyAgICBib29sIGlzSW5kZWZpbml0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdGltZSA9PSBpbmRlZmluaXRlVmFsdWU7IH0KKyAgICBib29sIGlzVW5y
ZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZSA9PSB1bnJlc29sdmVkVmFsdWU7IH0KKyAg
ICAKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSB1bnJlc29sdmVkVmFsdWU7Cisg
ICAgc3RhdGljIGNvbnN0IGRvdWJsZSBpbmRlZmluaXRlVmFsdWU7CisKKyAgICBkb3VibGUgbV90
aW1lOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTTUlMVGltZSYgYSwgY29u
c3QgU01JTFRpbWUmIGIpIHsgcmV0dXJuIGEuaXNGaW5pdGUoKSAmJiBhLnZhbHVlKCkgPT0gYi52
YWx1ZSgpOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNNSUxUaW1lJiBhLCBjb25z
dCBTTUlMVGltZSYgYikgeyByZXR1cm4gIW9wZXJhdG9yPT0oYSwgYik7IH0KK2lubGluZSBib29s
IG9wZXJhdG9yPihjb25zdCBTTUlMVGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJu
IGEudmFsdWUoKSA+IGIudmFsdWUoKTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFNN
SUxUaW1lJiBhLCBjb25zdCBTTUlMVGltZSYgYikgeyByZXR1cm4gYS52YWx1ZSgpIDwgYi52YWx1
ZSgpOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFNNSUxUaW1lJiBhLCBjb25zdCBT
TUlMVGltZSYgYikgeyByZXR1cm4gYS52YWx1ZSgpID4gYi52YWx1ZSgpIHx8IG9wZXJhdG9yPT0o
YSwgYik7IH0KK2lubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgU01JTFRpbWUmIGEsIGNvbnN0
IFNNSUxUaW1lJiBiKSB7IHJldHVybiBhLnZhbHVlKCkgPCBiLnZhbHVlKCkgfHwgb3BlcmF0b3I9
PShhLCBiKTsgfQorCitTTUlMVGltZSBvcGVyYXRvcisoY29uc3QgU01JTFRpbWUmLCBjb25zdCBT
TUlMVGltZSYpOworU01JTFRpbWUgb3BlcmF0b3ItKGNvbnN0IFNNSUxUaW1lJiwgY29uc3QgU01J
TFRpbWUmKTsKKy8vIFNvIG11bHRpcGx5aW5nIHRpbWVzIGRvZXMgbm90IG1ha2UgdG9vIG11Y2gg
c2Vuc2UgYnV0IFNNSUwgZGVmaW5lcyBpdCBmb3IgZHVyYXRpb24gKiByZXBlYXRDb3VudAorU01J
TFRpbWUgb3BlcmF0b3IqKGNvbnN0IFNNSUxUaW1lJiwgY29uc3QgU01JTFRpbWUmKTsKKwogfQog
Ci0jZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYgLy8gU01JTFRp
bWVfaApJbmRleDogV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmgJKHJl
dmlzaW9uIDc0NDkyKQorKysgV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYzICszOSw2MyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgCi0gICAgY2xhc3MgU1ZHRWxlbWVudDsKLSAgICBjbGFzcyBTVkdTTUlMRWxlbWVu
dDsKLSAgICBjbGFzcyBTVkdTVkdFbGVtZW50OwotCi0gICAgY2xhc3MgU01JTFRpbWVDb250YWlu
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTTUlMVGltZUNvbnRhaW5lcj4gIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNNSUxUaW1lQ29udGFpbmVyPiBjcmVhdGUoU1ZH
U1ZHRWxlbWVudCogb3duZXIpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTTUlMVGltZUNvbnRhaW5l
cihvd25lcikpOyB9IAotICAgIAotICAgICAgICB2b2lkIHNjaGVkdWxlKFNWR1NNSUxFbGVtZW50
Kik7Ci0gICAgICAgIHZvaWQgdW5zY2hlZHVsZShTVkdTTUlMRWxlbWVudCopOwotICAgICAgICAK
LSAgICAgICAgU01JTFRpbWUgZWxhcHNlZCgpIGNvbnN0OwotCi0gICAgICAgIGJvb2wgaXNBY3Rp
dmUoKSBjb25zdDsKLSAgICAgICAgYm9vbCBpc1BhdXNlZCgpIGNvbnN0OwotICAgICAgICAKLSAg
ICAgICAgdm9pZCBiZWdpbigpOwotICAgICAgICB2b2lkIHBhdXNlKCk7Ci0gICAgICAgIHZvaWQg
cmVzdW1lKCk7Ci0gICAgICAgIAotICAgICAgICB2b2lkIHNldERvY3VtZW50T3JkZXJJbmRleGVz
RGlydHkoKSB7IG1fZG9jdW1lbnRPcmRlckluZGV4ZXNEaXJ0eSA9IHRydWU7IH0KLQotICAgICAg
ICAvLyBNb3ZlIHRvIGEgc3BlY2lmaWMgdGltZS4gT25seSB1c2VkIGZvciBEUlQgdGVzdGluZyBw
dXJwb3Nlcy4KLSAgICAgICAgdm9pZCBzYW1wbGVBbmltYXRpb25BdFRpbWUoY29uc3QgU3RyaW5n
JiBlbGVtZW50SWQsIGRvdWJsZSBzZWNvbmRzKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFNN
SUxUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQqIG93bmVyKTsKLSAgICAgICAgCi0gICAgICAg
IHZvaWQgdGltZXJGaXJlZChUaW1lcjxTTUlMVGltZUNvbnRhaW5lcj4qKTsKLSAgICAgICAgdm9p
ZCBzdGFydFRpbWVyKFNNSUxUaW1lIGZpcmVUaW1lLCBTTUlMVGltZSBtaW5pbXVtRGVsYXkgPSAw
KTsKLSAgICAgICAgdm9pZCB1cGRhdGVBbmltYXRpb25zKFNNSUxUaW1lIGVsYXBzZWQpOwotICAg
ICAgICAKLSAgICAgICAgdm9pZCB1cGRhdGVEb2N1bWVudE9yZGVySW5kZXhlcygpOwotICAgICAg
ICB2b2lkIHNvcnRCeVByaW9yaXR5KFZlY3RvcjxTVkdTTUlMRWxlbWVudCo+JiBzbWlsRWxlbWVu
dHMsIFNNSUxUaW1lIGVsYXBzZWQpOwotICAgICAgICAKLSAgICAgICAgdHlwZWRlZiBwYWlyPFNW
R0VsZW1lbnQqLCBTdHJpbmc+IEVsZW1lbnRBdHRyaWJ1dGVQYWlyOwotICAgICAgICBTdHJpbmcg
YmFzZVZhbHVlRm9yKEVsZW1lbnRBdHRyaWJ1dGVQYWlyKTsKLSAgICAgICAgCi0gICAgICAgIGRv
dWJsZSBtX2JlZ2luVGltZTsKLSAgICAgICAgZG91YmxlIG1fcGF1c2VUaW1lOwotICAgICAgICBk
b3VibGUgbV9hY2N1bXVsYXRlZFBhdXNlVGltZTsKLSAgICAgICAgZG91YmxlIG1fbmV4dE1hbnVh
bFNhbXBsZVRpbWU7Ci0gICAgICAgIFN0cmluZyBtX25leHRTYW1wbGluZ1RhcmdldDsKLQotICAg
ICAgICBib29sIG1fZG9jdW1lbnRPcmRlckluZGV4ZXNEaXJ0eTsKLSAgICAgICAgCi0gICAgICAg
IFRpbWVyPFNNSUxUaW1lQ29udGFpbmVyPiBtX3RpbWVyOwotCi0gICAgICAgIHR5cGVkZWYgSGFz
aFNldDxTVkdTTUlMRWxlbWVudCo+IFRpbWluZ0VsZW1lbnRTZXQ7Ci0gICAgICAgIFRpbWluZ0Vs
ZW1lbnRTZXQgbV9zY2hlZHVsZWRBbmltYXRpb25zOwotICAgICAgICAKLSAgICAgICAgdHlwZWRl
ZiBIYXNoTWFwPEVsZW1lbnRBdHRyaWJ1dGVQYWlyLCBTdHJpbmc+IEJhc2VWYWx1ZU1hcDsKLSAg
ICAgICAgQmFzZVZhbHVlTWFwIG1fc2F2ZWRCYXNlVmFsdWVzOworY2xhc3MgU1ZHRWxlbWVudDsK
K2NsYXNzIFNWR1NNSUxFbGVtZW50OworY2xhc3MgU1ZHU1ZHRWxlbWVudDsKKworY2xhc3MgU01J
TFRpbWVDb250YWluZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTTUlMVGltZUNvbnRhaW5lcj4gIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTTUlMVGltZUNvbnRhaW5lcj4gY3JlYXRl
KFNWR1NWR0VsZW1lbnQqIG93bmVyKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU01JTFRpbWVDb250
YWluZXIob3duZXIpKTsgfSAKIAotICAgICAgICBTVkdTVkdFbGVtZW50KiBtX293bmVyU1ZHRWxl
bWVudDsKLSAgICB9OworICAgIHZvaWQgc2NoZWR1bGUoU1ZHU01JTEVsZW1lbnQqKTsKKyAgICB2
b2lkIHVuc2NoZWR1bGUoU1ZHU01JTEVsZW1lbnQqKTsKKyAgICAKKyAgICBTTUlMVGltZSBlbGFw
c2VkKCkgY29uc3Q7CisKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisgICAgYm9vbCBpc1Bh
dXNlZCgpIGNvbnN0OworICAgIAorICAgIHZvaWQgYmVnaW4oKTsKKyAgICB2b2lkIHBhdXNlKCk7
CisgICAgdm9pZCByZXN1bWUoKTsKKyAgICAKKyAgICB2b2lkIHNldERvY3VtZW50T3JkZXJJbmRl
eGVzRGlydHkoKSB7IG1fZG9jdW1lbnRPcmRlckluZGV4ZXNEaXJ0eSA9IHRydWU7IH0KKworICAg
IC8vIE1vdmUgdG8gYSBzcGVjaWZpYyB0aW1lLiBPbmx5IHVzZWQgZm9yIERSVCB0ZXN0aW5nIHB1
cnBvc2VzLgorICAgIHZvaWQgc2FtcGxlQW5pbWF0aW9uQXRUaW1lKGNvbnN0IFN0cmluZyYgZWxl
bWVudElkLCBkb3VibGUgc2Vjb25kcyk7CisKK3ByaXZhdGU6CisgICAgU01JTFRpbWVDb250YWlu
ZXIoU1ZHU1ZHRWxlbWVudCogb3duZXIpOworICAgIAorICAgIHZvaWQgdGltZXJGaXJlZChUaW1l
cjxTTUlMVGltZUNvbnRhaW5lcj4qKTsKKyAgICB2b2lkIHN0YXJ0VGltZXIoU01JTFRpbWUgZmly
ZVRpbWUsIFNNSUxUaW1lIG1pbmltdW1EZWxheSA9IDApOworICAgIHZvaWQgdXBkYXRlQW5pbWF0
aW9ucyhTTUlMVGltZSBlbGFwc2VkKTsKKyAgICAKKyAgICB2b2lkIHVwZGF0ZURvY3VtZW50T3Jk
ZXJJbmRleGVzKCk7CisgICAgdm9pZCBzb3J0QnlQcmlvcml0eShWZWN0b3I8U1ZHU01JTEVsZW1l
bnQqPiYgc21pbEVsZW1lbnRzLCBTTUlMVGltZSBlbGFwc2VkKTsKKyAgICAKKyAgICB0eXBlZGVm
IHBhaXI8U1ZHRWxlbWVudCosIFN0cmluZz4gRWxlbWVudEF0dHJpYnV0ZVBhaXI7CisgICAgU3Ry
aW5nIGJhc2VWYWx1ZUZvcihFbGVtZW50QXR0cmlidXRlUGFpcik7CisgICAgCisgICAgZG91Ymxl
IG1fYmVnaW5UaW1lOworICAgIGRvdWJsZSBtX3BhdXNlVGltZTsKKyAgICBkb3VibGUgbV9hY2N1
bXVsYXRlZFBhdXNlVGltZTsKKyAgICBkb3VibGUgbV9uZXh0TWFudWFsU2FtcGxlVGltZTsKKyAg
ICBTdHJpbmcgbV9uZXh0U2FtcGxpbmdUYXJnZXQ7CisKKyAgICBib29sIG1fZG9jdW1lbnRPcmRl
ckluZGV4ZXNEaXJ0eTsKKyAgICAKKyAgICBUaW1lcjxTTUlMVGltZUNvbnRhaW5lcj4gbV90aW1l
cjsKKworICAgIHR5cGVkZWYgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+IFRpbWluZ0VsZW1lbnRT
ZXQ7CisgICAgVGltaW5nRWxlbWVudFNldCBtX3NjaGVkdWxlZEFuaW1hdGlvbnM7CisgICAgCisg
ICAgdHlwZWRlZiBIYXNoTWFwPEVsZW1lbnRBdHRyaWJ1dGVQYWlyLCBTdHJpbmc+IEJhc2VWYWx1
ZU1hcDsKKyAgICBCYXNlVmFsdWVNYXAgbV9zYXZlZEJhc2VWYWx1ZXM7CisKKyAgICBTVkdTVkdF
bGVtZW50KiBtX293bmVyU1ZHRWxlbWVudDsKK307CiB9CiAKLSNlbmRpZgotI2VuZGlmCisjZW5k
aWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZiAvLyBTTUlMVGltZUNvbnRhaW5lcl9oCkluZGV4OiBX
ZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHJldmlzaW9uIDc0NDkyKQor
KysgV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTIsOCArOTIsNyBAQCBwcml2YXRlOgogYm9vbCBDb25kaXRpb25FdmVudExpc3RlbmVy
OjpvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyKQogewogICAgIGlmIChj
b25zdCBDb25kaXRpb25FdmVudExpc3RlbmVyKiBjb25kaXRpb25FdmVudExpc3RlbmVyID0gQ29u
ZGl0aW9uRXZlbnRMaXN0ZW5lcjo6Y2FzdCgmbGlzdGVuZXIpKQotICAgICAgICByZXR1cm4gbV9h
bmltYXRpb24gPT0gY29uZGl0aW9uRXZlbnRMaXN0ZW5lci0+bV9hbmltYXRpb24gJiYKLSAgICAg
ICAgICAgICAgIG1fY29uZGl0aW9uID09IGNvbmRpdGlvbkV2ZW50TGlzdGVuZXItPm1fY29uZGl0
aW9uOworICAgICAgICByZXR1cm4gbV9hbmltYXRpb24gPT0gY29uZGl0aW9uRXZlbnRMaXN0ZW5l
ci0+bV9hbmltYXRpb24gJiYgbV9jb25kaXRpb24gPT0gY29uZGl0aW9uRXZlbnRMaXN0ZW5lci0+
bV9jb25kaXRpb247CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC02MTQsNyArNjEzLDcgQEAg
U01JTFRpbWUgU1ZHU01JTEVsZW1lbnQ6OnJlcGVhdGluZ0R1cmF0aQogICAgIFNNSUxUaW1lIHJl
cGVhdENvdW50ID0gdGhpcy0+cmVwZWF0Q291bnQoKTsKICAgICBTTUlMVGltZSByZXBlYXREdXIg
PSB0aGlzLT5yZXBlYXREdXIoKTsKICAgICBTTUlMVGltZSBzaW1wbGVEdXJhdGlvbiA9IHRoaXMt
PnNpbXBsZUR1cmF0aW9uKCk7Ci0gICAgaWYgKHNpbXBsZUR1cmF0aW9uID09IDAgfHwgKHJlcGVh
dER1ci5pc1VucmVzb2x2ZWQoKSAmJiByZXBlYXRDb3VudC5pc1VucmVzb2x2ZWQoKSkpCisgICAg
aWYgKCFzaW1wbGVEdXJhdGlvbiB8fCAocmVwZWF0RHVyLmlzVW5yZXNvbHZlZCgpICYmIHJlcGVh
dENvdW50LmlzVW5yZXNvbHZlZCgpKSkKICAgICAgICAgcmV0dXJuIHNpbXBsZUR1cmF0aW9uOwog
ICAgIFNNSUxUaW1lIHJlcGVhdENvdW50RHVyYXRpb24gPSBzaW1wbGVEdXJhdGlvbiAqIHJlcGVh
dENvdW50OwogICAgIHJldHVybiBtaW4ocmVwZWF0Q291bnREdXJhdGlvbiwgbWluKHJlcGVhdER1
ciwgU01JTFRpbWU6OmluZGVmaW5pdGUoKSkpOwpAQCAtNjcwLDEwICs2NjksMTEgQEAgdm9pZCBT
VkdTTUlMRWxlbWVudDo6cmVzb2x2ZUludGVydmFsKGJvbwogICAgICAgICAgICAgYmVnaW5SZXN1
bHQgPSB0ZW1wQmVnaW47CiAgICAgICAgICAgICBlbmRSZXN1bHQgPSB0ZW1wRW5kOwogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgaWYgKHJlc3RhcnQoKSA9PSBSZXN0YXJ0TmV2
ZXIpCisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3RhcnQoKSA9PSBSZXN0YXJ0TmV2ZXIpCiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmVnaW5BZnRlciA9
IHRlbXBFbmQ7CisKKyAgICAgICAgYmVnaW5BZnRlciA9IHRlbXBFbmQ7CiAgICAgICAgIGxhc3RJ
bnRlcnZhbFRlbXBFbmQgPSB0ZW1wRW5kOwogICAgIH0KICAgICBiZWdpblJlc3VsdCA9IFNNSUxU
aW1lOjp1bnJlc29sdmVkKCk7CkBAIC03ODcsNyArNzg3LDcgQEAgZmxvYXQgU1ZHU01JTEVsZW1l
bnQ6OmNhbGN1bGF0ZUFuaW1hdGlvbgogICAgICAgICByZXBlYXQgPSAwOwogICAgICAgICByZXR1
cm4gMC5mOwogICAgIH0KLSAgICBpZiAoc2ltcGxlRHVyYXRpb24gPT0gMCkgeworICAgIGlmICgh
c2ltcGxlRHVyYXRpb24pIHsKICAgICAgICAgcmVwZWF0ID0gMDsKICAgICAgICAgcmV0dXJuIDEu
ZjsKICAgICB9CkBAIC03OTcsNyArNzk3LDcgQEAgZmxvYXQgU1ZHU01JTEVsZW1lbnQ6OmNhbGN1
bGF0ZUFuaW1hdGlvbgogICAgIFNNSUxUaW1lIHJlcGVhdGluZ0R1cmF0aW9uID0gdGhpcy0+cmVw
ZWF0aW5nRHVyYXRpb24oKTsKICAgICBpZiAoZWxhcHNlZCA+PSBtX2ludGVydmFsRW5kIHx8IGFj
dGl2ZVRpbWUgPiByZXBlYXRpbmdEdXJhdGlvbikgewogICAgICAgICByZXBlYXQgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4ocmVwZWF0aW5nRHVyYXRpb24udmFsdWUoKSAvIHNpbXBsZUR1cmF0aW9u
LnZhbHVlKCkpOwotICAgICAgICBpZiAoZm1vZChyZXBlYXRpbmdEdXJhdGlvbi52YWx1ZSgpLCBz
aW1wbGVEdXJhdGlvbi52YWx1ZSgpID09IDAuKSkKKyAgICAgICAgaWYgKGZtb2QocmVwZWF0aW5n
RHVyYXRpb24udmFsdWUoKSwgIXNpbXBsZUR1cmF0aW9uLnZhbHVlKCkpKQogICAgICAgICAgICAg
cmVwZWF0LS07CiAgICAgICAgIHJldHVybiAxLmY7CiAgICAgfQpJbmRleDogV2ViQ29yZS9zdmcv
YW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvYW5p
bWF0aW9uL1NWR1NNSUxFbGVtZW50LmgJKHJldmlzaW9uIDc0NDkyKQorKysgV2ViQ29yZS9zdmcv
YW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDE3NSArMjMs
MTc0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0KICNpZm5kZWYgU1ZHU01JTEVsZW1lbnRf
aAogI2RlZmluZSBTVkdTTUlMRWxlbWVudF9oCiAjaWYgRU5BQkxFKFNWR19BTklNQVRJT04pCi0K
LSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU01JTFRpbWUuaCIKKyNpbmNsdWRl
ICJTVkdFbGVtZW50LmgiCisKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgCi0gICAgY2xhc3MgQ29uZGl0aW9uRXZlbnRMaXN0ZW5lcjsKLSAgICBj
bGFzcyBTTUlMVGltZUNvbnRhaW5lcjsKK2NsYXNzIENvbmRpdGlvbkV2ZW50TGlzdGVuZXI7Citj
bGFzcyBTTUlMVGltZUNvbnRhaW5lcjsKKworLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFNNSUwg
aW50ZXJ2YWwgdGltaW5nIG1vZGVsIGFzIG5lZWRlZCBmb3IgU1ZHIGFuaW1hdGlvbi4KK2NsYXNz
IFNWR1NNSUxFbGVtZW50IDogcHVibGljIFNWR0VsZW1lbnQgeworcHVibGljOgorICAgIFNWR1NN
SUxFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgIHZpcnR1YWwg
flNWR1NNSUxFbGVtZW50KCk7CisKKyAgICBzdGF0aWMgYm9vbCBpc1NNSUxFbGVtZW50KE5vZGUq
IG5vZGUpOworCisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0
ZSopOworICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSosIGJvb2wg
cHJlc2VydmVEZWNscyk7CisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7
CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisKKyAgICBTTUlMVGltZUNvbnRhaW5lciogdGlt
ZUNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIG1fdGltZUNvbnRhaW5lci5nZXQoKTsgfQorCisg
ICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCgpIGNvbnN0OworICAgIFN0cmluZyBhdHRyaWJ1
dGVOYW1lKCkgY29uc3Q7CisKKyAgICB2b2lkIGJlZ2luQnlMaW5rQWN0aXZhdGlvbigpOworCisg
ICAgZW51bSBSZXN0YXJ0IHsgUmVzdGFydEFsd2F5cywgUmVzdGFydFdoZW5Ob3RBY3RpdmUsIFJl
c3RhcnROZXZlciB9OworICAgIFJlc3RhcnQgcmVzdGFydCgpIGNvbnN0OworCisgICAgZW51bSBG
aWxsTW9kZSB7IEZpbGxSZW1vdmUsIEZpbGxGcmVlemUgfTsKKyAgICBGaWxsTW9kZSBmaWxsKCkg
Y29uc3Q7CisKKyAgICBTdHJpbmcgeGxpbmtIcmVmKCkgY29uc3Q7CisKKyAgICBTTUlMVGltZSBk
dXIoKSBjb25zdDsKKyAgICBTTUlMVGltZSByZXBlYXREdXIoKSBjb25zdDsKKyAgICBTTUlMVGlt
ZSByZXBlYXRDb3VudCgpIGNvbnN0OworICAgIFNNSUxUaW1lIG1heFZhbHVlKCkgY29uc3Q7Cisg
ICAgU01JTFRpbWUgbWluVmFsdWUoKSBjb25zdDsKKworICAgIFNNSUxUaW1lIGVsYXBzZWQoKSBj
b25zdDsgCisKKyAgICBTTUlMVGltZSBpbnRlcnZhbEJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9p
bnRlcnZhbEJlZ2luOyB9CisgICAgU01JTFRpbWUgaW50ZXJ2YWxFbmQoKSBjb25zdCB7IHJldHVy
biBtX2ludGVydmFsRW5kOyB9CisgICAgU01JTFRpbWUgcHJldmlvdXNJbnRlcnZhbEJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9wcmV2aW91c0ludGVydmFsQmVnaW47IH0KKyAgICBTTUlMVGltZSBz
aW1wbGVEdXJhdGlvbigpIGNvbnN0OworCisgICAgdm9pZCBwcm9ncmVzcyhTTUlMVGltZSBlbGFw
c2VkLCBTVkdTTUlMRWxlbWVudCogcmVzdWx0c0VsZW1lbnQpOworICAgIFNNSUxUaW1lIG5leHRQ
cm9ncmVzc1RpbWUoKSBjb25zdDsKKworICAgIHN0YXRpYyBTTUlMVGltZSBwYXJzZUNsb2NrVmFs
dWUoY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIFNNSUxUaW1lIHBhcnNlT2Zmc2V0VmFsdWUo
Y29uc3QgU3RyaW5nJik7CisKKyAgICBib29sIGlzQ29udHJpYnV0aW5nKFNNSUxUaW1lIGVsYXBz
ZWQpIGNvbnN0OworICAgIGJvb2wgaXNJbmFjdGl2ZSgpIGNvbnN0OworICAgIGJvb2wgaXNGcm96
ZW4oKSBjb25zdDsKKworICAgIHVuc2lnbmVkIGRvY3VtZW50T3JkZXJJbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1fZG9jdW1lbnRPcmRlckluZGV4OyB9CisgICAgdm9pZCBzZXREb2N1bWVudE9yZGVy
SW5kZXgodW5zaWduZWQgaW5kZXgpIHsgbV9kb2N1bWVudE9yZGVySW5kZXggPSBpbmRleDsgfQor
CisgICAgdmlydHVhbCBib29sIGlzQWRkaXRpdmUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHJlc2V0VG9CYXNlVmFsdWUoY29uc3QgU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBhcHBseVJlc3VsdHNUb1RhcmdldCgpID0gMDsKIAotICAgIC8vIFRoaXMgY2xhc3MgaW1wbGVt
ZW50cyBTTUlMIGludGVydmFsIHRpbWluZyBtb2RlbCBhcyBuZWVkZWQgZm9yIFNWRyBhbmltYXRp
b24uCi0gICAgY2xhc3MgU1ZHU01JTEVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxlbWVudCB7Ci0gICAg
cHVibGljOgotICAgICAgICBTVkdTTUlMRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqKTsKLSAgICAgICAgdmlydHVhbCB+U1ZHU01JTEVsZW1lbnQoKTsKLSAgICAgICAgCi0g
ICAgICAgIHN0YXRpYyBib29sIGlzU01JTEVsZW1lbnQoTm9kZSogbm9kZSk7Ci0gICAgICAgIAot
ICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSosIGJvb2wgcHJl
c2VydmVEZWNscyk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgIFNNSUxUaW1lQ29udGFpbmVyKiB0aW1lQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4g
bV90aW1lQ29udGFpbmVyLmdldCgpOyB9Ci0KLSAgICAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxl
bWVudCgpIGNvbnN0OwotICAgICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSgpIGNvbnN0OwotICAg
ICAgICAKLSAgICAgICAgdm9pZCBiZWdpbkJ5TGlua0FjdGl2YXRpb24oKTsKLQotICAgICAgICBl
bnVtIFJlc3RhcnQgeyBSZXN0YXJ0QWx3YXlzLCBSZXN0YXJ0V2hlbk5vdEFjdGl2ZSwgUmVzdGFy
dE5ldmVyIH07Ci0gICAgICAgIFJlc3RhcnQgcmVzdGFydCgpIGNvbnN0OwotICAgICAgICAKLSAg
ICAgICAgZW51bSBGaWxsTW9kZSB7IEZpbGxSZW1vdmUsIEZpbGxGcmVlemUgfTsKLSAgICAgICAg
RmlsbE1vZGUgZmlsbCgpIGNvbnN0OwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIHhsaW5rSHJl
ZigpIGNvbnN0OwotICAgICAgICAKLSAgICAgICAgU01JTFRpbWUgZHVyKCkgY29uc3Q7Ci0gICAg
ICAgIFNNSUxUaW1lIHJlcGVhdER1cigpIGNvbnN0OwotICAgICAgICBTTUlMVGltZSByZXBlYXRD
b3VudCgpIGNvbnN0OwotICAgICAgICBTTUlMVGltZSBtYXhWYWx1ZSgpIGNvbnN0OwotICAgICAg
ICBTTUlMVGltZSBtaW5WYWx1ZSgpIGNvbnN0OwotICAgICAgICAKLSAgICAgICAgU01JTFRpbWUg
ZWxhcHNlZCgpIGNvbnN0OyAKLSAgICAgICAgCi0gICAgICAgIFNNSUxUaW1lIGludGVydmFsQmVn
aW4oKSBjb25zdCB7IHJldHVybiBtX2ludGVydmFsQmVnaW47IH0KLSAgICAgICAgU01JTFRpbWUg
aW50ZXJ2YWxFbmQoKSBjb25zdCB7IHJldHVybiBtX2ludGVydmFsRW5kOyB9Ci0gICAgICAgIFNN
SUxUaW1lIHByZXZpb3VzSW50ZXJ2YWxCZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJldmlvdXNJ
bnRlcnZhbEJlZ2luOyB9Ci0gICAgICAgIFNNSUxUaW1lIHNpbXBsZUR1cmF0aW9uKCkgY29uc3Q7
Ci0gICAgICAgIAotICAgICAgICB2b2lkIHByb2dyZXNzKFNNSUxUaW1lIGVsYXBzZWQsIFNWR1NN
SUxFbGVtZW50KiByZXN1bHRzRWxlbWVudCk7Ci0gICAgICAgIFNNSUxUaW1lIG5leHRQcm9ncmVz
c1RpbWUoKSBjb25zdDsKLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBTTUlMVGltZSBwYXJzZUNs
b2NrVmFsdWUoY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIHN0YXRpYyBTTUlMVGltZSBwYXJzZU9m
ZnNldFZhbHVlKGNvbnN0IFN0cmluZyYpOwotICAgICAgICAKLSAgICAgICAgYm9vbCBpc0NvbnRy
aWJ1dGluZyhTTUlMVGltZSBlbGFwc2VkKSBjb25zdDsKLSAgICAgICAgYm9vbCBpc0luYWN0aXZl
KCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgaXNGcm96ZW4oKSBjb25zdDsKLSAgICAgICAgCi0gICAg
ICAgIHVuc2lnbmVkIGRvY3VtZW50T3JkZXJJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1l
bnRPcmRlckluZGV4OyB9Ci0gICAgICAgIHZvaWQgc2V0RG9jdW1lbnRPcmRlckluZGV4KHVuc2ln
bmVkIGluZGV4KSB7IG1fZG9jdW1lbnRPcmRlckluZGV4ID0gaW5kZXg7IH0KLSAgICAgICAgCi0g
ICAgICAgIHZpcnR1YWwgYm9vbCBpc0FkZGl0aXZlKCkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0
dWFsIHZvaWQgcmVzZXRUb0Jhc2VWYWx1ZShjb25zdCBTdHJpbmcmKSA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBhcHBseVJlc3VsdHNUb1RhcmdldCgpID0gMDsKLSAgICAgICAgCiBwcm90ZWN0
ZWQ6Ci0gICAgICAgIHZvaWQgYWRkQmVnaW5UaW1lKFNNSUxUaW1lIHRpbWUpOwotICAgICAgICB2
b2lkIGFkZEVuZFRpbWUoU01JTFRpbWUgdGltZSk7Ci0gICAgICAgIAorICAgIHZvaWQgYWRkQmVn
aW5UaW1lKFNNSUxUaW1lIHRpbWUpOworICAgIHZvaWQgYWRkRW5kVGltZShTTUlMVGltZSB0aW1l
KTsKKwogcHJpdmF0ZToKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0ZWRBY3RpdmVJbnRlcnZh
bCgpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbihmbG9hdCBwZXJj
ZW50LCB1bnNpZ25lZCByZXBlYXQsIFNWR1NNSUxFbGVtZW50KiByZXN1bHRFbGVtZW50KSA9IDA7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBlbmRlZEFjdGl2ZUludGVydmFsKCkgPSAwOwotICAgICAg
ICAKLSAgICAgICAgZW51bSBCZWdpbk9yRW5kIHsgQmVnaW4sIEVuZCB9OwotICAgICAgICBTTUlM
VGltZSBmaW5kSW5zdGFuY2VUaW1lKEJlZ2luT3JFbmQgYmVnaW5PckVuZCwgU01JTFRpbWUgbWlu
aW11bVRpbWUsIGJvb2wgZXF1YWxzTWluaW11bU9LKSBjb25zdDsKLSAgICAgICAgdm9pZCByZXNv
bHZlRmlyc3RJbnRlcnZhbCgpOwotICAgICAgICB2b2lkIHJlc29sdmVOZXh0SW50ZXJ2YWwoKTsK
LSAgICAgICAgdm9pZCByZXNvbHZlSW50ZXJ2YWwoYm9vbCBmaXJzdCwgU01JTFRpbWUmIGJlZ2lu
UmVzdWx0LCBTTUlMVGltZSYgZW5kUmVzdWx0KSBjb25zdDsKLSAgICAgICAgU01JTFRpbWUgcmVz
b2x2ZUFjdGl2ZUVuZChTTUlMVGltZSByZXNvbHZlZEJlZ2luLCBTTUlMVGltZSByZXNvbHZlZEVu
ZCkgY29uc3Q7Ci0gICAgICAgIFNNSUxUaW1lIHJlcGVhdGluZ0R1cmF0aW9uKCkgY29uc3Q7Ci0g
ICAgICAgIHZvaWQgY2hlY2tSZXN0YXJ0KFNNSUxUaW1lIGVsYXBzZWQpOwotICAgICAgICB2b2lk
IGJlZ2luTGlzdENoYW5nZWQoKTsKLSAgICAgICAgdm9pZCBlbmRMaXN0Q2hhbmdlZCgpOwotICAg
ICAgICB2b2lkIHJlc2NoZWR1bGUoKTsKLQotICAgICAgICAvLyBUaGlzIHJlcHJlc2VudHMgY29u
ZGl0aW9ucyBvbiBlbGVtZW50cyBiZWdpbiBvciBlbmQgbGlzdCB0aGF0IG5lZWQgdG8gYmUgcmVz
b2x2ZWQgb24gcnVudGltZQotICAgICAgICAvLyBmb3IgZXhhbXBsZSA8YW5pbWF0ZSBiZWdpbj0i
b3RoZXJFbGVtZW50LmJlZ2luICsgOHM7IGJ1dHRvbi5jbGljayIgLi4uIC8+Ci0gICAgICAgIHN0
cnVjdCBDb25kaXRpb24gewotICAgICAgICAgICAgZW51bSBUeXBlIHsgRXZlbnRCYXNlLCBTeW5j
YmFzZSwgQWNjZXNzS2V5IH07Ci0gICAgICAgICAgICBDb25kaXRpb24oVHlwZSwgQmVnaW5PckVu
ZCBiZWdpbk9yRW5kLCBjb25zdCBTdHJpbmcmIGJhc2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCBT
TUlMVGltZSBvZmZzZXQsIGludCByZXBlYXRzID0gLTEpOwotICAgICAgICAgICAgVHlwZSBtX3R5
cGU7Ci0gICAgICAgICAgICBCZWdpbk9yRW5kIG1fYmVnaW5PckVuZDsKLSAgICAgICAgICAgIFN0
cmluZyBtX2Jhc2VJRDsKLSAgICAgICAgICAgIFN0cmluZyBtX25hbWU7Ci0gICAgICAgICAgICBT
TUlMVGltZSBtX29mZnNldDsKLSAgICAgICAgICAgIGludCBtX3JlcGVhdHM7Ci0gICAgICAgICAg
ICBSZWZQdHI8RWxlbWVudD4gbV9zeW5jYmFzZTsKLSAgICAgICAgICAgIFJlZlB0cjxDb25kaXRp
b25FdmVudExpc3RlbmVyPiBtX2V2ZW50TGlzdGVuZXI7Ci0gICAgICAgIH07Ci0gICAgICAgIGJv
b2wgcGFyc2VDb25kaXRpb24oY29uc3QgU3RyaW5nJiwgQmVnaW5PckVuZCBiZWdpbk9yRW5kKTsK
LSAgICAgICAgdm9pZCBwYXJzZUJlZ2luT3JFbmQoY29uc3QgU3RyaW5nJiwgQmVnaW5PckVuZCBi
ZWdpbk9yRW5kKTsKLSAgICAgICAgRWxlbWVudCogZXZlbnRCYXNlRm9yKGNvbnN0IENvbmRpdGlv
biYpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgY29ubmVjdENvbmRpdGlvbnMoKTsKLSAgICAgICAg
dm9pZCBkaXNjb25uZWN0Q29uZGl0aW9ucygpOwotICAgICAgICAKLSAgICAgICAgLy8gRXZlbnQg
YmFzZSB0aW1pbmcKLSAgICAgICAgdm9pZCBoYW5kbGVDb25kaXRpb25FdmVudChFdmVudCosIENv
bmRpdGlvbiopOwotICAgICAgICAKLSAgICAgICAgLy8gU3luY2Jhc2UgdGltaW5nCi0gICAgICAg
IGVudW0gTmV3T3JFeGlzdGluZ0ludGVydmFsIHsgTmV3SW50ZXJ2YWwsIEV4aXN0aW5nSW50ZXJ2
YWwgfTsgCi0gICAgICAgIHZvaWQgbm90aWZ5RGVwZW5kZW50c0ludGVydmFsQ2hhbmdlZChOZXdP
ckV4aXN0aW5nSW50ZXJ2YWwpOwotICAgICAgICB2b2lkIGNyZWF0ZUluc3RhbmNlVGltZXNGcm9t
U3luY2Jhc2UoU1ZHU01JTEVsZW1lbnQqIHN5bmNiYXNlLCBOZXdPckV4aXN0aW5nSW50ZXJ2YWwp
OwotICAgICAgICB2b2lkIGFkZFRpbWVEZXBlbmRlbnQoU1ZHU01JTEVsZW1lbnQqKTsKLSAgICAg
ICAgdm9pZCByZW1vdmVUaW1lRGVwZW5kZW50KFNWR1NNSUxFbGVtZW50Kik7Ci0gICAgICAgIAot
ICAgICAgICBlbnVtIEFjdGl2ZVN0YXRlIHsgSW5hY3RpdmUsIEFjdGl2ZSwgRnJvemVuIH07Ci0g
ICAgICAgIEFjdGl2ZVN0YXRlIGRldGVybWluZUFjdGl2ZVN0YXRlKFNNSUxUaW1lIGVsYXBzZWQp
IGNvbnN0OwotICAgICAgICBmbG9hdCBjYWxjdWxhdGVBbmltYXRpb25QZXJjZW50QW5kUmVwZWF0
KFNNSUxUaW1lIGVsYXBzZWQsIHVuc2lnbmVkJiByZXBlYXQpIGNvbnN0OwotICAgICAgICBTTUlM
VGltZSBjYWxjdWxhdGVOZXh0UHJvZ3Jlc3NUaW1lKFNNSUxUaW1lIGVsYXBzZWQpIGNvbnN0Owot
ICAgICAgICAKLSAgICAgICAgVmVjdG9yPENvbmRpdGlvbj4gbV9jb25kaXRpb25zOwotICAgICAg
ICBib29sIG1fY29uZGl0aW9uc0Nvbm5lY3RlZDsKLSAgICAgICAgYm9vbCBtX2hhc0VuZEV2ZW50
Q29uZGl0aW9uczsgICAgIAotICAgICAgICAKLSAgICAgICAgdHlwZWRlZiBIYXNoU2V0PFNWR1NN
SUxFbGVtZW50Kj4gVGltZURlcGVuZGVudFNldDsKLSAgICAgICAgVGltZURlcGVuZGVudFNldCBt
X3RpbWVEZXBlbmRlbnRzOwotICAgICAgICAKLSAgICAgICAgLy8gSW5zdGFuY2UgdGltZSBsaXN0
cwotICAgICAgICBWZWN0b3I8U01JTFRpbWU+IG1fYmVnaW5UaW1lczsKLSAgICAgICAgVmVjdG9y
PFNNSUxUaW1lPiBtX2VuZFRpbWVzOwotICAgICAgICAKLSAgICAgICAgLy8gVGhpcyBpcyB0aGUg
dXBjb21pbmcgb3IgY3VycmVudCBpbnRlcnZhbAotICAgICAgICBTTUlMVGltZSBtX2ludGVydmFs
QmVnaW47Ci0gICAgICAgIFNNSUxUaW1lIG1faW50ZXJ2YWxFbmQ7Ci0gICAgICAgIAotICAgICAg
ICBTTUlMVGltZSBtX3ByZXZpb3VzSW50ZXJ2YWxCZWdpbjsKLSAgICAgICAgCi0gICAgICAgIGJv
b2wgbV9pc1dhaXRpbmdGb3JGaXJzdEludGVydmFsOwotICAgIAotICAgICAgICBBY3RpdmVTdGF0
ZSBtX2FjdGl2ZVN0YXRlOwotICAgICAgICBmbG9hdCBtX2xhc3RQZXJjZW50OwotICAgICAgICB1
bnNpZ25lZCBtX2xhc3RSZXBlYXQ7Ci0gICAgICAgIAotICAgICAgICBTTUlMVGltZSBtX25leHRQ
cm9ncmVzc1RpbWU7Ci0gICAgICAgIAotICAgICAgICBSZWZQdHI8U01JTFRpbWVDb250YWluZXI+
IG1fdGltZUNvbnRhaW5lcjsKLSAgICAgICAgdW5zaWduZWQgbV9kb2N1bWVudE9yZGVySW5kZXg7
Ci0KLSAgICAgICAgbXV0YWJsZSBTTUlMVGltZSBtX2NhY2hlZER1cjsKLSAgICAgICAgbXV0YWJs
ZSBTTUlMVGltZSBtX2NhY2hlZFJlcGVhdER1cjsKLSAgICAgICAgbXV0YWJsZSBTTUlMVGltZSBt
X2NhY2hlZFJlcGVhdENvdW50OwotICAgICAgICBtdXRhYmxlIFNNSUxUaW1lIG1fY2FjaGVkTWlu
OwotICAgICAgICBtdXRhYmxlIFNNSUxUaW1lIG1fY2FjaGVkTWF4OwotICAgICAgICAKLSAgICAg
ICAgZnJpZW5kIGNsYXNzIENvbmRpdGlvbkV2ZW50TGlzdGVuZXI7CisgICAgdmlydHVhbCB2b2lk
IHN0YXJ0ZWRBY3RpdmVJbnRlcnZhbCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5p
bWF0aW9uKGZsb2F0IHBlcmNlbnQsIHVuc2lnbmVkIHJlcGVhdCwgU1ZHU01JTEVsZW1lbnQqIHJl
c3VsdEVsZW1lbnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kZWRBY3RpdmVJbnRlcnZhbCgp
ID0gMDsKKworICAgIGVudW0gQmVnaW5PckVuZCB7IEJlZ2luLCBFbmQgfTsKKyAgICBTTUlMVGlt
ZSBmaW5kSW5zdGFuY2VUaW1lKEJlZ2luT3JFbmQgYmVnaW5PckVuZCwgU01JTFRpbWUgbWluaW11
bVRpbWUsIGJvb2wgZXF1YWxzTWluaW11bU9LKSBjb25zdDsKKyAgICB2b2lkIHJlc29sdmVGaXJz
dEludGVydmFsKCk7CisgICAgdm9pZCByZXNvbHZlTmV4dEludGVydmFsKCk7CisgICAgdm9pZCBy
ZXNvbHZlSW50ZXJ2YWwoYm9vbCBmaXJzdCwgU01JTFRpbWUmIGJlZ2luUmVzdWx0LCBTTUlMVGlt
ZSYgZW5kUmVzdWx0KSBjb25zdDsKKyAgICBTTUlMVGltZSByZXNvbHZlQWN0aXZlRW5kKFNNSUxU
aW1lIHJlc29sdmVkQmVnaW4sIFNNSUxUaW1lIHJlc29sdmVkRW5kKSBjb25zdDsKKyAgICBTTUlM
VGltZSByZXBlYXRpbmdEdXJhdGlvbigpIGNvbnN0OworICAgIHZvaWQgY2hlY2tSZXN0YXJ0KFNN
SUxUaW1lIGVsYXBzZWQpOworICAgIHZvaWQgYmVnaW5MaXN0Q2hhbmdlZCgpOworICAgIHZvaWQg
ZW5kTGlzdENoYW5nZWQoKTsKKyAgICB2b2lkIHJlc2NoZWR1bGUoKTsKKworICAgIC8vIFRoaXMg
cmVwcmVzZW50cyBjb25kaXRpb25zIG9uIGVsZW1lbnRzIGJlZ2luIG9yIGVuZCBsaXN0IHRoYXQg
bmVlZCB0byBiZSByZXNvbHZlZCBvbiBydW50aW1lCisgICAgLy8gZm9yIGV4YW1wbGUgPGFuaW1h
dGUgYmVnaW49Im90aGVyRWxlbWVudC5iZWdpbiArIDhzOyBidXR0b24uY2xpY2siIC4uLiAvPgor
ICAgIHN0cnVjdCBDb25kaXRpb24geworICAgICAgICBlbnVtIFR5cGUgeyBFdmVudEJhc2UsIFN5
bmNiYXNlLCBBY2Nlc3NLZXkgfTsKKyAgICAgICAgQ29uZGl0aW9uKFR5cGUsIEJlZ2luT3JFbmQg
YmVnaW5PckVuZCwgY29uc3QgU3RyaW5nJiBiYXNlSUQsIGNvbnN0IFN0cmluZyYgbmFtZSwgU01J
TFRpbWUgb2Zmc2V0LCBpbnQgcmVwZWF0cyA9IC0xKTsKKyAgICAgICAgVHlwZSBtX3R5cGU7Cisg
ICAgICAgIEJlZ2luT3JFbmQgbV9iZWdpbk9yRW5kOworICAgICAgICBTdHJpbmcgbV9iYXNlSUQ7
CisgICAgICAgIFN0cmluZyBtX25hbWU7CisgICAgICAgIFNNSUxUaW1lIG1fb2Zmc2V0OworICAg
ICAgICBpbnQgbV9yZXBlYXRzOworICAgICAgICBSZWZQdHI8RWxlbWVudD4gbV9zeW5jYmFzZTsK
KyAgICAgICAgUmVmUHRyPENvbmRpdGlvbkV2ZW50TGlzdGVuZXI+IG1fZXZlbnRMaXN0ZW5lcjsK
ICAgICB9OworICAgIGJvb2wgcGFyc2VDb25kaXRpb24oY29uc3QgU3RyaW5nJiwgQmVnaW5PckVu
ZCBiZWdpbk9yRW5kKTsKKyAgICB2b2lkIHBhcnNlQmVnaW5PckVuZChjb25zdCBTdHJpbmcmLCBC
ZWdpbk9yRW5kIGJlZ2luT3JFbmQpOworICAgIEVsZW1lbnQqIGV2ZW50QmFzZUZvcihjb25zdCBD
b25kaXRpb24mKSBjb25zdDsKKworICAgIHZvaWQgY29ubmVjdENvbmRpdGlvbnMoKTsKKyAgICB2
b2lkIGRpc2Nvbm5lY3RDb25kaXRpb25zKCk7CisKKyAgICAvLyBFdmVudCBiYXNlIHRpbWluZwor
ICAgIHZvaWQgaGFuZGxlQ29uZGl0aW9uRXZlbnQoRXZlbnQqLCBDb25kaXRpb24qKTsKKworICAg
IC8vIFN5bmNiYXNlIHRpbWluZworICAgIGVudW0gTmV3T3JFeGlzdGluZ0ludGVydmFsIHsgTmV3
SW50ZXJ2YWwsIEV4aXN0aW5nSW50ZXJ2YWwgfTsgCisgICAgdm9pZCBub3RpZnlEZXBlbmRlbnRz
SW50ZXJ2YWxDaGFuZ2VkKE5ld09yRXhpc3RpbmdJbnRlcnZhbCk7CisgICAgdm9pZCBjcmVhdGVJ
bnN0YW5jZVRpbWVzRnJvbVN5bmNiYXNlKFNWR1NNSUxFbGVtZW50KiBzeW5jYmFzZSwgTmV3T3JF
eGlzdGluZ0ludGVydmFsKTsKKyAgICB2b2lkIGFkZFRpbWVEZXBlbmRlbnQoU1ZHU01JTEVsZW1l
bnQqKTsKKyAgICB2b2lkIHJlbW92ZVRpbWVEZXBlbmRlbnQoU1ZHU01JTEVsZW1lbnQqKTsKKwor
ICAgIGVudW0gQWN0aXZlU3RhdGUgeyBJbmFjdGl2ZSwgQWN0aXZlLCBGcm96ZW4gfTsKKyAgICBB
Y3RpdmVTdGF0ZSBkZXRlcm1pbmVBY3RpdmVTdGF0ZShTTUlMVGltZSBlbGFwc2VkKSBjb25zdDsK
KyAgICBmbG9hdCBjYWxjdWxhdGVBbmltYXRpb25QZXJjZW50QW5kUmVwZWF0KFNNSUxUaW1lIGVs
YXBzZWQsIHVuc2lnbmVkJiByZXBlYXQpIGNvbnN0OworICAgIFNNSUxUaW1lIGNhbGN1bGF0ZU5l
eHRQcm9ncmVzc1RpbWUoU01JTFRpbWUgZWxhcHNlZCkgY29uc3Q7CisKKyAgICBWZWN0b3I8Q29u
ZGl0aW9uPiBtX2NvbmRpdGlvbnM7CisgICAgYm9vbCBtX2NvbmRpdGlvbnNDb25uZWN0ZWQ7Cisg
ICAgYm9vbCBtX2hhc0VuZEV2ZW50Q29uZGl0aW9uczsgICAgIAorCisgICAgdHlwZWRlZiBIYXNo
U2V0PFNWR1NNSUxFbGVtZW50Kj4gVGltZURlcGVuZGVudFNldDsKKyAgICBUaW1lRGVwZW5kZW50
U2V0IG1fdGltZURlcGVuZGVudHM7CisKKyAgICAvLyBJbnN0YW5jZSB0aW1lIGxpc3RzCisgICAg
VmVjdG9yPFNNSUxUaW1lPiBtX2JlZ2luVGltZXM7CisgICAgVmVjdG9yPFNNSUxUaW1lPiBtX2Vu
ZFRpbWVzOworCisgICAgLy8gVGhpcyBpcyB0aGUgdXBjb21pbmcgb3IgY3VycmVudCBpbnRlcnZh
bAorICAgIFNNSUxUaW1lIG1faW50ZXJ2YWxCZWdpbjsKKyAgICBTTUlMVGltZSBtX2ludGVydmFs
RW5kOworCisgICAgU01JTFRpbWUgbV9wcmV2aW91c0ludGVydmFsQmVnaW47CisKKyAgICBib29s
IG1faXNXYWl0aW5nRm9yRmlyc3RJbnRlcnZhbDsKKworICAgIEFjdGl2ZVN0YXRlIG1fYWN0aXZl
U3RhdGU7CisgICAgZmxvYXQgbV9sYXN0UGVyY2VudDsKKyAgICB1bnNpZ25lZCBtX2xhc3RSZXBl
YXQ7CisKKyAgICBTTUlMVGltZSBtX25leHRQcm9ncmVzc1RpbWU7CisKKyAgICBSZWZQdHI8U01J
TFRpbWVDb250YWluZXI+IG1fdGltZUNvbnRhaW5lcjsKKyAgICB1bnNpZ25lZCBtX2RvY3VtZW50
T3JkZXJJbmRleDsKKworICAgIG11dGFibGUgU01JTFRpbWUgbV9jYWNoZWREdXI7CisgICAgbXV0
YWJsZSBTTUlMVGltZSBtX2NhY2hlZFJlcGVhdER1cjsKKyAgICBtdXRhYmxlIFNNSUxUaW1lIG1f
Y2FjaGVkUmVwZWF0Q291bnQ7CisgICAgbXV0YWJsZSBTTUlMVGltZSBtX2NhY2hlZE1pbjsKKyAg
ICBtdXRhYmxlIFNNSUxUaW1lIG1fY2FjaGVkTWF4OworCisgICAgZnJpZW5kIGNsYXNzIENvbmRp
dGlvbkV2ZW50TGlzdGVuZXI7Cit9OwogCiB9CiAKLSNlbmRpZgotI2VuZGlmCisjZW5kaWYgLy8g
RU5BQkxFKFNWRykKKyNlbmRpZiAvLyBTVkdTTUlMRWxlbWVudF9oCiAKSW5kZXg6IFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24gNzQ0OTIpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw0OCArMzMsNDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi0gICAgY2xhc3MgUGFnZTsKLSAgICBjbGFzcyBTVkdJbWFnZUNocm9tZUNs
aWVudDsKLSAgICAKLSAgICBjbGFzcyBTVkdJbWFnZSA6IHB1YmxpYyBJbWFnZSB7Ci0gICAgcHVi
bGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdJbWFnZT4gY3JlYXRlKEltYWdlT2Jz
ZXJ2ZXIqIG9ic2VydmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNWR0ltYWdlKG9ic2VydmVyKSk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIHZpcnR1YWwgflNWR0ltYWdlKCk7Ci0KLSAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5h
bWVFeHRlbnNpb24oKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGFpbmVy
U2l6ZShjb25zdCBJbnRTaXplJik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCB1c2VzQ29udGFpbmVy
U2l6ZSgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzUmVsYXRpdmVXaWR0aCgpIGNv
bnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdDsKLQot
ICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OwotICAgICAgICAKLSAgICAgICAg
dmlydHVhbCBib29sIGRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKLQotICAgICAg
ICAvLyBGSVhNRTogU1ZHSW1hZ2VzIGFyZSB1bmRlcnJlcG9ydGluZyBkZWNvZGVkIHNpemVzIGFu
ZCB3aWxsIGJlIHVuYWJsZQotICAgICAgICAvLyB0byBwcnVuZSBiZWNhdXNlIHRoZXNlIGZ1bmN0
aW9ucyBhcmUgbm90IGltcGxlbWVudGVkIHlldC4KLSAgICAgICAgdmlydHVhbCB2b2lkIGRlc3Ry
b3lEZWNvZGVkRGF0YShib29sKSB7IH0KLSAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVk
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdl
UHRyIGZyYW1lQXRJbmRleChzaXplX3QpIHsgcmV0dXJuIDA7IH0KLSAgICAgICAgCi0gICAgICAg
IFNWR0ltYWdlKEltYWdlT2JzZXJ2ZXIqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRyYXcoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBmcm9tUmVjdCwgY29uc3QgRmxvYXRSZWN0
JiB0b1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7
Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCk7Ci0gICAgICAgIAotICAgICAgICBPd25QdHI8U1ZHSW1hZ2VDaHJvbWVD
bGllbnQ+IG1fY2hyb21lQ2xpZW50OwotICAgICAgICBPd25QdHI8UGFnZT4gbV9wYWdlOwotICAg
ICAgICBSZWZQdHI8SW1hZ2U+IG1fZnJhbWVDYWNoZTsKLSAgICB9OworY2xhc3MgUGFnZTsKK2Ns
YXNzIFNWR0ltYWdlQ2hyb21lQ2xpZW50OworCitjbGFzcyBTVkdJbWFnZSA6IHB1YmxpYyBJbWFn
ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHSW1hZ2U+IGNyZWF0ZShJbWFn
ZU9ic2VydmVyKiBvYnNlcnZlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U1ZHSW1hZ2Uob2JzZXJ2ZXIpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB+U1ZH
SW1hZ2UoKTsKKworICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJik7Cisg
ICAgdmlydHVhbCBib29sIHVzZXNDb250YWluZXJTaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUmVsYXRp
dmVIZWlnaHQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisK
KyAgICB2aXJ0dWFsIGJvb2wgZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworCisg
ICAgLy8gRklYTUU6IFNWR0ltYWdlcyBhcmUgdW5kZXJyZXBvcnRpbmcgZGVjb2RlZCBzaXplcyBh
bmQgd2lsbCBiZSB1bmFibGUKKyAgICAvLyB0byBwcnVuZSBiZWNhdXNlIHRoZXNlIGZ1bmN0aW9u
cyBhcmUgbm90IGltcGxlbWVudGVkIHlldC4KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29k
ZWREYXRhKGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25z
dCB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGZyYW1lQXRJbmRl
eChzaXplX3QpIHsgcmV0dXJuIDA7IH0KKworICAgIFNWR0ltYWdlKEltYWdlT2JzZXJ2ZXIqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3Qm
IGZyb21SZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRvUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIg
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKworICAgIE93blB0cjxTVkdJbWFnZUNocm9t
ZUNsaWVudD4gbV9jaHJvbWVDbGllbnQ7CisgICAgT3duUHRyPFBhZ2U+IG1fcGFnZTsKKyAgICBS
ZWZQdHI8SW1hZ2U+IG1fZnJhbWVDYWNoZTsKK307CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZH
KQotCi0jZW5kaWYKKyNlbmRpZiAvLyBTVkdJbWFnZV9oCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAkocmV2aXNpb24gNzQ0OTIpCisr
KyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBN
YXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjAsOCArMjEsNiBAQAogI2lmbmRlZiBTVkdGaWx0ZXJCdWlsZGVyX2gKICNkZWZpbmUgU1ZH
RmlsdGVyQnVpbGRlcl9oCiAKLSNpbmNsdWRlICJjb25maWcuaCIKLQogI2lmIEVOQUJMRShTVkcp
ICYmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCkBAIC0zMiw0OSArMzEsNDkgQEAKICNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9taWNTdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLSAgICBj
bGFzcyBTVkdGaWx0ZXJCdWlsZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8U1ZHRmlsdGVyQnVpbGRl
cj4gewotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBIYXNoU2V0PEZpbHRlckVmZmVjdCo+
IEZpbHRlckVmZmVjdFNldDsKLQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdGaWx0ZXJC
dWlsZGVyPiBjcmVhdGUoRmlsdGVyKiBmaWx0ZXIpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdG
aWx0ZXJCdWlsZGVyKGZpbHRlcikpOyB9Ci0KLSAgICAgICAgdm9pZCBhZGQoY29uc3QgQXRvbWlj
U3RyaW5nJiBpZCwgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0KTsKLQotICAgICAgICBGaWx0
ZXJFZmZlY3QqIGdldEVmZmVjdEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3Q7Ci0g
ICAgICAgIEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEVm
ZmVjdC5nZXQoKTsgfQotCi0gICAgICAgIHZvaWQgYXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVu
Y2VzKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+KTsKLQotICAgICAgICBpbmxpbmUgRmlsdGVyRWZmZWN0
U2V0JiBnZXRFZmZlY3RSZWZlcmVuY2VzKEZpbHRlckVmZmVjdCogZWZmZWN0KQotICAgICAgICB7
Ci0gICAgICAgICAgICAvLyBPbmx5IGFsbG93ZWQgZm9yIGVmZmVjdHMgYmVsb25ncyB0byB0aGlz
IGJ1aWxkZXIuCi0gICAgICAgICAgICBBU1NFUlQobV9lZmZlY3RSZWZlcmVuY2VzLmNvbnRhaW5z
KGVmZmVjdCkpOwotICAgICAgICAgICAgcmV0dXJuIG1fZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVm
ZmVjdCktPnNlY29uZDsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY2xlYXJFZmZlY3RzKCk7
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBTVkdGaWx0ZXJCdWlsZGVyKEZpbHRlciopOwotCi0g
ICAgICAgIGlubGluZSB2b2lkIGFkZEJ1aWx0aW5FZmZlY3RzKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID46Oml0ZXJh
dG9yIGVuZCA9IG1fYnVpbHRpbkVmZmVjdHMuZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKEhhc2hN
YXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+OjppdGVyYXRvciBpdGVyYXRv
ciA9IG1fYnVpbHRpbkVmZmVjdHMuYmVnaW4oKTsgaXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJhdG9y
KQotICAgICAgICAgICAgICAgICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGl0ZXJhdG9yLT5zZWNv
bmQsIEZpbHRlckVmZmVjdFNldCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEhhc2hNYXA8QXRv
bWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+IG1fYnVpbHRpbkVmZmVjdHM7Ci0gICAg
ICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+IG1fbmFtZWRF
ZmZlY3RzOwotICAgICAgICAvLyBUaGUgdmFsdWUgaXMgYSBsaXN0LCB3aGljaCBjb250YWlucyB0
aG9zZSBmaWx0ZXIgZWZmZWN0cywKLSAgICAgICAgLy8gd2hpY2ggZGVwZW5kcyBvbiB0aGUga2V5
IGZpbHRlciBlZmZlY3QuCi0gICAgICAgIEhhc2hNYXA8UmVmUHRyPEZpbHRlckVmZmVjdD4sIEZp
bHRlckVmZmVjdFNldD4gbV9lZmZlY3RSZWZlcmVuY2VzOwogCi0gICAgICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IG1fbGFzdEVmZmVjdDsKLSAgICB9OworY2xhc3MgU1ZHRmlsdGVyQnVpbGRlciA6
IHB1YmxpYyBSZWZDb3VudGVkPFNWR0ZpbHRlckJ1aWxkZXI+IHsKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIEhhc2hTZXQ8RmlsdGVyRWZmZWN0Kj4gRmlsdGVyRWZmZWN0U2V0OworCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U1ZHRmlsdGVyQnVpbGRlcj4gY3JlYXRlKEZpbHRlciogZmlsdGVyKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgU1ZHRmlsdGVyQnVpbGRlcihmaWx0ZXIpKTsgfQorCisgICAgdm9p
ZCBhZGQoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0
KTsKKworICAgIEZpbHRlckVmZmVjdCogZ2V0RWZmZWN0QnlJZChjb25zdCBBdG9taWNTdHJpbmcm
IGlkKSBjb25zdDsKKyAgICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QoKSBjb25zdCB7IHJldHVy
biBtX2xhc3RFZmZlY3QuZ2V0KCk7IH0KKworICAgIHZvaWQgYXBwZW5kRWZmZWN0VG9FZmZlY3RS
ZWZlcmVuY2VzKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+KTsKKworICAgIGlubGluZSBGaWx0ZXJFZmZl
Y3RTZXQmIGdldEVmZmVjdFJlZmVyZW5jZXMoRmlsdGVyRWZmZWN0KiBlZmZlY3QpCisgICAgewor
ICAgICAgICAvLyBPbmx5IGFsbG93ZWQgZm9yIGVmZmVjdHMgYmVsb25ncyB0byB0aGlzIGJ1aWxk
ZXIuCisgICAgICAgIEFTU0VSVChtX2VmZmVjdFJlZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7
CisgICAgICAgIHJldHVybiBtX2VmZmVjdFJlZmVyZW5jZXMuZmluZChlZmZlY3QpLT5zZWNvbmQ7
CisgICAgfQorCisgICAgdm9pZCBjbGVhckVmZmVjdHMoKTsKKworcHJpdmF0ZToKKyAgICBTVkdG
aWx0ZXJCdWlsZGVyKEZpbHRlciopOworCisgICAgaW5saW5lIHZvaWQgYWRkQnVpbHRpbkVmZmVj
dHMoKQorICAgIHsKKyAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+ID46Oml0ZXJhdG9yIGVuZCA9IG1fYnVpbHRpbkVmZmVjdHMuZW5kKCk7CisgICAgICAg
IGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID46Oml0ZXJh
dG9yIGl0ZXJhdG9yID0gbV9idWlsdGluRWZmZWN0cy5iZWdpbigpOyBpdGVyYXRvciAhPSBlbmQ7
ICsraXRlcmF0b3IpCisgICAgICAgICAgICAgbV9lZmZlY3RSZWZlcmVuY2VzLmFkZChpdGVyYXRv
ci0+c2Vjb25kLCBGaWx0ZXJFZmZlY3RTZXQoKSk7CisgICAgfQorCisgICAgSGFzaE1hcDxBdG9t
aWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbV9idWlsdGluRWZmZWN0czsKKyAgICBI
YXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4gPiBtX25hbWVkRWZmZWN0
czsKKyAgICAvLyBUaGUgdmFsdWUgaXMgYSBsaXN0LCB3aGljaCBjb250YWlucyB0aG9zZSBmaWx0
ZXIgZWZmZWN0cywKKyAgICAvLyB3aGljaCBkZXBlbmRzIG9uIHRoZSBrZXkgZmlsdGVyIGVmZmVj
dC4KKyAgICBIYXNoTWFwPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBGaWx0ZXJFZmZlY3RTZXQ+IG1f
ZWZmZWN0UmVmZXJlbmNlczsKKworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1fbGFzdEVmZmVj
dDsKK307CiAgICAgCi19IC8vbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2VuZGlmCisj
ZW5kaWYgLy8gU1ZHRmlsdGVyQnVpbGRlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77309</attachid>
            <date>2010-12-22 23:36:26 -0800</date>
            <delta_ts>2010-12-27 08:42:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51490-20101223083622.patch</filename>
            <type>text/plain</type>
            <size>65794</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDQ5OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA4IEBACisyMDEwLTEyLTIyICBEaXJrIFNjaHVsemUgIDxrcml0QHdiZWtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xl
YW51cCBTVkcgY29kZSBhY2NvcmRpbmcgdG8gdGhlIHdlYmtpdCBzdHlsZSBydWxlcyAzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTQ5MAorCisgICAg
ICAgIExhc3QgcGF0Y2ggdG8gZml4IGluZGVudGlvbiBhbmQgb3RoZXIgc3R5bGUgaXNzdWVzIGFj
Y29yZGluZyB0byB0aGUgV2ViS2l0IHN0eWxlIHJ1bGVzIGluIHRoZSBTVkcgY29kZS4KKyAgICAg
ICAgSnVzdCB0d28gZmlsZXMgY2FuJ3QgYmUgZml4ZWQgZm9yIGNoZWNrLXdlYmtpdC1zdHlsZS4K
KyAgICAgICAgKiBTVkdBbGxJbk9uZS5jcHA6IGNoZWNrLXdlYmtpdC1zdHlsZSB3YW50cyBhIGNv
bmZpZy5oIGF0IHRoZSBiZWdpbm5pbmcKKyAgICAgICAgKiBTVkdJbWFnZS5jcHA6IE9uZSBoZWFk
ZXIgbmVlZHMgdG8gYmUgaW4gYSBub24tYWxwaGFiZXRpYyBvcmRlciwgc2VlIEZJWE1FLgorCisg
ICAgICAgIE5vIGNoYW5nZXMgb2YgZnVuY3Rpb25hbGl0eSwgc28gbm8gbmV3IHRlc3RzLiAKKwor
ICAgICAgICAqIHN2Zy9TVkdBbGxJbk9uZS5jcHA6CisgICAgICAgICogc3ZnL1NWR0xlbmd0aC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGg6OnNldFZhbHVlKToKKyAgICAgICAgKiBz
dmcvU1ZHUG9seWdvbkVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHUG9seWxpbmVFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6cGFyc2VQcmVzZXJ2ZUFzcGVjdFJhdGlv
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnRyYW5zZm9ybVJl
Y3QpOgorICAgICAgICAqIHN2Zy9TVkdTVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1NWR0VsZW1lbnQ6OnZpZXdwb3J0KToKKyAgICAgICAgKiBzdmcvU1ZHU2V0RWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdTdHlsYWJsZS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5
bGFibGU6On5TVkdTdHlsYWJsZSk6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVs
ZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6Omxv
Y2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxl
ZExvY2F0YWJsZUVsZW1lbnQ6OmlzU3R5bGVkTG9jYXRhYmxlKToKKyAgICAgICAgKiBzdmcvU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUpOgorICAgICAgICAqIHN2
Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N3aXRjaEVsZW1l
bnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIHN2Zy9TVkdUZXN0cy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgor
ICAgICAgICAqIHN2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dENvbnRlbnRFbGVtZW50Ojppc0tub3duQXR0cmlidXRlKToKKyAgICAgICAgKiBz
dmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHVGV4dFBhdGhFbGVt
ZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1RpdGxlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGl0bGVFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKToKKyAgICAgICAgKiBzdmcvU1ZH
VHJhbnNmb3JtRGlzdGFuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtRGlz
dGFuY2U6OlNWR1RyYW5zZm9ybURpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5z
Zm9ybURpc3RhbmNlOjpzY2FsZWREaXN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFu
c2Zvcm1EaXN0YW5jZTo6YWRkU1ZHVHJhbnNmb3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdU
cmFuc2Zvcm1EaXN0YW5jZTo6YWRkU1ZHVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RyYW5zZm9ybURpc3RhbmNlOjphZGRUb1NWR1RyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6aXNaZXJvKToKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNm
b3JtTGlzdC5jcHA6CisgICAgICAgICogc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdVUklSZWZlcmVuY2U6OmdldFRhcmdldCk6CisgICAgICAgICogc3ZnL1NW
R1ZLZXJuRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdWaWV3U3BlYy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyk6CisgICAgICAgICogc3ZnL1NW
R1pvb21BbmRQYW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1pvb21BbmRQYW46OlNWR1pvb21B
bmRQYW4pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHWm9vbUFuZFBhbjo6flNWR1pvb21BbmRQYW4p
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHWm9vbUFuZFBhbjo6em9vbUFuZFBhbik6CisgICAgICAg
ICogc3ZnL1NWR1pvb21FdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHWm9vbUV2ZW50Ojpj
cmVhdGUpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01JTFRpbWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6b3BlcmF0b3IqKToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmg6
CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZTo6U01JTFRpbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6U01JTFRpbWU6OnVucmVzb2x2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWU6Omlu
ZGVmaW5pdGUpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWU6Om9wZXJhdG9yPSk6CisgICAg
ICAgIChXZWJDb3JlOjpTTUlMVGltZTo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRp
bWU6OmlzRmluaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lOjppc0luZGVmaW5pdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWU6OmlzVW5yZXNvbHZlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yISk6IG5ldyBv
cGVyYXRvciBjaGVja3MgZm9yIDAgb3IgaW5maW5pdGUgdmFsdWVzLgorICAgICAgICAoV2ViQ29y
ZTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj4pOgorICAgICAgICAo
V2ViQ29yZTo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPj0pOgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PSk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlM
VGltZUNvbnRhaW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6c2V0RG9jdW1lbnRP
cmRlckluZGV4ZXNEaXJ0eSk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb25kaXRpb25FdmVudExpc3RlbmVyOjpvcGVyYXRv
cj09KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpyZXBlYXRpbmdEdXJhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6cmVzb2x2ZUludGVydmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpjYWxjdWxhdGVBbmltYXRpb25QZXJj
ZW50QW5kUmVwZWF0KToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6dGltZUNvbnRhaW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6aW50ZXJ2YWxCZWdpbik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6aW50ZXJ2YWxFbmQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHU01JTEVsZW1lbnQ6OnByZXZpb3VzSW50ZXJ2YWxCZWdpbik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdTTUlMRWxlbWVudDo6ZG9jdW1lbnRPcmRlckluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1NNSUxFbGVtZW50OjpzZXREb2N1bWVudE9yZGVySW5kZXgpOgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9TVkdJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpkZWNvZGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdJbWFnZTo6ZnJhbWVBdEluZGV4KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6bGFzdEVmZmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpnZXRFZmZlY3RSZWZlcmVuY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZEJ1aWx0aW5FZmZlY3Rz
KToKKwogMjAxMC0xMi0yMiAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEtlbm5ldGggUnVzc2VsbC4KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FsbElu
T25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbGxJbk9uZS5jcHAJKHJldmlz
aW9uIDc0NDkyKQorKysgV2ViQ29yZS9zdmcvU1ZHQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDcsOSArMTQ3LDkgQEAKICNpbmNsdWRlICJTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50
LmNwcCIKICNpbmNsdWRlICJTVkdUaXRsZUVsZW1lbnQuY3BwIgogI2luY2x1ZGUgIlNWR1RyYW5z
Zm9ybS5jcHAiCi0jaW5jbHVkZSAiU1ZHVHJhbnNmb3JtYWJsZS5jcHAiCiAjaW5jbHVkZSAiU1ZH
VHJhbnNmb3JtRGlzdGFuY2UuY3BwIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuY3BwIgor
I2luY2x1ZGUgIlNWR1RyYW5zZm9ybWFibGUuY3BwIgogI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5j
ZS5jcHAiCiAjaW5jbHVkZSAiU1ZHVXNlRWxlbWVudC5jcHAiCiAjaW5jbHVkZSAiU1ZHVktlcm5F
bGVtZW50LmNwcCIKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0xlbmd0aC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoLmNwcAkocmV2aXNpb24gNzQ0OTIpCisrKyBXZWJDb3Jl
L3N2Zy9TVkdMZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsMjIgKzIwMywxOSBAQCB2
b2lkIFNWR0xlbmd0aDo6c2V0VmFsdWUoZmxvYXQgdmFsdWUsIGNvCiAgICAgY2FzZSBMZW5ndGhU
eXBlTnVtYmVyOgogICAgICAgICBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9IHZhbHVlOwogICAg
ICAgICBicmVhazsKLSAgICBjYXNlIExlbmd0aFR5cGVQZXJjZW50YWdlOgotICAgIHsKKyAgICBj
YXNlIExlbmd0aFR5cGVQZXJjZW50YWdlOiB7CiAgICAgICAgIGZsb2F0IHJlc3VsdCA9IGNvbnZl
cnRWYWx1ZUZyb21Vc2VyVW5pdHNUb1BlcmNlbnRhZ2UodmFsdWUsIGNvbnRleHQsIGVjKTsKICAg
ICAgICAgaWYgKCFlYykKICAgICAgICAgICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gcmVz
dWx0OyAKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgTGVuZ3RoVHlwZUVNUzoKLSAg
ICB7CisgICAgY2FzZSBMZW5ndGhUeXBlRU1TOiB7CiAgICAgICAgIGZsb2F0IHJlc3VsdCA9IGNv
bnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHNUb0VNUyh2YWx1ZSwgY29udGV4dCwgZWMpOwogICAgICAg
ICBpZiAoIWVjKQogICAgICAgICAgICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSByZXN1bHQ7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIExlbmd0aFR5cGVFWFM6Ci0gICAgewor
ICAgIGNhc2UgTGVuZ3RoVHlwZUVYUzogewogICAgICAgICBmbG9hdCByZXN1bHQgPSBjb252ZXJ0
VmFsdWVGcm9tVXNlclVuaXRzVG9FWFModmFsdWUsIGNvbnRleHQsIGVjKTsKICAgICAgICAgaWYg
KCFlYykKICAgICAgICAgICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gcmVzdWx0OyAKSW5k
ZXg6IFdlYkNvcmUvc3ZnL1NWR1BvbHlnb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdmcvU1ZHUG9seWdvbkVsZW1lbnQuaAkocmV2aXNpb24gNzQ0OTIpCisrKyBXZWJDb3JlL3N2
Zy9TVkdQb2x5Z29uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNSArMjYsMTUgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgU1ZHUG9seWdvbkVsZW1lbnQgOiBw
dWJsaWMgU1ZHUG9seUVsZW1lbnQgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U1ZHUG9seWdvbkVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqKTsKK2NsYXNzIFNWR1BvbHlnb25FbGVtZW50IDogcHVibGljIFNWR1BvbHlFbGVtZW50
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdQb2x5Z29uRWxlbWVudD4gY3Jl
YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgU1ZHUG9seWdvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7
Citwcml2YXRlOgorICAgIFNWR1BvbHlnb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCB0b1BhdGhEYXRhKFBhdGgmKSBjb25z
dDsKLSAgICB9OworICAgIHZpcnR1YWwgdm9pZCB0b1BhdGhEYXRhKFBhdGgmKSBjb25zdDsKK307
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHUG9seWxp
bmVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUG9seWxpbmVFbGVtZW50
LmgJKHJldmlzaW9uIDc0NDkyKQorKysgV2ViQ29yZS9zdmcvU1ZHUG9seWxpbmVFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDE1ICsyNiwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLSAgICBjbGFzcyBTVkdQb2x5bGluZUVsZW1lbnQgOiBwdWJsaWMgU1ZHUG9seUVsZW1lbnQg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHUG9seWxpbmVFbGVt
ZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CitjbGFzcyBTVkdQ
b2x5bGluZUVsZW1lbnQgOiBwdWJsaWMgU1ZHUG9seUVsZW1lbnQgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNWR1BvbHlsaW5lRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCopOwogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgU1ZHUG9seWxpbmVF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworcHJpdmF0ZToKKyAgICBT
VkdQb2x5bGluZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEoUGF0aCYpIGNvbnN0OwotICAgIH07CisgICAg
dmlydHVhbCB2b2lkIHRvUGF0aERhdGEoUGF0aCYpIGNvbnN0OworfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAko
cmV2aXNpb24gNzQ0OTIpCisrKyBXZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjYsMjUgKzY2LDI1IEBAIFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW8gU1ZHUHJlc2VydmVBc3BlY3QKIAogICAgIC8vIEZJWE1FOiBSZXdyaXRlIHRoaXMgcGFyc2Vy
LCB3aXRob3V0IGdvdG9zIQogICAgIGlmICghc2tpcE9wdGlvbmFsU3BhY2VzKGN1cnJQYXJhbSwg
ZW5kKSkKLSAgICAgICAgZ290byBiYWlsX291dDsKKyAgICAgICAgZ290byBiYWlsT3V0OwogCiAg
ICAgaWYgKCpjdXJyUGFyYW0gPT0gJ2QnKSB7CiAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJy
UGFyYW0sIGVuZCwgImRlZmVyIikpCi0gICAgICAgICAgICBnb3RvIGJhaWxfb3V0OworICAgICAg
ICAgICAgZ290byBiYWlsT3V0OwogICAgICAgICAvLyBGSVhNRTogV2UganVzdCBpZ25vcmUgdGhl
ICJkZWZlciIgaGVyZS4KICAgICAgICAgaWYgKCFza2lwT3B0aW9uYWxTcGFjZXMoY3VyclBhcmFt
LCBlbmQpKQotICAgICAgICAgICAgZ290byBiYWlsX291dDsKKyAgICAgICAgICAgIGdvdG8gYmFp
bE91dDsKICAgICB9CiAKICAgICBpZiAoKmN1cnJQYXJhbSA9PSAnbicpIHsKICAgICAgICAgaWYg
KCFza2lwU3RyaW5nKGN1cnJQYXJhbSwgZW5kLCAibm9uZSIpKQotICAgICAgICAgICAgZ290byBi
YWlsX291dDsKKyAgICAgICAgICAgIGdvdG8gYmFpbE91dDsKICAgICAgICAgc2tpcE9wdGlvbmFs
U3BhY2VzKGN1cnJQYXJhbSwgZW5kKTsKICAgICB9IGVsc2UgaWYgKCpjdXJyUGFyYW0gPT0gJ3gn
KSB7CiAgICAgICAgIGlmICgoZW5kIC0gY3VyclBhcmFtKSA8IDgpCi0gICAgICAgICAgICBnb3Rv
IGJhaWxfb3V0OworICAgICAgICAgICAgZ290byBiYWlsT3V0OwogICAgICAgICBpZiAoY3VyclBh
cmFtWzFdICE9ICdNJyB8fCBjdXJyUGFyYW1bNF0gIT0gJ1knIHx8IGN1cnJQYXJhbVs1XSAhPSAn
TScpCi0gICAgICAgICAgICBnb3RvIGJhaWxfb3V0OworICAgICAgICAgICAgZ290byBiYWlsT3V0
OwogICAgICAgICBpZiAoY3VyclBhcmFtWzJdID09ICdpJykgewogICAgICAgICAgICAgaWYgKGN1
cnJQYXJhbVszXSA9PSAnbicpIHsKICAgICAgICAgICAgICAgICBpZiAoY3VyclBhcmFtWzZdID09
ICdpJykgewpAQCAtOTMsMTEgKzkzLDExIEBAIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8gU1ZHUHJl
c2VydmVBc3BlY3QKICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyclBhcmFtWzddID09
ICdkJykKICAgICAgICAgICAgICAgICAgICAgICAgIGFzcGVjdFJhdGlvLm1fYWxpZ24gPSBTVkdf
UFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1JRDsKICAgICAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsX291dDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGdvdG8gYmFpbE91dDsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJQYXJh
bVs2XSA9PSAnYScgJiYgY3VyclBhcmFtWzddID09ICd4JykKICAgICAgICAgICAgICAgICAgICAg
IGFzcGVjdFJhdGlvLm1fYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1BWDsK
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWxfb3V0
OworICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsT3V0OwogICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY3VyclBhcmFtWzNdID09ICdkJykgewogICAgICAgICAgICAgICAgIGlmIChjdXJyUGFy
YW1bNl0gPT0gJ2knKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyUGFyYW1bN10gPT0g
J24nKQpAQCAtMTA1LDEzICsxMDUsMTMgQEAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyBTVkdQcmVz
ZXJ2ZUFzcGVjdAogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyUGFyYW1bN10gPT0g
J2QnKQogICAgICAgICAgICAgICAgICAgICAgICAgYXNwZWN0UmF0aW8ubV9hbGlnbiA9IFNWR19Q
UkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlEOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWxfb3V0OworICAgICAgICAgICAgICAgICAg
ICAgICAgZ290byBiYWlsT3V0OwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyclBhcmFt
WzZdID09ICdhJyAmJiBjdXJyUGFyYW1bN10gPT0gJ3gnKQogICAgICAgICAgICAgICAgICAgICBh
c3BlY3RSYXRpby5tX2FsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNQVg7CiAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWxfb3V0Owor
ICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWxPdXQ7CiAgICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICBnb3RvIGJhaWxfb3V0OworICAgICAgICAgICAgICAgIGdvdG8gYmFpbE91
dDsKICAgICAgICAgfSBlbHNlIGlmIChjdXJyUGFyYW1bMl0gPT0gJ2EnICYmIGN1cnJQYXJhbVsz
XSA9PSAneCcpIHsKICAgICAgICAgICAgIGlmIChjdXJyUGFyYW1bNl0gPT0gJ2knKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs3XSA9PSAnbicpCkBAIC0xMTksMjYgKzExOSwyNiBA
QCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIFNWR1ByZXNlcnZlQXNwZWN0CiAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoY3VyclBhcmFtWzddID09ICdkJykKICAgICAgICAgICAgICAgICAgICAgYXNw
ZWN0UmF0aW8ubV9hbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlEOwogICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsX291dDsKKyAg
ICAgICAgICAgICAgICAgICAgZ290byBiYWlsT3V0OwogICAgICAgICAgICAgfSBlbHNlIGlmIChj
dXJyUGFyYW1bNl0gPT0gJ2EnICYmIGN1cnJQYXJhbVs3XSA9PSAneCcpCiAgICAgICAgICAgICAg
ICAgYXNwZWN0UmF0aW8ubV9hbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUFY
OwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGdvdG8gYmFpbF9vdXQ7CisgICAg
ICAgICAgICAgICAgZ290byBiYWlsT3V0OwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGdv
dG8gYmFpbF9vdXQ7CisgICAgICAgICAgICBnb3RvIGJhaWxPdXQ7CiAgICAgICAgIGN1cnJQYXJh
bSArPSA4OwogICAgICAgICBza2lwT3B0aW9uYWxTcGFjZXMoY3VyclBhcmFtLCBlbmQpOwogICAg
IH0gZWxzZQotICAgICAgICBnb3RvIGJhaWxfb3V0OworICAgICAgICBnb3RvIGJhaWxPdXQ7CiAK
ICAgICBpZiAoY3VyclBhcmFtIDwgZW5kKSB7CiAgICAgICAgIGlmICgqY3VyclBhcmFtID09ICdt
JykgewogICAgICAgICAgICAgaWYgKCFza2lwU3RyaW5nKGN1cnJQYXJhbSwgZW5kLCAibWVldCIp
KQotICAgICAgICAgICAgICAgIGdvdG8gYmFpbF9vdXQ7CisgICAgICAgICAgICAgICAgZ290byBi
YWlsT3V0OwogICAgICAgICAgICAgc2tpcE9wdGlvbmFsU3BhY2VzKGN1cnJQYXJhbSwgZW5kKTsK
ICAgICAgICAgfSBlbHNlIGlmICgqY3VyclBhcmFtID09ICdzJykgewogICAgICAgICAgICAgaWYg
KCFza2lwU3RyaW5nKGN1cnJQYXJhbSwgZW5kLCAic2xpY2UiKSkKLSAgICAgICAgICAgICAgICBn
b3RvIGJhaWxfb3V0OworICAgICAgICAgICAgICAgIGdvdG8gYmFpbE91dDsKICAgICAgICAgICAg
IHNraXBPcHRpb25hbFNwYWNlcyhjdXJyUGFyYW0sIGVuZCk7CiAgICAgICAgICAgICBpZiAoYXNw
ZWN0UmF0aW8ubV9hbGlnbiAhPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19OT05FKQogICAgICAg
ICAgICAgICAgIGFzcGVjdFJhdGlvLm1fbWVldE9yU2xpY2UgPSBTVkdfTUVFVE9SU0xJQ0VfU0xJ
Q0U7ICAgIApAQCAtMTQ2LDcgKzE0Niw3IEBAIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8gU1ZHUHJl
c2VydmVBc3BlY3QKICAgICB9CiAKICAgICBpZiAoZW5kICE9IGN1cnJQYXJhbSAmJiB2YWxpZGF0
ZSkgewotYmFpbF9vdXQ6CitiYWlsT3V0OgogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoZSB0
d28gdmFsdWVzIGJlIHNldCB0byBVTktOT1dOIGluc3RlYWQ/CiAgICAgICAgIGFzcGVjdFJhdGlv
Lm1fYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19OT05FOwogICAgICAgICBhc3BlY3RS
YXRpby5tX21lZXRPclNsaWNlID0gU1ZHX01FRVRPUlNMSUNFX01FRVQ7CkBAIC0xNjQsOCArMTY0
LDcgQEAgdm9pZCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjp0cmFuc2Zvcm1SZQogICAgIHN3aXRj
aCAobV9tZWV0T3JTbGljZSkgewogICAgIGNhc2UgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6U1ZH
X01FRVRPUlNMSUNFX1VOS05PV046CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpbzo6U1ZHX01FRVRPUlNMSUNFX01FRVQ6Ci0gICAgeworICAgIGNhc2UgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpbzo6U1ZHX01FRVRPUlNMSUNFX01FRVQ6IHsKICAgICAgICAgZmxv
YXQgd2lkdGhUb0hlaWdodE11bHRpcGxpZXIgPSBzcmNSZWN0LmhlaWdodCgpIC8gc3JjUmVjdC53
aWR0aCgpOwogICAgICAgICBpZiAob3JpZ0Rlc3RIZWlnaHQgPiBvcmlnRGVzdFdpZHRoICogd2lk
dGhUb0hlaWdodE11bHRpcGxpZXIpIHsKICAgICAgICAgICAgIGRlc3RSZWN0LnNldEhlaWdodChv
cmlnRGVzdFdpZHRoICogd2lkdGhUb0hlaWdodE11bHRpcGxpZXIpOwpAQCAtMjAzLDggKzIwMiw3
IEBAIHZvaWQgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6dHJhbnNmb3JtUmUKICAgICAgICAgfQog
ICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpT
VkdfTUVFVE9SU0xJQ0VfU0xJQ0U6Ci0gICAgeworICAgIGNhc2UgU1ZHUHJlc2VydmVBc3BlY3RS
YXRpbzo6U1ZHX01FRVRPUlNMSUNFX1NMSUNFOiB7CiAgICAgICAgIGZsb2F0IHdpZHRoVG9IZWln
aHRNdWx0aXBsaWVyID0gc3JjUmVjdC5oZWlnaHQoKSAvIHNyY1JlY3Qud2lkdGgoKTsKICAgICAg
ICAgLy8gaWYgdGhlIGRlc3RpbmF0aW9uIGhlaWdodCBpcyBsZXNzIHRoYW4gdGhlIGhlaWdodCBv
ZiB0aGUgaW1hZ2Ugd2UnbGwgYmUgZHJhd2luZwogICAgICAgICBpZiAob3JpZ0Rlc3RIZWlnaHQg
PCBvcmlnRGVzdFdpZHRoICogd2lkdGhUb0hlaWdodE11bHRpcGxpZXIpIHsKSW5kZXg6IFdlYkNv
cmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1NW
R0VsZW1lbnQuY3BwCShyZXZpc2lvbiA3NDQ5MikKKysrIFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMjAgKzEyOSwyMCBAQCB2b2lkIFNWR1NWR0Vs
ZW1lbnQ6OnNldENvbnRlbnRTdHlsZVR5cGUoCiAKIEZsb2F0UmVjdCBTVkdTVkdFbGVtZW50Ojp2
aWV3cG9ydCgpIGNvbnN0CiB7Ci0gICAgZG91YmxlIF94ID0gMC4wOwotICAgIGRvdWJsZSBfeSA9
IDAuMDsKKyAgICBkb3VibGUgbV94ID0gMC4wOworICAgIGRvdWJsZSBtX3kgPSAwLjA7CiAgICAg
aWYgKCFpc091dGVybW9zdFNWRygpKSB7Ci0gICAgICAgIF94ID0geCgpLnZhbHVlKHRoaXMpOwot
ICAgICAgICBfeSA9IHkoKS52YWx1ZSh0aGlzKTsKKyAgICAgICAgbV94ID0geCgpLnZhbHVlKHRo
aXMpOworICAgICAgICBtX3kgPSB5KCkudmFsdWUodGhpcyk7CiAgICAgfQogICAgIGZsb2F0IHcg
PSB3aWR0aCgpLnZhbHVlKHRoaXMpOwogICAgIGZsb2F0IGggPSBoZWlnaHQoKS52YWx1ZSh0aGlz
KTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdmlld0JveCA9IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0o
dywgaCk7CiAgICAgZG91YmxlIHdEb3VibGUgPSB3OwogICAgIGRvdWJsZSBoRG91YmxlID0gaDsK
LSAgICB2aWV3Qm94Lm1hcChfeCwgX3ksIF94LCBfeSk7CisgICAgdmlld0JveC5tYXAobV94LCBt
X3ksIG1feCwgbV95KTsKICAgICB2aWV3Qm94Lm1hcCh3LCBoLCB3RG91YmxlLCBoRG91YmxlKTsK
LSAgICByZXR1cm4gRmxvYXRSZWN0OjpuYXJyb3dQcmVjaXNpb24oX3gsIF95LCB3RG91YmxlLCBo
RG91YmxlKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0OjpuYXJyb3dQcmVjaXNpb24obV94LCBtX3ks
IHdEb3VibGUsIGhEb3VibGUpOwogfQogCiBpbnQgU1ZHU1ZHRWxlbWVudDo6cmVsYXRpdmVXaWR0
aFZhbHVlKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1NldEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTZXRFbGVtZW50LmgJKHJldmlzaW9uIDc0NDkyKQorKysg
V2ViQ29yZS9zdmcvU1ZHU2V0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYs
MTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgLy8gU1ZHQW5pbWF0ZUVsZW1lbnQg
aW1wbGVtZW50cyBzdXBlcnNldCBvZiB0aGUgZnVuY3Rpb25hbGl0eS4KLSAgICBjbGFzcyBTVkdT
ZXRFbGVtZW50IDogcHVibGljIFNWR0FuaW1hdGVFbGVtZW50IHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1NldEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFNWR1NldEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7Ci0gICAgfTsKKy8vIFNWR0FuaW1h
dGVFbGVtZW50IGltcGxlbWVudHMgc3VwZXJzZXQgb2YgdGhlIGZ1bmN0aW9uYWxpdHkuCitjbGFz
cyBTVkdTZXRFbGVtZW50IDogcHVibGljIFNWR0FuaW1hdGVFbGVtZW50IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdTZXRFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Kik7CisKK3ByaXZhdGU6CisgICAgU1ZHU2V0RWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IApJbmRleDogV2ViQ29yZS9zdmcvU1ZHU3R5bGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9TVkdTdHlsYWJsZS5oCShyZXZpc2lvbiA3NDQ5MikKKysrIFdlYkNvcmUvc3ZnL1NWR1N0
eWxhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE2ICsyNywxNiBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLSAgICBjbGFzcyBDU1NWYWx1ZTsKLSAgICBjbGFzcyBDU1NTdHlsZURlY2xh
cmF0aW9uOworY2xhc3MgQ1NTVmFsdWU7CitjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogCi0g
ICAgY2xhc3MgU1ZHU3R5bGFibGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+U1ZH
U3R5bGFibGUoKSB7IH0KLQotICAgICAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlKCkgPSAwOwotICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByZXNl
bnRhdGlvbkF0dHJpYnV0ZShjb25zdCBTdHJpbmcmKSA9IDA7Ci0gICAgfTsKK2NsYXNzIFNWR1N0
eWxhYmxlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5TVkdTdHlsYWJsZSgpIHsgfQorCisgICAg
dmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpID0gMDsKKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBTdHJpbmcm
KSA9IDA7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvc3Zn
L1NWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9T
VkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmgJKHJldmlzaW9uIDc0NDkyKQorKysgV2ViQ29yZS9z
dmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywyNiAr
MjcsMjYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgU1ZHRWxlbWVudDsK
K2NsYXNzIFNWR0VsZW1lbnQ7CiAKLSAgICBjbGFzcyBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50
IDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZpcnR1YWwgcHVibGljIFNWR0xvY2F0YWJsZSB7Ci0gICAgcHVibGljOgotICAg
ICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIG5lYXJlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdDsK
LSAgICAgICAgdmlydHVhbCBTVkdFbGVtZW50KiBmYXJ0aGVzdFZpZXdwb3J0RWxlbWVudCgpIGNv
bnN0OwotCi0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IGdldEJCb3goU3R5bGVVcGRhdGVTdHJh
dGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIEFmZmluZVRy
YW5zZm9ybSBnZXRDVE0oU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNv
bnN0OwotICAgICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRTY3JlZW5DVE0oU3R5bGVV
cGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OwotCi0gICAgICAgIHZpcnR1
YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0
YWJsZTo6Q1RNU2NvcGUgbW9kZSkgY29uc3QgeyByZXR1cm4gU1ZHTG9jYXRhYmxlOjpsb2NhbENv
b3JkaW5hdGVTcGFjZVRyYW5zZm9ybShtb2RlKTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAg
ICBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCopOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdmlydHVhbCBib29sIGlzU3R5bGVkTG9jYXRh
YmxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIH07CitjbGFzcyBTVkdTdHlsZWRMb2Nh
dGFibGVFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmlydHVhbCBwdWJsaWMgU1ZHTG9jYXRhYmxlIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIG5lYXJlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIGZhcnRoZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBB
bGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRD
VE0oU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OworICAgIHZp
cnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldFNjcmVlbkNUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0g
QWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBs
b2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNjb3BlIG1vZGUp
IGNvbnN0IHsgcmV0dXJuIFNWR0xvY2F0YWJsZTo6bG9jYWxDb29yZGluYXRlU3BhY2VUcmFuc2Zv
cm0obW9kZSk7IH0KKworcHJvdGVjdGVkOgorICAgIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisKK3ByaXZhdGU6CisgICAgdmlydHVh
bCBib29sIGlzU3R5bGVkTG9jYXRhYmxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA3NDQ5MikKKysrIFdlYkNvcmUvc3Zn
L1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgs
OCArODgsNyBAQCB2b2lkIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzeW5jCiAKIGJv
b2wgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgcmV0dXJuIFNWR1RyYW5zZm9ybWFibGU6
OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpIHx8Ci0gICAgICAgICAgIFNWR1N0eWxlZExvY2F0
YWJsZUVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpOworICAgIHJldHVybiBTVkdU
cmFuc2Zvcm1hYmxlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSB8fCBTVkdTdHlsZWRMb2Nh
dGFibGVFbGVtZW50Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKTsKIH0KIAogU1ZHRWxlbWVu
dCogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6Om5lYXJlc3RWaWV3cG9ydEVsZW1lbnQo
KSBjb25zdApJbmRleDogV2ViQ29yZS9zdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHAJKHJldmlzaW9uIDc0NDkyKQor
KysgV2ViQ29yZS9zdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDExICs0NiwxMSBAQCBib29sIFNWR1N3aXRjaEVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlCiAg
ICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZG8gd2hhdCB0aGUgY29tbWVudCBi
ZWxvdyBpbXBsaWVzIGl0IGRvZXMuCiAgICAgLy8gSXQgd2lsbCBjcmVhdGUgYSByZW5kZXJlciBm
b3IgYW55IHZhbGlkIFNWRyBlbGVtZW50IGNoaWxkcmVuLCBub3QganVzdCB0aGUgZmlyc3Qgb25l
LgogCi0gICAgZm9yIChOb2RlKiBuID0gZmlyc3RDaGlsZCgpOyBuICE9IDA7IG4gPSBuLT5uZXh0
U2libGluZygpKSB7Ci0gICAgICAgIGlmIChuLT5pc1NWR0VsZW1lbnQoKSkgewotICAgICAgICAg
ICAgU1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihuKTsKKyAg
ICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0
U2libGluZygpKSB7CisgICAgICAgIGlmIChub2RlLT5pc1NWR0VsZW1lbnQoKSkgeworICAgICAg
ICAgICAgU1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2Rl
KTsKICAgICAgICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmlzVmFsaWQoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gKG4gPT0gY2hpbGQpOyAvLyBPbmx5IGFsbG93IHRoaXMgY2hpbGQg
aWYgaXQncyB0aGUgZmlyc3QgdmFsaWQgY2hpbGQKKyAgICAgICAgICAgICAgICByZXR1cm4gKG5v
ZGUgPT0gY2hpbGQpOyAvLyBPbmx5IGFsbG93IHRoaXMgY2hpbGQgaWYgaXQncyB0aGUgZmlyc3Qg
dmFsaWQgY2hpbGQKICAgICAgICAgfQogICAgIH0KIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHVGVz
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1Rlc3RzLmNwcAkocmV2aXNpb24g
NzQ0OTIpCisrKyBXZWJDb3JlL3N2Zy9TVkdUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcy
LDEwICs3MiwxMiBAQCBib29sIFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyCiAg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cmVxdWlyZWRGZWF0dXJlc0F0dHIpIHsK
ICAgICAgICAgbV9yZXF1aXJlZEZlYXR1cmVzLnZhbHVlLnJlc2V0KGF0dHItPnZhbHVlKCkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6cmVxdWlyZWRFeHRlbnNpb25zQXR0cikgeworICAgIH0KKyAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpyZXF1aXJlZEV4dGVuc2lvbnNBdHRyKSB7CiAgICAgICAgIG1fcmVx
dWlyZWRFeHRlbnNpb25zLnZhbHVlLnJlc2V0KGF0dHItPnZhbHVlKCkpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3lzdGVt
TGFuZ3VhZ2VBdHRyKSB7CisgICAgfQorICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnN5c3RlbUxhbmd1YWdlQXR0cikgewogICAgICAgICBtX3N5c3RlbUxhbmd1YWdlLnZhbHVlLnJl
c2V0KGF0dHItPnZhbHVlKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBX
ZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDc0NDkyKQorKysgV2Vi
Q29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIy
LDExICsyMjIsMTEgQEAgdm9pZCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZQog
CiBib29sIFNWR1RleHRDb250ZW50RWxlbWVudDo6aXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICByZXR1cm4gKGF0dHJOYW1lLm1hdGNoZXMoU1ZH
TmFtZXM6Omxlbmd0aEFkanVzdEF0dHIpIHx8Ci0gICAgICAgICAgICBhdHRyTmFtZS5tYXRjaGVz
KFNWR05hbWVzOjp0ZXh0TGVuZ3RoQXR0cikgfHwKLSAgICAgICAgICAgIFNWR0xhbmdTcGFjZTo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkgfHwKLSAgICAgICAgICAgIFNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpIHx8Ci0gICAgICAgICAg
ICBTVkdTdHlsZWRFbGVtZW50Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSk7CisgICAgcmV0
dXJuIGF0dHJOYW1lLm1hdGNoZXMoU1ZHTmFtZXM6Omxlbmd0aEFkanVzdEF0dHIpCisgICAgICAg
ICAgICB8fCBhdHRyTmFtZS5tYXRjaGVzKFNWR05hbWVzOjp0ZXh0TGVuZ3RoQXR0cikKKyAgICAg
ICAgICAgIHx8IFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkKKyAgICAg
ICAgICAgIHx8IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUo
YXR0ck5hbWUpCisgICAgICAgICAgICB8fCBTVkdTdHlsZWRFbGVtZW50Ojppc0tub3duQXR0cmli
dXRlKGF0dHJOYW1lKTsKIH0KIAogYm9vbCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnNlbGZIYXNS
ZWxhdGl2ZUxlbmd0aHMoKSBjb25zdApJbmRleDogV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA3NDQ5MikKKysrIFdlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI0LDkgKzI0LDkgQEAKICNpbmNsdWRlICJTVkdUZXh0UGF0aEVs
ZW1lbnQuaCIKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0
UGF0aC5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJ
bmRleDogV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmgJKHJldmlzaW9uIDc0NDkyKQorKysgV2ViQ29y
ZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgZW51bSBTVkdUZXh0UGF0aE1ldGhvZFR5
cGUgeworZW51bSBTVkdUZXh0UGF0aE1ldGhvZFR5cGUgewogICAgIFNWR19URVhUUEFUSF9NRVRI
T0RUWVBFX1VOS05PV04gPSAwLAogICAgIFNWR19URVhUUEFUSF9NRVRIT0RUWVBFX0FMSUdOID0g
MSwKICAgICBTVkdfVEVYVFBBVEhfTUVUSE9EVFlQRV9TVFJFVENIID0gMgpJbmRleDogV2ViQ29y
ZS9zdmcvU1ZHVGl0bGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHVGl0
bGVFbGVtZW50LmgJKHJldmlzaW9uIDc0NDkyKQorKysgV2ViQ29yZS9zdmcvU1ZHVGl0bGVFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDIwICsyNywyMCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLSAgICBjbGFzcyBTVkdUaXRsZUVsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkRWxl
bWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1RpdGxlRWxlbWVudD4g
Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwotCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgU1ZHVGl0bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJl
Zm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVyQ2hhbmdlID0gMCwgaW50IGNoaWxkQ291bnREZWx0
YSA9IDApOworY2xhc3MgU1ZHVGl0bGVFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnQs
CisgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdUaXRsZUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKworcHJpdmF0ZToKKyAgICBTVkdUaXRsZUVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVu
dCgpOworICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJz
ZXIgPSBmYWxzZSwgTm9kZSogYmVmb3JlQ2hhbmdlID0gMCwgTm9kZSogYWZ0ZXJDaGFuZ2UgPSAw
LCBpbnQgY2hpbGRDb3VudERlbHRhID0gMCk7CiAKLSAgICAgICAgdmlydHVhbCBib29sIHJlbmRl
cmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKSB7IHJldHVybiBmYWxzZTsgfQotICAgIH07CisgICAg
dmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKSB7IHJldHVybiBmYWxz
ZTsgfQorfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHVHJh
bnNmb3JtRGlzdGFuY2UuY3BwCShyZXZpc2lvbiA3NDQ5MikKKysrIFdlYkNvcmUvc3ZnL1NWR1Ry
YW5zZm9ybURpc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMjIgKzYxLDE5IEBAIFNW
R1RyYW5zZm9ybURpc3RhbmNlOjpTVkdUcmFuc2Zvcm1EaXN0YW4KICAgICBjYXNlIFNWR1RyYW5z
Zm9ybTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg6CiAgICAgICAgIC8vIEZJWE1FOiBuZWVkIHRvIGJl
IGFibGUgdG8gc3VidHJhY3QgdG8gbWF0cmljZXMKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
U1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURToKLSAgICB7CisgICAgY2FzZSBTVkdU
cmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fUk9UQVRFOiB7CiAgICAgICAgIEZsb2F0U2l6ZSBjZW50
ZXJEaXN0YW5jZSA9IHRvU1ZHVHJhbnNmb3JtLnJvdGF0aW9uQ2VudGVyKCkgLSBmcm9tU1ZHVHJh
bnNmb3JtLnJvdGF0aW9uQ2VudGVyKCk7CiAgICAgICAgIG1fYW5nbGUgPSB0b1NWR1RyYW5zZm9y
bS5hbmdsZSgpIC0gZnJvbVNWR1RyYW5zZm9ybS5hbmdsZSgpOwogICAgICAgICBtX2N4ID0gY2Vu
dGVyRGlzdGFuY2Uud2lkdGgoKTsKICAgICAgICAgbV9jeSA9IGNlbnRlckRpc3RhbmNlLmhlaWdo
dCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdf
VFJBTlNGT1JNX1RSQU5TTEFURToKLSAgICB7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19U
UkFOU0ZPUk1fVFJBTlNMQVRFOiB7CiAgICAgICAgIEZsb2F0U2l6ZSB0cmFuc2xhdGlvbkRpc3Rh
bmNlID0gdG9TVkdUcmFuc2Zvcm0udHJhbnNsYXRlKCkgLSBmcm9tU1ZHVHJhbnNmb3JtLnRyYW5z
bGF0ZSgpOwogICAgICAgICBtX3RyYW5zZm9ybS50cmFuc2xhdGUodHJhbnNsYXRpb25EaXN0YW5j
ZS53aWR0aCgpLCB0cmFuc2xhdGlvbkRpc3RhbmNlLmhlaWdodCgpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TQ0FMRToKLSAg
ICB7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6IHsKICAgICAg
ICAgZmxvYXQgc2NhbGVYID0gdG9TVkdUcmFuc2Zvcm0uc2NhbGUoKS53aWR0aCgpIC0gZnJvbVNW
R1RyYW5zZm9ybS5zY2FsZSgpLndpZHRoKCk7ICAgICAgICAKICAgICAgICAgZmxvYXQgc2NhbGVZ
ID0gdG9TVkdUcmFuc2Zvcm0uc2NhbGUoKS5oZWlnaHQoKSAtIGZyb21TVkdUcmFuc2Zvcm0uc2Nh
bGUoKS5oZWlnaHQoKTsKICAgICAgICAgbV90cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKHNjYWxl
WCwgc2NhbGVZKTsKQEAgLTk5LDggKzk2LDcgQEAgU1ZHVHJhbnNmb3JtRGlzdGFuY2UgU1ZHVHJh
bnNmb3JtRGlzdGFuYwogICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NDQUxF
OgogICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX01BVFJJWDoKICAgICAgICAg
cmV0dXJuIFNWR1RyYW5zZm9ybURpc3RhbmNlKG1fdHlwZSwgbV9hbmdsZSAqIHNjYWxlRmFjdG9y
LCBtX2N4ICogc2NhbGVGYWN0b3IsIG1fY3kgKiBzY2FsZUZhY3RvciwgQWZmaW5lVHJhbnNmb3Jt
KG1fdHJhbnNmb3JtKS5zY2FsZShzY2FsZUZhY3RvcikpOwotICAgIGNhc2UgU1ZHVHJhbnNmb3Jt
OjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURToKLSAgICB7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06
OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOiB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBuZXdU
cmFuc2Zvcm0obV90cmFuc2Zvcm0pOwogICAgICAgICBuZXdUcmFuc2Zvcm0uc2V0RShtX3RyYW5z
Zm9ybS5lKCkgKiBzY2FsZUZhY3Rvcik7CiAgICAgICAgIG5ld1RyYW5zZm9ybS5zZXRGKG1fdHJh
bnNmb3JtLmYoKSAqIHNjYWxlRmFjdG9yKTsKQEAgLTEyNCw4ICsxMjAsNyBAQCBTVkdUcmFuc2Zv
cm0gU1ZHVHJhbnNmb3JtRGlzdGFuY2U6OmFkZFNWCiAgICAgc3dpdGNoIChmaXJzdC50eXBlKCkp
IHsKICAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOgogICAgICAg
ICByZXR1cm4gU1ZHVHJhbnNmb3JtKCk7Ci0gICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFO
U0ZPUk1fUk9UQVRFOgotICAgIHsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9S
TV9ST1RBVEU6IHsKICAgICAgICAgdHJhbnNmb3JtLnNldFJvdGF0ZShmaXJzdC5hbmdsZSgpICsg
c2Vjb25kLmFuZ2xlKCksIGZpcnN0LnJvdGF0aW9uQ2VudGVyKCkueCgpICsgc2Vjb25kLnJvdGF0
aW9uQ2VudGVyKCkueCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0LnJvdGF0
aW9uQ2VudGVyKCkueSgpICsgc2Vjb25kLnJvdGF0aW9uQ2VudGVyKCkueSgpKTsKICAgICAgICAg
cmV0dXJuIHRyYW5zZm9ybTsKQEAgLTEzMywxNSArMTI4LDEzIEBAIFNWR1RyYW5zZm9ybSBTVkdU
cmFuc2Zvcm1EaXN0YW5jZTo6YWRkU1YKICAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5T
Rk9STV9NQVRSSVg6CiAgICAgICAgIHRyYW5zZm9ybS5zZXRNYXRyaXgoZmlyc3QubWF0cml4KCkg
KiBzZWNvbmQubWF0cml4KCkpOwogICAgICAgICByZXR1cm4gdHJhbnNmb3JtOwotICAgIGNhc2Ug
U1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURToKLSAgICB7CisgICAgY2FzZSBT
VkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOiB7CiAgICAgICAgIGZsb2F0IGR4
ID0gZmlyc3QudHJhbnNsYXRlKCkueCgpICsgc2Vjb25kLnRyYW5zbGF0ZSgpLngoKTsKICAgICAg
ICAgZmxvYXQgZHkgPSBmaXJzdC50cmFuc2xhdGUoKS55KCkgKyBzZWNvbmQudHJhbnNsYXRlKCku
eSgpOwogICAgICAgICB0cmFuc2Zvcm0uc2V0VHJhbnNsYXRlKGR4LCBkeSk7CiAgICAgICAgIHJl
dHVybiB0cmFuc2Zvcm07CiAgICAgfQotICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNG
T1JNX1NDQUxFOgotICAgIHsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9T
Q0FMRTogewogICAgICAgICBGbG9hdFNpemUgc2NhbGUgPSBmaXJzdC5zY2FsZSgpICsgc2Vjb25k
LnNjYWxlKCk7CiAgICAgICAgIHRyYW5zZm9ybS5zZXRTY2FsZShzY2FsZS53aWR0aCgpLCBzY2Fs
ZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CkBAIC0xNzcsMTUgKzE3MCwx
MyBAQCB2b2lkIFNWR1RyYW5zZm9ybURpc3RhbmNlOjphZGRTVkdUcmFuc2ZvCiAgICAgICAgIG1f
Y3ggKz0gYWJzb2x1dGVWYWx1ZSA/IGZhYnNmKHRyYW5zZm9ybS5yb3RhdGlvbkNlbnRlcigpLngo
KSkgOiB0cmFuc2Zvcm0ucm90YXRpb25DZW50ZXIoKS54KCk7CiAgICAgICAgIG1fY3kgKz0gYWJz
b2x1dGVWYWx1ZSA/IGZhYnNmKHRyYW5zZm9ybS5yb3RhdGlvbkNlbnRlcigpLnkoKSkgOiB0cmFu
c2Zvcm0ucm90YXRpb25DZW50ZXIoKS55KCk7CiAgICAgICAgIC8vIGZhbGwgdGhyb3VnaAotICAg
IGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURToKLSAgICB7CisgICAg
Y2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOiB7CiAgICAgICAgIGZs
b2F0IGR4ID0gYWJzb2x1dGVWYWx1ZSA/IGZhYnNmKHRyYW5zZm9ybS50cmFuc2xhdGUoKS54KCkp
IDogdHJhbnNmb3JtLnRyYW5zbGF0ZSgpLngoKTsKICAgICAgICAgZmxvYXQgZHkgPSBhYnNvbHV0
ZVZhbHVlID8gZmFic2YodHJhbnNmb3JtLnRyYW5zbGF0ZSgpLnkoKSkgOiB0cmFuc2Zvcm0udHJh
bnNsYXRlKCkueSgpOwogICAgICAgICBtX3RyYW5zZm9ybS50cmFuc2xhdGUoZHgsIGR5KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9S
TV9TQ0FMRToKLSAgICB7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NB
TEU6IHsKICAgICAgICAgZmxvYXQgc2NhbGVYID0gYWJzb2x1dGVWYWx1ZSA/IGZhYnNmKHRyYW5z
Zm9ybS5zY2FsZSgpLndpZHRoKCkpIDogdHJhbnNmb3JtLnNjYWxlKCkud2lkdGgoKTsKICAgICAg
ICAgZmxvYXQgc2NhbGVZID0gYWJzb2x1dGVWYWx1ZSA/IGZhYnNmKHRyYW5zZm9ybS5zY2FsZSgp
LmhlaWdodCgpKSA6IHRyYW5zZm9ybS5zY2FsZSgpLmhlaWdodCgpOwogICAgICAgICBtX3RyYW5z
Zm9ybS5zY2FsZU5vblVuaWZvcm0oc2NhbGVYLCBzY2FsZVkpOwpAQCAtMjEyLDIyICsyMDMsMTkg
QEAgU1ZHVHJhbnNmb3JtIFNWR1RyYW5zZm9ybURpc3RhbmNlOjphZGRUbwogICAgICAgICByZXR1
cm4gU1ZHVHJhbnNmb3JtKCk7CiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1f
TUFUUklYOgogICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtKHRyYW5zZm9ybS5tYXRyaXgoKSAq
IG1fdHJhbnNmb3JtKTsKLSAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9UUkFO
U0xBVEU6Ci0gICAgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5T
TEFURTogewogICAgICAgICBGbG9hdFBvaW50IHRyYW5zbGF0aW9uID0gdHJhbnNmb3JtLnRyYW5z
bGF0ZSgpOwogICAgICAgICB0cmFuc2xhdGlvbiArPSBGbG9hdFNpemU6Om5hcnJvd1ByZWNpc2lv
bihtX3RyYW5zZm9ybS5lKCksIG1fdHJhbnNmb3JtLmYoKSk7CiAgICAgICAgIG5ld1RyYW5zZm9y
bS5zZXRUcmFuc2xhdGUodHJhbnNsYXRpb24ueCgpLCB0cmFuc2xhdGlvbi55KCkpOwogICAgICAg
ICByZXR1cm4gbmV3VHJhbnNmb3JtOwogICAgIH0KLSAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZH
X1RSQU5TRk9STV9TQ0FMRToKLSAgICB7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFO
U0ZPUk1fU0NBTEU6IHsKICAgICAgICAgRmxvYXRTaXplIHNjYWxlID0gdHJhbnNmb3JtLnNjYWxl
KCk7CiAgICAgICAgIHNjYWxlICs9IEZsb2F0U2l6ZTo6bmFycm93UHJlY2lzaW9uKG1fdHJhbnNm
b3JtLmEoKSwgbV90cmFuc2Zvcm0uZCgpKTsKICAgICAgICAgbmV3VHJhbnNmb3JtLnNldFNjYWxl
KHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKICAgICAgICAgcmV0dXJuIG5ld1RyYW5z
Zm9ybTsKICAgICB9Ci0gICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fUk9UQVRF
OgotICAgIHsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9ST1RBVEU6IHsK
ICAgICAgICAgLy8gRklYTUU6IEknbSBub3QgY2VydGFpbiB0aGUgdHJhbnNsYXRpb24gaXMgY2Fs
Y3VsYXRlZCBjb3JyZWN0bHkgaGVyZQogICAgICAgICBGbG9hdFBvaW50IGNlbnRlciA9IHRyYW5z
Zm9ybS5yb3RhdGlvbkNlbnRlcigpOwogICAgICAgICBuZXdUcmFuc2Zvcm0uc2V0Um90YXRlKHRy
YW5zZm9ybS5hbmdsZSgpICsgbV9hbmdsZSwKQEAgLTI0OSw3ICsyMzcsNyBAQCBTVkdUcmFuc2Zv
cm0gU1ZHVHJhbnNmb3JtRGlzdGFuY2U6OmFkZFRvCiAKIGJvb2wgU1ZHVHJhbnNmb3JtRGlzdGFu
Y2U6OmlzWmVybygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChtX3RyYW5zZm9ybSA9PSBBZmZpbmVU
cmFuc2Zvcm0oKSAmJiBtX2FuZ2xlID09IDApOworICAgIHJldHVybiBtX3RyYW5zZm9ybSA9PSBB
ZmZpbmVUcmFuc2Zvcm0oKSAmJiAhbV9hbmdsZTsKIH0KIAogZmxvYXQgU1ZHVHJhbnNmb3JtRGlz
dGFuY2U6OmRpc3RhbmNlKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuY3BwCShy
ZXZpc2lvbiA3NDQ5MikKKysrIFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw5IEBACiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgi
CiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CisKICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5h
dGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdVUklS
ZWZlcmVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1VSSVJlZmVyZW5jZS5j
cHAJKHJldmlzaW9uIDc0NDkyKQorKysgV2ViQ29yZS9zdmcvU1ZHVVJJUmVmZXJlbmNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDgsMTEgKzQ4LDE0IEBAIFN0cmluZyBTVkdVUklSZWZlcmVuY2U6
OmdldFRhcmdldChjb25zdCAKICAgICAgICAgc2l6ZV90IHN0YXJ0ID0gdXJsLmZpbmQoJyMnKSAr
IDE7CiAgICAgICAgIHNpemVfdCBlbmQgPSB1cmwucmV2ZXJzZUZpbmQoJyknKTsKICAgICAgICAg
cmV0dXJuIHVybC5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLSAgICB9IGVsc2UgaWYg
KHVybC5maW5kKCcjJykgIT0gbm90Rm91bmQpIHsgLy8gZm9ybWF0IGlzICN0YXJnZXQKKyAgICB9
CisgICAgaWYgKHVybC5maW5kKCcjJykgIT0gbm90Rm91bmQpIHsgLy8gZm9ybWF0IGlzICN0YXJn
ZXQKICAgICAgICAgc2l6ZV90IHN0YXJ0ID0gdXJsLmZpbmQoJyMnKSArIDE7CiAgICAgICAgIHJl
dHVybiB1cmwuc3Vic3RyaW5nKHN0YXJ0LCB1cmwubGVuZ3RoKCkgLSBzdGFydCk7Ci0gICAgfSBl
bHNlIC8vIFRoZSB1cmwgZG9lc24ndCBoYXZlIGFueSB0YXJnZXQuCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICB9CisKKyAgICAvLyBUaGUgdXJsIGRvZXNuJ3QgaGF2ZSBhbnkgdGFyZ2V0
LgorICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHVktl
cm5FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmgJ
KHJldmlzaW9uIDc0NDkyKQorKysgV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDkgKzI0LDkgQEAKICNpbmNsdWRlICJTVkdGb250RWxlbWVudC5oIgog
I2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1l
bnQuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiAjaW5jbHVkZSA8bGltaXRzPgorI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2Vi
Q29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1Zp
ZXdTcGVjLmNwcAkocmV2aXNpb24gNzQ0OTIpCisrKyBXZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgYm9vbCBTVkdWaWV3U3BlYzo6cGFy
c2VWaWV3U3BlYyhjb25zdCBTdAogICAgIGlmICghc2tpcFN0cmluZyhjdXJyVmlld1NwZWMsIGVu
ZCwgc3ZnVmlld1NwZWMsIFdURl9BUlJBWV9MRU5HVEgoc3ZnVmlld1NwZWMpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3
U3BlYyAhPSAnKCcgKQorICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1Nw
ZWMgIT0gJygnKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY3VyclZpZXdTcGVjKys7CiAK
SW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9TVkdab29tQW5kUGFuLmgJKHJldmlzaW9uIDc0NDkyKQorKysgV2ViQ29yZS9zdmcvU1ZH
Wm9vbUFuZFBhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywzMSArMjcsMzEgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgQXR0cmlidXRlOwotICAgIGNsYXNzIFF1YWxpZmll
ZE5hbWU7CitjbGFzcyBBdHRyaWJ1dGU7CitjbGFzcyBRdWFsaWZpZWROYW1lOwogCi0gICAgY2xh
c3MgU1ZHWm9vbUFuZFBhbiB7Ci0gICAgcHVibGljOgotICAgICAgICBlbnVtIFNWR1pvb21BbmRQ
YW5UeXBlIHsKLSAgICAgICAgICAgIFNWR19aT09NQU5EUEFOX1VOS05PV04gPSAwLAotICAgICAg
ICAgICAgU1ZHX1pPT01BTkRQQU5fRElTQUJMRSA9IDEsCi0gICAgICAgICAgICBTVkdfWk9PTUFO
RFBBTl9NQUdOSUZZID0gMgotICAgICAgICB9OwotCi0gICAgICAgIFNWR1pvb21BbmRQYW4oKSA6
IG1fem9vbUFuZFBhbihTVkdfWk9PTUFORFBBTl9NQUdOSUZZKSB7IH0KLSAgICAgICAgdmlydHVh
bCB+U1ZHWm9vbUFuZFBhbigpIHsgfQotCi0gICAgICAgIHVuc2lnbmVkIHNob3J0IHpvb21BbmRQ
YW4oKSBjb25zdCB7IHJldHVybiBtX3pvb21BbmRQYW47IH0KLSAgICAgICAgdmlydHVhbCB2b2lk
IHNldFpvb21BbmRQYW4odW5zaWduZWQgc2hvcnQgem9vbUFuZFBhbik7CitjbGFzcyBTVkdab29t
QW5kUGFuIHsKK3B1YmxpYzoKKyAgICBlbnVtIFNWR1pvb21BbmRQYW5UeXBlIHsKKyAgICAgICAg
U1ZHX1pPT01BTkRQQU5fVU5LTk9XTiA9IDAsCisgICAgICAgIFNWR19aT09NQU5EUEFOX0RJU0FC
TEUgPSAxLAorICAgICAgICBTVkdfWk9PTUFORFBBTl9NQUdOSUZZID0gMgorICAgIH07CiAKLSAg
ICAgICAgYm9vbCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKLSAgICAgICAgYm9v
bCBpc0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKyAgICBTVkdab29tQW5k
UGFuKCkgOiBtX3pvb21BbmRQYW4oU1ZHX1pPT01BTkRQQU5fTUFHTklGWSkgeyB9CisgICAgdmly
dHVhbCB+U1ZHWm9vbUFuZFBhbigpIHsgfQogCi0gICAgICAgIGJvb2wgcGFyc2Vab29tQW5kUGFu
KGNvbnN0IFVDaGFyKiYgc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQpOworICAgIHVuc2lnbmVkIHNo
b3J0IHpvb21BbmRQYW4oKSBjb25zdCB7IHJldHVybiBtX3pvb21BbmRQYW47IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Wm9vbUFuZFBhbih1bnNpZ25lZCBzaG9ydCB6b29tQW5kUGFuKTsKIAotICAg
IHByaXZhdGU6Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IG1fem9vbUFuZFBhbjsKLSAgICB9Owor
ICAgIGJvb2wgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CisgICAgYm9vbCBpc0tu
b3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKworICAgIGJvb2wgcGFyc2Vab29t
QW5kUGFuKGNvbnN0IFVDaGFyKiYgc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQpOworCitwcml2YXRl
OgorICAgIHVuc2lnbmVkIHNob3J0IG1fem9vbUFuZFBhbjsKK307CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHWm9vbUV2ZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvU1ZHWm9vbUV2ZW50LmgJKHJldmlzaW9uIDc0NDkyKQorKysgV2ViQ29y
ZS9zdmcvU1ZHWm9vbUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDM2ICsyOCwzNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBTVkdab29tRXZlbnQgOiBwdWJsaWMg
VUlFdmVudCB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdab29t
RXZlbnQ+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdab29tRXZlbnQpOyB9Citj
bGFzcyBTVkdab29tRXZlbnQgOiBwdWJsaWMgVUlFdmVudCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U1ZHWm9vbUV2ZW50PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
U1ZHWm9vbUV2ZW50KTsgfQogCi0gICAgICAgIC8vICdTVkdab29tRXZlbnQnIGZ1bmN0aW9ucwot
ICAgICAgICBGbG9hdFJlY3Qgem9vbVJlY3RTY3JlZW4oKSBjb25zdDsKKyAgICAvLyAnU1ZHWm9v
bUV2ZW50JyBmdW5jdGlvbnMKKyAgICBGbG9hdFJlY3Qgem9vbVJlY3RTY3JlZW4oKSBjb25zdDsK
IAotICAgICAgICBmbG9hdCBwcmV2aW91c1NjYWxlKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0
UHJldmlvdXNTY2FsZShmbG9hdCk7CisgICAgZmxvYXQgcHJldmlvdXNTY2FsZSgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0UHJldmlvdXNTY2FsZShmbG9hdCk7CiAKLSAgICAgICAgRmxvYXRQb2ludCBw
cmV2aW91c1RyYW5zbGF0ZSgpIGNvbnN0OworICAgIEZsb2F0UG9pbnQgcHJldmlvdXNUcmFuc2xh
dGUoKSBjb25zdDsKIAotICAgICAgICBmbG9hdCBuZXdTY2FsZSgpIGNvbnN0OwotICAgICAgICB2
b2lkIHNldE5ld1NjYWxlKGZsb2F0KTsKKyAgICBmbG9hdCBuZXdTY2FsZSgpIGNvbnN0OworICAg
IHZvaWQgc2V0TmV3U2NhbGUoZmxvYXQpOwogCi0gICAgICAgIEZsb2F0UG9pbnQgbmV3VHJhbnNs
YXRlKCkgY29uc3Q7CisgICAgRmxvYXRQb2ludCBuZXdUcmFuc2xhdGUoKSBjb25zdDsKIAotICAg
IHByaXZhdGU6Ci0gICAgICAgIFNWR1pvb21FdmVudCgpOworcHJpdmF0ZToKKyAgICBTVkdab29t
RXZlbnQoKTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdab29tRXZlbnQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdab29tRXZlbnQoKSBjb25zdDsKIAotICAgICAgICBmbG9h
dCBtX25ld1NjYWxlOwotICAgICAgICBmbG9hdCBtX3ByZXZpb3VzU2NhbGU7Ci0gICAgICAgIAot
ICAgICAgICBGbG9hdFJlY3QgbV96b29tUmVjdFNjcmVlbjsKLSAgICAgICAgCi0gICAgICAgIEZs
b2F0UG9pbnQgbV9uZXdUcmFuc2xhdGU7Ci0gICAgICAgIEZsb2F0UG9pbnQgbV9wcmV2aW91c1Ry
YW5zbGF0ZTsKLSAgICB9OworICAgIGZsb2F0IG1fbmV3U2NhbGU7CisgICAgZmxvYXQgbV9wcmV2
aW91c1NjYWxlOworCisgICAgRmxvYXRSZWN0IG1fem9vbVJlY3RTY3JlZW47CisKKyAgICBGbG9h
dFBvaW50IG1fbmV3VHJhbnNsYXRlOworICAgIEZsb2F0UG9pbnQgbV9wcmV2aW91c1RyYW5zbGF0
ZTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9zdmcvYW5p
bWF0aW9uL1NNSUxUaW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9hbmltYXRpb24v
U01JTFRpbWUuY3BwCShyZXZpc2lvbiA3NDQ5MikKKysrIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9T
TUlMVGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgU01JTFRpbWUgV2Vi
Q29yZTo6b3BlcmF0b3IqKGNvbnN0IFNNSUxUaQogewogICAgIGlmIChhLmlzVW5yZXNvbHZlZCgp
IHx8IGIuaXNVbnJlc29sdmVkKCkpCiAgICAgICAgIHJldHVybiBTTUlMVGltZTo6dW5yZXNvbHZl
ZCgpOwotICAgIGlmIChhLnZhbHVlKCkgPT0gMCB8fCBiLnZhbHVlKCkgPT0gMCkKKyAgICBpZiAo
IWEudmFsdWUoKSB8fCAhYi52YWx1ZSgpKQogICAgICAgICByZXR1cm4gU01JTFRpbWUoMCk7CiAg
ICAgaWYgKGEuaXNJbmRlZmluaXRlKCkgfHwgYi5pc0luZGVmaW5pdGUoKSkKICAgICAgICAgcmV0
dXJuIFNNSUxUaW1lOjppbmRlZmluaXRlKCk7CkluZGV4OiBXZWJDb3JlL3N2Zy9hbmltYXRpb24v
U01JTFRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWUu
aAkocmV2aXNpb24gNzQ0OTIpCisrKyBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNDEgKzMyLDQzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotICAgIGNsYXNzIFNNSUxUaW1lIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFNNSUxUaW1lKCkg
OiBtX3RpbWUoMCkgeyB9Ci0gICAgICAgIFNNSUxUaW1lKGRvdWJsZSB0aW1lKSA6IG1fdGltZSh0
aW1lKSB7IH0KLSAgICAgICAgU01JTFRpbWUoY29uc3QgU01JTFRpbWUmIG8pIDogbV90aW1lKG8u
bV90aW1lKSB7IH0KLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBTTUlMVGltZSB1bnJlc29sdmVk
KCkgeyByZXR1cm4gdW5yZXNvbHZlZFZhbHVlOyB9Ci0gICAgICAgIHN0YXRpYyBTTUlMVGltZSBp
bmRlZmluaXRlKCkgeyByZXR1cm4gaW5kZWZpbml0ZVZhbHVlOyB9Ci0gICAgICAgIAotICAgICAg
ICBTTUlMVGltZSYgb3BlcmF0b3I9KGNvbnN0IFNNSUxUaW1lJiBvKSB7IG1fdGltZSA9IG8ubV90
aW1lOyByZXR1cm4gKnRoaXM7IH0KLSAgICAgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1
cm4gbV90aW1lOyB9Ci0gICAgICAgIAotICAgICAgICBib29sIGlzRmluaXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV90aW1lIDwgaW5kZWZpbml0ZVZhbHVlOyB9Ci0gICAgICAgIGJvb2wgaXNJbmRlZmlu
aXRlKCkgY29uc3QgeyByZXR1cm4gbV90aW1lID09IGluZGVmaW5pdGVWYWx1ZTsgfQotICAgICAg
ICBib29sIGlzVW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZSA9PSB1bnJlc29sdmVk
VmFsdWU7IH0KLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIGNvbnN0IGRv
dWJsZSB1bnJlc29sdmVkVmFsdWU7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgaW5kZWZp
bml0ZVZhbHVlOwotCi0gICAgICAgIGRvdWJsZSBtX3RpbWU7Ci0gICAgfTsKLQotICAgIGlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU01JTFRpbWUmIGEsIGNvbnN0IFNNSUxUaW1lJiBiKSB7
IHJldHVybiBhLmlzRmluaXRlKCkgJiYgYS52YWx1ZSgpID09IGIudmFsdWUoKTsgfQotICAgIGlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU01JTFRpbWUmIGEsIGNvbnN0IFNNSUxUaW1lJiBi
KSB7IHJldHVybiAhb3BlcmF0b3I9PShhLCBiKTsgfQotICAgIGlubGluZSBib29sIG9wZXJhdG9y
Pihjb25zdCBTTUlMVGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJuIGEudmFsdWUo
KSA+IGIudmFsdWUoKTsgfQotICAgIGlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBTTUlMVGlt
ZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJuIGEudmFsdWUoKSA8IGIudmFsdWUoKTsg
fQotICAgIGlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgU01JTFRpbWUmIGEsIGNvbnN0IFNN
SUxUaW1lJiBiKSB7IHJldHVybiBhLnZhbHVlKCkgPiBiLnZhbHVlKCkgfHwgb3BlcmF0b3I9PShh
LCBiKTsgfQotICAgIGlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgU01JTFRpbWUmIGEsIGNv
bnN0IFNNSUxUaW1lJiBiKSB7IHJldHVybiBhLnZhbHVlKCkgPCBiLnZhbHVlKCkgfHwgb3BlcmF0
b3I9PShhLCBiKTsgfQotCi0gICAgU01JTFRpbWUgb3BlcmF0b3IrKGNvbnN0IFNNSUxUaW1lJiwg
Y29uc3QgU01JTFRpbWUmKTsKLSAgICBTTUlMVGltZSBvcGVyYXRvci0oY29uc3QgU01JTFRpbWUm
LCBjb25zdCBTTUlMVGltZSYpOwotICAgIC8vIFNvIG11bHRpcGx5aW5nIHRpbWVzIGRvZXMgbm90
IG1ha2UgdG9vIG11Y2ggc2Vuc2UgYnV0IFNNSUwgZGVmaW5lcyBpdCBmb3IgZHVyYXRpb24gKiBy
ZXBlYXRDb3VudAotICAgIFNNSUxUaW1lIG9wZXJhdG9yKihjb25zdCBTTUlMVGltZSYsIGNvbnN0
IFNNSUxUaW1lJik7CitjbGFzcyBTTUlMVGltZSB7CitwdWJsaWM6CisgICAgU01JTFRpbWUoKSA6
IG1fdGltZSgwKSB7IH0KKyAgICBTTUlMVGltZShkb3VibGUgdGltZSkgOiBtX3RpbWUodGltZSkg
eyB9CisgICAgU01JTFRpbWUoY29uc3QgU01JTFRpbWUmIG8pIDogbV90aW1lKG8ubV90aW1lKSB7
IH0KKyAgICAKKyAgICBzdGF0aWMgU01JTFRpbWUgdW5yZXNvbHZlZCgpIHsgcmV0dXJuIHVucmVz
b2x2ZWRWYWx1ZTsgfQorICAgIHN0YXRpYyBTTUlMVGltZSBpbmRlZmluaXRlKCkgeyByZXR1cm4g
aW5kZWZpbml0ZVZhbHVlOyB9CisgICAgCisgICAgU01JTFRpbWUmIG9wZXJhdG9yPShjb25zdCBT
TUlMVGltZSYgbykgeyBtX3RpbWUgPSBvLm1fdGltZTsgcmV0dXJuICp0aGlzOyB9CisgICAgZG91
YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV90aW1lOyB9CisgICAgCisgICAgYm9vbCBpc0Zp
bml0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZSA8IGluZGVmaW5pdGVWYWx1ZTsgfQorICAgIGJv
b2wgaXNJbmRlZmluaXRlKCkgY29uc3QgeyByZXR1cm4gbV90aW1lID09IGluZGVmaW5pdGVWYWx1
ZTsgfQorICAgIGJvb2wgaXNVbnJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gbV90aW1lID09IHVu
cmVzb2x2ZWRWYWx1ZTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgZG91Ymxl
IHVucmVzb2x2ZWRWYWx1ZTsKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIGluZGVmaW5pdGVWYWx1
ZTsKKworICAgIGRvdWJsZSBtX3RpbWU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFNNSUxUaW1lJiBhLCBjb25zdCBTTUlMVGltZSYgYikgeyByZXR1cm4gYS5pc0Zpbml0ZSgp
ICYmIGEudmFsdWUoKSA9PSBiLnZhbHVlKCk7IH0KK2lubGluZSBib29sIG9wZXJhdG9yIShjb25z
dCBTTUlMVGltZSYgYSkgeyByZXR1cm4gIWEuaXNGaW5pdGUoKSB8fCAhYS52YWx1ZSgpOyB9Citp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNNSUxUaW1lJiBhLCBjb25zdCBTTUlMVGltZSYg
YikgeyByZXR1cm4gIW9wZXJhdG9yPT0oYSwgYik7IH0KK2lubGluZSBib29sIG9wZXJhdG9yPihj
b25zdCBTTUlMVGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJuIGEudmFsdWUoKSA+
IGIudmFsdWUoKTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFNNSUxUaW1lJiBhLCBj
b25zdCBTTUlMVGltZSYgYikgeyByZXR1cm4gYS52YWx1ZSgpIDwgYi52YWx1ZSgpOyB9Citpbmxp
bmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFNNSUxUaW1lJiBhLCBjb25zdCBTTUlMVGltZSYgYikg
eyByZXR1cm4gYS52YWx1ZSgpID4gYi52YWx1ZSgpIHx8IG9wZXJhdG9yPT0oYSwgYik7IH0KK2lu
bGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgU01JTFRpbWUmIGEsIGNvbnN0IFNNSUxUaW1lJiBi
KSB7IHJldHVybiBhLnZhbHVlKCkgPCBiLnZhbHVlKCkgfHwgb3BlcmF0b3I9PShhLCBiKTsgfQor
CitTTUlMVGltZSBvcGVyYXRvcisoY29uc3QgU01JTFRpbWUmLCBjb25zdCBTTUlMVGltZSYpOwor
U01JTFRpbWUgb3BlcmF0b3ItKGNvbnN0IFNNSUxUaW1lJiwgY29uc3QgU01JTFRpbWUmKTsKKy8v
IFNvIG11bHRpcGx5aW5nIHRpbWVzIGRvZXMgbm90IG1ha2UgdG9vIG11Y2ggc2Vuc2UgYnV0IFNN
SUwgZGVmaW5lcyBpdCBmb3IgZHVyYXRpb24gKiByZXBlYXRDb3VudAorU01JTFRpbWUgb3BlcmF0
b3IqKGNvbnN0IFNNSUxUaW1lJiwgY29uc3QgU01JTFRpbWUmKTsKKwogfQogCi0jZW5kaWYKLSNl
bmRpZgorI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYgLy8gU01JTFRpbWVfaApJbmRleDog
V2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmgJKHJldmlzaW9uIDc0NDky
KQorKysgV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDYzICszOSw2MyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi0g
ICAgY2xhc3MgU1ZHRWxlbWVudDsKLSAgICBjbGFzcyBTVkdTTUlMRWxlbWVudDsKLSAgICBjbGFz
cyBTVkdTVkdFbGVtZW50OwotCi0gICAgY2xhc3MgU01JTFRpbWVDb250YWluZXIgOiBwdWJsaWMg
UmVmQ291bnRlZDxTTUlMVGltZUNvbnRhaW5lcj4gIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNNSUxUaW1lQ29udGFpbmVyPiBjcmVhdGUoU1ZHU1ZHRWxlbWVudCog
b3duZXIpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTTUlMVGltZUNvbnRhaW5lcihvd25lcikpOyB9
IAotICAgIAotICAgICAgICB2b2lkIHNjaGVkdWxlKFNWR1NNSUxFbGVtZW50Kik7Ci0gICAgICAg
IHZvaWQgdW5zY2hlZHVsZShTVkdTTUlMRWxlbWVudCopOwotICAgICAgICAKLSAgICAgICAgU01J
TFRpbWUgZWxhcHNlZCgpIGNvbnN0OwotCi0gICAgICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsK
LSAgICAgICAgYm9vbCBpc1BhdXNlZCgpIGNvbnN0OwotICAgICAgICAKLSAgICAgICAgdm9pZCBi
ZWdpbigpOwotICAgICAgICB2b2lkIHBhdXNlKCk7Ci0gICAgICAgIHZvaWQgcmVzdW1lKCk7Ci0g
ICAgICAgIAotICAgICAgICB2b2lkIHNldERvY3VtZW50T3JkZXJJbmRleGVzRGlydHkoKSB7IG1f
ZG9jdW1lbnRPcmRlckluZGV4ZXNEaXJ0eSA9IHRydWU7IH0KLQotICAgICAgICAvLyBNb3ZlIHRv
IGEgc3BlY2lmaWMgdGltZS4gT25seSB1c2VkIGZvciBEUlQgdGVzdGluZyBwdXJwb3Nlcy4KLSAg
ICAgICAgdm9pZCBzYW1wbGVBbmltYXRpb25BdFRpbWUoY29uc3QgU3RyaW5nJiBlbGVtZW50SWQs
IGRvdWJsZSBzZWNvbmRzKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFNNSUxUaW1lQ29udGFp
bmVyKFNWR1NWR0VsZW1lbnQqIG93bmVyKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgdGltZXJG
aXJlZChUaW1lcjxTTUlMVGltZUNvbnRhaW5lcj4qKTsKLSAgICAgICAgdm9pZCBzdGFydFRpbWVy
KFNNSUxUaW1lIGZpcmVUaW1lLCBTTUlMVGltZSBtaW5pbXVtRGVsYXkgPSAwKTsKLSAgICAgICAg
dm9pZCB1cGRhdGVBbmltYXRpb25zKFNNSUxUaW1lIGVsYXBzZWQpOwotICAgICAgICAKLSAgICAg
ICAgdm9pZCB1cGRhdGVEb2N1bWVudE9yZGVySW5kZXhlcygpOwotICAgICAgICB2b2lkIHNvcnRC
eVByaW9yaXR5KFZlY3RvcjxTVkdTTUlMRWxlbWVudCo+JiBzbWlsRWxlbWVudHMsIFNNSUxUaW1l
IGVsYXBzZWQpOwotICAgICAgICAKLSAgICAgICAgdHlwZWRlZiBwYWlyPFNWR0VsZW1lbnQqLCBT
dHJpbmc+IEVsZW1lbnRBdHRyaWJ1dGVQYWlyOwotICAgICAgICBTdHJpbmcgYmFzZVZhbHVlRm9y
KEVsZW1lbnRBdHRyaWJ1dGVQYWlyKTsKLSAgICAgICAgCi0gICAgICAgIGRvdWJsZSBtX2JlZ2lu
VGltZTsKLSAgICAgICAgZG91YmxlIG1fcGF1c2VUaW1lOwotICAgICAgICBkb3VibGUgbV9hY2N1
bXVsYXRlZFBhdXNlVGltZTsKLSAgICAgICAgZG91YmxlIG1fbmV4dE1hbnVhbFNhbXBsZVRpbWU7
Ci0gICAgICAgIFN0cmluZyBtX25leHRTYW1wbGluZ1RhcmdldDsKLQotICAgICAgICBib29sIG1f
ZG9jdW1lbnRPcmRlckluZGV4ZXNEaXJ0eTsKLSAgICAgICAgCi0gICAgICAgIFRpbWVyPFNNSUxU
aW1lQ29udGFpbmVyPiBtX3RpbWVyOwotCi0gICAgICAgIHR5cGVkZWYgSGFzaFNldDxTVkdTTUlM
RWxlbWVudCo+IFRpbWluZ0VsZW1lbnRTZXQ7Ci0gICAgICAgIFRpbWluZ0VsZW1lbnRTZXQgbV9z
Y2hlZHVsZWRBbmltYXRpb25zOwotICAgICAgICAKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEVs
ZW1lbnRBdHRyaWJ1dGVQYWlyLCBTdHJpbmc+IEJhc2VWYWx1ZU1hcDsKLSAgICAgICAgQmFzZVZh
bHVlTWFwIG1fc2F2ZWRCYXNlVmFsdWVzOworY2xhc3MgU1ZHRWxlbWVudDsKK2NsYXNzIFNWR1NN
SUxFbGVtZW50OworY2xhc3MgU1ZHU1ZHRWxlbWVudDsKKworY2xhc3MgU01JTFRpbWVDb250YWlu
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTTUlMVGltZUNvbnRhaW5lcj4gIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTTUlMVGltZUNvbnRhaW5lcj4gY3JlYXRlKFNWR1NWR0VsZW1l
bnQqIG93bmVyKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU01JTFRpbWVDb250YWluZXIob3duZXIp
KTsgfSAKIAotICAgICAgICBTVkdTVkdFbGVtZW50KiBtX293bmVyU1ZHRWxlbWVudDsKLSAgICB9
OworICAgIHZvaWQgc2NoZWR1bGUoU1ZHU01JTEVsZW1lbnQqKTsKKyAgICB2b2lkIHVuc2NoZWR1
bGUoU1ZHU01JTEVsZW1lbnQqKTsKKyAgICAKKyAgICBTTUlMVGltZSBlbGFwc2VkKCkgY29uc3Q7
CisKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisgICAgYm9vbCBpc1BhdXNlZCgpIGNvbnN0
OworICAgIAorICAgIHZvaWQgYmVnaW4oKTsKKyAgICB2b2lkIHBhdXNlKCk7CisgICAgdm9pZCBy
ZXN1bWUoKTsKKyAgICAKKyAgICB2b2lkIHNldERvY3VtZW50T3JkZXJJbmRleGVzRGlydHkoKSB7
IG1fZG9jdW1lbnRPcmRlckluZGV4ZXNEaXJ0eSA9IHRydWU7IH0KKworICAgIC8vIE1vdmUgdG8g
YSBzcGVjaWZpYyB0aW1lLiBPbmx5IHVzZWQgZm9yIERSVCB0ZXN0aW5nIHB1cnBvc2VzLgorICAg
IHZvaWQgc2FtcGxlQW5pbWF0aW9uQXRUaW1lKGNvbnN0IFN0cmluZyYgZWxlbWVudElkLCBkb3Vi
bGUgc2Vjb25kcyk7CisKK3ByaXZhdGU6CisgICAgU01JTFRpbWVDb250YWluZXIoU1ZHU1ZHRWxl
bWVudCogb3duZXIpOworICAgIAorICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxTTUlMVGltZUNv
bnRhaW5lcj4qKTsKKyAgICB2b2lkIHN0YXJ0VGltZXIoU01JTFRpbWUgZmlyZVRpbWUsIFNNSUxU
aW1lIG1pbmltdW1EZWxheSA9IDApOworICAgIHZvaWQgdXBkYXRlQW5pbWF0aW9ucyhTTUlMVGlt
ZSBlbGFwc2VkKTsKKyAgICAKKyAgICB2b2lkIHVwZGF0ZURvY3VtZW50T3JkZXJJbmRleGVzKCk7
CisgICAgdm9pZCBzb3J0QnlQcmlvcml0eShWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiYgc21pbEVs
ZW1lbnRzLCBTTUlMVGltZSBlbGFwc2VkKTsKKyAgICAKKyAgICB0eXBlZGVmIHBhaXI8U1ZHRWxl
bWVudCosIFN0cmluZz4gRWxlbWVudEF0dHJpYnV0ZVBhaXI7CisgICAgU3RyaW5nIGJhc2VWYWx1
ZUZvcihFbGVtZW50QXR0cmlidXRlUGFpcik7CisgICAgCisgICAgZG91YmxlIG1fYmVnaW5UaW1l
OworICAgIGRvdWJsZSBtX3BhdXNlVGltZTsKKyAgICBkb3VibGUgbV9hY2N1bXVsYXRlZFBhdXNl
VGltZTsKKyAgICBkb3VibGUgbV9uZXh0TWFudWFsU2FtcGxlVGltZTsKKyAgICBTdHJpbmcgbV9u
ZXh0U2FtcGxpbmdUYXJnZXQ7CisKKyAgICBib29sIG1fZG9jdW1lbnRPcmRlckluZGV4ZXNEaXJ0
eTsKKyAgICAKKyAgICBUaW1lcjxTTUlMVGltZUNvbnRhaW5lcj4gbV90aW1lcjsKKworICAgIHR5
cGVkZWYgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+IFRpbWluZ0VsZW1lbnRTZXQ7CisgICAgVGlt
aW5nRWxlbWVudFNldCBtX3NjaGVkdWxlZEFuaW1hdGlvbnM7CisgICAgCisgICAgdHlwZWRlZiBI
YXNoTWFwPEVsZW1lbnRBdHRyaWJ1dGVQYWlyLCBTdHJpbmc+IEJhc2VWYWx1ZU1hcDsKKyAgICBC
YXNlVmFsdWVNYXAgbV9zYXZlZEJhc2VWYWx1ZXM7CisKKyAgICBTVkdTVkdFbGVtZW50KiBtX293
bmVyU1ZHRWxlbWVudDsKK307CiB9CiAKLSNlbmRpZgotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxF
KFNWRykKKyNlbmRpZiAvLyBTTUlMVGltZUNvbnRhaW5lcl9oCkluZGV4OiBXZWJDb3JlL3N2Zy9h
bmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2Fu
aW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHJldmlzaW9uIDc0NDkyKQorKysgV2ViQ29yZS9z
dmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsOCAr
OTIsNyBAQCBwcml2YXRlOgogYm9vbCBDb25kaXRpb25FdmVudExpc3RlbmVyOjpvcGVyYXRvcj09
KGNvbnN0IEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyKQogewogICAgIGlmIChjb25zdCBDb25kaXRp
b25FdmVudExpc3RlbmVyKiBjb25kaXRpb25FdmVudExpc3RlbmVyID0gQ29uZGl0aW9uRXZlbnRM
aXN0ZW5lcjo6Y2FzdCgmbGlzdGVuZXIpKQotICAgICAgICByZXR1cm4gbV9hbmltYXRpb24gPT0g
Y29uZGl0aW9uRXZlbnRMaXN0ZW5lci0+bV9hbmltYXRpb24gJiYKLSAgICAgICAgICAgICAgIG1f
Y29uZGl0aW9uID09IGNvbmRpdGlvbkV2ZW50TGlzdGVuZXItPm1fY29uZGl0aW9uOworICAgICAg
ICByZXR1cm4gbV9hbmltYXRpb24gPT0gY29uZGl0aW9uRXZlbnRMaXN0ZW5lci0+bV9hbmltYXRp
b24gJiYgbV9jb25kaXRpb24gPT0gY29uZGl0aW9uRXZlbnRMaXN0ZW5lci0+bV9jb25kaXRpb247
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC02MTQsNyArNjEzLDcgQEAgU01JTFRpbWUgU1ZH
U01JTEVsZW1lbnQ6OnJlcGVhdGluZ0R1cmF0aQogICAgIFNNSUxUaW1lIHJlcGVhdENvdW50ID0g
dGhpcy0+cmVwZWF0Q291bnQoKTsKICAgICBTTUlMVGltZSByZXBlYXREdXIgPSB0aGlzLT5yZXBl
YXREdXIoKTsKICAgICBTTUlMVGltZSBzaW1wbGVEdXJhdGlvbiA9IHRoaXMtPnNpbXBsZUR1cmF0
aW9uKCk7Ci0gICAgaWYgKHNpbXBsZUR1cmF0aW9uID09IDAgfHwgKHJlcGVhdER1ci5pc1VucmVz
b2x2ZWQoKSAmJiByZXBlYXRDb3VudC5pc1VucmVzb2x2ZWQoKSkpCisgICAgaWYgKCFzaW1wbGVE
dXJhdGlvbiB8fCAocmVwZWF0RHVyLmlzVW5yZXNvbHZlZCgpICYmIHJlcGVhdENvdW50LmlzVW5y
ZXNvbHZlZCgpKSkKICAgICAgICAgcmV0dXJuIHNpbXBsZUR1cmF0aW9uOwogICAgIFNNSUxUaW1l
IHJlcGVhdENvdW50RHVyYXRpb24gPSBzaW1wbGVEdXJhdGlvbiAqIHJlcGVhdENvdW50OwogICAg
IHJldHVybiBtaW4ocmVwZWF0Q291bnREdXJhdGlvbiwgbWluKHJlcGVhdER1ciwgU01JTFRpbWU6
OmluZGVmaW5pdGUoKSkpOwpAQCAtNjcwLDEwICs2NjksMTEgQEAgdm9pZCBTVkdTTUlMRWxlbWVu
dDo6cmVzb2x2ZUludGVydmFsKGJvbwogICAgICAgICAgICAgYmVnaW5SZXN1bHQgPSB0ZW1wQmVn
aW47CiAgICAgICAgICAgICBlbmRSZXN1bHQgPSB0ZW1wRW5kOwogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9IGVsc2UgaWYgKHJlc3RhcnQoKSA9PSBSZXN0YXJ0TmV2ZXIpCisgICAgICAg
IH0KKyAgICAgICAgaWYgKHJlc3RhcnQoKSA9PSBSZXN0YXJ0TmV2ZXIpCiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmVnaW5BZnRlciA9IHRlbXBFbmQ7CisK
KyAgICAgICAgYmVnaW5BZnRlciA9IHRlbXBFbmQ7CiAgICAgICAgIGxhc3RJbnRlcnZhbFRlbXBF
bmQgPSB0ZW1wRW5kOwogICAgIH0KICAgICBiZWdpblJlc3VsdCA9IFNNSUxUaW1lOjp1bnJlc29s
dmVkKCk7CkBAIC03ODcsNyArNzg3LDcgQEAgZmxvYXQgU1ZHU01JTEVsZW1lbnQ6OmNhbGN1bGF0
ZUFuaW1hdGlvbgogICAgICAgICByZXBlYXQgPSAwOwogICAgICAgICByZXR1cm4gMC5mOwogICAg
IH0KLSAgICBpZiAoc2ltcGxlRHVyYXRpb24gPT0gMCkgeworICAgIGlmICghc2ltcGxlRHVyYXRp
b24pIHsKICAgICAgICAgcmVwZWF0ID0gMDsKICAgICAgICAgcmV0dXJuIDEuZjsKICAgICB9CkBA
IC03OTcsNyArNzk3LDcgQEAgZmxvYXQgU1ZHU01JTEVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGlv
bgogICAgIFNNSUxUaW1lIHJlcGVhdGluZ0R1cmF0aW9uID0gdGhpcy0+cmVwZWF0aW5nRHVyYXRp
b24oKTsKICAgICBpZiAoZWxhcHNlZCA+PSBtX2ludGVydmFsRW5kIHx8IGFjdGl2ZVRpbWUgPiBy
ZXBlYXRpbmdEdXJhdGlvbikgewogICAgICAgICByZXBlYXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocmVwZWF0aW5nRHVyYXRpb24udmFsdWUoKSAvIHNpbXBsZUR1cmF0aW9uLnZhbHVlKCkpOwot
ICAgICAgICBpZiAoZm1vZChyZXBlYXRpbmdEdXJhdGlvbi52YWx1ZSgpLCBzaW1wbGVEdXJhdGlv
bi52YWx1ZSgpID09IDAuKSkKKyAgICAgICAgaWYgKGZtb2QocmVwZWF0aW5nRHVyYXRpb24udmFs
dWUoKSwgIXNpbXBsZUR1cmF0aW9uLnZhbHVlKCkpKQogICAgICAgICAgICAgcmVwZWF0LS07CiAg
ICAgICAgIHJldHVybiAxLmY7CiAgICAgfQpJbmRleDogV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NW
R1NNSUxFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NN
SUxFbGVtZW50LmgJKHJldmlzaW9uIDc0NDkyKQorKysgV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NW
R1NNSUxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDE3NSArMjMsMTc0IEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKICAqLwogCi0KICNpZm5kZWYgU1ZHU01JTEVsZW1lbnRfaAogI2RlZmluZSBT
VkdTTUlMRWxlbWVudF9oCiAjaWYgRU5BQkxFKFNWR19BTklNQVRJT04pCi0KLSNpbmNsdWRlICJT
VkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU01JTFRpbWUuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50
LmgiCisKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgCi0gICAgY2xhc3MgQ29uZGl0aW9uRXZlbnRMaXN0ZW5lcjsKLSAgICBjbGFzcyBTTUlMVGlt
ZUNvbnRhaW5lcjsKK2NsYXNzIENvbmRpdGlvbkV2ZW50TGlzdGVuZXI7CitjbGFzcyBTTUlMVGlt
ZUNvbnRhaW5lcjsKKworLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFNNSUwgaW50ZXJ2YWwgdGlt
aW5nIG1vZGVsIGFzIG5lZWRlZCBmb3IgU1ZHIGFuaW1hdGlvbi4KK2NsYXNzIFNWR1NNSUxFbGVt
ZW50IDogcHVibGljIFNWR0VsZW1lbnQgeworcHVibGljOgorICAgIFNWR1NNSUxFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgIHZpcnR1YWwgflNWR1NNSUxFbGVt
ZW50KCk7CisKKyAgICBzdGF0aWMgYm9vbCBpc1NNSUxFbGVtZW50KE5vZGUqIG5vZGUpOworCisg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOworICAgIHZp
cnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSosIGJvb2wgcHJlc2VydmVEZWNs
cyk7CisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CisgICAgdmlydHVh
bCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFy
c2luZ0NoaWxkcmVuKCk7CisKKyAgICBTTUlMVGltZUNvbnRhaW5lciogdGltZUNvbnRhaW5lcigp
IGNvbnN0IHsgcmV0dXJuIG1fdGltZUNvbnRhaW5lci5nZXQoKTsgfQorCisgICAgU1ZHRWxlbWVu
dCogdGFyZ2V0RWxlbWVudCgpIGNvbnN0OworICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lKCkgY29u
c3Q7CisKKyAgICB2b2lkIGJlZ2luQnlMaW5rQWN0aXZhdGlvbigpOworCisgICAgZW51bSBSZXN0
YXJ0IHsgUmVzdGFydEFsd2F5cywgUmVzdGFydFdoZW5Ob3RBY3RpdmUsIFJlc3RhcnROZXZlciB9
OworICAgIFJlc3RhcnQgcmVzdGFydCgpIGNvbnN0OworCisgICAgZW51bSBGaWxsTW9kZSB7IEZp
bGxSZW1vdmUsIEZpbGxGcmVlemUgfTsKKyAgICBGaWxsTW9kZSBmaWxsKCkgY29uc3Q7CisKKyAg
ICBTdHJpbmcgeGxpbmtIcmVmKCkgY29uc3Q7CisKKyAgICBTTUlMVGltZSBkdXIoKSBjb25zdDsK
KyAgICBTTUlMVGltZSByZXBlYXREdXIoKSBjb25zdDsKKyAgICBTTUlMVGltZSByZXBlYXRDb3Vu
dCgpIGNvbnN0OworICAgIFNNSUxUaW1lIG1heFZhbHVlKCkgY29uc3Q7CisgICAgU01JTFRpbWUg
bWluVmFsdWUoKSBjb25zdDsKKworICAgIFNNSUxUaW1lIGVsYXBzZWQoKSBjb25zdDsgCisKKyAg
ICBTTUlMVGltZSBpbnRlcnZhbEJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcnZhbEJlZ2lu
OyB9CisgICAgU01JTFRpbWUgaW50ZXJ2YWxFbmQoKSBjb25zdCB7IHJldHVybiBtX2ludGVydmFs
RW5kOyB9CisgICAgU01JTFRpbWUgcHJldmlvdXNJbnRlcnZhbEJlZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9wcmV2aW91c0ludGVydmFsQmVnaW47IH0KKyAgICBTTUlMVGltZSBzaW1wbGVEdXJhdGlv
bigpIGNvbnN0OworCisgICAgdm9pZCBwcm9ncmVzcyhTTUlMVGltZSBlbGFwc2VkLCBTVkdTTUlM
RWxlbWVudCogcmVzdWx0c0VsZW1lbnQpOworICAgIFNNSUxUaW1lIG5leHRQcm9ncmVzc1RpbWUo
KSBjb25zdDsKKworICAgIHN0YXRpYyBTTUlMVGltZSBwYXJzZUNsb2NrVmFsdWUoY29uc3QgU3Ry
aW5nJik7CisgICAgc3RhdGljIFNNSUxUaW1lIHBhcnNlT2Zmc2V0VmFsdWUoY29uc3QgU3RyaW5n
Jik7CisKKyAgICBib29sIGlzQ29udHJpYnV0aW5nKFNNSUxUaW1lIGVsYXBzZWQpIGNvbnN0Owor
ICAgIGJvb2wgaXNJbmFjdGl2ZSgpIGNvbnN0OworICAgIGJvb2wgaXNGcm96ZW4oKSBjb25zdDsK
KworICAgIHVuc2lnbmVkIGRvY3VtZW50T3JkZXJJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9j
dW1lbnRPcmRlckluZGV4OyB9CisgICAgdm9pZCBzZXREb2N1bWVudE9yZGVySW5kZXgodW5zaWdu
ZWQgaW5kZXgpIHsgbV9kb2N1bWVudE9yZGVySW5kZXggPSBpbmRleDsgfQorCisgICAgdmlydHVh
bCBib29sIGlzQWRkaXRpdmUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc2V0VG9C
YXNlVmFsdWUoY29uc3QgU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVJlc3Vs
dHNUb1RhcmdldCgpID0gMDsKIAotICAgIC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTTUlMIGlu
dGVydmFsIHRpbWluZyBtb2RlbCBhcyBuZWVkZWQgZm9yIFNWRyBhbmltYXRpb24uCi0gICAgY2xh
c3MgU1ZHU01JTEVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxlbWVudCB7Ci0gICAgcHVibGljOgotICAg
ICAgICBTVkdTTUlMRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLSAg
ICAgICAgdmlydHVhbCB+U1ZHU01JTEVsZW1lbnQoKTsKLSAgICAgICAgCi0gICAgICAgIHN0YXRp
YyBib29sIGlzU01JTEVsZW1lbnQoTm9kZSogbm9kZSk7Ci0gICAgICAgIAotICAgICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSosIGJvb2wgcHJlc2VydmVEZWNscyk7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIFNNSUxU
aW1lQ29udGFpbmVyKiB0aW1lQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gbV90aW1lQ29udGFp
bmVyLmdldCgpOyB9Ci0KLSAgICAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCgpIGNvbnN0
OwotICAgICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSgpIGNvbnN0OwotICAgICAgICAKLSAgICAg
ICAgdm9pZCBiZWdpbkJ5TGlua0FjdGl2YXRpb24oKTsKLQotICAgICAgICBlbnVtIFJlc3RhcnQg
eyBSZXN0YXJ0QWx3YXlzLCBSZXN0YXJ0V2hlbk5vdEFjdGl2ZSwgUmVzdGFydE5ldmVyIH07Ci0g
ICAgICAgIFJlc3RhcnQgcmVzdGFydCgpIGNvbnN0OwotICAgICAgICAKLSAgICAgICAgZW51bSBG
aWxsTW9kZSB7IEZpbGxSZW1vdmUsIEZpbGxGcmVlemUgfTsKLSAgICAgICAgRmlsbE1vZGUgZmls
bCgpIGNvbnN0OwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIHhsaW5rSHJlZigpIGNvbnN0Owot
ICAgICAgICAKLSAgICAgICAgU01JTFRpbWUgZHVyKCkgY29uc3Q7Ci0gICAgICAgIFNNSUxUaW1l
IHJlcGVhdER1cigpIGNvbnN0OwotICAgICAgICBTTUlMVGltZSByZXBlYXRDb3VudCgpIGNvbnN0
OwotICAgICAgICBTTUlMVGltZSBtYXhWYWx1ZSgpIGNvbnN0OwotICAgICAgICBTTUlMVGltZSBt
aW5WYWx1ZSgpIGNvbnN0OwotICAgICAgICAKLSAgICAgICAgU01JTFRpbWUgZWxhcHNlZCgpIGNv
bnN0OyAKLSAgICAgICAgCi0gICAgICAgIFNNSUxUaW1lIGludGVydmFsQmVnaW4oKSBjb25zdCB7
IHJldHVybiBtX2ludGVydmFsQmVnaW47IH0KLSAgICAgICAgU01JTFRpbWUgaW50ZXJ2YWxFbmQo
KSBjb25zdCB7IHJldHVybiBtX2ludGVydmFsRW5kOyB9Ci0gICAgICAgIFNNSUxUaW1lIHByZXZp
b3VzSW50ZXJ2YWxCZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJldmlvdXNJbnRlcnZhbEJlZ2lu
OyB9Ci0gICAgICAgIFNNSUxUaW1lIHNpbXBsZUR1cmF0aW9uKCkgY29uc3Q7Ci0gICAgICAgIAot
ICAgICAgICB2b2lkIHByb2dyZXNzKFNNSUxUaW1lIGVsYXBzZWQsIFNWR1NNSUxFbGVtZW50KiBy
ZXN1bHRzRWxlbWVudCk7Ci0gICAgICAgIFNNSUxUaW1lIG5leHRQcm9ncmVzc1RpbWUoKSBjb25z
dDsKLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBTTUlMVGltZSBwYXJzZUNsb2NrVmFsdWUoY29u
c3QgU3RyaW5nJik7Ci0gICAgICAgIHN0YXRpYyBTTUlMVGltZSBwYXJzZU9mZnNldFZhbHVlKGNv
bnN0IFN0cmluZyYpOwotICAgICAgICAKLSAgICAgICAgYm9vbCBpc0NvbnRyaWJ1dGluZyhTTUlM
VGltZSBlbGFwc2VkKSBjb25zdDsKLSAgICAgICAgYm9vbCBpc0luYWN0aXZlKCkgY29uc3Q7Ci0g
ICAgICAgIGJvb2wgaXNGcm96ZW4oKSBjb25zdDsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVk
IGRvY3VtZW50T3JkZXJJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnRPcmRlckluZGV4
OyB9Ci0gICAgICAgIHZvaWQgc2V0RG9jdW1lbnRPcmRlckluZGV4KHVuc2lnbmVkIGluZGV4KSB7
IG1fZG9jdW1lbnRPcmRlckluZGV4ID0gaW5kZXg7IH0KLSAgICAgICAgCi0gICAgICAgIHZpcnR1
YWwgYm9vbCBpc0FkZGl0aXZlKCkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXRUb0Jhc2VWYWx1ZShjb25zdCBTdHJpbmcmKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBh
cHBseVJlc3VsdHNUb1RhcmdldCgpID0gMDsKLSAgICAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgICAg
IHZvaWQgYWRkQmVnaW5UaW1lKFNNSUxUaW1lIHRpbWUpOwotICAgICAgICB2b2lkIGFkZEVuZFRp
bWUoU01JTFRpbWUgdGltZSk7Ci0gICAgICAgIAorICAgIHZvaWQgYWRkQmVnaW5UaW1lKFNNSUxU
aW1lIHRpbWUpOworICAgIHZvaWQgYWRkRW5kVGltZShTTUlMVGltZSB0aW1lKTsKKwogcHJpdmF0
ZToKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0ZWRBY3RpdmVJbnRlcnZhbCgpID0gMDsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbihmbG9hdCBwZXJjZW50LCB1bnNpZ25l
ZCByZXBlYXQsIFNWR1NNSUxFbGVtZW50KiByZXN1bHRFbGVtZW50KSA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBlbmRlZEFjdGl2ZUludGVydmFsKCkgPSAwOwotICAgICAgICAKLSAgICAgICAg
ZW51bSBCZWdpbk9yRW5kIHsgQmVnaW4sIEVuZCB9OwotICAgICAgICBTTUlMVGltZSBmaW5kSW5z
dGFuY2VUaW1lKEJlZ2luT3JFbmQgYmVnaW5PckVuZCwgU01JTFRpbWUgbWluaW11bVRpbWUsIGJv
b2wgZXF1YWxzTWluaW11bU9LKSBjb25zdDsKLSAgICAgICAgdm9pZCByZXNvbHZlRmlyc3RJbnRl
cnZhbCgpOwotICAgICAgICB2b2lkIHJlc29sdmVOZXh0SW50ZXJ2YWwoKTsKLSAgICAgICAgdm9p
ZCByZXNvbHZlSW50ZXJ2YWwoYm9vbCBmaXJzdCwgU01JTFRpbWUmIGJlZ2luUmVzdWx0LCBTTUlM
VGltZSYgZW5kUmVzdWx0KSBjb25zdDsKLSAgICAgICAgU01JTFRpbWUgcmVzb2x2ZUFjdGl2ZUVu
ZChTTUlMVGltZSByZXNvbHZlZEJlZ2luLCBTTUlMVGltZSByZXNvbHZlZEVuZCkgY29uc3Q7Ci0g
ICAgICAgIFNNSUxUaW1lIHJlcGVhdGluZ0R1cmF0aW9uKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQg
Y2hlY2tSZXN0YXJ0KFNNSUxUaW1lIGVsYXBzZWQpOwotICAgICAgICB2b2lkIGJlZ2luTGlzdENo
YW5nZWQoKTsKLSAgICAgICAgdm9pZCBlbmRMaXN0Q2hhbmdlZCgpOwotICAgICAgICB2b2lkIHJl
c2NoZWR1bGUoKTsKLQotICAgICAgICAvLyBUaGlzIHJlcHJlc2VudHMgY29uZGl0aW9ucyBvbiBl
bGVtZW50cyBiZWdpbiBvciBlbmQgbGlzdCB0aGF0IG5lZWQgdG8gYmUgcmVzb2x2ZWQgb24gcnVu
dGltZQotICAgICAgICAvLyBmb3IgZXhhbXBsZSA8YW5pbWF0ZSBiZWdpbj0ib3RoZXJFbGVtZW50
LmJlZ2luICsgOHM7IGJ1dHRvbi5jbGljayIgLi4uIC8+Ci0gICAgICAgIHN0cnVjdCBDb25kaXRp
b24gewotICAgICAgICAgICAgZW51bSBUeXBlIHsgRXZlbnRCYXNlLCBTeW5jYmFzZSwgQWNjZXNz
S2V5IH07Ci0gICAgICAgICAgICBDb25kaXRpb24oVHlwZSwgQmVnaW5PckVuZCBiZWdpbk9yRW5k
LCBjb25zdCBTdHJpbmcmIGJhc2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCBTTUlMVGltZSBvZmZz
ZXQsIGludCByZXBlYXRzID0gLTEpOwotICAgICAgICAgICAgVHlwZSBtX3R5cGU7Ci0gICAgICAg
ICAgICBCZWdpbk9yRW5kIG1fYmVnaW5PckVuZDsKLSAgICAgICAgICAgIFN0cmluZyBtX2Jhc2VJ
RDsKLSAgICAgICAgICAgIFN0cmluZyBtX25hbWU7Ci0gICAgICAgICAgICBTTUlMVGltZSBtX29m
ZnNldDsKLSAgICAgICAgICAgIGludCBtX3JlcGVhdHM7Ci0gICAgICAgICAgICBSZWZQdHI8RWxl
bWVudD4gbV9zeW5jYmFzZTsKLSAgICAgICAgICAgIFJlZlB0cjxDb25kaXRpb25FdmVudExpc3Rl
bmVyPiBtX2V2ZW50TGlzdGVuZXI7Ci0gICAgICAgIH07Ci0gICAgICAgIGJvb2wgcGFyc2VDb25k
aXRpb24oY29uc3QgU3RyaW5nJiwgQmVnaW5PckVuZCBiZWdpbk9yRW5kKTsKLSAgICAgICAgdm9p
ZCBwYXJzZUJlZ2luT3JFbmQoY29uc3QgU3RyaW5nJiwgQmVnaW5PckVuZCBiZWdpbk9yRW5kKTsK
LSAgICAgICAgRWxlbWVudCogZXZlbnRCYXNlRm9yKGNvbnN0IENvbmRpdGlvbiYpIGNvbnN0Owot
Ci0gICAgICAgIHZvaWQgY29ubmVjdENvbmRpdGlvbnMoKTsKLSAgICAgICAgdm9pZCBkaXNjb25u
ZWN0Q29uZGl0aW9ucygpOwotICAgICAgICAKLSAgICAgICAgLy8gRXZlbnQgYmFzZSB0aW1pbmcK
LSAgICAgICAgdm9pZCBoYW5kbGVDb25kaXRpb25FdmVudChFdmVudCosIENvbmRpdGlvbiopOwot
ICAgICAgICAKLSAgICAgICAgLy8gU3luY2Jhc2UgdGltaW5nCi0gICAgICAgIGVudW0gTmV3T3JF
eGlzdGluZ0ludGVydmFsIHsgTmV3SW50ZXJ2YWwsIEV4aXN0aW5nSW50ZXJ2YWwgfTsgCi0gICAg
ICAgIHZvaWQgbm90aWZ5RGVwZW5kZW50c0ludGVydmFsQ2hhbmdlZChOZXdPckV4aXN0aW5nSW50
ZXJ2YWwpOwotICAgICAgICB2b2lkIGNyZWF0ZUluc3RhbmNlVGltZXNGcm9tU3luY2Jhc2UoU1ZH
U01JTEVsZW1lbnQqIHN5bmNiYXNlLCBOZXdPckV4aXN0aW5nSW50ZXJ2YWwpOwotICAgICAgICB2
b2lkIGFkZFRpbWVEZXBlbmRlbnQoU1ZHU01JTEVsZW1lbnQqKTsKLSAgICAgICAgdm9pZCByZW1v
dmVUaW1lRGVwZW5kZW50KFNWR1NNSUxFbGVtZW50Kik7Ci0gICAgICAgIAotICAgICAgICBlbnVt
IEFjdGl2ZVN0YXRlIHsgSW5hY3RpdmUsIEFjdGl2ZSwgRnJvemVuIH07Ci0gICAgICAgIEFjdGl2
ZVN0YXRlIGRldGVybWluZUFjdGl2ZVN0YXRlKFNNSUxUaW1lIGVsYXBzZWQpIGNvbnN0OwotICAg
ICAgICBmbG9hdCBjYWxjdWxhdGVBbmltYXRpb25QZXJjZW50QW5kUmVwZWF0KFNNSUxUaW1lIGVs
YXBzZWQsIHVuc2lnbmVkJiByZXBlYXQpIGNvbnN0OwotICAgICAgICBTTUlMVGltZSBjYWxjdWxh
dGVOZXh0UHJvZ3Jlc3NUaW1lKFNNSUxUaW1lIGVsYXBzZWQpIGNvbnN0OwotICAgICAgICAKLSAg
ICAgICAgVmVjdG9yPENvbmRpdGlvbj4gbV9jb25kaXRpb25zOwotICAgICAgICBib29sIG1fY29u
ZGl0aW9uc0Nvbm5lY3RlZDsKLSAgICAgICAgYm9vbCBtX2hhc0VuZEV2ZW50Q29uZGl0aW9uczsg
ICAgIAotICAgICAgICAKLSAgICAgICAgdHlwZWRlZiBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4g
VGltZURlcGVuZGVudFNldDsKLSAgICAgICAgVGltZURlcGVuZGVudFNldCBtX3RpbWVEZXBlbmRl
bnRzOwotICAgICAgICAKLSAgICAgICAgLy8gSW5zdGFuY2UgdGltZSBsaXN0cwotICAgICAgICBW
ZWN0b3I8U01JTFRpbWU+IG1fYmVnaW5UaW1lczsKLSAgICAgICAgVmVjdG9yPFNNSUxUaW1lPiBt
X2VuZFRpbWVzOwotICAgICAgICAKLSAgICAgICAgLy8gVGhpcyBpcyB0aGUgdXBjb21pbmcgb3Ig
Y3VycmVudCBpbnRlcnZhbAotICAgICAgICBTTUlMVGltZSBtX2ludGVydmFsQmVnaW47Ci0gICAg
ICAgIFNNSUxUaW1lIG1faW50ZXJ2YWxFbmQ7Ci0gICAgICAgIAotICAgICAgICBTTUlMVGltZSBt
X3ByZXZpb3VzSW50ZXJ2YWxCZWdpbjsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgbV9pc1dhaXRp
bmdGb3JGaXJzdEludGVydmFsOwotICAgIAotICAgICAgICBBY3RpdmVTdGF0ZSBtX2FjdGl2ZVN0
YXRlOwotICAgICAgICBmbG9hdCBtX2xhc3RQZXJjZW50OwotICAgICAgICB1bnNpZ25lZCBtX2xh
c3RSZXBlYXQ7Ci0gICAgICAgIAotICAgICAgICBTTUlMVGltZSBtX25leHRQcm9ncmVzc1RpbWU7
Ci0gICAgICAgIAotICAgICAgICBSZWZQdHI8U01JTFRpbWVDb250YWluZXI+IG1fdGltZUNvbnRh
aW5lcjsKLSAgICAgICAgdW5zaWduZWQgbV9kb2N1bWVudE9yZGVySW5kZXg7Ci0KLSAgICAgICAg
bXV0YWJsZSBTTUlMVGltZSBtX2NhY2hlZER1cjsKLSAgICAgICAgbXV0YWJsZSBTTUlMVGltZSBt
X2NhY2hlZFJlcGVhdER1cjsKLSAgICAgICAgbXV0YWJsZSBTTUlMVGltZSBtX2NhY2hlZFJlcGVh
dENvdW50OwotICAgICAgICBtdXRhYmxlIFNNSUxUaW1lIG1fY2FjaGVkTWluOwotICAgICAgICBt
dXRhYmxlIFNNSUxUaW1lIG1fY2FjaGVkTWF4OwotICAgICAgICAKLSAgICAgICAgZnJpZW5kIGNs
YXNzIENvbmRpdGlvbkV2ZW50TGlzdGVuZXI7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0ZWRBY3Rp
dmVJbnRlcnZhbCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0aW9uKGZsb2F0
IHBlcmNlbnQsIHVuc2lnbmVkIHJlcGVhdCwgU1ZHU01JTEVsZW1lbnQqIHJlc3VsdEVsZW1lbnQp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kZWRBY3RpdmVJbnRlcnZhbCgpID0gMDsKKworICAg
IGVudW0gQmVnaW5PckVuZCB7IEJlZ2luLCBFbmQgfTsKKyAgICBTTUlMVGltZSBmaW5kSW5zdGFu
Y2VUaW1lKEJlZ2luT3JFbmQgYmVnaW5PckVuZCwgU01JTFRpbWUgbWluaW11bVRpbWUsIGJvb2wg
ZXF1YWxzTWluaW11bU9LKSBjb25zdDsKKyAgICB2b2lkIHJlc29sdmVGaXJzdEludGVydmFsKCk7
CisgICAgdm9pZCByZXNvbHZlTmV4dEludGVydmFsKCk7CisgICAgdm9pZCByZXNvbHZlSW50ZXJ2
YWwoYm9vbCBmaXJzdCwgU01JTFRpbWUmIGJlZ2luUmVzdWx0LCBTTUlMVGltZSYgZW5kUmVzdWx0
KSBjb25zdDsKKyAgICBTTUlMVGltZSByZXNvbHZlQWN0aXZlRW5kKFNNSUxUaW1lIHJlc29sdmVk
QmVnaW4sIFNNSUxUaW1lIHJlc29sdmVkRW5kKSBjb25zdDsKKyAgICBTTUlMVGltZSByZXBlYXRp
bmdEdXJhdGlvbigpIGNvbnN0OworICAgIHZvaWQgY2hlY2tSZXN0YXJ0KFNNSUxUaW1lIGVsYXBz
ZWQpOworICAgIHZvaWQgYmVnaW5MaXN0Q2hhbmdlZCgpOworICAgIHZvaWQgZW5kTGlzdENoYW5n
ZWQoKTsKKyAgICB2b2lkIHJlc2NoZWR1bGUoKTsKKworICAgIC8vIFRoaXMgcmVwcmVzZW50cyBj
b25kaXRpb25zIG9uIGVsZW1lbnRzIGJlZ2luIG9yIGVuZCBsaXN0IHRoYXQgbmVlZCB0byBiZSBy
ZXNvbHZlZCBvbiBydW50aW1lCisgICAgLy8gZm9yIGV4YW1wbGUgPGFuaW1hdGUgYmVnaW49Im90
aGVyRWxlbWVudC5iZWdpbiArIDhzOyBidXR0b24uY2xpY2siIC4uLiAvPgorICAgIHN0cnVjdCBD
b25kaXRpb24geworICAgICAgICBlbnVtIFR5cGUgeyBFdmVudEJhc2UsIFN5bmNiYXNlLCBBY2Nl
c3NLZXkgfTsKKyAgICAgICAgQ29uZGl0aW9uKFR5cGUsIEJlZ2luT3JFbmQgYmVnaW5PckVuZCwg
Y29uc3QgU3RyaW5nJiBiYXNlSUQsIGNvbnN0IFN0cmluZyYgbmFtZSwgU01JTFRpbWUgb2Zmc2V0
LCBpbnQgcmVwZWF0cyA9IC0xKTsKKyAgICAgICAgVHlwZSBtX3R5cGU7CisgICAgICAgIEJlZ2lu
T3JFbmQgbV9iZWdpbk9yRW5kOworICAgICAgICBTdHJpbmcgbV9iYXNlSUQ7CisgICAgICAgIFN0
cmluZyBtX25hbWU7CisgICAgICAgIFNNSUxUaW1lIG1fb2Zmc2V0OworICAgICAgICBpbnQgbV9y
ZXBlYXRzOworICAgICAgICBSZWZQdHI8RWxlbWVudD4gbV9zeW5jYmFzZTsKKyAgICAgICAgUmVm
UHRyPENvbmRpdGlvbkV2ZW50TGlzdGVuZXI+IG1fZXZlbnRMaXN0ZW5lcjsKICAgICB9OworICAg
IGJvb2wgcGFyc2VDb25kaXRpb24oY29uc3QgU3RyaW5nJiwgQmVnaW5PckVuZCBiZWdpbk9yRW5k
KTsKKyAgICB2b2lkIHBhcnNlQmVnaW5PckVuZChjb25zdCBTdHJpbmcmLCBCZWdpbk9yRW5kIGJl
Z2luT3JFbmQpOworICAgIEVsZW1lbnQqIGV2ZW50QmFzZUZvcihjb25zdCBDb25kaXRpb24mKSBj
b25zdDsKKworICAgIHZvaWQgY29ubmVjdENvbmRpdGlvbnMoKTsKKyAgICB2b2lkIGRpc2Nvbm5l
Y3RDb25kaXRpb25zKCk7CisKKyAgICAvLyBFdmVudCBiYXNlIHRpbWluZworICAgIHZvaWQgaGFu
ZGxlQ29uZGl0aW9uRXZlbnQoRXZlbnQqLCBDb25kaXRpb24qKTsKKworICAgIC8vIFN5bmNiYXNl
IHRpbWluZworICAgIGVudW0gTmV3T3JFeGlzdGluZ0ludGVydmFsIHsgTmV3SW50ZXJ2YWwsIEV4
aXN0aW5nSW50ZXJ2YWwgfTsgCisgICAgdm9pZCBub3RpZnlEZXBlbmRlbnRzSW50ZXJ2YWxDaGFu
Z2VkKE5ld09yRXhpc3RpbmdJbnRlcnZhbCk7CisgICAgdm9pZCBjcmVhdGVJbnN0YW5jZVRpbWVz
RnJvbVN5bmNiYXNlKFNWR1NNSUxFbGVtZW50KiBzeW5jYmFzZSwgTmV3T3JFeGlzdGluZ0ludGVy
dmFsKTsKKyAgICB2b2lkIGFkZFRpbWVEZXBlbmRlbnQoU1ZHU01JTEVsZW1lbnQqKTsKKyAgICB2
b2lkIHJlbW92ZVRpbWVEZXBlbmRlbnQoU1ZHU01JTEVsZW1lbnQqKTsKKworICAgIGVudW0gQWN0
aXZlU3RhdGUgeyBJbmFjdGl2ZSwgQWN0aXZlLCBGcm96ZW4gfTsKKyAgICBBY3RpdmVTdGF0ZSBk
ZXRlcm1pbmVBY3RpdmVTdGF0ZShTTUlMVGltZSBlbGFwc2VkKSBjb25zdDsKKyAgICBmbG9hdCBj
YWxjdWxhdGVBbmltYXRpb25QZXJjZW50QW5kUmVwZWF0KFNNSUxUaW1lIGVsYXBzZWQsIHVuc2ln
bmVkJiByZXBlYXQpIGNvbnN0OworICAgIFNNSUxUaW1lIGNhbGN1bGF0ZU5leHRQcm9ncmVzc1Rp
bWUoU01JTFRpbWUgZWxhcHNlZCkgY29uc3Q7CisKKyAgICBWZWN0b3I8Q29uZGl0aW9uPiBtX2Nv
bmRpdGlvbnM7CisgICAgYm9vbCBtX2NvbmRpdGlvbnNDb25uZWN0ZWQ7CisgICAgYm9vbCBtX2hh
c0VuZEV2ZW50Q29uZGl0aW9uczsgICAgIAorCisgICAgdHlwZWRlZiBIYXNoU2V0PFNWR1NNSUxF
bGVtZW50Kj4gVGltZURlcGVuZGVudFNldDsKKyAgICBUaW1lRGVwZW5kZW50U2V0IG1fdGltZURl
cGVuZGVudHM7CisKKyAgICAvLyBJbnN0YW5jZSB0aW1lIGxpc3RzCisgICAgVmVjdG9yPFNNSUxU
aW1lPiBtX2JlZ2luVGltZXM7CisgICAgVmVjdG9yPFNNSUxUaW1lPiBtX2VuZFRpbWVzOworCisg
ICAgLy8gVGhpcyBpcyB0aGUgdXBjb21pbmcgb3IgY3VycmVudCBpbnRlcnZhbAorICAgIFNNSUxU
aW1lIG1faW50ZXJ2YWxCZWdpbjsKKyAgICBTTUlMVGltZSBtX2ludGVydmFsRW5kOworCisgICAg
U01JTFRpbWUgbV9wcmV2aW91c0ludGVydmFsQmVnaW47CisKKyAgICBib29sIG1faXNXYWl0aW5n
Rm9yRmlyc3RJbnRlcnZhbDsKKworICAgIEFjdGl2ZVN0YXRlIG1fYWN0aXZlU3RhdGU7CisgICAg
ZmxvYXQgbV9sYXN0UGVyY2VudDsKKyAgICB1bnNpZ25lZCBtX2xhc3RSZXBlYXQ7CisKKyAgICBT
TUlMVGltZSBtX25leHRQcm9ncmVzc1RpbWU7CisKKyAgICBSZWZQdHI8U01JTFRpbWVDb250YWlu
ZXI+IG1fdGltZUNvbnRhaW5lcjsKKyAgICB1bnNpZ25lZCBtX2RvY3VtZW50T3JkZXJJbmRleDsK
KworICAgIG11dGFibGUgU01JTFRpbWUgbV9jYWNoZWREdXI7CisgICAgbXV0YWJsZSBTTUlMVGlt
ZSBtX2NhY2hlZFJlcGVhdER1cjsKKyAgICBtdXRhYmxlIFNNSUxUaW1lIG1fY2FjaGVkUmVwZWF0
Q291bnQ7CisgICAgbXV0YWJsZSBTTUlMVGltZSBtX2NhY2hlZE1pbjsKKyAgICBtdXRhYmxlIFNN
SUxUaW1lIG1fY2FjaGVkTWF4OworCisgICAgZnJpZW5kIGNsYXNzIENvbmRpdGlvbkV2ZW50TGlz
dGVuZXI7Cit9OwogCiB9CiAKLSNlbmRpZgotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFNWRykK
KyNlbmRpZiAvLyBTVkdTTUlMRWxlbWVudF9oCiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2Uu
aAkocmV2aXNpb24gNzQ0OTIpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw0OCArMzMsNDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0gICAgY2xhc3MgUGFnZTsKLSAgICBjbGFzcyBTVkdJbWFnZUNocm9tZUNsaWVudDsKLSAgICAK
LSAgICBjbGFzcyBTVkdJbWFnZSA6IHB1YmxpYyBJbWFnZSB7Ci0gICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdJbWFnZT4gY3JlYXRlKEltYWdlT2JzZXJ2ZXIqIG9ic2Vy
dmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ltYWdl
KG9ic2VydmVyKSk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZpcnR1YWwg
flNWR0ltYWdlKCk7Ci0KLSAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24o
KSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGFpbmVyU2l6ZShjb25zdCBJ
bnRTaXplJik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCB1c2VzQ29udGFpbmVyU2l6ZSgpIGNvbnN0
OwotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0OwotICAgICAg
ICB2aXJ0dWFsIGJvb2wgaGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdDsKLQotICAgICAgICB2aXJ0
dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OwotICAgICAgICAKLSAgICAgICAgdmlydHVhbCBib29s
IGRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKLQotICAgICAgICAvLyBGSVhNRTog
U1ZHSW1hZ2VzIGFyZSB1bmRlcnJlcG9ydGluZyBkZWNvZGVkIHNpemVzIGFuZCB3aWxsIGJlIHVu
YWJsZQotICAgICAgICAvLyB0byBwcnVuZSBiZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90
IGltcGxlbWVudGVkIHlldC4KLSAgICAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0
YShib29sKSB7IH0KLSAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KLQotICAgICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGZyYW1lQXRJ
bmRleChzaXplX3QpIHsgcmV0dXJuIDA7IH0KLSAgICAgICAgCi0gICAgICAgIFNWR0ltYWdlKElt
YWdlT2JzZXJ2ZXIqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgRmxvYXRSZWN0JiBmcm9tUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0b1JlY3QsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7Ci0gICAgICAgIAot
ICAgICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7Ci0gICAgICAgIAotICAgICAgICBPd25QdHI8U1ZHSW1hZ2VDaHJvbWVDbGllbnQ+IG1fY2hy
b21lQ2xpZW50OwotICAgICAgICBPd25QdHI8UGFnZT4gbV9wYWdlOwotICAgICAgICBSZWZQdHI8
SW1hZ2U+IG1fZnJhbWVDYWNoZTsKLSAgICB9OworY2xhc3MgUGFnZTsKK2NsYXNzIFNWR0ltYWdl
Q2hyb21lQ2xpZW50OworCitjbGFzcyBTVkdJbWFnZSA6IHB1YmxpYyBJbWFnZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHSW1hZ2U+IGNyZWF0ZShJbWFnZU9ic2VydmVyKiBv
YnNlcnZlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHSW1hZ2Uob2Jz
ZXJ2ZXIpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB+U1ZHSW1hZ2UoKTsKKwor
ICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Q7CisKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJik7CisgICAgdmlydHVhbCBi
b29sIHVzZXNDb250YWluZXJTaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGhhc1JlbGF0
aXZlV2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUmVsYXRpdmVIZWlnaHQoKSBj
b25zdDsKKworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IGJvb2wgZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworCisgICAgLy8gRklYTUU6
IFNWR0ltYWdlcyBhcmUgdW5kZXJyZXBvcnRpbmcgZGVjb2RlZCBzaXplcyBhbmQgd2lsbCBiZSB1
bmFibGUKKyAgICAvLyB0byBwcnVuZSBiZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IGlt
cGxlbWVudGVkIHlldC4KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wp
IHsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiAw
OyB9CisKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGZyYW1lQXRJbmRleChzaXplX3QpIHsg
cmV0dXJuIDA7IH0KKworICAgIFNWR0ltYWdlKEltYWdlT2JzZXJ2ZXIqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGZyb21SZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRvUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yKTsKKworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKTsKKworICAgIE93blB0cjxTVkdJbWFnZUNocm9tZUNsaWVudD4gbV9j
aHJvbWVDbGllbnQ7CisgICAgT3duUHRyPFBhZ2U+IG1fcGFnZTsKKyAgICBSZWZQdHI8SW1hZ2U+
IG1fZnJhbWVDYWNoZTsKK307CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQotCi0jZW5kaWYK
KyNlbmRpZiAvLyBTVkdJbWFnZV9oCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAkocmV2aXNpb24gNzQ0OTIpCisrKyBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3Nz
ZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsOCArMjEs
NiBAQAogI2lmbmRlZiBTVkdGaWx0ZXJCdWlsZGVyX2gKICNkZWZpbmUgU1ZHRmlsdGVyQnVpbGRl
cl9oCiAKLSNpbmNsdWRlICJjb25maWcuaCIKLQogI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShG
SUxURVJTKQogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCkBAIC0zMiw0OSArMzEsNDkgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJp
bmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLSAgICBjbGFzcyBTVkdGaWx0
ZXJCdWlsZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8U1ZHRmlsdGVyQnVpbGRlcj4gewotICAgIHB1
YmxpYzoKLSAgICAgICAgdHlwZWRlZiBIYXNoU2V0PEZpbHRlckVmZmVjdCo+IEZpbHRlckVmZmVj
dFNldDsKLQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdGaWx0ZXJCdWlsZGVyPiBjcmVh
dGUoRmlsdGVyKiBmaWx0ZXIpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdGaWx0ZXJCdWlsZGVy
KGZpbHRlcikpOyB9Ci0KLSAgICAgICAgdm9pZCBhZGQoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwg
UmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0KTsKLQotICAgICAgICBGaWx0ZXJFZmZlY3QqIGdl
dEVmZmVjdEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3Q7Ci0gICAgICAgIEZpbHRl
ckVmZmVjdCogbGFzdEVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEVmZmVjdC5nZXQoKTsg
fQotCi0gICAgICAgIHZvaWQgYXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+KTsKLQotICAgICAgICBpbmxpbmUgRmlsdGVyRWZmZWN0U2V0JiBnZXRFZmZl
Y3RSZWZlcmVuY2VzKEZpbHRlckVmZmVjdCogZWZmZWN0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBPbmx5IGFsbG93ZWQgZm9yIGVmZmVjdHMgYmVsb25ncyB0byB0aGlzIGJ1aWxkZXIuCi0g
ICAgICAgICAgICBBU1NFUlQobV9lZmZlY3RSZWZlcmVuY2VzLmNvbnRhaW5zKGVmZmVjdCkpOwot
ICAgICAgICAgICAgcmV0dXJuIG1fZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCktPnNlY29u
ZDsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY2xlYXJFZmZlY3RzKCk7Ci0KLSAgICBwcml2
YXRlOgotICAgICAgICBTVkdGaWx0ZXJCdWlsZGVyKEZpbHRlciopOwotCi0gICAgICAgIGlubGlu
ZSB2b2lkIGFkZEJ1aWx0aW5FZmZlY3RzKCkKLSAgICAgICAgewotICAgICAgICAgICAgSGFzaE1h
cDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID46Oml0ZXJhdG9yIGVuZCA9IG1f
YnVpbHRpbkVmZmVjdHMuZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKEhhc2hNYXA8QXRvbWljU3Ry
aW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+OjppdGVyYXRvciBpdGVyYXRvciA9IG1fYnVpbHRp
bkVmZmVjdHMuYmVnaW4oKTsgaXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJhdG9yKQotICAgICAgICAg
ICAgICAgICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGl0ZXJhdG9yLT5zZWNvbmQsIEZpbHRlckVm
ZmVjdFNldCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiA+IG1fYnVpbHRpbkVmZmVjdHM7Ci0gICAgICAgIEhhc2hNYXA8
QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+IG1fbmFtZWRFZmZlY3RzOwotICAg
ICAgICAvLyBUaGUgdmFsdWUgaXMgYSBsaXN0LCB3aGljaCBjb250YWlucyB0aG9zZSBmaWx0ZXIg
ZWZmZWN0cywKLSAgICAgICAgLy8gd2hpY2ggZGVwZW5kcyBvbiB0aGUga2V5IGZpbHRlciBlZmZl
Y3QuCi0gICAgICAgIEhhc2hNYXA8UmVmUHRyPEZpbHRlckVmZmVjdD4sIEZpbHRlckVmZmVjdFNl
dD4gbV9lZmZlY3RSZWZlcmVuY2VzOwogCi0gICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1f
bGFzdEVmZmVjdDsKLSAgICB9OworY2xhc3MgU1ZHRmlsdGVyQnVpbGRlciA6IHB1YmxpYyBSZWZD
b3VudGVkPFNWR0ZpbHRlckJ1aWxkZXI+IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEhhc2hTZXQ8
RmlsdGVyRWZmZWN0Kj4gRmlsdGVyRWZmZWN0U2V0OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
U1ZHRmlsdGVyQnVpbGRlcj4gY3JlYXRlKEZpbHRlciogZmlsdGVyKSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgU1ZHRmlsdGVyQnVpbGRlcihmaWx0ZXIpKTsgfQorCisgICAgdm9pZCBhZGQoY29uc3Qg
QXRvbWljU3RyaW5nJiBpZCwgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0KTsKKworICAgIEZp
bHRlckVmZmVjdCogZ2V0RWZmZWN0QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdDsK
KyAgICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QoKSBjb25zdCB7IHJldHVybiBtX2xhc3RFZmZl
Y3QuZ2V0KCk7IH0KKworICAgIHZvaWQgYXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+KTsKKworICAgIGlubGluZSBGaWx0ZXJFZmZlY3RTZXQmIGdldEVm
ZmVjdFJlZmVyZW5jZXMoRmlsdGVyRWZmZWN0KiBlZmZlY3QpCisgICAgeworICAgICAgICAvLyBP
bmx5IGFsbG93ZWQgZm9yIGVmZmVjdHMgYmVsb25ncyB0byB0aGlzIGJ1aWxkZXIuCisgICAgICAg
IEFTU0VSVChtX2VmZmVjdFJlZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7CisgICAgICAgIHJl
dHVybiBtX2VmZmVjdFJlZmVyZW5jZXMuZmluZChlZmZlY3QpLT5zZWNvbmQ7CisgICAgfQorCisg
ICAgdm9pZCBjbGVhckVmZmVjdHMoKTsKKworcHJpdmF0ZToKKyAgICBTVkdGaWx0ZXJCdWlsZGVy
KEZpbHRlciopOworCisgICAgaW5saW5lIHZvaWQgYWRkQnVpbHRpbkVmZmVjdHMoKQorICAgIHsK
KyAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID46Oml0
ZXJhdG9yIGVuZCA9IG1fYnVpbHRpbkVmZmVjdHMuZW5kKCk7CisgICAgICAgIGZvciAoSGFzaE1h
cDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID46Oml0ZXJhdG9yIGl0ZXJhdG9y
ID0gbV9idWlsdGluRWZmZWN0cy5iZWdpbigpOyBpdGVyYXRvciAhPSBlbmQ7ICsraXRlcmF0b3Ip
CisgICAgICAgICAgICAgbV9lZmZlY3RSZWZlcmVuY2VzLmFkZChpdGVyYXRvci0+c2Vjb25kLCBG
aWx0ZXJFZmZlY3RTZXQoKSk7CisgICAgfQorCisgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbV9idWlsdGluRWZmZWN0czsKKyAgICBIYXNoTWFwPEF0b21p
Y1N0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4gPiBtX25hbWVkRWZmZWN0czsKKyAgICAvLyBU
aGUgdmFsdWUgaXMgYSBsaXN0LCB3aGljaCBjb250YWlucyB0aG9zZSBmaWx0ZXIgZWZmZWN0cywK
KyAgICAvLyB3aGljaCBkZXBlbmRzIG9uIHRoZSBrZXkgZmlsdGVyIGVmZmVjdC4KKyAgICBIYXNo
TWFwPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBGaWx0ZXJFZmZlY3RTZXQ+IG1fZWZmZWN0UmVmZXJl
bmNlczsKKworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1fbGFzdEVmZmVjdDsKK307CiAgICAg
Ci19IC8vbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2VuZGlmCisjZW5kaWYgLy8gU1ZH
RmlsdGVyQnVpbGRlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77509</attachid>
            <date>2010-12-27 08:42:16 -0800</date>
            <delta_ts>2010-12-27 11:02:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51490-20101227174212.patch</filename>
            <type>text/plain</type>
            <size>65749</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDY4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA4IEBACisyMDEwLTEyLTI3ICBEaXJrIFNjaHVsemUgIDxrcml0QHdiZWtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KKworICAgICAgICBDbGVh
bnVwIFNWRyBjb2RlIGFjY29yZGluZyB0byB0aGUgd2Via2l0IHN0eWxlIHJ1bGVzIDMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxNDkwCisKKyAgICAg
ICAgTGFzdCBwYXRjaCB0byBmaXggaW5kZW50aW9uIGFuZCBvdGhlciBzdHlsZSBpc3N1ZXMgYWNj
b3JkaW5nIHRvIHRoZSBXZWJLaXQgc3R5bGUgcnVsZXMgaW4gdGhlIFNWRyBjb2RlLgorICAgICAg
ICBKdXN0IHR3byBmaWxlcyBjYW4ndCBiZSBmaXhlZCBmb3IgY2hlY2std2Via2l0LXN0eWxlLgor
ICAgICAgICAqIFNWR0FsbEluT25lLmNwcDogY2hlY2std2Via2l0LXN0eWxlIHdhbnRzIGEgY29u
ZmlnLmggYXQgdGhlIGJlZ2lubmluZworICAgICAgICAqIFNWR0ltYWdlLmNwcDogT25lIGhlYWRl
ciBuZWVkcyB0byBiZSBpbiBhIG5vbi1hbHBoYWJldGljIG9yZGVyLCBzZWUgRklYTUUuCisKKyAg
ICAgICAgTm8gY2hhbmdlcyBvZiBmdW5jdGlvbmFsaXR5LCBzbyBubyBuZXcgdGVzdHMuIAorCisg
ICAgICAgICogc3ZnL1NWR0FsbEluT25lLmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHTGVuZ3RoLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aDo6c2V0VmFsdWUpOgorICAgICAgICAqIHN2
Zy9TVkdQb2x5Z29uRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdQb2x5bGluZUVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpwYXJzZVByZXNlcnZlQXNwZWN0UmF0aW8p
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6dHJhbnNmb3JtUmVj
dCk6CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHU1ZHRWxlbWVudDo6dmlld3BvcnQpOgorICAgICAgICAqIHN2Zy9TVkdTZXRFbGVtZW50Lmg6
CisgICAgICAgICogc3ZnL1NWR1N0eWxhYmxlLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHls
YWJsZTo6flNWR1N0eWxhYmxlKToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxl
bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6bG9j
YWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVk
TG9jYXRhYmxlRWxlbWVudDo6aXNTdHlsZWRMb2NhdGFibGUpOgorICAgICAgICAqIHN2Zy9TVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6aXNLbm93bkF0dHJpYnV0ZSk6CisgICAgICAgICogc3Zn
L1NWR1N3aXRjaEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3dpdGNoRWxlbWVu
dDo6Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcik6CisgICAgICAgICogc3ZnL1NWR1Rlc3RzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6Cisg
ICAgICAgICogc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUpOgorICAgICAgICAqIHN2
Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwOgorICAgICAgICAqIHN2Zy9TVkdUZXh0UGF0aEVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHVGl0bGVFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdUaXRsZUVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQpOgorICAgICAgICAqIHN2Zy9TVkdU
cmFuc2Zvcm1EaXN0YW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1EaXN0
YW5jZTo6U1ZHVHJhbnNmb3JtRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNm
b3JtRGlzdGFuY2U6OnNjYWxlZERpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5z
Zm9ybURpc3RhbmNlOjphZGRTVkdUcmFuc2Zvcm1zKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Ry
YW5zZm9ybURpc3RhbmNlOjphZGRTVkdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VHJhbnNmb3JtRGlzdGFuY2U6OmFkZFRvU1ZHVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1RyYW5zZm9ybURpc3RhbmNlOjppc1plcm8pOgorICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zv
cm1MaXN0LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHVVJJUmVmZXJlbmNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1VSSVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KToKKyAgICAgICAgKiBzdmcvU1ZH
Vktlcm5FbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1ZpZXdTcGVjLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1ZpZXdTcGVjOjpwYXJzZVZpZXdTcGVjKToKKyAgICAgICAgKiBzdmcvU1ZH
Wm9vbUFuZFBhbi5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHWm9vbUFuZFBhbjo6U1ZHWm9vbUFu
ZFBhbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdab29tQW5kUGFuOjp+U1ZHWm9vbUFuZFBhbik6
CisgICAgICAgIChXZWJDb3JlOjpTVkdab29tQW5kUGFuOjp6b29tQW5kUGFuKToKKyAgICAgICAg
KiBzdmcvU1ZHWm9vbUV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdab29tRXZlbnQ6OmNy
ZWF0ZSk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlMVGltZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpvcGVyYXRvciopOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01JTFRpbWUuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lOjpTTUlMVGltZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTTUlMVGltZTo6dW5yZXNvbHZlZCk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZTo6aW5k
ZWZpbml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZTo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNNSUxUaW1lOjp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGlt
ZTo6aXNGaW5pdGUpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWU6OmlzSW5kZWZpbml0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZTo6aXNVbnJlc29sdmVkKToKKyAgICAgICAgKFdl
YkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3IhKTogbmV3IG9w
ZXJhdG9yIGNoZWNrcyBmb3IgMCBvciBpbmZpbml0ZSB2YWx1ZXMuCisgICAgICAgIChXZWJDb3Jl
OjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPik6CisgICAgICAgIChX
ZWJDb3JlOjpvcGVyYXRvcjwpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I+PSk6CisgICAg
ICAgIChXZWJDb3JlOjpvcGVyYXRvcjw9KToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NNSUxU
aW1lQ29udGFpbmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjpzZXREb2N1bWVudE9y
ZGVySW5kZXhlc0RpcnR5KToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbmRpdGlvbkV2ZW50TGlzdGVuZXI6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OnJlcGVhdGluZ0R1cmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpyZXNvbHZlSW50ZXJ2YWwpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGlvblBlcmNl
bnRBbmRSZXBlYXQpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50Ojp0aW1lQ29udGFpbmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjppbnRlcnZhbEJlZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1NNSUxFbGVtZW50OjppbnRlcnZhbEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdTTUlMRWxlbWVudDo6cHJldmlvdXNJbnRlcnZhbEJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1NNSUxFbGVtZW50Ojpkb2N1bWVudE9yZGVySW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHU01JTEVsZW1lbnQ6OnNldERvY3VtZW50T3JkZXJJbmRleCk6CisgICAgICAgICogc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRlY29kZWRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ltYWdlOjpmcmFtZUF0SW5kZXgpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpsYXN0RWZmZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmdldEVmZmVjdFJlZmVyZW5jZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YWRkQnVpbHRpbkVmZmVjdHMp
OgorCiAyMDEwLTEyLTI2ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdB
bGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHQWxsSW5PbmUuY3BwCShy
ZXZpc2lvbiA3NDY4MCkKKysrIFdlYkNvcmUvc3ZnL1NWR0FsbEluT25lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ3LDkgKzE0Nyw5IEBACiAjaW5jbHVkZSAiU1ZHVGV4dFBvc2l0aW9uaW5nRWxl
bWVudC5jcHAiCiAjaW5jbHVkZSAiU1ZHVGl0bGVFbGVtZW50LmNwcCIKICNpbmNsdWRlICJTVkdU
cmFuc2Zvcm0uY3BwIgotI2luY2x1ZGUgIlNWR1RyYW5zZm9ybWFibGUuY3BwIgogI2luY2x1ZGUg
IlNWR1RyYW5zZm9ybURpc3RhbmNlLmNwcCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmNw
cCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1hYmxlLmNwcCIKICNpbmNsdWRlICJTVkdVUklSZWZl
cmVuY2UuY3BwIgogI2luY2x1ZGUgIlNWR1VzZUVsZW1lbnQuY3BwIgogI2luY2x1ZGUgIlNWR1ZL
ZXJuRWxlbWVudC5jcHAiCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdMZW5ndGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0xlbmd0aC5jcHAJKHJldmlzaW9uIDc0NjgwKQorKysgV2Vi
Q29yZS9zdmcvU1ZHTGVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDIyICsyMDMsMTkg
QEAgdm9pZCBTVkdMZW5ndGg6OnNldFZhbHVlKGZsb2F0IHZhbHVlLCBjbwogICAgIGNhc2UgTGVu
Z3RoVHlwZU51bWJlcjoKICAgICAgICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSB2YWx1ZTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMZW5ndGhUeXBlUGVyY2VudGFnZToKLSAgICB7Cisg
ICAgY2FzZSBMZW5ndGhUeXBlUGVyY2VudGFnZTogewogICAgICAgICBmbG9hdCByZXN1bHQgPSBj
b252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzVG9QZXJjZW50YWdlKHZhbHVlLCBjb250ZXh0LCBlYyk7
CiAgICAgICAgIGlmICghZWMpCiAgICAgICAgICAgICBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9
IHJlc3VsdDsgCiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIExlbmd0aFR5cGVFTVM6
Ci0gICAgeworICAgIGNhc2UgTGVuZ3RoVHlwZUVNUzogewogICAgICAgICBmbG9hdCByZXN1bHQg
PSBjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzVG9FTVModmFsdWUsIGNvbnRleHQsIGVjKTsKICAg
ICAgICAgaWYgKCFlYykKICAgICAgICAgICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gcmVz
dWx0OwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBMZW5ndGhUeXBlRVhTOgotICAg
IHsKKyAgICBjYXNlIExlbmd0aFR5cGVFWFM6IHsKICAgICAgICAgZmxvYXQgcmVzdWx0ID0gY29u
dmVydFZhbHVlRnJvbVVzZXJVbml0c1RvRVhTKHZhbHVlLCBjb250ZXh0LCBlYyk7CiAgICAgICAg
IGlmICghZWMpCiAgICAgICAgICAgICBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9IHJlc3VsdDsg
CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR1BvbHlnb25FbGVtZW50LmgJKHJldmlzaW9uIDc0NjgwKQorKysgV2ViQ29y
ZS9zdmcvU1ZHUG9seWdvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTUgKzI2LDE1
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFNWR1BvbHlnb25FbGVtZW50
IDogcHVibGljIFNWR1BvbHlFbGVtZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNWR1BvbHlnb25FbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Kik7CitjbGFzcyBTVkdQb2x5Z29uRWxlbWVudCA6IHB1YmxpYyBTVkdQb2x5RWxl
bWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHUG9seWdvbkVsZW1lbnQ+
IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAotICAgIHByaXZhdGU6
Ci0gICAgICAgIFNWR1BvbHlnb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCopOworcHJpdmF0ZToKKyAgICBTVkdQb2x5Z29uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikg
Y29uc3Q7Ci0gICAgfTsKKyAgICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29uc3Q7
Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1Bv
bHlsaW5lRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BvbHlsaW5lRWxl
bWVudC5oCShyZXZpc2lvbiA3NDY4MCkKKysrIFdlYkNvcmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNSArMjYsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi0gICAgY2xhc3MgU1ZHUG9seWxpbmVFbGVtZW50IDogcHVibGljIFNWR1BvbHlFbGVt
ZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1BvbHlsaW5l
RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworY2xhc3Mg
U1ZHUG9seWxpbmVFbGVtZW50IDogcHVibGljIFNWR1BvbHlFbGVtZW50IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdQb2x5bGluZUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAotICAgIHByaXZhdGU6Ci0gICAgICAgIFNWR1BvbHls
aW5lRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKK3ByaXZhdGU6Cisg
ICAgU1ZHUG9seWxpbmVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwog
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB0b1BhdGhEYXRhKFBhdGgmKSBjb25zdDsKLSAgICB9Owor
ICAgIHZpcnR1YWwgdm9pZCB0b1BhdGhEYXRhKFBhdGgmKSBjb25zdDsKK307CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRp
by5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5j
cHAJKHJldmlzaW9uIDc0NjgwKQorKysgV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRp
by5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDI1ICs2NiwyNSBAQCBTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvIFNWR1ByZXNlcnZlQXNwZWN0CiAKICAgICAvLyBGSVhNRTogUmV3cml0ZSB0aGlzIHBh
cnNlciwgd2l0aG91dCBnb3RvcyEKICAgICBpZiAoIXNraXBPcHRpb25hbFNwYWNlcyhjdXJyUGFy
YW0sIGVuZCkpCi0gICAgICAgIGdvdG8gYmFpbF9vdXQ7CisgICAgICAgIGdvdG8gYmFpbE91dDsK
IAogICAgIGlmICgqY3VyclBhcmFtID09ICdkJykgewogICAgICAgICBpZiAoIXNraXBTdHJpbmco
Y3VyclBhcmFtLCBlbmQsICJkZWZlciIpKQotICAgICAgICAgICAgZ290byBiYWlsX291dDsKKyAg
ICAgICAgICAgIGdvdG8gYmFpbE91dDsKICAgICAgICAgLy8gRklYTUU6IFdlIGp1c3QgaWdub3Jl
IHRoZSAiZGVmZXIiIGhlcmUuCiAgICAgICAgIGlmICghc2tpcE9wdGlvbmFsU3BhY2VzKGN1cnJQ
YXJhbSwgZW5kKSkKLSAgICAgICAgICAgIGdvdG8gYmFpbF9vdXQ7CisgICAgICAgICAgICBnb3Rv
IGJhaWxPdXQ7CiAgICAgfQogCiAgICAgaWYgKCpjdXJyUGFyYW0gPT0gJ24nKSB7CiAgICAgICAg
IGlmICghc2tpcFN0cmluZyhjdXJyUGFyYW0sIGVuZCwgIm5vbmUiKSkKLSAgICAgICAgICAgIGdv
dG8gYmFpbF9vdXQ7CisgICAgICAgICAgICBnb3RvIGJhaWxPdXQ7CiAgICAgICAgIHNraXBPcHRp
b25hbFNwYWNlcyhjdXJyUGFyYW0sIGVuZCk7CiAgICAgfSBlbHNlIGlmICgqY3VyclBhcmFtID09
ICd4JykgewogICAgICAgICBpZiAoKGVuZCAtIGN1cnJQYXJhbSkgPCA4KQotICAgICAgICAgICAg
Z290byBiYWlsX291dDsKKyAgICAgICAgICAgIGdvdG8gYmFpbE91dDsKICAgICAgICAgaWYgKGN1
cnJQYXJhbVsxXSAhPSAnTScgfHwgY3VyclBhcmFtWzRdICE9ICdZJyB8fCBjdXJyUGFyYW1bNV0g
IT0gJ00nKQotICAgICAgICAgICAgZ290byBiYWlsX291dDsKKyAgICAgICAgICAgIGdvdG8gYmFp
bE91dDsKICAgICAgICAgaWYgKGN1cnJQYXJhbVsyXSA9PSAnaScpIHsKICAgICAgICAgICAgIGlm
IChjdXJyUGFyYW1bM10gPT0gJ24nKSB7CiAgICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs2
XSA9PSAnaScpIHsKQEAgLTkzLDExICs5MywxMSBAQCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIFNW
R1ByZXNlcnZlQXNwZWN0CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJQYXJhbVs3
XSA9PSAnZCcpCiAgICAgICAgICAgICAgICAgICAgICAgICBhc3BlY3RSYXRpby5tX2FsaWduID0g
U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNSUQ7CiAgICAgICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbF9vdXQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICBnb3RvIGJhaWxPdXQ7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJy
UGFyYW1bNl0gPT0gJ2EnICYmIGN1cnJQYXJhbVs3XSA9PSAneCcpCiAgICAgICAgICAgICAgICAg
ICAgICBhc3BlY3RSYXRpby5tX2FsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllN
QVg7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgZ290byBiYWls
X291dDsKKyAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbE91dDsKICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGN1cnJQYXJhbVszXSA9PSAnZCcpIHsKICAgICAgICAgICAgICAgICBpZiAoY3Vy
clBhcmFtWzZdID09ICdpJykgewogICAgICAgICAgICAgICAgICAgICBpZiAoY3VyclBhcmFtWzdd
ID09ICduJykKQEAgLTEwNSwxMyArMTA1LDEzIEBAIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8gU1ZH
UHJlc2VydmVBc3BlY3QKICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyclBhcmFtWzdd
ID09ICdkJykKICAgICAgICAgICAgICAgICAgICAgICAgIGFzcGVjdFJhdGlvLm1fYWxpZ24gPSBT
VkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlEWU1JRDsKICAgICAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsX291dDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGdvdG8gYmFpbE91dDsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJQ
YXJhbVs2XSA9PSAnYScgJiYgY3VyclBhcmFtWzddID09ICd4JykKICAgICAgICAgICAgICAgICAg
ICAgYXNwZWN0UmF0aW8ubV9hbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUFY
OwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsX291
dDsKKyAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsT3V0OwogICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgZ290byBiYWlsX291dDsKKyAgICAgICAgICAgICAgICBnb3RvIGJh
aWxPdXQ7CiAgICAgICAgIH0gZWxzZSBpZiAoY3VyclBhcmFtWzJdID09ICdhJyAmJiBjdXJyUGFy
YW1bM10gPT0gJ3gnKSB7CiAgICAgICAgICAgICBpZiAoY3VyclBhcmFtWzZdID09ICdpJykgewog
ICAgICAgICAgICAgICAgIGlmIChjdXJyUGFyYW1bN10gPT0gJ24nKQpAQCAtMTE5LDI2ICsxMTks
MjYgQEAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyBTVkdQcmVzZXJ2ZUFzcGVjdAogICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGN1cnJQYXJhbVs3XSA9PSAnZCcpCiAgICAgICAgICAgICAgICAgICAg
IGFzcGVjdFJhdGlvLm1fYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1JRDsK
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbF9vdXQ7
CisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbE91dDsKICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoY3VyclBhcmFtWzZdID09ICdhJyAmJiBjdXJyUGFyYW1bN10gPT0gJ3gnKQogICAgICAgICAg
ICAgICAgIGFzcGVjdFJhdGlvLm1fYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFY
WU1BWDsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWxfb3V0Owor
ICAgICAgICAgICAgICAgIGdvdG8gYmFpbE91dDsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBnb3RvIGJhaWxfb3V0OworICAgICAgICAgICAgZ290byBiYWlsT3V0OwogICAgICAgICBjdXJy
UGFyYW0gKz0gODsKICAgICAgICAgc2tpcE9wdGlvbmFsU3BhY2VzKGN1cnJQYXJhbSwgZW5kKTsK
ICAgICB9IGVsc2UKLSAgICAgICAgZ290byBiYWlsX291dDsKKyAgICAgICAgZ290byBiYWlsT3V0
OwogCiAgICAgaWYgKGN1cnJQYXJhbSA8IGVuZCkgewogICAgICAgICBpZiAoKmN1cnJQYXJhbSA9
PSAnbScpIHsKICAgICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyUGFyYW0sIGVuZCwgIm1l
ZXQiKSkKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWxfb3V0OworICAgICAgICAgICAgICAgIGdv
dG8gYmFpbE91dDsKICAgICAgICAgICAgIHNraXBPcHRpb25hbFNwYWNlcyhjdXJyUGFyYW0sIGVu
ZCk7CiAgICAgICAgIH0gZWxzZSBpZiAoKmN1cnJQYXJhbSA9PSAncycpIHsKICAgICAgICAgICAg
IGlmICghc2tpcFN0cmluZyhjdXJyUGFyYW0sIGVuZCwgInNsaWNlIikpCi0gICAgICAgICAgICAg
ICAgZ290byBiYWlsX291dDsKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWxPdXQ7CiAgICAgICAg
ICAgICBza2lwT3B0aW9uYWxTcGFjZXMoY3VyclBhcmFtLCBlbmQpOwogICAgICAgICAgICAgaWYg
KGFzcGVjdFJhdGlvLm1fYWxpZ24gIT0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fTk9ORSkKICAg
ICAgICAgICAgICAgICBhc3BlY3RSYXRpby5tX21lZXRPclNsaWNlID0gU1ZHX01FRVRPUlNMSUNF
X1NMSUNFOyAgICAKQEAgLTE0Niw3ICsxNDYsNyBAQCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIFNW
R1ByZXNlcnZlQXNwZWN0CiAgICAgfQogCiAgICAgaWYgKGVuZCAhPSBjdXJyUGFyYW0gJiYgdmFs
aWRhdGUpIHsKLWJhaWxfb3V0OgorYmFpbE91dDoKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0
aGUgdHdvIHZhbHVlcyBiZSBzZXQgdG8gVU5LTk9XTiBpbnN0ZWFkPwogICAgICAgICBhc3BlY3RS
YXRpby5tX2FsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fTk9ORTsKICAgICAgICAgYXNw
ZWN0UmF0aW8ubV9tZWV0T3JTbGljZSA9IFNWR19NRUVUT1JTTElDRV9NRUVUOwpAQCAtMTY0LDgg
KzE2NCw3IEBAIHZvaWQgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6dHJhbnNmb3JtUmUKICAgICBz
d2l0Y2ggKG1fbWVldE9yU2xpY2UpIHsKICAgICBjYXNlIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86
OlNWR19NRUVUT1JTTElDRV9VTktOT1dOOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW86OlNWR19NRUVUT1JTTElDRV9NRUVUOgotICAgIHsKKyAgICBjYXNl
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OlNWR19NRUVUT1JTTElDRV9NRUVUOiB7CiAgICAgICAg
IGZsb2F0IHdpZHRoVG9IZWlnaHRNdWx0aXBsaWVyID0gc3JjUmVjdC5oZWlnaHQoKSAvIHNyY1Jl
Y3Qud2lkdGgoKTsKICAgICAgICAgaWYgKG9yaWdEZXN0SGVpZ2h0ID4gb3JpZ0Rlc3RXaWR0aCAq
IHdpZHRoVG9IZWlnaHRNdWx0aXBsaWVyKSB7CiAgICAgICAgICAgICBkZXN0UmVjdC5zZXRIZWln
aHQob3JpZ0Rlc3RXaWR0aCAqIHdpZHRoVG9IZWlnaHRNdWx0aXBsaWVyKTsKQEAgLTIwMyw4ICsy
MDIsNyBAQCB2b2lkIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnRyYW5zZm9ybVJlCiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
bzo6U1ZHX01FRVRPUlNMSUNFX1NMSUNFOgotICAgIHsKKyAgICBjYXNlIFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW86OlNWR19NRUVUT1JTTElDRV9TTElDRTogewogICAgICAgICBmbG9hdCB3aWR0aFRv
SGVpZ2h0TXVsdGlwbGllciA9IHNyY1JlY3QuaGVpZ2h0KCkgLyBzcmNSZWN0LndpZHRoKCk7CiAg
ICAgICAgIC8vIGlmIHRoZSBkZXN0aW5hdGlvbiBoZWlnaHQgaXMgbGVzcyB0aGFuIHRoZSBoZWln
aHQgb2YgdGhlIGltYWdlIHdlJ2xsIGJlIGRyYXdpbmcKICAgICAgICAgaWYgKG9yaWdEZXN0SGVp
Z2h0IDwgb3JpZ0Rlc3RXaWR0aCAqIHdpZHRoVG9IZWlnaHRNdWx0aXBsaWVyKSB7CkluZGV4OiBX
ZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9T
VkdTVkdFbGVtZW50LmNwcAkocmV2aXNpb24gNzQ2ODApCisrKyBXZWJDb3JlL3N2Zy9TVkdTVkdF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDIwICsxMjksMjAgQEAgdm9pZCBTVkdT
VkdFbGVtZW50OjpzZXRDb250ZW50U3R5bGVUeXBlKAogCiBGbG9hdFJlY3QgU1ZHU1ZHRWxlbWVu
dDo6dmlld3BvcnQoKSBjb25zdAogewotICAgIGRvdWJsZSBfeCA9IDAuMDsKLSAgICBkb3VibGUg
X3kgPSAwLjA7CisgICAgZG91YmxlIHggPSAwOworICAgIGRvdWJsZSB5ID0gMDsKICAgICBpZiAo
IWlzT3V0ZXJtb3N0U1ZHKCkpIHsKLSAgICAgICAgX3ggPSB4KCkudmFsdWUodGhpcyk7Ci0gICAg
ICAgIF95ID0geSgpLnZhbHVlKHRoaXMpOworICAgICAgICB4ID0gdGhpcy0+eCgpLnZhbHVlKHRo
aXMpOworICAgICAgICB5ID0gdGhpcy0+eSgpLnZhbHVlKHRoaXMpOwogICAgIH0KICAgICBmbG9h
dCB3ID0gd2lkdGgoKS52YWx1ZSh0aGlzKTsKICAgICBmbG9hdCBoID0gaGVpZ2h0KCkudmFsdWUo
dGhpcyk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNm
b3JtKHcsIGgpOwogICAgIGRvdWJsZSB3RG91YmxlID0gdzsKICAgICBkb3VibGUgaERvdWJsZSA9
IGg7Ci0gICAgdmlld0JveC5tYXAoX3gsIF95LCBfeCwgX3kpOworICAgIHZpZXdCb3gubWFwKHgs
IHksIHgsIHkpOwogICAgIHZpZXdCb3gubWFwKHcsIGgsIHdEb3VibGUsIGhEb3VibGUpOwotICAg
IHJldHVybiBGbG9hdFJlY3Q6Om5hcnJvd1ByZWNpc2lvbihfeCwgX3ksIHdEb3VibGUsIGhEb3Vi
bGUpOworICAgIHJldHVybiBGbG9hdFJlY3Q6Om5hcnJvd1ByZWNpc2lvbih4LCB5LCB3RG91Ymxl
LCBoRG91YmxlKTsKIH0KIAogaW50IFNWR1NWR0VsZW1lbnQ6OnJlbGF0aXZlV2lkdGhWYWx1ZSgp
IGNvbnN0CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTZXRFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvU1ZHU2V0RWxlbWVudC5oCShyZXZpc2lvbiA3NDY4MCkKKysrIFdlYkNvcmUv
c3ZnL1NWR1NldEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDE0IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIC8vIFNWR0FuaW1hdGVFbGVtZW50IGltcGxlbWVu
dHMgc3VwZXJzZXQgb2YgdGhlIGZ1bmN0aW9uYWxpdHkuCi0gICAgY2xhc3MgU1ZHU2V0RWxlbWVu
dCA6IHB1YmxpYyBTVkdBbmltYXRlRWxlbWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTVkdTZXRFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Kik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBTVkdTZXRFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwotICAgIH07CisvLyBTVkdBbmltYXRlRWxlbWVu
dCBpbXBsZW1lbnRzIHN1cGVyc2V0IG9mIHRoZSBmdW5jdGlvbmFsaXR5LgorY2xhc3MgU1ZHU2V0
RWxlbWVudCA6IHB1YmxpYyBTVkdBbmltYXRlRWxlbWVudCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U1ZHU2V0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOworCitwcml2YXRlOgorICAgIFNWR1NldEVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Kik7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6
IFdlYkNvcmUvc3ZnL1NWR1N0eWxhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZH
U3R5bGFibGUuaAkocmV2aXNpb24gNzQ2ODApCisrKyBXZWJDb3JlL3N2Zy9TVkdTdHlsYWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNywxNiArMjcsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi0gICAgY2xhc3MgQ1NTVmFsdWU7Ci0gICAgY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsK
K2NsYXNzIENTU1ZhbHVlOworY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIAotICAgIGNsYXNz
IFNWR1N0eWxhYmxlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgflNWR1N0eWxhYmxl
KCkgeyB9Ci0KLSAgICAgICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpID0g
MDsKLSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcmVzZW50YXRpb25B
dHRyaWJ1dGUoY29uc3QgU3RyaW5nJikgPSAwOwotICAgIH07CitjbGFzcyBTVkdTdHlsYWJsZSB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+U1ZHU3R5bGFibGUoKSB7IH0KKworICAgIHZpcnR1YWwg
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBnZXRQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgU3RyaW5nJikgPSAwOwor
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTdHls
ZWRMb2NhdGFibGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU3R5bGVk
TG9jYXRhYmxlRWxlbWVudC5oCShyZXZpc2lvbiA3NDY4MCkKKysrIFdlYkNvcmUvc3ZnL1NWR1N0
eWxlZExvY2F0YWJsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMjYgKzI3LDI2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFNWR0VsZW1lbnQ7CitjbGFzcyBT
VkdFbGVtZW50OwogCi0gICAgY2xhc3MgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCA6IHB1Ymxp
YyBTVkdTdHlsZWRFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2aXJ0dWFsIHB1YmxpYyBTVkdMb2NhdGFibGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmly
dHVhbCBTVkdFbGVtZW50KiBuZWFyZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3Q7Ci0gICAgICAg
IHZpcnR1YWwgU1ZHRWxlbWVudCogZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdDsKLQot
ICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBB
bGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0g
Z2V0Q1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKLSAg
ICAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0U2NyZWVuQ1RNKFN0eWxlVXBkYXRlU3Ry
YXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIEFmZmlu
ZVRyYW5zZm9ybSBsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNU
TVNjb3BlIG1vZGUpIGNvbnN0IHsgcmV0dXJuIFNWR0xvY2F0YWJsZTo6bG9jYWxDb29yZGluYXRl
U3BhY2VUcmFuc2Zvcm0obW9kZSk7IH0KLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgU1ZHU3R5
bGVkTG9jYXRhYmxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlZExvY2F0YWJsZSgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB9OworY2xhc3MgU1ZHU3R5bGVkTG9jYXRhYmxlRWxl
bWVudCA6IHB1YmxpYyBTVkdTdHlsZWRFbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZpcnR1YWwgcHVibGljIFNWR0xvY2F0YWJsZSB7CitwdWJsaWM6CisgICAgdmly
dHVhbCBTVkdFbGVtZW50KiBuZWFyZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3Q7CisgICAgdmly
dHVhbCBTVkdFbGVtZW50KiBmYXJ0aGVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0OworCisgICAg
dmlydHVhbCBGbG9hdFJlY3QgZ2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHls
ZVVwZGF0ZSkgY29uc3Q7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFN0eWxl
VXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEFm
ZmluZVRyYW5zZm9ybSBnZXRTY3JlZW5DVE0oU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5
bGVVcGRhdGUpIGNvbnN0OworCisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxDb29y
ZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1TY29wZSBtb2RlKSBjb25zdCB7
IHJldHVybiBTVkdMb2NhdGFibGU6OmxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKG1vZGUp
OyB9CisKK3Byb3RlY3RlZDoKKyAgICBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBp
c1N0eWxlZExvY2F0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KK307CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gNzQ2ODApCisrKyBXZWJDb3JlL3N2Zy9TVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDggKzg4LDcg
QEAgdm9pZCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3luYwogCiBib29sIFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ojppc0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lKQogewotICAgIHJldHVybiBTVkdUcmFuc2Zvcm1hYmxlOjppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKSB8fAotICAgICAgICAgICBTVkdTdHlsZWRMb2NhdGFibGVFbGVt
ZW50Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKTsKKyAgICByZXR1cm4gU1ZHVHJhbnNmb3Jt
YWJsZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkgfHwgU1ZHU3R5bGVkTG9jYXRhYmxlRWxl
bWVudDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSk7CiB9CiAKIFNWR0VsZW1lbnQqIFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpuZWFyZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3QK
SW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1N3aXRjaEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR1N3aXRjaEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3NDY4MCkKKysrIFdlYkNv
cmUvc3ZnL1NWR1N3aXRjaEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYs
MTEgQEAgYm9vbCBTVkdTd2l0Y2hFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZQogICAgIC8vIEZJ
WE1FOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGRvIHdoYXQgdGhlIGNvbW1lbnQgYmVsb3cgaW1w
bGllcyBpdCBkb2VzLgogICAgIC8vIEl0IHdpbGwgY3JlYXRlIGEgcmVuZGVyZXIgZm9yIGFueSB2
YWxpZCBTVkcgZWxlbWVudCBjaGlsZHJlbiwgbm90IGp1c3QgdGhlIGZpcnN0IG9uZS4KIAotICAg
IGZvciAoTm9kZSogbiA9IGZpcnN0Q2hpbGQoKTsgbiAhPSAwOyBuID0gbi0+bmV4dFNpYmxpbmco
KSkgewotICAgICAgICBpZiAobi0+aXNTVkdFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIFNWR0Vs
ZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obik7CisgICAgZm9yIChO
b2RlKiBub2RlID0gZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmco
KSkgeworICAgICAgICBpZiAobm9kZS0+aXNTVkdFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIFNW
R0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSk7CiAgICAg
ICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIChuID09IGNoaWxkKTsgLy8gT25seSBhbGxvdyB0aGlzIGNoaWxkIGlmIGl0J3Mg
dGhlIGZpcnN0IHZhbGlkIGNoaWxkCisgICAgICAgICAgICAgICAgcmV0dXJuIChub2RlID09IGNo
aWxkKTsgLy8gT25seSBhbGxvdyB0aGlzIGNoaWxkIGlmIGl0J3MgdGhlIGZpcnN0IHZhbGlkIGNo
aWxkCiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1Rlc3RzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUZXN0cy5jcHAJKHJldmlzaW9uIDc0NjgwKQor
KysgV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxMCArNzIs
MTIgQEAgYm9vbCBTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cgogICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJlcXVpcmVkRmVhdHVyZXNBdHRyKSB7CiAgICAgICAg
IG1fcmVxdWlyZWRGZWF0dXJlcy52YWx1ZS5yZXNldChhdHRyLT52YWx1ZSgpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJl
cXVpcmVkRXh0ZW5zaW9uc0F0dHIpIHsKKyAgICB9CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6cmVxdWlyZWRFeHRlbnNpb25zQXR0cikgewogICAgICAgICBtX3JlcXVpcmVkRXh0
ZW5zaW9ucy52YWx1ZS5yZXNldChhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN5c3RlbUxhbmd1YWdl
QXR0cikgeworICAgIH0KKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzeXN0ZW1M
YW5ndWFnZUF0dHIpIHsKICAgICAgICAgbV9zeXN0ZW1MYW5ndWFnZS52YWx1ZS5yZXNldChhdHRy
LT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogV2ViQ29yZS9z
dmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9T
VkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3NDY4MCkKKysrIFdlYkNvcmUvc3Zn
L1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMiwxMSArMjIy
LDExIEBAIHZvaWQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzdmdBdHRyaWJ1dGUKIAogYm9vbCBT
VkdUZXh0Q29udGVudEVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiB7Ci0gICAgcmV0dXJuIChhdHRyTmFtZS5tYXRjaGVzKFNWR05hbWVzOjps
ZW5ndGhBZGp1c3RBdHRyKSB8fAotICAgICAgICAgICAgYXR0ck5hbWUubWF0Y2hlcyhTVkdOYW1l
czo6dGV4dExlbmd0aEF0dHIpIHx8Ci0gICAgICAgICAgICBTVkdMYW5nU3BhY2U6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpIHx8Ci0gICAgICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSB8fAotICAgICAgICAgICAgU1ZHU3R5
bGVkRWxlbWVudDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpOworICAgIHJldHVybiBhdHRy
TmFtZS5tYXRjaGVzKFNWR05hbWVzOjpsZW5ndGhBZGp1c3RBdHRyKQorICAgICAgICAgICAgfHwg
YXR0ck5hbWUubWF0Y2hlcyhTVkdOYW1lczo6dGV4dExlbmd0aEF0dHIpCisgICAgICAgICAgICB8
fCBTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCisgICAgICAgICAgICB8
fCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1l
KQorICAgICAgICAgICAgfHwgU1ZHU3R5bGVkRWxlbWVudDo6aXNLbm93bkF0dHJpYnV0ZShhdHRy
TmFtZSk7CiB9CiAKIGJvb2wgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzZWxmSGFzUmVsYXRpdmVM
ZW5ndGhzKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcAkocmV2aXNp
b24gNzQ2ODApCisrKyBXZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNCw5ICsyNCw5IEBACiAjaW5jbHVkZSAiU1ZHVGV4dFBhdGhFbGVtZW50Lmgi
CiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dFBhdGguaCIK
KyNpbmNsdWRlICJTVkdOYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdl
YkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Zn
L1NWR1RleHRQYXRoRWxlbWVudC5oCShyZXZpc2lvbiA3NDY4MCkKKysrIFdlYkNvcmUvc3ZnL1NW
R1RleHRQYXRoRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGVudW0gU1ZHVGV4dFBhdGhNZXRob2RUeXBlIHsKK2Vu
dW0gU1ZHVGV4dFBhdGhNZXRob2RUeXBlIHsKICAgICBTVkdfVEVYVFBBVEhfTUVUSE9EVFlQRV9V
TktOT1dOID0gMCwKICAgICBTVkdfVEVYVFBBVEhfTUVUSE9EVFlQRV9BTElHTiA9IDEsCiAgICAg
U1ZHX1RFWFRQQVRIX01FVEhPRFRZUEVfU1RSRVRDSCA9IDIKSW5kZXg6IFdlYkNvcmUvc3ZnL1NW
R1RpdGxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1RpdGxlRWxlbWVu
dC5oCShyZXZpc2lvbiA3NDY4MCkKKysrIFdlYkNvcmUvc3ZnL1NWR1RpdGxlRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNywyMCArMjcsMjAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0gICAgY2xhc3MgU1ZHVGl0bGVFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSB7Ci0gICAgcHVi
bGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdUaXRsZUVsZW1lbnQ+IGNyZWF0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IFNWR1RpdGxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLQotICAg
ICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGNoaWxk
cmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciA9IGZhbHNlLCBOb2RlKiBiZWZvcmVDaGFu
Z2UgPSAwLCBOb2RlKiBhZnRlckNoYW5nZSA9IDAsIGludCBjaGlsZENvdW50RGVsdGEgPSAwKTsK
K2NsYXNzIFNWR1RpdGxlRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRFbGVtZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U1ZHVGl0bGVFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7CisKK3ByaXZhdGU6CisgICAgU1ZHVGl0bGVFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworCisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50
b0RvY3VtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyID0gZmFs
c2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVyQ2hhbmdlID0gMCwgaW50IGNo
aWxkQ291bnREZWx0YSA9IDApOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVl
ZGVkKFJlbmRlclN0eWxlKikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB9OworICAgIHZpcnR1YWwg
Ym9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKikgeyByZXR1cm4gZmFsc2U7IH0KK307
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHVHJhbnNm
b3JtRGlzdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybURp
c3RhbmNlLmNwcAkocmV2aXNpb24gNzQ2ODApCisrKyBXZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1E
aXN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDIyICs2MSwxOSBAQCBTVkdUcmFuc2Zv
cm1EaXN0YW5jZTo6U1ZHVHJhbnNmb3JtRGlzdGFuCiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNW
R19UUkFOU0ZPUk1fTUFUUklYOgogICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBiZSBhYmxlIHRv
IHN1YnRyYWN0IHRvIG1hdHJpY2VzCiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIFNWR1RyYW5z
Zm9ybTo6U1ZHX1RSQU5TRk9STV9ST1RBVEU6Ci0gICAgeworICAgIGNhc2UgU1ZHVHJhbnNmb3Jt
OjpTVkdfVFJBTlNGT1JNX1JPVEFURTogewogICAgICAgICBGbG9hdFNpemUgY2VudGVyRGlzdGFu
Y2UgPSB0b1NWR1RyYW5zZm9ybS5yb3RhdGlvbkNlbnRlcigpIC0gZnJvbVNWR1RyYW5zZm9ybS5y
b3RhdGlvbkNlbnRlcigpOwogICAgICAgICBtX2FuZ2xlID0gdG9TVkdUcmFuc2Zvcm0uYW5nbGUo
KSAtIGZyb21TVkdUcmFuc2Zvcm0uYW5nbGUoKTsKICAgICAgICAgbV9jeCA9IGNlbnRlckRpc3Rh
bmNlLndpZHRoKCk7CiAgICAgICAgIG1fY3kgPSBjZW50ZXJEaXN0YW5jZS5oZWlnaHQoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9S
TV9UUkFOU0xBVEU6Ci0gICAgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JN
X1RSQU5TTEFURTogewogICAgICAgICBGbG9hdFNpemUgdHJhbnNsYXRpb25EaXN0YW5jZSA9IHRv
U1ZHVHJhbnNmb3JtLnRyYW5zbGF0ZSgpIC0gZnJvbVNWR1RyYW5zZm9ybS50cmFuc2xhdGUoKTsK
ICAgICAgICAgbV90cmFuc2Zvcm0udHJhbnNsYXRlKHRyYW5zbGF0aW9uRGlzdGFuY2Uud2lkdGgo
KSwgdHJhbnNsYXRpb25EaXN0YW5jZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6Ci0gICAgeworICAg
IGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NDQUxFOiB7CiAgICAgICAgIGZsb2F0
IHNjYWxlWCA9IHRvU1ZHVHJhbnNmb3JtLnNjYWxlKCkud2lkdGgoKSAtIGZyb21TVkdUcmFuc2Zv
cm0uc2NhbGUoKS53aWR0aCgpOyAgICAgICAgCiAgICAgICAgIGZsb2F0IHNjYWxlWSA9IHRvU1ZH
VHJhbnNmb3JtLnNjYWxlKCkuaGVpZ2h0KCkgLSBmcm9tU1ZHVHJhbnNmb3JtLnNjYWxlKCkuaGVp
Z2h0KCk7CiAgICAgICAgIG1fdHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShzY2FsZVgsIHNjYWxl
WSk7CkBAIC05OSw4ICs5Niw3IEBAIFNWR1RyYW5zZm9ybURpc3RhbmNlIFNWR1RyYW5zZm9ybURp
c3RhbmMKICAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TQ0FMRToKICAgICBj
YXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg6CiAgICAgICAgIHJldHVybiBT
VkdUcmFuc2Zvcm1EaXN0YW5jZShtX3R5cGUsIG1fYW5nbGUgKiBzY2FsZUZhY3RvciwgbV9jeCAq
IHNjYWxlRmFjdG9yLCBtX2N5ICogc2NhbGVGYWN0b3IsIEFmZmluZVRyYW5zZm9ybShtX3RyYW5z
Zm9ybSkuc2NhbGUoc2NhbGVGYWN0b3IpKTsKLSAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RS
QU5TRk9STV9UUkFOU0xBVEU6Ci0gICAgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJB
TlNGT1JNX1RSQU5TTEFURTogewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3VHJhbnNmb3Jt
KG1fdHJhbnNmb3JtKTsKICAgICAgICAgbmV3VHJhbnNmb3JtLnNldEUobV90cmFuc2Zvcm0uZSgp
ICogc2NhbGVGYWN0b3IpOwogICAgICAgICBuZXdUcmFuc2Zvcm0uc2V0RihtX3RyYW5zZm9ybS5m
KCkgKiBzY2FsZUZhY3Rvcik7CkBAIC0xMjQsOCArMTIwLDcgQEAgU1ZHVHJhbnNmb3JtIFNWR1Ry
YW5zZm9ybURpc3RhbmNlOjphZGRTVgogICAgIHN3aXRjaCAoZmlyc3QudHlwZSgpKSB7CiAgICAg
Y2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVU5LTk9XTjoKICAgICAgICAgcmV0dXJu
IFNWR1RyYW5zZm9ybSgpOwotICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1JP
VEFURToKLSAgICB7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fUk9UQVRF
OiB7CiAgICAgICAgIHRyYW5zZm9ybS5zZXRSb3RhdGUoZmlyc3QuYW5nbGUoKSArIHNlY29uZC5h
bmdsZSgpLCBmaXJzdC5yb3RhdGlvbkNlbnRlcigpLngoKSArIHNlY29uZC5yb3RhdGlvbkNlbnRl
cigpLngoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdC5yb3RhdGlvbkNlbnRl
cigpLnkoKSArIHNlY29uZC5yb3RhdGlvbkNlbnRlcigpLnkoKSk7CiAgICAgICAgIHJldHVybiB0
cmFuc2Zvcm07CkBAIC0xMzMsMTUgKzEyOCwxMyBAQCBTVkdUcmFuc2Zvcm0gU1ZHVHJhbnNmb3Jt
RGlzdGFuY2U6OmFkZFNWCiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fTUFU
UklYOgogICAgICAgICB0cmFuc2Zvcm0uc2V0TWF0cml4KGZpcnN0Lm1hdHJpeCgpICogc2Vjb25k
Lm1hdHJpeCgpKTsKICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybTsKLSAgICBjYXNlIFNWR1RyYW5z
Zm9ybTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU6Ci0gICAgeworICAgIGNhc2UgU1ZHVHJhbnNm
b3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURTogewogICAgICAgICBmbG9hdCBkeCA9IGZpcnN0
LnRyYW5zbGF0ZSgpLngoKSArIHNlY29uZC50cmFuc2xhdGUoKS54KCk7CiAgICAgICAgIGZsb2F0
IGR5ID0gZmlyc3QudHJhbnNsYXRlKCkueSgpICsgc2Vjb25kLnRyYW5zbGF0ZSgpLnkoKTsKICAg
ICAgICAgdHJhbnNmb3JtLnNldFRyYW5zbGF0ZShkeCwgZHkpOwogICAgICAgICByZXR1cm4gdHJh
bnNmb3JtOwogICAgIH0KLSAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TQ0FM
RToKLSAgICB7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6IHsK
ICAgICAgICAgRmxvYXRTaXplIHNjYWxlID0gZmlyc3Quc2NhbGUoKSArIHNlY29uZC5zY2FsZSgp
OwogICAgICAgICB0cmFuc2Zvcm0uc2V0U2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0
KCkpOwogICAgICAgICByZXR1cm4gdHJhbnNmb3JtOwpAQCAtMTc3LDE1ICsxNzAsMTMgQEAgdm9p
ZCBTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6YWRkU1ZHVHJhbnNmbwogICAgICAgICBtX2N4ICs9IGFi
c29sdXRlVmFsdWUgPyBmYWJzZih0cmFuc2Zvcm0ucm90YXRpb25DZW50ZXIoKS54KCkpIDogdHJh
bnNmb3JtLnJvdGF0aW9uQ2VudGVyKCkueCgpOwogICAgICAgICBtX2N5ICs9IGFic29sdXRlVmFs
dWUgPyBmYWJzZih0cmFuc2Zvcm0ucm90YXRpb25DZW50ZXIoKS55KCkpIDogdHJhbnNmb3JtLnJv
dGF0aW9uQ2VudGVyKCkueSgpOwogICAgICAgICAvLyBmYWxsIHRocm91Z2gKLSAgICBjYXNlIFNW
R1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU6Ci0gICAgeworICAgIGNhc2UgU1ZH
VHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURTogewogICAgICAgICBmbG9hdCBkeCA9
IGFic29sdXRlVmFsdWUgPyBmYWJzZih0cmFuc2Zvcm0udHJhbnNsYXRlKCkueCgpKSA6IHRyYW5z
Zm9ybS50cmFuc2xhdGUoKS54KCk7CiAgICAgICAgIGZsb2F0IGR5ID0gYWJzb2x1dGVWYWx1ZSA/
IGZhYnNmKHRyYW5zZm9ybS50cmFuc2xhdGUoKS55KCkpIDogdHJhbnNmb3JtLnRyYW5zbGF0ZSgp
LnkoKTsKICAgICAgICAgbV90cmFuc2Zvcm0udHJhbnNsYXRlKGR4LCBkeSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6
Ci0gICAgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NDQUxFOiB7CiAg
ICAgICAgIGZsb2F0IHNjYWxlWCA9IGFic29sdXRlVmFsdWUgPyBmYWJzZih0cmFuc2Zvcm0uc2Nh
bGUoKS53aWR0aCgpKSA6IHRyYW5zZm9ybS5zY2FsZSgpLndpZHRoKCk7CiAgICAgICAgIGZsb2F0
IHNjYWxlWSA9IGFic29sdXRlVmFsdWUgPyBmYWJzZih0cmFuc2Zvcm0uc2NhbGUoKS5oZWlnaHQo
KSkgOiB0cmFuc2Zvcm0uc2NhbGUoKS5oZWlnaHQoKTsKICAgICAgICAgbV90cmFuc2Zvcm0uc2Nh
bGVOb25Vbmlmb3JtKHNjYWxlWCwgc2NhbGVZKTsKQEAgLTIxMiwyMiArMjAzLDE5IEBAIFNWR1Ry
YW5zZm9ybSBTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6YWRkVG8KICAgICAgICAgcmV0dXJuIFNWR1Ry
YW5zZm9ybSgpOwogICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX01BVFJJWDoK
ICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybSh0cmFuc2Zvcm0ubWF0cml4KCkgKiBtX3RyYW5z
Zm9ybSk7Ci0gICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOgot
ICAgIHsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU6IHsK
ICAgICAgICAgRmxvYXRQb2ludCB0cmFuc2xhdGlvbiA9IHRyYW5zZm9ybS50cmFuc2xhdGUoKTsK
ICAgICAgICAgdHJhbnNsYXRpb24gKz0gRmxvYXRTaXplOjpuYXJyb3dQcmVjaXNpb24obV90cmFu
c2Zvcm0uZSgpLCBtX3RyYW5zZm9ybS5mKCkpOwogICAgICAgICBuZXdUcmFuc2Zvcm0uc2V0VHJh
bnNsYXRlKHRyYW5zbGF0aW9uLngoKSwgdHJhbnNsYXRpb24ueSgpKTsKICAgICAgICAgcmV0dXJu
IG5ld1RyYW5zZm9ybTsKICAgICB9Ci0gICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZP
Uk1fU0NBTEU6Ci0gICAgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1ND
QUxFOiB7CiAgICAgICAgIEZsb2F0U2l6ZSBzY2FsZSA9IHRyYW5zZm9ybS5zY2FsZSgpOwogICAg
ICAgICBzY2FsZSArPSBGbG9hdFNpemU6Om5hcnJvd1ByZWNpc2lvbihtX3RyYW5zZm9ybS5hKCks
IG1fdHJhbnNmb3JtLmQoKSk7CiAgICAgICAgIG5ld1RyYW5zZm9ybS5zZXRTY2FsZShzY2FsZS53
aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybiBuZXdUcmFuc2Zvcm07CiAg
ICAgfQotICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURToKLSAgICB7
CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fUk9UQVRFOiB7CiAgICAgICAg
IC8vIEZJWE1FOiBJJ20gbm90IGNlcnRhaW4gdGhlIHRyYW5zbGF0aW9uIGlzIGNhbGN1bGF0ZWQg
Y29ycmVjdGx5IGhlcmUKICAgICAgICAgRmxvYXRQb2ludCBjZW50ZXIgPSB0cmFuc2Zvcm0ucm90
YXRpb25DZW50ZXIoKTsKICAgICAgICAgbmV3VHJhbnNmb3JtLnNldFJvdGF0ZSh0cmFuc2Zvcm0u
YW5nbGUoKSArIG1fYW5nbGUsCkBAIC0yNDksNyArMjM3LDcgQEAgU1ZHVHJhbnNmb3JtIFNWR1Ry
YW5zZm9ybURpc3RhbmNlOjphZGRUbwogCiBib29sIFNWR1RyYW5zZm9ybURpc3RhbmNlOjppc1pl
cm8oKSBjb25zdAogewotICAgIHJldHVybiAobV90cmFuc2Zvcm0gPT0gQWZmaW5lVHJhbnNmb3Jt
KCkgJiYgbV9hbmdsZSA9PSAwKTsKKyAgICByZXR1cm4gbV90cmFuc2Zvcm0gPT0gQWZmaW5lVHJh
bnNmb3JtKCkgJiYgIW1fYW5nbGU7CiB9CiAKIGZsb2F0IFNWR1RyYW5zZm9ybURpc3RhbmNlOjpk
aXN0YW5jZSgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmNwcAkocmV2aXNpb24g
NzQ2ODApCisrKyBXZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsOCArMjYsOSBAQAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1
ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uaCIKLSNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgorCiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHVVJJUmVmZXJlbmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdVUklSZWZlcmVuY2UuY3BwCShyZXZp
c2lvbiA3NDY4MCkKKysrIFdlYkNvcmUvc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDExICs0OCwxNCBAQCBTdHJpbmcgU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJn
ZXQoY29uc3QgCiAgICAgICAgIHNpemVfdCBzdGFydCA9IHVybC5maW5kKCcjJykgKyAxOwogICAg
ICAgICBzaXplX3QgZW5kID0gdXJsLnJldmVyc2VGaW5kKCcpJyk7CiAgICAgICAgIHJldHVybiB1
cmwuc3Vic3RyaW5nKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0gICAgfSBlbHNlIGlmICh1cmwuZmlu
ZCgnIycpICE9IG5vdEZvdW5kKSB7IC8vIGZvcm1hdCBpcyAjdGFyZ2V0CisgICAgfQorICAgIGlm
ICh1cmwuZmluZCgnIycpICE9IG5vdEZvdW5kKSB7IC8vIGZvcm1hdCBpcyAjdGFyZ2V0CiAgICAg
ICAgIHNpemVfdCBzdGFydCA9IHVybC5maW5kKCcjJykgKyAxOwogICAgICAgICByZXR1cm4gdXJs
LnN1YnN0cmluZyhzdGFydCwgdXJsLmxlbmd0aCgpIC0gc3RhcnQpOwotICAgIH0gZWxzZSAvLyBU
aGUgdXJsIGRvZXNuJ3QgaGF2ZSBhbnkgdGFyZ2V0LgotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgfQorCisgICAgLy8gVGhlIHVybCBkb2Vzbid0IGhhdmUgYW55IHRhcmdldC4KKyAgICBy
ZXR1cm4gU3RyaW5nKCk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5oCShyZXZpc2lv
biA3NDY4MCkKKysrIFdlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCw5ICsyNCw5IEBACiAjaW5jbHVkZSAiU1ZHRm9udEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCi0j
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvc3Zn
L1NWR1ZpZXdTcGVjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5j
cHAJKHJldmlzaW9uIDc0NjgwKQorKysgV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIGJvb2wgU1ZHVmlld1NwZWM6OnBhcnNlVmlld1Nw
ZWMoY29uc3QgU3QKICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBlbmQsIHN2Z1Zp
ZXdTcGVjLCBXVEZfQVJSQVlfTEVOR1RIKHN2Z1ZpZXdTcGVjKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0g
JygnICkKKyAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICco
JykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGN1cnJWaWV3U3BlYysrOwogCkluZGV4OiBX
ZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZH
Wm9vbUFuZFBhbi5oCShyZXZpc2lvbiA3NDY4MCkKKysrIFdlYkNvcmUvc3ZnL1NWR1pvb21BbmRQ
YW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMzEgKzI3LDMxIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotICAgIGNsYXNzIEF0dHJpYnV0ZTsKLSAgICBjbGFzcyBRdWFsaWZpZWROYW1lOwor
Y2xhc3MgQXR0cmlidXRlOworY2xhc3MgUXVhbGlmaWVkTmFtZTsKIAotICAgIGNsYXNzIFNWR1pv
b21BbmRQYW4gewotICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBTVkdab29tQW5kUGFuVHlwZSB7
Ci0gICAgICAgICAgICBTVkdfWk9PTUFORFBBTl9VTktOT1dOID0gMCwKLSAgICAgICAgICAgIFNW
R19aT09NQU5EUEFOX0RJU0FCTEUgPSAxLAotICAgICAgICAgICAgU1ZHX1pPT01BTkRQQU5fTUFH
TklGWSA9IDIKLSAgICAgICAgfTsKLQotICAgICAgICBTVkdab29tQW5kUGFuKCkgOiBtX3pvb21B
bmRQYW4oU1ZHX1pPT01BTkRQQU5fTUFHTklGWSkgeyB9Ci0gICAgICAgIHZpcnR1YWwgflNWR1pv
b21BbmRQYW4oKSB7IH0KLQotICAgICAgICB1bnNpZ25lZCBzaG9ydCB6b29tQW5kUGFuKCkgY29u
c3QgeyByZXR1cm4gbV96b29tQW5kUGFuOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRab29t
QW5kUGFuKHVuc2lnbmVkIHNob3J0IHpvb21BbmRQYW4pOworY2xhc3MgU1ZHWm9vbUFuZFBhbiB7
CitwdWJsaWM6CisgICAgZW51bSBTVkdab29tQW5kUGFuVHlwZSB7CisgICAgICAgIFNWR19aT09N
QU5EUEFOX1VOS05PV04gPSAwLAorICAgICAgICBTVkdfWk9PTUFORFBBTl9ESVNBQkxFID0gMSwK
KyAgICAgICAgU1ZHX1pPT01BTkRQQU5fTUFHTklGWSA9IDIKKyAgICB9OwogCi0gICAgICAgIGJv
b2wgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7Ci0gICAgICAgIGJvb2wgaXNLbm93
bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CisgICAgU1ZHWm9vbUFuZFBhbigpIDog
bV96b29tQW5kUGFuKFNWR19aT09NQU5EUEFOX01BR05JRlkpIHsgfQorICAgIHZpcnR1YWwgflNW
R1pvb21BbmRQYW4oKSB7IH0KIAotICAgICAgICBib29sIHBhcnNlWm9vbUFuZFBhbihjb25zdCBV
Q2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kKTsKKyAgICB1bnNpZ25lZCBzaG9ydCB6b29t
QW5kUGFuKCkgY29uc3QgeyByZXR1cm4gbV96b29tQW5kUGFuOyB9CisgICAgdmlydHVhbCB2b2lk
IHNldFpvb21BbmRQYW4odW5zaWduZWQgc2hvcnQgem9vbUFuZFBhbik7CiAKLSAgICBwcml2YXRl
OgotICAgICAgICB1bnNpZ25lZCBzaG9ydCBtX3pvb21BbmRQYW47Ci0gICAgfTsKKyAgICBib29s
IHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOworICAgIGJvb2wgaXNLbm93bkF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CisKKyAgICBib29sIHBhcnNlWm9vbUFuZFBhbihj
b25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kKTsKKworcHJpdmF0ZToKKyAgICB1
bnNpZ25lZCBzaG9ydCBtX3pvb21BbmRQYW47Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1pvb21FdmVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL1NWR1pvb21FdmVudC5oCShyZXZpc2lvbiA3NDY4MCkKKysrIFdlYkNvcmUvc3ZnL1NW
R1pvb21FdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwzNiArMjgsMzYgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgU1ZHWm9vbUV2ZW50IDogcHVibGljIFVJRXZlbnQg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHWm9vbUV2ZW50PiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU1ZHWm9vbUV2ZW50KTsgfQorY2xhc3MgU1ZH
Wm9vbUV2ZW50IDogcHVibGljIFVJRXZlbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFNWR1pvb21FdmVudD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1pvb21F
dmVudCk7IH0KIAotICAgICAgICAvLyAnU1ZHWm9vbUV2ZW50JyBmdW5jdGlvbnMKLSAgICAgICAg
RmxvYXRSZWN0IHpvb21SZWN0U2NyZWVuKCkgY29uc3Q7CisgICAgLy8gJ1NWR1pvb21FdmVudCcg
ZnVuY3Rpb25zCisgICAgRmxvYXRSZWN0IHpvb21SZWN0U2NyZWVuKCkgY29uc3Q7CiAKLSAgICAg
ICAgZmxvYXQgcHJldmlvdXNTY2FsZSgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldFByZXZpb3Vz
U2NhbGUoZmxvYXQpOworICAgIGZsb2F0IHByZXZpb3VzU2NhbGUoKSBjb25zdDsKKyAgICB2b2lk
IHNldFByZXZpb3VzU2NhbGUoZmxvYXQpOwogCi0gICAgICAgIEZsb2F0UG9pbnQgcHJldmlvdXNU
cmFuc2xhdGUoKSBjb25zdDsKKyAgICBGbG9hdFBvaW50IHByZXZpb3VzVHJhbnNsYXRlKCkgY29u
c3Q7CiAKLSAgICAgICAgZmxvYXQgbmV3U2NhbGUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRO
ZXdTY2FsZShmbG9hdCk7CisgICAgZmxvYXQgbmV3U2NhbGUoKSBjb25zdDsKKyAgICB2b2lkIHNl
dE5ld1NjYWxlKGZsb2F0KTsKIAotICAgICAgICBGbG9hdFBvaW50IG5ld1RyYW5zbGF0ZSgpIGNv
bnN0OworICAgIEZsb2F0UG9pbnQgbmV3VHJhbnNsYXRlKCkgY29uc3Q7CiAKLSAgICBwcml2YXRl
OgotICAgICAgICBTVkdab29tRXZlbnQoKTsKK3ByaXZhdGU6CisgICAgU1ZHWm9vbUV2ZW50KCk7
CiAKLSAgICAgICAgdmlydHVhbCBib29sIGlzU1ZHWm9vbUV2ZW50KCkgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIGlzU1ZHWm9vbUV2ZW50KCkgY29uc3Q7CiAKLSAgICAgICAgZmxvYXQgbV9uZXdT
Y2FsZTsKLSAgICAgICAgZmxvYXQgbV9wcmV2aW91c1NjYWxlOwotICAgICAgICAKLSAgICAgICAg
RmxvYXRSZWN0IG1fem9vbVJlY3RTY3JlZW47Ci0gICAgICAgIAotICAgICAgICBGbG9hdFBvaW50
IG1fbmV3VHJhbnNsYXRlOwotICAgICAgICBGbG9hdFBvaW50IG1fcHJldmlvdXNUcmFuc2xhdGU7
Ci0gICAgfTsKKyAgICBmbG9hdCBtX25ld1NjYWxlOworICAgIGZsb2F0IG1fcHJldmlvdXNTY2Fs
ZTsKKworICAgIEZsb2F0UmVjdCBtX3pvb21SZWN0U2NyZWVuOworCisgICAgRmxvYXRQb2ludCBt
X25ld1RyYW5zbGF0ZTsKKyAgICBGbG9hdFBvaW50IG1fcHJldmlvdXNUcmFuc2xhdGU7Cit9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9T
TUlMVGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1l
LmNwcAkocmV2aXNpb24gNzQ2ODApCisrKyBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIFNNSUxUaW1lIFdlYkNvcmU6Om9w
ZXJhdG9yKihjb25zdCBTTUlMVGkKIHsKICAgICBpZiAoYS5pc1VucmVzb2x2ZWQoKSB8fCBiLmlz
VW5yZXNvbHZlZCgpKQogICAgICAgICByZXR1cm4gU01JTFRpbWU6OnVucmVzb2x2ZWQoKTsKLSAg
ICBpZiAoYS52YWx1ZSgpID09IDAgfHwgYi52YWx1ZSgpID09IDApCisgICAgaWYgKCFhLnZhbHVl
KCkgfHwgIWIudmFsdWUoKSkKICAgICAgICAgcmV0dXJuIFNNSUxUaW1lKDApOwogICAgIGlmIChh
LmlzSW5kZWZpbml0ZSgpIHx8IGIuaXNJbmRlZmluaXRlKCkpCiAgICAgICAgIHJldHVybiBTTUlM
VGltZTo6aW5kZWZpbml0ZSgpOwpJbmRleDogV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmgJKHJldmlz
aW9uIDc0NjgwKQorKysgV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDQxICszMiw0MyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBj
bGFzcyBTTUlMVGltZSB7Ci0gICAgcHVibGljOgotICAgICAgICBTTUlMVGltZSgpIDogbV90aW1l
KDApIHsgfQotICAgICAgICBTTUlMVGltZShkb3VibGUgdGltZSkgOiBtX3RpbWUodGltZSkgeyB9
Ci0gICAgICAgIFNNSUxUaW1lKGNvbnN0IFNNSUxUaW1lJiBvKSA6IG1fdGltZShvLm1fdGltZSkg
eyB9Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgU01JTFRpbWUgdW5yZXNvbHZlZCgpIHsgcmV0
dXJuIHVucmVzb2x2ZWRWYWx1ZTsgfQotICAgICAgICBzdGF0aWMgU01JTFRpbWUgaW5kZWZpbml0
ZSgpIHsgcmV0dXJuIGluZGVmaW5pdGVWYWx1ZTsgfQotICAgICAgICAKLSAgICAgICAgU01JTFRp
bWUmIG9wZXJhdG9yPShjb25zdCBTTUlMVGltZSYgbykgeyBtX3RpbWUgPSBvLm1fdGltZTsgcmV0
dXJuICp0aGlzOyB9Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlt
ZTsgfQotICAgICAgICAKLSAgICAgICAgYm9vbCBpc0Zpbml0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dGltZSA8IGluZGVmaW5pdGVWYWx1ZTsgfQotICAgICAgICBib29sIGlzSW5kZWZpbml0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdGltZSA9PSBpbmRlZmluaXRlVmFsdWU7IH0KLSAgICAgICAgYm9vbCBp
c1VucmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiBtX3RpbWUgPT0gdW5yZXNvbHZlZFZhbHVlOyB9
Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgdW5y
ZXNvbHZlZFZhbHVlOwotICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIGluZGVmaW5pdGVWYWx1
ZTsKLQotICAgICAgICBkb3VibGUgbV90aW1lOwotICAgIH07Ci0KLSAgICBpbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFNNSUxUaW1lJiBhLCBjb25zdCBTTUlMVGltZSYgYikgeyByZXR1cm4g
YS5pc0Zpbml0ZSgpICYmIGEudmFsdWUoKSA9PSBiLnZhbHVlKCk7IH0KLSAgICBpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFNNSUxUaW1lJiBhLCBjb25zdCBTTUlMVGltZSYgYikgeyByZXR1
cm4gIW9wZXJhdG9yPT0oYSwgYik7IH0KLSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3Qg
U01JTFRpbWUmIGEsIGNvbnN0IFNNSUxUaW1lJiBiKSB7IHJldHVybiBhLnZhbHVlKCkgPiBiLnZh
bHVlKCk7IH0KLSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgU01JTFRpbWUmIGEsIGNv
bnN0IFNNSUxUaW1lJiBiKSB7IHJldHVybiBhLnZhbHVlKCkgPCBiLnZhbHVlKCk7IH0KLSAgICBp
bmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFNNSUxUaW1lJiBhLCBjb25zdCBTTUlMVGltZSYg
YikgeyByZXR1cm4gYS52YWx1ZSgpID4gYi52YWx1ZSgpIHx8IG9wZXJhdG9yPT0oYSwgYik7IH0K
LSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFNNSUxUaW1lJiBhLCBjb25zdCBTTUlM
VGltZSYgYikgeyByZXR1cm4gYS52YWx1ZSgpIDwgYi52YWx1ZSgpIHx8IG9wZXJhdG9yPT0oYSwg
Yik7IH0KLQotICAgIFNNSUxUaW1lIG9wZXJhdG9yKyhjb25zdCBTTUlMVGltZSYsIGNvbnN0IFNN
SUxUaW1lJik7Ci0gICAgU01JTFRpbWUgb3BlcmF0b3ItKGNvbnN0IFNNSUxUaW1lJiwgY29uc3Qg
U01JTFRpbWUmKTsKLSAgICAvLyBTbyBtdWx0aXBseWluZyB0aW1lcyBkb2VzIG5vdCBtYWtlIHRv
byBtdWNoIHNlbnNlIGJ1dCBTTUlMIGRlZmluZXMgaXQgZm9yIGR1cmF0aW9uICogcmVwZWF0Q291
bnQKLSAgICBTTUlMVGltZSBvcGVyYXRvciooY29uc3QgU01JTFRpbWUmLCBjb25zdCBTTUlMVGlt
ZSYpOworY2xhc3MgU01JTFRpbWUgeworcHVibGljOgorICAgIFNNSUxUaW1lKCkgOiBtX3RpbWUo
MCkgeyB9CisgICAgU01JTFRpbWUoZG91YmxlIHRpbWUpIDogbV90aW1lKHRpbWUpIHsgfQorICAg
IFNNSUxUaW1lKGNvbnN0IFNNSUxUaW1lJiBvKSA6IG1fdGltZShvLm1fdGltZSkgeyB9CisgICAg
CisgICAgc3RhdGljIFNNSUxUaW1lIHVucmVzb2x2ZWQoKSB7IHJldHVybiB1bnJlc29sdmVkVmFs
dWU7IH0KKyAgICBzdGF0aWMgU01JTFRpbWUgaW5kZWZpbml0ZSgpIHsgcmV0dXJuIGluZGVmaW5p
dGVWYWx1ZTsgfQorICAgIAorICAgIFNNSUxUaW1lJiBvcGVyYXRvcj0oY29uc3QgU01JTFRpbWUm
IG8pIHsgbV90aW1lID0gby5tX3RpbWU7IHJldHVybiAqdGhpczsgfQorICAgIGRvdWJsZSB2YWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZTsgfQorICAgIAorICAgIGJvb2wgaXNGaW5pdGUoKSBj
b25zdCB7IHJldHVybiBtX3RpbWUgPCBpbmRlZmluaXRlVmFsdWU7IH0KKyAgICBib29sIGlzSW5k
ZWZpbml0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZSA9PSBpbmRlZmluaXRlVmFsdWU7IH0KKyAg
ICBib29sIGlzVW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZSA9PSB1bnJlc29sdmVk
VmFsdWU7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSB1bnJlc29s
dmVkVmFsdWU7CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBpbmRlZmluaXRlVmFsdWU7CisKKyAg
ICBkb3VibGUgbV90aW1lOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTTUlM
VGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJuIGEuaXNGaW5pdGUoKSAmJiBhLnZh
bHVlKCkgPT0gYi52YWx1ZSgpOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvciEoY29uc3QgU01JTFRp
bWUmIGEpIHsgcmV0dXJuICFhLmlzRmluaXRlKCkgfHwgIWEudmFsdWUoKTsgfQoraW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBTTUlMVGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0
dXJuICFvcGVyYXRvcj09KGEsIGIpOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgU01J
TFRpbWUmIGEsIGNvbnN0IFNNSUxUaW1lJiBiKSB7IHJldHVybiBhLnZhbHVlKCkgPiBiLnZhbHVl
KCk7IH0KK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBTTUlMVGltZSYgYSwgY29uc3QgU01J
TFRpbWUmIGIpIHsgcmV0dXJuIGEudmFsdWUoKSA8IGIudmFsdWUoKTsgfQoraW5saW5lIGJvb2wg
b3BlcmF0b3I+PShjb25zdCBTTUlMVGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJu
IGEudmFsdWUoKSA+IGIudmFsdWUoKSB8fCBvcGVyYXRvcj09KGEsIGIpOyB9CitpbmxpbmUgYm9v
bCBvcGVyYXRvcjw9KGNvbnN0IFNNSUxUaW1lJiBhLCBjb25zdCBTTUlMVGltZSYgYikgeyByZXR1
cm4gYS52YWx1ZSgpIDwgYi52YWx1ZSgpIHx8IG9wZXJhdG9yPT0oYSwgYik7IH0KKworU01JTFRp
bWUgb3BlcmF0b3IrKGNvbnN0IFNNSUxUaW1lJiwgY29uc3QgU01JTFRpbWUmKTsKK1NNSUxUaW1l
IG9wZXJhdG9yLShjb25zdCBTTUlMVGltZSYsIGNvbnN0IFNNSUxUaW1lJik7CisvLyBTbyBtdWx0
aXBseWluZyB0aW1lcyBkb2VzIG5vdCBtYWtlIHRvbyBtdWNoIHNlbnNlIGJ1dCBTTUlMIGRlZmlu
ZXMgaXQgZm9yIGR1cmF0aW9uICogcmVwZWF0Q291bnQKK1NNSUxUaW1lIG9wZXJhdG9yKihjb25z
dCBTTUlMVGltZSYsIGNvbnN0IFNNSUxUaW1lJik7CisKIH0KIAotI2VuZGlmCi0jZW5kaWYKKyNl
bmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmIC8vIFNNSUxUaW1lX2gKSW5kZXg6IFdlYkNvcmUv
c3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5oCShyZXZpc2lvbiA3NDY4MCkKKysrIFdl
YkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw2MyArMzksNjMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotICAgIGNsYXNz
IFNWR0VsZW1lbnQ7Ci0gICAgY2xhc3MgU1ZHU01JTEVsZW1lbnQ7Ci0gICAgY2xhc3MgU1ZHU1ZH
RWxlbWVudDsKLQotICAgIGNsYXNzIFNNSUxUaW1lQ29udGFpbmVyIDogcHVibGljIFJlZkNvdW50
ZWQ8U01JTFRpbWVDb250YWluZXI+ICB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTTUlMVGltZUNvbnRhaW5lcj4gY3JlYXRlKFNWR1NWR0VsZW1lbnQqIG93bmVyKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgU01JTFRpbWVDb250YWluZXIob3duZXIpKTsgfSAKLSAgICAK
LSAgICAgICAgdm9pZCBzY2hlZHVsZShTVkdTTUlMRWxlbWVudCopOwotICAgICAgICB2b2lkIHVu
c2NoZWR1bGUoU1ZHU01JTEVsZW1lbnQqKTsKLSAgICAgICAgCi0gICAgICAgIFNNSUxUaW1lIGVs
YXBzZWQoKSBjb25zdDsKLQotICAgICAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7Ci0gICAgICAg
IGJvb2wgaXNQYXVzZWQoKSBjb25zdDsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgYmVnaW4oKTsK
LSAgICAgICAgdm9pZCBwYXVzZSgpOwotICAgICAgICB2b2lkIHJlc3VtZSgpOwotICAgICAgICAK
LSAgICAgICAgdm9pZCBzZXREb2N1bWVudE9yZGVySW5kZXhlc0RpcnR5KCkgeyBtX2RvY3VtZW50
T3JkZXJJbmRleGVzRGlydHkgPSB0cnVlOyB9Ci0KLSAgICAgICAgLy8gTW92ZSB0byBhIHNwZWNp
ZmljIHRpbWUuIE9ubHkgdXNlZCBmb3IgRFJUIHRlc3RpbmcgcHVycG9zZXMuCi0gICAgICAgIHZv
aWQgc2FtcGxlQW5pbWF0aW9uQXRUaW1lKGNvbnN0IFN0cmluZyYgZWxlbWVudElkLCBkb3VibGUg
c2Vjb25kcyk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBTTUlMVGltZUNvbnRhaW5lcihTVkdT
VkdFbGVtZW50KiBvd25lcik7Ci0gICAgICAgIAotICAgICAgICB2b2lkIHRpbWVyRmlyZWQoVGlt
ZXI8U01JTFRpbWVDb250YWluZXI+Kik7Ci0gICAgICAgIHZvaWQgc3RhcnRUaW1lcihTTUlMVGlt
ZSBmaXJlVGltZSwgU01JTFRpbWUgbWluaW11bURlbGF5ID0gMCk7Ci0gICAgICAgIHZvaWQgdXBk
YXRlQW5pbWF0aW9ucyhTTUlMVGltZSBlbGFwc2VkKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQg
dXBkYXRlRG9jdW1lbnRPcmRlckluZGV4ZXMoKTsKLSAgICAgICAgdm9pZCBzb3J0QnlQcmlvcml0
eShWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiYgc21pbEVsZW1lbnRzLCBTTUlMVGltZSBlbGFwc2Vk
KTsKLSAgICAgICAgCi0gICAgICAgIHR5cGVkZWYgcGFpcjxTVkdFbGVtZW50KiwgU3RyaW5nPiBF
bGVtZW50QXR0cmlidXRlUGFpcjsKLSAgICAgICAgU3RyaW5nIGJhc2VWYWx1ZUZvcihFbGVtZW50
QXR0cmlidXRlUGFpcik7Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgbV9iZWdpblRpbWU7Ci0g
ICAgICAgIGRvdWJsZSBtX3BhdXNlVGltZTsKLSAgICAgICAgZG91YmxlIG1fYWNjdW11bGF0ZWRQ
YXVzZVRpbWU7Ci0gICAgICAgIGRvdWJsZSBtX25leHRNYW51YWxTYW1wbGVUaW1lOwotICAgICAg
ICBTdHJpbmcgbV9uZXh0U2FtcGxpbmdUYXJnZXQ7Ci0KLSAgICAgICAgYm9vbCBtX2RvY3VtZW50
T3JkZXJJbmRleGVzRGlydHk7Ci0gICAgICAgIAotICAgICAgICBUaW1lcjxTTUlMVGltZUNvbnRh
aW5lcj4gbV90aW1lcjsKLQotICAgICAgICB0eXBlZGVmIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQq
PiBUaW1pbmdFbGVtZW50U2V0OwotICAgICAgICBUaW1pbmdFbGVtZW50U2V0IG1fc2NoZWR1bGVk
QW5pbWF0aW9uczsKLSAgICAgICAgCi0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxFbGVtZW50QXR0
cmlidXRlUGFpciwgU3RyaW5nPiBCYXNlVmFsdWVNYXA7Ci0gICAgICAgIEJhc2VWYWx1ZU1hcCBt
X3NhdmVkQmFzZVZhbHVlczsKK2NsYXNzIFNWR0VsZW1lbnQ7CitjbGFzcyBTVkdTTUlMRWxlbWVu
dDsKK2NsYXNzIFNWR1NWR0VsZW1lbnQ7CisKK2NsYXNzIFNNSUxUaW1lQ29udGFpbmVyIDogcHVi
bGljIFJlZkNvdW50ZWQ8U01JTFRpbWVDb250YWluZXI+ICB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U01JTFRpbWVDb250YWluZXI+IGNyZWF0ZShTVkdTVkdFbGVtZW50KiBvd25l
cikgeyByZXR1cm4gYWRvcHRSZWYobmV3IFNNSUxUaW1lQ29udGFpbmVyKG93bmVyKSk7IH0gCiAK
LSAgICAgICAgU1ZHU1ZHRWxlbWVudCogbV9vd25lclNWR0VsZW1lbnQ7Ci0gICAgfTsKKyAgICB2
b2lkIHNjaGVkdWxlKFNWR1NNSUxFbGVtZW50Kik7CisgICAgdm9pZCB1bnNjaGVkdWxlKFNWR1NN
SUxFbGVtZW50Kik7CisgICAgCisgICAgU01JTFRpbWUgZWxhcHNlZCgpIGNvbnN0OworCisgICAg
Ym9vbCBpc0FjdGl2ZSgpIGNvbnN0OworICAgIGJvb2wgaXNQYXVzZWQoKSBjb25zdDsKKyAgICAK
KyAgICB2b2lkIGJlZ2luKCk7CisgICAgdm9pZCBwYXVzZSgpOworICAgIHZvaWQgcmVzdW1lKCk7
CisgICAgCisgICAgdm9pZCBzZXREb2N1bWVudE9yZGVySW5kZXhlc0RpcnR5KCkgeyBtX2RvY3Vt
ZW50T3JkZXJJbmRleGVzRGlydHkgPSB0cnVlOyB9CisKKyAgICAvLyBNb3ZlIHRvIGEgc3BlY2lm
aWMgdGltZS4gT25seSB1c2VkIGZvciBEUlQgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICB2b2lkIHNh
bXBsZUFuaW1hdGlvbkF0VGltZShjb25zdCBTdHJpbmcmIGVsZW1lbnRJZCwgZG91YmxlIHNlY29u
ZHMpOworCitwcml2YXRlOgorICAgIFNNSUxUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQqIG93
bmVyKTsKKyAgICAKKyAgICB2b2lkIHRpbWVyRmlyZWQoVGltZXI8U01JTFRpbWVDb250YWluZXI+
Kik7CisgICAgdm9pZCBzdGFydFRpbWVyKFNNSUxUaW1lIGZpcmVUaW1lLCBTTUlMVGltZSBtaW5p
bXVtRGVsYXkgPSAwKTsKKyAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMoU01JTFRpbWUgZWxhcHNl
ZCk7CisgICAgCisgICAgdm9pZCB1cGRhdGVEb2N1bWVudE9yZGVySW5kZXhlcygpOworICAgIHZv
aWQgc29ydEJ5UHJpb3JpdHkoVmVjdG9yPFNWR1NNSUxFbGVtZW50Kj4mIHNtaWxFbGVtZW50cywg
U01JTFRpbWUgZWxhcHNlZCk7CisgICAgCisgICAgdHlwZWRlZiBwYWlyPFNWR0VsZW1lbnQqLCBT
dHJpbmc+IEVsZW1lbnRBdHRyaWJ1dGVQYWlyOworICAgIFN0cmluZyBiYXNlVmFsdWVGb3IoRWxl
bWVudEF0dHJpYnV0ZVBhaXIpOworICAgIAorICAgIGRvdWJsZSBtX2JlZ2luVGltZTsKKyAgICBk
b3VibGUgbV9wYXVzZVRpbWU7CisgICAgZG91YmxlIG1fYWNjdW11bGF0ZWRQYXVzZVRpbWU7Cisg
ICAgZG91YmxlIG1fbmV4dE1hbnVhbFNhbXBsZVRpbWU7CisgICAgU3RyaW5nIG1fbmV4dFNhbXBs
aW5nVGFyZ2V0OworCisgICAgYm9vbCBtX2RvY3VtZW50T3JkZXJJbmRleGVzRGlydHk7CisgICAg
CisgICAgVGltZXI8U01JTFRpbWVDb250YWluZXI+IG1fdGltZXI7CisKKyAgICB0eXBlZGVmIEhh
c2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiBUaW1pbmdFbGVtZW50U2V0OworICAgIFRpbWluZ0VsZW1l
bnRTZXQgbV9zY2hlZHVsZWRBbmltYXRpb25zOworICAgIAorICAgIHR5cGVkZWYgSGFzaE1hcDxF
bGVtZW50QXR0cmlidXRlUGFpciwgU3RyaW5nPiBCYXNlVmFsdWVNYXA7CisgICAgQmFzZVZhbHVl
TWFwIG1fc2F2ZWRCYXNlVmFsdWVzOworCisgICAgU1ZHU1ZHRWxlbWVudCogbV9vd25lclNWR0Vs
ZW1lbnQ7Cit9OwogfQogCi0jZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShTVkcpCisj
ZW5kaWYgLy8gU01JTFRpbWVDb250YWluZXJfaApJbmRleDogV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NWR1NNSUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9hbmltYXRpb24v
U1ZHU01JTEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3NDY4MCkKKysrIFdlYkNvcmUvc3ZnL2FuaW1h
dGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDggKzkyLDcgQEAg
cHJpdmF0ZToKIGJvb2wgQ29uZGl0aW9uRXZlbnRMaXN0ZW5lcjo6b3BlcmF0b3I9PShjb25zdCBF
dmVudExpc3RlbmVyJiBsaXN0ZW5lcikKIHsKICAgICBpZiAoY29uc3QgQ29uZGl0aW9uRXZlbnRM
aXN0ZW5lciogY29uZGl0aW9uRXZlbnRMaXN0ZW5lciA9IENvbmRpdGlvbkV2ZW50TGlzdGVuZXI6
OmNhc3QoJmxpc3RlbmVyKSkKLSAgICAgICAgcmV0dXJuIG1fYW5pbWF0aW9uID09IGNvbmRpdGlv
bkV2ZW50TGlzdGVuZXItPm1fYW5pbWF0aW9uICYmCi0gICAgICAgICAgICAgICBtX2NvbmRpdGlv
biA9PSBjb25kaXRpb25FdmVudExpc3RlbmVyLT5tX2NvbmRpdGlvbjsKKyAgICAgICAgcmV0dXJu
IG1fYW5pbWF0aW9uID09IGNvbmRpdGlvbkV2ZW50TGlzdGVuZXItPm1fYW5pbWF0aW9uICYmIG1f
Y29uZGl0aW9uID09IGNvbmRpdGlvbkV2ZW50TGlzdGVuZXItPm1fY29uZGl0aW9uOwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIApAQCAtNjE0LDcgKzYxMyw3IEBAIFNNSUxUaW1lIFNWR1NNSUxFbGVt
ZW50OjpyZXBlYXRpbmdEdXJhdGkKICAgICBTTUlMVGltZSByZXBlYXRDb3VudCA9IHRoaXMtPnJl
cGVhdENvdW50KCk7CiAgICAgU01JTFRpbWUgcmVwZWF0RHVyID0gdGhpcy0+cmVwZWF0RHVyKCk7
CiAgICAgU01JTFRpbWUgc2ltcGxlRHVyYXRpb24gPSB0aGlzLT5zaW1wbGVEdXJhdGlvbigpOwot
ICAgIGlmIChzaW1wbGVEdXJhdGlvbiA9PSAwIHx8IChyZXBlYXREdXIuaXNVbnJlc29sdmVkKCkg
JiYgcmVwZWF0Q291bnQuaXNVbnJlc29sdmVkKCkpKQorICAgIGlmICghc2ltcGxlRHVyYXRpb24g
fHwgKHJlcGVhdER1ci5pc1VucmVzb2x2ZWQoKSAmJiByZXBlYXRDb3VudC5pc1VucmVzb2x2ZWQo
KSkpCiAgICAgICAgIHJldHVybiBzaW1wbGVEdXJhdGlvbjsKICAgICBTTUlMVGltZSByZXBlYXRD
b3VudER1cmF0aW9uID0gc2ltcGxlRHVyYXRpb24gKiByZXBlYXRDb3VudDsKICAgICByZXR1cm4g
bWluKHJlcGVhdENvdW50RHVyYXRpb24sIG1pbihyZXBlYXREdXIsIFNNSUxUaW1lOjppbmRlZmlu
aXRlKCkpKTsKQEAgLTY3MCwxMCArNjY5LDExIEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OnJlc29s
dmVJbnRlcnZhbChib28KICAgICAgICAgICAgIGJlZ2luUmVzdWx0ID0gdGVtcEJlZ2luOwogICAg
ICAgICAgICAgZW5kUmVzdWx0ID0gdGVtcEVuZDsKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfSBlbHNlIGlmIChyZXN0YXJ0KCkgPT0gUmVzdGFydE5ldmVyKQorICAgICAgICB9CisgICAg
ICAgIGlmIChyZXN0YXJ0KCkgPT0gUmVzdGFydE5ldmVyKQogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJlZ2luQWZ0ZXIgPSB0ZW1wRW5kOworCisgICAgICAg
IGJlZ2luQWZ0ZXIgPSB0ZW1wRW5kOwogICAgICAgICBsYXN0SW50ZXJ2YWxUZW1wRW5kID0gdGVt
cEVuZDsKICAgICB9CiAgICAgYmVnaW5SZXN1bHQgPSBTTUlMVGltZTo6dW5yZXNvbHZlZCgpOwpA
QCAtNzg3LDcgKzc4Nyw3IEBAIGZsb2F0IFNWR1NNSUxFbGVtZW50OjpjYWxjdWxhdGVBbmltYXRp
b24KICAgICAgICAgcmVwZWF0ID0gMDsKICAgICAgICAgcmV0dXJuIDAuZjsKICAgICB9Ci0gICAg
aWYgKHNpbXBsZUR1cmF0aW9uID09IDApIHsKKyAgICBpZiAoIXNpbXBsZUR1cmF0aW9uKSB7CiAg
ICAgICAgIHJlcGVhdCA9IDA7CiAgICAgICAgIHJldHVybiAxLmY7CiAgICAgfQpAQCAtNzk3LDcg
Kzc5Nyw3IEBAIGZsb2F0IFNWR1NNSUxFbGVtZW50OjpjYWxjdWxhdGVBbmltYXRpb24KICAgICBT
TUlMVGltZSByZXBlYXRpbmdEdXJhdGlvbiA9IHRoaXMtPnJlcGVhdGluZ0R1cmF0aW9uKCk7CiAg
ICAgaWYgKGVsYXBzZWQgPj0gbV9pbnRlcnZhbEVuZCB8fCBhY3RpdmVUaW1lID4gcmVwZWF0aW5n
RHVyYXRpb24pIHsKICAgICAgICAgcmVwZWF0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlcGVh
dGluZ0R1cmF0aW9uLnZhbHVlKCkgLyBzaW1wbGVEdXJhdGlvbi52YWx1ZSgpKTsKLSAgICAgICAg
aWYgKGZtb2QocmVwZWF0aW5nRHVyYXRpb24udmFsdWUoKSwgc2ltcGxlRHVyYXRpb24udmFsdWUo
KSA9PSAwLikpCisgICAgICAgIGlmIChmbW9kKHJlcGVhdGluZ0R1cmF0aW9uLnZhbHVlKCksICFz
aW1wbGVEdXJhdGlvbi52YWx1ZSgpKSkKICAgICAgICAgICAgIHJlcGVhdC0tOwogICAgICAgICBy
ZXR1cm4gMS5mOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVu
dC5oCShyZXZpc2lvbiA3NDY4MCkKKysrIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxNzUgKzIzLDE3NCBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCiAgKi8KIAotCiAjaWZuZGVmIFNWR1NNSUxFbGVtZW50X2gKICNkZWZpbmUgU1ZHU01JTEVs
ZW1lbnRfaAogI2lmIEVOQUJMRShTVkdfQU5JTUFUSU9OKQotCi0jaW5jbHVkZSAiU1ZHRWxlbWVu
dC5oIgogI2luY2x1ZGUgIlNNSUxUaW1lLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorCiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotICAg
IGNsYXNzIENvbmRpdGlvbkV2ZW50TGlzdGVuZXI7Ci0gICAgY2xhc3MgU01JTFRpbWVDb250YWlu
ZXI7CitjbGFzcyBDb25kaXRpb25FdmVudExpc3RlbmVyOworY2xhc3MgU01JTFRpbWVDb250YWlu
ZXI7CisKKy8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTTUlMIGludGVydmFsIHRpbWluZyBtb2Rl
bCBhcyBuZWVkZWQgZm9yIFNWRyBhbmltYXRpb24uCitjbGFzcyBTVkdTTUlMRWxlbWVudCA6IHB1
YmxpYyBTVkdFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBTVkdTTUlMRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5TVkdTTUlMRWxlbWVudCgpOwor
CisgICAgc3RhdGljIGJvb2wgaXNTTUlMRWxlbWVudChOb2RlKik7CisKKyAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CisgICAgdmlydHVhbCB2b2lkIGF0
dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiwgYm9vbCBwcmVzZXJ2ZURlY2xzKTsKKyAgICB2aXJ0
dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
ZEZyb21Eb2N1bWVudCgpOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4o
KTsKKworICAgIFNNSUxUaW1lQ29udGFpbmVyKiB0aW1lQ29udGFpbmVyKCkgY29uc3QgeyByZXR1
cm4gbV90aW1lQ29udGFpbmVyLmdldCgpOyB9CisKKyAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVt
ZW50KCkgY29uc3Q7CisgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUoKSBjb25zdDsKKworICAgIHZv
aWQgYmVnaW5CeUxpbmtBY3RpdmF0aW9uKCk7CisKKyAgICBlbnVtIFJlc3RhcnQgeyBSZXN0YXJ0
QWx3YXlzLCBSZXN0YXJ0V2hlbk5vdEFjdGl2ZSwgUmVzdGFydE5ldmVyIH07CisgICAgUmVzdGFy
dCByZXN0YXJ0KCkgY29uc3Q7CisKKyAgICBlbnVtIEZpbGxNb2RlIHsgRmlsbFJlbW92ZSwgRmls
bEZyZWV6ZSB9OworICAgIEZpbGxNb2RlIGZpbGwoKSBjb25zdDsKKworICAgIFN0cmluZyB4bGlu
a0hyZWYoKSBjb25zdDsKKworICAgIFNNSUxUaW1lIGR1cigpIGNvbnN0OworICAgIFNNSUxUaW1l
IHJlcGVhdER1cigpIGNvbnN0OworICAgIFNNSUxUaW1lIHJlcGVhdENvdW50KCkgY29uc3Q7Cisg
ICAgU01JTFRpbWUgbWF4VmFsdWUoKSBjb25zdDsKKyAgICBTTUlMVGltZSBtaW5WYWx1ZSgpIGNv
bnN0OworCisgICAgU01JTFRpbWUgZWxhcHNlZCgpIGNvbnN0OyAKKworICAgIFNNSUxUaW1lIGlu
dGVydmFsQmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2ludGVydmFsQmVnaW47IH0KKyAgICBTTUlM
VGltZSBpbnRlcnZhbEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJ2YWxFbmQ7IH0KKyAgICBT
TUlMVGltZSBwcmV2aW91c0ludGVydmFsQmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3ByZXZpb3Vz
SW50ZXJ2YWxCZWdpbjsgfQorICAgIFNNSUxUaW1lIHNpbXBsZUR1cmF0aW9uKCkgY29uc3Q7CisK
KyAgICB2b2lkIHByb2dyZXNzKFNNSUxUaW1lIGVsYXBzZWQsIFNWR1NNSUxFbGVtZW50KiByZXN1
bHRzRWxlbWVudCk7CisgICAgU01JTFRpbWUgbmV4dFByb2dyZXNzVGltZSgpIGNvbnN0OworCisg
ICAgc3RhdGljIFNNSUxUaW1lIHBhcnNlQ2xvY2tWYWx1ZShjb25zdCBTdHJpbmcmKTsKKyAgICBz
dGF0aWMgU01JTFRpbWUgcGFyc2VPZmZzZXRWYWx1ZShjb25zdCBTdHJpbmcmKTsKKworICAgIGJv
b2wgaXNDb250cmlidXRpbmcoU01JTFRpbWUgZWxhcHNlZCkgY29uc3Q7CisgICAgYm9vbCBpc0lu
YWN0aXZlKCkgY29uc3Q7CisgICAgYm9vbCBpc0Zyb3plbigpIGNvbnN0OworCisgICAgdW5zaWdu
ZWQgZG9jdW1lbnRPcmRlckluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudE9yZGVySW5k
ZXg7IH0KKyAgICB2b2lkIHNldERvY3VtZW50T3JkZXJJbmRleCh1bnNpZ25lZCBpbmRleCkgeyBt
X2RvY3VtZW50T3JkZXJJbmRleCA9IGluZGV4OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNBZGRp
dGl2ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXRUb0Jhc2VWYWx1ZShjb25z
dCBTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5UmVzdWx0c1RvVGFyZ2V0KCkg
PSAwOwogCi0gICAgLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFNNSUwgaW50ZXJ2YWwgdGltaW5n
IG1vZGVsIGFzIG5lZWRlZCBmb3IgU1ZHIGFuaW1hdGlvbi4KLSAgICBjbGFzcyBTVkdTTUlMRWxl
bWVudCA6IHB1YmxpYyBTVkdFbGVtZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFNWR1NNSUxF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwotICAgICAgICB2aXJ0dWFs
IH5TVkdTTUlMRWxlbWVudCgpOwotICAgICAgICAKLSAgICAgICAgc3RhdGljIGJvb2wgaXNTTUlM
RWxlbWVudChOb2RlKiBub2RlKTsKLSAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGF0dHJp
YnV0ZUNoYW5nZWQoQXR0cmlidXRlKiwgYm9vbCBwcmVzZXJ2ZURlY2xzKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5n
Q2hpbGRyZW4oKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgU01JTFRpbWVDb250YWluZXIq
IHRpbWVDb250YWluZXIoKSBjb25zdCB7IHJldHVybiBtX3RpbWVDb250YWluZXIuZ2V0KCk7IH0K
LQotICAgICAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KCkgY29uc3Q7Ci0gICAgICAgIFN0
cmluZyBhdHRyaWJ1dGVOYW1lKCkgY29uc3Q7Ci0gICAgICAgIAotICAgICAgICB2b2lkIGJlZ2lu
QnlMaW5rQWN0aXZhdGlvbigpOwotCi0gICAgICAgIGVudW0gUmVzdGFydCB7IFJlc3RhcnRBbHdh
eXMsIFJlc3RhcnRXaGVuTm90QWN0aXZlLCBSZXN0YXJ0TmV2ZXIgfTsKLSAgICAgICAgUmVzdGFy
dCByZXN0YXJ0KCkgY29uc3Q7Ci0gICAgICAgIAotICAgICAgICBlbnVtIEZpbGxNb2RlIHsgRmls
bFJlbW92ZSwgRmlsbEZyZWV6ZSB9OwotICAgICAgICBGaWxsTW9kZSBmaWxsKCkgY29uc3Q7Ci0g
ICAgICAgIAotICAgICAgICBTdHJpbmcgeGxpbmtIcmVmKCkgY29uc3Q7Ci0gICAgICAgIAotICAg
ICAgICBTTUlMVGltZSBkdXIoKSBjb25zdDsKLSAgICAgICAgU01JTFRpbWUgcmVwZWF0RHVyKCkg
Y29uc3Q7Ci0gICAgICAgIFNNSUxUaW1lIHJlcGVhdENvdW50KCkgY29uc3Q7Ci0gICAgICAgIFNN
SUxUaW1lIG1heFZhbHVlKCkgY29uc3Q7Ci0gICAgICAgIFNNSUxUaW1lIG1pblZhbHVlKCkgY29u
c3Q7Ci0gICAgICAgIAotICAgICAgICBTTUlMVGltZSBlbGFwc2VkKCkgY29uc3Q7IAotICAgICAg
ICAKLSAgICAgICAgU01JTFRpbWUgaW50ZXJ2YWxCZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faW50
ZXJ2YWxCZWdpbjsgfQotICAgICAgICBTTUlMVGltZSBpbnRlcnZhbEVuZCgpIGNvbnN0IHsgcmV0
dXJuIG1faW50ZXJ2YWxFbmQ7IH0KLSAgICAgICAgU01JTFRpbWUgcHJldmlvdXNJbnRlcnZhbEJl
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9wcmV2aW91c0ludGVydmFsQmVnaW47IH0KLSAgICAgICAg
U01JTFRpbWUgc2ltcGxlRHVyYXRpb24oKSBjb25zdDsKLSAgICAgICAgCi0gICAgICAgIHZvaWQg
cHJvZ3Jlc3MoU01JTFRpbWUgZWxhcHNlZCwgU1ZHU01JTEVsZW1lbnQqIHJlc3VsdHNFbGVtZW50
KTsKLSAgICAgICAgU01JTFRpbWUgbmV4dFByb2dyZXNzVGltZSgpIGNvbnN0OwotICAgICAgICAK
LSAgICAgICAgc3RhdGljIFNNSUxUaW1lIHBhcnNlQ2xvY2tWYWx1ZShjb25zdCBTdHJpbmcmKTsK
LSAgICAgICAgc3RhdGljIFNNSUxUaW1lIHBhcnNlT2Zmc2V0VmFsdWUoY29uc3QgU3RyaW5nJik7
Ci0gICAgICAgIAotICAgICAgICBib29sIGlzQ29udHJpYnV0aW5nKFNNSUxUaW1lIGVsYXBzZWQp
IGNvbnN0OwotICAgICAgICBib29sIGlzSW5hY3RpdmUoKSBjb25zdDsKLSAgICAgICAgYm9vbCBp
c0Zyb3plbigpIGNvbnN0OwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgZG9jdW1lbnRPcmRl
ckluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudE9yZGVySW5kZXg7IH0KLSAgICAgICAg
dm9pZCBzZXREb2N1bWVudE9yZGVySW5kZXgodW5zaWduZWQgaW5kZXgpIHsgbV9kb2N1bWVudE9y
ZGVySW5kZXggPSBpbmRleDsgfQotICAgICAgICAKLSAgICAgICAgdmlydHVhbCBib29sIGlzQWRk
aXRpdmUoKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZXNldFRvQmFzZVZhbHVl
KGNvbnN0IFN0cmluZyYpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFwcGx5UmVzdWx0c1Rv
VGFyZ2V0KCkgPSAwOwotICAgICAgICAKIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBhZGRCZWdp
blRpbWUoU01JTFRpbWUgdGltZSk7Ci0gICAgICAgIHZvaWQgYWRkRW5kVGltZShTTUlMVGltZSB0
aW1lKTsKLSAgICAgICAgCisgICAgdm9pZCBhZGRCZWdpblRpbWUoU01JTFRpbWUpOworICAgIHZv
aWQgYWRkRW5kVGltZShTTUlMVGltZSk7CisKIHByaXZhdGU6Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVBbmltYXRpb24oZmxvYXQgcGVyY2VudCwgdW5zaWduZWQgcmVwZWF0LCBTVkdTTUlMRWxlbWVu
dCogcmVzdWx0RWxlbWVudCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZW5kZWRBY3RpdmVJ
bnRlcnZhbCgpID0gMDsKLSAgICAgICAgCi0gICAgICAgIGVudW0gQmVnaW5PckVuZCB7IEJlZ2lu
LCBFbmQgfTsKLSAgICAgICAgU01JTFRpbWUgZmluZEluc3RhbmNlVGltZShCZWdpbk9yRW5kIGJl
Z2luT3JFbmQsIFNNSUxUaW1lIG1pbmltdW1UaW1lLCBib29sIGVxdWFsc01pbmltdW1PSykgY29u
c3Q7Ci0gICAgICAgIHZvaWQgcmVzb2x2ZUZpcnN0SW50ZXJ2YWwoKTsKLSAgICAgICAgdm9pZCBy
ZXNvbHZlTmV4dEludGVydmFsKCk7Ci0gICAgICAgIHZvaWQgcmVzb2x2ZUludGVydmFsKGJvb2wg
Zmlyc3QsIFNNSUxUaW1lJiBiZWdpblJlc3VsdCwgU01JTFRpbWUmIGVuZFJlc3VsdCkgY29uc3Q7
Ci0gICAgICAgIFNNSUxUaW1lIHJlc29sdmVBY3RpdmVFbmQoU01JTFRpbWUgcmVzb2x2ZWRCZWdp
biwgU01JTFRpbWUgcmVzb2x2ZWRFbmQpIGNvbnN0OwotICAgICAgICBTTUlMVGltZSByZXBlYXRp
bmdEdXJhdGlvbigpIGNvbnN0OwotICAgICAgICB2b2lkIGNoZWNrUmVzdGFydChTTUlMVGltZSBl
bGFwc2VkKTsKLSAgICAgICAgdm9pZCBiZWdpbkxpc3RDaGFuZ2VkKCk7Ci0gICAgICAgIHZvaWQg
ZW5kTGlzdENoYW5nZWQoKTsKLSAgICAgICAgdm9pZCByZXNjaGVkdWxlKCk7Ci0KLSAgICAgICAg
Ly8gVGhpcyByZXByZXNlbnRzIGNvbmRpdGlvbnMgb24gZWxlbWVudHMgYmVnaW4gb3IgZW5kIGxp
c3QgdGhhdCBuZWVkIHRvIGJlIHJlc29sdmVkIG9uIHJ1bnRpbWUKLSAgICAgICAgLy8gZm9yIGV4
YW1wbGUgPGFuaW1hdGUgYmVnaW49Im90aGVyRWxlbWVudC5iZWdpbiArIDhzOyBidXR0b24uY2xp
Y2siIC4uLiAvPgotICAgICAgICBzdHJ1Y3QgQ29uZGl0aW9uIHsKLSAgICAgICAgICAgIGVudW0g
VHlwZSB7IEV2ZW50QmFzZSwgU3luY2Jhc2UsIEFjY2Vzc0tleSB9OwotICAgICAgICAgICAgQ29u
ZGl0aW9uKFR5cGUsIEJlZ2luT3JFbmQgYmVnaW5PckVuZCwgY29uc3QgU3RyaW5nJiBiYXNlSUQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgU01JTFRpbWUgb2Zmc2V0LCBpbnQgcmVwZWF0cyA9IC0xKTsK
LSAgICAgICAgICAgIFR5cGUgbV90eXBlOwotICAgICAgICAgICAgQmVnaW5PckVuZCBtX2JlZ2lu
T3JFbmQ7Ci0gICAgICAgICAgICBTdHJpbmcgbV9iYXNlSUQ7Ci0gICAgICAgICAgICBTdHJpbmcg
bV9uYW1lOwotICAgICAgICAgICAgU01JTFRpbWUgbV9vZmZzZXQ7Ci0gICAgICAgICAgICBpbnQg
bV9yZXBlYXRzOwotICAgICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fc3luY2Jhc2U7Ci0gICAg
ICAgICAgICBSZWZQdHI8Q29uZGl0aW9uRXZlbnRMaXN0ZW5lcj4gbV9ldmVudExpc3RlbmVyOwot
ICAgICAgICB9OwotICAgICAgICBib29sIHBhcnNlQ29uZGl0aW9uKGNvbnN0IFN0cmluZyYsIEJl
Z2luT3JFbmQgYmVnaW5PckVuZCk7Ci0gICAgICAgIHZvaWQgcGFyc2VCZWdpbk9yRW5kKGNvbnN0
IFN0cmluZyYsIEJlZ2luT3JFbmQgYmVnaW5PckVuZCk7Ci0gICAgICAgIEVsZW1lbnQqIGV2ZW50
QmFzZUZvcihjb25zdCBDb25kaXRpb24mKSBjb25zdDsKLQotICAgICAgICB2b2lkIGNvbm5lY3RD
b25kaXRpb25zKCk7Ci0gICAgICAgIHZvaWQgZGlzY29ubmVjdENvbmRpdGlvbnMoKTsKLSAgICAg
ICAgCi0gICAgICAgIC8vIEV2ZW50IGJhc2UgdGltaW5nCi0gICAgICAgIHZvaWQgaGFuZGxlQ29u
ZGl0aW9uRXZlbnQoRXZlbnQqLCBDb25kaXRpb24qKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFN5
bmNiYXNlIHRpbWluZwotICAgICAgICBlbnVtIE5ld09yRXhpc3RpbmdJbnRlcnZhbCB7IE5ld0lu
dGVydmFsLCBFeGlzdGluZ0ludGVydmFsIH07IAotICAgICAgICB2b2lkIG5vdGlmeURlcGVuZGVu
dHNJbnRlcnZhbENoYW5nZWQoTmV3T3JFeGlzdGluZ0ludGVydmFsKTsKLSAgICAgICAgdm9pZCBj
cmVhdGVJbnN0YW5jZVRpbWVzRnJvbVN5bmNiYXNlKFNWR1NNSUxFbGVtZW50KiBzeW5jYmFzZSwg
TmV3T3JFeGlzdGluZ0ludGVydmFsKTsKLSAgICAgICAgdm9pZCBhZGRUaW1lRGVwZW5kZW50KFNW
R1NNSUxFbGVtZW50Kik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlVGltZURlcGVuZGVudChTVkdTTUlM
RWxlbWVudCopOwotICAgICAgICAKLSAgICAgICAgZW51bSBBY3RpdmVTdGF0ZSB7IEluYWN0aXZl
LCBBY3RpdmUsIEZyb3plbiB9OwotICAgICAgICBBY3RpdmVTdGF0ZSBkZXRlcm1pbmVBY3RpdmVT
dGF0ZShTTUlMVGltZSBlbGFwc2VkKSBjb25zdDsKLSAgICAgICAgZmxvYXQgY2FsY3VsYXRlQW5p
bWF0aW9uUGVyY2VudEFuZFJlcGVhdChTTUlMVGltZSBlbGFwc2VkLCB1bnNpZ25lZCYgcmVwZWF0
KSBjb25zdDsKLSAgICAgICAgU01JTFRpbWUgY2FsY3VsYXRlTmV4dFByb2dyZXNzVGltZShTTUlM
VGltZSBlbGFwc2VkKSBjb25zdDsKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxDb25kaXRpb24+
IG1fY29uZGl0aW9uczsKLSAgICAgICAgYm9vbCBtX2NvbmRpdGlvbnNDb25uZWN0ZWQ7Ci0gICAg
ICAgIGJvb2wgbV9oYXNFbmRFdmVudENvbmRpdGlvbnM7ICAgICAKLSAgICAgICAgCi0gICAgICAg
IHR5cGVkZWYgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+IFRpbWVEZXBlbmRlbnRTZXQ7Ci0gICAg
ICAgIFRpbWVEZXBlbmRlbnRTZXQgbV90aW1lRGVwZW5kZW50czsKLSAgICAgICAgCi0gICAgICAg
IC8vIEluc3RhbmNlIHRpbWUgbGlzdHMKLSAgICAgICAgVmVjdG9yPFNNSUxUaW1lPiBtX2JlZ2lu
VGltZXM7Ci0gICAgICAgIFZlY3RvcjxTTUlMVGltZT4gbV9lbmRUaW1lczsKLSAgICAgICAgCi0g
ICAgICAgIC8vIFRoaXMgaXMgdGhlIHVwY29taW5nIG9yIGN1cnJlbnQgaW50ZXJ2YWwKLSAgICAg
ICAgU01JTFRpbWUgbV9pbnRlcnZhbEJlZ2luOwotICAgICAgICBTTUlMVGltZSBtX2ludGVydmFs
RW5kOwotICAgICAgICAKLSAgICAgICAgU01JTFRpbWUgbV9wcmV2aW91c0ludGVydmFsQmVnaW47
Ci0gICAgICAgIAotICAgICAgICBib29sIG1faXNXYWl0aW5nRm9yRmlyc3RJbnRlcnZhbDsKLSAg
ICAKLSAgICAgICAgQWN0aXZlU3RhdGUgbV9hY3RpdmVTdGF0ZTsKLSAgICAgICAgZmxvYXQgbV9s
YXN0UGVyY2VudDsKLSAgICAgICAgdW5zaWduZWQgbV9sYXN0UmVwZWF0OwotICAgICAgICAKLSAg
ICAgICAgU01JTFRpbWUgbV9uZXh0UHJvZ3Jlc3NUaW1lOwotICAgICAgICAKLSAgICAgICAgUmVm
UHRyPFNNSUxUaW1lQ29udGFpbmVyPiBtX3RpbWVDb250YWluZXI7Ci0gICAgICAgIHVuc2lnbmVk
IG1fZG9jdW1lbnRPcmRlckluZGV4OwotCi0gICAgICAgIG11dGFibGUgU01JTFRpbWUgbV9jYWNo
ZWREdXI7Ci0gICAgICAgIG11dGFibGUgU01JTFRpbWUgbV9jYWNoZWRSZXBlYXREdXI7Ci0gICAg
ICAgIG11dGFibGUgU01JTFRpbWUgbV9jYWNoZWRSZXBlYXRDb3VudDsKLSAgICAgICAgbXV0YWJs
ZSBTTUlMVGltZSBtX2NhY2hlZE1pbjsKLSAgICAgICAgbXV0YWJsZSBTTUlMVGltZSBtX2NhY2hl
ZE1heDsKLSAgICAgICAgCi0gICAgICAgIGZyaWVuZCBjbGFzcyBDb25kaXRpb25FdmVudExpc3Rl
bmVyOworICAgIHZpcnR1YWwgdm9pZCBzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbihmbG9hdCBwZXJjZW50LCB1bnNpZ25lZCByZXBl
YXQsIFNWR1NNSUxFbGVtZW50KiByZXN1bHRFbGVtZW50KSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGVuZGVkQWN0aXZlSW50ZXJ2YWwoKSA9IDA7CisKKyAgICBlbnVtIEJlZ2luT3JFbmQgeyBCZWdp
biwgRW5kIH07CisgICAgU01JTFRpbWUgZmluZEluc3RhbmNlVGltZShCZWdpbk9yRW5kLCBTTUlM
VGltZSBtaW5pbXVtVGltZSwgYm9vbCBlcXVhbHNNaW5pbXVtT0spIGNvbnN0OworICAgIHZvaWQg
cmVzb2x2ZUZpcnN0SW50ZXJ2YWwoKTsKKyAgICB2b2lkIHJlc29sdmVOZXh0SW50ZXJ2YWwoKTsK
KyAgICB2b2lkIHJlc29sdmVJbnRlcnZhbChib29sIGZpcnN0LCBTTUlMVGltZSYgYmVnaW5SZXN1
bHQsIFNNSUxUaW1lJiBlbmRSZXN1bHQpIGNvbnN0OworICAgIFNNSUxUaW1lIHJlc29sdmVBY3Rp
dmVFbmQoU01JTFRpbWUgcmVzb2x2ZWRCZWdpbiwgU01JTFRpbWUgcmVzb2x2ZWRFbmQpIGNvbnN0
OworICAgIFNNSUxUaW1lIHJlcGVhdGluZ0R1cmF0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBjaGVj
a1Jlc3RhcnQoU01JTFRpbWUgZWxhcHNlZCk7CisgICAgdm9pZCBiZWdpbkxpc3RDaGFuZ2VkKCk7
CisgICAgdm9pZCBlbmRMaXN0Q2hhbmdlZCgpOworICAgIHZvaWQgcmVzY2hlZHVsZSgpOworCisg
ICAgLy8gVGhpcyByZXByZXNlbnRzIGNvbmRpdGlvbnMgb24gZWxlbWVudHMgYmVnaW4gb3IgZW5k
IGxpc3QgdGhhdCBuZWVkIHRvIGJlIHJlc29sdmVkIG9uIHJ1bnRpbWUKKyAgICAvLyBmb3IgZXhh
bXBsZSA8YW5pbWF0ZSBiZWdpbj0ib3RoZXJFbGVtZW50LmJlZ2luICsgOHM7IGJ1dHRvbi5jbGlj
ayIgLi4uIC8+CisgICAgc3RydWN0IENvbmRpdGlvbiB7CisgICAgICAgIGVudW0gVHlwZSB7IEV2
ZW50QmFzZSwgU3luY2Jhc2UsIEFjY2Vzc0tleSB9OworICAgICAgICBDb25kaXRpb24oVHlwZSwg
QmVnaW5PckVuZCwgY29uc3QgU3RyaW5nJiBiYXNlSUQsIGNvbnN0IFN0cmluZyYgbmFtZSwgU01J
TFRpbWUgb2Zmc2V0LCBpbnQgcmVwZWF0cyA9IC0xKTsKKyAgICAgICAgVHlwZSBtX3R5cGU7Cisg
ICAgICAgIEJlZ2luT3JFbmQgbV9iZWdpbk9yRW5kOworICAgICAgICBTdHJpbmcgbV9iYXNlSUQ7
CisgICAgICAgIFN0cmluZyBtX25hbWU7CisgICAgICAgIFNNSUxUaW1lIG1fb2Zmc2V0OworICAg
ICAgICBpbnQgbV9yZXBlYXRzOworICAgICAgICBSZWZQdHI8RWxlbWVudD4gbV9zeW5jYmFzZTsK
KyAgICAgICAgUmVmUHRyPENvbmRpdGlvbkV2ZW50TGlzdGVuZXI+IG1fZXZlbnRMaXN0ZW5lcjsK
ICAgICB9OworICAgIGJvb2wgcGFyc2VDb25kaXRpb24oY29uc3QgU3RyaW5nJiwgQmVnaW5PckVu
ZCBiZWdpbk9yRW5kKTsKKyAgICB2b2lkIHBhcnNlQmVnaW5PckVuZChjb25zdCBTdHJpbmcmLCBC
ZWdpbk9yRW5kIGJlZ2luT3JFbmQpOworICAgIEVsZW1lbnQqIGV2ZW50QmFzZUZvcihjb25zdCBD
b25kaXRpb24mKSBjb25zdDsKKworICAgIHZvaWQgY29ubmVjdENvbmRpdGlvbnMoKTsKKyAgICB2
b2lkIGRpc2Nvbm5lY3RDb25kaXRpb25zKCk7CisKKyAgICAvLyBFdmVudCBiYXNlIHRpbWluZwor
ICAgIHZvaWQgaGFuZGxlQ29uZGl0aW9uRXZlbnQoRXZlbnQqLCBDb25kaXRpb24qKTsKKworICAg
IC8vIFN5bmNiYXNlIHRpbWluZworICAgIGVudW0gTmV3T3JFeGlzdGluZ0ludGVydmFsIHsgTmV3
SW50ZXJ2YWwsIEV4aXN0aW5nSW50ZXJ2YWwgfTsgCisgICAgdm9pZCBub3RpZnlEZXBlbmRlbnRz
SW50ZXJ2YWxDaGFuZ2VkKE5ld09yRXhpc3RpbmdJbnRlcnZhbCk7CisgICAgdm9pZCBjcmVhdGVJ
bnN0YW5jZVRpbWVzRnJvbVN5bmNiYXNlKFNWR1NNSUxFbGVtZW50KiBzeW5jYmFzZSwgTmV3T3JF
eGlzdGluZ0ludGVydmFsKTsKKyAgICB2b2lkIGFkZFRpbWVEZXBlbmRlbnQoU1ZHU01JTEVsZW1l
bnQqKTsKKyAgICB2b2lkIHJlbW92ZVRpbWVEZXBlbmRlbnQoU1ZHU01JTEVsZW1lbnQqKTsKKwor
ICAgIGVudW0gQWN0aXZlU3RhdGUgeyBJbmFjdGl2ZSwgQWN0aXZlLCBGcm96ZW4gfTsKKyAgICBB
Y3RpdmVTdGF0ZSBkZXRlcm1pbmVBY3RpdmVTdGF0ZShTTUlMVGltZSBlbGFwc2VkKSBjb25zdDsK
KyAgICBmbG9hdCBjYWxjdWxhdGVBbmltYXRpb25QZXJjZW50QW5kUmVwZWF0KFNNSUxUaW1lIGVs
YXBzZWQsIHVuc2lnbmVkJiByZXBlYXQpIGNvbnN0OworICAgIFNNSUxUaW1lIGNhbGN1bGF0ZU5l
eHRQcm9ncmVzc1RpbWUoU01JTFRpbWUgZWxhcHNlZCkgY29uc3Q7CisKKyAgICBWZWN0b3I8Q29u
ZGl0aW9uPiBtX2NvbmRpdGlvbnM7CisgICAgYm9vbCBtX2NvbmRpdGlvbnNDb25uZWN0ZWQ7Cisg
ICAgYm9vbCBtX2hhc0VuZEV2ZW50Q29uZGl0aW9uczsgICAgIAorCisgICAgdHlwZWRlZiBIYXNo
U2V0PFNWR1NNSUxFbGVtZW50Kj4gVGltZURlcGVuZGVudFNldDsKKyAgICBUaW1lRGVwZW5kZW50
U2V0IG1fdGltZURlcGVuZGVudHM7CisKKyAgICAvLyBJbnN0YW5jZSB0aW1lIGxpc3RzCisgICAg
VmVjdG9yPFNNSUxUaW1lPiBtX2JlZ2luVGltZXM7CisgICAgVmVjdG9yPFNNSUxUaW1lPiBtX2Vu
ZFRpbWVzOworCisgICAgLy8gVGhpcyBpcyB0aGUgdXBjb21pbmcgb3IgY3VycmVudCBpbnRlcnZh
bAorICAgIFNNSUxUaW1lIG1faW50ZXJ2YWxCZWdpbjsKKyAgICBTTUlMVGltZSBtX2ludGVydmFs
RW5kOworCisgICAgU01JTFRpbWUgbV9wcmV2aW91c0ludGVydmFsQmVnaW47CisKKyAgICBib29s
IG1faXNXYWl0aW5nRm9yRmlyc3RJbnRlcnZhbDsKKworICAgIEFjdGl2ZVN0YXRlIG1fYWN0aXZl
U3RhdGU7CisgICAgZmxvYXQgbV9sYXN0UGVyY2VudDsKKyAgICB1bnNpZ25lZCBtX2xhc3RSZXBl
YXQ7CisKKyAgICBTTUlMVGltZSBtX25leHRQcm9ncmVzc1RpbWU7CisKKyAgICBSZWZQdHI8U01J
TFRpbWVDb250YWluZXI+IG1fdGltZUNvbnRhaW5lcjsKKyAgICB1bnNpZ25lZCBtX2RvY3VtZW50
T3JkZXJJbmRleDsKKworICAgIG11dGFibGUgU01JTFRpbWUgbV9jYWNoZWREdXI7CisgICAgbXV0
YWJsZSBTTUlMVGltZSBtX2NhY2hlZFJlcGVhdER1cjsKKyAgICBtdXRhYmxlIFNNSUxUaW1lIG1f
Y2FjaGVkUmVwZWF0Q291bnQ7CisgICAgbXV0YWJsZSBTTUlMVGltZSBtX2NhY2hlZE1pbjsKKyAg
ICBtdXRhYmxlIFNNSUxUaW1lIG1fY2FjaGVkTWF4OworCisgICAgZnJpZW5kIGNsYXNzIENvbmRp
dGlvbkV2ZW50TGlzdGVuZXI7Cit9OwogCiB9CiAKLSNlbmRpZgotI2VuZGlmCisjZW5kaWYgLy8g
RU5BQkxFKFNWRykKKyNlbmRpZiAvLyBTVkdTTUlMRWxlbWVudF9oCiAKSW5kZXg6IFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24gNzQ2ODApCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw0OCArMzMsNDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi0gICAgY2xhc3MgUGFnZTsKLSAgICBjbGFzcyBTVkdJbWFnZUNocm9tZUNs
aWVudDsKLSAgICAKLSAgICBjbGFzcyBTVkdJbWFnZSA6IHB1YmxpYyBJbWFnZSB7Ci0gICAgcHVi
bGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdJbWFnZT4gY3JlYXRlKEltYWdlT2Jz
ZXJ2ZXIqIG9ic2VydmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNWR0ltYWdlKG9ic2VydmVyKSk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIHZpcnR1YWwgflNWR0ltYWdlKCk7Ci0KLSAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5h
bWVFeHRlbnNpb24oKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGFpbmVy
U2l6ZShjb25zdCBJbnRTaXplJik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCB1c2VzQ29udGFpbmVy
U2l6ZSgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzUmVsYXRpdmVXaWR0aCgpIGNv
bnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdDsKLQot
ICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OwotICAgICAgICAKLSAgICAgICAg
dmlydHVhbCBib29sIGRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKLQotICAgICAg
ICAvLyBGSVhNRTogU1ZHSW1hZ2VzIGFyZSB1bmRlcnJlcG9ydGluZyBkZWNvZGVkIHNpemVzIGFu
ZCB3aWxsIGJlIHVuYWJsZQotICAgICAgICAvLyB0byBwcnVuZSBiZWNhdXNlIHRoZXNlIGZ1bmN0
aW9ucyBhcmUgbm90IGltcGxlbWVudGVkIHlldC4KLSAgICAgICAgdmlydHVhbCB2b2lkIGRlc3Ry
b3lEZWNvZGVkRGF0YShib29sKSB7IH0KLSAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVk
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdl
UHRyIGZyYW1lQXRJbmRleChzaXplX3QpIHsgcmV0dXJuIDA7IH0KLSAgICAgICAgCi0gICAgICAg
IFNWR0ltYWdlKEltYWdlT2JzZXJ2ZXIqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRyYXcoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBmcm9tUmVjdCwgY29uc3QgRmxvYXRSZWN0
JiB0b1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7
Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCk7Ci0gICAgICAgIAotICAgICAgICBPd25QdHI8U1ZHSW1hZ2VDaHJvbWVD
bGllbnQ+IG1fY2hyb21lQ2xpZW50OwotICAgICAgICBPd25QdHI8UGFnZT4gbV9wYWdlOwotICAg
ICAgICBSZWZQdHI8SW1hZ2U+IG1fZnJhbWVDYWNoZTsKLSAgICB9OworY2xhc3MgUGFnZTsKK2Ns
YXNzIFNWR0ltYWdlQ2hyb21lQ2xpZW50OworCitjbGFzcyBTVkdJbWFnZSA6IHB1YmxpYyBJbWFn
ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHSW1hZ2U+IGNyZWF0ZShJbWFn
ZU9ic2VydmVyKiBvYnNlcnZlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U1ZHSW1hZ2Uob2JzZXJ2ZXIpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB+U1ZH
SW1hZ2UoKTsKKworICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJik7Cisg
ICAgdmlydHVhbCBib29sIHVzZXNDb250YWluZXJTaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUmVsYXRp
dmVIZWlnaHQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisK
KyAgICB2aXJ0dWFsIGJvb2wgZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworCisg
ICAgLy8gRklYTUU6IFNWR0ltYWdlcyBhcmUgdW5kZXJyZXBvcnRpbmcgZGVjb2RlZCBzaXplcyBh
bmQgd2lsbCBiZSB1bmFibGUKKyAgICAvLyB0byBwcnVuZSBiZWNhdXNlIHRoZXNlIGZ1bmN0aW9u
cyBhcmUgbm90IGltcGxlbWVudGVkIHlldC4KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29k
ZWREYXRhKGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25z
dCB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGZyYW1lQXRJbmRl
eChzaXplX3QpIHsgcmV0dXJuIDA7IH0KKworICAgIFNWR0ltYWdlKEltYWdlT2JzZXJ2ZXIqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3Qm
IGZyb21SZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRvUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIg
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKworICAgIE93blB0cjxTVkdJbWFnZUNocm9t
ZUNsaWVudD4gbV9jaHJvbWVDbGllbnQ7CisgICAgT3duUHRyPFBhZ2U+IG1fcGFnZTsKKyAgICBS
ZWZQdHI8SW1hZ2U+IG1fZnJhbWVDYWNoZTsKK307CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZH
KQotCi0jZW5kaWYKKyNlbmRpZiAvLyBTVkdJbWFnZV9oCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAkocmV2aXNpb24gNzQ2ODApCisr
KyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBN
YXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjAsOCArMjEsNiBAQAogI2lmbmRlZiBTVkdGaWx0ZXJCdWlsZGVyX2gKICNkZWZpbmUgU1ZH
RmlsdGVyQnVpbGRlcl9oCiAKLSNpbmNsdWRlICJjb25maWcuaCIKLQogI2lmIEVOQUJMRShTVkcp
ICYmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCkBAIC0zMiw0OSArMzEsNDkgQEAKICNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9taWNTdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLSAgICBj
bGFzcyBTVkdGaWx0ZXJCdWlsZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8U1ZHRmlsdGVyQnVpbGRl
cj4gewotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBIYXNoU2V0PEZpbHRlckVmZmVjdCo+
IEZpbHRlckVmZmVjdFNldDsKLQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdGaWx0ZXJC
dWlsZGVyPiBjcmVhdGUoRmlsdGVyKiBmaWx0ZXIpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdG
aWx0ZXJCdWlsZGVyKGZpbHRlcikpOyB9Ci0KLSAgICAgICAgdm9pZCBhZGQoY29uc3QgQXRvbWlj
U3RyaW5nJiBpZCwgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0KTsKLQotICAgICAgICBGaWx0
ZXJFZmZlY3QqIGdldEVmZmVjdEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3Q7Ci0g
ICAgICAgIEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEVm
ZmVjdC5nZXQoKTsgfQotCi0gICAgICAgIHZvaWQgYXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVu
Y2VzKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+KTsKLQotICAgICAgICBpbmxpbmUgRmlsdGVyRWZmZWN0
U2V0JiBnZXRFZmZlY3RSZWZlcmVuY2VzKEZpbHRlckVmZmVjdCogZWZmZWN0KQotICAgICAgICB7
Ci0gICAgICAgICAgICAvLyBPbmx5IGFsbG93ZWQgZm9yIGVmZmVjdHMgYmVsb25ncyB0byB0aGlz
IGJ1aWxkZXIuCi0gICAgICAgICAgICBBU1NFUlQobV9lZmZlY3RSZWZlcmVuY2VzLmNvbnRhaW5z
KGVmZmVjdCkpOwotICAgICAgICAgICAgcmV0dXJuIG1fZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVm
ZmVjdCktPnNlY29uZDsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY2xlYXJFZmZlY3RzKCk7
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBTVkdGaWx0ZXJCdWlsZGVyKEZpbHRlciopOwotCi0g
ICAgICAgIGlubGluZSB2b2lkIGFkZEJ1aWx0aW5FZmZlY3RzKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID46Oml0ZXJh
dG9yIGVuZCA9IG1fYnVpbHRpbkVmZmVjdHMuZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKEhhc2hN
YXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+OjppdGVyYXRvciBpdGVyYXRv
ciA9IG1fYnVpbHRpbkVmZmVjdHMuYmVnaW4oKTsgaXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJhdG9y
KQotICAgICAgICAgICAgICAgICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGl0ZXJhdG9yLT5zZWNv
bmQsIEZpbHRlckVmZmVjdFNldCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEhhc2hNYXA8QXRv
bWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+IG1fYnVpbHRpbkVmZmVjdHM7Ci0gICAg
ICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+IG1fbmFtZWRF
ZmZlY3RzOwotICAgICAgICAvLyBUaGUgdmFsdWUgaXMgYSBsaXN0LCB3aGljaCBjb250YWlucyB0
aG9zZSBmaWx0ZXIgZWZmZWN0cywKLSAgICAgICAgLy8gd2hpY2ggZGVwZW5kcyBvbiB0aGUga2V5
IGZpbHRlciBlZmZlY3QuCi0gICAgICAgIEhhc2hNYXA8UmVmUHRyPEZpbHRlckVmZmVjdD4sIEZp
bHRlckVmZmVjdFNldD4gbV9lZmZlY3RSZWZlcmVuY2VzOwogCi0gICAgICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IG1fbGFzdEVmZmVjdDsKLSAgICB9OworY2xhc3MgU1ZHRmlsdGVyQnVpbGRlciA6
IHB1YmxpYyBSZWZDb3VudGVkPFNWR0ZpbHRlckJ1aWxkZXI+IHsKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIEhhc2hTZXQ8RmlsdGVyRWZmZWN0Kj4gRmlsdGVyRWZmZWN0U2V0OworCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U1ZHRmlsdGVyQnVpbGRlcj4gY3JlYXRlKEZpbHRlciogZmlsdGVyKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgU1ZHRmlsdGVyQnVpbGRlcihmaWx0ZXIpKTsgfQorCisgICAgdm9p
ZCBhZGQoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0
KTsKKworICAgIEZpbHRlckVmZmVjdCogZ2V0RWZmZWN0QnlJZChjb25zdCBBdG9taWNTdHJpbmcm
IGlkKSBjb25zdDsKKyAgICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QoKSBjb25zdCB7IHJldHVy
biBtX2xhc3RFZmZlY3QuZ2V0KCk7IH0KKworICAgIHZvaWQgYXBwZW5kRWZmZWN0VG9FZmZlY3RS
ZWZlcmVuY2VzKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+KTsKKworICAgIGlubGluZSBGaWx0ZXJFZmZl
Y3RTZXQmIGdldEVmZmVjdFJlZmVyZW5jZXMoRmlsdGVyRWZmZWN0KiBlZmZlY3QpCisgICAgewor
ICAgICAgICAvLyBPbmx5IGFsbG93ZWQgZm9yIGVmZmVjdHMgYmVsb25ncyB0byB0aGlzIGJ1aWxk
ZXIuCisgICAgICAgIEFTU0VSVChtX2VmZmVjdFJlZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7
CisgICAgICAgIHJldHVybiBtX2VmZmVjdFJlZmVyZW5jZXMuZmluZChlZmZlY3QpLT5zZWNvbmQ7
CisgICAgfQorCisgICAgdm9pZCBjbGVhckVmZmVjdHMoKTsKKworcHJpdmF0ZToKKyAgICBTVkdG
aWx0ZXJCdWlsZGVyKEZpbHRlciopOworCisgICAgaW5saW5lIHZvaWQgYWRkQnVpbHRpbkVmZmVj
dHMoKQorICAgIHsKKyAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+ID46Oml0ZXJhdG9yIGVuZCA9IG1fYnVpbHRpbkVmZmVjdHMuZW5kKCk7CisgICAgICAg
IGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID46Oml0ZXJh
dG9yIGl0ZXJhdG9yID0gbV9idWlsdGluRWZmZWN0cy5iZWdpbigpOyBpdGVyYXRvciAhPSBlbmQ7
ICsraXRlcmF0b3IpCisgICAgICAgICAgICAgbV9lZmZlY3RSZWZlcmVuY2VzLmFkZChpdGVyYXRv
ci0+c2Vjb25kLCBGaWx0ZXJFZmZlY3RTZXQoKSk7CisgICAgfQorCisgICAgSGFzaE1hcDxBdG9t
aWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbV9idWlsdGluRWZmZWN0czsKKyAgICBI
YXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4gPiBtX25hbWVkRWZmZWN0
czsKKyAgICAvLyBUaGUgdmFsdWUgaXMgYSBsaXN0LCB3aGljaCBjb250YWlucyB0aG9zZSBmaWx0
ZXIgZWZmZWN0cywKKyAgICAvLyB3aGljaCBkZXBlbmRzIG9uIHRoZSBrZXkgZmlsdGVyIGVmZmVj
dC4KKyAgICBIYXNoTWFwPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBGaWx0ZXJFZmZlY3RTZXQ+IG1f
ZWZmZWN0UmVmZXJlbmNlczsKKworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1fbGFzdEVmZmVj
dDsKK307CiAgICAgCi19IC8vbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2VuZGlmCisj
ZW5kaWYgLy8gU1ZHRmlsdGVyQnVpbGRlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77513</attachid>
            <date>2010-12-27 11:02:43 -0800</date>
            <delta_ts>2010-12-29 17:18:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51490-20101227200240.patch</filename>
            <type>text/plain</type>
            <size>67413</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDY4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA4IEBACisyMDEwLTEyLTI3ICBEaXJrIFNjaHVsemUgIDxrcml0QHdiZWtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTmlrb2xhcyBaaW1tZXJtYW5uLgorCisgICAgICAg
IENsZWFudXAgU1ZHIGNvZGUgYWNjb3JkaW5nIHRvIHRoZSB3ZWJraXQgc3R5bGUgcnVsZXMgMwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE0OTAKKwor
ICAgICAgICBMYXN0IHBhdGNoIHRvIGZpeCBpbmRlbnRpb24gYW5kIG90aGVyIHN0eWxlIGlzc3Vl
cyBhY2NvcmRpbmcgdG8gdGhlIFdlYktpdCBzdHlsZSBydWxlcyBpbiB0aGUgU1ZHIGNvZGUuCisg
ICAgICAgIEp1c3Qgb25lIGZpbGUgY2FuJ3QgYmUgZml4ZWQgZm9yIGNoZWNrLXdlYmtpdC1zdHls
ZS4KKyAgICAgICAgKiBTVkdBbGxJbk9uZS5jcHA6IGNoZWNrLXdlYmtpdC1zdHlsZSB3YW50cyBh
IGNvbmZpZy5oIGF0IHRoZSBiZWdpbm5pbmcKKworICAgICAgICBObyBjaGFuZ2VzIG9mIGZ1bmN0
aW9uYWxpdHksIHNvIG5vIG5ldyB0ZXN0cy4gCisKKyAgICAgICAgKiBzdmcvU1ZHQWxsSW5PbmUu
Y3BwOgorICAgICAgICAqIHN2Zy9TVkdJbWFnZS5jcHA6CisgICAgICAgICogc3ZnL1NWR0xlbmd0
aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGg6OnNldFZhbHVlKToKKyAgICAgICAg
KiBzdmcvU1ZHUG9seWdvbkVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHUG9seWxpbmVFbGVt
ZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6cGFyc2VQcmVzZXJ2ZUFzcGVjdFJh
dGlvKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnRyYW5zZm9y
bVJlY3QpOgorICAgICAgICAqIHN2Zy9TVkdTVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1NWR0VsZW1lbnQ6OnZpZXdwb3J0KToKKyAgICAgICAgKiBzdmcvU1ZHU2V0RWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdTdHlsYWJsZS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U3R5bGFibGU6On5TVkdTdHlsYWJsZSk6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZExvY2F0YWJs
ZUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6
OmxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0
eWxlZExvY2F0YWJsZUVsZW1lbnQ6OmlzU3R5bGVkTG9jYXRhYmxlKToKKyAgICAgICAgKiBzdmcv
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUpOgorICAgICAgICAq
IHN2Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N3aXRjaEVs
ZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIHN2Zy9TVkdUZXN0
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUp
OgorICAgICAgICAqIHN2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVGV4dENvbnRlbnRFbGVtZW50Ojppc0tub3duQXR0cmlidXRlKToKKyAgICAgICAg
KiBzdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHVGV4dFBhdGhF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1RpdGxlRWxlbWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVGl0bGVFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKToKKyAgICAgICAgKiBzdmcv
U1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3Jt
RGlzdGFuY2U6OlNWR1RyYW5zZm9ybURpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Ry
YW5zZm9ybURpc3RhbmNlOjpzY2FsZWREaXN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdU
cmFuc2Zvcm1EaXN0YW5jZTo6YWRkU1ZHVHJhbnNmb3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdUcmFuc2Zvcm1EaXN0YW5jZTo6YWRkU1ZHVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1RyYW5zZm9ybURpc3RhbmNlOjphZGRUb1NWR1RyYW5zZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6aXNaZXJvKToKKyAgICAgICAgKiBzdmcvU1ZHVHJh
bnNmb3JtTGlzdC5jcHA6CisgICAgICAgICogc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdVUklSZWZlcmVuY2U6OmdldFRhcmdldCk6CisgICAgICAgICogc3Zn
L1NWR1ZLZXJuRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdWaWV3U3BlYy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyk6CisgICAgICAgICogc3Zn
L1NWR1pvb21BbmRQYW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1pvb21BbmRQYW46OlNWR1pv
b21BbmRQYW4pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHWm9vbUFuZFBhbjo6flNWR1pvb21BbmRQ
YW4pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHWm9vbUFuZFBhbjo6em9vbUFuZFBhbik6CisgICAg
ICAgICogc3ZnL1NWR1pvb21FdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHWm9vbUV2ZW50
OjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01JTFRpbWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6b3BlcmF0b3IqKToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NNSUxUaW1l
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZTo6U01JTFRpbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6U01JTFRpbWU6OnVucmVzb2x2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWU6
OmluZGVmaW5pdGUpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWU6Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTTUlMVGltZTo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U01J
TFRpbWU6OmlzRmluaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lOjppc0luZGVmaW5p
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWU6OmlzVW5yZXNvbHZlZCk6CisgICAgICAg
IChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yISk6IG5l
dyBvcGVyYXRvciBjaGVja3MgZm9yIDAgb3IgaW5maW5pdGUgdmFsdWVzLgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj4pOgorICAgICAg
ICAoV2ViQ29yZTo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPj0pOgor
ICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PSk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9T
TUlMVGltZUNvbnRhaW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6c2V0RG9jdW1l
bnRPcmRlckluZGV4ZXNEaXJ0eSk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb25kaXRpb25FdmVudExpc3RlbmVyOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpyZXBlYXRpbmdEdXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6cmVzb2x2ZUludGVydmFs
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpjYWxjdWxhdGVBbmltYXRpb25Q
ZXJjZW50QW5kUmVwZWF0KToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6dGltZUNvbnRhaW5lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6aW50ZXJ2YWxCZWdpbik6CisgICAgICAg
IChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6aW50ZXJ2YWxFbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU01JTEVsZW1lbnQ6OnByZXZpb3VzSW50ZXJ2YWxCZWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTTUlMRWxlbWVudDo6ZG9jdW1lbnRPcmRlckluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1NNSUxFbGVtZW50OjpzZXREb2N1bWVudE9yZGVySW5kZXgpOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9TVkdJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpkZWNvZGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdJbWFnZTo6ZnJhbWVBdEluZGV4KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6bGFzdEVmZmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpnZXRFZmZlY3RSZWZlcmVu
Y2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZEJ1aWx0aW5FZmZl
Y3RzKToKKwogMjAxMC0xMi0yNiAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpJbmRleDogV2ViQ29yZS9zdmcv
U1ZHQWxsSW5PbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FsbEluT25lLmNw
cAkocmV2aXNpb24gNzQ2ODApCisrKyBXZWJDb3JlL3N2Zy9TVkdBbGxJbk9uZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0Nyw5ICsxNDcsOSBAQAogI2luY2x1ZGUgIlNWR1RleHRQb3NpdGlvbmlu
Z0VsZW1lbnQuY3BwIgogI2luY2x1ZGUgIlNWR1RpdGxlRWxlbWVudC5jcHAiCiAjaW5jbHVkZSAi
U1ZHVHJhbnNmb3JtLmNwcCIKLSNpbmNsdWRlICJTVkdUcmFuc2Zvcm1hYmxlLmNwcCIKICNpbmNs
dWRlICJTVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlz
dC5jcHAiCisjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtYWJsZS5jcHAiCiAjaW5jbHVkZSAiU1ZHVVJJ
UmVmZXJlbmNlLmNwcCIKICNpbmNsdWRlICJTVkdVc2VFbGVtZW50LmNwcCIKICNpbmNsdWRlICJT
VkdWS2VybkVsZW1lbnQuY3BwIgpJbmRleDogV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdMZW5ndGguY3BwCShyZXZpc2lvbiA3NDY4MCkKKysr
IFdlYkNvcmUvc3ZnL1NWR0xlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMywyMiArMjAz
LDE5IEBAIHZvaWQgU1ZHTGVuZ3RoOjpzZXRWYWx1ZShmbG9hdCB2YWx1ZSwgY28KICAgICBjYXNl
IExlbmd0aFR5cGVOdW1iZXI6CiAgICAgICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gdmFs
dWU7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGVuZ3RoVHlwZVBlcmNlbnRhZ2U6Ci0gICAg
eworICAgIGNhc2UgTGVuZ3RoVHlwZVBlcmNlbnRhZ2U6IHsKICAgICAgICAgZmxvYXQgcmVzdWx0
ID0gY29udmVydFZhbHVlRnJvbVVzZXJVbml0c1RvUGVyY2VudGFnZSh2YWx1ZSwgY29udGV4dCwg
ZWMpOwogICAgICAgICBpZiAoIWVjKQogICAgICAgICAgICAgbV92YWx1ZUluU3BlY2lmaWVkVW5p
dHMgPSByZXN1bHQ7IAogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBMZW5ndGhUeXBl
RU1TOgotICAgIHsKKyAgICBjYXNlIExlbmd0aFR5cGVFTVM6IHsKICAgICAgICAgZmxvYXQgcmVz
dWx0ID0gY29udmVydFZhbHVlRnJvbVVzZXJVbml0c1RvRU1TKHZhbHVlLCBjb250ZXh0LCBlYyk7
CiAgICAgICAgIGlmICghZWMpCiAgICAgICAgICAgICBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9
IHJlc3VsdDsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgTGVuZ3RoVHlwZUVYUzoK
LSAgICB7CisgICAgY2FzZSBMZW5ndGhUeXBlRVhTOiB7CiAgICAgICAgIGZsb2F0IHJlc3VsdCA9
IGNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHNUb0VYUyh2YWx1ZSwgY29udGV4dCwgZWMpOwogICAg
ICAgICBpZiAoIWVjKQogICAgICAgICAgICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSByZXN1
bHQ7IApJbmRleDogV2ViQ29yZS9zdmcvU1ZHUG9seWdvbkVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5oCShyZXZpc2lvbiA3NDY4MCkKKysrIFdl
YkNvcmUvc3ZnL1NWR1BvbHlnb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE1ICsy
NiwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBTVkdQb2x5Z29uRWxl
bWVudCA6IHB1YmxpYyBTVkdQb2x5RWxlbWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTVkdQb2x5Z29uRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOworY2xhc3MgU1ZHUG9seWdvbkVsZW1lbnQgOiBwdWJsaWMgU1ZHUG9s
eUVsZW1lbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1BvbHlnb25FbGVt
ZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKLSAgICBwcml2
YXRlOgotICAgICAgICBTVkdQb2x5Z29uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqKTsKK3ByaXZhdGU6CisgICAgU1ZHUG9seWdvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Kik7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEoUGF0
aCYpIGNvbnN0OwotICAgIH07CisgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEoUGF0aCYpIGNv
bnN0OworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdQb2x5bGluZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQb2x5bGlu
ZUVsZW1lbnQuaAkocmV2aXNpb24gNzQ2ODApCisrKyBXZWJDb3JlL3N2Zy9TVkdQb2x5bGluZUVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTUgKzI2LDE1IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotICAgIGNsYXNzIFNWR1BvbHlsaW5lRWxlbWVudCA6IHB1YmxpYyBTVkdQb2x5
RWxlbWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdQb2x5
bGluZUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKK2Ns
YXNzIFNWR1BvbHlsaW5lRWxlbWVudCA6IHB1YmxpYyBTVkdQb2x5RWxlbWVudCB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHUG9seWxpbmVFbGVtZW50PiBjcmVhdGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKLSAgICBwcml2YXRlOgotICAgICAgICBTVkdQ
b2x5bGluZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7Citwcml2YXRl
OgorICAgIFNWR1BvbHlsaW5lRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
KTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29uc3Q7Ci0gICAg
fTsKKyAgICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29uc3Q7Cit9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0
UmF0aW8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0
aW8uY3BwCShyZXZpc2lvbiA3NDY4MCkKKysrIFdlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0
UmF0aW8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwyNSArNjYsMjUgQEAgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpbyBTVkdQcmVzZXJ2ZUFzcGVjdAogCiAgICAgLy8gRklYTUU6IFJld3JpdGUgdGhp
cyBwYXJzZXIsIHdpdGhvdXQgZ290b3MhCiAgICAgaWYgKCFza2lwT3B0aW9uYWxTcGFjZXMoY3Vy
clBhcmFtLCBlbmQpKQotICAgICAgICBnb3RvIGJhaWxfb3V0OworICAgICAgICBnb3RvIGJhaWxP
dXQ7CiAKICAgICBpZiAoKmN1cnJQYXJhbSA9PSAnZCcpIHsKICAgICAgICAgaWYgKCFza2lwU3Ry
aW5nKGN1cnJQYXJhbSwgZW5kLCAiZGVmZXIiKSkKLSAgICAgICAgICAgIGdvdG8gYmFpbF9vdXQ7
CisgICAgICAgICAgICBnb3RvIGJhaWxPdXQ7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBqdXN0IGln
bm9yZSB0aGUgImRlZmVyIiBoZXJlLgogICAgICAgICBpZiAoIXNraXBPcHRpb25hbFNwYWNlcyhj
dXJyUGFyYW0sIGVuZCkpCi0gICAgICAgICAgICBnb3RvIGJhaWxfb3V0OworICAgICAgICAgICAg
Z290byBiYWlsT3V0OwogICAgIH0KIAogICAgIGlmICgqY3VyclBhcmFtID09ICduJykgewogICAg
ICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclBhcmFtLCBlbmQsICJub25lIikpCi0gICAgICAgICAg
ICBnb3RvIGJhaWxfb3V0OworICAgICAgICAgICAgZ290byBiYWlsT3V0OwogICAgICAgICBza2lw
T3B0aW9uYWxTcGFjZXMoY3VyclBhcmFtLCBlbmQpOwogICAgIH0gZWxzZSBpZiAoKmN1cnJQYXJh
bSA9PSAneCcpIHsKICAgICAgICAgaWYgKChlbmQgLSBjdXJyUGFyYW0pIDwgOCkKLSAgICAgICAg
ICAgIGdvdG8gYmFpbF9vdXQ7CisgICAgICAgICAgICBnb3RvIGJhaWxPdXQ7CiAgICAgICAgIGlm
IChjdXJyUGFyYW1bMV0gIT0gJ00nIHx8IGN1cnJQYXJhbVs0XSAhPSAnWScgfHwgY3VyclBhcmFt
WzVdICE9ICdNJykKLSAgICAgICAgICAgIGdvdG8gYmFpbF9vdXQ7CisgICAgICAgICAgICBnb3Rv
IGJhaWxPdXQ7CiAgICAgICAgIGlmIChjdXJyUGFyYW1bMl0gPT0gJ2knKSB7CiAgICAgICAgICAg
ICBpZiAoY3VyclBhcmFtWzNdID09ICduJykgewogICAgICAgICAgICAgICAgIGlmIChjdXJyUGFy
YW1bNl0gPT0gJ2knKSB7CkBAIC05MywxMSArOTMsMTEgQEAgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
byBTVkdQcmVzZXJ2ZUFzcGVjdAogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyUGFy
YW1bN10gPT0gJ2QnKQogICAgICAgICAgICAgICAgICAgICAgICAgYXNwZWN0UmF0aW8ubV9hbGln
biA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlEOwogICAgICAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWxfb3V0OworICAgICAgICAg
ICAgICAgICAgICAgICAgZ290byBiYWlsT3V0OwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
Y3VyclBhcmFtWzZdID09ICdhJyAmJiBjdXJyUGFyYW1bN10gPT0gJ3gnKQogICAgICAgICAgICAg
ICAgICAgICAgYXNwZWN0UmF0aW8ubV9hbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hN
SU5ZTUFYOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIGdvdG8g
YmFpbF9vdXQ7CisgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWxPdXQ7CiAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChjdXJyUGFyYW1bM10gPT0gJ2QnKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGN1cnJQYXJhbVs2XSA9PSAnaScpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJh
bVs3XSA9PSAnbicpCkBAIC0xMDUsMTMgKzEwNSwxMyBAQCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
IFNWR1ByZXNlcnZlQXNwZWN0CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJQYXJh
bVs3XSA9PSAnZCcpCiAgICAgICAgICAgICAgICAgICAgICAgICBhc3BlY3RSYXRpby5tX2FsaWdu
ID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNSUQ7CiAgICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbF9vdXQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICBnb3RvIGJhaWxPdXQ7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChj
dXJyUGFyYW1bNl0gPT0gJ2EnICYmIGN1cnJQYXJhbVs3XSA9PSAneCcpCiAgICAgICAgICAgICAg
ICAgICAgIGFzcGVjdFJhdGlvLm1fYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlE
WU1BWDsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gYmFp
bF9vdXQ7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbE91dDsKICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgIGdvdG8gYmFpbF9vdXQ7CisgICAgICAgICAgICAgICAgZ290
byBiYWlsT3V0OwogICAgICAgICB9IGVsc2UgaWYgKGN1cnJQYXJhbVsyXSA9PSAnYScgJiYgY3Vy
clBhcmFtWzNdID09ICd4JykgewogICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs2XSA9PSAnaScp
IHsKICAgICAgICAgICAgICAgICBpZiAoY3VyclBhcmFtWzddID09ICduJykKQEAgLTExOSwyNiAr
MTE5LDI2IEBAIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8gU1ZHUHJlc2VydmVBc3BlY3QKICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChjdXJyUGFyYW1bN10gPT0gJ2QnKQogICAgICAgICAgICAgICAg
ICAgICBhc3BlY3RSYXRpby5tX2FsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlN
SUQ7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWxf
b3V0OworICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWxPdXQ7CiAgICAgICAgICAgICB9IGVs
c2UgaWYgKGN1cnJQYXJhbVs2XSA9PSAnYScgJiYgY3VyclBhcmFtWzddID09ICd4JykKICAgICAg
ICAgICAgICAgICBhc3BlY3RSYXRpby5tX2FsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9f
WE1BWFlNQVg7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZ290byBiYWlsX291
dDsKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWxPdXQ7CiAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgZ290byBiYWlsX291dDsKKyAgICAgICAgICAgIGdvdG8gYmFpbE91dDsKICAgICAgICAg
Y3VyclBhcmFtICs9IDg7CiAgICAgICAgIHNraXBPcHRpb25hbFNwYWNlcyhjdXJyUGFyYW0sIGVu
ZCk7CiAgICAgfSBlbHNlCi0gICAgICAgIGdvdG8gYmFpbF9vdXQ7CisgICAgICAgIGdvdG8gYmFp
bE91dDsKIAogICAgIGlmIChjdXJyUGFyYW0gPCBlbmQpIHsKICAgICAgICAgaWYgKCpjdXJyUGFy
YW0gPT0gJ20nKSB7CiAgICAgICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclBhcmFtLCBlbmQs
ICJtZWV0IikpCi0gICAgICAgICAgICAgICAgZ290byBiYWlsX291dDsKKyAgICAgICAgICAgICAg
ICBnb3RvIGJhaWxPdXQ7CiAgICAgICAgICAgICBza2lwT3B0aW9uYWxTcGFjZXMoY3VyclBhcmFt
LCBlbmQpOwogICAgICAgICB9IGVsc2UgaWYgKCpjdXJyUGFyYW0gPT0gJ3MnKSB7CiAgICAgICAg
ICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclBhcmFtLCBlbmQsICJzbGljZSIpKQotICAgICAgICAg
ICAgICAgIGdvdG8gYmFpbF9vdXQ7CisgICAgICAgICAgICAgICAgZ290byBiYWlsT3V0OwogICAg
ICAgICAgICAgc2tpcE9wdGlvbmFsU3BhY2VzKGN1cnJQYXJhbSwgZW5kKTsKICAgICAgICAgICAg
IGlmIChhc3BlY3RSYXRpby5tX2FsaWduICE9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX05PTkUp
CiAgICAgICAgICAgICAgICAgYXNwZWN0UmF0aW8ubV9tZWV0T3JTbGljZSA9IFNWR19NRUVUT1JT
TElDRV9TTElDRTsgICAgCkBAIC0xNDYsNyArMTQ2LDcgQEAgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
byBTVkdQcmVzZXJ2ZUFzcGVjdAogICAgIH0KIAogICAgIGlmIChlbmQgIT0gY3VyclBhcmFtICYm
IHZhbGlkYXRlKSB7Ci1iYWlsX291dDoKK2JhaWxPdXQ6CiAgICAgICAgIC8vIEZJWE1FOiBTaG91
bGQgdGhlIHR3byB2YWx1ZXMgYmUgc2V0IHRvIFVOS05PV04gaW5zdGVhZD8KICAgICAgICAgYXNw
ZWN0UmF0aW8ubV9hbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX05PTkU7CiAgICAgICAg
IGFzcGVjdFJhdGlvLm1fbWVldE9yU2xpY2UgPSBTVkdfTUVFVE9SU0xJQ0VfTUVFVDsKQEAgLTE2
NCw4ICsxNjQsNyBAQCB2b2lkIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnRyYW5zZm9ybVJlCiAg
ICAgc3dpdGNoIChtX21lZXRPclNsaWNlKSB7CiAgICAgY2FzZSBTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvOjpTVkdfTUVFVE9SU0xJQ0VfVU5LTk9XTjoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpTVkdfTUVFVE9SU0xJQ0VfTUVFVDoKLSAgICB7CisgICAg
Y2FzZSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpTVkdfTUVFVE9SU0xJQ0VfTUVFVDogewogICAg
ICAgICBmbG9hdCB3aWR0aFRvSGVpZ2h0TXVsdGlwbGllciA9IHNyY1JlY3QuaGVpZ2h0KCkgLyBz
cmNSZWN0LndpZHRoKCk7CiAgICAgICAgIGlmIChvcmlnRGVzdEhlaWdodCA+IG9yaWdEZXN0V2lk
dGggKiB3aWR0aFRvSGVpZ2h0TXVsdGlwbGllcikgewogICAgICAgICAgICAgZGVzdFJlY3Quc2V0
SGVpZ2h0KG9yaWdEZXN0V2lkdGggKiB3aWR0aFRvSGVpZ2h0TXVsdGlwbGllcik7CkBAIC0yMDMs
OCArMjAyLDcgQEAgdm9pZCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjp0cmFuc2Zvcm1SZQogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW86OlNWR19NRUVUT1JTTElDRV9TTElDRToKLSAgICB7CisgICAgY2FzZSBTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvOjpTVkdfTUVFVE9SU0xJQ0VfU0xJQ0U6IHsKICAgICAgICAgZmxvYXQgd2lk
dGhUb0hlaWdodE11bHRpcGxpZXIgPSBzcmNSZWN0LmhlaWdodCgpIC8gc3JjUmVjdC53aWR0aCgp
OwogICAgICAgICAvLyBpZiB0aGUgZGVzdGluYXRpb24gaGVpZ2h0IGlzIGxlc3MgdGhhbiB0aGUg
aGVpZ2h0IG9mIHRoZSBpbWFnZSB3ZSdsbCBiZSBkcmF3aW5nCiAgICAgICAgIGlmIChvcmlnRGVz
dEhlaWdodCA8IG9yaWdEZXN0V2lkdGggKiB3aWR0aFRvSGVpZ2h0TXVsdGlwbGllcikgewpJbmRl
eDogV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvU1ZHU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDc0NjgwKQorKysgV2ViQ29yZS9zdmcvU1ZH
U1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSwyMCArMTI5LDIwIEBAIHZvaWQg
U1ZHU1ZHRWxlbWVudDo6c2V0Q29udGVudFN0eWxlVHlwZSgKIAogRmxvYXRSZWN0IFNWR1NWR0Vs
ZW1lbnQ6OnZpZXdwb3J0KCkgY29uc3QKIHsKLSAgICBkb3VibGUgX3ggPSAwLjA7Ci0gICAgZG91
YmxlIF95ID0gMC4wOworICAgIGRvdWJsZSB4ID0gMDsKKyAgICBkb3VibGUgeSA9IDA7CiAgICAg
aWYgKCFpc091dGVybW9zdFNWRygpKSB7Ci0gICAgICAgIF94ID0geCgpLnZhbHVlKHRoaXMpOwot
ICAgICAgICBfeSA9IHkoKS52YWx1ZSh0aGlzKTsKKyAgICAgICAgeCA9IHRoaXMtPngoKS52YWx1
ZSh0aGlzKTsKKyAgICAgICAgeSA9IHRoaXMtPnkoKS52YWx1ZSh0aGlzKTsKICAgICB9CiAgICAg
ZmxvYXQgdyA9IHdpZHRoKCkudmFsdWUodGhpcyk7CiAgICAgZmxvYXQgaCA9IGhlaWdodCgpLnZh
bHVlKHRoaXMpOwogICAgIEFmZmluZVRyYW5zZm9ybSB2aWV3Qm94ID0gdmlld0JveFRvVmlld1Ry
YW5zZm9ybSh3LCBoKTsKICAgICBkb3VibGUgd0RvdWJsZSA9IHc7CiAgICAgZG91YmxlIGhEb3Vi
bGUgPSBoOwotICAgIHZpZXdCb3gubWFwKF94LCBfeSwgX3gsIF95KTsKKyAgICB2aWV3Qm94Lm1h
cCh4LCB5LCB4LCB5KTsKICAgICB2aWV3Qm94Lm1hcCh3LCBoLCB3RG91YmxlLCBoRG91YmxlKTsK
LSAgICByZXR1cm4gRmxvYXRSZWN0OjpuYXJyb3dQcmVjaXNpb24oX3gsIF95LCB3RG91YmxlLCBo
RG91YmxlKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0OjpuYXJyb3dQcmVjaXNpb24oeCwgeSwgd0Rv
dWJsZSwgaERvdWJsZSk7CiB9CiAKIGludCBTVkdTVkdFbGVtZW50OjpyZWxhdGl2ZVdpZHRoVmFs
dWUoKSBjb25zdApJbmRleDogV2ViQ29yZS9zdmcvU1ZHU2V0RWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL1NWR1NldEVsZW1lbnQuaAkocmV2aXNpb24gNzQ2ODApCisrKyBXZWJD
b3JlL3N2Zy9TVkdTZXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE0ICsyNiwxNCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICAvLyBTVkdBbmltYXRlRWxlbWVudCBpbXBs
ZW1lbnRzIHN1cGVyc2V0IG9mIHRoZSBmdW5jdGlvbmFsaXR5LgotICAgIGNsYXNzIFNWR1NldEVs
ZW1lbnQgOiBwdWJsaWMgU1ZHQW5pbWF0ZUVsZW1lbnQgewotICAgIHB1YmxpYzoKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U1ZHU2V0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgU1ZHU2V0RWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLSAgICB9OworLy8gU1ZHQW5pbWF0ZUVs
ZW1lbnQgaW1wbGVtZW50cyBzdXBlcnNldCBvZiB0aGUgZnVuY3Rpb25hbGl0eS4KK2NsYXNzIFNW
R1NldEVsZW1lbnQgOiBwdWJsaWMgU1ZHQW5pbWF0ZUVsZW1lbnQgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNWR1NldEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqKTsKKworcHJpdmF0ZToKKyAgICBTVkdTZXRFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCopOworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCklu
ZGV4OiBXZWJDb3JlL3N2Zy9TVkdTdHlsYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Zn
L1NWR1N0eWxhYmxlLmgJKHJldmlzaW9uIDc0NjgwKQorKysgV2ViQ29yZS9zdmcvU1ZHU3R5bGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTYgKzI3LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotICAgIGNsYXNzIENTU1ZhbHVlOwotICAgIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRp
b247CitjbGFzcyBDU1NWYWx1ZTsKK2NsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CiAKLSAgICBj
bGFzcyBTVkdTdHlsYWJsZSB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5TVkdTdHls
YWJsZSgpIHsgfQotCi0gICAgICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUo
KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJlc2VudGF0
aW9uQXR0cmlidXRlKGNvbnN0IFN0cmluZyYpID0gMDsKLSAgICB9OworY2xhc3MgU1ZHU3R5bGFi
bGUgeworcHVibGljOgorICAgIHZpcnR1YWwgflNWR1N0eWxhYmxlKCkgeyB9CisKKyAgICB2aXJ0
dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgPSAwOworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gZ2V0UHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFN0cmluZyYpID0g
MDsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZH
U3R5bGVkTG9jYXRhYmxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1N0
eWxlZExvY2F0YWJsZUVsZW1lbnQuaAkocmV2aXNpb24gNzQ2ODApCisrKyBXZWJDb3JlL3N2Zy9T
VkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDI2ICsyNywy
NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBTVkdFbGVtZW50OworY2xh
c3MgU1ZHRWxlbWVudDsKIAotICAgIGNsYXNzIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQgOiBw
dWJsaWMgU1ZHU3R5bGVkRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmlydHVhbCBwdWJsaWMgU1ZHTG9jYXRhYmxlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IHZpcnR1YWwgU1ZHRWxlbWVudCogbmVhcmVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0OwotICAg
ICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIGZhcnRoZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3Q7
Ci0KLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgZ2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5
ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNm
b3JtIGdldENUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7
Ci0gICAgICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldFNjcmVlbkNUTShTdHlsZVVwZGF0
ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCBB
ZmZpbmVUcmFuc2Zvcm0gbG9jYWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRhYmxl
OjpDVE1TY29wZSBtb2RlKSBjb25zdCB7IHJldHVybiBTVkdMb2NhdGFibGU6OmxvY2FsQ29vcmRp
bmF0ZVNwYWNlVHJhbnNmb3JtKG1vZGUpOyB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFNW
R1N0eWxlZExvY2F0YWJsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZWRMb2NhdGFibGUo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgfTsKK2NsYXNzIFNWR1N0eWxlZExvY2F0YWJs
ZUVsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkRWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2aXJ0dWFsIHB1YmxpYyBTVkdMb2NhdGFibGUgeworcHVibGljOgorICAg
IHZpcnR1YWwgU1ZHRWxlbWVudCogbmVhcmVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0OworICAg
IHZpcnR1YWwgU1ZHRWxlbWVudCogZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IGdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93
U3R5bGVVcGRhdGUpIGNvbnN0OworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldENUTShT
dHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7CisgICAgdmlydHVh
bCBBZmZpbmVUcmFuc2Zvcm0gZ2V0U2NyZWVuQ1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxv
d1N0eWxlVXBkYXRlKSBjb25zdDsKKworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2Fs
Q29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RNU2NvcGUgbW9kZSkgY29u
c3QgeyByZXR1cm4gU1ZHTG9jYXRhYmxlOjpsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybSht
b2RlKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJv
b2wgaXNTdHlsZWRMb2NhdGFibGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Cit9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDc0NjgwKQorKysgV2ViQ29yZS9zdmcvU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw4ICs4
OCw3IEBAIHZvaWQgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN5bmMKIAogYm9vbCBT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6aXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICByZXR1cm4gU1ZHVHJhbnNmb3JtYWJsZTo6aXNL
bm93bkF0dHJpYnV0ZShhdHRyTmFtZSkgfHwKLSAgICAgICAgICAgU1ZHU3R5bGVkTG9jYXRhYmxl
RWxlbWVudDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSk7CisgICAgcmV0dXJuIFNWR1RyYW5z
Zm9ybWFibGU6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpIHx8IFNWR1N0eWxlZExvY2F0YWJs
ZUVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpOwogfQogCiBTVkdFbGVtZW50KiBT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6bmVhcmVzdFZpZXdwb3J0RWxlbWVudCgpIGNv
bnN0CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcAkocmV2aXNpb24gNzQ2ODApCisrKyBX
ZWJDb3JlL3N2Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTMg
KzQ1LDE1IEBAIGJvb2wgU1ZHU3dpdGNoRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGUKIHsKICAg
ICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBkbyB3aGF0IHRoZSBjb21tZW50IGJl
bG93IGltcGxpZXMgaXQgZG9lcy4KICAgICAvLyBJdCB3aWxsIGNyZWF0ZSBhIHJlbmRlcmVyIGZv
ciBhbnkgdmFsaWQgU1ZHIGVsZW1lbnQgY2hpbGRyZW4sIG5vdCBqdXN0IHRoZSBmaXJzdCBvbmUu
CisgICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+
bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoIW5vZGUtPmlzU1ZHRWxlbWVudCgpKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgU1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRp
Y19jYXN0PFNWR0VsZW1lbnQqPihub2RlKTsKKyAgICAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVt
ZW50LT5pc1ZhbGlkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKIAotICAgIGZvciAoTm9kZSog
biA9IGZpcnN0Q2hpbGQoKTsgbiAhPSAwOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewotICAgICAg
ICBpZiAobi0+aXNTVkdFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIFNWR0VsZW1lbnQqIGVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICBpZiAoZWxlbWVu
dCAmJiBlbGVtZW50LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIChuID09IGNo
aWxkKTsgLy8gT25seSBhbGxvdyB0aGlzIGNoaWxkIGlmIGl0J3MgdGhlIGZpcnN0IHZhbGlkIGNo
aWxkCi0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5vZGUgPT0gY2hpbGQ7IC8vIE9ubHkgYWxs
b3cgdGhpcyBjaGlsZCBpZiBpdCdzIHRoZSBmaXJzdCB2YWxpZCBjaGlsZAogICAgIH0KIAogICAg
IHJldHVybiBmYWxzZTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1Rlc3RzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUZXN0cy5jcHAJKHJldmlzaW9uIDc0NjgwKQorKysgV2ViQ29y
ZS9zdmcvU1ZHVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxMCArNzIsMTIgQEAgYm9v
bCBTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cgogICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnJlcXVpcmVkRmVhdHVyZXNBdHRyKSB7CiAgICAgICAgIG1fcmVxdWly
ZWRGZWF0dXJlcy52YWx1ZS5yZXNldChhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJlcXVpcmVkRXh0
ZW5zaW9uc0F0dHIpIHsKKyAgICB9CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
cmVxdWlyZWRFeHRlbnNpb25zQXR0cikgewogICAgICAgICBtX3JlcXVpcmVkRXh0ZW5zaW9ucy52
YWx1ZS5yZXNldChhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN5c3RlbUxhbmd1YWdlQXR0cikgewor
ICAgIH0KKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzeXN0ZW1MYW5ndWFnZUF0
dHIpIHsKICAgICAgICAgbV9zeXN0ZW1MYW5ndWFnZS52YWx1ZS5yZXNldChhdHRyLT52YWx1ZSgp
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHVGV4
dENvbnRlbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUZXh0Q29u
dGVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3NDY4MCkKKysrIFdlYkNvcmUvc3ZnL1NWR1RleHRD
b250ZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMiwxMSArMjIyLDExIEBAIHZv
aWQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzdmdBdHRyaWJ1dGUKIAogYm9vbCBTVkdUZXh0Q29u
dGVudEVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCiB7Ci0gICAgcmV0dXJuIChhdHRyTmFtZS5tYXRjaGVzKFNWR05hbWVzOjpsZW5ndGhBZGp1
c3RBdHRyKSB8fAotICAgICAgICAgICAgYXR0ck5hbWUubWF0Y2hlcyhTVkdOYW1lczo6dGV4dExl
bmd0aEF0dHIpIHx8Ci0gICAgICAgICAgICBTVkdMYW5nU3BhY2U6OmlzS25vd25BdHRyaWJ1dGUo
YXR0ck5hbWUpIHx8Ci0gICAgICAgICAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpp
c0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSB8fAotICAgICAgICAgICAgU1ZHU3R5bGVkRWxlbWVu
dDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpOworICAgIHJldHVybiBhdHRyTmFtZS5tYXRj
aGVzKFNWR05hbWVzOjpsZW5ndGhBZGp1c3RBdHRyKQorICAgICAgICAgICAgfHwgYXR0ck5hbWUu
bWF0Y2hlcyhTVkdOYW1lczo6dGV4dExlbmd0aEF0dHIpCisgICAgICAgICAgICB8fCBTVkdMYW5n
U3BhY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpCisgICAgICAgICAgICB8fCBTVkdFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKQorICAgICAg
ICAgICAgfHwgU1ZHU3R5bGVkRWxlbWVudDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSk7CiB9
CiAKIGJvb2wgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkg
Y29uc3QKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcAkocmV2aXNpb24gNzQ2ODAp
CisrKyBXZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCw5ICsyNCw5IEBACiAjaW5jbHVkZSAiU1ZHVGV4dFBhdGhFbGVtZW50LmgiCiAKICNpbmNs
dWRlICJBdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dFBhdGguaCIKKyNpbmNsdWRl
ICJTVkdOYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvc3Zn
L1NWR1RleHRQYXRoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1RleHRQ
YXRoRWxlbWVudC5oCShyZXZpc2lvbiA3NDY4MCkKKysrIFdlYkNvcmUvc3ZnL1NWR1RleHRQYXRo
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotICAgIGVudW0gU1ZHVGV4dFBhdGhNZXRob2RUeXBlIHsKK2VudW0gU1ZHVGV4
dFBhdGhNZXRob2RUeXBlIHsKICAgICBTVkdfVEVYVFBBVEhfTUVUSE9EVFlQRV9VTktOT1dOID0g
MCwKICAgICBTVkdfVEVYVFBBVEhfTUVUSE9EVFlQRV9BTElHTiA9IDEsCiAgICAgU1ZHX1RFWFRQ
QVRIX01FVEhPRFRZUEVfU1RSRVRDSCA9IDIKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RpdGxlRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1RpdGxlRWxlbWVudC5oCShyZXZp
c2lvbiA3NDY4MCkKKysrIFdlYkNvcmUvc3ZnL1NWR1RpdGxlRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNywyMCArMjcsMjAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xh
c3MgU1ZHVGl0bGVFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSB7Ci0gICAgcHVibGljOgotICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdUaXRsZUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFNWR1RpdGxl
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLQotICAgICAgICB2aXJ0
dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJl
bW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdl
ZChib29sIGNoYW5nZWRCeVBhcnNlciA9IGZhbHNlLCBOb2RlKiBiZWZvcmVDaGFuZ2UgPSAwLCBO
b2RlKiBhZnRlckNoYW5nZSA9IDAsIGludCBjaGlsZENvdW50RGVsdGEgPSAwKTsKK2NsYXNzIFNW
R1RpdGxlRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRFbGVtZW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U1ZHVGl0bGVFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CisKK3ByaXZhdGU6CisgICAgU1ZHVGl0bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOworCisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50
KCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUq
IGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVyQ2hhbmdlID0gMCwgaW50IGNoaWxkQ291bnRE
ZWx0YSA9IDApOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRl
clN0eWxlKikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB9OworICAgIHZpcnR1YWwgYm9vbCByZW5k
ZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKikgeyByZXR1cm4gZmFsc2U7IH0KK307CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtRGlzdGFu
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybURpc3RhbmNlLmNw
cAkocmV2aXNpb24gNzQ2ODApCisrKyBXZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1EaXN0YW5jZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDIyICs2MSwxOSBAQCBTVkdUcmFuc2Zvcm1EaXN0YW5j
ZTo6U1ZHVHJhbnNmb3JtRGlzdGFuCiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZP
Uk1fTUFUUklYOgogICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBiZSBhYmxlIHRvIHN1YnRyYWN0
IHRvIG1hdHJpY2VzCiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZH
X1RSQU5TRk9STV9ST1RBVEU6Ci0gICAgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJB
TlNGT1JNX1JPVEFURTogewogICAgICAgICBGbG9hdFNpemUgY2VudGVyRGlzdGFuY2UgPSB0b1NW
R1RyYW5zZm9ybS5yb3RhdGlvbkNlbnRlcigpIC0gZnJvbVNWR1RyYW5zZm9ybS5yb3RhdGlvbkNl
bnRlcigpOwogICAgICAgICBtX2FuZ2xlID0gdG9TVkdUcmFuc2Zvcm0uYW5nbGUoKSAtIGZyb21T
VkdUcmFuc2Zvcm0uYW5nbGUoKTsKICAgICAgICAgbV9jeCA9IGNlbnRlckRpc3RhbmNlLndpZHRo
KCk7CiAgICAgICAgIG1fY3kgPSBjZW50ZXJEaXN0YW5jZS5oZWlnaHQoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xB
VEU6Ci0gICAgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFU
RTogewogICAgICAgICBGbG9hdFNpemUgdHJhbnNsYXRpb25EaXN0YW5jZSA9IHRvU1ZHVHJhbnNm
b3JtLnRyYW5zbGF0ZSgpIC0gZnJvbVNWR1RyYW5zZm9ybS50cmFuc2xhdGUoKTsKICAgICAgICAg
bV90cmFuc2Zvcm0udHJhbnNsYXRlKHRyYW5zbGF0aW9uRGlzdGFuY2Uud2lkdGgoKSwgdHJhbnNs
YXRpb25EaXN0YW5jZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2Fz
ZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6Ci0gICAgeworICAgIGNhc2UgU1ZH
VHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NDQUxFOiB7CiAgICAgICAgIGZsb2F0IHNjYWxlWCA9
IHRvU1ZHVHJhbnNmb3JtLnNjYWxlKCkud2lkdGgoKSAtIGZyb21TVkdUcmFuc2Zvcm0uc2NhbGUo
KS53aWR0aCgpOyAgICAgICAgCiAgICAgICAgIGZsb2F0IHNjYWxlWSA9IHRvU1ZHVHJhbnNmb3Jt
LnNjYWxlKCkuaGVpZ2h0KCkgLSBmcm9tU1ZHVHJhbnNmb3JtLnNjYWxlKCkuaGVpZ2h0KCk7CiAg
ICAgICAgIG1fdHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShzY2FsZVgsIHNjYWxlWSk7CkBAIC05
OSw4ICs5Niw3IEBAIFNWR1RyYW5zZm9ybURpc3RhbmNlIFNWR1RyYW5zZm9ybURpc3RhbmMKICAg
ICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TQ0FMRToKICAgICBjYXNlIFNWR1Ry
YW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg6CiAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zv
cm1EaXN0YW5jZShtX3R5cGUsIG1fYW5nbGUgKiBzY2FsZUZhY3RvciwgbV9jeCAqIHNjYWxlRmFj
dG9yLCBtX2N5ICogc2NhbGVGYWN0b3IsIEFmZmluZVRyYW5zZm9ybShtX3RyYW5zZm9ybSkuc2Nh
bGUoc2NhbGVGYWN0b3IpKTsKLSAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9U
UkFOU0xBVEU6Ci0gICAgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RS
QU5TTEFURTogewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3VHJhbnNmb3JtKG1fdHJhbnNm
b3JtKTsKICAgICAgICAgbmV3VHJhbnNmb3JtLnNldEUobV90cmFuc2Zvcm0uZSgpICogc2NhbGVG
YWN0b3IpOwogICAgICAgICBuZXdUcmFuc2Zvcm0uc2V0RihtX3RyYW5zZm9ybS5mKCkgKiBzY2Fs
ZUZhY3Rvcik7CkBAIC0xMjQsOCArMTIwLDcgQEAgU1ZHVHJhbnNmb3JtIFNWR1RyYW5zZm9ybURp
c3RhbmNlOjphZGRTVgogICAgIHN3aXRjaCAoZmlyc3QudHlwZSgpKSB7CiAgICAgY2FzZSBTVkdU
cmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVU5LTk9XTjoKICAgICAgICAgcmV0dXJuIFNWR1RyYW5z
Zm9ybSgpOwotICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURToKLSAg
ICB7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fUk9UQVRFOiB7CiAgICAg
ICAgIHRyYW5zZm9ybS5zZXRSb3RhdGUoZmlyc3QuYW5nbGUoKSArIHNlY29uZC5hbmdsZSgpLCBm
aXJzdC5yb3RhdGlvbkNlbnRlcigpLngoKSArIHNlY29uZC5yb3RhdGlvbkNlbnRlcigpLngoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdC5yb3RhdGlvbkNlbnRlcigpLnkoKSAr
IHNlY29uZC5yb3RhdGlvbkNlbnRlcigpLnkoKSk7CiAgICAgICAgIHJldHVybiB0cmFuc2Zvcm07
CkBAIC0xMzMsMTUgKzEyOCwxMyBAQCBTVkdUcmFuc2Zvcm0gU1ZHVHJhbnNmb3JtRGlzdGFuY2U6
OmFkZFNWCiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fTUFUUklYOgogICAg
ICAgICB0cmFuc2Zvcm0uc2V0TWF0cml4KGZpcnN0Lm1hdHJpeCgpICogc2Vjb25kLm1hdHJpeCgp
KTsKICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybTsKLSAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZH
X1RSQU5TRk9STV9UUkFOU0xBVEU6Ci0gICAgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdf
VFJBTlNGT1JNX1RSQU5TTEFURTogewogICAgICAgICBmbG9hdCBkeCA9IGZpcnN0LnRyYW5zbGF0
ZSgpLngoKSArIHNlY29uZC50cmFuc2xhdGUoKS54KCk7CiAgICAgICAgIGZsb2F0IGR5ID0gZmly
c3QudHJhbnNsYXRlKCkueSgpICsgc2Vjb25kLnRyYW5zbGF0ZSgpLnkoKTsKICAgICAgICAgdHJh
bnNmb3JtLnNldFRyYW5zbGF0ZShkeCwgZHkpOwogICAgICAgICByZXR1cm4gdHJhbnNmb3JtOwog
ICAgIH0KLSAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TQ0FMRToKLSAgICB7
CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6IHsKICAgICAgICAg
RmxvYXRTaXplIHNjYWxlID0gZmlyc3Quc2NhbGUoKSArIHNlY29uZC5zY2FsZSgpOwogICAgICAg
ICB0cmFuc2Zvcm0uc2V0U2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwogICAg
ICAgICByZXR1cm4gdHJhbnNmb3JtOwpAQCAtMTc3LDE1ICsxNzAsMTMgQEAgdm9pZCBTVkdUcmFu
c2Zvcm1EaXN0YW5jZTo6YWRkU1ZHVHJhbnNmbwogICAgICAgICBtX2N4ICs9IGFic29sdXRlVmFs
dWUgPyBmYWJzZih0cmFuc2Zvcm0ucm90YXRpb25DZW50ZXIoKS54KCkpIDogdHJhbnNmb3JtLnJv
dGF0aW9uQ2VudGVyKCkueCgpOwogICAgICAgICBtX2N5ICs9IGFic29sdXRlVmFsdWUgPyBmYWJz
Zih0cmFuc2Zvcm0ucm90YXRpb25DZW50ZXIoKS55KCkpIDogdHJhbnNmb3JtLnJvdGF0aW9uQ2Vu
dGVyKCkueSgpOwogICAgICAgICAvLyBmYWxsIHRocm91Z2gKLSAgICBjYXNlIFNWR1RyYW5zZm9y
bTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU6Ci0gICAgeworICAgIGNhc2UgU1ZHVHJhbnNmb3Jt
OjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURTogewogICAgICAgICBmbG9hdCBkeCA9IGFic29sdXRl
VmFsdWUgPyBmYWJzZih0cmFuc2Zvcm0udHJhbnNsYXRlKCkueCgpKSA6IHRyYW5zZm9ybS50cmFu
c2xhdGUoKS54KCk7CiAgICAgICAgIGZsb2F0IGR5ID0gYWJzb2x1dGVWYWx1ZSA/IGZhYnNmKHRy
YW5zZm9ybS50cmFuc2xhdGUoKS55KCkpIDogdHJhbnNmb3JtLnRyYW5zbGF0ZSgpLnkoKTsKICAg
ICAgICAgbV90cmFuc2Zvcm0udHJhbnNsYXRlKGR4LCBkeSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6Ci0gICAgewor
ICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NDQUxFOiB7CiAgICAgICAgIGZs
b2F0IHNjYWxlWCA9IGFic29sdXRlVmFsdWUgPyBmYWJzZih0cmFuc2Zvcm0uc2NhbGUoKS53aWR0
aCgpKSA6IHRyYW5zZm9ybS5zY2FsZSgpLndpZHRoKCk7CiAgICAgICAgIGZsb2F0IHNjYWxlWSA9
IGFic29sdXRlVmFsdWUgPyBmYWJzZih0cmFuc2Zvcm0uc2NhbGUoKS5oZWlnaHQoKSkgOiB0cmFu
c2Zvcm0uc2NhbGUoKS5oZWlnaHQoKTsKICAgICAgICAgbV90cmFuc2Zvcm0uc2NhbGVOb25Vbmlm
b3JtKHNjYWxlWCwgc2NhbGVZKTsKQEAgLTIxMiwyMiArMjAzLDE5IEBAIFNWR1RyYW5zZm9ybSBT
VkdUcmFuc2Zvcm1EaXN0YW5jZTo6YWRkVG8KICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybSgp
OwogICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX01BVFJJWDoKICAgICAgICAg
cmV0dXJuIFNWR1RyYW5zZm9ybSh0cmFuc2Zvcm0ubWF0cml4KCkgKiBtX3RyYW5zZm9ybSk7Ci0g
ICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOgotICAgIHsKKyAg
ICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU6IHsKICAgICAgICAg
RmxvYXRQb2ludCB0cmFuc2xhdGlvbiA9IHRyYW5zZm9ybS50cmFuc2xhdGUoKTsKICAgICAgICAg
dHJhbnNsYXRpb24gKz0gRmxvYXRTaXplOjpuYXJyb3dQcmVjaXNpb24obV90cmFuc2Zvcm0uZSgp
LCBtX3RyYW5zZm9ybS5mKCkpOwogICAgICAgICBuZXdUcmFuc2Zvcm0uc2V0VHJhbnNsYXRlKHRy
YW5zbGF0aW9uLngoKSwgdHJhbnNsYXRpb24ueSgpKTsKICAgICAgICAgcmV0dXJuIG5ld1RyYW5z
Zm9ybTsKICAgICB9Ci0gICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6
Ci0gICAgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NDQUxFOiB7CiAg
ICAgICAgIEZsb2F0U2l6ZSBzY2FsZSA9IHRyYW5zZm9ybS5zY2FsZSgpOwogICAgICAgICBzY2Fs
ZSArPSBGbG9hdFNpemU6Om5hcnJvd1ByZWNpc2lvbihtX3RyYW5zZm9ybS5hKCksIG1fdHJhbnNm
b3JtLmQoKSk7CiAgICAgICAgIG5ld1RyYW5zZm9ybS5zZXRTY2FsZShzY2FsZS53aWR0aCgpLCBz
Y2FsZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybiBuZXdUcmFuc2Zvcm07CiAgICAgfQotICAg
IGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURToKLSAgICB7CisgICAgY2Fz
ZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fUk9UQVRFOiB7CiAgICAgICAgIC8vIEZJWE1F
OiBJJ20gbm90IGNlcnRhaW4gdGhlIHRyYW5zbGF0aW9uIGlzIGNhbGN1bGF0ZWQgY29ycmVjdGx5
IGhlcmUKICAgICAgICAgRmxvYXRQb2ludCBjZW50ZXIgPSB0cmFuc2Zvcm0ucm90YXRpb25DZW50
ZXIoKTsKICAgICAgICAgbmV3VHJhbnNmb3JtLnNldFJvdGF0ZSh0cmFuc2Zvcm0uYW5nbGUoKSAr
IG1fYW5nbGUsCkBAIC0yNDksMTggKzIzNywxOCBAQCBTVkdUcmFuc2Zvcm0gU1ZHVHJhbnNmb3Jt
RGlzdGFuY2U6OmFkZFRvCiAKIGJvb2wgU1ZHVHJhbnNmb3JtRGlzdGFuY2U6OmlzWmVybygpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIChtX3RyYW5zZm9ybSA9PSBBZmZpbmVUcmFuc2Zvcm0oKSAmJiBt
X2FuZ2xlID09IDApOworICAgIHJldHVybiBtX3RyYW5zZm9ybS5pc0lkZW50aXR5KCkgJiYgIW1f
YW5nbGU7CiB9CiAKIGZsb2F0IFNWR1RyYW5zZm9ybURpc3RhbmNlOjpkaXN0YW5jZSgpIGNvbnN0
CiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RS
QU5TRk9STV9VTktOT1dOOgotICAgICAgICByZXR1cm4gMC4wZjsKKyAgICAgICAgcmV0dXJuIDA7
CiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fUk9UQVRFOgogICAgICAgICBy
ZXR1cm4gc3FydGYobV9hbmdsZSAqIG1fYW5nbGUgKyBtX2N4ICogbV9jeCArIG1fY3kgKiBtX2N5
KTsKICAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg6Ci0gICAgICAg
IHJldHVybiAwLjBmOyAvLyBJJ20gbm90IHF1aXRlIHN1cmUgeWV0IHdoYXQgZGlzdGFuY2UgYmV0
d2VlbiB0d28gbWF0cmljZXMgbWVhbnMuCisgICAgICAgIHJldHVybiAwOyAvLyBJJ20gbm90IHF1
aXRlIHN1cmUgeWV0IHdoYXQgZGlzdGFuY2UgYmV0d2VlbiB0d28gbWF0cmljZXMgbWVhbnMuCiAg
ICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6CiAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4oc3FydChtX3RyYW5zZm9ybS5hKCkgKiBtX3RyYW5zZm9ybS5h
KCkgKyBtX3RyYW5zZm9ybS5kKCkgKiBtX3RyYW5zZm9ybS5kKCkpKTsKICAgICBjYXNlIFNWR1Ry
YW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU6CkBAIC0yNzAsNyArMjU4LDcgQEAgZmxv
YXQgU1ZHVHJhbnNmb3JtRGlzdGFuY2U6OmRpc3RhbmNlKCkgYwogICAgICAgICByZXR1cm4gbV9h
bmdsZTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDAuMGY7
CisgICAgcmV0dXJuIDA7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuY3BwCShy
ZXZpc2lvbiA3NDY4MCkKKysrIFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw5IEBACiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgi
CiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CisKICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5h
dGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdVUklS
ZWZlcmVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1VSSVJlZmVyZW5jZS5j
cHAJKHJldmlzaW9uIDc0NjgwKQorKysgV2ViQ29yZS9zdmcvU1ZHVVJJUmVmZXJlbmNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDgsMTEgKzQ4LDE0IEBAIFN0cmluZyBTVkdVUklSZWZlcmVuY2U6
OmdldFRhcmdldChjb25zdCAKICAgICAgICAgc2l6ZV90IHN0YXJ0ID0gdXJsLmZpbmQoJyMnKSAr
IDE7CiAgICAgICAgIHNpemVfdCBlbmQgPSB1cmwucmV2ZXJzZUZpbmQoJyknKTsKICAgICAgICAg
cmV0dXJuIHVybC5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLSAgICB9IGVsc2UgaWYg
KHVybC5maW5kKCcjJykgIT0gbm90Rm91bmQpIHsgLy8gZm9ybWF0IGlzICN0YXJnZXQKKyAgICB9
CisgICAgaWYgKHVybC5maW5kKCcjJykgIT0gbm90Rm91bmQpIHsgLy8gZm9ybWF0IGlzICN0YXJn
ZXQKICAgICAgICAgc2l6ZV90IHN0YXJ0ID0gdXJsLmZpbmQoJyMnKSArIDE7CiAgICAgICAgIHJl
dHVybiB1cmwuc3Vic3RyaW5nKHN0YXJ0LCB1cmwubGVuZ3RoKCkgLSBzdGFydCk7Ci0gICAgfSBl
bHNlIC8vIFRoZSB1cmwgZG9lc24ndCBoYXZlIGFueSB0YXJnZXQuCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICB9CisKKyAgICAvLyBUaGUgdXJsIGRvZXNuJ3QgaGF2ZSBhbnkgdGFyZ2V0
LgorICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHVktl
cm5FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmgJ
KHJldmlzaW9uIDc0NjgwKQorKysgV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDkgKzI0LDkgQEAKICNpbmNsdWRlICJTVkdGb250RWxlbWVudC5oIgog
I2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1l
bnQuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiAjaW5jbHVkZSA8bGltaXRzPgorI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2Vi
Q29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1Zp
ZXdTcGVjLmNwcAkocmV2aXNpb24gNzQ2ODApCisrKyBXZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgYm9vbCBTVkdWaWV3U3BlYzo6cGFy
c2VWaWV3U3BlYyhjb25zdCBTdAogICAgIGlmICghc2tpcFN0cmluZyhjdXJyVmlld1NwZWMsIGVu
ZCwgc3ZnVmlld1NwZWMsIFdURl9BUlJBWV9MRU5HVEgoc3ZnVmlld1NwZWMpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3
U3BlYyAhPSAnKCcgKQorICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1Nw
ZWMgIT0gJygnKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY3VyclZpZXdTcGVjKys7CiAK
SW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9TVkdab29tQW5kUGFuLmgJKHJldmlzaW9uIDc0NjgwKQorKysgV2ViQ29yZS9zdmcvU1ZH
Wm9vbUFuZFBhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywzMSArMjcsMzEgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgQXR0cmlidXRlOwotICAgIGNsYXNzIFF1YWxpZmll
ZE5hbWU7CitjbGFzcyBBdHRyaWJ1dGU7CitjbGFzcyBRdWFsaWZpZWROYW1lOwogCi0gICAgY2xh
c3MgU1ZHWm9vbUFuZFBhbiB7Ci0gICAgcHVibGljOgotICAgICAgICBlbnVtIFNWR1pvb21BbmRQ
YW5UeXBlIHsKLSAgICAgICAgICAgIFNWR19aT09NQU5EUEFOX1VOS05PV04gPSAwLAotICAgICAg
ICAgICAgU1ZHX1pPT01BTkRQQU5fRElTQUJMRSA9IDEsCi0gICAgICAgICAgICBTVkdfWk9PTUFO
RFBBTl9NQUdOSUZZID0gMgotICAgICAgICB9OwotCi0gICAgICAgIFNWR1pvb21BbmRQYW4oKSA6
IG1fem9vbUFuZFBhbihTVkdfWk9PTUFORFBBTl9NQUdOSUZZKSB7IH0KLSAgICAgICAgdmlydHVh
bCB+U1ZHWm9vbUFuZFBhbigpIHsgfQotCi0gICAgICAgIHVuc2lnbmVkIHNob3J0IHpvb21BbmRQ
YW4oKSBjb25zdCB7IHJldHVybiBtX3pvb21BbmRQYW47IH0KLSAgICAgICAgdmlydHVhbCB2b2lk
IHNldFpvb21BbmRQYW4odW5zaWduZWQgc2hvcnQgem9vbUFuZFBhbik7CitjbGFzcyBTVkdab29t
QW5kUGFuIHsKK3B1YmxpYzoKKyAgICBlbnVtIFNWR1pvb21BbmRQYW5UeXBlIHsKKyAgICAgICAg
U1ZHX1pPT01BTkRQQU5fVU5LTk9XTiA9IDAsCisgICAgICAgIFNWR19aT09NQU5EUEFOX0RJU0FC
TEUgPSAxLAorICAgICAgICBTVkdfWk9PTUFORFBBTl9NQUdOSUZZID0gMgorICAgIH07CiAKLSAg
ICAgICAgYm9vbCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKLSAgICAgICAgYm9v
bCBpc0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKyAgICBTVkdab29tQW5k
UGFuKCkgOiBtX3pvb21BbmRQYW4oU1ZHX1pPT01BTkRQQU5fTUFHTklGWSkgeyB9CisgICAgdmly
dHVhbCB+U1ZHWm9vbUFuZFBhbigpIHsgfQogCi0gICAgICAgIGJvb2wgcGFyc2Vab29tQW5kUGFu
KGNvbnN0IFVDaGFyKiYgc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQpOworICAgIHVuc2lnbmVkIHNo
b3J0IHpvb21BbmRQYW4oKSBjb25zdCB7IHJldHVybiBtX3pvb21BbmRQYW47IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Wm9vbUFuZFBhbih1bnNpZ25lZCBzaG9ydCB6b29tQW5kUGFuKTsKIAotICAg
IHByaXZhdGU6Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IG1fem9vbUFuZFBhbjsKLSAgICB9Owor
ICAgIGJvb2wgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CisgICAgYm9vbCBpc0tu
b3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKworICAgIGJvb2wgcGFyc2Vab29t
QW5kUGFuKGNvbnN0IFVDaGFyKiYgc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQpOworCitwcml2YXRl
OgorICAgIHVuc2lnbmVkIHNob3J0IG1fem9vbUFuZFBhbjsKK307CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHWm9vbUV2ZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvU1ZHWm9vbUV2ZW50LmgJKHJldmlzaW9uIDc0NjgwKQorKysgV2ViQ29y
ZS9zdmcvU1ZHWm9vbUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDM2ICsyOCwzNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBTVkdab29tRXZlbnQgOiBwdWJsaWMg
VUlFdmVudCB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdab29t
RXZlbnQ+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdab29tRXZlbnQpOyB9Citj
bGFzcyBTVkdab29tRXZlbnQgOiBwdWJsaWMgVUlFdmVudCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U1ZHWm9vbUV2ZW50PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
U1ZHWm9vbUV2ZW50KTsgfQogCi0gICAgICAgIC8vICdTVkdab29tRXZlbnQnIGZ1bmN0aW9ucwot
ICAgICAgICBGbG9hdFJlY3Qgem9vbVJlY3RTY3JlZW4oKSBjb25zdDsKKyAgICAvLyAnU1ZHWm9v
bUV2ZW50JyBmdW5jdGlvbnMKKyAgICBGbG9hdFJlY3Qgem9vbVJlY3RTY3JlZW4oKSBjb25zdDsK
IAotICAgICAgICBmbG9hdCBwcmV2aW91c1NjYWxlKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0
UHJldmlvdXNTY2FsZShmbG9hdCk7CisgICAgZmxvYXQgcHJldmlvdXNTY2FsZSgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0UHJldmlvdXNTY2FsZShmbG9hdCk7CiAKLSAgICAgICAgRmxvYXRQb2ludCBw
cmV2aW91c1RyYW5zbGF0ZSgpIGNvbnN0OworICAgIEZsb2F0UG9pbnQgcHJldmlvdXNUcmFuc2xh
dGUoKSBjb25zdDsKIAotICAgICAgICBmbG9hdCBuZXdTY2FsZSgpIGNvbnN0OwotICAgICAgICB2
b2lkIHNldE5ld1NjYWxlKGZsb2F0KTsKKyAgICBmbG9hdCBuZXdTY2FsZSgpIGNvbnN0OworICAg
IHZvaWQgc2V0TmV3U2NhbGUoZmxvYXQpOwogCi0gICAgICAgIEZsb2F0UG9pbnQgbmV3VHJhbnNs
YXRlKCkgY29uc3Q7CisgICAgRmxvYXRQb2ludCBuZXdUcmFuc2xhdGUoKSBjb25zdDsKIAotICAg
IHByaXZhdGU6Ci0gICAgICAgIFNWR1pvb21FdmVudCgpOworcHJpdmF0ZToKKyAgICBTVkdab29t
RXZlbnQoKTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdab29tRXZlbnQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdab29tRXZlbnQoKSBjb25zdDsKIAotICAgICAgICBmbG9h
dCBtX25ld1NjYWxlOwotICAgICAgICBmbG9hdCBtX3ByZXZpb3VzU2NhbGU7Ci0gICAgICAgIAot
ICAgICAgICBGbG9hdFJlY3QgbV96b29tUmVjdFNjcmVlbjsKLSAgICAgICAgCi0gICAgICAgIEZs
b2F0UG9pbnQgbV9uZXdUcmFuc2xhdGU7Ci0gICAgICAgIEZsb2F0UG9pbnQgbV9wcmV2aW91c1Ry
YW5zbGF0ZTsKLSAgICB9OworICAgIGZsb2F0IG1fbmV3U2NhbGU7CisgICAgZmxvYXQgbV9wcmV2
aW91c1NjYWxlOworCisgICAgRmxvYXRSZWN0IG1fem9vbVJlY3RTY3JlZW47CisKKyAgICBGbG9h
dFBvaW50IG1fbmV3VHJhbnNsYXRlOworICAgIEZsb2F0UG9pbnQgbV9wcmV2aW91c1RyYW5zbGF0
ZTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9zdmcvYW5p
bWF0aW9uL1NNSUxUaW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9hbmltYXRpb24v
U01JTFRpbWUuY3BwCShyZXZpc2lvbiA3NDY4MCkKKysrIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9T
TUlMVGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgU01JTFRpbWUgV2Vi
Q29yZTo6b3BlcmF0b3IqKGNvbnN0IFNNSUxUaQogewogICAgIGlmIChhLmlzVW5yZXNvbHZlZCgp
IHx8IGIuaXNVbnJlc29sdmVkKCkpCiAgICAgICAgIHJldHVybiBTTUlMVGltZTo6dW5yZXNvbHZl
ZCgpOwotICAgIGlmIChhLnZhbHVlKCkgPT0gMCB8fCBiLnZhbHVlKCkgPT0gMCkKKyAgICBpZiAo
IWEudmFsdWUoKSB8fCAhYi52YWx1ZSgpKQogICAgICAgICByZXR1cm4gU01JTFRpbWUoMCk7CiAg
ICAgaWYgKGEuaXNJbmRlZmluaXRlKCkgfHwgYi5pc0luZGVmaW5pdGUoKSkKICAgICAgICAgcmV0
dXJuIFNNSUxUaW1lOjppbmRlZmluaXRlKCk7CkluZGV4OiBXZWJDb3JlL3N2Zy9hbmltYXRpb24v
U01JTFRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWUu
aAkocmV2aXNpb24gNzQ2ODApCisrKyBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNDEgKzMyLDQzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotICAgIGNsYXNzIFNNSUxUaW1lIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFNNSUxUaW1lKCkg
OiBtX3RpbWUoMCkgeyB9Ci0gICAgICAgIFNNSUxUaW1lKGRvdWJsZSB0aW1lKSA6IG1fdGltZSh0
aW1lKSB7IH0KLSAgICAgICAgU01JTFRpbWUoY29uc3QgU01JTFRpbWUmIG8pIDogbV90aW1lKG8u
bV90aW1lKSB7IH0KLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBTTUlMVGltZSB1bnJlc29sdmVk
KCkgeyByZXR1cm4gdW5yZXNvbHZlZFZhbHVlOyB9Ci0gICAgICAgIHN0YXRpYyBTTUlMVGltZSBp
bmRlZmluaXRlKCkgeyByZXR1cm4gaW5kZWZpbml0ZVZhbHVlOyB9Ci0gICAgICAgIAotICAgICAg
ICBTTUlMVGltZSYgb3BlcmF0b3I9KGNvbnN0IFNNSUxUaW1lJiBvKSB7IG1fdGltZSA9IG8ubV90
aW1lOyByZXR1cm4gKnRoaXM7IH0KLSAgICAgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1
cm4gbV90aW1lOyB9Ci0gICAgICAgIAotICAgICAgICBib29sIGlzRmluaXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV90aW1lIDwgaW5kZWZpbml0ZVZhbHVlOyB9Ci0gICAgICAgIGJvb2wgaXNJbmRlZmlu
aXRlKCkgY29uc3QgeyByZXR1cm4gbV90aW1lID09IGluZGVmaW5pdGVWYWx1ZTsgfQotICAgICAg
ICBib29sIGlzVW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZSA9PSB1bnJlc29sdmVk
VmFsdWU7IH0KLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIGNvbnN0IGRv
dWJsZSB1bnJlc29sdmVkVmFsdWU7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgaW5kZWZp
bml0ZVZhbHVlOwotCi0gICAgICAgIGRvdWJsZSBtX3RpbWU7Ci0gICAgfTsKLQotICAgIGlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU01JTFRpbWUmIGEsIGNvbnN0IFNNSUxUaW1lJiBiKSB7
IHJldHVybiBhLmlzRmluaXRlKCkgJiYgYS52YWx1ZSgpID09IGIudmFsdWUoKTsgfQotICAgIGlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU01JTFRpbWUmIGEsIGNvbnN0IFNNSUxUaW1lJiBi
KSB7IHJldHVybiAhb3BlcmF0b3I9PShhLCBiKTsgfQotICAgIGlubGluZSBib29sIG9wZXJhdG9y
Pihjb25zdCBTTUlMVGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJuIGEudmFsdWUo
KSA+IGIudmFsdWUoKTsgfQotICAgIGlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBTTUlMVGlt
ZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJuIGEudmFsdWUoKSA8IGIudmFsdWUoKTsg
fQotICAgIGlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgU01JTFRpbWUmIGEsIGNvbnN0IFNN
SUxUaW1lJiBiKSB7IHJldHVybiBhLnZhbHVlKCkgPiBiLnZhbHVlKCkgfHwgb3BlcmF0b3I9PShh
LCBiKTsgfQotICAgIGlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgU01JTFRpbWUmIGEsIGNv
bnN0IFNNSUxUaW1lJiBiKSB7IHJldHVybiBhLnZhbHVlKCkgPCBiLnZhbHVlKCkgfHwgb3BlcmF0
b3I9PShhLCBiKTsgfQotCi0gICAgU01JTFRpbWUgb3BlcmF0b3IrKGNvbnN0IFNNSUxUaW1lJiwg
Y29uc3QgU01JTFRpbWUmKTsKLSAgICBTTUlMVGltZSBvcGVyYXRvci0oY29uc3QgU01JTFRpbWUm
LCBjb25zdCBTTUlMVGltZSYpOwotICAgIC8vIFNvIG11bHRpcGx5aW5nIHRpbWVzIGRvZXMgbm90
IG1ha2UgdG9vIG11Y2ggc2Vuc2UgYnV0IFNNSUwgZGVmaW5lcyBpdCBmb3IgZHVyYXRpb24gKiBy
ZXBlYXRDb3VudAotICAgIFNNSUxUaW1lIG9wZXJhdG9yKihjb25zdCBTTUlMVGltZSYsIGNvbnN0
IFNNSUxUaW1lJik7CitjbGFzcyBTTUlMVGltZSB7CitwdWJsaWM6CisgICAgU01JTFRpbWUoKSA6
IG1fdGltZSgwKSB7IH0KKyAgICBTTUlMVGltZShkb3VibGUgdGltZSkgOiBtX3RpbWUodGltZSkg
eyB9CisgICAgU01JTFRpbWUoY29uc3QgU01JTFRpbWUmIG8pIDogbV90aW1lKG8ubV90aW1lKSB7
IH0KKyAgICAKKyAgICBzdGF0aWMgU01JTFRpbWUgdW5yZXNvbHZlZCgpIHsgcmV0dXJuIHVucmVz
b2x2ZWRWYWx1ZTsgfQorICAgIHN0YXRpYyBTTUlMVGltZSBpbmRlZmluaXRlKCkgeyByZXR1cm4g
aW5kZWZpbml0ZVZhbHVlOyB9CisgICAgCisgICAgU01JTFRpbWUmIG9wZXJhdG9yPShjb25zdCBT
TUlMVGltZSYgbykgeyBtX3RpbWUgPSBvLm1fdGltZTsgcmV0dXJuICp0aGlzOyB9CisgICAgZG91
YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV90aW1lOyB9CisgICAgCisgICAgYm9vbCBpc0Zp
bml0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZSA8IGluZGVmaW5pdGVWYWx1ZTsgfQorICAgIGJv
b2wgaXNJbmRlZmluaXRlKCkgY29uc3QgeyByZXR1cm4gbV90aW1lID09IGluZGVmaW5pdGVWYWx1
ZTsgfQorICAgIGJvb2wgaXNVbnJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gbV90aW1lID09IHVu
cmVzb2x2ZWRWYWx1ZTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgZG91Ymxl
IHVucmVzb2x2ZWRWYWx1ZTsKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIGluZGVmaW5pdGVWYWx1
ZTsKKworICAgIGRvdWJsZSBtX3RpbWU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFNNSUxUaW1lJiBhLCBjb25zdCBTTUlMVGltZSYgYikgeyByZXR1cm4gYS5pc0Zpbml0ZSgp
ICYmIGEudmFsdWUoKSA9PSBiLnZhbHVlKCk7IH0KK2lubGluZSBib29sIG9wZXJhdG9yIShjb25z
dCBTTUlMVGltZSYgYSkgeyByZXR1cm4gIWEuaXNGaW5pdGUoKSB8fCAhYS52YWx1ZSgpOyB9Citp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNNSUxUaW1lJiBhLCBjb25zdCBTTUlMVGltZSYg
YikgeyByZXR1cm4gIW9wZXJhdG9yPT0oYSwgYik7IH0KK2lubGluZSBib29sIG9wZXJhdG9yPihj
b25zdCBTTUlMVGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJuIGEudmFsdWUoKSA+
IGIudmFsdWUoKTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFNNSUxUaW1lJiBhLCBj
b25zdCBTTUlMVGltZSYgYikgeyByZXR1cm4gYS52YWx1ZSgpIDwgYi52YWx1ZSgpOyB9Citpbmxp
bmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFNNSUxUaW1lJiBhLCBjb25zdCBTTUlMVGltZSYgYikg
eyByZXR1cm4gYS52YWx1ZSgpID4gYi52YWx1ZSgpIHx8IG9wZXJhdG9yPT0oYSwgYik7IH0KK2lu
bGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgU01JTFRpbWUmIGEsIGNvbnN0IFNNSUxUaW1lJiBi
KSB7IHJldHVybiBhLnZhbHVlKCkgPCBiLnZhbHVlKCkgfHwgb3BlcmF0b3I9PShhLCBiKTsgfQor
CitTTUlMVGltZSBvcGVyYXRvcisoY29uc3QgU01JTFRpbWUmLCBjb25zdCBTTUlMVGltZSYpOwor
U01JTFRpbWUgb3BlcmF0b3ItKGNvbnN0IFNNSUxUaW1lJiwgY29uc3QgU01JTFRpbWUmKTsKKy8v
IFNvIG11bHRpcGx5aW5nIHRpbWVzIGRvZXMgbm90IG1ha2UgdG9vIG11Y2ggc2Vuc2UgYnV0IFNN
SUwgZGVmaW5lcyBpdCBmb3IgZHVyYXRpb24gKiByZXBlYXRDb3VudAorU01JTFRpbWUgb3BlcmF0
b3IqKGNvbnN0IFNNSUxUaW1lJiwgY29uc3QgU01JTFRpbWUmKTsKKwogfQogCi0jZW5kaWYKLSNl
bmRpZgorI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYgLy8gU01JTFRpbWVfaApJbmRleDog
V2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmgJKHJldmlzaW9uIDc0Njgw
KQorKysgV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDYzICszOSw2MyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi0g
ICAgY2xhc3MgU1ZHRWxlbWVudDsKLSAgICBjbGFzcyBTVkdTTUlMRWxlbWVudDsKLSAgICBjbGFz
cyBTVkdTVkdFbGVtZW50OwotCi0gICAgY2xhc3MgU01JTFRpbWVDb250YWluZXIgOiBwdWJsaWMg
UmVmQ291bnRlZDxTTUlMVGltZUNvbnRhaW5lcj4gIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNNSUxUaW1lQ29udGFpbmVyPiBjcmVhdGUoU1ZHU1ZHRWxlbWVudCog
b3duZXIpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTTUlMVGltZUNvbnRhaW5lcihvd25lcikpOyB9
IAotICAgIAotICAgICAgICB2b2lkIHNjaGVkdWxlKFNWR1NNSUxFbGVtZW50Kik7Ci0gICAgICAg
IHZvaWQgdW5zY2hlZHVsZShTVkdTTUlMRWxlbWVudCopOwotICAgICAgICAKLSAgICAgICAgU01J
TFRpbWUgZWxhcHNlZCgpIGNvbnN0OwotCi0gICAgICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsK
LSAgICAgICAgYm9vbCBpc1BhdXNlZCgpIGNvbnN0OwotICAgICAgICAKLSAgICAgICAgdm9pZCBi
ZWdpbigpOwotICAgICAgICB2b2lkIHBhdXNlKCk7Ci0gICAgICAgIHZvaWQgcmVzdW1lKCk7Ci0g
ICAgICAgIAotICAgICAgICB2b2lkIHNldERvY3VtZW50T3JkZXJJbmRleGVzRGlydHkoKSB7IG1f
ZG9jdW1lbnRPcmRlckluZGV4ZXNEaXJ0eSA9IHRydWU7IH0KLQotICAgICAgICAvLyBNb3ZlIHRv
IGEgc3BlY2lmaWMgdGltZS4gT25seSB1c2VkIGZvciBEUlQgdGVzdGluZyBwdXJwb3Nlcy4KLSAg
ICAgICAgdm9pZCBzYW1wbGVBbmltYXRpb25BdFRpbWUoY29uc3QgU3RyaW5nJiBlbGVtZW50SWQs
IGRvdWJsZSBzZWNvbmRzKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFNNSUxUaW1lQ29udGFp
bmVyKFNWR1NWR0VsZW1lbnQqIG93bmVyKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgdGltZXJG
aXJlZChUaW1lcjxTTUlMVGltZUNvbnRhaW5lcj4qKTsKLSAgICAgICAgdm9pZCBzdGFydFRpbWVy
KFNNSUxUaW1lIGZpcmVUaW1lLCBTTUlMVGltZSBtaW5pbXVtRGVsYXkgPSAwKTsKLSAgICAgICAg
dm9pZCB1cGRhdGVBbmltYXRpb25zKFNNSUxUaW1lIGVsYXBzZWQpOwotICAgICAgICAKLSAgICAg
ICAgdm9pZCB1cGRhdGVEb2N1bWVudE9yZGVySW5kZXhlcygpOwotICAgICAgICB2b2lkIHNvcnRC
eVByaW9yaXR5KFZlY3RvcjxTVkdTTUlMRWxlbWVudCo+JiBzbWlsRWxlbWVudHMsIFNNSUxUaW1l
IGVsYXBzZWQpOwotICAgICAgICAKLSAgICAgICAgdHlwZWRlZiBwYWlyPFNWR0VsZW1lbnQqLCBT
dHJpbmc+IEVsZW1lbnRBdHRyaWJ1dGVQYWlyOwotICAgICAgICBTdHJpbmcgYmFzZVZhbHVlRm9y
KEVsZW1lbnRBdHRyaWJ1dGVQYWlyKTsKLSAgICAgICAgCi0gICAgICAgIGRvdWJsZSBtX2JlZ2lu
VGltZTsKLSAgICAgICAgZG91YmxlIG1fcGF1c2VUaW1lOwotICAgICAgICBkb3VibGUgbV9hY2N1
bXVsYXRlZFBhdXNlVGltZTsKLSAgICAgICAgZG91YmxlIG1fbmV4dE1hbnVhbFNhbXBsZVRpbWU7
Ci0gICAgICAgIFN0cmluZyBtX25leHRTYW1wbGluZ1RhcmdldDsKLQotICAgICAgICBib29sIG1f
ZG9jdW1lbnRPcmRlckluZGV4ZXNEaXJ0eTsKLSAgICAgICAgCi0gICAgICAgIFRpbWVyPFNNSUxU
aW1lQ29udGFpbmVyPiBtX3RpbWVyOwotCi0gICAgICAgIHR5cGVkZWYgSGFzaFNldDxTVkdTTUlM
RWxlbWVudCo+IFRpbWluZ0VsZW1lbnRTZXQ7Ci0gICAgICAgIFRpbWluZ0VsZW1lbnRTZXQgbV9z
Y2hlZHVsZWRBbmltYXRpb25zOwotICAgICAgICAKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEVs
ZW1lbnRBdHRyaWJ1dGVQYWlyLCBTdHJpbmc+IEJhc2VWYWx1ZU1hcDsKLSAgICAgICAgQmFzZVZh
bHVlTWFwIG1fc2F2ZWRCYXNlVmFsdWVzOworY2xhc3MgU1ZHRWxlbWVudDsKK2NsYXNzIFNWR1NN
SUxFbGVtZW50OworY2xhc3MgU1ZHU1ZHRWxlbWVudDsKKworY2xhc3MgU01JTFRpbWVDb250YWlu
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTTUlMVGltZUNvbnRhaW5lcj4gIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTTUlMVGltZUNvbnRhaW5lcj4gY3JlYXRlKFNWR1NWR0VsZW1l
bnQqIG93bmVyKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU01JTFRpbWVDb250YWluZXIob3duZXIp
KTsgfSAKIAotICAgICAgICBTVkdTVkdFbGVtZW50KiBtX293bmVyU1ZHRWxlbWVudDsKLSAgICB9
OworICAgIHZvaWQgc2NoZWR1bGUoU1ZHU01JTEVsZW1lbnQqKTsKKyAgICB2b2lkIHVuc2NoZWR1
bGUoU1ZHU01JTEVsZW1lbnQqKTsKKyAgICAKKyAgICBTTUlMVGltZSBlbGFwc2VkKCkgY29uc3Q7
CisKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisgICAgYm9vbCBpc1BhdXNlZCgpIGNvbnN0
OworICAgIAorICAgIHZvaWQgYmVnaW4oKTsKKyAgICB2b2lkIHBhdXNlKCk7CisgICAgdm9pZCBy
ZXN1bWUoKTsKKyAgICAKKyAgICB2b2lkIHNldERvY3VtZW50T3JkZXJJbmRleGVzRGlydHkoKSB7
IG1fZG9jdW1lbnRPcmRlckluZGV4ZXNEaXJ0eSA9IHRydWU7IH0KKworICAgIC8vIE1vdmUgdG8g
YSBzcGVjaWZpYyB0aW1lLiBPbmx5IHVzZWQgZm9yIERSVCB0ZXN0aW5nIHB1cnBvc2VzLgorICAg
IHZvaWQgc2FtcGxlQW5pbWF0aW9uQXRUaW1lKGNvbnN0IFN0cmluZyYgZWxlbWVudElkLCBkb3Vi
bGUgc2Vjb25kcyk7CisKK3ByaXZhdGU6CisgICAgU01JTFRpbWVDb250YWluZXIoU1ZHU1ZHRWxl
bWVudCogb3duZXIpOworICAgIAorICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxTTUlMVGltZUNv
bnRhaW5lcj4qKTsKKyAgICB2b2lkIHN0YXJ0VGltZXIoU01JTFRpbWUgZmlyZVRpbWUsIFNNSUxU
aW1lIG1pbmltdW1EZWxheSA9IDApOworICAgIHZvaWQgdXBkYXRlQW5pbWF0aW9ucyhTTUlMVGlt
ZSBlbGFwc2VkKTsKKyAgICAKKyAgICB2b2lkIHVwZGF0ZURvY3VtZW50T3JkZXJJbmRleGVzKCk7
CisgICAgdm9pZCBzb3J0QnlQcmlvcml0eShWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiYgc21pbEVs
ZW1lbnRzLCBTTUlMVGltZSBlbGFwc2VkKTsKKyAgICAKKyAgICB0eXBlZGVmIHBhaXI8U1ZHRWxl
bWVudCosIFN0cmluZz4gRWxlbWVudEF0dHJpYnV0ZVBhaXI7CisgICAgU3RyaW5nIGJhc2VWYWx1
ZUZvcihFbGVtZW50QXR0cmlidXRlUGFpcik7CisgICAgCisgICAgZG91YmxlIG1fYmVnaW5UaW1l
OworICAgIGRvdWJsZSBtX3BhdXNlVGltZTsKKyAgICBkb3VibGUgbV9hY2N1bXVsYXRlZFBhdXNl
VGltZTsKKyAgICBkb3VibGUgbV9uZXh0TWFudWFsU2FtcGxlVGltZTsKKyAgICBTdHJpbmcgbV9u
ZXh0U2FtcGxpbmdUYXJnZXQ7CisKKyAgICBib29sIG1fZG9jdW1lbnRPcmRlckluZGV4ZXNEaXJ0
eTsKKyAgICAKKyAgICBUaW1lcjxTTUlMVGltZUNvbnRhaW5lcj4gbV90aW1lcjsKKworICAgIHR5
cGVkZWYgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+IFRpbWluZ0VsZW1lbnRTZXQ7CisgICAgVGlt
aW5nRWxlbWVudFNldCBtX3NjaGVkdWxlZEFuaW1hdGlvbnM7CisgICAgCisgICAgdHlwZWRlZiBI
YXNoTWFwPEVsZW1lbnRBdHRyaWJ1dGVQYWlyLCBTdHJpbmc+IEJhc2VWYWx1ZU1hcDsKKyAgICBC
YXNlVmFsdWVNYXAgbV9zYXZlZEJhc2VWYWx1ZXM7CisKKyAgICBTVkdTVkdFbGVtZW50KiBtX293
bmVyU1ZHRWxlbWVudDsKK307CiB9CiAKLSNlbmRpZgotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxF
KFNWRykKKyNlbmRpZiAvLyBTTUlMVGltZUNvbnRhaW5lcl9oCkluZGV4OiBXZWJDb3JlL3N2Zy9h
bmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2Fu
aW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHJldmlzaW9uIDc0NjgwKQorKysgV2ViQ29yZS9z
dmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsOCAr
OTIsNyBAQCBwcml2YXRlOgogYm9vbCBDb25kaXRpb25FdmVudExpc3RlbmVyOjpvcGVyYXRvcj09
KGNvbnN0IEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyKQogewogICAgIGlmIChjb25zdCBDb25kaXRp
b25FdmVudExpc3RlbmVyKiBjb25kaXRpb25FdmVudExpc3RlbmVyID0gQ29uZGl0aW9uRXZlbnRM
aXN0ZW5lcjo6Y2FzdCgmbGlzdGVuZXIpKQotICAgICAgICByZXR1cm4gbV9hbmltYXRpb24gPT0g
Y29uZGl0aW9uRXZlbnRMaXN0ZW5lci0+bV9hbmltYXRpb24gJiYKLSAgICAgICAgICAgICAgIG1f
Y29uZGl0aW9uID09IGNvbmRpdGlvbkV2ZW50TGlzdGVuZXItPm1fY29uZGl0aW9uOworICAgICAg
ICByZXR1cm4gbV9hbmltYXRpb24gPT0gY29uZGl0aW9uRXZlbnRMaXN0ZW5lci0+bV9hbmltYXRp
b24gJiYgbV9jb25kaXRpb24gPT0gY29uZGl0aW9uRXZlbnRMaXN0ZW5lci0+bV9jb25kaXRpb247
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC02MTQsNyArNjEzLDcgQEAgU01JTFRpbWUgU1ZH
U01JTEVsZW1lbnQ6OnJlcGVhdGluZ0R1cmF0aQogICAgIFNNSUxUaW1lIHJlcGVhdENvdW50ID0g
dGhpcy0+cmVwZWF0Q291bnQoKTsKICAgICBTTUlMVGltZSByZXBlYXREdXIgPSB0aGlzLT5yZXBl
YXREdXIoKTsKICAgICBTTUlMVGltZSBzaW1wbGVEdXJhdGlvbiA9IHRoaXMtPnNpbXBsZUR1cmF0
aW9uKCk7Ci0gICAgaWYgKHNpbXBsZUR1cmF0aW9uID09IDAgfHwgKHJlcGVhdER1ci5pc1VucmVz
b2x2ZWQoKSAmJiByZXBlYXRDb3VudC5pc1VucmVzb2x2ZWQoKSkpCisgICAgaWYgKCFzaW1wbGVE
dXJhdGlvbiB8fCAocmVwZWF0RHVyLmlzVW5yZXNvbHZlZCgpICYmIHJlcGVhdENvdW50LmlzVW5y
ZXNvbHZlZCgpKSkKICAgICAgICAgcmV0dXJuIHNpbXBsZUR1cmF0aW9uOwogICAgIFNNSUxUaW1l
IHJlcGVhdENvdW50RHVyYXRpb24gPSBzaW1wbGVEdXJhdGlvbiAqIHJlcGVhdENvdW50OwogICAg
IHJldHVybiBtaW4ocmVwZWF0Q291bnREdXJhdGlvbiwgbWluKHJlcGVhdER1ciwgU01JTFRpbWU6
OmluZGVmaW5pdGUoKSkpOwpAQCAtNjcwLDEwICs2NjksMTEgQEAgdm9pZCBTVkdTTUlMRWxlbWVu
dDo6cmVzb2x2ZUludGVydmFsKGJvbwogICAgICAgICAgICAgYmVnaW5SZXN1bHQgPSB0ZW1wQmVn
aW47CiAgICAgICAgICAgICBlbmRSZXN1bHQgPSB0ZW1wRW5kOwogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9IGVsc2UgaWYgKHJlc3RhcnQoKSA9PSBSZXN0YXJ0TmV2ZXIpCisgICAgICAg
IH0KKyAgICAgICAgaWYgKHJlc3RhcnQoKSA9PSBSZXN0YXJ0TmV2ZXIpCiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmVnaW5BZnRlciA9IHRlbXBFbmQ7CisK
KyAgICAgICAgYmVnaW5BZnRlciA9IHRlbXBFbmQ7CiAgICAgICAgIGxhc3RJbnRlcnZhbFRlbXBF
bmQgPSB0ZW1wRW5kOwogICAgIH0KICAgICBiZWdpblJlc3VsdCA9IFNNSUxUaW1lOjp1bnJlc29s
dmVkKCk7CkBAIC03ODcsNyArNzg3LDcgQEAgZmxvYXQgU1ZHU01JTEVsZW1lbnQ6OmNhbGN1bGF0
ZUFuaW1hdGlvbgogICAgICAgICByZXBlYXQgPSAwOwogICAgICAgICByZXR1cm4gMC5mOwogICAg
IH0KLSAgICBpZiAoc2ltcGxlRHVyYXRpb24gPT0gMCkgeworICAgIGlmICghc2ltcGxlRHVyYXRp
b24pIHsKICAgICAgICAgcmVwZWF0ID0gMDsKICAgICAgICAgcmV0dXJuIDEuZjsKICAgICB9CkBA
IC03OTcsNyArNzk3LDcgQEAgZmxvYXQgU1ZHU01JTEVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGlv
bgogICAgIFNNSUxUaW1lIHJlcGVhdGluZ0R1cmF0aW9uID0gdGhpcy0+cmVwZWF0aW5nRHVyYXRp
b24oKTsKICAgICBpZiAoZWxhcHNlZCA+PSBtX2ludGVydmFsRW5kIHx8IGFjdGl2ZVRpbWUgPiBy
ZXBlYXRpbmdEdXJhdGlvbikgewogICAgICAgICByZXBlYXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocmVwZWF0aW5nRHVyYXRpb24udmFsdWUoKSAvIHNpbXBsZUR1cmF0aW9uLnZhbHVlKCkpOwot
ICAgICAgICBpZiAoZm1vZChyZXBlYXRpbmdEdXJhdGlvbi52YWx1ZSgpLCBzaW1wbGVEdXJhdGlv
bi52YWx1ZSgpID09IDAuKSkKKyAgICAgICAgaWYgKGZtb2QocmVwZWF0aW5nRHVyYXRpb24udmFs
dWUoKSwgIXNpbXBsZUR1cmF0aW9uLnZhbHVlKCkpKQogICAgICAgICAgICAgcmVwZWF0LS07CiAg
ICAgICAgIHJldHVybiAxLmY7CiAgICAgfQpJbmRleDogV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NW
R1NNSUxFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NN
SUxFbGVtZW50LmgJKHJldmlzaW9uIDc0NjgwKQorKysgV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NW
R1NNSUxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDE3NSArMjMsMjAxIEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKICAqLwogCi0KICNpZm5kZWYgU1ZHU01JTEVsZW1lbnRfaAogI2RlZmluZSBT
VkdTTUlMRWxlbWVudF9oCiAjaWYgRU5BQkxFKFNWR19BTklNQVRJT04pCi0KLSNpbmNsdWRlICJT
VkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU01JTFRpbWUuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50
LmgiCisKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgCi0gICAgY2xhc3MgQ29uZGl0aW9uRXZlbnRMaXN0ZW5lcjsKLSAgICBjbGFzcyBTTUlMVGlt
ZUNvbnRhaW5lcjsKK2NsYXNzIENvbmRpdGlvbkV2ZW50TGlzdGVuZXI7CitjbGFzcyBTTUlMVGlt
ZUNvbnRhaW5lcjsKKworLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFNNSUwgaW50ZXJ2YWwgdGlt
aW5nIG1vZGVsIGFzIG5lZWRlZCBmb3IgU1ZHIGFuaW1hdGlvbi4KK2NsYXNzIFNWR1NNSUxFbGVt
ZW50IDogcHVibGljIFNWR0VsZW1lbnQgeworcHVibGljOgorICAgIFNWR1NNSUxFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgIHZpcnR1YWwgflNWR1NNSUxFbGVt
ZW50KCk7CisKKyAgICBzdGF0aWMgYm9vbCBpc1NNSUxFbGVtZW50KE5vZGUqKTsKKworICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqLCBib29sIHByZXNlcnZlRGVjbHMpOwor
ICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOworICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcnNpbmdD
aGlsZHJlbigpOworCisgICAgU01JTFRpbWVDb250YWluZXIqIHRpbWVDb250YWluZXIoKSBjb25z
dCB7IHJldHVybiBtX3RpbWVDb250YWluZXIuZ2V0KCk7IH0KKworICAgIFNWR0VsZW1lbnQqIHRh
cmdldEVsZW1lbnQoKSBjb25zdDsKKyAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSgpIGNvbnN0Owor
CisgICAgdm9pZCBiZWdpbkJ5TGlua0FjdGl2YXRpb24oKTsKKworICAgIGVudW0gUmVzdGFydCB7
CisgICAgICAgIFJlc3RhcnRBbHdheXMsCisgICAgICAgIFJlc3RhcnRXaGVuTm90QWN0aXZlLAor
ICAgICAgICBSZXN0YXJ0TmV2ZXIKKyAgICB9OworCisgICAgUmVzdGFydCByZXN0YXJ0KCkgY29u
c3Q7CisKKyAgICBlbnVtIEZpbGxNb2RlIHsKKyAgICAgICAgRmlsbFJlbW92ZSwKKyAgICAgICAg
RmlsbEZyZWV6ZQorICAgIH07CisKKyAgICBGaWxsTW9kZSBmaWxsKCkgY29uc3Q7CisKKyAgICBT
dHJpbmcgeGxpbmtIcmVmKCkgY29uc3Q7CisKKyAgICBTTUlMVGltZSBkdXIoKSBjb25zdDsKKyAg
ICBTTUlMVGltZSByZXBlYXREdXIoKSBjb25zdDsKKyAgICBTTUlMVGltZSByZXBlYXRDb3VudCgp
IGNvbnN0OworICAgIFNNSUxUaW1lIG1heFZhbHVlKCkgY29uc3Q7CisgICAgU01JTFRpbWUgbWlu
VmFsdWUoKSBjb25zdDsKKworICAgIFNNSUxUaW1lIGVsYXBzZWQoKSBjb25zdDsgCisKKyAgICBT
TUlMVGltZSBpbnRlcnZhbEJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcnZhbEJlZ2luOyB9
CisgICAgU01JTFRpbWUgaW50ZXJ2YWxFbmQoKSBjb25zdCB7IHJldHVybiBtX2ludGVydmFsRW5k
OyB9CisgICAgU01JTFRpbWUgcHJldmlvdXNJbnRlcnZhbEJlZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9wcmV2aW91c0ludGVydmFsQmVnaW47IH0KKyAgICBTTUlMVGltZSBzaW1wbGVEdXJhdGlvbigp
IGNvbnN0OworCisgICAgdm9pZCBwcm9ncmVzcyhTTUlMVGltZSBlbGFwc2VkLCBTVkdTTUlMRWxl
bWVudCogcmVzdWx0c0VsZW1lbnQpOworICAgIFNNSUxUaW1lIG5leHRQcm9ncmVzc1RpbWUoKSBj
b25zdDsKKworICAgIHN0YXRpYyBTTUlMVGltZSBwYXJzZUNsb2NrVmFsdWUoY29uc3QgU3RyaW5n
Jik7CisgICAgc3RhdGljIFNNSUxUaW1lIHBhcnNlT2Zmc2V0VmFsdWUoY29uc3QgU3RyaW5nJik7
CisKKyAgICBib29sIGlzQ29udHJpYnV0aW5nKFNNSUxUaW1lIGVsYXBzZWQpIGNvbnN0OworICAg
IGJvb2wgaXNJbmFjdGl2ZSgpIGNvbnN0OworICAgIGJvb2wgaXNGcm96ZW4oKSBjb25zdDsKKwor
ICAgIHVuc2lnbmVkIGRvY3VtZW50T3JkZXJJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1l
bnRPcmRlckluZGV4OyB9CisgICAgdm9pZCBzZXREb2N1bWVudE9yZGVySW5kZXgodW5zaWduZWQg
aW5kZXgpIHsgbV9kb2N1bWVudE9yZGVySW5kZXggPSBpbmRleDsgfQorCisgICAgdmlydHVhbCBi
b29sIGlzQWRkaXRpdmUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc2V0VG9CYXNl
VmFsdWUoY29uc3QgU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVJlc3VsdHNU
b1RhcmdldCgpID0gMDsKIAotICAgIC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTTUlMIGludGVy
dmFsIHRpbWluZyBtb2RlbCBhcyBuZWVkZWQgZm9yIFNWRyBhbmltYXRpb24uCi0gICAgY2xhc3Mg
U1ZHU01JTEVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxlbWVudCB7Ci0gICAgcHVibGljOgotICAgICAg
ICBTVkdTTUlMRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLSAgICAg
ICAgdmlydHVhbCB+U1ZHU01JTEVsZW1lbnQoKTsKLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBi
b29sIGlzU01JTEVsZW1lbnQoTm9kZSogbm9kZSk7Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSosIGJvb2wgcHJlc2VydmVEZWNscyk7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgICAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZmlu
aXNoUGFyc2luZ0NoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIFNNSUxUaW1l
Q29udGFpbmVyKiB0aW1lQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gbV90aW1lQ29udGFpbmVy
LmdldCgpOyB9Ci0KLSAgICAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCgpIGNvbnN0Owot
ICAgICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSgpIGNvbnN0OwotICAgICAgICAKLSAgICAgICAg
dm9pZCBiZWdpbkJ5TGlua0FjdGl2YXRpb24oKTsKLQotICAgICAgICBlbnVtIFJlc3RhcnQgeyBS
ZXN0YXJ0QWx3YXlzLCBSZXN0YXJ0V2hlbk5vdEFjdGl2ZSwgUmVzdGFydE5ldmVyIH07Ci0gICAg
ICAgIFJlc3RhcnQgcmVzdGFydCgpIGNvbnN0OwotICAgICAgICAKLSAgICAgICAgZW51bSBGaWxs
TW9kZSB7IEZpbGxSZW1vdmUsIEZpbGxGcmVlemUgfTsKLSAgICAgICAgRmlsbE1vZGUgZmlsbCgp
IGNvbnN0OwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIHhsaW5rSHJlZigpIGNvbnN0OwotICAg
ICAgICAKLSAgICAgICAgU01JTFRpbWUgZHVyKCkgY29uc3Q7Ci0gICAgICAgIFNNSUxUaW1lIHJl
cGVhdER1cigpIGNvbnN0OwotICAgICAgICBTTUlMVGltZSByZXBlYXRDb3VudCgpIGNvbnN0Owot
ICAgICAgICBTTUlMVGltZSBtYXhWYWx1ZSgpIGNvbnN0OwotICAgICAgICBTTUlMVGltZSBtaW5W
YWx1ZSgpIGNvbnN0OwotICAgICAgICAKLSAgICAgICAgU01JTFRpbWUgZWxhcHNlZCgpIGNvbnN0
OyAKLSAgICAgICAgCi0gICAgICAgIFNNSUxUaW1lIGludGVydmFsQmVnaW4oKSBjb25zdCB7IHJl
dHVybiBtX2ludGVydmFsQmVnaW47IH0KLSAgICAgICAgU01JTFRpbWUgaW50ZXJ2YWxFbmQoKSBj
b25zdCB7IHJldHVybiBtX2ludGVydmFsRW5kOyB9Ci0gICAgICAgIFNNSUxUaW1lIHByZXZpb3Vz
SW50ZXJ2YWxCZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJldmlvdXNJbnRlcnZhbEJlZ2luOyB9
Ci0gICAgICAgIFNNSUxUaW1lIHNpbXBsZUR1cmF0aW9uKCkgY29uc3Q7Ci0gICAgICAgIAotICAg
ICAgICB2b2lkIHByb2dyZXNzKFNNSUxUaW1lIGVsYXBzZWQsIFNWR1NNSUxFbGVtZW50KiByZXN1
bHRzRWxlbWVudCk7Ci0gICAgICAgIFNNSUxUaW1lIG5leHRQcm9ncmVzc1RpbWUoKSBjb25zdDsK
LSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBTTUlMVGltZSBwYXJzZUNsb2NrVmFsdWUoY29uc3Qg
U3RyaW5nJik7Ci0gICAgICAgIHN0YXRpYyBTTUlMVGltZSBwYXJzZU9mZnNldFZhbHVlKGNvbnN0
IFN0cmluZyYpOwotICAgICAgICAKLSAgICAgICAgYm9vbCBpc0NvbnRyaWJ1dGluZyhTTUlMVGlt
ZSBlbGFwc2VkKSBjb25zdDsKLSAgICAgICAgYm9vbCBpc0luYWN0aXZlKCkgY29uc3Q7Ci0gICAg
ICAgIGJvb2wgaXNGcm96ZW4oKSBjb25zdDsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGRv
Y3VtZW50T3JkZXJJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnRPcmRlckluZGV4OyB9
Ci0gICAgICAgIHZvaWQgc2V0RG9jdW1lbnRPcmRlckluZGV4KHVuc2lnbmVkIGluZGV4KSB7IG1f
ZG9jdW1lbnRPcmRlckluZGV4ID0gaW5kZXg7IH0KLSAgICAgICAgCi0gICAgICAgIHZpcnR1YWwg
Ym9vbCBpc0FkZGl0aXZlKCkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRU
b0Jhc2VWYWx1ZShjb25zdCBTdHJpbmcmKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVJlc3VsdHNUb1RhcmdldCgpID0gMDsKLSAgICAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZv
aWQgYWRkQmVnaW5UaW1lKFNNSUxUaW1lIHRpbWUpOwotICAgICAgICB2b2lkIGFkZEVuZFRpbWUo
U01JTFRpbWUgdGltZSk7Ci0gICAgICAgIAorICAgIHZvaWQgYWRkQmVnaW5UaW1lKFNNSUxUaW1l
KTsKKyAgICB2b2lkIGFkZEVuZFRpbWUoU01JTFRpbWUpOworCiBwcml2YXRlOgotICAgICAgICB2
aXJ0dWFsIHZvaWQgc3RhcnRlZEFjdGl2ZUludGVydmFsKCkgPSAwOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlQW5pbWF0aW9uKGZsb2F0IHBlcmNlbnQsIHVuc2lnbmVkIHJlcGVhdCwgU1ZH
U01JTEVsZW1lbnQqIHJlc3VsdEVsZW1lbnQpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGVu
ZGVkQWN0aXZlSW50ZXJ2YWwoKSA9IDA7Ci0gICAgICAgIAotICAgICAgICBlbnVtIEJlZ2luT3JF
bmQgeyBCZWdpbiwgRW5kIH07Ci0gICAgICAgIFNNSUxUaW1lIGZpbmRJbnN0YW5jZVRpbWUoQmVn
aW5PckVuZCBiZWdpbk9yRW5kLCBTTUlMVGltZSBtaW5pbXVtVGltZSwgYm9vbCBlcXVhbHNNaW5p
bXVtT0spIGNvbnN0OwotICAgICAgICB2b2lkIHJlc29sdmVGaXJzdEludGVydmFsKCk7Ci0gICAg
ICAgIHZvaWQgcmVzb2x2ZU5leHRJbnRlcnZhbCgpOwotICAgICAgICB2b2lkIHJlc29sdmVJbnRl
cnZhbChib29sIGZpcnN0LCBTTUlMVGltZSYgYmVnaW5SZXN1bHQsIFNNSUxUaW1lJiBlbmRSZXN1
bHQpIGNvbnN0OwotICAgICAgICBTTUlMVGltZSByZXNvbHZlQWN0aXZlRW5kKFNNSUxUaW1lIHJl
c29sdmVkQmVnaW4sIFNNSUxUaW1lIHJlc29sdmVkRW5kKSBjb25zdDsKLSAgICAgICAgU01JTFRp
bWUgcmVwZWF0aW5nRHVyYXRpb24oKSBjb25zdDsKLSAgICAgICAgdm9pZCBjaGVja1Jlc3RhcnQo
U01JTFRpbWUgZWxhcHNlZCk7Ci0gICAgICAgIHZvaWQgYmVnaW5MaXN0Q2hhbmdlZCgpOwotICAg
ICAgICB2b2lkIGVuZExpc3RDaGFuZ2VkKCk7Ci0gICAgICAgIHZvaWQgcmVzY2hlZHVsZSgpOwot
Ci0gICAgICAgIC8vIFRoaXMgcmVwcmVzZW50cyBjb25kaXRpb25zIG9uIGVsZW1lbnRzIGJlZ2lu
IG9yIGVuZCBsaXN0IHRoYXQgbmVlZCB0byBiZSByZXNvbHZlZCBvbiBydW50aW1lCi0gICAgICAg
IC8vIGZvciBleGFtcGxlIDxhbmltYXRlIGJlZ2luPSJvdGhlckVsZW1lbnQuYmVnaW4gKyA4czsg
YnV0dG9uLmNsaWNrIiAuLi4gLz4KLSAgICAgICAgc3RydWN0IENvbmRpdGlvbiB7Ci0gICAgICAg
ICAgICBlbnVtIFR5cGUgeyBFdmVudEJhc2UsIFN5bmNiYXNlLCBBY2Nlc3NLZXkgfTsKLSAgICAg
ICAgICAgIENvbmRpdGlvbihUeXBlLCBCZWdpbk9yRW5kIGJlZ2luT3JFbmQsIGNvbnN0IFN0cmlu
ZyYgYmFzZUlELCBjb25zdCBTdHJpbmcmIG5hbWUsIFNNSUxUaW1lIG9mZnNldCwgaW50IHJlcGVh
dHMgPSAtMSk7Ci0gICAgICAgICAgICBUeXBlIG1fdHlwZTsKLSAgICAgICAgICAgIEJlZ2luT3JF
bmQgbV9iZWdpbk9yRW5kOwotICAgICAgICAgICAgU3RyaW5nIG1fYmFzZUlEOwotICAgICAgICAg
ICAgU3RyaW5nIG1fbmFtZTsKLSAgICAgICAgICAgIFNNSUxUaW1lIG1fb2Zmc2V0OwotICAgICAg
ICAgICAgaW50IG1fcmVwZWF0czsKLSAgICAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBtX3N5bmNi
YXNlOwotICAgICAgICAgICAgUmVmUHRyPENvbmRpdGlvbkV2ZW50TGlzdGVuZXI+IG1fZXZlbnRM
aXN0ZW5lcjsKLSAgICAgICAgfTsKLSAgICAgICAgYm9vbCBwYXJzZUNvbmRpdGlvbihjb25zdCBT
dHJpbmcmLCBCZWdpbk9yRW5kIGJlZ2luT3JFbmQpOwotICAgICAgICB2b2lkIHBhcnNlQmVnaW5P
ckVuZChjb25zdCBTdHJpbmcmLCBCZWdpbk9yRW5kIGJlZ2luT3JFbmQpOwotICAgICAgICBFbGVt
ZW50KiBldmVudEJhc2VGb3IoY29uc3QgQ29uZGl0aW9uJikgY29uc3Q7Ci0KLSAgICAgICAgdm9p
ZCBjb25uZWN0Q29uZGl0aW9ucygpOwotICAgICAgICB2b2lkIGRpc2Nvbm5lY3RDb25kaXRpb25z
KCk7Ci0gICAgICAgIAotICAgICAgICAvLyBFdmVudCBiYXNlIHRpbWluZwotICAgICAgICB2b2lk
IGhhbmRsZUNvbmRpdGlvbkV2ZW50KEV2ZW50KiwgQ29uZGl0aW9uKik7Ci0gICAgICAgIAotICAg
ICAgICAvLyBTeW5jYmFzZSB0aW1pbmcKLSAgICAgICAgZW51bSBOZXdPckV4aXN0aW5nSW50ZXJ2
YWwgeyBOZXdJbnRlcnZhbCwgRXhpc3RpbmdJbnRlcnZhbCB9OyAKLSAgICAgICAgdm9pZCBub3Rp
ZnlEZXBlbmRlbnRzSW50ZXJ2YWxDaGFuZ2VkKE5ld09yRXhpc3RpbmdJbnRlcnZhbCk7Ci0gICAg
ICAgIHZvaWQgY3JlYXRlSW5zdGFuY2VUaW1lc0Zyb21TeW5jYmFzZShTVkdTTUlMRWxlbWVudCog
c3luY2Jhc2UsIE5ld09yRXhpc3RpbmdJbnRlcnZhbCk7Ci0gICAgICAgIHZvaWQgYWRkVGltZURl
cGVuZGVudChTVkdTTUlMRWxlbWVudCopOwotICAgICAgICB2b2lkIHJlbW92ZVRpbWVEZXBlbmRl
bnQoU1ZHU01JTEVsZW1lbnQqKTsKLSAgICAgICAgCi0gICAgICAgIGVudW0gQWN0aXZlU3RhdGUg
eyBJbmFjdGl2ZSwgQWN0aXZlLCBGcm96ZW4gfTsKLSAgICAgICAgQWN0aXZlU3RhdGUgZGV0ZXJt
aW5lQWN0aXZlU3RhdGUoU01JTFRpbWUgZWxhcHNlZCkgY29uc3Q7Ci0gICAgICAgIGZsb2F0IGNh
bGN1bGF0ZUFuaW1hdGlvblBlcmNlbnRBbmRSZXBlYXQoU01JTFRpbWUgZWxhcHNlZCwgdW5zaWdu
ZWQmIHJlcGVhdCkgY29uc3Q7Ci0gICAgICAgIFNNSUxUaW1lIGNhbGN1bGF0ZU5leHRQcm9ncmVz
c1RpbWUoU01JTFRpbWUgZWxhcHNlZCkgY29uc3Q7Ci0gICAgICAgIAotICAgICAgICBWZWN0b3I8
Q29uZGl0aW9uPiBtX2NvbmRpdGlvbnM7Ci0gICAgICAgIGJvb2wgbV9jb25kaXRpb25zQ29ubmVj
dGVkOwotICAgICAgICBib29sIG1faGFzRW5kRXZlbnRDb25kaXRpb25zOyAgICAgCi0gICAgICAg
IAotICAgICAgICB0eXBlZGVmIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiBUaW1lRGVwZW5kZW50
U2V0OwotICAgICAgICBUaW1lRGVwZW5kZW50U2V0IG1fdGltZURlcGVuZGVudHM7Ci0gICAgICAg
IAotICAgICAgICAvLyBJbnN0YW5jZSB0aW1lIGxpc3RzCi0gICAgICAgIFZlY3RvcjxTTUlMVGlt
ZT4gbV9iZWdpblRpbWVzOwotICAgICAgICBWZWN0b3I8U01JTFRpbWU+IG1fZW5kVGltZXM7Ci0g
ICAgICAgIAotICAgICAgICAvLyBUaGlzIGlzIHRoZSB1cGNvbWluZyBvciBjdXJyZW50IGludGVy
dmFsCi0gICAgICAgIFNNSUxUaW1lIG1faW50ZXJ2YWxCZWdpbjsKLSAgICAgICAgU01JTFRpbWUg
bV9pbnRlcnZhbEVuZDsKLSAgICAgICAgCi0gICAgICAgIFNNSUxUaW1lIG1fcHJldmlvdXNJbnRl
cnZhbEJlZ2luOwotICAgICAgICAKLSAgICAgICAgYm9vbCBtX2lzV2FpdGluZ0ZvckZpcnN0SW50
ZXJ2YWw7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0ZWRBY3RpdmVJbnRlcnZhbCgpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0aW9uKGZsb2F0IHBlcmNlbnQsIHVuc2lnbmVkIHJl
cGVhdCwgU1ZHU01JTEVsZW1lbnQqIHJlc3VsdEVsZW1lbnQpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZW5kZWRBY3RpdmVJbnRlcnZhbCgpID0gMDsKKworICAgIGVudW0gQmVnaW5PckVuZCB7Cisg
ICAgICAgIEJlZ2luLAorICAgICAgICBFbmQKKyAgICB9OwogICAgIAotICAgICAgICBBY3RpdmVT
dGF0ZSBtX2FjdGl2ZVN0YXRlOwotICAgICAgICBmbG9hdCBtX2xhc3RQZXJjZW50OwotICAgICAg
ICB1bnNpZ25lZCBtX2xhc3RSZXBlYXQ7Ci0gICAgICAgIAotICAgICAgICBTTUlMVGltZSBtX25l
eHRQcm9ncmVzc1RpbWU7Ci0gICAgICAgIAotICAgICAgICBSZWZQdHI8U01JTFRpbWVDb250YWlu
ZXI+IG1fdGltZUNvbnRhaW5lcjsKLSAgICAgICAgdW5zaWduZWQgbV9kb2N1bWVudE9yZGVySW5k
ZXg7Ci0KLSAgICAgICAgbXV0YWJsZSBTTUlMVGltZSBtX2NhY2hlZER1cjsKLSAgICAgICAgbXV0
YWJsZSBTTUlMVGltZSBtX2NhY2hlZFJlcGVhdER1cjsKLSAgICAgICAgbXV0YWJsZSBTTUlMVGlt
ZSBtX2NhY2hlZFJlcGVhdENvdW50OwotICAgICAgICBtdXRhYmxlIFNNSUxUaW1lIG1fY2FjaGVk
TWluOwotICAgICAgICBtdXRhYmxlIFNNSUxUaW1lIG1fY2FjaGVkTWF4OwotICAgICAgICAKLSAg
ICAgICAgZnJpZW5kIGNsYXNzIENvbmRpdGlvbkV2ZW50TGlzdGVuZXI7CisgICAgU01JTFRpbWUg
ZmluZEluc3RhbmNlVGltZShCZWdpbk9yRW5kLCBTTUlMVGltZSBtaW5pbXVtVGltZSwgYm9vbCBl
cXVhbHNNaW5pbXVtT0spIGNvbnN0OworICAgIHZvaWQgcmVzb2x2ZUZpcnN0SW50ZXJ2YWwoKTsK
KyAgICB2b2lkIHJlc29sdmVOZXh0SW50ZXJ2YWwoKTsKKyAgICB2b2lkIHJlc29sdmVJbnRlcnZh
bChib29sIGZpcnN0LCBTTUlMVGltZSYgYmVnaW5SZXN1bHQsIFNNSUxUaW1lJiBlbmRSZXN1bHQp
IGNvbnN0OworICAgIFNNSUxUaW1lIHJlc29sdmVBY3RpdmVFbmQoU01JTFRpbWUgcmVzb2x2ZWRC
ZWdpbiwgU01JTFRpbWUgcmVzb2x2ZWRFbmQpIGNvbnN0OworICAgIFNNSUxUaW1lIHJlcGVhdGlu
Z0R1cmF0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBjaGVja1Jlc3RhcnQoU01JTFRpbWUgZWxhcHNl
ZCk7CisgICAgdm9pZCBiZWdpbkxpc3RDaGFuZ2VkKCk7CisgICAgdm9pZCBlbmRMaXN0Q2hhbmdl
ZCgpOworICAgIHZvaWQgcmVzY2hlZHVsZSgpOworCisgICAgLy8gVGhpcyByZXByZXNlbnRzIGNv
bmRpdGlvbnMgb24gZWxlbWVudHMgYmVnaW4gb3IgZW5kIGxpc3QgdGhhdCBuZWVkIHRvIGJlIHJl
c29sdmVkIG9uIHJ1bnRpbWUKKyAgICAvLyBmb3IgZXhhbXBsZSA8YW5pbWF0ZSBiZWdpbj0ib3Ro
ZXJFbGVtZW50LmJlZ2luICsgOHM7IGJ1dHRvbi5jbGljayIgLi4uIC8+CisgICAgc3RydWN0IENv
bmRpdGlvbiB7CisgICAgICAgIGVudW0gVHlwZSB7CisgICAgICAgICAgICBFdmVudEJhc2UsCisg
ICAgICAgICAgICBTeW5jYmFzZSwKKyAgICAgICAgICAgIEFjY2Vzc0tleQorICAgICAgICB9Owor
CisgICAgICAgIENvbmRpdGlvbihUeXBlLCBCZWdpbk9yRW5kLCBjb25zdCBTdHJpbmcmIGJhc2VJ
RCwgY29uc3QgU3RyaW5nJiBuYW1lLCBTTUlMVGltZSBvZmZzZXQsIGludCByZXBlYXRzID0gLTEp
OworICAgICAgICBUeXBlIG1fdHlwZTsKKyAgICAgICAgQmVnaW5PckVuZCBtX2JlZ2luT3JFbmQ7
CisgICAgICAgIFN0cmluZyBtX2Jhc2VJRDsKKyAgICAgICAgU3RyaW5nIG1fbmFtZTsKKyAgICAg
ICAgU01JTFRpbWUgbV9vZmZzZXQ7CisgICAgICAgIGludCBtX3JlcGVhdHM7CisgICAgICAgIFJl
ZlB0cjxFbGVtZW50PiBtX3N5bmNiYXNlOworICAgICAgICBSZWZQdHI8Q29uZGl0aW9uRXZlbnRM
aXN0ZW5lcj4gbV9ldmVudExpc3RlbmVyOwogICAgIH07CisgICAgYm9vbCBwYXJzZUNvbmRpdGlv
bihjb25zdCBTdHJpbmcmLCBCZWdpbk9yRW5kIGJlZ2luT3JFbmQpOworICAgIHZvaWQgcGFyc2VC
ZWdpbk9yRW5kKGNvbnN0IFN0cmluZyYsIEJlZ2luT3JFbmQgYmVnaW5PckVuZCk7CisgICAgRWxl
bWVudCogZXZlbnRCYXNlRm9yKGNvbnN0IENvbmRpdGlvbiYpIGNvbnN0OworCisgICAgdm9pZCBj
b25uZWN0Q29uZGl0aW9ucygpOworICAgIHZvaWQgZGlzY29ubmVjdENvbmRpdGlvbnMoKTsKKwor
ICAgIC8vIEV2ZW50IGJhc2UgdGltaW5nCisgICAgdm9pZCBoYW5kbGVDb25kaXRpb25FdmVudChF
dmVudCosIENvbmRpdGlvbiopOworCisgICAgLy8gU3luY2Jhc2UgdGltaW5nCisgICAgZW51bSBO
ZXdPckV4aXN0aW5nSW50ZXJ2YWwgeworICAgICAgICBOZXdJbnRlcnZhbCwKKyAgICAgICAgRXhp
c3RpbmdJbnRlcnZhbAorICAgIH07CisKKyAgICB2b2lkIG5vdGlmeURlcGVuZGVudHNJbnRlcnZh
bENoYW5nZWQoTmV3T3JFeGlzdGluZ0ludGVydmFsKTsKKyAgICB2b2lkIGNyZWF0ZUluc3RhbmNl
VGltZXNGcm9tU3luY2Jhc2UoU1ZHU01JTEVsZW1lbnQqIHN5bmNiYXNlLCBOZXdPckV4aXN0aW5n
SW50ZXJ2YWwpOworICAgIHZvaWQgYWRkVGltZURlcGVuZGVudChTVkdTTUlMRWxlbWVudCopOwor
ICAgIHZvaWQgcmVtb3ZlVGltZURlcGVuZGVudChTVkdTTUlMRWxlbWVudCopOworCisgICAgZW51
bSBBY3RpdmVTdGF0ZSB7CisgICAgICAgIEluYWN0aXZlLAorICAgICAgICBBY3RpdmUsCisgICAg
ICAgIEZyb3plbgorICAgIH07CisKKyAgICBBY3RpdmVTdGF0ZSBkZXRlcm1pbmVBY3RpdmVTdGF0
ZShTTUlMVGltZSBlbGFwc2VkKSBjb25zdDsKKyAgICBmbG9hdCBjYWxjdWxhdGVBbmltYXRpb25Q
ZXJjZW50QW5kUmVwZWF0KFNNSUxUaW1lIGVsYXBzZWQsIHVuc2lnbmVkJiByZXBlYXQpIGNvbnN0
OworICAgIFNNSUxUaW1lIGNhbGN1bGF0ZU5leHRQcm9ncmVzc1RpbWUoU01JTFRpbWUgZWxhcHNl
ZCkgY29uc3Q7CisKKyAgICBWZWN0b3I8Q29uZGl0aW9uPiBtX2NvbmRpdGlvbnM7CisgICAgYm9v
bCBtX2NvbmRpdGlvbnNDb25uZWN0ZWQ7CisgICAgYm9vbCBtX2hhc0VuZEV2ZW50Q29uZGl0aW9u
czsgICAgIAorCisgICAgdHlwZWRlZiBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4gVGltZURlcGVu
ZGVudFNldDsKKyAgICBUaW1lRGVwZW5kZW50U2V0IG1fdGltZURlcGVuZGVudHM7CisKKyAgICAv
LyBJbnN0YW5jZSB0aW1lIGxpc3RzCisgICAgVmVjdG9yPFNNSUxUaW1lPiBtX2JlZ2luVGltZXM7
CisgICAgVmVjdG9yPFNNSUxUaW1lPiBtX2VuZFRpbWVzOworCisgICAgLy8gVGhpcyBpcyB0aGUg
dXBjb21pbmcgb3IgY3VycmVudCBpbnRlcnZhbAorICAgIFNNSUxUaW1lIG1faW50ZXJ2YWxCZWdp
bjsKKyAgICBTTUlMVGltZSBtX2ludGVydmFsRW5kOworCisgICAgU01JTFRpbWUgbV9wcmV2aW91
c0ludGVydmFsQmVnaW47CisKKyAgICBib29sIG1faXNXYWl0aW5nRm9yRmlyc3RJbnRlcnZhbDsK
KworICAgIEFjdGl2ZVN0YXRlIG1fYWN0aXZlU3RhdGU7CisgICAgZmxvYXQgbV9sYXN0UGVyY2Vu
dDsKKyAgICB1bnNpZ25lZCBtX2xhc3RSZXBlYXQ7CisKKyAgICBTTUlMVGltZSBtX25leHRQcm9n
cmVzc1RpbWU7CisKKyAgICBSZWZQdHI8U01JTFRpbWVDb250YWluZXI+IG1fdGltZUNvbnRhaW5l
cjsKKyAgICB1bnNpZ25lZCBtX2RvY3VtZW50T3JkZXJJbmRleDsKKworICAgIG11dGFibGUgU01J
TFRpbWUgbV9jYWNoZWREdXI7CisgICAgbXV0YWJsZSBTTUlMVGltZSBtX2NhY2hlZFJlcGVhdER1
cjsKKyAgICBtdXRhYmxlIFNNSUxUaW1lIG1fY2FjaGVkUmVwZWF0Q291bnQ7CisgICAgbXV0YWJs
ZSBTTUlMVGltZSBtX2NhY2hlZE1pbjsKKyAgICBtdXRhYmxlIFNNSUxUaW1lIG1fY2FjaGVkTWF4
OworCisgICAgZnJpZW5kIGNsYXNzIENvbmRpdGlvbkV2ZW50TGlzdGVuZXI7Cit9OwogCiB9CiAK
LSNlbmRpZgotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZiAvLyBTVkdTTUlM
RWxlbWVudF9oCiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDc0
NjgwKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MSw3ICs1MSw3IEBACiAvLyBNb3ZpbmcgdGhpcyAjaW5jbHVkZSBhYm92ZSBGcmFtZUxv
YWRlci5oIGNhdXNlcyB0aGUgV2luZG93cyBidWlsZCB0byBmYWlsIGR1ZSB0byB3YXJuaW5ncyBh
Ym91dAogLy8gYWxpZ25tZW50IGluIFRpbWVyPEZyYW1lTG9hZGVyPi4gSXQgc2VlbXMgdGhhdCB0
aGUgZGVmaW5pdGlvbiBvZiBFbXB0eUZyYW1lTG9hZGVyQ2xpZW50IGlzIHdoYXQKIC8vIGNhdXNl
cyB0aGlzIChyZW1vdmluZyB0aGF0IGRlZmluaXRpb24gZml4ZXMgdGhlIHdhcm5pbmdzKSwgYnV0
IGl0IGlzbid0IGNsZWFyIHdoeS4KLSNpbmNsdWRlICJFbXB0eUNsaWVudHMuaCIKKyNpbmNsdWRl
ICJFbXB0eUNsaWVudHMuaCIgLy8gTk9MSU5UCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRl
eDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCShyZXZpc2lvbiA3NDY4MCkKKysrIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDQ4ICszMyw0NyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBQYWdlOwotICAgIGNsYXNzIFNWR0lt
YWdlQ2hyb21lQ2xpZW50OwotICAgIAotICAgIGNsYXNzIFNWR0ltYWdlIDogcHVibGljIEltYWdl
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR0ltYWdlPiBjcmVh
dGUoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU1ZHSW1hZ2Uob2JzZXJ2ZXIpKTsKLSAgICAgICAgfQotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgdmlydHVhbCB+U1ZHSW1hZ2UoKTsKLQotICAgICAgICB2aXJ0dWFsIFN0
cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmKTsKLSAgICAgICAgdmlydHVhbCBib29sIHVz
ZXNDb250YWluZXJTaXplKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBoYXNSZWxhdGl2
ZVdpZHRoKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBoYXNSZWxhdGl2ZUhlaWdodCgp
IGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7Ci0gICAgICAg
IAotICAgICAgICB2aXJ0dWFsIGJvb2wgZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQp
OwotCi0gICAgICAgIC8vIEZJWE1FOiBTVkdJbWFnZXMgYXJlIHVuZGVycmVwb3J0aW5nIGRlY29k
ZWQgc2l6ZXMgYW5kIHdpbGwgYmUgdW5hYmxlCi0gICAgICAgIC8vIHRvIHBydW5lIGJlY2F1c2Ug
dGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0LgotICAgICAgICB2aXJ0dWFs
IHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wpIHsgfQotICAgICAgICB2aXJ0dWFsIHVuc2ln
bmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gMDsgfQotCi0gICAgICAgIHZpcnR1YWwg
TmF0aXZlSW1hZ2VQdHIgZnJhbWVBdEluZGV4KHNpemVfdCkgeyByZXR1cm4gMDsgfQotICAgICAg
ICAKLSAgICAgICAgU1ZHSW1hZ2UoSW1hZ2VPYnNlcnZlciopOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGZyb21SZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRvUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0
ZU9wZXJhdG9yKTsKLSAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICAgICAgCi0gICAgICAgIE93blB0cjxTVkdJ
bWFnZUNocm9tZUNsaWVudD4gbV9jaHJvbWVDbGllbnQ7Ci0gICAgICAgIE93blB0cjxQYWdlPiBt
X3BhZ2U7Ci0gICAgICAgIFJlZlB0cjxJbWFnZT4gbV9mcmFtZUNhY2hlOwotICAgIH07CitjbGFz
cyBQYWdlOworY2xhc3MgU1ZHSW1hZ2VDaHJvbWVDbGllbnQ7CisKK2NsYXNzIFNWR0ltYWdlIDog
cHVibGljIEltYWdlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdJbWFnZT4g
Y3JlYXRlKEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTVkdJbWFnZShvYnNlcnZlcikpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2
aXJ0dWFsIH5TVkdJbWFnZSgpOworCisgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNp
b24oKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250YWluZXJTaXplKGNvbnN0IElu
dFNpemUmKTsKKyAgICB2aXJ0dWFsIGJvb2wgdXNlc0NvbnRhaW5lclNpemUoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgaGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBoYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0OworCisgICAgdmlydHVhbCBJbnRTaXplIHNpemUo
KSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNl
aXZlZCk7CisKKyAgICAvLyBGSVhNRTogU1ZHSW1hZ2VzIGFyZSB1bmRlcnJlcG9ydGluZyBkZWNv
ZGVkIHNpemVzIGFuZCB3aWxsIGJlIHVuYWJsZQorICAgIC8vIHRvIHBydW5lIGJlY2F1c2UgdGhl
c2UgZnVuY3Rpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0LgorICAgIHZpcnR1YWwgdm9pZCBk
ZXN0cm95RGVjb2RlZERhdGEoYm9vbCkgeyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVk
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIg
ZnJhbWVBdEluZGV4KHNpemVfdCkgeyByZXR1cm4gMDsgfQorCisgICAgU1ZHSW1hZ2UoSW1hZ2VP
YnNlcnZlciopOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEZsb2F0UmVjdCYgZnJvbVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdG9SZWN0LCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworCisgICAgdmlydHVhbCBOYXRp
dmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworCisgICAgT3duUHRyPFNW
R0ltYWdlQ2hyb21lQ2xpZW50PiBtX2Nocm9tZUNsaWVudDsKKyAgICBPd25QdHI8UGFnZT4gbV9w
YWdlOworICAgIFJlZlB0cjxJbWFnZT4gbV9mcmFtZUNhY2hlOworfTsKIH0KIAogI2VuZGlmIC8v
IEVOQUJMRShTVkcpCi0KLSNlbmRpZgorI2VuZGlmIC8vIFNWR0ltYWdlX2gKSW5kZXg6IFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCShyZXZpc2lv
biA3NDY4MCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yMCw4ICsyMSw2IEBACiAjaWZuZGVmIFNWR0ZpbHRlckJ1aWxkZXJfaAog
I2RlZmluZSBTVkdGaWx0ZXJCdWlsZGVyX2gKIAotI2luY2x1ZGUgImNvbmZpZy5oIgotCiAjaWYg
RU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0Lmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAgLTMyLDQ5ICszMSw0OSBAQAogI2luY2x1
ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewot
ICAgIAotICAgIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTVkdG
aWx0ZXJCdWlsZGVyPiB7Ci0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEhhc2hTZXQ8Rmls
dGVyRWZmZWN0Kj4gRmlsdGVyRWZmZWN0U2V0OwotCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNWR0ZpbHRlckJ1aWxkZXI+IGNyZWF0ZShGaWx0ZXIqIGZpbHRlcikgeyByZXR1cm4gYWRvcHRS
ZWYobmV3IFNWR0ZpbHRlckJ1aWxkZXIoZmlsdGVyKSk7IH0KLQotICAgICAgICB2b2lkIGFkZChj
b25zdCBBdG9taWNTdHJpbmcmIGlkLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QpOwotCi0g
ICAgICAgIEZpbHRlckVmZmVjdCogZ2V0RWZmZWN0QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGlk
KSBjb25zdDsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9sYXN0RWZmZWN0LmdldCgpOyB9Ci0KLSAgICAgICAgdm9pZCBhcHBlbmRFZmZlY3RUb0Vm
ZmVjdFJlZmVyZW5jZXMoUmVmUHRyPEZpbHRlckVmZmVjdD4pOwotCi0gICAgICAgIGlubGluZSBG
aWx0ZXJFZmZlY3RTZXQmIGdldEVmZmVjdFJlZmVyZW5jZXMoRmlsdGVyRWZmZWN0KiBlZmZlY3Qp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE9ubHkgYWxsb3dlZCBmb3IgZWZmZWN0cyBiZWxv
bmdzIHRvIHRoaXMgYnVpbGRlci4KLSAgICAgICAgICAgIEFTU0VSVChtX2VmZmVjdFJlZmVyZW5j
ZXMuY29udGFpbnMoZWZmZWN0KSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9lZmZlY3RSZWZlcmVu
Y2VzLmZpbmQoZWZmZWN0KS0+c2Vjb25kOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBjbGVh
ckVmZmVjdHMoKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFNWR0ZpbHRlckJ1aWxkZXIoRmls
dGVyKik7Ci0KLSAgICAgICAgaW5saW5lIHZvaWQgYWRkQnVpbHRpbkVmZmVjdHMoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEZpbHRlckVmZmVj
dD4gPjo6aXRlcmF0b3IgZW5kID0gbV9idWlsdGluRWZmZWN0cy5lbmQoKTsKLSAgICAgICAgICAg
IGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID46Oml0ZXJh
dG9yIGl0ZXJhdG9yID0gbV9idWlsdGluRWZmZWN0cy5iZWdpbigpOyBpdGVyYXRvciAhPSBlbmQ7
ICsraXRlcmF0b3IpCi0gICAgICAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQoaXRl
cmF0b3ItPnNlY29uZCwgRmlsdGVyRWZmZWN0U2V0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
SGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbV9idWlsdGluRWZm
ZWN0czsKLSAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
ID4gbV9uYW1lZEVmZmVjdHM7Ci0gICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBhIGxpc3QsIHdoaWNo
IGNvbnRhaW5zIHRob3NlIGZpbHRlciBlZmZlY3RzLAotICAgICAgICAvLyB3aGljaCBkZXBlbmRz
IG9uIHRoZSBrZXkgZmlsdGVyIGVmZmVjdC4KLSAgICAgICAgSGFzaE1hcDxSZWZQdHI8RmlsdGVy
RWZmZWN0PiwgRmlsdGVyRWZmZWN0U2V0PiBtX2VmZmVjdFJlZmVyZW5jZXM7CiAKLSAgICAgICAg
UmVmUHRyPEZpbHRlckVmZmVjdD4gbV9sYXN0RWZmZWN0OwotICAgIH07CitjbGFzcyBTVkdGaWx0
ZXJCdWlsZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8U1ZHRmlsdGVyQnVpbGRlcj4geworcHVibGlj
OgorICAgIHR5cGVkZWYgSGFzaFNldDxGaWx0ZXJFZmZlY3QqPiBGaWx0ZXJFZmZlY3RTZXQ7CisK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdGaWx0ZXJCdWlsZGVyPiBjcmVhdGUoRmlsdGVyKiBm
aWx0ZXIpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdGaWx0ZXJCdWlsZGVyKGZpbHRlcikpOyB9
CisKKyAgICB2b2lkIGFkZChjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBlZmZlY3QpOworCisgICAgRmlsdGVyRWZmZWN0KiBnZXRFZmZlY3RCeUlkKGNvbnN0IEF0
b21pY1N0cmluZyYgaWQpIGNvbnN0OworICAgIEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGFzdEVmZmVjdC5nZXQoKTsgfQorCisgICAgdm9pZCBhcHBlbmRFZmZl
Y3RUb0VmZmVjdFJlZmVyZW5jZXMoUmVmUHRyPEZpbHRlckVmZmVjdD4pOworCisgICAgaW5saW5l
IEZpbHRlckVmZmVjdFNldCYgZ2V0RWZmZWN0UmVmZXJlbmNlcyhGaWx0ZXJFZmZlY3QqIGVmZmVj
dCkKKyAgICB7CisgICAgICAgIC8vIE9ubHkgYWxsb3dlZCBmb3IgZWZmZWN0cyBiZWxvbmdzIHRv
IHRoaXMgYnVpbGRlci4KKyAgICAgICAgQVNTRVJUKG1fZWZmZWN0UmVmZXJlbmNlcy5jb250YWlu
cyhlZmZlY3QpKTsKKyAgICAgICAgcmV0dXJuIG1fZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVj
dCktPnNlY29uZDsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyRWZmZWN0cygpOworCitwcml2YXRl
OgorICAgIFNWR0ZpbHRlckJ1aWxkZXIoRmlsdGVyKik7CisKKyAgICBpbmxpbmUgdm9pZCBhZGRC
dWlsdGluRWZmZWN0cygpCisgICAgeworICAgICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVm
UHRyPEZpbHRlckVmZmVjdD4gPjo6aXRlcmF0b3IgZW5kID0gbV9idWlsdGluRWZmZWN0cy5lbmQo
KTsKKyAgICAgICAgZm9yIChIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEZpbHRlckVmZmVj
dD4gPjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2J1aWx0aW5FZmZlY3RzLmJlZ2luKCk7IGl0ZXJh
dG9yICE9IGVuZDsgKytpdGVyYXRvcikKKyAgICAgICAgICAgICBtX2VmZmVjdFJlZmVyZW5jZXMu
YWRkKGl0ZXJhdG9yLT5zZWNvbmQsIEZpbHRlckVmZmVjdFNldCgpKTsKKyAgICB9CisKKyAgICBI
YXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4gPiBtX2J1aWx0aW5FZmZl
Y3RzOworICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+IG1f
bmFtZWRFZmZlY3RzOworICAgIC8vIFRoZSB2YWx1ZSBpcyBhIGxpc3QsIHdoaWNoIGNvbnRhaW5z
IHRob3NlIGZpbHRlciBlZmZlY3RzLAorICAgIC8vIHdoaWNoIGRlcGVuZHMgb24gdGhlIGtleSBm
aWx0ZXIgZWZmZWN0LgorICAgIEhhc2hNYXA8UmVmUHRyPEZpbHRlckVmZmVjdD4sIEZpbHRlckVm
ZmVjdFNldD4gbV9lZmZlY3RSZWZlcmVuY2VzOworCisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
bV9sYXN0RWZmZWN0OworfTsKICAgICAKLX0gLy9uYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMp
Ci0jZW5kaWYKKyNlbmRpZiAvLyBTVkdGaWx0ZXJCdWlsZGVyX2gK
</data>
<flag name="review"
          id="68649"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>