<?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>182901</bug_id>
          
          <creation_ts>2018-02-16 20:59:21 -0800</creation_ts>
          <short_desc>Add SVGPropertyTraits::fromString() to all the SVG animated types</short_desc>
          <delta_ts>2018-02-19 18:04:37 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>168586</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1400145</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-02-16 20:59:21 -0800</bug_when>
    <thetext>This is a code refactoring, It is part of the patch of https://bugs.webkit.org/show_bug.cgi?id=168586. The final goal is to templatize the SVGAnimatedType class and to use SVGPropertyTraits methods inside the template functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400152</commentid>
    <comment_count>1</comment_count>
      <attachid>334101</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-02-16 21:31:38 -0800</bug_when>
    <thetext>Created attachment 334101
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400154</commentid>
    <comment_count>2</comment_count>
      <attachid>334102</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-02-16 21:48:50 -0800</bug_when>
    <thetext>Created attachment 334102
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400484</commentid>
    <comment_count>3</comment_count>
      <attachid>334102</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2018-02-19 13:41:03 -0800</bug_when>
    <thetext>Comment on attachment 334102
Patch

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

&gt; Source/WebCore/svg/SVGPathByteStream.h:60
&gt; +    SVGPathByteStream(const SVGPathByteStream&amp; other)
&gt; +        : m_data(other.m_data)
&gt;      {
&gt; -        return m_data == other.m_data;
&gt;      }
&gt;  
&gt; -    bool operator!=(const SVGPathByteStream&amp; other) const
&gt; +    SVGPathByteStream(SVGPathByteStream&amp;&amp; other)
&gt; +        : m_data(WTFMove(other.m_data))
&gt;      {
&gt; -        return !(*this == other);
&gt;      }

I&apos;m not sure if we tend to write these in the style:

SVGPBS(SVGPBS&amp;&amp; other)
{
  *this = WTFMove(other);
}

Since we have operator= below.

&gt; Source/WebCore/svg/properties/SVGPropertyTraits.h:52
&gt; +        return color.isValid() ? color : std::optional&lt;Color&gt;();

Why isn&apos;t this 

return color.isValid() ? color : std::nullopt; ?

Or, if it can&apos;t be a nullopt, why does it return an optional?

Same for the other parse() functions below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400562</commentid>
    <comment_count>4</comment_count>
      <attachid>334203</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-02-19 16:48:01 -0800</bug_when>
    <thetext>Created attachment 334203
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400565</commentid>
    <comment_count>5</comment_count>
      <attachid>334102</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-02-19 16:55:45 -0800</bug_when>
    <thetext>Comment on attachment 334102
Patch

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

&gt;&gt; Source/WebCore/svg/SVGPathByteStream.h:60
&gt;&gt;      }
&gt; 
&gt; I&apos;m not sure if we tend to write these in the style:
&gt; 
&gt; SVGPBS(SVGPBS&amp;&amp; other)
&gt; {
&gt;   *this = WTFMove(other);
&gt; }
&gt; 
&gt; Since we have operator= below.

I do not think there is a style guidelines here but I changed the copy and the move constructors to use the copy and the move assignment operators.

&gt;&gt; Source/WebCore/svg/properties/SVGPropertyTraits.h:52
&gt;&gt; +        return color.isValid() ? color : std::optional&lt;Color&gt;();
&gt; 
&gt; Why isn&apos;t this 
&gt; 
&gt; return color.isValid() ? color : std::nullopt; ?
&gt; 
&gt; Or, if it can&apos;t be a nullopt, why does it return an optional?
&gt; 
&gt; Same for the other parse() functions below.

It has to return an optional because parse() may fail. The ternary operator does not like std::nullopt because its type isn&apos;t compatible with Color. The only way to use std::nullopt is to break the return statement into an if-else statement or

if (!color.isValid())
    return std::nullopt;
return color;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400597</commentid>
    <comment_count>6</comment_count>
      <attachid>334203</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-02-19 18:03:02 -0800</bug_when>
    <thetext>Comment on attachment 334203
Patch

Clearing flags on attachment: 334203

Committed r228721: &lt;https://trac.webkit.org/changeset/228721&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400598</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-02-19 18:03:04 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400600</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-02-19 18:04:37 -0800</bug_when>
    <thetext>&lt;rdar://problem/37693498&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>334101</attachid>
            <date>2018-02-16 21:31:38 -0800</date>
            <delta_ts>2018-02-16 21:48:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-182901-20180216213138.patch</filename>
            <type>text/plain</type>
            <size>72374</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyODU5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNSBAQAorMjAxOC0wMi0xNiAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBTVkdQ
cm9wZXJ0eVRyYWl0czo6ZnJvbVN0cmluZygpIHRvIGFsbCB0aGUgU1ZHIGFuaW1hdGVkIHR5cGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI5MDEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlz
IGEgd29yayB0b3dhcmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
ODU4Ni4gVGhlCisgICAgICAgIGdvYWwgaXMgaXMgdG8gdGVtcGxhdGl6ZSB0aGUgU1ZHQW5pbWF0
ZWRUeXBlIGNsYXNzIGFuZCB0byB1c2UgU1ZHUHJvcGVydHlUcmFpdHMKKyAgICAgICAgbWV0aG9k
cyBpbnNpZGUgdGhlIHRlbXBsYXRlIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajogTW92ZSB0aGUgZW51bSBhbmQgdGhlIFNWR1Byb3BlcnR5
VHJhaXRzCisgICAgICAgIGZyb20gU1ZHTWFya2VyRWxlbWVudC5oIHRvIFNWR01hcmtlclR5cGVz
LmguCisgICAgICAgICogc3ZnL1NWR0FuZ2xlLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmds
ZTo6U1ZHQW5nbGUpOiBEZWxldGUgdW51c2VkIGNvbnN0cnVjdG9yIGFuZCBjcmVhdGUoKSBtZXRo
b2QuCisgICAgICAgICogc3ZnL1NWR0FuZ2xlVmFsdWUuaDoKKyAgICAgICAgKiBzdmcvU1ZHQW5p
bWF0ZU1vdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VQb2ludCk6IERl
bGV0ZWQuIE1vdmUgdGhpcyBmdW5jdGlvbiB0byBTVkdQYXJzZXJVdGlsaXRpZXMuY3BwCisgICAg
ICAgICogc3ZnL1NWR0FuaW1hdGVkQW5nbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0ZWRBbmdsZUFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKTogVXNlIFNWR1Byb3BlcnR5
VHJhaXRzOjpmcm9tU3RyaW5nKCkuCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkQm9vbGVhbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZEJvb2xlYW5BbmltYXRvcjo6Y29uc3Ry
dWN0RnJvbVN0cmluZyk6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZENvbG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkQ29sb3JBbmltYXRvcjo6Y29uc3RydWN0
RnJvbVN0cmluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRDb2xvckFu
aW1hdG9yOjphZGRBbmltYXRlZFR5cGVzKTogVXNlIGNvbnN0LgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0ZWRDb2xvckFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKTogRGl0dG8u
CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkRW51bWVyYXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5n
KTogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkSW50ZWdlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmlu
Zyk6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVn
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRl
Z2VyQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKiBzdmcv
U1ZHQW5pbWF0ZWRMZW5ndGguY3BwOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZExlbmd0aExp
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0QW5pbWF0b3I6
OmNvbnN0cnVjdEZyb21TdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRO
dW1iZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWROdW1iZXJBbmltYXRvcjo6
Y29uc3RydWN0RnJvbVN0cmluZyk6IERpdHRvCisgICAgICAgIChXZWJDb3JlOjpwYXJzZU51bWJl
ckZyb21TdHJpbmcpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZE51bWJlckxpc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWROdW1iZXJMaXN0QW5pbWF0b3I6OmNvbnN0cnVj
dEZyb21TdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWROdW1iZXJPcHRp
b25hbE51bWJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZE51bWJlck9wdGlv
bmFsTnVtYmVyQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcpOiBEaXR0by4KKyAgICAgICAg
KiBzdmcvU1ZHQW5pbWF0ZWRQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVk
UGF0aEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKTogRGl0dG8uCisgICAgICAgICogc3Zn
L1NWR0FuaW1hdGVkUG9pbnRMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVk
UG9pbnRMaXN0QW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcpOiBEaXR0by4KKyAgICAgICAg
KiBzdmcvU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpb0FuaW1hdG9yOjpjb25zdHJ1Y3RGcm9t
U3RyaW5nKTogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkUmVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFJlY3RBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmlu
Zyk6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZFN0cmluZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlZFN0cmluZ0FuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5n
KTogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RBbmltYXRvcjo6Y29uc3Ry
dWN0RnJvbVN0cmluZyk6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGguaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0xlbmd0aDo6U1ZHTGVuZ3RoKTogRGVsZXRlIHVudXNlZCBjb25zdHJ1
Y3RvciBhbmQgY3JlYXRlKCkgbWV0aG9kLgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGhMaXN0VmFs
dWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxTVkdMZW5ndGhMaXN0
VmFsdWVzPjo6ZnJvbVN0cmluZyk6IE5ldyBTVkdQcm9wZXJ0eVRyYWl0cyBtZXRob2QuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxTVkdMZW5ndGhMaXN0VmFsdWVzPjo6cGFy
c2UpOiBEaXR0by4KKyAgICAgICAgKiBzdmcvU1ZHTWFya2VyRWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8U1ZHTWFya2VyVW5pdHNUeXBlPjo6aGlnaGVzdEVu
dW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxT
VkdNYXJrZXJVbml0c1R5cGU+Ojp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxTVkdNYXJrZXJVbml0c1R5cGU+Ojpmcm9tU3RyaW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0lETEVudW1MaW1pdHM8U1ZHTWFya2VyT3JpZW50
VHlwZT46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Byb3BlcnR5VHJhaXRzPFNWR01hcmtlck9yaWVudFR5cGU+OjpoaWdoZXN0RW51bVZh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPFNWR01h
cmtlck9yaWVudFR5cGU+Ojpmcm9tU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZH
TWFya2VyVHlwZXMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0
czxTVkdNYXJrZXJVbml0c1R5cGU+OjpoaWdoZXN0RW51bVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Byb3BlcnR5VHJhaXRzPFNWR01hcmtlclVuaXRzVHlwZT46OnRvU3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPFNWR01hcmtlclVuaXRzVHlwZT46OmZy
b21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8U1ZHTWFya2Vy
T3JpZW50VHlwZT46OmhpZ2hlc3RFbnVtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJv
cGVydHlUcmFpdHM8U1ZHTWFya2VyT3JpZW50VHlwZT46OmZyb21TdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSURMRW51bUxpbWl0czxTVkdNYXJrZXJPcmllbnRUeXBlPjo6aGlnaGVzdEV4
cG9zZWRFbnVtVmFsdWUpOgorICAgICAgICAqIHN2Zy9TVkdNYXRyaXguaDogRGVsZXRlIHVudXNl
ZCBjb25zdHJ1Y3RvciBhbmQgY3JlYXRlIG1ldGhvZC4KKyAgICAgICAgKiBzdmcvU1ZHTnVtYmVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdOdW1iZXI6OlNWR051bWJlcik6IERpdHRvLgorICAg
ICAgICAqIHN2Zy9TVkdOdW1iZXJMaXN0VmFsdWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cm9wZXJ0eVRyYWl0czxTVkdOdW1iZXJMaXN0VmFsdWVzPjo6ZnJvbVN0cmluZyk6IE5ldyBTVkdQ
cm9wZXJ0eVRyYWl0cyBtZXRob2QuCisgICAgICAgICogc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVBvaW50KTogVGhpcyBpcyBtb3ZlZCBmcm9tIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAorICAgICAgICAqIHN2Zy9TVkdQYXJzZXJVdGlsaXRp
ZXMuaDoKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhCeXRlU3RyZWFtOjpTVkdQYXRoQnl0ZVN0cmVhbSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoQnl0ZVN0cmVhbTo6b3BlcmF0b3I9KTogQWRkIGNvcHkgYW5kIG1vdmUgYXNz
aWdubWVudCBvcGVyYXRvcnMuCisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbTo6
Y29weSBjb25zdCk6IFVzZSB0aGUgY29weSBhc3NpZ25tZW50LgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aEJ5dGVTdHJlYW06OmlzRW1wdHkgY29uc3QpOiBVc2UgRGF0YS5pc0VtcHR5KCkuCisg
ICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxTVkdQYXRoQnl0ZVN0cmVhbT46Omlu
aXRpYWxWYWx1ZSk6IE5ldyBTVkdQcm9wZXJ0eVRyYWl0cyBtZXRob2QuCisgICAgICAgIChXZWJD
b3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxTVkdQYXRoQnl0ZVN0cmVhbT46OmZyb21TdHJpbmcpOiBE
aXR0by4KKyAgICAgICAgKiBzdmcvU1ZHUGF0aFV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjphZGRUb1NWR1BhdGhCeXRlU3RyZWFtKTogQW5zd2VyIFNpbW9uJ3MgcXVlc3Rpb25zIHdo
aWNoIHdlcmUgYWRkZWQgaW4gcjE5MDg0NC4KKyAgICAgICAgKiBzdmcvU1ZHUG9pbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BvaW50OjpTVkdQb2ludCk6IERlbGV0ZSB1bnVzZWQgY29uc3Ry
dWN0b3IgYW5kIGNyZWF0ZSBtZXRob2QuCisgICAgICAgICogc3ZnL1NWR1BvaW50TGlzdFZhbHVl
cy5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8U1ZHUG9pbnRMaXN0VmFs
dWVzPjo6ZnJvbVN0cmluZyk6IE5ldyBTVkdQcm9wZXJ0eVRyYWl0cyBtZXRob2QuCisgICAgICAg
ICogc3ZnL1NWR1BvbHlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BvbHlFbGVt
ZW50OjpwYXJzZUF0dHJpYnV0ZSk6IFVzZSB0aGUgbW92ZSBhc3NpZ25tZW50IG9wZXJhdG9yLgor
ICAgICAgICAqIHN2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKTogRGVsZXRl
IHVudXNlZCBjb25zdHJ1Y3RvciBhbmQgY3JlYXRlIG1ldGhvZC4KKyAgICAgICAgKiBzdmcvU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKTogQWRkIG5l
dyBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBzdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWU+Ojpmcm9tU3RyaW5nKTogTmV3IFNWR1Byb3BlcnR5VHJhaXRzIG1ldGhvZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZT46OnRvU3RyaW5nKTogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR1JlY3QuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1JlY3Q6OlNWR1JlY3QpOiBEZWxldGUgdW51c2VkIGNvbnN0cnVj
dG9yIGFuZCBjcmVhdGUgbWV0aG9kLgorICAgICAgICAqIHN2Zy9TVkdSZWN0VHJhaXRzLmg6IFJl
bW92ZWQuCisgICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybS5oOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVHJhbnNmb3JtOjpTVkdUcmFuc2Zvcm0pOiBEZWxldGUgdW51c2VkIGNvbnN0cnVjdG9yIGFu
ZCBjcmVhdGUgbWV0aG9kLgorICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1MaXN0VmFsdWVzLmg6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxTVkdUcmFuc2Zvcm1MaXN0VmFs
dWVzPjo6ZnJvbVN0cmluZyk6IE5ldyBTVkdQcm9wZXJ0eVRyYWl0cyBtZXRob2QuCisgICAgICAg
ICogc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlUZWFyT2ZmLmg6IERlbGV0ZSB1bnVzZWQgY3Jl
YXRlIG1ldGhvZC4KKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eVRyYWl0cy5o
OiBOZXcgU1ZHUHJvcGVydHlUcmFpdHMgbWV0aG9kcy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1By
b3BlcnR5VHJhaXRzPGJvb2w+Ojpmcm9tU3RyaW5nKTogCisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cm9wZXJ0eVRyYWl0czxDb2xvcj46OmluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQcm9wZXJ0eVRyYWl0czxDb2xvcj46OmZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUHJvcGVydHlUcmFpdHM8Q29sb3I+OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cm9wZXJ0eVRyYWl0czxDb2xvcj46OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1By
b3BlcnR5VHJhaXRzPGludD46OmZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJv
cGVydHlUcmFpdHM8ZmxvYXQ+Ojpmcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1By
b3BlcnR5VHJhaXRzPGZsb2F0Pjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVy
dHlUcmFpdHM8RmxvYXRQb2ludD46OmluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQcm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50Pjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50Pjo6cGFyc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8RmxvYXRQb2ludD46OnRvU3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZsb2F0UmVjdD46OmluaXRpYWxWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFJlY3Q+Ojpmcm9tU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZsb2F0UmVjdD46OnBhcnNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZsb2F0UmVjdD46OnRvU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPFN0cmluZz46OmZyb21T
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8U3RyaW5nPjo6cGFy
c2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8U3RyaW5nPjo6dG9TdHJp
bmcpOgorCiAyMDE4LTAyLTE2ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgW1JlbmRlclRyZWVCdWlsZGVyXSBNb3ZlIFJlbmRlckJveE1vZGVsT2JqZWN0Ojptb3Zl
Q2hpbGQqKCkgdG8gUmVuZGVyVHJlZUJ1aWxkZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyODM5MCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMjE2NCw3ICsyMTY0LDYgQEAKIAkJN0NFMTkxNzkxRjJBQkU3MTAwMjcyRjc4
IC8qIEpTRmV0Y2hSZXF1ZXN0TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0NFMTkxNkMxRjJBQjcwQTAwMjcyRjc4IC8qIEpTRmV0Y2hSZXF1ZXN0
TW9kZS5oICovOyB9OwogCQk3Q0UxOTE3QjFGMkFCRTcxMDAyNzJGNzggLyogSlNGZXRjaFJlcXVl
c3RSZWRpcmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0NFMTkxNkExRjJBQjcwNjAwMjcyRjc4IC8qIEpTRmV0Y2hSZXF1ZXN0UmVkaXJlY3QuaCAq
LzsgfTsKIAkJN0NFNThENEExREQ2NEE1QjAwMTI4NTUyIC8qIFNWR1BvaW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U1OEQ0OTFERDY0QTVCMDAx
Mjg1NTIgLyogU1ZHUG9pbnQuaCAqLzsgfTsKLQkJN0NFNThENEUxREQ2OTRGRTAwMTI4NTUyIC8q
IFNWR1JlY3RUcmFpdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDRTU4RDREMURENjk0RkUwMDEyODU1MiAvKiBTVkdSZWN0VHJhaXRzLmggKi87IH07
CiAJCTdDRTU4RDUwMURENjlBMUUwMDEyODU1MiAvKiBTVkdOdW1iZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTU4RDRGMURENjlBMUUwMDEyODU1
MiAvKiBTVkdOdW1iZXIuaCAqLzsgfTsKIAkJN0NFNThENTgxREQ3RDk2RDAwMTI4NTUyIC8qIFNW
R1RyYW5zZm9ybVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3Q0U1OEQ1NjFERDdEOTZEMDAxMjg1NTIgLyogU1ZHVHJhbnNmb3JtVmFsdWUuaCAq
LzsgfTsKIAkJN0NFNThENUMxREQ3RUM5QzAwMTI4NTUyIC8qIFNWR01hdHJpeFZhbHVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U1OEQ1QjFERDdF
QzlDMDAxMjg1NTIgLyogU1ZHTWF0cml4VmFsdWUuaCAqLzsgfTsKQEAgLTMyODEsNyArMzI4MCw3
IEBACiAJCUIyMjI3QTRCMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdNZXRhZGF0YUVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMjI3OEI1MEQw
MEJGMjAwMDcxQjc4MiAvKiBTVkdNZXRhZGF0YUVsZW1lbnQuaCAqLzsgfTsKIAkJQjIyMjdBNEUw
RDAwQkYyMjAwNzFCNzgyIC8qIFNWR01QYXRoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMjc4QjgwRDAwQkYyMDAwNzFCNzgyIC8qIFNW
R01QYXRoRWxlbWVudC5oICovOyB9OwogCQlCMjIyN0E1MTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
TnVtYmVyTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjIyMjc4QkIwRDAwQkYyMDAwNzFCNzgyIC8qIFNWR051bWJlckxpc3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCMjIyN0E1NzBEMDBCRjIy
MDA3MUI3ODIgLyogU1ZHUGFyc2VyVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjIyNzhDMTBEMDBCRjIwMDA3MUI3ODIgLyogU1ZHUGFy
c2VyVXRpbGl0aWVzLmggKi87IH07CisJCUIyMjI3QTU3MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQ
YXJzZXJVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyMjI3OEMxMEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdQYXJzZXJVdGlsaXRpZXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMjIyN0E1
OTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUGF0aEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMjI3OEMzMEQwMEJGMjAwMDcxQjc4MiAvKiBT
VkdQYXRoRWxlbWVudC5oICovOyB9OwogCQlCMjIyN0E1QjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
UGF0aFNlZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjIyMjc4QzUwRDAwQkYyMDAwNzFCNzgyIC8qIFNWR1BhdGhTZWcuaCAqLzsgfTsKIAkJQjIyMjdB
NUUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhTZWdBcmMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMjI3OEM4MEQwMEJGMjAwMDcxQjc4MiAvKiBT
VkdQYXRoU2VnQXJjLmggKi87IH07CkBAIC04MTcyLDYgKzgxNzEsNyBAQAogCQk1M0VEM0ZERDE2
N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTBBMEJDNzA4NUY2MDM5MDA3MzUzRDYgLyog
UXVhbGlmaWVkTmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBRdWFsaWZpZWROYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTU1MEEwQkM4MDg1RjYwMzkwMDcz
NTNENiAvKiBRdWFsaWZpZWROYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCTU1MTM3QjJDMjAzNzlFNTUwMDAx
MDA0QiAvKiBTVkdNYXJrZXJUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTVkdNYXJrZXJUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTQ2NzU3
NzFGRDFGQzFBMDAzQjEwQjAgLyogSW1hZ2VTb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW1hZ2VTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTQ2NzU3ODFG
RDFGQzFBMDAzQjEwQjAgLyogSW1hZ2VTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VTb3Vy
Y2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTU1MENCNDExRTk1NUUzQzAwMTEx
QUEwIC8qIEltYWdlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1h
Z2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTQ2Niw3ICs5NDY2LDYg
QEAKIAkJN0NFMTkxNkUxRjJBQjcwRDAwMjcyRjdCIC8qIEpTQ2FjaGVRdWVyeU9wdGlvbnMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYWNoZVF1ZXJ5T3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDRTE5MTZGMUYyQUI3MEYwMDI3MkY3OCAvKiBKU0ZldGNoUmVx
dWVzdFJlZGlyZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmV0Y2hSZXF1ZXN0UmVkaXJl
Y3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0U1OEQ0OTFERDY0QTVCMDAx
Mjg1NTIgLyogU1ZHUG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
UG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0NFNThENEQxREQ2OTRGRTAw
MTI4NTUyIC8qIFNWR1JlY3RUcmFpdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHUmVjdFRyYWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0U1OEQ0
RjFERDY5QTFFMDAxMjg1NTIgLyogU1ZHTnVtYmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNWR051bWJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0U1
OEQ1MTFERDdCMDkzMDAxMjg1NTIgLyogU1ZHTGVuZ3RoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR0xlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
Q0U1OEQ1MjFERDdCMDkzMDAxMjg1NTIgLyogU1ZHTGVuZ3RoVmFsdWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHTGVuZ3RoVmFsdWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjI2MzcsNiArMjI2MzYsNyBAQAogCQkJCUIyMjI3OEFEMEQw
MEJGMjAwMDcxQjc4MiAvKiBTVkdNYXJrZXJFbGVtZW50LmNwcCAqLywKIAkJCQlCMjIyNzhBRTBE
MDBCRjIwMDA3MUI3ODIgLyogU1ZHTWFya2VyRWxlbWVudC5oICovLAogCQkJCUIyMjI3OEFGMEQw
MEJGMjAwMDcxQjc4MiAvKiBTVkdNYXJrZXJFbGVtZW50LmlkbCAqLywKKwkJCQk1NTEzN0IyQzIw
Mzc5RTU1MDAwMTAwNEIgLyogU1ZHTWFya2VyVHlwZXMuaCAqLywKIAkJCQlCMjIyNzhCMDBEMDBC
RjIwMDA3MUI3ODIgLyogU1ZHTWFza0VsZW1lbnQuY3BwICovLAogCQkJCUIyMjI3OEIxMEQwMEJG
MjAwMDcxQjc4MiAvKiBTVkdNYXNrRWxlbWVudC5oICovLAogCQkJCUIyMjI3OEIyMEQwMEJGMjAw
MDcxQjc4MiAvKiBTVkdNYXNrRWxlbWVudC5pZGwgKi8sCkBAIC0yMjc3MCw3ICsyMjc3MCw2IEBA
CiAJCQkJQjIyMjc5MDcwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1JlY3RFbGVtZW50LmNwcCAqLywK
IAkJCQlCMjIyNzkwODBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHUmVjdEVsZW1lbnQuaCAqLywKIAkJ
CQlCMjIyNzkwOTBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHUmVjdEVsZW1lbnQuaWRsICovLAotCQkJ
CTdDRTU4RDREMURENjk0RkUwMDEyODU1MiAvKiBTVkdSZWN0VHJhaXRzLmggKi8sCiAJCQkJQjIy
Mjc5MEEwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1JlbmRlcmluZ0ludGVudC5oICovLAogCQkJCUIy
MjI3OTBCMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdSZW5kZXJpbmdJbnRlbnQuaWRsICovLAogCQkJ
CUIyMjI3OTBDMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdTY3JpcHRFbGVtZW50LmNwcCAqLywKQEAg
LTI5ODc2LDcgKzI5ODc1LDYgQEAKIAkJCQlCMjIyN0E5QTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
UmFkaWFsR3JhZGllbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEVERTE5RjEyQTUw
QjhFMDBCOTU3OTcgLyogU1ZHUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBOUUwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR1JlY3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk3Q0U1
OEQ0RTFERDY5NEZFMDAxMjg1NTIgLyogU1ZHUmVjdFRyYWl0cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTk3QjE4MEMxNTA2MzUzMjAwRTRBREE4IC8qIFNWR1JlbmRlcmluZ0NvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyMjI3QUEwMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdSZW5kZXJpbmdJ
bnRlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMjI3NDc5MEU4MzY2RTIwMEU3Rjk3NSAvKiBT
VkdSZW5kZXJTdHlsZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5nbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5nbGUuaAko
cmV2aXNpb24gMjI4MzkwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDExICs0Miw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgU1ZHQW5nbGUoaW5pdGlhbFZhbHVlKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFJl
ZjxTVkdBbmdsZT4gY3JlYXRlKGNvbnN0IFNWR0FuZ2xlVmFsdWUqIGluaXRpYWxWYWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0FuZ2xlKGluaXRpYWxWYWx1ZSkp
OwotICAgIH0KLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBFeGNlcHRpb25PcjxS
ZWY8U1ZHQW5nbGU+PiBjcmVhdGUoRXhjZXB0aW9uT3I8VD4mJiBpbml0aWFsVmFsdWUpCiAgICAg
ewogICAgICAgICBpZiAoaW5pdGlhbFZhbHVlLmhhc0V4Y2VwdGlvbigpKQpAQCAtMTQ1LDExICsx
NDAsNiBAQCBwcml2YXRlOgogICAgICAgICA6IFNWR1Byb3BlcnR5VGVhck9mZjxTVkdBbmdsZVZh
bHVlPihpbml0aWFsVmFsdWUpCiAgICAgewogICAgIH0KLQotICAgIGV4cGxpY2l0IFNWR0FuZ2xl
KGNvbnN0IFNWR0FuZ2xlVmFsdWUqIGluaXRpYWxWYWx1ZSkKLSAgICAgICAgOiBTVkdQcm9wZXJ0
eVRlYXJPZmY8U1ZHQW5nbGVWYWx1ZT4oaW5pdGlhbFZhbHVlKQotICAgIHsKLSAgICB9CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5n
bGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVl
LmgJKHJldmlzaW9uIDIyODM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDggQEAgcHJpdmF0ZToKICAgICBmbG9hdCBt
X3ZhbHVlSW5TcGVjaWZpZWRVbml0cyB7IDAgfTsKIH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IFNW
R1Byb3BlcnR5VHJhaXRzPFNWR0FuZ2xlVmFsdWU+IHsKK3RlbXBsYXRlPD4KK3N0cnVjdCBTVkdQ
cm9wZXJ0eVRyYWl0czxTVkdBbmdsZVZhbHVlPiB7CiAgICAgc3RhdGljIFNWR0FuZ2xlVmFsdWUg
aW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gU1ZHQW5nbGVWYWx1ZSgpOyB9CiAgICAgc3RhdGljIFN0
cmluZyB0b1N0cmluZyhjb25zdCBTVkdBbmdsZVZhbHVlJiB0eXBlKSB7IHJldHVybiB0eXBlLnZh
bHVlQXNTdHJpbmcoKTsgfQogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRl
TW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMjI4MzkwKQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2
LDMxICsxMzYsNiBAQCB2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojp1cGRhdGVBbmltCiAg
ICAgdXBkYXRlQW5pbWF0aW9uTW9kZSgpOwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZVBvaW50KGNv
bnN0IFN0cmluZyYgcywgRmxvYXRQb2ludCYgcG9pbnQpCi17Ci0gICAgaWYgKHMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMg
PSBTdHJpbmdWaWV3KHMpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFy
KiBjdXIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGN1
ciArIHMubGVuZ3RoKCk7Ci0gICAgCi0gICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3Vy
LCBlbmQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgZmxvYXQgeCA9IDA7Ci0g
ICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwgeCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICBmbG9hdCB5ID0gMDsKLSAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCB5
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHBvaW50ID0gRmxvYXRQb2ludCh4
LCB5KTsKLSAgICAKLSAgICAvLyBkaXNhbGxvdyBhbnl0aGluZyBleGNlcHQgc3BhY2VzIGF0IHRo
ZSBlbmQKLSAgICByZXR1cm4gIXNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7Ci19Ci0g
ICAgCiB2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpyZXNldEFuaW1hdGVkVHlwZSgpCiB7
CiAgICAgaWYgKCFoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlZEFuZ2xlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZWRBbmdsZS5jcHAJKHJldmlzaW9uIDIyODM5MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlZEFuZ2xlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTcgKzMy
LDggQEAgU1ZHQW5pbWF0ZWRBbmdsZUFuaW1hdG9yOjpTVkdBbmltYXRlZEFuZwogCiBzdGQ6OnVu
aXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZEFuZ2xlQW5pbWF0b3I6OmNvbnN0
cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXV0byBhbmltYXRl
ZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUFuZ2xlQW5kRW51bWVyYXRpb24oc3RkOjpt
YWtlX3VuaXF1ZTxzdGQ6OnBhaXI8U1ZHQW5nbGVWYWx1ZSwgdW5zaWduZWQ+PigpKTsKLSAgICBh
dXRvJiBhbmltYXRlZFBhaXIgPSBhbmltYXRlZFR5cGUtPmFuZ2xlQW5kRW51bWVyYXRpb24oKTsK
LQotICAgIFNWR0FuZ2xlVmFsdWUgYW5nbGU7Ci0gICAgU1ZHTWFya2VyT3JpZW50VHlwZSBvcmll
bnRUeXBlID0gU1ZHUHJvcGVydHlUcmFpdHM8U1ZHTWFya2VyT3JpZW50VHlwZT46OmZyb21TdHJp
bmcoc3RyaW5nLCBhbmdsZSk7Ci0gICAgaWYgKG9yaWVudFR5cGUgPiAwKQotICAgICAgICBhbmlt
YXRlZFBhaXIuc2Vjb25kID0gb3JpZW50VHlwZTsKLSAgICBpZiAob3JpZW50VHlwZSA9PSBTVkdN
YXJrZXJPcmllbnRBbmdsZSkKLSAgICAgICAgYW5pbWF0ZWRQYWlyLmZpcnN0ID0gYW5nbGU7Ci0K
LSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOworICAgIGF1dG8gdmFsdWVzID0gU1ZHUHJvcGVydHlU
cmFpdHM8c3RkOjpwYWlyPFNWR0FuZ2xlVmFsdWUsIHVuc2lnbmVkPj46OmZyb21TdHJpbmcoc3Ry
aW5nKTsKKyAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVBbmdsZUFuZEVudW1lcmF0
aW9uKHN0ZDo6bWFrZV91bmlxdWU8c3RkOjpwYWlyPFNWR0FuZ2xlVmFsdWUsIHVuc2lnbmVkPj4o
dmFsdWVzKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1h
dGVkQW5nbGVBbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRB
bmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlZEJvb2xlYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlZEJvb2xlYW4uY3BwCShyZXZpc2lvbiAyMjgzOTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRCb29sZWFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMSw5ICsz
Miw4IEBAIFNWR0FuaW1hdGVkQm9vbGVhbkFuaW1hdG9yOjpTVkdBbmltYXRlZEIKIAogc3RkOjp1
bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRCb29sZWFuQW5pbWF0b3I6OmNv
bnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXV0byBhbmlt
YXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUJvb2xlYW4oc3RkOjptYWtlX3VuaXF1
ZTxib29sPigpKTsKLSAgICBhbmltYXRlZFR5cGUtPmJvb2xlYW4oKSA9IChzdHJpbmcgPT0gInRy
dWUiKTsgLy8gd2F0PwotICAgIHJldHVybiBhbmltYXRlZFR5cGU7CisgICAgYXV0byB2YWx1ZSA9
IFNWR1Byb3BlcnR5VHJhaXRzPGJvb2w+Ojpmcm9tU3RyaW5nKHN0cmluZyk7CisgICAgcmV0dXJu
IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlQm9vbGVhbihzdGQ6Om1ha2VfdW5pcXVlPGJvb2w+KHZh
bHVlKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVk
Qm9vbGVhbkFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFu
aW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVkQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlZENvbG9yLmNwcAkocmV2aXNpb24gMjI4MzkwKQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVkQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMzLDcgKzM0LDggQEAg
U1ZHQW5pbWF0ZWRDb2xvckFuaW1hdG9yOjpTVkdBbmltYXRlZENvbAogCiBzdGQ6OnVuaXF1ZV9w
dHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZENvbG9yQW5pbWF0b3I6OmNvbnN0cnVjdEZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJuIFNWR0FuaW1hdGVk
VHlwZTo6Y3JlYXRlQ29sb3Ioc3RkOjptYWtlX3VuaXF1ZTxDb2xvcj4oQ1NTUGFyc2VyOjpwYXJz
ZUNvbG9yKHN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKSkpKTsKKyAgICBhdXRvIHZhbHVlID0gU1ZH
UHJvcGVydHlUcmFpdHM8Q29sb3I+Ojpmcm9tU3RyaW5nKHN0cmluZyk7CisgICAgcmV0dXJuIFNW
R0FuaW1hdGVkVHlwZTo6Y3JlYXRlQ29sb3Ioc3RkOjptYWtlX3VuaXF1ZTxDb2xvcj4odmFsdWUp
KTsKIH0KIAogdm9pZCBTVkdBbmltYXRlZENvbG9yQW5pbWF0b3I6OmFkZEFuaW1hdGVkVHlwZXMo
U1ZHQW5pbWF0ZWRUeXBlKiBmcm9tLCBTVkdBbmltYXRlZFR5cGUqIHRvKQpAQCAtNDQsNyArNDYs
NyBAQCB2b2lkIFNWR0FuaW1hdGVkQ29sb3JBbmltYXRvcjo6YWRkQW5pbWF0CiAgICAgQVNTRVJU
KHRvLT50eXBlKCkgPT0gQW5pbWF0ZWRDb2xvcik7CiAKICAgICAvLyBJZ25vcmVzIGFueSBhbHBo
YSBhbmQgc2V0cyBhbHBoYSBvbiByZXN1bHQgdG8gMTAwJSBvcGFxdWUuCi0gICAgYXV0byYgZnJv
bUNvbG9yID0gZnJvbS0+Y29sb3IoKTsKKyAgICBjb25zdCBhdXRvJiBmcm9tQ29sb3IgPSBmcm9t
LT5jb2xvcigpOwogICAgIGF1dG8mIHRvQ29sb3IgPSB0by0+Y29sb3IoKTsKICAgICB0b0NvbG9y
ID0geyByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHRvQ29sb3IucmVkKCkgKyBmcm9tQ29sb3Iu
cmVkKCkpLAogICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHRvQ29sb3IuZ3JlZW4o
KSArIGZyb21Db2xvci5ncmVlbigpKSwKQEAgLTgyLDcgKzg0LDcgQEAgdm9pZCBTVkdBbmltYXRl
ZENvbG9yQW5pbWF0b3I6OmNhbGN1bGF0ZQogICAgIGlmIChtX2FuaW1hdGlvbkVsZW1lbnQtPnRv
UHJvcGVydHlWYWx1ZVR5cGUoKSA9PSBDdXJyZW50Q29sb3JWYWx1ZSkKICAgICAgICAgdG9Db2xv
ciA9IGN1cnJlbnRDb2xvcigqbV9jb250ZXh0RWxlbWVudCk7CiAKLSAgICBhdXRvJiB0b0F0RW5k
T2ZEdXJhdGlvbkNvbG9yID0gdG9BdEVuZE9mRHVyYXRpb24tPmNvbG9yKCk7CisgICAgY29uc3Qg
YXV0byYgdG9BdEVuZE9mRHVyYXRpb25Db2xvciA9IHRvQXRFbmRPZkR1cmF0aW9uLT5jb2xvcigp
OwogICAgIGF1dG8mIGFuaW1hdGVkQ29sb3IgPSBhbmltYXRlZC0+Y29sb3IoKTsKIAogICAgIC8v
IEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gdGhpcyB3aWxsIG5lZWQgdG8gaGFuZGxlIGJsZW5kaW5n
IGJldHdlZW4gY29sb3JzIGluIGRpZmZlcmVudCBjb2xvciBzcGFjZXMsCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkRW51bWVyYXRpb24uY3BwCShyZXZpc2lvbiAyMjgz
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDEyLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMTA5LDkgKzExMCw4IEBAIFNWR0FuaW1hdGVkRW51bWVyYXRpb25BbmltYXRv
cjo6U1ZHQW5pbWEKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVk
RW51bWVyYXRpb25BbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0
cmluZykKIHsKICAgICBBU1NFUlQobV9hbmltYXRpb25FbGVtZW50KTsKLSAgICBhdXRvIGFuaW1h
dGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlRW51bWVyYXRpb24oc3RkOjptYWtlX3Vu
aXF1ZTx1bnNpZ25lZD4oKSk7Ci0gICAgYW5pbWF0ZWRUeXBlLT5lbnVtZXJhdGlvbigpID0gZW51
bWVyYXRpb25WYWx1ZUZvclRhcmdldEF0dHJpYnV0ZShtX2FuaW1hdGlvbkVsZW1lbnQtPnRhcmdl
dEVsZW1lbnQoKSwgbV9hbmltYXRpb25FbGVtZW50LT5hdHRyaWJ1dGVOYW1lKCksIHN0cmluZyk7
Ci0gICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKKyAgICBhdXRvIHZhbHVlID0gZW51bWVyYXRpb25W
YWx1ZUZvclRhcmdldEF0dHJpYnV0ZShtX2FuaW1hdGlvbkVsZW1lbnQtPnRhcmdldEVsZW1lbnQo
KSwgbV9hbmltYXRpb25FbGVtZW50LT5hdHRyaWJ1dGVOYW1lKCksIHN0cmluZyk7CisgICAgcmV0
dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlRW51bWVyYXRpb24oc3RkOjptYWtlX3VuaXF1ZTx1
bnNpZ25lZD4odmFsdWUpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4g
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24oY29u
c3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkSW50ZWdlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkSW50ZWdlci5jcHAJKHJldmlzaW9uIDIyODM5
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTMzLDkgKzM0LDggQEAgU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I6OlNWR0FuaW1h
dGVkSQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZEludGVn
ZXJBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsK
LSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlSW50ZWdlcihz
dGQ6Om1ha2VfdW5pcXVlPGludD4oKSk7Ci0gICAgYW5pbWF0ZWRUeXBlLT5pbnRlZ2VyKCkgPSBz
dHJpbmcudG9JbnRTdHJpY3QoKTsKLSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOworICAgIGF1dG8g
dmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxpbnQ+Ojpmcm9tU3RyaW5nKHN0cmluZyk7CisgICAg
cmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlSW50ZWdlcihzdGQ6Om1ha2VfdW5pcXVlPGlu
dD4odmFsdWUpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5p
bWF0ZWRJbnRlZ2VyQW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVt
ZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2Vy
LmNwcAkocmV2aXNpb24gMjI4MzkwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVk
SW50ZWdlck9wdGlvbmFsSW50ZWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE4ICszMyw4
IEBAIFNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1hdG8KIAogc3RkOjp1bmlx
dWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2Vy
QW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0g
ICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUludGVnZXJPcHRp
b25hbEludGVnZXIoc3RkOjptYWtlX3VuaXF1ZTxzdGQ6OnBhaXI8aW50LCBpbnQ+PigpKTsKLSAg
ICBzdGQ6OnBhaXI8aW50LCBpbnQ+JiBhbmltYXRlZEludGVnZXIgPSBhbmltYXRlZFR5cGUtPmlu
dGVnZXJPcHRpb25hbEludGVnZXIoKTsKLSAgICBmbG9hdCBmaXJzdE51bWJlciA9IDA7Ci0gICAg
ZmxvYXQgc2Vjb25kTnVtYmVyID0gMDsKLSAgICBpZiAoIXBhcnNlTnVtYmVyT3B0aW9uYWxOdW1i
ZXIoc3RyaW5nLCBmaXJzdE51bWJlciwgc2Vjb25kTnVtYmVyKSkgewotICAgICAgICBhbmltYXRl
ZEludGVnZXIuZmlyc3QgPSAwOwotICAgICAgICBhbmltYXRlZEludGVnZXIuc2Vjb25kID0gMDsK
LSAgICB9IGVsc2UgewotICAgICAgICBhbmltYXRlZEludGVnZXIuZmlyc3QgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHJvdW5kZihmaXJzdE51bWJlcikpOwotICAgICAgICBhbmltYXRlZEludGVnZXIuc2Vj
b25kID0gc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYoc2Vjb25kTnVtYmVyKSk7Ci0gICAgfQotICAg
IHJldHVybiBhbmltYXRlZFR5cGU7CisgICAgYXV0byB2YWx1ZXMgPSBTVkdQcm9wZXJ0eVRyYWl0
czxzdGQ6OnBhaXI8aW50LCBpbnQ+Pjo6ZnJvbVN0cmluZyhzdHJpbmcpOworICAgIHJldHVybiBT
VkdBbmltYXRlZFR5cGU6OmNyZWF0ZUludGVnZXJPcHRpb25hbEludGVnZXIoc3RkOjptYWtlX3Vu
aXF1ZTxzdGQ6OnBhaXI8aW50LCBpbnQ+Pih2YWx1ZXMpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRy
PFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5pbWF0
b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0
eUxpc3QmIGFuaW1hdGVkVHlwZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZWRMZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRl
ZExlbmd0aC5jcHAJKHJldmlzaW9uIDIyODM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlZExlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVkTGVuZ3RoTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVkTGVuZ3RoTGlzdC5jcHAJKHJldmlzaW9uIDIyODM5MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlZExlbmd0aExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw5ICszMyw4IEBAIFNWR0FuaW1hdGVkTGVuZ3RoTGlzdEFuaW1hdG9yOjpTVkdBbmltYXQKIAog
c3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0QW5p
bWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAg
YXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUxlbmd0aExpc3Qoc3Rk
OjptYWtlX3VuaXF1ZTxTVkdMZW5ndGhMaXN0VmFsdWVzPigpKTsKLSAgICBhbmltYXRlZFR5cGUt
Pmxlbmd0aExpc3QoKS5wYXJzZShzdHJpbmcsIG1fbGVuZ3RoTW9kZSk7Ci0gICAgcmV0dXJuIGFu
aW1hdGVkVHlwZTsKKyAgICBhdXRvIHZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8U1ZHTGVuZ3Ro
TGlzdFZhbHVlcz46OmZyb21TdHJpbmcoc3RyaW5nLCBtX2xlbmd0aE1vZGUpOworICAgIHJldHVy
biBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUxlbmd0aExpc3Qoc3RkOjptYWtlX3VuaXF1ZTxTVkdM
ZW5ndGhMaXN0VmFsdWVzPihXVEZNb3ZlKHZhbHVlKSkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8
U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZExlbmd0aExpc3RBbmltYXRvcjo6c3RhcnRBbmlt
VmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0
ZWRUeXBlcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTnVtYmVyLmNwcAko
cmV2aXNpb24gMjI4MzkwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTnVtYmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0zMiwxMSArMzMsOCBAQCBTVkdBbmltYXRlZE51bWJlckFuaW1h
dG9yOjpTVkdBbmltYXRlZE51CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNW
R0FuaW1hdGVkTnVtYmVyQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5n
JiBzdHJpbmcpCiB7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNy
ZWF0ZU51bWJlcihzdGQ6Om1ha2VfdW5pcXVlPGZsb2F0PigpKTsKLSAgICBmbG9hdCYgYW5pbWF0
ZWROdW1iZXIgPSBhbmltYXRlZFR5cGUtPm51bWJlcigpOwotICAgIGlmICghcGFyc2VOdW1iZXJG
cm9tU3RyaW5nKHN0cmluZywgYW5pbWF0ZWROdW1iZXIpKQotICAgICAgICBhbmltYXRlZE51bWJl
ciA9IDA7Ci0gICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKKyAgICBhdXRvIHZhbHVlID0gU1ZHUHJv
cGVydHlUcmFpdHM8ZmxvYXQ+Ojpmcm9tU3RyaW5nKHN0cmluZyk7CisgICAgcmV0dXJuIFNWR0Fu
aW1hdGVkVHlwZTo6Y3JlYXRlTnVtYmVyKHN0ZDo6bWFrZV91bmlxdWU8ZmxvYXQ+KHZhbHVlKSk7
CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkTnVtYmVy
QW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQ
cm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCkBAIC03NCw5ICs3Miw3IEBAIHZvaWQgU1ZHQW5p
bWF0ZWROdW1iZXJBbmltYXRvcjo6YWRkQW5pbWEKIAogc3RhdGljIGZsb2F0IHBhcnNlTnVtYmVy
RnJvbVN0cmluZyhTVkdBbmltYXRpb25FbGVtZW50KiwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7
Ci0gICAgZmxvYXQgbnVtYmVyID0gMDsKLSAgICBwYXJzZU51bWJlckZyb21TdHJpbmcoc3RyaW5n
LCBudW1iZXIpOwotICAgIHJldHVybiBudW1iZXI7CisgICAgcmV0dXJuIFNWR1Byb3BlcnR5VHJh
aXRzPGZsb2F0Pjo6ZnJvbVN0cmluZyhzdHJpbmcpOwogfQogCiB2b2lkIFNWR0FuaW1hdGVkTnVt
YmVyQW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwgdW5z
aWduZWQgcmVwZWF0Q291bnQsIFNWR0FuaW1hdGVkVHlwZSogZnJvbSwgU1ZHQW5pbWF0ZWRUeXBl
KiB0bywgU1ZHQW5pbWF0ZWRUeXBlKiB0b0F0RW5kT2ZEdXJhdGlvbiwgU1ZHQW5pbWF0ZWRUeXBl
KiBhbmltYXRlZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlckxp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZE51bWJl
ckxpc3QuY3BwCShyZXZpc2lvbiAyMjgzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZWROdW1iZXJMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMiw5ICszMyw4IEBAIFNWR0FuaW1h
dGVkTnVtYmVyTGlzdEFuaW1hdG9yOjpTVkdBbmltYXQKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0Fu
aW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWROdW1iZXJMaXN0QW5pbWF0b3I6OmNvbnN0cnVjdEZyb21T
dHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBT
VkdBbmltYXRlZFR5cGU6OmNyZWF0ZU51bWJlckxpc3Qoc3RkOjptYWtlX3VuaXF1ZTxTVkdOdW1i
ZXJMaXN0VmFsdWVzPigpKTsKLSAgICBhbmltYXRlZFR5cGUtPm51bWJlckxpc3QoKS5wYXJzZShz
dHJpbmcpOwotICAgIHJldHVybiBhbmltYXRlZFR5cGU7CisgICAgYXV0byB2YWx1ZXMgPSBTVkdQ
cm9wZXJ0eVRyYWl0czxTVkdOdW1iZXJMaXN0VmFsdWVzPjo6ZnJvbVN0cmluZyhzdHJpbmcpOwor
ICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZU51bWJlckxpc3Qoc3RkOjptYWtlX3Vu
aXF1ZTxTVkdOdW1iZXJMaXN0VmFsdWVzPihXVEZNb3ZlKHZhbHVlcykpKTsKIH0KIAogc3RkOjp1
bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWROdW1iZXJMaXN0QW5pbWF0b3I6
OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxp
c3QmIGFuaW1hdGVkVHlwZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRO
dW1iZXJPcHRpb25hbE51bWJlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIuY3BwCShyZXZpc2lvbiAyMjgzOTApCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDEzICszMyw4IEBAIFNWR0FuaW1hdGVkTnVtYmVyT3B0aW9u
YWxOdW1iZXJBbmltYXRvcjoKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZH
QW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlckFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5n
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5p
bWF0ZWRUeXBlOjpjcmVhdGVOdW1iZXJPcHRpb25hbE51bWJlcihzdGQ6Om1ha2VfdW5pcXVlPHN0
ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PigpKTsKLSAgICBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiYg
YW5pbWF0ZWROdW1iZXIgPSBhbmltYXRlZFR5cGUtPm51bWJlck9wdGlvbmFsTnVtYmVyKCk7Ci0g
ICAgaWYgKCFwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHN0cmluZywgYW5pbWF0ZWROdW1iZXIu
Zmlyc3QsIGFuaW1hdGVkTnVtYmVyLnNlY29uZCkpIHsKLSAgICAgICAgYW5pbWF0ZWROdW1iZXIu
Zmlyc3QgPSAwOwotICAgICAgICBhbmltYXRlZE51bWJlci5zZWNvbmQgPSAwOwotICAgIH0KLSAg
ICByZXR1cm4gYW5pbWF0ZWRUeXBlOworICAgIGF1dG8gdmFsdWVzID0gU1ZHUHJvcGVydHlUcmFp
dHM8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+Ojpmcm9tU3RyaW5nKHN0cmluZyk7CisgICAgcmV0
dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlTnVtYmVyT3B0aW9uYWxOdW1iZXIoc3RkOjptYWtl
X3VuaXF1ZTxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0Pj4odmFsdWVzKSk7CiB9CiAKIHN0ZDo6dW5p
cXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXJB
bmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFBy
b3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlZFBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlZFBhdGguY3BwCShyZXZpc2lvbiAyMjgzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZWRQYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5j
bHVkZSAiU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQYXRo
U2VnTGlzdFByb3BlcnR5VGVhck9mZi5oIgotI2luY2x1ZGUgIlNWR1BhdGhVdGlsaXRpZXMuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zMyw5ICszMiw4IEBAIFNWR0FuaW1hdGVkUGF0
aEFuaW1hdG9yOjpTVkdBbmltYXRlZFBhdGgKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVk
VHlwZT4gU1ZHQW5pbWF0ZWRQYXRoQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXV0byBieXRlU3RyZWFtID0gc3RkOjptYWtlX3VuaXF1
ZTxTVkdQYXRoQnl0ZVN0cmVhbT4oKTsKLSAgICBidWlsZFNWR1BhdGhCeXRlU3RyZWFtRnJvbVN0
cmluZyhzdHJpbmcsICpieXRlU3RyZWFtLCBVbmFsdGVyZWRQYXJzaW5nKTsKLSAgICByZXR1cm4g
U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVQYXRoKFdURk1vdmUoYnl0ZVN0cmVhbSkpOworICAgIGF1
dG8gdmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxTVkdQYXRoQnl0ZVN0cmVhbT46OmZyb21TdHJp
bmcoc3RyaW5nKTsKKyAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVQYXRoKHN0ZDo6
bWFrZV91bmlxdWU8U1ZHUGF0aEJ5dGVTdHJlYW0+KFdURk1vdmUodmFsdWUpKSk7CiB9CiAKIHN0
ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkUGF0aEFuaW1hdG9yOjpz
dGFydEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0
JiBhbmltYXRlZFR5cGVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUG9p
bnRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQ
b2ludExpc3QuY3BwCShyZXZpc2lvbiAyMjgzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZWRQb2ludExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw4IEBAIFNW
R0FuaW1hdGVkUG9pbnRMaXN0QW5pbWF0b3I6OlNWR0FuaW1hdGUKIAogc3RkOjp1bmlxdWVfcHRy
PFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRQb2ludExpc3RBbmltYXRvcjo6Y29uc3RydWN0
RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBhdXRvIGFuaW1hdGVkVHlw
ZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUG9pbnRMaXN0KHN0ZDo6bWFrZV91bmlxdWU8U1ZH
UG9pbnRMaXN0VmFsdWVzPigpKTsKLSAgICBwb2ludHNMaXN0RnJvbVNWR0RhdGEoYW5pbWF0ZWRU
eXBlLT5wb2ludExpc3QoKSwgc3RyaW5nKTsKLSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOworICAg
IGF1dG8gdmFsdWVzID0gU1ZHUHJvcGVydHlUcmFpdHM8U1ZHUG9pbnRMaXN0VmFsdWVzPjo6ZnJv
bVN0cmluZyhzdHJpbmcpOworICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVBvaW50
TGlzdChzdGQ6Om1ha2VfdW5pcXVlPFNWR1BvaW50TGlzdFZhbHVlcz4oV1RGTW92ZSh2YWx1ZXMp
KSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkUG9p
bnRMaXN0QW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5p
bWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAkocmV2aXNp
b24gMjI4MzkwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUHJlc2VydmVBc3Bl
Y3RSYXRpby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDggQEAgU1ZHQW5pbWF0ZWRQ
cmVzZXJ2ZUFzcGVjdFJhdGlvQW5pbWF0b3I6OgogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0
ZWRUeXBlPiBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW9BbmltYXRvcjo6Y29uc3RydWN0
RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBhdXRvIGFuaW1hdGVkVHlw
ZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUHJlc2VydmVBc3BlY3RSYXRpbyhzdGQ6Om1ha2Vf
dW5pcXVlPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4oKSk7Ci0gICAgYW5pbWF0ZWRUeXBl
LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCkucGFyc2Uoc3RyaW5nKTsKLSAgICByZXR1cm4gYW5pbWF0
ZWRUeXBlOworICAgIGF1dG8gdmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWU+Ojpmcm9tU3RyaW5nKHN0cmluZyk7CisgICAgcmV0dXJuIFNWR0FuaW1h
dGVkVHlwZTo6Y3JlYXRlUHJlc2VydmVBc3BlY3RSYXRpbyhzdGQ6Om1ha2VfdW5pcXVlPFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4odmFsdWUpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFNW
R0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvQW5pbWF0b3I6OnN0
YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3Qm
IGFuaW1hdGVkVHlwZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRSZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRSZWN0LmNw
cAkocmV2aXNpb24gMjI4MzkwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUmVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDggQEAgU1ZHQW5pbWF0ZWRSZWN0QW5p
bWF0b3I6OlNWR0FuaW1hdGVkUmVjdAogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBl
PiBTVkdBbmltYXRlZFJlY3RBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyhjb25zdCBTdHJp
bmcmIHN0cmluZykKIHsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6
Y3JlYXRlUmVjdChzdGQ6Om1ha2VfdW5pcXVlPEZsb2F0UmVjdD4oKSk7Ci0gICAgcGFyc2VSZWN0
KHN0cmluZywgYW5pbWF0ZWRUeXBlLT5yZWN0KCkpOwotICAgIHJldHVybiBhbmltYXRlZFR5cGU7
CisgICAgYXV0byB2YWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPEZsb2F0UmVjdD46OmZyb21TdHJp
bmcoc3RyaW5nKTsKKyAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVSZWN0KHN0ZDo6
bWFrZV91bmlxdWU8RmxvYXRSZWN0Pih2YWx1ZSkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZH
QW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFJlY3RBbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0
aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFN0cmluZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkU3RyaW5nLmNwcAkocmV2aXNpb24g
MjI4MzkwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkU3RyaW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsOSArMzEsOCBAQCBTVkdBbmltYXRlZFN0cmluZ0FuaW1hdG9yOjpT
VkdBbmltYXRlZFN0CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1h
dGVkU3RyaW5nQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJp
bmcpCiB7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVN0
cmluZyhzdGQ6Om1ha2VfdW5pcXVlPFN0cmluZz4oKSk7Ci0gICAgYW5pbWF0ZWRUeXBlLT5zdHJp
bmcoKSA9IHN0cmluZzsKLSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOworICAgIGF1dG8gdmFsdWUg
PSBTVkdQcm9wZXJ0eVRyYWl0czxTdHJpbmc+Ojpmcm9tU3RyaW5nKHN0cmluZyk7CisgICAgcmV0
dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlU3RyaW5nKHN0ZDo6bWFrZV91bmlxdWU8U3RyaW5n
Pih2YWx1ZSkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmlt
YXRlZFN0cmluZ0FuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVu
dEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5jcHAJKHJldmlzaW9uIDIyODM5
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MSwxMCArNDEsOSBAQCBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RB
bmltYXRvcjo6U1ZHQW5pCiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0Fu
aW1hdGVkVHJhbnNmb3JtTGlzdEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0
cmluZyYgc3RyaW5nKQogewotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBl
OjpjcmVhdGVUcmFuc2Zvcm1MaXN0KHN0ZDo6bWFrZV91bmlxdWU8U1ZHVHJhbnNmb3JtTGlzdFZh
bHVlcz4oKSk7Ci0gICAgYW5pbWF0ZWRUeXBlLT50cmFuc2Zvcm1MaXN0KCkucGFyc2UobV90cmFu
c2Zvcm1UeXBlU3RyaW5nICsgc3RyaW5nICsgJyknKTsKLSAgICBBU1NFUlQoYW5pbWF0ZWRUeXBl
LT50cmFuc2Zvcm1MaXN0KCkuc2l6ZSgpIDw9IDEpOwotICAgIHJldHVybiBhbmltYXRlZFR5cGU7
CisgICAgYXV0byB2YWx1ZXMgPSBTVkdQcm9wZXJ0eVRyYWl0czxTVkdUcmFuc2Zvcm1MaXN0VmFs
dWVzPjo6ZnJvbVN0cmluZyhtX3RyYW5zZm9ybVR5cGVTdHJpbmcgKyBzdHJpbmcgKyAnKScpOwor
ICAgIEFTU0VSVCh2YWx1ZXMuc2l6ZSgpIDw9IDEpOworICAgIHJldHVybiBTVkdBbmltYXRlZFR5
cGU6OmNyZWF0ZVRyYW5zZm9ybUxpc3Qoc3RkOjptYWtlX3VuaXF1ZTxTVkdUcmFuc2Zvcm1MaXN0
VmFsdWVzPihXVEZNb3ZlKHZhbHVlcykpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1h
dGVkVHlwZT4gU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0QW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFu
aW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlw
ZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aC5oCShyZXZpc2lvbiAyMjgzOTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDExICs1Nyw2
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHTGVuZ3RoKGluaXRp
YWxWYWx1ZSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBSZWY8U1ZHTGVuZ3RoPiBjcmVhdGUoY29u
c3QgU1ZHTGVuZ3RoVmFsdWUqIGluaXRpYWxWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFNWR0xlbmd0aChpbml0aWFsVmFsdWUpKTsKLSAgICB9Ci0KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPFNWR0xlbmd0aD4+IGNyZWF0
ZShFeGNlcHRpb25PcjxUPiYmIGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChpbml0
aWFsVmFsdWUuaGFzRXhjZXB0aW9uKCkpCkBAIC0xNjIsMTEgKzE1Nyw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIDogU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR0xlbmd0aFZhbHVlPihpbml0aWFsVmFsdWUp
CiAgICAgewogICAgIH0KLQotICAgIGV4cGxpY2l0IFNWR0xlbmd0aChjb25zdCBTVkdMZW5ndGhW
YWx1ZSogaW5pdGlhbFZhbHVlKQotICAgICAgICA6IFNWR1Byb3BlcnR5VGVhck9mZjxTVkdMZW5n
dGhWYWx1ZT4oaW5pdGlhbFZhbHVlKQotICAgIHsKLSAgICB9CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoTGlzdFZhbHVlcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhMaXN0VmFsdWVzLmgJ
KHJldmlzaW9uIDIyODM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhMaXN0VmFs
dWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEzICszNCwyNiBAQCBwdWJsaWM6CiAgICAgU3Ry
aW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKIH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IFNWR1By
b3BlcnR5VHJhaXRzPFNWR0xlbmd0aExpc3RWYWx1ZXM+IHsKK3RlbXBsYXRlPD4KK3N0cnVjdCBT
VkdQcm9wZXJ0eVRyYWl0czxTVkdMZW5ndGhMaXN0VmFsdWVzPiB7CisgICAgc3RhdGljIFNWR0xl
bmd0aExpc3RWYWx1ZXMgaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4geyB9OyB9CisgICAgc3RhdGlj
IFNWR0xlbmd0aExpc3RWYWx1ZXMgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgU1ZH
TGVuZ3RoTW9kZSBsZW5ndGhNb2RlKQorICAgIHsKKyAgICAgICAgU1ZHTGVuZ3RoTGlzdFZhbHVl
cyBsaXN0OworICAgICAgICBsaXN0LnBhcnNlKHN0cmluZywgbGVuZ3RoTW9kZSk7CisgICAgICAg
IHJldHVybiBsaXN0OworICAgIH0KKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxTVkdMZW5ndGhM
aXN0VmFsdWVzPiBwYXJzZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCisgICAgeworICAgICAgICBTVkdMZW5ndGhMaXN0VmFsdWVzIGxpc3Q7Cisg
ICAgICAgIGxpc3QucGFyc2Uoc3RyaW5nLCBTVkdMZW5ndGhWYWx1ZTo6bGVuZ3RoTW9kZUZvckFu
aW1hdGVkTGVuZ3RoQXR0cmlidXRlKGF0dHJOYW1lKSk7CisgICAgICAgIHJldHVybiBsaXN0Owor
ICAgIH0KKyAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IFNWR0xlbmd0aExpc3RWYWx1
ZXMmIHR5cGUpIHsgcmV0dXJuIHR5cGUudmFsdWVBc1N0cmluZygpOyB9CisKICAgICB1c2luZyBM
aXN0SXRlbVR5cGUgPSBTVkdMZW5ndGhWYWx1ZTsKICAgICB1c2luZyBMaXN0SXRlbVRlYXJPZmYg
PSBTVkdMZW5ndGg7CiAgICAgdXNpbmcgTGlzdFByb3BlcnR5VGVhck9mZiA9IFNWR0xlbmd0aExp
c3Q7Ci0KLSAgICBzdGF0aWMgU1ZHTGVuZ3RoTGlzdFZhbHVlcyBpbml0aWFsVmFsdWUoKSB7IHJl
dHVybiAgeyB9OyB9Ci0gICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBTVkdMZW5ndGhM
aXN0VmFsdWVzJiB0eXBlKSB7IHJldHVybiB0eXBlLnZhbHVlQXNTdHJpbmcoKTsgfQogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtl
ckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyRWxl
bWVudC5oCShyZXZpc2lvbiAyMjgzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2Vy
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3NSArMjksMTAgQEAKICNpbmNsdWRlICJT
VkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oIgog
I2luY2x1ZGUgIlNWR0ZpdFRvVmlld0JveC5oIgorI2luY2x1ZGUgIlNWR01hcmtlclR5cGVzLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBTVkdNYXJrZXJVbml0c1R5cGUgewotICAg
IFNWR01hcmtlclVuaXRzVW5rbm93biA9IDAsCi0gICAgU1ZHTWFya2VyVW5pdHNVc2VyU3BhY2VP
blVzZSwKLSAgICBTVkdNYXJrZXJVbml0c1N0cm9rZVdpZHRoCi19OwotCi1lbnVtIFNWR01hcmtl
ck9yaWVudFR5cGUgewotICAgIFNWR01hcmtlck9yaWVudFVua25vd24gPSAwLAotICAgIFNWR01h
cmtlck9yaWVudEF1dG8sCi0gICAgU1ZHTWFya2VyT3JpZW50QW5nbGUsCi0gICAgU1ZHTWFya2Vy
T3JpZW50QXV0b1N0YXJ0UmV2ZXJzZSwKLQotICAgIC8vIEFkZCBuZXcgZWxlbWVudHMgYmVmb3Jl
IGhlcmUuCi0gICAgU1ZHTWFya2VyT3JpZW50TWF4Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3Qg
U1ZHUHJvcGVydHlUcmFpdHM8U1ZHTWFya2VyVW5pdHNUeXBlPiB7Ci0gICAgc3RhdGljIHVuc2ln
bmVkIGhpZ2hlc3RFbnVtVmFsdWUoKSB7IHJldHVybiBTVkdNYXJrZXJVbml0c1N0cm9rZVdpZHRo
OyB9Ci0KLSAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKFNWR01hcmtlclVuaXRzVHlwZSB0eXBl
KQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgU1ZHTWFya2Vy
VW5pdHNVbmtub3duOgotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAg
IGNhc2UgU1ZHTWFya2VyVW5pdHNVc2VyU3BhY2VPblVzZToKLSAgICAgICAgICAgIHJldHVybiBB
U0NJSUxpdGVyYWwoInVzZXJTcGFjZU9uVXNlIik7Ci0gICAgICAgIGNhc2UgU1ZHTWFya2VyVW5p
dHNTdHJva2VXaWR0aDoKLSAgICAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInN0cm9rZVdp
ZHRoIik7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIFNWR01hcmtlclVu
aXRzVHlwZSBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBp
ZiAodmFsdWUgPT0gInVzZXJTcGFjZU9uVXNlIikKLSAgICAgICAgICAgIHJldHVybiBTVkdNYXJr
ZXJVbml0c1VzZXJTcGFjZU9uVXNlOwotICAgICAgICBpZiAodmFsdWUgPT0gInN0cm9rZVdpZHRo
IikKLSAgICAgICAgICAgIHJldHVybiBTVkdNYXJrZXJVbml0c1N0cm9rZVdpZHRoOwotICAgICAg
ICByZXR1cm4gU1ZHTWFya2VyVW5pdHNVbmtub3duOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4K
LWlubGluZSB1bnNpZ25lZCBTVkdJRExFbnVtTGltaXRzPFNWR01hcmtlck9yaWVudFR5cGU+Ojpo
aWdoZXN0RXhwb3NlZEVudW1WYWx1ZSgpIHsgcmV0dXJuIFNWR01hcmtlck9yaWVudEFuZ2xlOyB9
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPFNWR01hcmtlck9yaWVudFR5
cGU+IHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGlnaGVzdEVudW1WYWx1ZSgpIHsgcmV0dXJuIFNW
R01hcmtlck9yaWVudEF1dG9TdGFydFJldmVyc2U7IH0KLQotICAgIC8vIHRvU3RyaW5nIGlzIG5v
dCBuZWVkZWQsIHN5bmNocm9uaXplT3JpZW50VHlwZSgpIGhhbmRsZXMgdGhpcyBvbiBpdHMgb3du
LgotCi0gICAgc3RhdGljIFNWR01hcmtlck9yaWVudFR5cGUgZnJvbVN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlLCBTVkdBbmdsZVZhbHVlJiBhbmdsZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1
ZSA9PSAiYXV0byIpCi0gICAgICAgICAgICByZXR1cm4gU1ZHTWFya2VyT3JpZW50QXV0bzsKLSAg
ICAgICAgaWYgKHZhbHVlID09ICJhdXRvLXN0YXJ0LXJldmVyc2UiKQotICAgICAgICAgICAgcmV0
dXJuIFNWR01hcmtlck9yaWVudEF1dG9TdGFydFJldmVyc2U7Ci0gICAgICAgIGF1dG8gc2V0VmFs
dWVSZXN1bHQgPSBhbmdsZS5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKLSAgICAgICAgaWYgKHNl
dFZhbHVlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIFNWR01hcmtl
ck9yaWVudFVua25vd247Ci0gICAgICAgIHJldHVybiBTVkdNYXJrZXJPcmllbnRBbmdsZTsKLSAg
ICB9Ci19OwotCiBjbGFzcyBTVkdNYXJrZXJFbGVtZW50IGZpbmFsIDogcHVibGljIFNWR0VsZW1l
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNW
R0ZpdFRvVmlld0JveCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyVHlwZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyVHlwZXMuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyVHlwZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNWR0FuZ2xlVmFsdWUu
aCIKKyNpbmNsdWRlICJTVkdQcm9wZXJ0eVRyYWl0cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2VudW0gU1ZHTWFya2VyVW5pdHNUeXBlIHsKKyAgICBTVkdNYXJrZXJVbml0c1Vua25vd24g
PSAwLAorICAgIFNWR01hcmtlclVuaXRzVXNlclNwYWNlT25Vc2UsCisgICAgU1ZHTWFya2VyVW5p
dHNTdHJva2VXaWR0aAorfTsKKworZW51bSBTVkdNYXJrZXJPcmllbnRUeXBlIHsKKyAgICBTVkdN
YXJrZXJPcmllbnRVbmtub3duID0gMCwKKyAgICBTVkdNYXJrZXJPcmllbnRBdXRvLAorICAgIFNW
R01hcmtlck9yaWVudEFuZ2xlLAorICAgIFNWR01hcmtlck9yaWVudEF1dG9TdGFydFJldmVyc2Us
CisgICAgCisgICAgLy8gQWRkIG5ldyBlbGVtZW50cyBiZWZvcmUgaGVyZS4KKyAgICBTVkdNYXJr
ZXJPcmllbnRNYXgKK307CisgICAgCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFp
dHM8U1ZHTWFya2VyVW5pdHNUeXBlPiB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhpZ2hlc3RFbnVt
VmFsdWUoKSB7IHJldHVybiBTVkdNYXJrZXJVbml0c1N0cm9rZVdpZHRoOyB9CisgICAgc3RhdGlj
IFN0cmluZyB0b1N0cmluZyhTVkdNYXJrZXJVbml0c1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFNWR01hcmtlclVuaXRzVW5rbm93bjoKKyAg
ICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICBjYXNlIFNWR01hcmtlclVu
aXRzVXNlclNwYWNlT25Vc2U6CisgICAgICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ1c2Vy
U3BhY2VPblVzZSIpOworICAgICAgICBjYXNlIFNWR01hcmtlclVuaXRzU3Ryb2tlV2lkdGg6Cisg
ICAgICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJzdHJva2VXaWR0aCIpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IGVtcHR5U3RyaW5nKCk7CisgICAgfQorICAgIHN0YXRpYyBTVkdNYXJrZXJVbml0c1R5cGUgZnJv
bVN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlID09
ICJ1c2VyU3BhY2VPblVzZSIpCisgICAgICAgICAgICByZXR1cm4gU1ZHTWFya2VyVW5pdHNVc2Vy
U3BhY2VPblVzZTsKKyAgICAgICAgaWYgKHZhbHVlID09ICJzdHJva2VXaWR0aCIpCisgICAgICAg
ICAgICByZXR1cm4gU1ZHTWFya2VyVW5pdHNTdHJva2VXaWR0aDsKKyAgICAgICAgcmV0dXJuIFNW
R01hcmtlclVuaXRzVW5rbm93bjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgU1ZH
UHJvcGVydHlUcmFpdHM8U1ZHTWFya2VyT3JpZW50VHlwZT4geworICAgIHN0YXRpYyB1bnNpZ25l
ZCBoaWdoZXN0RW51bVZhbHVlKCkgeyByZXR1cm4gU1ZHTWFya2VyT3JpZW50QXV0b1N0YXJ0UmV2
ZXJzZTsgfQorICAgIHN0YXRpYyBTVkdNYXJrZXJPcmllbnRUeXBlIGZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSwgU1ZHQW5nbGVWYWx1ZSYgYW5nbGUpCisgICAgeworICAgICAgICBpZiAo
dmFsdWUgPT0gImF1dG8iKQorICAgICAgICAgICAgcmV0dXJuIFNWR01hcmtlck9yaWVudEF1dG87
CisgICAgICAgIGlmICh2YWx1ZSA9PSAiYXV0by1zdGFydC1yZXZlcnNlIikKKyAgICAgICAgICAg
IHJldHVybiBTVkdNYXJrZXJPcmllbnRBdXRvU3RhcnRSZXZlcnNlOworICAgICAgICBhdXRvIHNl
dFZhbHVlUmVzdWx0ID0gYW5nbGUuc2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7CisgICAgICAgIGlm
IChzZXRWYWx1ZVJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBTVkdN
YXJrZXJPcmllbnRVbmtub3duOworICAgICAgICByZXR1cm4gU1ZHTWFya2VyT3JpZW50QW5nbGU7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PgoraW5saW5lIHVuc2lnbmVkIFNWR0lETEVudW1MaW1p
dHM8U1ZHTWFya2VyT3JpZW50VHlwZT46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKCkgeyByZXR1
cm4gU1ZHTWFya2VyT3JpZW50QW5nbGU7IH0KKwordGVtcGxhdGU8Pgorc3RydWN0IFNWR1Byb3Bl
cnR5VHJhaXRzPHN0ZDo6cGFpcjxTVkdBbmdsZVZhbHVlLCB1bnNpZ25lZD4+IHsKKyAgICBzdGF0
aWMgc3RkOjpwYWlyPFNWR0FuZ2xlVmFsdWUsIHVuc2lnbmVkPiBmcm9tU3RyaW5nKGNvbnN0IFN0
cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgU1ZHQW5nbGVWYWx1ZSBhbmdsZTsKKyAgICAg
ICAgU1ZHTWFya2VyT3JpZW50VHlwZSBvcmllbnRUeXBlID0gU1ZHUHJvcGVydHlUcmFpdHM8U1ZH
TWFya2VyT3JpZW50VHlwZT46OmZyb21TdHJpbmcoc3RyaW5nLCBhbmdsZSk7CisgICAgICAgIGlm
IChvcmllbnRUeXBlICE9IFNWR01hcmtlck9yaWVudEFuZ2xlKQorICAgICAgICAgICAgYW5nbGUg
PSB7IH07CisgICAgICAgIHJldHVybiBzdGQ6OnBhaXI8U1ZHQW5nbGVWYWx1ZSwgdW5zaWduZWQ+
KGFuZ2xlLCBvcmllbnRUeXBlKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWF0cml4LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR01hdHJpeC5oCShyZXZpc2lvbiAyMjgzOTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0Myw2IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHTWF0cml4KGluaXRpYWxW
YWx1ZSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBSZWY8U1ZHTWF0cml4PiBjcmVhdGUoY29uc3Qg
U1ZHTWF0cml4VmFsdWUqIGluaXRpYWxWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFNWR01hdHJpeChpbml0aWFsVmFsdWUpKTsKLSAgICB9Ci0KICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPFNWR01hdHJpeD4+IGNyZWF0ZShF
eGNlcHRpb25PcjxUPiYmIGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChpbml0aWFs
VmFsdWUuaGFzRXhjZXB0aW9uKCkpCkBAIC0yODYsMTEgKzI4MSw2IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgOiBTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHTWF0cml4VmFsdWU+KGluaXRpYWxWYWx1ZSkK
ICAgICB7CiAgICAgfQotCi0gICAgZXhwbGljaXQgU1ZHTWF0cml4KGNvbnN0IFNWR01hdHJpeFZh
bHVlKiBpbml0aWFsVmFsdWUpCi0gICAgICAgIDogU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR01hdHJp
eFZhbHVlPihpbml0aWFsVmFsdWUpCi0gICAgewotICAgIH0KIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyLmgJKHJldmlzaW9uIDIyODM5MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEg
KzQxLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdOdW1iZXIo
aW5pdGlhbFZhbHVlKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFJlZjxTVkdOdW1iZXI+IGNyZWF0
ZShjb25zdCBmbG9hdCogaW5pdGlhbFZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgU1ZHTnVtYmVyKGluaXRpYWxWYWx1ZSkpOwotICAgIH0KLQogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8U1ZHTnVtYmVyPj4gY3JlYXRlKEV4
Y2VwdGlvbk9yPFQ+JiYgaW5pdGlhbFZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKGluaXRpYWxW
YWx1ZS5oYXNFeGNlcHRpb24oKSkKQEAgLTc5LDExICs3NCw2IEBAIHByaXZhdGU6CiAgICAgICAg
IDogU1ZHUHJvcGVydHlUZWFyT2ZmPGZsb2F0Pihpbml0aWFsVmFsdWUpCiAgICAgewogICAgIH0K
LQotICAgIGV4cGxpY2l0IFNWR051bWJlcihjb25zdCBmbG9hdCogaW5pdGlhbFZhbHVlKQotICAg
ICAgICA6IFNWR1Byb3BlcnR5VGVhck9mZjxmbG9hdD4oaW5pdGlhbFZhbHVlKQotICAgIHsKLSAg
ICB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHTnVtYmVyTGlzdFZhbHVlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdOdW1iZXJMaXN0VmFsdWVzLmgJKHJldmlzaW9uIDIyODM5MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdOdW1iZXJMaXN0VmFsdWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2
LDEyIEBAIHB1YmxpYzoKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8U1ZH
TnVtYmVyTGlzdFZhbHVlcz4gewogICAgIHN0YXRpYyBTVkdOdW1iZXJMaXN0VmFsdWVzIGluaXRp
YWxWYWx1ZSgpIHsgcmV0dXJuIHsgfTsgfQorICAgIHN0YXRpYyBTVkdOdW1iZXJMaXN0VmFsdWVz
IGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAgeworICAgICAgICBTVkdOdW1i
ZXJMaXN0VmFsdWVzIGxpc3Q7CisgICAgICAgIGxpc3QucGFyc2Uoc3RyaW5nKTsKKyAgICAgICAg
cmV0dXJuIGxpc3Q7CisgICAgfQogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoY29uc3QgU1ZH
TnVtYmVyTGlzdFZhbHVlcyYgbGlzdCkgeyByZXR1cm4gbGlzdC52YWx1ZUFzU3RyaW5nKCk7IH0K
IAogICAgIHVzaW5nIExpc3RJdGVtVHlwZSA9IGZsb2F0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDIyODM5MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcg
KzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIFRoZSBLYXJib24gRGV2ZWxvcGVy
cwogICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhhbmRlciBLZWxsZXR0IDxseXBhbm92QGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
LSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxOSw2ICsyMTksMzEgQEAgYm9v
bCBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKGNvbnN0IFN0cgogICAgIHJldHVybiBjdXIgPT0g
ZW5kOwogfQogCitib29sIHBhcnNlUG9pbnQoY29uc3QgU3RyaW5nJiBzLCBGbG9hdFBvaW50JiBw
b2ludCkKK3sKKyAgICBpZiAocy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcocykudXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzKCk7CisgICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVy
czsKKyAgICBjb25zdCBVQ2hhciogZW5kID0gY3VyICsgcy5sZW5ndGgoKTsKKworICAgIGlmICgh
c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgZmxvYXQgeCA9IDA7CisgICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwgeCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZsb2F0IHkgPSAwOworICAgIGlmICghcGFyc2VO
dW1iZXIoY3VyLCBlbmQsIHkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwb2ludCA9
IEZsb2F0UG9pbnQoeCwgeSk7CisKKyAgICAvLyBEaXNhbGxvdyBhbnl0aGluZyBleGNlcHQgc3Bh
Y2VzIGF0IHRoZSBlbmQuCisgICAgcmV0dXJuICFza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBl
bmQpOworfQorCiBib29sIHBhcnNlUmVjdChjb25zdCBTdHJpbmcmIHN0cmluZywgRmxvYXRSZWN0
JiByZWN0KQogewogICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhz
dHJpbmcpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhcnNlclV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXJzZXJVdGlsaXRpZXMuaAkocmV2aXNpb24gMjI4MzkwKQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBA
IGJvb2wgcGFyc2VOdW1iZXJGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYKIGJvb2wgcGFyc2VOdW1i
ZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmcmIHMsIGZsb2F0JiBoLCBmbG9hdCYgdik7CiBi
b29sIHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVuZCwgYm9v
bCYgZmxhZyk7CiBib29sIHBhcnNlQXJjRmxhZyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNo
YXIqIGVuZCwgYm9vbCYgZmxhZyk7Citib29sIHBhcnNlUG9pbnQoY29uc3QgU3RyaW5nJiwgRmxv
YXRQb2ludCYpOwogYm9vbCBwYXJzZVJlY3QoY29uc3QgU3RyaW5nJiwgRmxvYXRSZWN0Jik7CiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhCeXRlU3RyZWFtLmgJKHJldmlzaW9uIDIyODM5MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE5LDYgKzIwLDggQEAKIAog
I3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJTVkdQYXRoVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
U1ZHUHJvcGVydHlUcmFpdHMuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTQ2LDM0ICs0OSw0MyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBEYXRh
Ojpjb25zdF9pdGVyYXRvciBEYXRhSXRlcmF0b3I7CiAKICAgICBTVkdQYXRoQnl0ZVN0cmVhbSgp
IHsgfQotICAgIFNWR1BhdGhCeXRlU3RyZWFtKGNvbnN0IERhdGEmIGRhdGEpIDogbV9kYXRhKGRh
dGEpIHsgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTVkdQYXRoQnl0ZVN0cmVh
bSYgb3RoZXIpIGNvbnN0CisgICAgU1ZHUGF0aEJ5dGVTdHJlYW0oY29uc3QgU1ZHUGF0aEJ5dGVT
dHJlYW0mIG90aGVyKQorICAgICAgICA6IG1fZGF0YShvdGhlci5tX2RhdGEpCiAgICAgewotICAg
ICAgICByZXR1cm4gbV9kYXRhID09IG90aGVyLm1fZGF0YTsKICAgICB9CiAKLSAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgU1ZHUGF0aEJ5dGVTdHJlYW0mIG90aGVyKSBjb25zdAorICAgIFNWR1Bh
dGhCeXRlU3RyZWFtKFNWR1BhdGhCeXRlU3RyZWFtJiYgb3RoZXIpCisgICAgICAgIDogbV9kYXRh
KFdURk1vdmUob3RoZXIubV9kYXRhKSkKICAgICB7Ci0gICAgICAgIHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsKICAgICB9CiAKKyAgICBTVkdQYXRoQnl0ZVN0cmVhbSYgb3BlcmF0b3I9KGNvbnN0
IFNWR1BhdGhCeXRlU3RyZWFtJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fZGF0YSA9IG90aGVy
Lm1fZGF0YTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFNWR1BhdGhCeXRl
U3RyZWFtJiBvcGVyYXRvcj0oU1ZHUGF0aEJ5dGVTdHJlYW0mJiBvdGhlcikKKyAgICB7CisgICAg
ICAgIG1fZGF0YSA9IFdURk1vdmUob3RoZXIubV9kYXRhKTsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTVkdQYXRoQnl0ZVN0cmVhbSYg
b3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YSA9PSBvdGhlci5tX2RhdGE7IH0KKyAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgU1ZHUGF0aEJ5dGVTdHJlYW0mIG90aGVyKSBjb25zdCB7IHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsgfQorCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNWR1BhdGhCeXRl
U3RyZWFtPiBjb3B5KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPFNWR1BhdGhCeXRlU3RyZWFtPihtX2RhdGEpOworICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxTVkdQYXRoQnl0ZVN0cmVhbT4oKnRoaXMpOwogICAgIH0KIAogICAgIERhdGFJdGVy
YXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5iZWdpbigpOyB9CiAgICAgRGF0YUl0
ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5lbmQoKTsgfQogCiAgICAgdm9pZCBh
cHBlbmQodW5zaWduZWQgY2hhciBieXRlKSB7IG1fZGF0YS5hcHBlbmQoYnl0ZSk7IH0KLSAgICB2
b2lkIGFwcGVuZChjb25zdCBTVkdQYXRoQnl0ZVN0cmVhbSYgb3RoZXIpCi0gICAgewotICAgICAg
ICBmb3IgKGF1dG8gc3RyZWFtIDogb3RoZXIpCi0gICAgICAgICAgICBhcHBlbmQoc3RyZWFtKTsK
LSAgICB9CisgICAgdm9pZCBhcHBlbmQoY29uc3QgU1ZHUGF0aEJ5dGVTdHJlYW0mIG90aGVyKSB7
IG1fZGF0YS5hcHBlbmRWZWN0b3Iob3RoZXIubV9kYXRhKTsgfQogICAgIHZvaWQgY2xlYXIoKSB7
IG1fZGF0YS5jbGVhcigpOyB9Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1f
ZGF0YS5zaXplKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2RhdGEu
aXNFbXB0eSgpOyB9CiAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5z
aXplKCk7IH0KIAogICAgIC8vIE9ubHkgZGVmaW5lZCB0byBsZXQgU1ZHQW5pbWF0ZWRQYXRoQW5p
bWF0b3IgdXNlIHRoZSBzdGFuZGFyZCBsaXN0IGNvZGUgcGF0aHMgLSB0aGlzIG1ldGhvZCBpcyBu
ZXZlciBjYWxsZWQuCkBAIC04Myw0ICs5NSwxNSBAQCBwcml2YXRlOgogICAgIERhdGEgbV9kYXRh
OwogfTsKIAordGVtcGxhdGU8Pgorc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1BhdGhCeXRl
U3RyZWFtPiB7CisgICAgc3RhdGljIFNWR1BhdGhCeXRlU3RyZWFtIGluaXRpYWxWYWx1ZSgpIHsg
cmV0dXJuIFNWR1BhdGhCeXRlU3RyZWFtKCk7IH0KKyAgICBzdGF0aWMgU1ZHUGF0aEJ5dGVTdHJl
YW0gZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAgICAgIFNWR1Bh
dGhCeXRlU3RyZWFtIGJ5dGVTdHJlYW07CisgICAgICAgIGJ1aWxkU1ZHUGF0aEJ5dGVTdHJlYW1G
cm9tU3RyaW5nKHN0cmluZywgYnl0ZVN0cmVhbSwgVW5hbHRlcmVkUGFyc2luZyk7CisgICAgICAg
IHJldHVybiBieXRlU3RyZWFtOworICAgIH0KK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVXRpbGl0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDIy
ODM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVXRpbGl0aWVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjA2LDE1ICsyMDYsMTUgQEAgYm9vbCBidWlsZEFuaW1hdGVkU1ZHUGF0aEJ5
dGVTdHJlYW0oY29ucwogCiBib29sIGFkZFRvU1ZHUGF0aEJ5dGVTdHJlYW0oU1ZHUGF0aEJ5dGVT
dHJlYW0mIHN0cmVhbVRvQXBwZW5kVG8sIGNvbnN0IFNWR1BhdGhCeXRlU3RyZWFtJiBieVN0cmVh
bSwgdW5zaWduZWQgcmVwZWF0Q291bnQpCiB7Ci0gICAgLy8gV2h5IHJldHVybiB3aGVuIHN0cmVh
bVRvQXBwZW5kVG8gaXMgZW1wdHk/IERvbid0IHdlIHN0aWxsIG5lZWQgdG8gYXBwZW5kPworICAg
IC8vIFRoZSBieVN0cmVhbSB3aWxsIGJlIGJsZW5kZWQgd2l0aCBzdHJlYW1Ub0FwcGVuZFRvLiBT
byBzdHJlYW1Ub0FwcGVuZFRvIGhhcyB0byBoYXZlIGVsZW1lbnRzLgogICAgIGlmIChzdHJlYW1U
b0FwcGVuZFRvLmlzRW1wdHkoKSB8fCBieVN0cmVhbS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgLy8gSXMgaXQgT0sgdG8gbWFrZSB0aGUgU1ZHUGF0aEJ5dGVTdHJlYW1C
dWlsZGVyIGZyb20gYSBzdHJlYW0sIGFuZCB0aGVuIGNsZWFyIHRoYXQgc3RyZWFtPworICAgIC8v
IGJ1aWxkZXIgaXMgdGhlIGRlc3RpbmF0aW9uIG9mIGJsZW5kaW5nIGZyb21Tb3VyY2UgYW5kIGJ5
U291cmNlLiBUaGUgc3RyZWFtIG9mIGJ1aWxkZXIKKyAgICAvLyAoaS5lLiBzdHJlYW1Ub0FwcGVu
ZFRvKSBoYXMgdG8gYmUgY2xlYXJlZCBiZWZvcmUgY2FsbGluZyBhZGRBbmltYXRlZFBhdGguCiAg
ICAgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyIGJ1aWxkZXIoc3RyZWFtVG9BcHBlbmRUbyk7CiAK
LSAgICBTVkdQYXRoQnl0ZVN0cmVhbSBmcm9tU3RyZWFtQ29weSA9IHN0cmVhbVRvQXBwZW5kVG87
Ci0gICAgc3RyZWFtVG9BcHBlbmRUby5jbGVhcigpOworICAgIFNWR1BhdGhCeXRlU3RyZWFtIGZy
b21TdHJlYW1Db3B5ID0gV1RGTW92ZShzdHJlYW1Ub0FwcGVuZFRvKTsKIAogICAgIFNWR1BhdGhC
eXRlU3RyZWFtU291cmNlIGZyb21Tb3VyY2UoZnJvbVN0cmVhbUNvcHkpOwogICAgIFNWR1BhdGhC
eXRlU3RyZWFtU291cmNlIGJ5U291cmNlKGJ5U3RyZWFtKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2lu
dC5oCShyZXZpc2lvbiAyMjgzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
U2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDExICs0NCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU1ZHUG9pbnQoaW5pdGlhbFZhbHVlKSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIFJlZjxTVkdQb2ludD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQqIGluaXRpYWxWYWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR1BvaW50KGluaXRpYWxWYWx1
ZSkpOwotICAgIH0KLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBFeGNlcHRpb25P
cjxSZWY8U1ZHUG9pbnQ+PiBjcmVhdGUoRXhjZXB0aW9uT3I8VD4mJiBpbml0aWFsVmFsdWUpCiAg
ICAgewogICAgICAgICBpZiAoaW5pdGlhbFZhbHVlLmhhc0V4Y2VwdGlvbigpKQpAQCAtMTEzLDEx
ICsxMDksNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIDogU1ZHUHJvcGVydHlUZWFyT2ZmPEZsb2F0
UG9pbnQ+KGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAgfQotCi0gICAgZXhwbGljaXQgU1ZHUG9p
bnQoY29uc3QgRmxvYXRQb2ludCogaW5pdGlhbFZhbHVlKQotICAgICAgICA6IFNWR1Byb3BlcnR5
VGVhck9mZjxGbG9hdFBvaW50Pihpbml0aWFsVmFsdWUpCi0gICAgewotICAgIH0KIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExp
c3RWYWx1ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0
VmFsdWVzLmgJKHJldmlzaW9uIDIyODM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2lu
dExpc3RWYWx1ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsMTUgQEAgcHVibGljOgog
ICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Q7CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVj
dCBTVkdQcm9wZXJ0eVRyYWl0czxTVkdQb2ludExpc3RWYWx1ZXM+IHsKK3RlbXBsYXRlPD4KK3N0
cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxTVkdQb2ludExpc3RWYWx1ZXM+IHsKICAgICBzdGF0aWMg
U1ZHUG9pbnRMaXN0VmFsdWVzIGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIHsgfTsgfQorICAgIHN0
YXRpYyBTVkdQb2ludExpc3RWYWx1ZXMgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykK
KyAgICB7CisgICAgICAgIFNWR1BvaW50TGlzdFZhbHVlcyBsaXN0OworICAgICAgICBwb2ludHNM
aXN0RnJvbVNWR0RhdGEobGlzdCwgc3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAg
fQogCiAgICAgdXNpbmcgTGlzdEl0ZW1UeXBlID0gRmxvYXRQb2ludDsKICAgICB1c2luZyBMaXN0
SXRlbVRlYXJPZmYgPSBTVkdQb2ludDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVt
ZW50LmNwcAkocmV2aXNpb24gMjI4MzkwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIFNWR1BvbHlF
bGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zCiAgICAgICAgIGlmIChhdXRvIHdyYXBwZXIgPSBT
VkdBbmltYXRlZFByb3BlcnR5Ojpsb29rdXBXcmFwcGVyPFNWR1BvbHlFbGVtZW50LCBTVkdBbmlt
YXRlZFBvaW50TGlzdD4odGhpcywgcG9pbnRzUHJvcGVydHlJbmZvKCkpKQogICAgICAgICAgICAg
c3RhdGljX3BvaW50ZXJfY2FzdDxTVkdBbmltYXRlZFBvaW50TGlzdD4od3JhcHBlciktPmRldGFj
aExpc3RXcmFwcGVycyhuZXdMaXN0LnNpemUoKSk7CiAKLSAgICAgICAgbV9wb2ludHMudmFsdWUg
PSBuZXdMaXN0OworICAgICAgICBtX3BvaW50cy52YWx1ZSA9IFdURk1vdmUobmV3TGlzdCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1By
ZXNlcnZlQXNwZWN0UmF0aW8uaAkocmV2aXNpb24gMjI4MzkwKQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwxMSArNDIsNiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW8oaW5pdGlhbFZhbHVlKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFJlZjxTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvPiBjcmVhdGUoY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKiBp
bml0aWFsVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvKGluaXRpYWxWYWx1ZSkpOwotICAgIH0KLQogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8U1ZHUHJlc2VydmVBc3BlY3RSYXRpbz4+
IGNyZWF0ZShFeGNlcHRpb25PcjxUPiYmIGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAgICAgIGlm
IChpbml0aWFsVmFsdWUuaGFzRXhjZXB0aW9uKCkpCkBAIC0xMDAsMTEgKzk1LDYgQEAgcHJpdmF0
ZToKICAgICAgICAgOiBTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlPihpbml0aWFsVmFsdWUpCiAgICAgewogICAgIH0KLQotICAgIGV4cGxpY2l0IFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW8oY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKiBpbml0aWFs
VmFsdWUpCi0gICAgICAgIDogU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZT4oaW5pdGlhbFZhbHVlKQotICAgIHsKLSAgICB9CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlLmNwcAkocmV2aXNpb24gMjI4MzkwKQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDYgKzM1LDExIEBAIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmUKIHsK
IH0KIAorU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBwYXJzZSh2YWx1ZSk7Cit9CisKIEV4
Y2VwdGlvbk9yPHZvaWQ+IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6c2V0QWxpZ24odW5z
aWduZWQgc2hvcnQgYWxpZ24pCiB7CiAgICAgaWYgKGFsaWduID09IFNWR19QUkVTRVJWRUFTUEVD
VFJBVElPX1VOS05PV04gfHwgYWxpZ24gPiBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1B
WCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlLmgJKHJldmlzaW9uIDIyODM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBw
dWJsaWM6CiAgICAgfTsKIAogICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSgpOworICAg
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZShjb25zdCBTdHJpbmcmKTsKIAogICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IHNldEFsaWduKHVuc2lnbmVkIHNob3J0KTsKICAgICB1bnNpZ25lZCBzaG9y
dCBhbGlnbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxpZ247IH0KQEAgLTc3LDcgKzc4LDE1IEBAIHBy
aXZhdGU6CiAKIHRlbXBsYXRlPD4gc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZT4gewogICAgIHN0YXRpYyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFs
dWUgaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKCk7
IH0KLSAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZSYgdHlwZSkgeyByZXR1cm4gdHlwZS52YWx1ZUFzU3RyaW5nKCk7IH0KKyAgICBzdGF0
aWMgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBz
dHJpbmcpCisgICAgeworICAgICAgICByZXR1cm4gU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
KHN0cmluZyk7CisKKyAgICB9CisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gdHlw
ZS52YWx1ZUFzU3RyaW5nKCk7CisgICAgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUmVjdC5oCShyZXZpc2lvbiAyMjgzOTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDcgKzIxLDcgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiU1ZHUHJvcGVydHlUZWFyT2ZmLmgiCi0jaW5jbHVkZSAiU1ZHUmVjdFRy
YWl0cy5oIgorI2luY2x1ZGUgIlNWR1Byb3BlcnR5VHJhaXRzLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMzYsMTEgKzM3LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTVkdSZWN0KGluaXRpYWxWYWx1ZSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBSZWY8
U1ZHUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCogaW5pdGlhbFZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHUmVjdChpbml0aWFsVmFsdWUpKTsKLSAgICB9
Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPFNWR1Jl
Y3Q+PiBjcmVhdGUoRXhjZXB0aW9uT3I8VD4mJiBpbml0aWFsVmFsdWUpCiAgICAgewogICAgICAg
ICBpZiAoaW5pdGlhbFZhbHVlLmhhc0V4Y2VwdGlvbigpKQpAQCAtMTIyLDExICsxMTgsNiBAQCBw
cml2YXRlOgogICAgICAgICA6IFNWR1Byb3BlcnR5VGVhck9mZjxGbG9hdFJlY3Q+KGluaXRpYWxW
YWx1ZSkKICAgICB7CiAgICAgfQotCi0gICAgZXhwbGljaXQgU1ZHUmVjdChjb25zdCBGbG9hdFJl
Y3QqIGluaXRpYWxWYWx1ZSkKLSAgICAgICAgOiBTVkdQcm9wZXJ0eVRlYXJPZmY8RmxvYXRSZWN0
Pihpbml0aWFsVmFsdWUpCi0gICAgewotICAgIH0KIH07CiAKIApJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1JlY3RUcmFpdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUmVjdFRyYWl0cy5oCShyZXZpc2lvbiAyMjgzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUmVjdFRyYWl0cy5oCShub25leGlzdGVudCkKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiU1ZH
UHJvcGVydHlUcmFpdHMuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdGVtcGxhdGU8Pgotc3RydWN0IFNWR1Byb3BlcnR5VHJh
aXRzPEZsb2F0UmVjdD4gewotICAgIHN0YXRpYyBGbG9hdFJlY3QgaW5pdGlhbFZhbHVlKCkgeyBy
ZXR1cm4geyB9OyB9Ci0gICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBGbG9hdFJlY3Qm
IHR5cGUpCi0gICAgewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kTnVtYmVyKHR5cGUueCgpKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAn
KTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIodHlwZS55KCkpOwotICAgICAgICBidWls
ZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcih0eXBlLndpZHRo
KCkpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVu
ZE51bWJlcih0eXBlLmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmco
KTsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVHJhbnNmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1RyYW5zZm9ybS5oCShyZXZpc2lvbiAyMjgzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVHJhbnNmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsMTEgKzQzLDYgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdUcmFuc2Zvcm0oaW5pdGlhbFZhbHVlKSk7CiAg
ICAgfQogCi0gICAgc3RhdGljIFJlZjxTVkdUcmFuc2Zvcm0+IGNyZWF0ZShjb25zdCBTVkdUcmFu
c2Zvcm1WYWx1ZSogaW5pdGlhbFZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU1ZHVHJhbnNmb3JtKGluaXRpYWxWYWx1ZSkpOwotICAgIH0KLQogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8U1ZHVHJhbnNmb3JtPj4gY3JlYXRl
KEV4Y2VwdGlvbk9yPFQ+JiYgaW5pdGlhbFZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKGluaXRp
YWxWYWx1ZS5oYXNFeGNlcHRpb24oKSkKQEAgLTE0MywxMSArMTM4LDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgOiBTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHVHJhbnNmb3JtVmFsdWU+KGluaXRpYWxWYWx1
ZSkKICAgICB7CiAgICAgfQotCi0gICAgZXhwbGljaXQgU1ZHVHJhbnNmb3JtKGNvbnN0IFNWR1Ry
YW5zZm9ybVZhbHVlKiBpbml0aWFsVmFsdWUpCi0gICAgICAgIDogU1ZHUHJvcGVydHlUZWFyT2Zm
PFNWR1RyYW5zZm9ybVZhbHVlPihpbml0aWFsVmFsdWUpCi0gICAgewotICAgIH0KIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zv
cm1MaXN0VmFsdWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5z
Zm9ybUxpc3RWYWx1ZXMuaAkocmV2aXNpb24gMjI4MzkwKQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1RyYW5zZm9ybUxpc3RWYWx1ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTIg
QEAgcHVibGljOgogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxTVkdUcmFu
c2Zvcm1MaXN0VmFsdWVzPiB7CiAgICAgc3RhdGljIFNWR1RyYW5zZm9ybUxpc3RWYWx1ZXMgaW5p
dGlhbFZhbHVlKCkgeyByZXR1cm4geyB9OyB9CisgICAgc3RhdGljIFNWR1RyYW5zZm9ybUxpc3RW
YWx1ZXMgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAgICAgIFNW
R1RyYW5zZm9ybUxpc3RWYWx1ZXMgdmFsdWVzOworICAgICAgICB2YWx1ZXMucGFyc2Uoc3RyaW5n
KTsKKyAgICAgICAgcmV0dXJuIHZhbHVlczsKKyAgICB9CiAgICAgc3RhdGljIFN0cmluZyB0b1N0
cmluZyhjb25zdCBTVkdUcmFuc2Zvcm1MaXN0VmFsdWVzJiBsaXN0KSB7IHJldHVybiBsaXN0LnZh
bHVlQXNTdHJpbmcoKTsgfQogCiAgICAgdXNpbmcgTGlzdEl0ZW1UeXBlID0gU1ZHVHJhbnNmb3Jt
VmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eVRl
YXJPZmYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQ
cm9wZXJ0eVRlYXJPZmYuaAkocmV2aXNpb24gMjI4MzkwKQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlUZWFyT2ZmLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDEx
ICs1Myw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2VsZihpbml0
aWFsVmFsdWUpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgUmVmPFNlbGY+IGNyZWF0ZShjb25zdCBQ
cm9wZXJ0eVR5cGUqIGluaXRpYWxWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFNlbGYoaW5pdGlhbFZhbHVlKSk7Ci0gICAgfQotCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4gc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxTZWxmPj4gY3JlYXRlKEV4Y2VwdGlvbk9yPFU+
JiYgaW5pdGlhbFZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKGluaXRpYWxWYWx1ZS5oYXNFeGNl
cHRpb24oKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5
VHJhaXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZH
UHJvcGVydHlUcmFpdHMuaAkocmV2aXNpb24gMjI4MzkwKQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlUcmFpdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yMCw2ICsyMSwxMyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgIkNTU1BhcnNlci5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUu
aCIKKyNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTMwLDEwICszOCwyMyBAQCBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFp
dHMgeyB9OwogdGVtcGxhdGU8Pgogc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPGJvb2w+IHsKICAg
ICBzdGF0aWMgYm9vbCBpbml0aWFsVmFsdWUoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHN0YXRp
YyBib29sIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpIHsgcmV0dXJuIHN0cmluZyA9
PSAidHJ1ZSI7IH0KICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGJvb2wgdHlwZSkgeyByZXR1
cm4gdHlwZSA/ICJ0cnVlIiA6ICJmYWxzZSI7IH0KIH07CiAKIHRlbXBsYXRlPD4KK3N0cnVjdCBT
VkdQcm9wZXJ0eVRyYWl0czxDb2xvcj4geworICAgIHN0YXRpYyBDb2xvciBpbml0aWFsVmFsdWUo
KSB7IHJldHVybiBDb2xvcigpOyB9CisgICAgc3RhdGljIENvbG9yIGZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpIHsgcmV0dXJuIENTU1BhcnNlcjo6cGFyc2VDb2xvcihzdHJpbmcuc3Ry
aXBXaGl0ZVNwYWNlKCkpOyB9CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8Q29sb3I+IHBhcnNl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAg
ICAgIENvbG9yIGNvbG9yID0gQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHN0cmluZy5zdHJpcFdoaXRl
U3BhY2UoKSk7CisgICAgICAgIHJldHVybiBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IHN0ZDo6
b3B0aW9uYWw8Q29sb3I+KCk7CisgICAgfQorICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoY29u
c3QgQ29sb3ImIHR5cGUpIHsgcmV0dXJuIHR5cGUuc2VyaWFsaXplZCgpOyB9Cit9OworCit0ZW1w
bGF0ZTw+CiBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8dW5zaWduZWQ+IHsKICAgICBzdGF0aWMg
dW5zaWduZWQgaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gMDsgfQogICAgIHN0YXRpYyBTdHJpbmcg
dG9TdHJpbmcodW5zaWduZWQgdHlwZSkgeyByZXR1cm4gU3RyaW5nOjpudW1iZXIodHlwZSk7IH0K
QEAgLTQyLDE5ICs2MywxMDYgQEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPHVuc2lnbmVkPiB7
CiB0ZW1wbGF0ZTw+CiBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8aW50PiB7CiAgICAgc3RhdGlj
IGludCBpbml0aWFsVmFsdWUoKSB7IHJldHVybiAwOyB9CisgICAgc3RhdGljIGludCBmcm9tU3Ry
aW5nKGNvbnN0IFN0cmluZyZzdHJpbmcpIHsgcmV0dXJuIHN0cmluZy50b0ludFN0cmljdCgpOyB9
CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhpbnQgdHlwZSkgeyByZXR1cm4gU3RyaW5nOjpu
dW1iZXIodHlwZSk7IH0KIH07CiAKIHRlbXBsYXRlPD4KK3N0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0
czxzdGQ6OnBhaXI8aW50LCBpbnQ+PiB7CisgICAgc3RhdGljIHN0ZDo6cGFpcjxpbnQsIGludD4g
aW5pdGlhbFZhbHVlKCkgeyByZXR1cm4geyB9OyB9CisgICAgc3RhdGljIHN0ZDo6cGFpcjxpbnQs
IGludD4gZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAgICAgIGZs
b2F0IGZpcnN0TnVtYmVyID0gMCwgc2Vjb25kTnVtYmVyID0gMDsKKyAgICAgICAgaWYgKCFwYXJz
ZU51bWJlck9wdGlvbmFsTnVtYmVyKHN0cmluZywgZmlyc3ROdW1iZXIsIHNlY29uZE51bWJlcikp
CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
c3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYoZmlyc3ROdW1iZXIpKSwgc3RhdGljX2Nhc3Q8aW50Pihy
b3VuZGYoc2Vjb25kTnVtYmVyKSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4KIHN0cnVjdCBT
VkdQcm9wZXJ0eVRyYWl0czxmbG9hdD4gewogICAgIHN0YXRpYyBmbG9hdCBpbml0aWFsVmFsdWUo
KSB7IHJldHVybiAwOyB9CisgICAgc3RhdGljIGZsb2F0IGZyb21TdHJpbmcoY29uc3QgU3RyaW5n
JiBzdHJpbmcpCisgICAgeworICAgICAgICBmbG9hdCB0eXBlID0gMDsKKyAgICAgICAgcmV0dXJu
IHBhcnNlTnVtYmVyRnJvbVN0cmluZyhzdHJpbmcsIHR5cGUpID8gdHlwZSA6IDA7CisgICAgfQor
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBwYXJzZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAgeworICAgICAgICBmbG9hdCBudW1iZXI7Cisg
ICAgICAgIHJldHVybiBwYXJzZU51bWJlckZyb21TdHJpbmcoc3RyaW5nLCBudW1iZXIpID8gbnVt
YmVyIDogc3RkOjpvcHRpb25hbDxmbG9hdD4oKTsKKyAgICB9CiAgICAgc3RhdGljIFN0cmluZyB0
b1N0cmluZyhmbG9hdCB0eXBlKSB7IHJldHVybiBTdHJpbmc6Om51bWJlcih0eXBlKTsgfQogfTsK
IAogdGVtcGxhdGU8Pgorc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPHN0ZDo6cGFpcjxmbG9hdCwg
ZmxvYXQ+PiB7CisgICAgc3RhdGljIHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IGluaXRpYWxWYWx1
ZSgpIHsgcmV0dXJuIHsgfTsgfQorICAgIHN0YXRpYyBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiBm
cm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgZmxvYXQgZmly
c3ROdW1iZXIgPSAwLCBzZWNvbmROdW1iZXIgPSAwOworICAgICAgICBpZiAoIXBhcnNlTnVtYmVy
T3B0aW9uYWxOdW1iZXIoc3RyaW5nLCBmaXJzdE51bWJlciwgc2Vjb25kTnVtYmVyKSkKKyAgICAg
ICAgICAgIHJldHVybiB7IH07CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihmaXJzdE51
bWJlciwgc2Vjb25kTnVtYmVyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgU1ZH
UHJvcGVydHlUcmFpdHM8RmxvYXRQb2ludD4geworICAgIHN0YXRpYyBGbG9hdFBvaW50IGluaXRp
YWxWYWx1ZSgpIHsgcmV0dXJuIEZsb2F0UG9pbnQoKTsgfQorICAgIHN0YXRpYyBGbG9hdFBvaW50
IGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAgeworICAgICAgICBGbG9hdFBv
aW50IHBvaW50OworICAgICAgICByZXR1cm4gcGFyc2VQb2ludChzdHJpbmcsIHBvaW50KSA/IHBv
aW50IDogRmxvYXRQb2ludCgpOworICAgIH0KKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxGbG9h
dFBvaW50PiBwYXJzZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgU3RyaW5nJiBzdHJpbmcp
CisgICAgeworICAgICAgICBGbG9hdFBvaW50IHBvaW50OworICAgICAgICByZXR1cm4gcGFyc2VQ
b2ludChzdHJpbmcsIHBvaW50KSA/IHBvaW50IDogc3RkOjpvcHRpb25hbDxGbG9hdFBvaW50Pigp
OworICAgIH0KKyAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IEZsb2F0UG9pbnQmIHR5
cGUpCisgICAgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kTnVtYmVyKHR5cGUueCgpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsK
KyAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIodHlwZS55KCkpOworICAgICAgICByZXR1cm4g
YnVpbGRlci50b1N0cmluZygpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBTVkdQ
cm9wZXJ0eVRyYWl0czxGbG9hdFJlY3Q+IHsKKyAgICBzdGF0aWMgRmxvYXRSZWN0IGluaXRpYWxW
YWx1ZSgpIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CisgICAgc3RhdGljIEZsb2F0UmVjdCBmcm9t
U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgRmxvYXRSZWN0IHJl
Y3Q7CisgICAgICAgIHJldHVybiBwYXJzZVJlY3Qoc3RyaW5nLCByZWN0KSA/IHJlY3QgOiBGbG9h
dFJlY3QoKTsKKyAgICB9CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJz
ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAgeworICAg
ICAgICBGbG9hdFJlY3QgcmVjdDsKKyAgICAgICAgcmV0dXJuIHBhcnNlUmVjdChzdHJpbmcsIHJl
Y3QpID8gcmVjdCA6IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PigpOworICAgIH0KKyAgICBzdGF0
aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IEZsb2F0UmVjdCYgdHlwZSkKKyAgICB7CisgICAgICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIodHlw
ZS54KCkpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOworICAgICAgICBidWlsZGVyLmFw
cGVuZE51bWJlcih0eXBlLnkoKSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKHR5cGUud2lkdGgoKSk7CisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCcgJyk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKHR5cGUuaGVpZ2h0KCkp
OworICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworICAgIH0KK307CisKK3RlbXBs
YXRlPD4KIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxTdHJpbmc+IHsKICAgICBzdGF0aWMgU3Ry
aW5nIGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgc3RhdGljIFN0cmlu
ZyB0b1N0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpIHsgcmV0dXJuIHR5cGU7IH0KKyAgICBzdGF0
aWMgU3RyaW5nIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpIHsgcmV0dXJuIHN0cmlu
ZzsgfQorICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gcGFyc2UoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7IHJldHVybiBzdHJpbmc7IH0KKyAgICBz
dGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7IHJldHVybiBzdHJp
bmc7IH0KIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEVudW1UeXBlPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>334102</attachid>
            <date>2018-02-16 21:48:50 -0800</date>
            <delta_ts>2018-02-19 16:47:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-182901-20180216214850.patch</filename>
            <type>text/plain</type>
            <size>72102</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyODU5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNSBAQAorMjAxOC0wMi0xNiAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBTVkdQ
cm9wZXJ0eVRyYWl0czo6ZnJvbVN0cmluZygpIHRvIGFsbCB0aGUgU1ZHIGFuaW1hdGVkIHR5cGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI5MDEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlz
IGEgd29yayB0b3dhcmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
ODU4Ni4gVGhlCisgICAgICAgIGdvYWwgaXMgaXMgdG8gdGVtcGxhdGl6ZSB0aGUgU1ZHQW5pbWF0
ZWRUeXBlIGNsYXNzIGFuZCB0byB1c2UgU1ZHUHJvcGVydHlUcmFpdHMKKyAgICAgICAgbWV0aG9k
cyBpbnNpZGUgdGhlIHRlbXBsYXRlIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajogTW92ZSB0aGUgZW51bSBhbmQgdGhlIFNWR1Byb3BlcnR5
VHJhaXRzCisgICAgICAgIGZyb20gU1ZHTWFya2VyRWxlbWVudC5oIHRvIFNWR01hcmtlclR5cGVz
LmguCisgICAgICAgICogc3ZnL1NWR0FuZ2xlLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmds
ZTo6U1ZHQW5nbGUpOiBEZWxldGUgdW51c2VkIGNvbnN0cnVjdG9yIGFuZCBjcmVhdGUoKSBtZXRo
b2QuCisgICAgICAgICogc3ZnL1NWR0FuZ2xlVmFsdWUuaDoKKyAgICAgICAgKiBzdmcvU1ZHQW5p
bWF0ZU1vdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VQb2ludCk6IERl
bGV0ZWQuIE1vdmUgdGhpcyBmdW5jdGlvbiB0byBTVkdQYXJzZXJVdGlsaXRpZXMuY3BwCisgICAg
ICAgICogc3ZnL1NWR0FuaW1hdGVkQW5nbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0ZWRBbmdsZUFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKTogVXNlIFNWR1Byb3BlcnR5
VHJhaXRzOjpmcm9tU3RyaW5nKCkuCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkQm9vbGVhbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZEJvb2xlYW5BbmltYXRvcjo6Y29uc3Ry
dWN0RnJvbVN0cmluZyk6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZENvbG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkQ29sb3JBbmltYXRvcjo6Y29uc3RydWN0
RnJvbVN0cmluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRDb2xvckFu
aW1hdG9yOjphZGRBbmltYXRlZFR5cGVzKTogVXNlIGNvbnN0LgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0ZWRDb2xvckFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKTogRGl0dG8u
CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkRW51bWVyYXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5n
KTogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkSW50ZWdlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmlu
Zyk6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVn
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRl
Z2VyQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKiBzdmcv
U1ZHQW5pbWF0ZWRMZW5ndGguY3BwOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZExlbmd0aExp
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0QW5pbWF0b3I6
OmNvbnN0cnVjdEZyb21TdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRO
dW1iZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWROdW1iZXJBbmltYXRvcjo6
Y29uc3RydWN0RnJvbVN0cmluZyk6IERpdHRvCisgICAgICAgIChXZWJDb3JlOjpwYXJzZU51bWJl
ckZyb21TdHJpbmcpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZE51bWJlckxpc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWROdW1iZXJMaXN0QW5pbWF0b3I6OmNvbnN0cnVj
dEZyb21TdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWROdW1iZXJPcHRp
b25hbE51bWJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZE51bWJlck9wdGlv
bmFsTnVtYmVyQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcpOiBEaXR0by4KKyAgICAgICAg
KiBzdmcvU1ZHQW5pbWF0ZWRQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVk
UGF0aEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKTogRGl0dG8uCisgICAgICAgICogc3Zn
L1NWR0FuaW1hdGVkUG9pbnRMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVk
UG9pbnRMaXN0QW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcpOiBEaXR0by4KKyAgICAgICAg
KiBzdmcvU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpb0FuaW1hdG9yOjpjb25zdHJ1Y3RGcm9t
U3RyaW5nKTogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkUmVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFJlY3RBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmlu
Zyk6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZFN0cmluZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlZFN0cmluZ0FuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5n
KTogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RBbmltYXRvcjo6Y29uc3Ry
dWN0RnJvbVN0cmluZyk6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGguaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0xlbmd0aDo6U1ZHTGVuZ3RoKTogRGVsZXRlIHVudXNlZCBjb25zdHJ1
Y3RvciBhbmQgY3JlYXRlKCkgbWV0aG9kLgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGhMaXN0VmFs
dWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxTVkdMZW5ndGhMaXN0
VmFsdWVzPjo6ZnJvbVN0cmluZyk6IE5ldyBTVkdQcm9wZXJ0eVRyYWl0cyBtZXRob2QuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxTVkdMZW5ndGhMaXN0VmFsdWVzPjo6cGFy
c2UpOiBEaXR0by4KKyAgICAgICAgKiBzdmcvU1ZHTWFya2VyRWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8U1ZHTWFya2VyVW5pdHNUeXBlPjo6aGlnaGVzdEVu
dW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxT
VkdNYXJrZXJVbml0c1R5cGU+Ojp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxTVkdNYXJrZXJVbml0c1R5cGU+Ojpmcm9tU3RyaW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0lETEVudW1MaW1pdHM8U1ZHTWFya2VyT3JpZW50
VHlwZT46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Byb3BlcnR5VHJhaXRzPFNWR01hcmtlck9yaWVudFR5cGU+OjpoaWdoZXN0RW51bVZh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPFNWR01h
cmtlck9yaWVudFR5cGU+Ojpmcm9tU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZH
TWFya2VyVHlwZXMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0
czxTVkdNYXJrZXJVbml0c1R5cGU+OjpoaWdoZXN0RW51bVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Byb3BlcnR5VHJhaXRzPFNWR01hcmtlclVuaXRzVHlwZT46OnRvU3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPFNWR01hcmtlclVuaXRzVHlwZT46OmZy
b21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8U1ZHTWFya2Vy
T3JpZW50VHlwZT46OmhpZ2hlc3RFbnVtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJv
cGVydHlUcmFpdHM8U1ZHTWFya2VyT3JpZW50VHlwZT46OmZyb21TdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSURMRW51bUxpbWl0czxTVkdNYXJrZXJPcmllbnRUeXBlPjo6aGlnaGVzdEV4
cG9zZWRFbnVtVmFsdWUpOgorICAgICAgICAqIHN2Zy9TVkdNYXRyaXguaDogRGVsZXRlIHVudXNl
ZCBjb25zdHJ1Y3RvciBhbmQgY3JlYXRlIG1ldGhvZC4KKyAgICAgICAgKiBzdmcvU1ZHTnVtYmVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdOdW1iZXI6OlNWR051bWJlcik6IERpdHRvLgorICAg
ICAgICAqIHN2Zy9TVkdOdW1iZXJMaXN0VmFsdWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cm9wZXJ0eVRyYWl0czxTVkdOdW1iZXJMaXN0VmFsdWVzPjo6ZnJvbVN0cmluZyk6IE5ldyBTVkdQ
cm9wZXJ0eVRyYWl0cyBtZXRob2QuCisgICAgICAgICogc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVBvaW50KTogVGhpcyBpcyBtb3ZlZCBmcm9tIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAorICAgICAgICAqIHN2Zy9TVkdQYXJzZXJVdGlsaXRp
ZXMuaDoKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhCeXRlU3RyZWFtOjpTVkdQYXRoQnl0ZVN0cmVhbSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoQnl0ZVN0cmVhbTo6b3BlcmF0b3I9KTogQWRkIGNvcHkgYW5kIG1vdmUgYXNz
aWdubWVudCBvcGVyYXRvcnMuCisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbTo6
Y29weSBjb25zdCk6IFVzZSB0aGUgY29weSBhc3NpZ25tZW50LgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aEJ5dGVTdHJlYW06OmlzRW1wdHkgY29uc3QpOiBVc2UgRGF0YS5pc0VtcHR5KCkuCisg
ICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxTVkdQYXRoQnl0ZVN0cmVhbT46Omlu
aXRpYWxWYWx1ZSk6IE5ldyBTVkdQcm9wZXJ0eVRyYWl0cyBtZXRob2QuCisgICAgICAgIChXZWJD
b3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxTVkdQYXRoQnl0ZVN0cmVhbT46OmZyb21TdHJpbmcpOiBE
aXR0by4KKyAgICAgICAgKiBzdmcvU1ZHUGF0aFV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjphZGRUb1NWR1BhdGhCeXRlU3RyZWFtKTogQW5zd2VyIFNpbW9uJ3MgcXVlc3Rpb25zIHdo
aWNoIHdlcmUgYWRkZWQgaW4gcjE5MDg0NC4KKyAgICAgICAgKiBzdmcvU1ZHUG9pbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BvaW50OjpTVkdQb2ludCk6IERlbGV0ZSB1bnVzZWQgY29uc3Ry
dWN0b3IgYW5kIGNyZWF0ZSBtZXRob2QuCisgICAgICAgICogc3ZnL1NWR1BvaW50TGlzdFZhbHVl
cy5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8U1ZHUG9pbnRMaXN0VmFs
dWVzPjo6ZnJvbVN0cmluZyk6IE5ldyBTVkdQcm9wZXJ0eVRyYWl0cyBtZXRob2QuCisgICAgICAg
ICogc3ZnL1NWR1BvbHlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BvbHlFbGVt
ZW50OjpwYXJzZUF0dHJpYnV0ZSk6IFVzZSB0aGUgbW92ZSBhc3NpZ25tZW50IG9wZXJhdG9yLgor
ICAgICAgICAqIHN2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKTogRGVsZXRl
IHVudXNlZCBjb25zdHJ1Y3RvciBhbmQgY3JlYXRlIG1ldGhvZC4KKyAgICAgICAgKiBzdmcvU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKTogQWRkIG5l
dyBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBzdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWU+Ojpmcm9tU3RyaW5nKTogTmV3IFNWR1Byb3BlcnR5VHJhaXRzIG1ldGhvZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZT46OnRvU3RyaW5nKTogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR1JlY3QuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1JlY3Q6OlNWR1JlY3QpOiBEZWxldGUgdW51c2VkIGNvbnN0cnVj
dG9yIGFuZCBjcmVhdGUgbWV0aG9kLgorICAgICAgICAqIHN2Zy9TVkdSZWN0VHJhaXRzLmg6IFJl
bW92ZWQuCisgICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybS5oOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVHJhbnNmb3JtOjpTVkdUcmFuc2Zvcm0pOiBEZWxldGUgdW51c2VkIGNvbnN0cnVjdG9yIGFu
ZCBjcmVhdGUgbWV0aG9kLgorICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1MaXN0VmFsdWVzLmg6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxTVkdUcmFuc2Zvcm1MaXN0VmFs
dWVzPjo6ZnJvbVN0cmluZyk6IE5ldyBTVkdQcm9wZXJ0eVRyYWl0cyBtZXRob2QuCisgICAgICAg
ICogc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlUZWFyT2ZmLmg6IERlbGV0ZSB1bnVzZWQgY3Jl
YXRlIG1ldGhvZC4KKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eVRyYWl0cy5o
OiBOZXcgU1ZHUHJvcGVydHlUcmFpdHMgbWV0aG9kcy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1By
b3BlcnR5VHJhaXRzPGJvb2w+Ojpmcm9tU3RyaW5nKTogCisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cm9wZXJ0eVRyYWl0czxDb2xvcj46OmluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQcm9wZXJ0eVRyYWl0czxDb2xvcj46OmZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUHJvcGVydHlUcmFpdHM8Q29sb3I+OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cm9wZXJ0eVRyYWl0czxDb2xvcj46OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1By
b3BlcnR5VHJhaXRzPGludD46OmZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJv
cGVydHlUcmFpdHM8ZmxvYXQ+Ojpmcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1By
b3BlcnR5VHJhaXRzPGZsb2F0Pjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVy
dHlUcmFpdHM8RmxvYXRQb2ludD46OmluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQcm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50Pjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50Pjo6cGFyc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8RmxvYXRQb2ludD46OnRvU3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZsb2F0UmVjdD46OmluaXRpYWxWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFJlY3Q+Ojpmcm9tU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZsb2F0UmVjdD46OnBhcnNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZsb2F0UmVjdD46OnRvU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPFN0cmluZz46OmZyb21T
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8U3RyaW5nPjo6cGFy
c2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8U3RyaW5nPjo6dG9TdHJp
bmcpOgorCiAyMDE4LTAyLTE2ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgW1JlbmRlclRyZWVCdWlsZGVyXSBNb3ZlIFJlbmRlckJveE1vZGVsT2JqZWN0Ojptb3Zl
Q2hpbGQqKCkgdG8gUmVuZGVyVHJlZUJ1aWxkZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyODM5MCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMjE2NCw3ICsyMTY0LDYgQEAKIAkJN0NFMTkxNzkxRjJBQkU3MTAwMjcyRjc4
IC8qIEpTRmV0Y2hSZXF1ZXN0TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0NFMTkxNkMxRjJBQjcwQTAwMjcyRjc4IC8qIEpTRmV0Y2hSZXF1ZXN0
TW9kZS5oICovOyB9OwogCQk3Q0UxOTE3QjFGMkFCRTcxMDAyNzJGNzggLyogSlNGZXRjaFJlcXVl
c3RSZWRpcmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0NFMTkxNkExRjJBQjcwNjAwMjcyRjc4IC8qIEpTRmV0Y2hSZXF1ZXN0UmVkaXJlY3QuaCAq
LzsgfTsKIAkJN0NFNThENEExREQ2NEE1QjAwMTI4NTUyIC8qIFNWR1BvaW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U1OEQ0OTFERDY0QTVCMDAx
Mjg1NTIgLyogU1ZHUG9pbnQuaCAqLzsgfTsKLQkJN0NFNThENEUxREQ2OTRGRTAwMTI4NTUyIC8q
IFNWR1JlY3RUcmFpdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDRTU4RDREMURENjk0RkUwMDEyODU1MiAvKiBTVkdSZWN0VHJhaXRzLmggKi87IH07
CiAJCTdDRTU4RDUwMURENjlBMUUwMDEyODU1MiAvKiBTVkdOdW1iZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTU4RDRGMURENjlBMUUwMDEyODU1
MiAvKiBTVkdOdW1iZXIuaCAqLzsgfTsKIAkJN0NFNThENTgxREQ3RDk2RDAwMTI4NTUyIC8qIFNW
R1RyYW5zZm9ybVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3Q0U1OEQ1NjFERDdEOTZEMDAxMjg1NTIgLyogU1ZHVHJhbnNmb3JtVmFsdWUuaCAq
LzsgfTsKIAkJN0NFNThENUMxREQ3RUM5QzAwMTI4NTUyIC8qIFNWR01hdHJpeFZhbHVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U1OEQ1QjFERDdF
QzlDMDAxMjg1NTIgLyogU1ZHTWF0cml4VmFsdWUuaCAqLzsgfTsKQEAgLTMyODEsNyArMzI4MCw3
IEBACiAJCUIyMjI3QTRCMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdNZXRhZGF0YUVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMjI3OEI1MEQw
MEJGMjAwMDcxQjc4MiAvKiBTVkdNZXRhZGF0YUVsZW1lbnQuaCAqLzsgfTsKIAkJQjIyMjdBNEUw
RDAwQkYyMjAwNzFCNzgyIC8qIFNWR01QYXRoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMjc4QjgwRDAwQkYyMDAwNzFCNzgyIC8qIFNW
R01QYXRoRWxlbWVudC5oICovOyB9OwogCQlCMjIyN0E1MTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
TnVtYmVyTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjIyMjc4QkIwRDAwQkYyMDAwNzFCNzgyIC8qIFNWR051bWJlckxpc3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCMjIyN0E1NzBEMDBCRjIy
MDA3MUI3ODIgLyogU1ZHUGFyc2VyVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjIyNzhDMTBEMDBCRjIwMDA3MUI3ODIgLyogU1ZHUGFy
c2VyVXRpbGl0aWVzLmggKi87IH07CisJCUIyMjI3QTU3MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQ
YXJzZXJVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyMjI3OEMxMEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdQYXJzZXJVdGlsaXRpZXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMjIyN0E1
OTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUGF0aEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMjI3OEMzMEQwMEJGMjAwMDcxQjc4MiAvKiBT
VkdQYXRoRWxlbWVudC5oICovOyB9OwogCQlCMjIyN0E1QjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
UGF0aFNlZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjIyMjc4QzUwRDAwQkYyMDAwNzFCNzgyIC8qIFNWR1BhdGhTZWcuaCAqLzsgfTsKIAkJQjIyMjdB
NUUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhTZWdBcmMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMjI3OEM4MEQwMEJGMjAwMDcxQjc4MiAvKiBT
VkdQYXRoU2VnQXJjLmggKi87IH07CkBAIC04MTcyLDYgKzgxNzEsNyBAQAogCQk1M0VEM0ZERDE2
N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTBBMEJDNzA4NUY2MDM5MDA3MzUzRDYgLyog
UXVhbGlmaWVkTmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBRdWFsaWZpZWROYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTU1MEEwQkM4MDg1RjYwMzkwMDcz
NTNENiAvKiBRdWFsaWZpZWROYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCTU1MTM3QjJDMjAzNzlFNTUwMDAx
MDA0QiAvKiBTVkdNYXJrZXJUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTVkdNYXJrZXJUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTQ2NzU3
NzFGRDFGQzFBMDAzQjEwQjAgLyogSW1hZ2VTb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW1hZ2VTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTQ2NzU3ODFG
RDFGQzFBMDAzQjEwQjAgLyogSW1hZ2VTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VTb3Vy
Y2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTU1MENCNDExRTk1NUUzQzAwMTEx
QUEwIC8qIEltYWdlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1h
Z2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTQ2Niw3ICs5NDY2LDYg
QEAKIAkJN0NFMTkxNkUxRjJBQjcwRDAwMjcyRjdCIC8qIEpTQ2FjaGVRdWVyeU9wdGlvbnMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYWNoZVF1ZXJ5T3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDRTE5MTZGMUYyQUI3MEYwMDI3MkY3OCAvKiBKU0ZldGNoUmVx
dWVzdFJlZGlyZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmV0Y2hSZXF1ZXN0UmVkaXJl
Y3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0U1OEQ0OTFERDY0QTVCMDAx
Mjg1NTIgLyogU1ZHUG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
UG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0NFNThENEQxREQ2OTRGRTAw
MTI4NTUyIC8qIFNWR1JlY3RUcmFpdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHUmVjdFRyYWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0U1OEQ0
RjFERDY5QTFFMDAxMjg1NTIgLyogU1ZHTnVtYmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNWR051bWJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0U1
OEQ1MTFERDdCMDkzMDAxMjg1NTIgLyogU1ZHTGVuZ3RoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR0xlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
Q0U1OEQ1MjFERDdCMDkzMDAxMjg1NTIgLyogU1ZHTGVuZ3RoVmFsdWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHTGVuZ3RoVmFsdWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjI2MzcsNiArMjI2MzYsNyBAQAogCQkJCUIyMjI3OEFEMEQw
MEJGMjAwMDcxQjc4MiAvKiBTVkdNYXJrZXJFbGVtZW50LmNwcCAqLywKIAkJCQlCMjIyNzhBRTBE
MDBCRjIwMDA3MUI3ODIgLyogU1ZHTWFya2VyRWxlbWVudC5oICovLAogCQkJCUIyMjI3OEFGMEQw
MEJGMjAwMDcxQjc4MiAvKiBTVkdNYXJrZXJFbGVtZW50LmlkbCAqLywKKwkJCQk1NTEzN0IyQzIw
Mzc5RTU1MDAwMTAwNEIgLyogU1ZHTWFya2VyVHlwZXMuaCAqLywKIAkJCQlCMjIyNzhCMDBEMDBC
RjIwMDA3MUI3ODIgLyogU1ZHTWFza0VsZW1lbnQuY3BwICovLAogCQkJCUIyMjI3OEIxMEQwMEJG
MjAwMDcxQjc4MiAvKiBTVkdNYXNrRWxlbWVudC5oICovLAogCQkJCUIyMjI3OEIyMEQwMEJGMjAw
MDcxQjc4MiAvKiBTVkdNYXNrRWxlbWVudC5pZGwgKi8sCkBAIC0yMjc3MCw3ICsyMjc3MCw2IEBA
CiAJCQkJQjIyMjc5MDcwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1JlY3RFbGVtZW50LmNwcCAqLywK
IAkJCQlCMjIyNzkwODBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHUmVjdEVsZW1lbnQuaCAqLywKIAkJ
CQlCMjIyNzkwOTBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHUmVjdEVsZW1lbnQuaWRsICovLAotCQkJ
CTdDRTU4RDREMURENjk0RkUwMDEyODU1MiAvKiBTVkdSZWN0VHJhaXRzLmggKi8sCiAJCQkJQjIy
Mjc5MEEwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1JlbmRlcmluZ0ludGVudC5oICovLAogCQkJCUIy
MjI3OTBCMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdSZW5kZXJpbmdJbnRlbnQuaWRsICovLAogCQkJ
CUIyMjI3OTBDMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdTY3JpcHRFbGVtZW50LmNwcCAqLywKQEAg
LTI5ODc2LDcgKzI5ODc1LDYgQEAKIAkJCQlCMjIyN0E5QTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
UmFkaWFsR3JhZGllbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEVERTE5RjEyQTUw
QjhFMDBCOTU3OTcgLyogU1ZHUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBOUUwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR1JlY3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk3Q0U1
OEQ0RTFERDY5NEZFMDAxMjg1NTIgLyogU1ZHUmVjdFRyYWl0cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTk3QjE4MEMxNTA2MzUzMjAwRTRBREE4IC8qIFNWR1JlbmRlcmluZ0NvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyMjI3QUEwMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdSZW5kZXJpbmdJ
bnRlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMjI3NDc5MEU4MzY2RTIwMEU3Rjk3NSAvKiBT
VkdSZW5kZXJTdHlsZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5nbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5nbGUuaAko
cmV2aXNpb24gMjI4MzkwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDExICs0Miw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgU1ZHQW5nbGUoaW5pdGlhbFZhbHVlKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFJl
ZjxTVkdBbmdsZT4gY3JlYXRlKGNvbnN0IFNWR0FuZ2xlVmFsdWUqIGluaXRpYWxWYWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0FuZ2xlKGluaXRpYWxWYWx1ZSkp
OwotICAgIH0KLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBFeGNlcHRpb25PcjxS
ZWY8U1ZHQW5nbGU+PiBjcmVhdGUoRXhjZXB0aW9uT3I8VD4mJiBpbml0aWFsVmFsdWUpCiAgICAg
ewogICAgICAgICBpZiAoaW5pdGlhbFZhbHVlLmhhc0V4Y2VwdGlvbigpKQpAQCAtMTQ1LDExICsx
NDAsNiBAQCBwcml2YXRlOgogICAgICAgICA6IFNWR1Byb3BlcnR5VGVhck9mZjxTVkdBbmdsZVZh
bHVlPihpbml0aWFsVmFsdWUpCiAgICAgewogICAgIH0KLQotICAgIGV4cGxpY2l0IFNWR0FuZ2xl
KGNvbnN0IFNWR0FuZ2xlVmFsdWUqIGluaXRpYWxWYWx1ZSkKLSAgICAgICAgOiBTVkdQcm9wZXJ0
eVRlYXJPZmY8U1ZHQW5nbGVWYWx1ZT4oaW5pdGlhbFZhbHVlKQotICAgIHsKLSAgICB9CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5n
bGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVl
LmgJKHJldmlzaW9uIDIyODM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDggQEAgcHJpdmF0ZToKICAgICBmbG9hdCBt
X3ZhbHVlSW5TcGVjaWZpZWRVbml0cyB7IDAgfTsKIH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IFNW
R1Byb3BlcnR5VHJhaXRzPFNWR0FuZ2xlVmFsdWU+IHsKK3RlbXBsYXRlPD4KK3N0cnVjdCBTVkdQ
cm9wZXJ0eVRyYWl0czxTVkdBbmdsZVZhbHVlPiB7CiAgICAgc3RhdGljIFNWR0FuZ2xlVmFsdWUg
aW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gU1ZHQW5nbGVWYWx1ZSgpOyB9CiAgICAgc3RhdGljIFN0
cmluZyB0b1N0cmluZyhjb25zdCBTVkdBbmdsZVZhbHVlJiB0eXBlKSB7IHJldHVybiB0eXBlLnZh
bHVlQXNTdHJpbmcoKTsgfQogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRl
TW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMjI4MzkwKQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2
LDMxICsxMzYsNiBAQCB2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojp1cGRhdGVBbmltCiAg
ICAgdXBkYXRlQW5pbWF0aW9uTW9kZSgpOwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZVBvaW50KGNv
bnN0IFN0cmluZyYgcywgRmxvYXRQb2ludCYgcG9pbnQpCi17Ci0gICAgaWYgKHMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMg
PSBTdHJpbmdWaWV3KHMpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFy
KiBjdXIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGN1
ciArIHMubGVuZ3RoKCk7Ci0gICAgCi0gICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3Vy
LCBlbmQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgZmxvYXQgeCA9IDA7Ci0g
ICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwgeCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICBmbG9hdCB5ID0gMDsKLSAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCB5
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHBvaW50ID0gRmxvYXRQb2ludCh4
LCB5KTsKLSAgICAKLSAgICAvLyBkaXNhbGxvdyBhbnl0aGluZyBleGNlcHQgc3BhY2VzIGF0IHRo
ZSBlbmQKLSAgICByZXR1cm4gIXNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7Ci19Ci0g
ICAgCiB2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpyZXNldEFuaW1hdGVkVHlwZSgpCiB7
CiAgICAgaWYgKCFoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlZEFuZ2xlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZWRBbmdsZS5jcHAJKHJldmlzaW9uIDIyODM5MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlZEFuZ2xlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTcgKzMy
LDggQEAgU1ZHQW5pbWF0ZWRBbmdsZUFuaW1hdG9yOjpTVkdBbmltYXRlZEFuZwogCiBzdGQ6OnVu
aXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZEFuZ2xlQW5pbWF0b3I6OmNvbnN0
cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXV0byBhbmltYXRl
ZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUFuZ2xlQW5kRW51bWVyYXRpb24oc3RkOjpt
YWtlX3VuaXF1ZTxzdGQ6OnBhaXI8U1ZHQW5nbGVWYWx1ZSwgdW5zaWduZWQ+PigpKTsKLSAgICBh
dXRvJiBhbmltYXRlZFBhaXIgPSBhbmltYXRlZFR5cGUtPmFuZ2xlQW5kRW51bWVyYXRpb24oKTsK
LQotICAgIFNWR0FuZ2xlVmFsdWUgYW5nbGU7Ci0gICAgU1ZHTWFya2VyT3JpZW50VHlwZSBvcmll
bnRUeXBlID0gU1ZHUHJvcGVydHlUcmFpdHM8U1ZHTWFya2VyT3JpZW50VHlwZT46OmZyb21TdHJp
bmcoc3RyaW5nLCBhbmdsZSk7Ci0gICAgaWYgKG9yaWVudFR5cGUgPiAwKQotICAgICAgICBhbmlt
YXRlZFBhaXIuc2Vjb25kID0gb3JpZW50VHlwZTsKLSAgICBpZiAob3JpZW50VHlwZSA9PSBTVkdN
YXJrZXJPcmllbnRBbmdsZSkKLSAgICAgICAgYW5pbWF0ZWRQYWlyLmZpcnN0ID0gYW5nbGU7Ci0K
LSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOworICAgIGF1dG8gdmFsdWVzID0gU1ZHUHJvcGVydHlU
cmFpdHM8c3RkOjpwYWlyPFNWR0FuZ2xlVmFsdWUsIHVuc2lnbmVkPj46OmZyb21TdHJpbmcoc3Ry
aW5nKTsKKyAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVBbmdsZUFuZEVudW1lcmF0
aW9uKHN0ZDo6bWFrZV91bmlxdWU8c3RkOjpwYWlyPFNWR0FuZ2xlVmFsdWUsIHVuc2lnbmVkPj4o
dmFsdWVzKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1h
dGVkQW5nbGVBbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRB
bmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlZEJvb2xlYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlZEJvb2xlYW4uY3BwCShyZXZpc2lvbiAyMjgzOTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRCb29sZWFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMSw5ICsz
Miw4IEBAIFNWR0FuaW1hdGVkQm9vbGVhbkFuaW1hdG9yOjpTVkdBbmltYXRlZEIKIAogc3RkOjp1
bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRCb29sZWFuQW5pbWF0b3I6OmNv
bnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXV0byBhbmlt
YXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUJvb2xlYW4oc3RkOjptYWtlX3VuaXF1
ZTxib29sPigpKTsKLSAgICBhbmltYXRlZFR5cGUtPmJvb2xlYW4oKSA9IChzdHJpbmcgPT0gInRy
dWUiKTsgLy8gd2F0PwotICAgIHJldHVybiBhbmltYXRlZFR5cGU7CisgICAgYXV0byB2YWx1ZSA9
IFNWR1Byb3BlcnR5VHJhaXRzPGJvb2w+Ojpmcm9tU3RyaW5nKHN0cmluZyk7CisgICAgcmV0dXJu
IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlQm9vbGVhbihzdGQ6Om1ha2VfdW5pcXVlPGJvb2w+KHZh
bHVlKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVk
Qm9vbGVhbkFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFu
aW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVkQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlZENvbG9yLmNwcAkocmV2aXNpb24gMjI4MzkwKQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVkQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMzLDcgKzM0LDggQEAg
U1ZHQW5pbWF0ZWRDb2xvckFuaW1hdG9yOjpTVkdBbmltYXRlZENvbAogCiBzdGQ6OnVuaXF1ZV9w
dHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZENvbG9yQW5pbWF0b3I6OmNvbnN0cnVjdEZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJuIFNWR0FuaW1hdGVk
VHlwZTo6Y3JlYXRlQ29sb3Ioc3RkOjptYWtlX3VuaXF1ZTxDb2xvcj4oQ1NTUGFyc2VyOjpwYXJz
ZUNvbG9yKHN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKSkpKTsKKyAgICBhdXRvIHZhbHVlID0gU1ZH
UHJvcGVydHlUcmFpdHM8Q29sb3I+Ojpmcm9tU3RyaW5nKHN0cmluZyk7CisgICAgcmV0dXJuIFNW
R0FuaW1hdGVkVHlwZTo6Y3JlYXRlQ29sb3Ioc3RkOjptYWtlX3VuaXF1ZTxDb2xvcj4odmFsdWUp
KTsKIH0KIAogdm9pZCBTVkdBbmltYXRlZENvbG9yQW5pbWF0b3I6OmFkZEFuaW1hdGVkVHlwZXMo
U1ZHQW5pbWF0ZWRUeXBlKiBmcm9tLCBTVkdBbmltYXRlZFR5cGUqIHRvKQpAQCAtNDQsNyArNDYs
NyBAQCB2b2lkIFNWR0FuaW1hdGVkQ29sb3JBbmltYXRvcjo6YWRkQW5pbWF0CiAgICAgQVNTRVJU
KHRvLT50eXBlKCkgPT0gQW5pbWF0ZWRDb2xvcik7CiAKICAgICAvLyBJZ25vcmVzIGFueSBhbHBo
YSBhbmQgc2V0cyBhbHBoYSBvbiByZXN1bHQgdG8gMTAwJSBvcGFxdWUuCi0gICAgYXV0byYgZnJv
bUNvbG9yID0gZnJvbS0+Y29sb3IoKTsKKyAgICBjb25zdCBhdXRvJiBmcm9tQ29sb3IgPSBmcm9t
LT5jb2xvcigpOwogICAgIGF1dG8mIHRvQ29sb3IgPSB0by0+Y29sb3IoKTsKICAgICB0b0NvbG9y
ID0geyByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHRvQ29sb3IucmVkKCkgKyBmcm9tQ29sb3Iu
cmVkKCkpLAogICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHRvQ29sb3IuZ3JlZW4o
KSArIGZyb21Db2xvci5ncmVlbigpKSwKQEAgLTgyLDcgKzg0LDcgQEAgdm9pZCBTVkdBbmltYXRl
ZENvbG9yQW5pbWF0b3I6OmNhbGN1bGF0ZQogICAgIGlmIChtX2FuaW1hdGlvbkVsZW1lbnQtPnRv
UHJvcGVydHlWYWx1ZVR5cGUoKSA9PSBDdXJyZW50Q29sb3JWYWx1ZSkKICAgICAgICAgdG9Db2xv
ciA9IGN1cnJlbnRDb2xvcigqbV9jb250ZXh0RWxlbWVudCk7CiAKLSAgICBhdXRvJiB0b0F0RW5k
T2ZEdXJhdGlvbkNvbG9yID0gdG9BdEVuZE9mRHVyYXRpb24tPmNvbG9yKCk7CisgICAgY29uc3Qg
YXV0byYgdG9BdEVuZE9mRHVyYXRpb25Db2xvciA9IHRvQXRFbmRPZkR1cmF0aW9uLT5jb2xvcigp
OwogICAgIGF1dG8mIGFuaW1hdGVkQ29sb3IgPSBhbmltYXRlZC0+Y29sb3IoKTsKIAogICAgIC8v
IEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gdGhpcyB3aWxsIG5lZWQgdG8gaGFuZGxlIGJsZW5kaW5n
IGJldHdlZW4gY29sb3JzIGluIGRpZmZlcmVudCBjb2xvciBzcGFjZXMsCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkRW51bWVyYXRpb24uY3BwCShyZXZpc2lvbiAyMjgz
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDEyLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMTA5LDkgKzExMCw4IEBAIFNWR0FuaW1hdGVkRW51bWVyYXRpb25BbmltYXRv
cjo6U1ZHQW5pbWEKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVk
RW51bWVyYXRpb25BbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0
cmluZykKIHsKICAgICBBU1NFUlQobV9hbmltYXRpb25FbGVtZW50KTsKLSAgICBhdXRvIGFuaW1h
dGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlRW51bWVyYXRpb24oc3RkOjptYWtlX3Vu
aXF1ZTx1bnNpZ25lZD4oKSk7Ci0gICAgYW5pbWF0ZWRUeXBlLT5lbnVtZXJhdGlvbigpID0gZW51
bWVyYXRpb25WYWx1ZUZvclRhcmdldEF0dHJpYnV0ZShtX2FuaW1hdGlvbkVsZW1lbnQtPnRhcmdl
dEVsZW1lbnQoKSwgbV9hbmltYXRpb25FbGVtZW50LT5hdHRyaWJ1dGVOYW1lKCksIHN0cmluZyk7
Ci0gICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKKyAgICBhdXRvIHZhbHVlID0gZW51bWVyYXRpb25W
YWx1ZUZvclRhcmdldEF0dHJpYnV0ZShtX2FuaW1hdGlvbkVsZW1lbnQtPnRhcmdldEVsZW1lbnQo
KSwgbV9hbmltYXRpb25FbGVtZW50LT5hdHRyaWJ1dGVOYW1lKCksIHN0cmluZyk7CisgICAgcmV0
dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlRW51bWVyYXRpb24oc3RkOjptYWtlX3VuaXF1ZTx1
bnNpZ25lZD4odmFsdWUpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4g
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24oY29u
c3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkSW50ZWdlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkSW50ZWdlci5jcHAJKHJldmlzaW9uIDIyODM5
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTMzLDkgKzM0LDggQEAgU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I6OlNWR0FuaW1h
dGVkSQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZEludGVn
ZXJBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsK
LSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlSW50ZWdlcihz
dGQ6Om1ha2VfdW5pcXVlPGludD4oKSk7Ci0gICAgYW5pbWF0ZWRUeXBlLT5pbnRlZ2VyKCkgPSBz
dHJpbmcudG9JbnRTdHJpY3QoKTsKLSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOworICAgIGF1dG8g
dmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxpbnQ+Ojpmcm9tU3RyaW5nKHN0cmluZyk7CisgICAg
cmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlSW50ZWdlcihzdGQ6Om1ha2VfdW5pcXVlPGlu
dD4odmFsdWUpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5p
bWF0ZWRJbnRlZ2VyQW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVt
ZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2Vy
LmNwcAkocmV2aXNpb24gMjI4MzkwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVk
SW50ZWdlck9wdGlvbmFsSW50ZWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE4ICszMyw4
IEBAIFNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1hdG8KIAogc3RkOjp1bmlx
dWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2Vy
QW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0g
ICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUludGVnZXJPcHRp
b25hbEludGVnZXIoc3RkOjptYWtlX3VuaXF1ZTxzdGQ6OnBhaXI8aW50LCBpbnQ+PigpKTsKLSAg
ICBzdGQ6OnBhaXI8aW50LCBpbnQ+JiBhbmltYXRlZEludGVnZXIgPSBhbmltYXRlZFR5cGUtPmlu
dGVnZXJPcHRpb25hbEludGVnZXIoKTsKLSAgICBmbG9hdCBmaXJzdE51bWJlciA9IDA7Ci0gICAg
ZmxvYXQgc2Vjb25kTnVtYmVyID0gMDsKLSAgICBpZiAoIXBhcnNlTnVtYmVyT3B0aW9uYWxOdW1i
ZXIoc3RyaW5nLCBmaXJzdE51bWJlciwgc2Vjb25kTnVtYmVyKSkgewotICAgICAgICBhbmltYXRl
ZEludGVnZXIuZmlyc3QgPSAwOwotICAgICAgICBhbmltYXRlZEludGVnZXIuc2Vjb25kID0gMDsK
LSAgICB9IGVsc2UgewotICAgICAgICBhbmltYXRlZEludGVnZXIuZmlyc3QgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHJvdW5kZihmaXJzdE51bWJlcikpOwotICAgICAgICBhbmltYXRlZEludGVnZXIuc2Vj
b25kID0gc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYoc2Vjb25kTnVtYmVyKSk7Ci0gICAgfQotICAg
IHJldHVybiBhbmltYXRlZFR5cGU7CisgICAgYXV0byB2YWx1ZXMgPSBTVkdQcm9wZXJ0eVRyYWl0
czxzdGQ6OnBhaXI8aW50LCBpbnQ+Pjo6ZnJvbVN0cmluZyhzdHJpbmcpOworICAgIHJldHVybiBT
VkdBbmltYXRlZFR5cGU6OmNyZWF0ZUludGVnZXJPcHRpb25hbEludGVnZXIoc3RkOjptYWtlX3Vu
aXF1ZTxzdGQ6OnBhaXI8aW50LCBpbnQ+Pih2YWx1ZXMpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRy
PFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5pbWF0
b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0
eUxpc3QmIGFuaW1hdGVkVHlwZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZWRMZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRl
ZExlbmd0aC5jcHAJKHJldmlzaW9uIDIyODM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlZExlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVkTGVuZ3RoTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVkTGVuZ3RoTGlzdC5jcHAJKHJldmlzaW9uIDIyODM5MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlZExlbmd0aExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw5ICszMyw4IEBAIFNWR0FuaW1hdGVkTGVuZ3RoTGlzdEFuaW1hdG9yOjpTVkdBbmltYXQKIAog
c3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0QW5p
bWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAg
YXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUxlbmd0aExpc3Qoc3Rk
OjptYWtlX3VuaXF1ZTxTVkdMZW5ndGhMaXN0VmFsdWVzPigpKTsKLSAgICBhbmltYXRlZFR5cGUt
Pmxlbmd0aExpc3QoKS5wYXJzZShzdHJpbmcsIG1fbGVuZ3RoTW9kZSk7Ci0gICAgcmV0dXJuIGFu
aW1hdGVkVHlwZTsKKyAgICBhdXRvIHZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8U1ZHTGVuZ3Ro
TGlzdFZhbHVlcz46OmZyb21TdHJpbmcoc3RyaW5nLCBtX2xlbmd0aE1vZGUpOworICAgIHJldHVy
biBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUxlbmd0aExpc3Qoc3RkOjptYWtlX3VuaXF1ZTxTVkdM
ZW5ndGhMaXN0VmFsdWVzPihXVEZNb3ZlKHZhbHVlKSkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8
U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZExlbmd0aExpc3RBbmltYXRvcjo6c3RhcnRBbmlt
VmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0
ZWRUeXBlcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTnVtYmVyLmNwcAko
cmV2aXNpb24gMjI4MzkwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTnVtYmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0zMiwxMSArMzMsOCBAQCBTVkdBbmltYXRlZE51bWJlckFuaW1h
dG9yOjpTVkdBbmltYXRlZE51CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNW
R0FuaW1hdGVkTnVtYmVyQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5n
JiBzdHJpbmcpCiB7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNy
ZWF0ZU51bWJlcihzdGQ6Om1ha2VfdW5pcXVlPGZsb2F0PigpKTsKLSAgICBmbG9hdCYgYW5pbWF0
ZWROdW1iZXIgPSBhbmltYXRlZFR5cGUtPm51bWJlcigpOwotICAgIGlmICghcGFyc2VOdW1iZXJG
cm9tU3RyaW5nKHN0cmluZywgYW5pbWF0ZWROdW1iZXIpKQotICAgICAgICBhbmltYXRlZE51bWJl
ciA9IDA7Ci0gICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKKyAgICBhdXRvIHZhbHVlID0gU1ZHUHJv
cGVydHlUcmFpdHM8ZmxvYXQ+Ojpmcm9tU3RyaW5nKHN0cmluZyk7CisgICAgcmV0dXJuIFNWR0Fu
aW1hdGVkVHlwZTo6Y3JlYXRlTnVtYmVyKHN0ZDo6bWFrZV91bmlxdWU8ZmxvYXQ+KHZhbHVlKSk7
CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkTnVtYmVy
QW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQ
cm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCkBAIC03NCw5ICs3Miw3IEBAIHZvaWQgU1ZHQW5p
bWF0ZWROdW1iZXJBbmltYXRvcjo6YWRkQW5pbWEKIAogc3RhdGljIGZsb2F0IHBhcnNlTnVtYmVy
RnJvbVN0cmluZyhTVkdBbmltYXRpb25FbGVtZW50KiwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7
Ci0gICAgZmxvYXQgbnVtYmVyID0gMDsKLSAgICBwYXJzZU51bWJlckZyb21TdHJpbmcoc3RyaW5n
LCBudW1iZXIpOwotICAgIHJldHVybiBudW1iZXI7CisgICAgcmV0dXJuIFNWR1Byb3BlcnR5VHJh
aXRzPGZsb2F0Pjo6ZnJvbVN0cmluZyhzdHJpbmcpOwogfQogCiB2b2lkIFNWR0FuaW1hdGVkTnVt
YmVyQW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwgdW5z
aWduZWQgcmVwZWF0Q291bnQsIFNWR0FuaW1hdGVkVHlwZSogZnJvbSwgU1ZHQW5pbWF0ZWRUeXBl
KiB0bywgU1ZHQW5pbWF0ZWRUeXBlKiB0b0F0RW5kT2ZEdXJhdGlvbiwgU1ZHQW5pbWF0ZWRUeXBl
KiBhbmltYXRlZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlckxp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZE51bWJl
ckxpc3QuY3BwCShyZXZpc2lvbiAyMjgzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZWROdW1iZXJMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMiw5ICszMyw4IEBAIFNWR0FuaW1h
dGVkTnVtYmVyTGlzdEFuaW1hdG9yOjpTVkdBbmltYXQKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0Fu
aW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWROdW1iZXJMaXN0QW5pbWF0b3I6OmNvbnN0cnVjdEZyb21T
dHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBT
VkdBbmltYXRlZFR5cGU6OmNyZWF0ZU51bWJlckxpc3Qoc3RkOjptYWtlX3VuaXF1ZTxTVkdOdW1i
ZXJMaXN0VmFsdWVzPigpKTsKLSAgICBhbmltYXRlZFR5cGUtPm51bWJlckxpc3QoKS5wYXJzZShz
dHJpbmcpOwotICAgIHJldHVybiBhbmltYXRlZFR5cGU7CisgICAgYXV0byB2YWx1ZXMgPSBTVkdQ
cm9wZXJ0eVRyYWl0czxTVkdOdW1iZXJMaXN0VmFsdWVzPjo6ZnJvbVN0cmluZyhzdHJpbmcpOwor
ICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZU51bWJlckxpc3Qoc3RkOjptYWtlX3Vu
aXF1ZTxTVkdOdW1iZXJMaXN0VmFsdWVzPihXVEZNb3ZlKHZhbHVlcykpKTsKIH0KIAogc3RkOjp1
bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWROdW1iZXJMaXN0QW5pbWF0b3I6
OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxp
c3QmIGFuaW1hdGVkVHlwZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRO
dW1iZXJPcHRpb25hbE51bWJlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIuY3BwCShyZXZpc2lvbiAyMjgzOTApCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDEzICszMyw4IEBAIFNWR0FuaW1hdGVkTnVtYmVyT3B0aW9u
YWxOdW1iZXJBbmltYXRvcjoKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZH
QW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlckFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5n
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5p
bWF0ZWRUeXBlOjpjcmVhdGVOdW1iZXJPcHRpb25hbE51bWJlcihzdGQ6Om1ha2VfdW5pcXVlPHN0
ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PigpKTsKLSAgICBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiYg
YW5pbWF0ZWROdW1iZXIgPSBhbmltYXRlZFR5cGUtPm51bWJlck9wdGlvbmFsTnVtYmVyKCk7Ci0g
ICAgaWYgKCFwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHN0cmluZywgYW5pbWF0ZWROdW1iZXIu
Zmlyc3QsIGFuaW1hdGVkTnVtYmVyLnNlY29uZCkpIHsKLSAgICAgICAgYW5pbWF0ZWROdW1iZXIu
Zmlyc3QgPSAwOwotICAgICAgICBhbmltYXRlZE51bWJlci5zZWNvbmQgPSAwOwotICAgIH0KLSAg
ICByZXR1cm4gYW5pbWF0ZWRUeXBlOworICAgIGF1dG8gdmFsdWVzID0gU1ZHUHJvcGVydHlUcmFp
dHM8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+Ojpmcm9tU3RyaW5nKHN0cmluZyk7CisgICAgcmV0
dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlTnVtYmVyT3B0aW9uYWxOdW1iZXIoc3RkOjptYWtl
X3VuaXF1ZTxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0Pj4odmFsdWVzKSk7CiB9CiAKIHN0ZDo6dW5p
cXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXJB
bmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFBy
b3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlZFBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlZFBhdGguY3BwCShyZXZpc2lvbiAyMjgzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZWRQYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5j
bHVkZSAiU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQYXRo
U2VnTGlzdFByb3BlcnR5VGVhck9mZi5oIgotI2luY2x1ZGUgIlNWR1BhdGhVdGlsaXRpZXMuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zMyw5ICszMiw4IEBAIFNWR0FuaW1hdGVkUGF0
aEFuaW1hdG9yOjpTVkdBbmltYXRlZFBhdGgKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVk
VHlwZT4gU1ZHQW5pbWF0ZWRQYXRoQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXV0byBieXRlU3RyZWFtID0gc3RkOjptYWtlX3VuaXF1
ZTxTVkdQYXRoQnl0ZVN0cmVhbT4oKTsKLSAgICBidWlsZFNWR1BhdGhCeXRlU3RyZWFtRnJvbVN0
cmluZyhzdHJpbmcsICpieXRlU3RyZWFtLCBVbmFsdGVyZWRQYXJzaW5nKTsKLSAgICByZXR1cm4g
U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVQYXRoKFdURk1vdmUoYnl0ZVN0cmVhbSkpOworICAgIGF1
dG8gdmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxTVkdQYXRoQnl0ZVN0cmVhbT46OmZyb21TdHJp
bmcoc3RyaW5nKTsKKyAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVQYXRoKHN0ZDo6
bWFrZV91bmlxdWU8U1ZHUGF0aEJ5dGVTdHJlYW0+KFdURk1vdmUodmFsdWUpKSk7CiB9CiAKIHN0
ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkUGF0aEFuaW1hdG9yOjpz
dGFydEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0
JiBhbmltYXRlZFR5cGVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUG9p
bnRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQ
b2ludExpc3QuY3BwCShyZXZpc2lvbiAyMjgzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZWRQb2ludExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw4IEBAIFNW
R0FuaW1hdGVkUG9pbnRMaXN0QW5pbWF0b3I6OlNWR0FuaW1hdGUKIAogc3RkOjp1bmlxdWVfcHRy
PFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRQb2ludExpc3RBbmltYXRvcjo6Y29uc3RydWN0
RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBhdXRvIGFuaW1hdGVkVHlw
ZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUG9pbnRMaXN0KHN0ZDo6bWFrZV91bmlxdWU8U1ZH
UG9pbnRMaXN0VmFsdWVzPigpKTsKLSAgICBwb2ludHNMaXN0RnJvbVNWR0RhdGEoYW5pbWF0ZWRU
eXBlLT5wb2ludExpc3QoKSwgc3RyaW5nKTsKLSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOworICAg
IGF1dG8gdmFsdWVzID0gU1ZHUHJvcGVydHlUcmFpdHM8U1ZHUG9pbnRMaXN0VmFsdWVzPjo6ZnJv
bVN0cmluZyhzdHJpbmcpOworICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVBvaW50
TGlzdChzdGQ6Om1ha2VfdW5pcXVlPFNWR1BvaW50TGlzdFZhbHVlcz4oV1RGTW92ZSh2YWx1ZXMp
KSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkUG9p
bnRMaXN0QW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5p
bWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAkocmV2aXNp
b24gMjI4MzkwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUHJlc2VydmVBc3Bl
Y3RSYXRpby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDggQEAgU1ZHQW5pbWF0ZWRQ
cmVzZXJ2ZUFzcGVjdFJhdGlvQW5pbWF0b3I6OgogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0
ZWRUeXBlPiBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW9BbmltYXRvcjo6Y29uc3RydWN0
RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBhdXRvIGFuaW1hdGVkVHlw
ZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUHJlc2VydmVBc3BlY3RSYXRpbyhzdGQ6Om1ha2Vf
dW5pcXVlPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4oKSk7Ci0gICAgYW5pbWF0ZWRUeXBl
LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCkucGFyc2Uoc3RyaW5nKTsKLSAgICByZXR1cm4gYW5pbWF0
ZWRUeXBlOworICAgIGF1dG8gdmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWU+Ojpmcm9tU3RyaW5nKHN0cmluZyk7CisgICAgcmV0dXJuIFNWR0FuaW1h
dGVkVHlwZTo6Y3JlYXRlUHJlc2VydmVBc3BlY3RSYXRpbyhzdGQ6Om1ha2VfdW5pcXVlPFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4odmFsdWUpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFNW
R0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvQW5pbWF0b3I6OnN0
YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3Qm
IGFuaW1hdGVkVHlwZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRSZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRSZWN0LmNw
cAkocmV2aXNpb24gMjI4MzkwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUmVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDggQEAgU1ZHQW5pbWF0ZWRSZWN0QW5p
bWF0b3I6OlNWR0FuaW1hdGVkUmVjdAogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBl
PiBTVkdBbmltYXRlZFJlY3RBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyhjb25zdCBTdHJp
bmcmIHN0cmluZykKIHsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6
Y3JlYXRlUmVjdChzdGQ6Om1ha2VfdW5pcXVlPEZsb2F0UmVjdD4oKSk7Ci0gICAgcGFyc2VSZWN0
KHN0cmluZywgYW5pbWF0ZWRUeXBlLT5yZWN0KCkpOwotICAgIHJldHVybiBhbmltYXRlZFR5cGU7
CisgICAgYXV0byB2YWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPEZsb2F0UmVjdD46OmZyb21TdHJp
bmcoc3RyaW5nKTsKKyAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVSZWN0KHN0ZDo6
bWFrZV91bmlxdWU8RmxvYXRSZWN0Pih2YWx1ZSkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZH
QW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFJlY3RBbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0
aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFN0cmluZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkU3RyaW5nLmNwcAkocmV2aXNpb24g
MjI4MzkwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkU3RyaW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsOSArMzEsOCBAQCBTVkdBbmltYXRlZFN0cmluZ0FuaW1hdG9yOjpT
VkdBbmltYXRlZFN0CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1h
dGVkU3RyaW5nQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJp
bmcpCiB7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVN0
cmluZyhzdGQ6Om1ha2VfdW5pcXVlPFN0cmluZz4oKSk7Ci0gICAgYW5pbWF0ZWRUeXBlLT5zdHJp
bmcoKSA9IHN0cmluZzsKLSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOworICAgIGF1dG8gdmFsdWUg
PSBTVkdQcm9wZXJ0eVRyYWl0czxTdHJpbmc+Ojpmcm9tU3RyaW5nKHN0cmluZyk7CisgICAgcmV0
dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlU3RyaW5nKHN0ZDo6bWFrZV91bmlxdWU8U3RyaW5n
Pih2YWx1ZSkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmlt
YXRlZFN0cmluZ0FuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVu
dEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5jcHAJKHJldmlzaW9uIDIyODM5
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MSwxMCArNDEsOSBAQCBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RB
bmltYXRvcjo6U1ZHQW5pCiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0Fu
aW1hdGVkVHJhbnNmb3JtTGlzdEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0
cmluZyYgc3RyaW5nKQogewotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBl
OjpjcmVhdGVUcmFuc2Zvcm1MaXN0KHN0ZDo6bWFrZV91bmlxdWU8U1ZHVHJhbnNmb3JtTGlzdFZh
bHVlcz4oKSk7Ci0gICAgYW5pbWF0ZWRUeXBlLT50cmFuc2Zvcm1MaXN0KCkucGFyc2UobV90cmFu
c2Zvcm1UeXBlU3RyaW5nICsgc3RyaW5nICsgJyknKTsKLSAgICBBU1NFUlQoYW5pbWF0ZWRUeXBl
LT50cmFuc2Zvcm1MaXN0KCkuc2l6ZSgpIDw9IDEpOwotICAgIHJldHVybiBhbmltYXRlZFR5cGU7
CisgICAgYXV0byB2YWx1ZXMgPSBTVkdQcm9wZXJ0eVRyYWl0czxTVkdUcmFuc2Zvcm1MaXN0VmFs
dWVzPjo6ZnJvbVN0cmluZyhtX3RyYW5zZm9ybVR5cGVTdHJpbmcgKyBzdHJpbmcgKyAnKScpOwor
ICAgIEFTU0VSVCh2YWx1ZXMuc2l6ZSgpIDw9IDEpOworICAgIHJldHVybiBTVkdBbmltYXRlZFR5
cGU6OmNyZWF0ZVRyYW5zZm9ybUxpc3Qoc3RkOjptYWtlX3VuaXF1ZTxTVkdUcmFuc2Zvcm1MaXN0
VmFsdWVzPihXVEZNb3ZlKHZhbHVlcykpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1h
dGVkVHlwZT4gU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0QW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFu
aW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlw
ZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aC5oCShyZXZpc2lvbiAyMjgzOTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDExICs1Nyw2
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHTGVuZ3RoKGluaXRp
YWxWYWx1ZSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBSZWY8U1ZHTGVuZ3RoPiBjcmVhdGUoY29u
c3QgU1ZHTGVuZ3RoVmFsdWUqIGluaXRpYWxWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFNWR0xlbmd0aChpbml0aWFsVmFsdWUpKTsKLSAgICB9Ci0KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPFNWR0xlbmd0aD4+IGNyZWF0
ZShFeGNlcHRpb25PcjxUPiYmIGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChpbml0
aWFsVmFsdWUuaGFzRXhjZXB0aW9uKCkpCkBAIC0xNjIsMTEgKzE1Nyw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIDogU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR0xlbmd0aFZhbHVlPihpbml0aWFsVmFsdWUp
CiAgICAgewogICAgIH0KLQotICAgIGV4cGxpY2l0IFNWR0xlbmd0aChjb25zdCBTVkdMZW5ndGhW
YWx1ZSogaW5pdGlhbFZhbHVlKQotICAgICAgICA6IFNWR1Byb3BlcnR5VGVhck9mZjxTVkdMZW5n
dGhWYWx1ZT4oaW5pdGlhbFZhbHVlKQotICAgIHsKLSAgICB9CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoTGlzdFZhbHVlcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhMaXN0VmFsdWVzLmgJ
KHJldmlzaW9uIDIyODM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhMaXN0VmFs
dWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEzICszNCwyNiBAQCBwdWJsaWM6CiAgICAgU3Ry
aW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKIH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IFNWR1By
b3BlcnR5VHJhaXRzPFNWR0xlbmd0aExpc3RWYWx1ZXM+IHsKK3RlbXBsYXRlPD4KK3N0cnVjdCBT
VkdQcm9wZXJ0eVRyYWl0czxTVkdMZW5ndGhMaXN0VmFsdWVzPiB7CisgICAgc3RhdGljIFNWR0xl
bmd0aExpc3RWYWx1ZXMgaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4geyB9OyB9CisgICAgc3RhdGlj
IFNWR0xlbmd0aExpc3RWYWx1ZXMgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgU1ZH
TGVuZ3RoTW9kZSBsZW5ndGhNb2RlKQorICAgIHsKKyAgICAgICAgU1ZHTGVuZ3RoTGlzdFZhbHVl
cyBsaXN0OworICAgICAgICBsaXN0LnBhcnNlKHN0cmluZywgbGVuZ3RoTW9kZSk7CisgICAgICAg
IHJldHVybiBsaXN0OworICAgIH0KKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxTVkdMZW5ndGhM
aXN0VmFsdWVzPiBwYXJzZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCisgICAgeworICAgICAgICBTVkdMZW5ndGhMaXN0VmFsdWVzIGxpc3Q7Cisg
ICAgICAgIGxpc3QucGFyc2Uoc3RyaW5nLCBTVkdMZW5ndGhWYWx1ZTo6bGVuZ3RoTW9kZUZvckFu
aW1hdGVkTGVuZ3RoQXR0cmlidXRlKGF0dHJOYW1lKSk7CisgICAgICAgIHJldHVybiBsaXN0Owor
ICAgIH0KKyAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IFNWR0xlbmd0aExpc3RWYWx1
ZXMmIHR5cGUpIHsgcmV0dXJuIHR5cGUudmFsdWVBc1N0cmluZygpOyB9CisKICAgICB1c2luZyBM
aXN0SXRlbVR5cGUgPSBTVkdMZW5ndGhWYWx1ZTsKICAgICB1c2luZyBMaXN0SXRlbVRlYXJPZmYg
PSBTVkdMZW5ndGg7CiAgICAgdXNpbmcgTGlzdFByb3BlcnR5VGVhck9mZiA9IFNWR0xlbmd0aExp
c3Q7Ci0KLSAgICBzdGF0aWMgU1ZHTGVuZ3RoTGlzdFZhbHVlcyBpbml0aWFsVmFsdWUoKSB7IHJl
dHVybiAgeyB9OyB9Ci0gICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBTVkdMZW5ndGhM
aXN0VmFsdWVzJiB0eXBlKSB7IHJldHVybiB0eXBlLnZhbHVlQXNTdHJpbmcoKTsgfQogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtl
ckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyRWxl
bWVudC5oCShyZXZpc2lvbiAyMjgzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2Vy
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3NSArMjksMTAgQEAKICNpbmNsdWRlICJT
VkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oIgog
I2luY2x1ZGUgIlNWR0ZpdFRvVmlld0JveC5oIgorI2luY2x1ZGUgIlNWR01hcmtlclR5cGVzLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBTVkdNYXJrZXJVbml0c1R5cGUgewotICAg
IFNWR01hcmtlclVuaXRzVW5rbm93biA9IDAsCi0gICAgU1ZHTWFya2VyVW5pdHNVc2VyU3BhY2VP
blVzZSwKLSAgICBTVkdNYXJrZXJVbml0c1N0cm9rZVdpZHRoCi19OwotCi1lbnVtIFNWR01hcmtl
ck9yaWVudFR5cGUgewotICAgIFNWR01hcmtlck9yaWVudFVua25vd24gPSAwLAotICAgIFNWR01h
cmtlck9yaWVudEF1dG8sCi0gICAgU1ZHTWFya2VyT3JpZW50QW5nbGUsCi0gICAgU1ZHTWFya2Vy
T3JpZW50QXV0b1N0YXJ0UmV2ZXJzZSwKLQotICAgIC8vIEFkZCBuZXcgZWxlbWVudHMgYmVmb3Jl
IGhlcmUuCi0gICAgU1ZHTWFya2VyT3JpZW50TWF4Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3Qg
U1ZHUHJvcGVydHlUcmFpdHM8U1ZHTWFya2VyVW5pdHNUeXBlPiB7Ci0gICAgc3RhdGljIHVuc2ln
bmVkIGhpZ2hlc3RFbnVtVmFsdWUoKSB7IHJldHVybiBTVkdNYXJrZXJVbml0c1N0cm9rZVdpZHRo
OyB9Ci0KLSAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKFNWR01hcmtlclVuaXRzVHlwZSB0eXBl
KQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgU1ZHTWFya2Vy
VW5pdHNVbmtub3duOgotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAg
IGNhc2UgU1ZHTWFya2VyVW5pdHNVc2VyU3BhY2VPblVzZToKLSAgICAgICAgICAgIHJldHVybiBB
U0NJSUxpdGVyYWwoInVzZXJTcGFjZU9uVXNlIik7Ci0gICAgICAgIGNhc2UgU1ZHTWFya2VyVW5p
dHNTdHJva2VXaWR0aDoKLSAgICAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInN0cm9rZVdp
ZHRoIik7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIFNWR01hcmtlclVu
aXRzVHlwZSBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBp
ZiAodmFsdWUgPT0gInVzZXJTcGFjZU9uVXNlIikKLSAgICAgICAgICAgIHJldHVybiBTVkdNYXJr
ZXJVbml0c1VzZXJTcGFjZU9uVXNlOwotICAgICAgICBpZiAodmFsdWUgPT0gInN0cm9rZVdpZHRo
IikKLSAgICAgICAgICAgIHJldHVybiBTVkdNYXJrZXJVbml0c1N0cm9rZVdpZHRoOwotICAgICAg
ICByZXR1cm4gU1ZHTWFya2VyVW5pdHNVbmtub3duOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4K
LWlubGluZSB1bnNpZ25lZCBTVkdJRExFbnVtTGltaXRzPFNWR01hcmtlck9yaWVudFR5cGU+Ojpo
aWdoZXN0RXhwb3NlZEVudW1WYWx1ZSgpIHsgcmV0dXJuIFNWR01hcmtlck9yaWVudEFuZ2xlOyB9
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPFNWR01hcmtlck9yaWVudFR5
cGU+IHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGlnaGVzdEVudW1WYWx1ZSgpIHsgcmV0dXJuIFNW
R01hcmtlck9yaWVudEF1dG9TdGFydFJldmVyc2U7IH0KLQotICAgIC8vIHRvU3RyaW5nIGlzIG5v
dCBuZWVkZWQsIHN5bmNocm9uaXplT3JpZW50VHlwZSgpIGhhbmRsZXMgdGhpcyBvbiBpdHMgb3du
LgotCi0gICAgc3RhdGljIFNWR01hcmtlck9yaWVudFR5cGUgZnJvbVN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlLCBTVkdBbmdsZVZhbHVlJiBhbmdsZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1
ZSA9PSAiYXV0byIpCi0gICAgICAgICAgICByZXR1cm4gU1ZHTWFya2VyT3JpZW50QXV0bzsKLSAg
ICAgICAgaWYgKHZhbHVlID09ICJhdXRvLXN0YXJ0LXJldmVyc2UiKQotICAgICAgICAgICAgcmV0
dXJuIFNWR01hcmtlck9yaWVudEF1dG9TdGFydFJldmVyc2U7Ci0gICAgICAgIGF1dG8gc2V0VmFs
dWVSZXN1bHQgPSBhbmdsZS5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKLSAgICAgICAgaWYgKHNl
dFZhbHVlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIFNWR01hcmtl
ck9yaWVudFVua25vd247Ci0gICAgICAgIHJldHVybiBTVkdNYXJrZXJPcmllbnRBbmdsZTsKLSAg
ICB9Ci19OwotCiBjbGFzcyBTVkdNYXJrZXJFbGVtZW50IGZpbmFsIDogcHVibGljIFNWR0VsZW1l
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNW
R0ZpdFRvVmlld0JveCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyVHlwZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyVHlwZXMuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyVHlwZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNWR0FuZ2xlVmFsdWUu
aCIKKyNpbmNsdWRlICJTVkdQcm9wZXJ0eVRyYWl0cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2VudW0gU1ZHTWFya2VyVW5pdHNUeXBlIHsKKyAgICBTVkdNYXJrZXJVbml0c1Vua25vd24g
PSAwLAorICAgIFNWR01hcmtlclVuaXRzVXNlclNwYWNlT25Vc2UsCisgICAgU1ZHTWFya2VyVW5p
dHNTdHJva2VXaWR0aAorfTsKKworZW51bSBTVkdNYXJrZXJPcmllbnRUeXBlIHsKKyAgICBTVkdN
YXJrZXJPcmllbnRVbmtub3duID0gMCwKKyAgICBTVkdNYXJrZXJPcmllbnRBdXRvLAorICAgIFNW
R01hcmtlck9yaWVudEFuZ2xlLAorICAgIFNWR01hcmtlck9yaWVudEF1dG9TdGFydFJldmVyc2Us
CisgICAgCisgICAgLy8gQWRkIG5ldyBlbGVtZW50cyBiZWZvcmUgaGVyZS4KKyAgICBTVkdNYXJr
ZXJPcmllbnRNYXgKK307CisgICAgCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFp
dHM8U1ZHTWFya2VyVW5pdHNUeXBlPiB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhpZ2hlc3RFbnVt
VmFsdWUoKSB7IHJldHVybiBTVkdNYXJrZXJVbml0c1N0cm9rZVdpZHRoOyB9CisgICAgc3RhdGlj
IFN0cmluZyB0b1N0cmluZyhTVkdNYXJrZXJVbml0c1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFNWR01hcmtlclVuaXRzVW5rbm93bjoKKyAg
ICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICBjYXNlIFNWR01hcmtlclVu
aXRzVXNlclNwYWNlT25Vc2U6CisgICAgICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ1c2Vy
U3BhY2VPblVzZSIpOworICAgICAgICBjYXNlIFNWR01hcmtlclVuaXRzU3Ryb2tlV2lkdGg6Cisg
ICAgICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJzdHJva2VXaWR0aCIpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IGVtcHR5U3RyaW5nKCk7CisgICAgfQorICAgIHN0YXRpYyBTVkdNYXJrZXJVbml0c1R5cGUgZnJv
bVN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlID09
ICJ1c2VyU3BhY2VPblVzZSIpCisgICAgICAgICAgICByZXR1cm4gU1ZHTWFya2VyVW5pdHNVc2Vy
U3BhY2VPblVzZTsKKyAgICAgICAgaWYgKHZhbHVlID09ICJzdHJva2VXaWR0aCIpCisgICAgICAg
ICAgICByZXR1cm4gU1ZHTWFya2VyVW5pdHNTdHJva2VXaWR0aDsKKyAgICAgICAgcmV0dXJuIFNW
R01hcmtlclVuaXRzVW5rbm93bjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgU1ZH
UHJvcGVydHlUcmFpdHM8U1ZHTWFya2VyT3JpZW50VHlwZT4geworICAgIHN0YXRpYyB1bnNpZ25l
ZCBoaWdoZXN0RW51bVZhbHVlKCkgeyByZXR1cm4gU1ZHTWFya2VyT3JpZW50QXV0b1N0YXJ0UmV2
ZXJzZTsgfQorICAgIHN0YXRpYyBTVkdNYXJrZXJPcmllbnRUeXBlIGZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSwgU1ZHQW5nbGVWYWx1ZSYgYW5nbGUpCisgICAgeworICAgICAgICBpZiAo
dmFsdWUgPT0gImF1dG8iKQorICAgICAgICAgICAgcmV0dXJuIFNWR01hcmtlck9yaWVudEF1dG87
CisgICAgICAgIGlmICh2YWx1ZSA9PSAiYXV0by1zdGFydC1yZXZlcnNlIikKKyAgICAgICAgICAg
IHJldHVybiBTVkdNYXJrZXJPcmllbnRBdXRvU3RhcnRSZXZlcnNlOworICAgICAgICBhdXRvIHNl
dFZhbHVlUmVzdWx0ID0gYW5nbGUuc2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7CisgICAgICAgIGlm
IChzZXRWYWx1ZVJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBTVkdN
YXJrZXJPcmllbnRVbmtub3duOworICAgICAgICByZXR1cm4gU1ZHTWFya2VyT3JpZW50QW5nbGU7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PgoraW5saW5lIHVuc2lnbmVkIFNWR0lETEVudW1MaW1p
dHM8U1ZHTWFya2VyT3JpZW50VHlwZT46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKCkgeyByZXR1
cm4gU1ZHTWFya2VyT3JpZW50QW5nbGU7IH0KKwordGVtcGxhdGU8Pgorc3RydWN0IFNWR1Byb3Bl
cnR5VHJhaXRzPHN0ZDo6cGFpcjxTVkdBbmdsZVZhbHVlLCB1bnNpZ25lZD4+IHsKKyAgICBzdGF0
aWMgc3RkOjpwYWlyPFNWR0FuZ2xlVmFsdWUsIHVuc2lnbmVkPiBmcm9tU3RyaW5nKGNvbnN0IFN0
cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgU1ZHQW5nbGVWYWx1ZSBhbmdsZTsKKyAgICAg
ICAgU1ZHTWFya2VyT3JpZW50VHlwZSBvcmllbnRUeXBlID0gU1ZHUHJvcGVydHlUcmFpdHM8U1ZH
TWFya2VyT3JpZW50VHlwZT46OmZyb21TdHJpbmcoc3RyaW5nLCBhbmdsZSk7CisgICAgICAgIGlm
IChvcmllbnRUeXBlICE9IFNWR01hcmtlck9yaWVudEFuZ2xlKQorICAgICAgICAgICAgYW5nbGUg
PSB7IH07CisgICAgICAgIHJldHVybiBzdGQ6OnBhaXI8U1ZHQW5nbGVWYWx1ZSwgdW5zaWduZWQ+
KGFuZ2xlLCBvcmllbnRUeXBlKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWF0cml4LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR01hdHJpeC5oCShyZXZpc2lvbiAyMjgzOTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0Myw2IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHTWF0cml4KGluaXRpYWxW
YWx1ZSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBSZWY8U1ZHTWF0cml4PiBjcmVhdGUoY29uc3Qg
U1ZHTWF0cml4VmFsdWUqIGluaXRpYWxWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFNWR01hdHJpeChpbml0aWFsVmFsdWUpKTsKLSAgICB9Ci0KICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPFNWR01hdHJpeD4+IGNyZWF0ZShF
eGNlcHRpb25PcjxUPiYmIGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChpbml0aWFs
VmFsdWUuaGFzRXhjZXB0aW9uKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR051bWJlci5oCShyZXZpc2lv
biAyMjgzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDExICs0MSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU1ZHTnVtYmVyKGluaXRpYWxWYWx1ZSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBSZWY8U1ZH
TnVtYmVyPiBjcmVhdGUoY29uc3QgZmxvYXQqIGluaXRpYWxWYWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFNWR051bWJlcihpbml0aWFsVmFsdWUpKTsKLSAgICB9Ci0K
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPFNWR051bWJl
cj4+IGNyZWF0ZShFeGNlcHRpb25PcjxUPiYmIGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAgICAg
IGlmIChpbml0aWFsVmFsdWUuaGFzRXhjZXB0aW9uKCkpCkBAIC03OSwxMSArNzQsNiBAQCBwcml2
YXRlOgogICAgICAgICA6IFNWR1Byb3BlcnR5VGVhck9mZjxmbG9hdD4oaW5pdGlhbFZhbHVlKQog
ICAgIHsKICAgICB9Ci0KLSAgICBleHBsaWNpdCBTVkdOdW1iZXIoY29uc3QgZmxvYXQqIGluaXRp
YWxWYWx1ZSkKLSAgICAgICAgOiBTVkdQcm9wZXJ0eVRlYXJPZmY8ZmxvYXQ+KGluaXRpYWxWYWx1
ZSkKLSAgICB7Ci0gICAgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR051bWJlckxpc3RWYWx1ZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlzdFZhbHVlcy5oCShyZXZpc2lvbiAyMjgzOTApCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlzdFZhbHVlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw2ICszNiwxMiBAQCBwdWJsaWM6CiAKIHRlbXBsYXRlPD4gc3RydWN0IFNWR1Byb3Bl
cnR5VHJhaXRzPFNWR051bWJlckxpc3RWYWx1ZXM+IHsKICAgICBzdGF0aWMgU1ZHTnVtYmVyTGlz
dFZhbHVlcyBpbml0aWFsVmFsdWUoKSB7IHJldHVybiB7IH07IH0KKyAgICBzdGF0aWMgU1ZHTnVt
YmVyTGlzdFZhbHVlcyBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAg
ICAgICAgU1ZHTnVtYmVyTGlzdFZhbHVlcyBsaXN0OworICAgICAgICBsaXN0LnBhcnNlKHN0cmlu
Zyk7CisgICAgICAgIHJldHVybiBsaXN0OworICAgIH0KICAgICBzdGF0aWMgU3RyaW5nIHRvU3Ry
aW5nKGNvbnN0IFNWR051bWJlckxpc3RWYWx1ZXMmIGxpc3QpIHsgcmV0dXJuIGxpc3QudmFsdWVB
c1N0cmluZygpOyB9CiAKICAgICB1c2luZyBMaXN0SXRlbVR5cGUgPSBmbG9hdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMjgzOTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBUaGUgS2Fy
Ym9uIERldmVsb3BlcnMKICAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4YW5kZXIgS2VsbGV0dCA8
bHlwYW5vdkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDksIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMTksNiAr
MjE5LDMxIEBAIGJvb2wgcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHIKICAgICBy
ZXR1cm4gY3VyID09IGVuZDsKIH0KIAorYm9vbCBwYXJzZVBvaW50KGNvbnN0IFN0cmluZyYgcywg
RmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgaWYgKHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHMp
LnVwY29udmVydGVkQ2hhcmFjdGVycygpOworICAgIGNvbnN0IFVDaGFyKiBjdXIgPSB1cGNvbnZl
cnRlZENoYXJhY3RlcnM7CisgICAgY29uc3QgVUNoYXIqIGVuZCA9IGN1ciArIHMubGVuZ3RoKCk7
CisKKyAgICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGZsb2F0IHggPSAwOworICAgIGlmICghcGFyc2VOdW1iZXIoY3Vy
LCBlbmQsIHgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmbG9hdCB5ID0gMDsKKyAg
ICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCB5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcG9pbnQgPSBGbG9hdFBvaW50KHgsIHkpOworCisgICAgLy8gRGlzYWxsb3cgYW55dGhp
bmcgZXhjZXB0IHNwYWNlcyBhdCB0aGUgZW5kLgorICAgIHJldHVybiAhc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzKGN1ciwgZW5kKTsKK30KKwogYm9vbCBwYXJzZVJlY3QoY29uc3QgU3RyaW5nJiBzdHJp
bmcsIEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9
IFN0cmluZ1ZpZXcoc3RyaW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmgJKHJldmlzaW9uIDIyODM5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNiArNDIsNyBAQCBib29sIHBhcnNlTnVtYmVyRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmCiBi
b29sIHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoY29uc3QgU3RyaW5nJiBzLCBmbG9hdCYgaCwg
ZmxvYXQmIHYpOwogYm9vbCBwYXJzZUFyY0ZsYWcoY29uc3QgTENoYXIqJiBwdHIsIGNvbnN0IExD
aGFyKiBlbmQsIGJvb2wmIGZsYWcpOwogYm9vbCBwYXJzZUFyY0ZsYWcoY29uc3QgVUNoYXIqJiBw
dHIsIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wmIGZsYWcpOworYm9vbCBwYXJzZVBvaW50KGNvbnN0
IFN0cmluZyYsIEZsb2F0UG9pbnQmKTsKIGJvb2wgcGFyc2VSZWN0KGNvbnN0IFN0cmluZyYsIEZs
b2F0UmVjdCYpOwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oCShyZXZpc2lvbiAyMjgzOTApCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xOSw2
ICsyMCw4IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiU1ZHUGF0aFV0aWxpdGllcy5o
IgorI2luY2x1ZGUgIlNWR1Byb3BlcnR5VHJhaXRzLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NiwzNCArNDksNDMgQEAgcHVibGljOgogICAg
IHR5cGVkZWYgRGF0YTo6Y29uc3RfaXRlcmF0b3IgRGF0YUl0ZXJhdG9yOwogCiAgICAgU1ZHUGF0
aEJ5dGVTdHJlYW0oKSB7IH0KLSAgICBTVkdQYXRoQnl0ZVN0cmVhbShjb25zdCBEYXRhJiBkYXRh
KSA6IG1fZGF0YShkYXRhKSB7IH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU1ZH
UGF0aEJ5dGVTdHJlYW0mIG90aGVyKSBjb25zdAorICAgIFNWR1BhdGhCeXRlU3RyZWFtKGNvbnN0
IFNWR1BhdGhCeXRlU3RyZWFtJiBvdGhlcikKKyAgICAgICAgOiBtX2RhdGEob3RoZXIubV9kYXRh
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGF0YSA9PSBvdGhlci5tX2RhdGE7CiAgICAgfQog
Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNWR1BhdGhCeXRlU3RyZWFtJiBvdGhlcikgY29u
c3QKKyAgICBTVkdQYXRoQnl0ZVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSYmIG90aGVyKQorICAg
ICAgICA6IG1fZGF0YShXVEZNb3ZlKG90aGVyLm1fZGF0YSkpCiAgICAgewotICAgICAgICByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7CiAgICAgfQogCisgICAgU1ZHUGF0aEJ5dGVTdHJlYW0mIG9w
ZXJhdG9yPShjb25zdCBTVkdQYXRoQnl0ZVN0cmVhbSYgb3RoZXIpCisgICAgeworICAgICAgICBt
X2RhdGEgPSBvdGhlci5tX2RhdGE7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAg
ICBTVkdQYXRoQnl0ZVN0cmVhbSYgb3BlcmF0b3I9KFNWR1BhdGhCeXRlU3RyZWFtJiYgb3RoZXIp
CisgICAgeworICAgICAgICBtX2RhdGEgPSBXVEZNb3ZlKG90aGVyLm1fZGF0YSk7CisgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU1ZHUGF0
aEJ5dGVTdHJlYW0mIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2RhdGEgPT0gb3RoZXIubV9kYXRh
OyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNWR1BhdGhCeXRlU3RyZWFtJiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxTVkdQYXRoQnl0ZVN0cmVhbT4gY29weSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3VuaXF1ZTxTVkdQYXRoQnl0ZVN0cmVhbT4obV9kYXRhKTsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8U1ZHUGF0aEJ5dGVTdHJlYW0+KCp0aGlzKTsKICAgICB9CiAK
ICAgICBEYXRhSXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2RhdGEuYmVnaW4oKTsg
fQogICAgIERhdGFJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZW5kKCk7IH0K
IAogICAgIHZvaWQgYXBwZW5kKHVuc2lnbmVkIGNoYXIgYnl0ZSkgeyBtX2RhdGEuYXBwZW5kKGJ5
dGUpOyB9Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgU1ZHUGF0aEJ5dGVTdHJlYW0mIG90aGVyKQot
ICAgIHsKLSAgICAgICAgZm9yIChhdXRvIHN0cmVhbSA6IG90aGVyKQotICAgICAgICAgICAgYXBw
ZW5kKHN0cmVhbSk7Ci0gICAgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNWR1BhdGhCeXRlU3Ry
ZWFtJiBvdGhlcikgeyBtX2RhdGEuYXBwZW5kVmVjdG9yKG90aGVyLm1fZGF0YSk7IH0KICAgICB2
b2lkIGNsZWFyKCkgeyBtX2RhdGEuY2xlYXIoKTsgfQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuICFtX2RhdGEuc2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhLmlzRW1wdHkoKTsgfQogICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGEuc2l6ZSgpOyB9CiAKICAgICAvLyBPbmx5IGRlZmluZWQgdG8gbGV0IFNWR0Fu
aW1hdGVkUGF0aEFuaW1hdG9yIHVzZSB0aGUgc3RhbmRhcmQgbGlzdCBjb2RlIHBhdGhzIC0gdGhp
cyBtZXRob2QgaXMgbmV2ZXIgY2FsbGVkLgpAQCAtODMsNCArOTUsMTUgQEAgcHJpdmF0ZToKICAg
ICBEYXRhIG1fZGF0YTsKIH07CiAKK3RlbXBsYXRlPD4KK3N0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0
czxTVkdQYXRoQnl0ZVN0cmVhbT4geworICAgIHN0YXRpYyBTVkdQYXRoQnl0ZVN0cmVhbSBpbml0
aWFsVmFsdWUoKSB7IHJldHVybiBTVkdQYXRoQnl0ZVN0cmVhbSgpOyB9CisgICAgc3RhdGljIFNW
R1BhdGhCeXRlU3RyZWFtIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAgewor
ICAgICAgICBTVkdQYXRoQnl0ZVN0cmVhbSBieXRlU3RyZWFtOworICAgICAgICBidWlsZFNWR1Bh
dGhCeXRlU3RyZWFtRnJvbVN0cmluZyhzdHJpbmcsIGJ5dGVTdHJlYW0sIFVuYWx0ZXJlZFBhcnNp
bmcpOworICAgICAgICByZXR1cm4gYnl0ZVN0cmVhbTsKKyAgICB9Cit9OworCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFV0aWxpdGllcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhVdGlsaXRpZXMuY3Bw
CShyZXZpc2lvbiAyMjgzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFV0aWxpdGll
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiwxNSArMjA2LDE1IEBAIGJvb2wgYnVpbGRBbmlt
YXRlZFNWR1BhdGhCeXRlU3RyZWFtKGNvbnMKIAogYm9vbCBhZGRUb1NWR1BhdGhCeXRlU3RyZWFt
KFNWR1BhdGhCeXRlU3RyZWFtJiBzdHJlYW1Ub0FwcGVuZFRvLCBjb25zdCBTVkdQYXRoQnl0ZVN0
cmVhbSYgYnlTdHJlYW0sIHVuc2lnbmVkIHJlcGVhdENvdW50KQogewotICAgIC8vIFdoeSByZXR1
cm4gd2hlbiBzdHJlYW1Ub0FwcGVuZFRvIGlzIGVtcHR5PyBEb24ndCB3ZSBzdGlsbCBuZWVkIHRv
IGFwcGVuZD8KKyAgICAvLyBUaGUgYnlTdHJlYW0gd2lsbCBiZSBibGVuZGVkIHdpdGggc3RyZWFt
VG9BcHBlbmRUby4gU28gc3RyZWFtVG9BcHBlbmRUbyBoYXMgdG8gaGF2ZSBlbGVtZW50cy4KICAg
ICBpZiAoc3RyZWFtVG9BcHBlbmRUby5pc0VtcHR5KCkgfHwgYnlTdHJlYW0uaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIC8vIElzIGl0IE9LIHRvIG1ha2UgdGhlIFNWR1Bh
dGhCeXRlU3RyZWFtQnVpbGRlciBmcm9tIGEgc3RyZWFtLCBhbmQgdGhlbiBjbGVhciB0aGF0IHN0
cmVhbT8KKyAgICAvLyBidWlsZGVyIGlzIHRoZSBkZXN0aW5hdGlvbiBvZiBibGVuZGluZyBmcm9t
U291cmNlIGFuZCBieVNvdXJjZS4gVGhlIHN0cmVhbSBvZiBidWlsZGVyCisgICAgLy8gKGkuZS4g
c3RyZWFtVG9BcHBlbmRUbykgaGFzIHRvIGJlIGNsZWFyZWQgYmVmb3JlIGNhbGxpbmcgYWRkQW5p
bWF0ZWRQYXRoLgogICAgIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlciBidWlsZGVyKHN0cmVhbVRv
QXBwZW5kVG8pOwogCi0gICAgU1ZHUGF0aEJ5dGVTdHJlYW0gZnJvbVN0cmVhbUNvcHkgPSBzdHJl
YW1Ub0FwcGVuZFRvOwotICAgIHN0cmVhbVRvQXBwZW5kVG8uY2xlYXIoKTsKKyAgICBTVkdQYXRo
Qnl0ZVN0cmVhbSBmcm9tU3RyZWFtQ29weSA9IFdURk1vdmUoc3RyZWFtVG9BcHBlbmRUbyk7CiAK
ICAgICBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZSBmcm9tU291cmNlKGZyb21TdHJlYW1Db3B5KTsK
ICAgICBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZSBieVNvdXJjZShieVN0cmVhbSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUG9pbnQuaAkocmV2aXNpb24gMjI4MzkwKQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MywxMSArNDQsNiBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR1BvaW50KGluaXRpYWxWYWx1ZSkpOwogICAg
IH0KIAotICAgIHN0YXRpYyBSZWY8U1ZHUG9pbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50KiBp
bml0aWFsVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdQb2lu
dChpbml0aWFsVmFsdWUpKTsKLSAgICB9Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0
aWMgRXhjZXB0aW9uT3I8UmVmPFNWR1BvaW50Pj4gY3JlYXRlKEV4Y2VwdGlvbk9yPFQ+JiYgaW5p
dGlhbFZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKGluaXRpYWxWYWx1ZS5oYXNFeGNlcHRpb24o
KSkKQEAgLTExMywxMSArMTA5LDYgQEAgcHJvdGVjdGVkOgogICAgICAgICA6IFNWR1Byb3BlcnR5
VGVhck9mZjxGbG9hdFBvaW50Pihpbml0aWFsVmFsdWUpCiAgICAgewogICAgIH0KLQotICAgIGV4
cGxpY2l0IFNWR1BvaW50KGNvbnN0IEZsb2F0UG9pbnQqIGluaXRpYWxWYWx1ZSkKLSAgICAgICAg
OiBTVkdQcm9wZXJ0eVRlYXJPZmY8RmxvYXRQb2ludD4oaW5pdGlhbFZhbHVlKQotICAgIHsKLSAg
ICB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUG9pbnRMaXN0VmFsdWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BvaW50TGlzdFZhbHVlcy5oCShyZXZpc2lvbiAyMjgzOTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUG9pbnRMaXN0VmFsdWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDE1
IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0OwogfTsKIAotdGVt
cGxhdGU8PiBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8U1ZHUG9pbnRMaXN0VmFsdWVzPiB7Cit0
ZW1wbGF0ZTw+CitzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8U1ZHUG9pbnRMaXN0VmFsdWVzPiB7
CiAgICAgc3RhdGljIFNWR1BvaW50TGlzdFZhbHVlcyBpbml0aWFsVmFsdWUoKSB7IHJldHVybiB7
IH07IH0KKyAgICBzdGF0aWMgU1ZHUG9pbnRMaXN0VmFsdWVzIGZyb21TdHJpbmcoY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCisgICAgeworICAgICAgICBTVkdQb2ludExpc3RWYWx1ZXMgbGlzdDsKKyAg
ICAgICAgcG9pbnRzTGlzdEZyb21TVkdEYXRhKGxpc3QsIHN0cmluZyk7CisgICAgICAgIHJldHVy
biBsaXN0OworICAgIH0KIAogICAgIHVzaW5nIExpc3RJdGVtVHlwZSA9IEZsb2F0UG9pbnQ7CiAg
ICAgdXNpbmcgTGlzdEl0ZW1UZWFyT2ZmID0gU1ZHUG9pbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQb2x5RWxlbWVudC5jcHAJKHJldmlzaW9uIDIyODM5MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAg
dm9pZCBTVkdQb2x5RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29ucwogICAgICAgICBpZiAoYXV0
byB3cmFwcGVyID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwV3JhcHBlcjxTVkdQb2x5RWxl
bWVudCwgU1ZHQW5pbWF0ZWRQb2ludExpc3Q+KHRoaXMsIHBvaW50c1Byb3BlcnR5SW5mbygpKSkK
ICAgICAgICAgICAgIHN0YXRpY19wb2ludGVyX2Nhc3Q8U1ZHQW5pbWF0ZWRQb2ludExpc3Q+KHdy
YXBwZXIpLT5kZXRhY2hMaXN0V3JhcHBlcnMobmV3TGlzdC5zaXplKCkpOwogCi0gICAgICAgIG1f
cG9pbnRzLnZhbHVlID0gbmV3TGlzdDsKKyAgICAgICAgbV9wb2ludHMudmFsdWUgPSBXVEZNb3Zl
KG5ld0xpc3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgJKHJldmlzaW9uIDIyODM5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDIsMTEgKzQyLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvKGluaXRpYWxWYWx1ZSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBS
ZWY8U1ZHUHJlc2VydmVBc3BlY3RSYXRpbz4gY3JlYXRlKGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZSogaW5pdGlhbFZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyhpbml0aWFsVmFsdWUpKTsKLSAgICB9Ci0KICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPFNWR1ByZXNlcnZl
QXNwZWN0UmF0aW8+PiBjcmVhdGUoRXhjZXB0aW9uT3I8VD4mJiBpbml0aWFsVmFsdWUpCiAgICAg
ewogICAgICAgICBpZiAoaW5pdGlhbFZhbHVlLmhhc0V4Y2VwdGlvbigpKQpAQCAtMTAwLDExICs5
NSw2IEBAIHByaXZhdGU6CiAgICAgICAgIDogU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZT4oaW5pdGlhbFZhbHVlKQogICAgIHsKICAgICB9Ci0KLSAgICBleHBs
aWNpdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZSogaW5pdGlhbFZhbHVlKQotICAgICAgICA6IFNWR1Byb3BlcnR5VGVhck9mZjxTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWU+KGluaXRpYWxWYWx1ZSkKLSAgICB7Ci0gICAgfQogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHAJKHJldmlzaW9uIDIyODM5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw2ICszNSwxMSBAQCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNW
R1ByZXNlcnZlCiB7CiB9CiAKK1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgcGFyc2UodmFs
dWUpOworfQorCiBFeGNlcHRpb25Pcjx2b2lkPiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6
OnNldEFsaWduKHVuc2lnbmVkIHNob3J0IGFsaWduKQogewogICAgIGlmIChhbGlnbiA9PSBTVkdf
UFJFU0VSVkVBU1BFQ1RSQVRJT19VTktOT1dOIHx8IGFsaWduID4gU1ZHX1BSRVNFUlZFQVNQRUNU
UkFUSU9fWE1BWFlNQVgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZS5oCShyZXZpc2lvbiAyMjgzOTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDYgKzUyLDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
VmFsdWUoKTsKKyAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoY29uc3QgU3RyaW5nJik7
CiAKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRBbGlnbih1bnNpZ25lZCBzaG9ydCk7CiAgICAg
dW5zaWduZWQgc2hvcnQgYWxpZ24oKSBjb25zdCB7IHJldHVybiBtX2FsaWduOyB9CkBAIC03Nyw3
ICs3OCwxNSBAQCBwcml2YXRlOgogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0
czxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU+IHsKICAgICBzdGF0aWMgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlIGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZSgpOyB9Ci0gICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHR5cGUpIHsgcmV0dXJuIHR5cGUudmFsdWVBc1N0cmluZygp
OyB9CisgICAgc3RhdGljIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBmcm9tU3RyaW5nKGNv
bnN0IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9WYWx1ZShzdHJpbmcpOworCisgICAgfQorICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJp
bmcoY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiB0eXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHR5cGUudmFsdWVBc1N0cmluZygpOworICAgIH0KIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3QuaAkocmV2aXNpb24gMjI4MzkwKQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw3ICsyMSw3IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlNWR1Byb3BlcnR5VGVhck9mZi5oIgotI2luY2x1
ZGUgIlNWR1JlY3RUcmFpdHMuaCIKKyNpbmNsdWRlICJTVkdQcm9wZXJ0eVRyYWl0cy5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM2LDExICszNyw2IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHUmVjdChpbml0aWFsVmFsdWUpKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgUmVmPFNWR1JlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QqIGluaXRpYWxWYWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR1JlY3QoaW5pdGlhbFZh
bHVlKSk7Ci0gICAgfQotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIEV4Y2VwdGlv
bk9yPFJlZjxTVkdSZWN0Pj4gY3JlYXRlKEV4Y2VwdGlvbk9yPFQ+JiYgaW5pdGlhbFZhbHVlKQog
ICAgIHsKICAgICAgICAgaWYgKGluaXRpYWxWYWx1ZS5oYXNFeGNlcHRpb24oKSkKQEAgLTEyMiwx
MSArMTE4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgOiBTVkdQcm9wZXJ0eVRlYXJPZmY8RmxvYXRS
ZWN0Pihpbml0aWFsVmFsdWUpCiAgICAgewogICAgIH0KLQotICAgIGV4cGxpY2l0IFNWR1JlY3Qo
Y29uc3QgRmxvYXRSZWN0KiBpbml0aWFsVmFsdWUpCi0gICAgICAgIDogU1ZHUHJvcGVydHlUZWFy
T2ZmPEZsb2F0UmVjdD4oaW5pdGlhbFZhbHVlKQotICAgIHsKLSAgICB9CiB9OwogCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0VHJhaXRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1JlY3RUcmFpdHMuaAkocmV2aXNpb24gMjI4MzkwKQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1JlY3RUcmFpdHMuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDUxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgot
I2luY2x1ZGUgIlNWR1Byb3BlcnR5VHJhaXRzLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBT
VkdQcm9wZXJ0eVRyYWl0czxGbG9hdFJlY3Q+IHsKLSAgICBzdGF0aWMgRmxvYXRSZWN0IGluaXRp
YWxWYWx1ZSgpIHsgcmV0dXJuIHsgfTsgfQotICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoY29u
c3QgRmxvYXRSZWN0JiB0eXBlKQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVy
OwotICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcih0eXBlLngoKSk7Ci0gICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKHR5cGUueSgpKTsK
LSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmROdW1i
ZXIodHlwZS53aWR0aCgpKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAg
YnVpbGRlci5hcHBlbmROdW1iZXIodHlwZS5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybiBidWls
ZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uaAkocmV2aXNpb24gMjI4MzkwKQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDExICs0Myw2IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHVHJhbnNmb3JtKGluaXRp
YWxWYWx1ZSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBSZWY8U1ZHVHJhbnNmb3JtPiBjcmVhdGUo
Y29uc3QgU1ZHVHJhbnNmb3JtVmFsdWUqIGluaXRpYWxWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFNWR1RyYW5zZm9ybShpbml0aWFsVmFsdWUpKTsKLSAgICB9Ci0K
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPFNWR1RyYW5z
Zm9ybT4+IGNyZWF0ZShFeGNlcHRpb25PcjxUPiYmIGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAg
ICAgIGlmIChpbml0aWFsVmFsdWUuaGFzRXhjZXB0aW9uKCkpCkBAIC0xNDMsMTEgKzEzOCw2IEBA
IHByaXZhdGU6CiAgICAgICAgIDogU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1RyYW5zZm9ybVZhbHVl
Pihpbml0aWFsVmFsdWUpCiAgICAgewogICAgIH0KLQotICAgIGV4cGxpY2l0IFNWR1RyYW5zZm9y
bShjb25zdCBTVkdUcmFuc2Zvcm1WYWx1ZSogaW5pdGlhbFZhbHVlKQotICAgICAgICA6IFNWR1By
b3BlcnR5VGVhck9mZjxTVkdUcmFuc2Zvcm1WYWx1ZT4oaW5pdGlhbFZhbHVlKQotICAgIHsKLSAg
ICB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVHJhbnNmb3JtTGlzdFZhbHVlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUcmFuc2Zvcm1MaXN0VmFsdWVzLmgJKHJldmlzaW9uIDIyODM5MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0VmFsdWVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDYgKzQ0LDEyIEBAIHB1YmxpYzoKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgU1ZHUHJvcGVydHlU
cmFpdHM8U1ZHVHJhbnNmb3JtTGlzdFZhbHVlcz4gewogICAgIHN0YXRpYyBTVkdUcmFuc2Zvcm1M
aXN0VmFsdWVzIGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIHsgfTsgfQorICAgIHN0YXRpYyBTVkdU
cmFuc2Zvcm1MaXN0VmFsdWVzIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAg
eworICAgICAgICBTVkdUcmFuc2Zvcm1MaXN0VmFsdWVzIHZhbHVlczsKKyAgICAgICAgdmFsdWVz
LnBhcnNlKHN0cmluZyk7CisgICAgICAgIHJldHVybiB2YWx1ZXM7CisgICAgfQogICAgIHN0YXRp
YyBTdHJpbmcgdG9TdHJpbmcoY29uc3QgU1ZHVHJhbnNmb3JtTGlzdFZhbHVlcyYgbGlzdCkgeyBy
ZXR1cm4gbGlzdC52YWx1ZUFzU3RyaW5nKCk7IH0KIAogICAgIHVzaW5nIExpc3RJdGVtVHlwZSA9
IFNWR1RyYW5zZm9ybVZhbHVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHUHJvcGVydHlUZWFyT2ZmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3By
b3BlcnRpZXMvU1ZHUHJvcGVydHlUZWFyT2ZmLmgJKHJldmlzaW9uIDIyODM5MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5VGVhck9mZi5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MywxMSArNTMsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFNlbGYoaW5pdGlhbFZhbHVlKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFJlZjxTZWxmPiBj
cmVhdGUoY29uc3QgUHJvcGVydHlUeXBlKiBpbml0aWFsVmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBTZWxmKGluaXRpYWxWYWx1ZSkpOwotICAgIH0KLQogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8U2VsZj4+IGNyZWF0ZShF
eGNlcHRpb25PcjxVPiYmIGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChpbml0aWFs
VmFsdWUuaGFzRXhjZXB0aW9uKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGll
cy9TVkdQcm9wZXJ0eVRyYWl0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9w
cm9wZXJ0aWVzL1NWR1Byb3BlcnR5VHJhaXRzLmgJKHJldmlzaW9uIDIyODM5MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5VHJhaXRzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNiArMjEsMTMgQEAKIAogI3ByYWdt
YSBvbmNlCiAKKyNpbmNsdWRlICJDU1NQYXJzZXIuaCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJR
dWFsaWZpZWROYW1lLmgiCisjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMCwxMCArMzgsMjMgQEAgc3RydWN0IFNW
R1Byb3BlcnR5VHJhaXRzIHsgfTsKIHRlbXBsYXRlPD4KIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0
czxib29sPiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBzdGF0aWMgYm9vbCBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7IHJl
dHVybiBzdHJpbmcgPT0gInRydWUiOyB9CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhib29s
IHR5cGUpIHsgcmV0dXJuIHR5cGUgPyAidHJ1ZSIgOiAiZmFsc2UiOyB9CiB9OwogCiB0ZW1wbGF0
ZTw+CitzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8Q29sb3I+IHsKKyAgICBzdGF0aWMgQ29sb3Ig
aW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gQ29sb3IoKTsgfQorICAgIHN0YXRpYyBDb2xvciBmcm9t
U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7IHJldHVybiBDU1NQYXJzZXI6OnBhcnNlQ29s
b3Ioc3RyaW5nLnN0cmlwV2hpdGVTcGFjZSgpKTsgfQorICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PENvbG9yPiBwYXJzZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgU3RyaW5nJiBzdHJpbmcp
CisgICAgeworICAgICAgICBDb2xvciBjb2xvciA9IENTU1BhcnNlcjo6cGFyc2VDb2xvcihzdHJp
bmcuc3RyaXBXaGl0ZVNwYWNlKCkpOworICAgICAgICByZXR1cm4gY29sb3IuaXNWYWxpZCgpID8g
Y29sb3IgOiBzdGQ6Om9wdGlvbmFsPENvbG9yPigpOworICAgIH0KKyAgICBzdGF0aWMgU3RyaW5n
IHRvU3RyaW5nKGNvbnN0IENvbG9yJiB0eXBlKSB7IHJldHVybiB0eXBlLnNlcmlhbGl6ZWQoKTsg
fQorfTsKKwordGVtcGxhdGU8Pgogc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPHVuc2lnbmVkPiB7
CiAgICAgc3RhdGljIHVuc2lnbmVkIGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIDA7IH0KICAgICBz
dGF0aWMgU3RyaW5nIHRvU3RyaW5nKHVuc2lnbmVkIHR5cGUpIHsgcmV0dXJuIFN0cmluZzo6bnVt
YmVyKHR5cGUpOyB9CkBAIC00MiwxOSArNjMsMTA2IEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0
czx1bnNpZ25lZD4gewogdGVtcGxhdGU8Pgogc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPGludD4g
ewogICAgIHN0YXRpYyBpbnQgaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gMDsgfQorICAgIHN0YXRp
YyBpbnQgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmc3RyaW5nKSB7IHJldHVybiBzdHJpbmcudG9J
bnRTdHJpY3QoKTsgfQogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoaW50IHR5cGUpIHsgcmV0
dXJuIFN0cmluZzo6bnVtYmVyKHR5cGUpOyB9CiB9OwogCiB0ZW1wbGF0ZTw+CitzdHJ1Y3QgU1ZH
UHJvcGVydHlUcmFpdHM8c3RkOjpwYWlyPGludCwgaW50Pj4geworICAgIHN0YXRpYyBzdGQ6OnBh
aXI8aW50LCBpbnQ+IGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIHsgfTsgfQorICAgIHN0YXRpYyBz
dGQ6OnBhaXI8aW50LCBpbnQ+IGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAg
eworICAgICAgICBmbG9hdCBmaXJzdE51bWJlciA9IDAsIHNlY29uZE51bWJlciA9IDA7CisgICAg
ICAgIGlmICghcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihzdHJpbmcsIGZpcnN0TnVtYmVyLCBz
ZWNvbmROdW1iZXIpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PGludD4ocm91bmRmKGZpcnN0TnVtYmVyKSksIHN0YXRp
Y19jYXN0PGludD4ocm91bmRmKHNlY29uZE51bWJlcikpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+CiBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8ZmxvYXQ+IHsKICAgICBzdGF0aWMgZmxvYXQg
aW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gMDsgfQorICAgIHN0YXRpYyBmbG9hdCBmcm9tU3RyaW5n
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgZmxvYXQgdHlwZSA9IDA7Cisg
ICAgICAgIHJldHVybiBwYXJzZU51bWJlckZyb21TdHJpbmcoc3RyaW5nLCB0eXBlKSA/IHR5cGUg
OiAwOworICAgIH0KKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxmbG9hdD4gcGFyc2UoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgZmxv
YXQgbnVtYmVyOworICAgICAgICByZXR1cm4gcGFyc2VOdW1iZXJGcm9tU3RyaW5nKHN0cmluZywg
bnVtYmVyKSA/IG51bWJlciA6IHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+KCk7CisgICAgfQogICAgIHN0
YXRpYyBTdHJpbmcgdG9TdHJpbmcoZmxvYXQgdHlwZSkgeyByZXR1cm4gU3RyaW5nOjpudW1iZXIo
dHlwZSk7IH0KIH07CiAKIHRlbXBsYXRlPD4KK3N0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxzdGQ6
OnBhaXI8ZmxvYXQsIGZsb2F0Pj4geworICAgIHN0YXRpYyBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0
PiBpbml0aWFsVmFsdWUoKSB7IHJldHVybiB7IH07IH0KKyAgICBzdGF0aWMgc3RkOjpwYWlyPGZs
b2F0LCBmbG9hdD4gZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAg
ICAgIGZsb2F0IGZpcnN0TnVtYmVyID0gMCwgc2Vjb25kTnVtYmVyID0gMDsKKyAgICAgICAgaWYg
KCFwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHN0cmluZywgZmlyc3ROdW1iZXIsIHNlY29uZE51
bWJlcikpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIoZmlyc3ROdW1iZXIsIHNlY29uZE51bWJlcik7CisgICAgfQorfTsKKwordGVtcGxhdGU8
Pgorc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPEZsb2F0UG9pbnQ+IHsKKyAgICBzdGF0aWMgRmxv
YXRQb2ludCBpbml0aWFsVmFsdWUoKSB7IHJldHVybiBGbG9hdFBvaW50KCk7IH0KKyAgICBzdGF0
aWMgRmxvYXRQb2ludCBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAg
ICAgICAgRmxvYXRQb2ludCBwb2ludDsKKyAgICAgICAgcmV0dXJuIHBhcnNlUG9pbnQoc3RyaW5n
LCBwb2ludCkgPyBwb2ludCA6IEZsb2F0UG9pbnQoKTsKKyAgICB9CisgICAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2UoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IFN0
cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgRmxvYXRQb2ludCBwb2ludDsKKyAgICAgICAg
cmV0dXJuIHBhcnNlUG9pbnQoc3RyaW5nLCBwb2ludCkgPyBwb2ludCA6IHN0ZDo6b3B0aW9uYWw8
RmxvYXRQb2ludD4oKTsKKyAgICB9CisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBG
bG9hdFBvaW50JiB0eXBlKQorICAgIHsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwor
ICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcih0eXBlLngoKSk7CisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCcgJyk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKHR5cGUueSgpKTsKKyAg
ICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
CitzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8RmxvYXRSZWN0PiB7CisgICAgc3RhdGljIEZsb2F0
UmVjdCBpbml0aWFsVmFsdWUoKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQorICAgIHN0YXRpYyBG
bG9hdFJlY3QgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAgICAg
IEZsb2F0UmVjdCByZWN0OworICAgICAgICByZXR1cm4gcGFyc2VSZWN0KHN0cmluZywgcmVjdCkg
PyByZWN0IDogRmxvYXRSZWN0KCk7CisgICAgfQorICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZs
b2F0UmVjdD4gcGFyc2UoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IFN0cmluZyYgc3RyaW5n
KQorICAgIHsKKyAgICAgICAgRmxvYXRSZWN0IHJlY3Q7CisgICAgICAgIHJldHVybiBwYXJzZVJl
Y3Qoc3RyaW5nLCByZWN0KSA/IHJlY3QgOiBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4oKTsKKyAg
ICB9CisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBGbG9hdFJlY3QmIHR5cGUpCisg
ICAgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kTnVtYmVyKHR5cGUueCgpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmROdW1iZXIodHlwZS55KCkpOworICAgICAgICBidWlsZGVyLmFwcGVu
ZCgnICcpOworICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcih0eXBlLndpZHRoKCkpOworICAg
ICAgICBidWlsZGVyLmFwcGVuZCgnICcpOworICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcih0
eXBlLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+CiBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8U3RyaW5nPiB7CiAg
ICAgc3RhdGljIFN0cmluZyBpbml0aWFsVmFsdWUoKSB7IHJldHVybiBTdHJpbmcoKTsgfQotICAg
IHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKSB7IHJldHVybiB0eXBl
OyB9CisgICAgc3RhdGljIFN0cmluZyBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7
IHJldHVybiBzdHJpbmc7IH0KKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxTdHJpbmc+IHBhcnNl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmIHN0cmluZykgeyByZXR1cm4gc3Ry
aW5nOyB9CisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykg
eyByZXR1cm4gc3RyaW5nOyB9CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbnVtVHlwZT4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>334203</attachid>
            <date>2018-02-19 16:48:01 -0800</date>
            <delta_ts>2018-02-19 18:03:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-182901-20180219164800.patch</filename>
            <type>text/plain</type>
            <size>72348</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyODcxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNSBAQAorMjAxOC0wMi0xOSAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBTVkdQ
cm9wZXJ0eVRyYWl0czo6ZnJvbVN0cmluZygpIHRvIGFsbCB0aGUgU1ZHIGFuaW1hdGVkIHR5cGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI5MDEK
KworICAgICAgICBSZXZpZXdlZCBieSBEZWFuIEphY2tzb24uCisKKyAgICAgICAgVGhpcyBpcyBh
IHdvcmsgdG93YXJkIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjg1
ODYuIFRoZQorICAgICAgICBnb2FsIGlzIGlzIHRvIHRlbXBsYXRpemUgdGhlIFNWR0FuaW1hdGVk
VHlwZSBjbGFzcyBhbmQgdG8gdXNlIFNWR1Byb3BlcnR5VHJhaXRzCisgICAgICAgIG1ldGhvZHMg
aW5zaWRlIHRoZSB0ZW1wbGF0ZSBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6IE1vdmUgdGhlIGVudW0gYW5kIHRoZSBTVkdQcm9wZXJ0eVRy
YWl0cworICAgICAgICBmcm9tIFNWR01hcmtlckVsZW1lbnQuaCB0byBTVkdNYXJrZXJUeXBlcy5o
LgorICAgICAgICAqIHN2Zy9TVkdBbmdsZS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5nbGU6
OlNWR0FuZ2xlKTogRGVsZXRlIHVudXNlZCBjb25zdHJ1Y3RvciBhbmQgY3JlYXRlKCkgbWV0aG9k
LgorICAgICAgICAqIHN2Zy9TVkdBbmdsZVZhbHVlLmg6CisgICAgICAgICogc3ZnL1NWR0FuaW1h
dGVNb3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlUG9pbnQpOiBEZWxl
dGVkLiBNb3ZlIHRoaXMgZnVuY3Rpb24gdG8gU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAorICAgICAg
ICAqIHN2Zy9TVkdBbmltYXRlZEFuZ2xlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVkQW5nbGVBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyk6IFVzZSBTVkdQcm9wZXJ0eVRy
YWl0czo6ZnJvbVN0cmluZygpLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZEJvb2xlYW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRCb29sZWFuQW5pbWF0b3I6OmNvbnN0cnVj
dEZyb21TdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRDb2xvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZENvbG9yQW5pbWF0b3I6OmNvbnN0cnVjdEZy
b21TdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkQ29sb3JBbmlt
YXRvcjo6YWRkQW5pbWF0ZWRUeXBlcyk6IFVzZSBjb25zdC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVkQ29sb3JBbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZSk6IERpdHRvLgor
ICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZEVudW1lcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGVkRW51bWVyYXRpb25BbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyk6
IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZEludGVnZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcp
OiBEaXR0by4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdl
ckFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKTogRGl0dG8uCisgICAgICAgICogc3ZnL1NW
R0FuaW1hdGVkTGVuZ3RoLmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkTGVuZ3RoTGlzdEFuaW1hdG9yOjpj
b25zdHJ1Y3RGcm9tU3RyaW5nKTogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkTnVt
YmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkTnVtYmVyQW5pbWF0b3I6OmNv
bnN0cnVjdEZyb21TdHJpbmcpOiBEaXR0bworICAgICAgICAoV2ViQ29yZTo6cGFyc2VOdW1iZXJG
cm9tU3RyaW5nKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkTnVtYmVyTGlzdEFuaW1hdG9yOjpjb25zdHJ1Y3RG
cm9tU3RyaW5nKTogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkTnVtYmVyT3B0aW9u
YWxOdW1iZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25h
bE51bWJlckFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKTogRGl0dG8uCisgICAgICAgICog
c3ZnL1NWR0FuaW1hdGVkUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFBh
dGhBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyk6IERpdHRvLgorICAgICAgICAqIHN2Zy9T
VkdBbmltYXRlZFBvaW50TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFBv
aW50TGlzdEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKTogRGl0dG8uCisgICAgICAgICog
c3ZnL1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW9BbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0
cmluZyk6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZFJlY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRSZWN0QW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcp
OiBEaXR0by4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRTdHJpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZWRTdHJpbmdBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyk6
IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0QW5pbWF0b3I6OmNvbnN0cnVj
dEZyb21TdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKiBzdmcvU1ZHTGVuZ3RoLmg6CisgICAgICAg
IChXZWJDb3JlOjpTVkdMZW5ndGg6OlNWR0xlbmd0aCk6IERlbGV0ZSB1bnVzZWQgY29uc3RydWN0
b3IgYW5kIGNyZWF0ZSgpIG1ldGhvZC4KKyAgICAgICAgKiBzdmcvU1ZHTGVuZ3RoTGlzdFZhbHVl
cy5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8U1ZHTGVuZ3RoTGlzdFZh
bHVlcz46OmZyb21TdHJpbmcpOiBOZXcgU1ZHUHJvcGVydHlUcmFpdHMgbWV0aG9kLgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8U1ZHTGVuZ3RoTGlzdFZhbHVlcz46OnBhcnNl
KTogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR01hcmtlckVsZW1lbnQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPFNWR01hcmtlclVuaXRzVHlwZT46OmhpZ2hlc3RFbnVt
VmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8U1ZH
TWFya2VyVW5pdHNUeXBlPjo6dG9TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUHJvcGVydHlUcmFpdHM8U1ZHTWFya2VyVW5pdHNUeXBlPjo6ZnJvbVN0cmluZyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdJRExFbnVtTGltaXRzPFNWR01hcmtlck9yaWVudFR5
cGU+OjpoaWdoZXN0RXhwb3NlZEVudW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxTVkdNYXJrZXJPcmllbnRUeXBlPjo6aGlnaGVzdEVudW1WYWx1
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxTVkdNYXJr
ZXJPcmllbnRUeXBlPjo6ZnJvbVN0cmluZyk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR01h
cmtlclR5cGVzLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8
U1ZHTWFya2VyVW5pdHNUeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxTVkdNYXJrZXJVbml0c1R5cGU+Ojp0b1N0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxTVkdNYXJrZXJVbml0c1R5cGU+Ojpmcm9t
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPFNWR01hcmtlck9y
aWVudFR5cGU+OjpoaWdoZXN0RW51bVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3Bl
cnR5VHJhaXRzPFNWR01hcmtlck9yaWVudFR5cGU+Ojpmcm9tU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0lETEVudW1MaW1pdHM8U1ZHTWFya2VyT3JpZW50VHlwZT46OmhpZ2hlc3RFeHBv
c2VkRW51bVZhbHVlKToKKyAgICAgICAgKiBzdmcvU1ZHTWF0cml4Lmg6IERlbGV0ZSB1bnVzZWQg
Y29uc3RydWN0b3IgYW5kIGNyZWF0ZSBtZXRob2QuCisgICAgICAgICogc3ZnL1NWR051bWJlci5o
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHTnVtYmVyOjpTVkdOdW1iZXIpOiBEaXR0by4KKyAgICAg
ICAgKiBzdmcvU1ZHTnVtYmVyTGlzdFZhbHVlcy5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJv
cGVydHlUcmFpdHM8U1ZHTnVtYmVyTGlzdFZhbHVlcz46OmZyb21TdHJpbmcpOiBOZXcgU1ZHUHJv
cGVydHlUcmFpdHMgbWV0aG9kLgorICAgICAgICAqIHN2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VQb2ludCk6IFRoaXMgaXMgbW92ZWQgZnJvbSBTVkdB
bmltYXRlTW90aW9uRWxlbWVudC5jcHAKKyAgICAgICAgKiBzdmcvU1ZHUGFyc2VyVXRpbGl0aWVz
Lmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoQnl0ZVN0cmVhbTo6U1ZHUGF0aEJ5dGVTdHJlYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aEJ5dGVTdHJlYW06Om9wZXJhdG9yPSk6IEFkZCBjb3B5IGFuZCBtb3ZlIGFzc2ln
bm1lbnQgb3BlcmF0b3JzLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW06OmNv
cHkgY29uc3QpOiBVc2UgdGhlIGNvcHkgYXNzaWdubWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhCeXRlU3RyZWFtOjppc0VtcHR5IGNvbnN0KTogVXNlIERhdGEuaXNFbXB0eSgpLgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8U1ZHUGF0aEJ5dGVTdHJlYW0+Ojppbml0
aWFsVmFsdWUpOiBOZXcgU1ZHUHJvcGVydHlUcmFpdHMgbWV0aG9kLgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUHJvcGVydHlUcmFpdHM8U1ZHUGF0aEJ5dGVTdHJlYW0+Ojpmcm9tU3RyaW5nKTogRGl0
dG8uCisgICAgICAgICogc3ZnL1NWR1BhdGhVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6YWRkVG9TVkdQYXRoQnl0ZVN0cmVhbSk6IEFuc3dlciBTaW1vbidzIHF1ZXN0aW9ucyB3aGlj
aCB3ZXJlIGFkZGVkIGluIHIxOTA4NDQuCisgICAgICAgICogc3ZnL1NWR1BvaW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQb2ludDo6U1ZHUG9pbnQpOiBEZWxldGUgdW51c2VkIGNvbnN0cnVj
dG9yIGFuZCBjcmVhdGUgbWV0aG9kLgorICAgICAgICAqIHN2Zy9TVkdQb2ludExpc3RWYWx1ZXMu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPFNWR1BvaW50TGlzdFZhbHVl
cz46OmZyb21TdHJpbmcpOiBOZXcgU1ZHUHJvcGVydHlUcmFpdHMgbWV0aG9kLgorICAgICAgICAq
IHN2Zy9TVkdQb2x5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2x5RWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUpOiBVc2UgdGhlIG1vdmUgYXNzaWdubWVudCBvcGVyYXRvci4KKyAg
ICAgICAgKiBzdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpbyk6IERlbGV0ZSB1
bnVzZWQgY29uc3RydWN0b3IgYW5kIGNyZWF0ZSBtZXRob2QuCisgICAgICAgICogc3ZnL1NWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSk6IEFkZCBuZXcg
Y29uc3RydWN0b3IuCisgICAgICAgICogc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5o
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8U1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlPjo6ZnJvbVN0cmluZyk6IE5ldyBTVkdQcm9wZXJ0eVRyYWl0cyBtZXRob2QuCisg
ICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
VmFsdWU+Ojp0b1N0cmluZyk6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdSZWN0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdSZWN0OjpTVkdSZWN0KTogRGVsZXRlIHVudXNlZCBjb25zdHJ1Y3Rv
ciBhbmQgY3JlYXRlIG1ldGhvZC4KKyAgICAgICAgKiBzdmcvU1ZHUmVjdFRyYWl0cy5oOiBSZW1v
dmVkLgorICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm0uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RyYW5zZm9ybTo6U1ZHVHJhbnNmb3JtKTogRGVsZXRlIHVudXNlZCBjb25zdHJ1Y3RvciBhbmQg
Y3JlYXRlIG1ldGhvZC4KKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtTGlzdFZhbHVlcy5oOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8U1ZHVHJhbnNmb3JtTGlzdFZhbHVl
cz46OmZyb21TdHJpbmcpOiBOZXcgU1ZHUHJvcGVydHlUcmFpdHMgbWV0aG9kLgorICAgICAgICAq
IHN2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5VGVhck9mZi5oOiBEZWxldGUgdW51c2VkIGNyZWF0
ZSBtZXRob2QuCisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlUcmFpdHMuaDog
TmV3IFNWR1Byb3BlcnR5VHJhaXRzIG1ldGhvZHMuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9w
ZXJ0eVRyYWl0czxib29sPjo6ZnJvbVN0cmluZyk6IAorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJv
cGVydHlUcmFpdHM8Q29sb3I+Ojppbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UHJvcGVydHlUcmFpdHM8Q29sb3I+Ojpmcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1Byb3BlcnR5VHJhaXRzPENvbG9yPjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJv
cGVydHlUcmFpdHM8Q29sb3I+Ojp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9w
ZXJ0eVRyYWl0czxpbnQ+Ojpmcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3Bl
cnR5VHJhaXRzPGZsb2F0Pjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9w
ZXJ0eVRyYWl0czxmbG9hdD46OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5
VHJhaXRzPEZsb2F0UG9pbnQ+Ojppbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UHJvcGVydHlUcmFpdHM8RmxvYXRQb2ludD46OmZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUHJvcGVydHlUcmFpdHM8RmxvYXRQb2ludD46OnBhcnNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZsb2F0UG9pbnQ+Ojp0b1N0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFJlY3Q+Ojppbml0aWFsVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8RmxvYXRSZWN0Pjo6ZnJvbVN0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFJlY3Q+OjpwYXJzZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFJlY3Q+Ojp0b1N0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxTdHJpbmc+Ojpmcm9tU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPFN0cmluZz46OnBhcnNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPFN0cmluZz46OnRvU3RyaW5n
KToKKwogMjAxOC0wMi0xOSAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtNb2Rlcm4gTWVkaWEgQ29udHJvbHNdIEltcGxlbWVudCBhIGNvbXBhY3Qgc2V0IG9m
IG1lZGlhIGNvbnRyb2xzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjg3MTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIx
NjgsNyArMjE2OCw2IEBACiAJCTdDRTE5MTc5MUYyQUJFNzEwMDI3MkY3OCAvKiBKU0ZldGNoUmVx
dWVzdE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDRTE5MTZDMUYyQUI3MEEwMDI3MkY3OCAvKiBKU0ZldGNoUmVxdWVzdE1vZGUuaCAqLzsgfTsK
IAkJN0NFMTkxN0IxRjJBQkU3MTAwMjcyRjc4IC8qIEpTRmV0Y2hSZXF1ZXN0UmVkaXJlY3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTE5MTZBMUYy
QUI3MDYwMDI3MkY3OCAvKiBKU0ZldGNoUmVxdWVzdFJlZGlyZWN0LmggKi87IH07CiAJCTdDRTU4
RDRBMURENjRBNUIwMDEyODU1MiAvKiBTVkdQb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNThENDkxREQ2NEE1QjAwMTI4NTUyIC8qIFNWR1Bv
aW50LmggKi87IH07Ci0JCTdDRTU4RDRFMURENjk0RkUwMDEyODU1MiAvKiBTVkdSZWN0VHJhaXRz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U1OEQ0
RDFERDY5NEZFMDAxMjg1NTIgLyogU1ZHUmVjdFRyYWl0cy5oICovOyB9OwogCQk3Q0U1OEQ1MDFE
RDY5QTFFMDAxMjg1NTIgLyogU1ZHTnVtYmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U1OEQ0RjFERDY5QTFFMDAxMjg1NTIgLyogU1ZHTnVtYmVy
LmggKi87IH07CiAJCTdDRTU4RDU4MUREN0Q5NkQwMDEyODU1MiAvKiBTVkdUcmFuc2Zvcm1WYWx1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNThE
NTYxREQ3RDk2RDAwMTI4NTUyIC8qIFNWR1RyYW5zZm9ybVZhbHVlLmggKi87IH07CiAJCTdDRTU4
RDVDMUREN0VDOUMwMDEyODU1MiAvKiBTVkdNYXRyaXhWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNThENUIxREQ3RUM5QzAwMTI4NTUyIC8q
IFNWR01hdHJpeFZhbHVlLmggKi87IH07CkBAIC0zMjkwLDcgKzMyODksNyBAQAogCQlCMjIyN0E0
QjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTWV0YWRhdGFFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjIyNzhCNTBEMDBCRjIwMDA3MUI3ODIg
LyogU1ZHTWV0YWRhdGFFbGVtZW50LmggKi87IH07CiAJCUIyMjI3QTRFMEQwMEJGMjIwMDcxQjc4
MiAvKiBTVkdNUGF0aEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyMjI3OEI4MEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdNUGF0aEVsZW1lbnQu
aCAqLzsgfTsKIAkJQjIyMjdBNTEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR051bWJlckxpc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMjI3OEJCMEQw
MEJGMjAwMDcxQjc4MiAvKiBTVkdOdW1iZXJMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQjIyMjdBNTcwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R1BhcnNlclV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjIyMjc4QzEwRDAwQkYyMDAwNzFCNzgyIC8qIFNWR1BhcnNlclV0aWxpdGllcy5o
ICovOyB9OworCQlCMjIyN0E1NzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUGFyc2VyVXRpbGl0aWVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjIyNzhD
MTBEMDBCRjIwMDA3MUI3ODIgLyogU1ZHUGFyc2VyVXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjIyMjdBNTkwRDAwQkYyMjAwNzFC
NzgyIC8qIFNWR1BhdGhFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMjIyNzhDMzBEMDBCRjIwMDA3MUI3ODIgLyogU1ZHUGF0aEVsZW1lbnQu
aCAqLzsgfTsKIAkJQjIyMjdBNUIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhTZWcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMjI3OEM1MEQwMEJG
MjAwMDcxQjc4MiAvKiBTVkdQYXRoU2VnLmggKi87IH07CiAJCUIyMjI3QTVFMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdQYXRoU2VnQXJjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMjIyNzhDODBEMDBCRjIwMDA3MUI3ODIgLyogU1ZHUGF0aFNlZ0FyYy5o
ICovOyB9OwpAQCAtODE4MSw2ICs4MTgwLDcgQEAKIAkJNTNFRDNGREQxNjdBODhFNzAwNjc2MkU2
IC8qIEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0ludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUXVhbGlmaWVkTmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlm
aWVkTmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBRdWFsaWZpZWROYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgdXNlc1RhYnMgPSAwOyB9OworCQk1NTEzN0IyQzIwMzc5RTU1MDAwMTAwNEIgLyogU1ZHTWFy
a2VyVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHTWFya2VyVHlw
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTU0Njc1NzcxRkQxRkMxQTAwM0Ix
MEIwIC8qIEltYWdlU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlU291cmNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTU0Njc1NzgxRkQxRkMxQTAwM0IxMEIw
IC8qIEltYWdlU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlU291cmNlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1NTBDQjQxMUU5NTVFM0MwMDExMUFBMCAvKiBJbWFnZVR5
cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlVHlwZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk0ODIsNyArOTQ4Miw2IEBACiAJCTdDRTE5MTZF
MUYyQUI3MEQwMDI3MkY3QiAvKiBKU0NhY2hlUXVlcnlPcHRpb25zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTQ2FjaGVRdWVyeU9wdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3Q0UxOTE2RjFGMkFCNzBGMDAyNzJGNzggLyogSlNGZXRjaFJlcXVlc3RSZWRpcmVjdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ZldGNoUmVxdWVzdFJlZGlyZWN0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NFNThENDkxREQ2NEE1QjAwMTI4NTUyIC8qIFNWR1Bv
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BvaW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDRTU4RDREMURENjk0RkUwMDEyODU1MiAvKiBTVkdS
ZWN0VHJhaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1JlY3RUcmFp
dHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NFNThENEYxREQ2OUExRTAwMTI4
NTUyIC8qIFNWR051bWJlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdO
dW1iZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NFNThENTExREQ3QjA5MzAw
MTI4NTUyIC8qIFNWR0xlbmd0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
VkdMZW5ndGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NFNThENTIxREQ3QjA5
MzAwMTI4NTUyIC8qIFNWR0xlbmd0aFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNWR0xlbmd0aFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIyNjYyLDYgKzIyNjYxLDcgQEAKIAkJCQlCMjIyNzhBRDBEMDBCRjIwMDA3MUI3ODIg
LyogU1ZHTWFya2VyRWxlbWVudC5jcHAgKi8sCiAJCQkJQjIyMjc4QUUwRDAwQkYyMDAwNzFCNzgy
IC8qIFNWR01hcmtlckVsZW1lbnQuaCAqLywKIAkJCQlCMjIyNzhBRjBEMDBCRjIwMDA3MUI3ODIg
LyogU1ZHTWFya2VyRWxlbWVudC5pZGwgKi8sCisJCQkJNTUxMzdCMkMyMDM3OUU1NTAwMDEwMDRC
IC8qIFNWR01hcmtlclR5cGVzLmggKi8sCiAJCQkJQjIyMjc4QjAwRDAwQkYyMDAwNzFCNzgyIC8q
IFNWR01hc2tFbGVtZW50LmNwcCAqLywKIAkJCQlCMjIyNzhCMTBEMDBCRjIwMDA3MUI3ODIgLyog
U1ZHTWFza0VsZW1lbnQuaCAqLywKIAkJCQlCMjIyNzhCMjBEMDBCRjIwMDA3MUI3ODIgLyogU1ZH
TWFza0VsZW1lbnQuaWRsICovLApAQCAtMjI3OTUsNyArMjI3OTUsNiBAQAogCQkJCUIyMjI3OTA3
MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdSZWN0RWxlbWVudC5jcHAgKi8sCiAJCQkJQjIyMjc5MDgw
RDAwQkYyMTAwNzFCNzgyIC8qIFNWR1JlY3RFbGVtZW50LmggKi8sCiAJCQkJQjIyMjc5MDkwRDAw
QkYyMTAwNzFCNzgyIC8qIFNWR1JlY3RFbGVtZW50LmlkbCAqLywKLQkJCQk3Q0U1OEQ0RDFERDY5
NEZFMDAxMjg1NTIgLyogU1ZHUmVjdFRyYWl0cy5oICovLAogCQkJCUIyMjI3OTBBMEQwMEJGMjEw
MDcxQjc4MiAvKiBTVkdSZW5kZXJpbmdJbnRlbnQuaCAqLywKIAkJCQlCMjIyNzkwQjBEMDBCRjIx
MDA3MUI3ODIgLyogU1ZHUmVuZGVyaW5nSW50ZW50LmlkbCAqLywKIAkJCQlCMjIyNzkwQzBEMDBC
RjIxMDA3MUI3ODIgLyogU1ZHU2NyaXB0RWxlbWVudC5jcHAgKi8sCkBAIC0yOTkyNyw3ICsyOTky
Niw2IEBACiAJCQkJQjIyMjdBOUEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1JhZGlhbEdyYWRpZW50
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhFREUxOUYxMkE1MEI4RTAwQjk1Nzk3IC8q
IFNWR1JlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTlFMEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdSZWN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0NFNThENEUxREQ2OTRGRTAw
MTI4NTUyIC8qIFNWR1JlY3RUcmFpdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE5N0IxODBDMTUw
NjM1MzIwMEU0QURBOCAvKiBTVkdSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMjIyN0FBMDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUmVuZGVyaW5nSW50ZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzIyNzQ3OTBFODM2NkUyMDBFN0Y5NzUgLyogU1ZHUmVuZGVyU3R5bGUu
aCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlLmgJKHJldmlzaW9uIDIyODcx
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MiwxMSArNDIsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0Fu
Z2xlKGluaXRpYWxWYWx1ZSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBSZWY8U1ZHQW5nbGU+IGNy
ZWF0ZShjb25zdCBTVkdBbmdsZVZhbHVlKiBpbml0aWFsVmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdBbmdsZShpbml0aWFsVmFsdWUpKTsKLSAgICB9Ci0KICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPFNWR0FuZ2xlPj4g
Y3JlYXRlKEV4Y2VwdGlvbk9yPFQ+JiYgaW5pdGlhbFZhbHVlKQogICAgIHsKICAgICAgICAgaWYg
KGluaXRpYWxWYWx1ZS5oYXNFeGNlcHRpb24oKSkKQEAgLTE0NSwxMSArMTQwLDYgQEAgcHJpdmF0
ZToKICAgICAgICAgOiBTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHQW5nbGVWYWx1ZT4oaW5pdGlhbFZh
bHVlKQogICAgIHsKICAgICB9Ci0KLSAgICBleHBsaWNpdCBTVkdBbmdsZShjb25zdCBTVkdBbmds
ZVZhbHVlKiBpbml0aWFsVmFsdWUpCi0gICAgICAgIDogU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR0Fu
Z2xlVmFsdWU+KGluaXRpYWxWYWx1ZSkKLSAgICB7Ci0gICAgfQogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5nbGVWYWx1ZS5oCShyZXZpc2lvbiAy
Mjg3MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5nbGVWYWx1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw3ICs1Niw4IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV92YWx1ZUluU3BlY2lm
aWVkVW5pdHMgeyAwIH07CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0
czxTVkdBbmdsZVZhbHVlPiB7Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8
U1ZHQW5nbGVWYWx1ZT4gewogICAgIHN0YXRpYyBTVkdBbmdsZVZhbHVlIGluaXRpYWxWYWx1ZSgp
IHsgcmV0dXJuIFNWR0FuZ2xlVmFsdWUoKTsgfQogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmco
Y29uc3QgU1ZHQW5nbGVWYWx1ZSYgdHlwZSkgeyByZXR1cm4gdHlwZS52YWx1ZUFzU3RyaW5nKCk7
IH0KIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxl
bWVudC5jcHAJKHJldmlzaW9uIDIyODcxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlTW90aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNiwzMSArMTM2LDYgQEAg
dm9pZCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6dXBkYXRlQW5pbQogICAgIHVwZGF0ZUFuaW1h
dGlvbk1vZGUoKTsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMs
IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIGlmIChzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhz
KS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogY3VyID0gdXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjdXIgKyBzLmxlbmd0aCgp
OwotICAgIAotICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGZsb2F0IHggPSAwOwotICAgIGlmICghcGFyc2VO
dW1iZXIoY3VyLCBlbmQsIHgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgZmxv
YXQgeSA9IDA7Ci0gICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwgeSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICBwb2ludCA9IEZsb2F0UG9pbnQoeCwgeSk7Ci0gICAgCi0g
ICAgLy8gZGlzYWxsb3cgYW55dGhpbmcgZXhjZXB0IHNwYWNlcyBhdCB0aGUgZW5kCi0gICAgcmV0
dXJuICFza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwotfQotICAgIAogdm9pZCBTVkdB
bmltYXRlTW90aW9uRWxlbWVudDo6cmVzZXRBbmltYXRlZFR5cGUoKQogewogICAgIGlmICghaGFz
VmFsaWRBdHRyaWJ1dGVUeXBlKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZWRBbmdsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVk
QW5nbGUuY3BwCShyZXZpc2lvbiAyMjg3MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZWRBbmdsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE3ICszMiw4IEBAIFNWR0FuaW1h
dGVkQW5nbGVBbmltYXRvcjo6U1ZHQW5pbWF0ZWRBbmcKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0Fu
aW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRBbmdsZUFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5n
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5p
bWF0ZWRUeXBlOjpjcmVhdGVBbmdsZUFuZEVudW1lcmF0aW9uKHN0ZDo6bWFrZV91bmlxdWU8c3Rk
OjpwYWlyPFNWR0FuZ2xlVmFsdWUsIHVuc2lnbmVkPj4oKSk7Ci0gICAgYXV0byYgYW5pbWF0ZWRQ
YWlyID0gYW5pbWF0ZWRUeXBlLT5hbmdsZUFuZEVudW1lcmF0aW9uKCk7Ci0KLSAgICBTVkdBbmds
ZVZhbHVlIGFuZ2xlOwotICAgIFNWR01hcmtlck9yaWVudFR5cGUgb3JpZW50VHlwZSA9IFNWR1By
b3BlcnR5VHJhaXRzPFNWR01hcmtlck9yaWVudFR5cGU+Ojpmcm9tU3RyaW5nKHN0cmluZywgYW5n
bGUpOwotICAgIGlmIChvcmllbnRUeXBlID4gMCkKLSAgICAgICAgYW5pbWF0ZWRQYWlyLnNlY29u
ZCA9IG9yaWVudFR5cGU7Ci0gICAgaWYgKG9yaWVudFR5cGUgPT0gU1ZHTWFya2VyT3JpZW50QW5n
bGUpCi0gICAgICAgIGFuaW1hdGVkUGFpci5maXJzdCA9IGFuZ2xlOwotCi0gICAgcmV0dXJuIGFu
aW1hdGVkVHlwZTsKKyAgICBhdXRvIHZhbHVlcyA9IFNWR1Byb3BlcnR5VHJhaXRzPHN0ZDo6cGFp
cjxTVkdBbmdsZVZhbHVlLCB1bnNpZ25lZD4+Ojpmcm9tU3RyaW5nKHN0cmluZyk7CisgICAgcmV0
dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlQW5nbGVBbmRFbnVtZXJhdGlvbihzdGQ6Om1ha2Vf
dW5pcXVlPHN0ZDo6cGFpcjxTVkdBbmdsZVZhbHVlLCB1bnNpZ25lZD4+KHZhbHVlcykpOwogfQog
CiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZEFuZ2xlQW5pbWF0
b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0
eUxpc3QmIGFuaW1hdGVkVHlwZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZWRCb29sZWFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZWRCb29sZWFuLmNwcAkocmV2aXNpb24gMjI4NzE4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVkQm9vbGVhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzEsOSArMzIsOCBAQCBTVkdBbmlt
YXRlZEJvb2xlYW5BbmltYXRvcjo6U1ZHQW5pbWF0ZWRCCiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdB
bmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkQm9vbGVhbkFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3Ry
aW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZH
QW5pbWF0ZWRUeXBlOjpjcmVhdGVCb29sZWFuKHN0ZDo6bWFrZV91bmlxdWU8Ym9vbD4oKSk7Ci0g
ICAgYW5pbWF0ZWRUeXBlLT5ib29sZWFuKCkgPSAoc3RyaW5nID09ICJ0cnVlIik7IC8vIHdhdD8K
LSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOworICAgIGF1dG8gdmFsdWUgPSBTVkdQcm9wZXJ0eVRy
YWl0czxib29sPjo6ZnJvbVN0cmluZyhzdHJpbmcpOworICAgIHJldHVybiBTVkdBbmltYXRlZFR5
cGU6OmNyZWF0ZUJvb2xlYW4oc3RkOjptYWtlX3VuaXF1ZTxib29sPih2YWx1ZSkpOwogfQogCiBz
dGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZEJvb2xlYW5BbmltYXRv
cjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5
TGlzdCYgYW5pbWF0ZWRUeXBlcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRl
ZENvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRD
b2xvci5jcHAJKHJldmlzaW9uIDIyODcxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlZENvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMyw3ICszNCw4IEBAIFNWR0FuaW1hdGVkQ29s
b3JBbmltYXRvcjo6U1ZHQW5pbWF0ZWRDb2wKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVk
VHlwZT4gU1ZHQW5pbWF0ZWRDb2xvckFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0
IFN0cmluZyYgc3RyaW5nKQogewotICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUNv
bG9yKHN0ZDo6bWFrZV91bmlxdWU8Q29sb3I+KENTU1BhcnNlcjo6cGFyc2VDb2xvcihzdHJpbmcu
c3RyaXBXaGl0ZVNwYWNlKCkpKSk7CisgICAgYXV0byB2YWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRz
PENvbG9yPjo6ZnJvbVN0cmluZyhzdHJpbmcpOworICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6
OmNyZWF0ZUNvbG9yKHN0ZDo6bWFrZV91bmlxdWU8Q29sb3I+KHZhbHVlKSk7CiB9CiAKIHZvaWQg
U1ZHQW5pbWF0ZWRDb2xvckFuaW1hdG9yOjphZGRBbmltYXRlZFR5cGVzKFNWR0FuaW1hdGVkVHlw
ZSogZnJvbSwgU1ZHQW5pbWF0ZWRUeXBlKiB0bykKQEAgLTQ0LDcgKzQ2LDcgQEAgdm9pZCBTVkdB
bmltYXRlZENvbG9yQW5pbWF0b3I6OmFkZEFuaW1hdAogICAgIEFTU0VSVCh0by0+dHlwZSgpID09
IEFuaW1hdGVkQ29sb3IpOwogCiAgICAgLy8gSWdub3JlcyBhbnkgYWxwaGEgYW5kIHNldHMgYWxw
aGEgb24gcmVzdWx0IHRvIDEwMCUgb3BhcXVlLgotICAgIGF1dG8mIGZyb21Db2xvciA9IGZyb20t
PmNvbG9yKCk7CisgICAgY29uc3QgYXV0byYgZnJvbUNvbG9yID0gZnJvbS0+Y29sb3IoKTsKICAg
ICBhdXRvJiB0b0NvbG9yID0gdG8tPmNvbG9yKCk7CiAgICAgdG9Db2xvciA9IHsgcm91bmRBbmRD
bGFtcENvbG9yQ2hhbm5lbCh0b0NvbG9yLnJlZCgpICsgZnJvbUNvbG9yLnJlZCgpKSwKICAgICAg
ICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbCh0b0NvbG9yLmdyZWVuKCkgKyBmcm9tQ29sb3Iu
Z3JlZW4oKSksCkBAIC04Miw3ICs4NCw3IEBAIHZvaWQgU1ZHQW5pbWF0ZWRDb2xvckFuaW1hdG9y
OjpjYWxjdWxhdGUKICAgICBpZiAobV9hbmltYXRpb25FbGVtZW50LT50b1Byb3BlcnR5VmFsdWVU
eXBlKCkgPT0gQ3VycmVudENvbG9yVmFsdWUpCiAgICAgICAgIHRvQ29sb3IgPSBjdXJyZW50Q29s
b3IoKm1fY29udGV4dEVsZW1lbnQpOwogCi0gICAgYXV0byYgdG9BdEVuZE9mRHVyYXRpb25Db2xv
ciA9IHRvQXRFbmRPZkR1cmF0aW9uLT5jb2xvcigpOworICAgIGNvbnN0IGF1dG8mIHRvQXRFbmRP
ZkR1cmF0aW9uQ29sb3IgPSB0b0F0RW5kT2ZEdXJhdGlvbi0+Y29sb3IoKTsKICAgICBhdXRvJiBh
bmltYXRlZENvbG9yID0gYW5pbWF0ZWQtPmNvbG9yKCk7CiAKICAgICAvLyBGSVhNRTogRXh0ZW5k
ZWRDb2xvciAtIHRoaXMgd2lsbCBuZWVkIHRvIGhhbmRsZSBibGVuZGluZyBiZXR3ZWVuIGNvbG9y
cyBpbiBkaWZmZXJlbnQgY29sb3Igc3BhY2VzLApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVkRW51bWVyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlZEVudW1lcmF0aW9uLmNwcAkocmV2aXNpb24gMjI4NzE4KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkRW51bWVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEw
OSw5ICsxMTAsOCBAQCBTVkdBbmltYXRlZEVudW1lcmF0aW9uQW5pbWF0b3I6OlNWR0FuaW1hCiBz
dGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZEVudW1lcmF0aW9uQW5p
bWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAg
QVNTRVJUKG1fYW5pbWF0aW9uRWxlbWVudCk7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdB
bmltYXRlZFR5cGU6OmNyZWF0ZUVudW1lcmF0aW9uKHN0ZDo6bWFrZV91bmlxdWU8dW5zaWduZWQ+
KCkpOwotICAgIGFuaW1hdGVkVHlwZS0+ZW51bWVyYXRpb24oKSA9IGVudW1lcmF0aW9uVmFsdWVG
b3JUYXJnZXRBdHRyaWJ1dGUobV9hbmltYXRpb25FbGVtZW50LT50YXJnZXRFbGVtZW50KCksIG1f
YW5pbWF0aW9uRWxlbWVudC0+YXR0cmlidXRlTmFtZSgpLCBzdHJpbmcpOwotICAgIHJldHVybiBh
bmltYXRlZFR5cGU7CisgICAgYXV0byB2YWx1ZSA9IGVudW1lcmF0aW9uVmFsdWVGb3JUYXJnZXRB
dHRyaWJ1dGUobV9hbmltYXRpb25FbGVtZW50LT50YXJnZXRFbGVtZW50KCksIG1fYW5pbWF0aW9u
RWxlbWVudC0+YXR0cmlidXRlTmFtZSgpLCBzdHJpbmcpOworICAgIHJldHVybiBTVkdBbmltYXRl
ZFR5cGU6OmNyZWF0ZUVudW1lcmF0aW9uKHN0ZDo6bWFrZV91bmlxdWU8dW5zaWduZWQ+KHZhbHVl
KSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkRW51
bWVyYXRpb25BbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRB
bmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlZEludGVnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlZEludGVnZXIuY3BwCShyZXZpc2lvbiAyMjg3MTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMyw5ICsz
NCw4IEBAIFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yOjpTVkdBbmltYXRlZEkKIAogc3RkOjp1
bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I6OmNv
bnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXV0byBhbmlt
YXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUludGVnZXIoc3RkOjptYWtlX3VuaXF1
ZTxpbnQ+KCkpOwotICAgIGFuaW1hdGVkVHlwZS0+aW50ZWdlcigpID0gc3RyaW5nLnRvSW50U3Ry
aWN0KCk7Ci0gICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKKyAgICBhdXRvIHZhbHVlID0gU1ZHUHJv
cGVydHlUcmFpdHM8aW50Pjo6ZnJvbVN0cmluZyhzdHJpbmcpOworICAgIHJldHVybiBTVkdBbmlt
YXRlZFR5cGU6OmNyZWF0ZUludGVnZXIoc3RkOjptYWtlX3VuaXF1ZTxpbnQ+KHZhbHVlKSk7CiB9
CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkSW50ZWdlckFu
aW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJv
cGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlci5jcHAJKHJldmlzaW9u
IDIyODcxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXJPcHRpb25h
bEludGVnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxOCArMzMsOCBAQCBTVkdBbmltYXRl
ZEludGVnZXJPcHRpb25hbEludGVnZXJBbmltYXRvCiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmlt
YXRlZFR5cGU+IFNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1hdG9yOjpjb25z
dHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGF1dG8gYW5pbWF0
ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKHN0
ZDo6bWFrZV91bmlxdWU8c3RkOjpwYWlyPGludCwgaW50Pj4oKSk7Ci0gICAgc3RkOjpwYWlyPGlu
dCwgaW50PiYgYW5pbWF0ZWRJbnRlZ2VyID0gYW5pbWF0ZWRUeXBlLT5pbnRlZ2VyT3B0aW9uYWxJ
bnRlZ2VyKCk7Ci0gICAgZmxvYXQgZmlyc3ROdW1iZXIgPSAwOwotICAgIGZsb2F0IHNlY29uZE51
bWJlciA9IDA7Ci0gICAgaWYgKCFwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHN0cmluZywgZmly
c3ROdW1iZXIsIHNlY29uZE51bWJlcikpIHsKLSAgICAgICAgYW5pbWF0ZWRJbnRlZ2VyLmZpcnN0
ID0gMDsKLSAgICAgICAgYW5pbWF0ZWRJbnRlZ2VyLnNlY29uZCA9IDA7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgYW5pbWF0ZWRJbnRlZ2VyLmZpcnN0ID0gc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYo
Zmlyc3ROdW1iZXIpKTsKLSAgICAgICAgYW5pbWF0ZWRJbnRlZ2VyLnNlY29uZCA9IHN0YXRpY19j
YXN0PGludD4ocm91bmRmKHNlY29uZE51bWJlcikpOwotICAgIH0KLSAgICByZXR1cm4gYW5pbWF0
ZWRUeXBlOworICAgIGF1dG8gdmFsdWVzID0gU1ZHUHJvcGVydHlUcmFpdHM8c3RkOjpwYWlyPGlu
dCwgaW50Pj46OmZyb21TdHJpbmcoc3RyaW5nKTsKKyAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBl
OjpjcmVhdGVJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKHN0ZDo6bWFrZV91bmlxdWU8c3RkOjpwYWly
PGludCwgaW50Pj4odmFsdWVzKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5
cGU+IFNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1hdG9yOjpzdGFydEFuaW1W
YWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRl
ZFR5cGVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTGVuZ3RoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRMZW5ndGguY3BwCShy
ZXZpc2lvbiAyMjg3MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRMZW5ndGgu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZExlbmd0
aExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZExl
bmd0aExpc3QuY3BwCShyZXZpc2lvbiAyMjg3MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZWRMZW5ndGhMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOSArMzMsOCBAQCBT
VkdBbmltYXRlZExlbmd0aExpc3RBbmltYXRvcjo6U1ZHQW5pbWF0CiAKIHN0ZDo6dW5pcXVlX3B0
cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkTGVuZ3RoTGlzdEFuaW1hdG9yOjpjb25zdHJ1
Y3RGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGF1dG8gYW5pbWF0ZWRU
eXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVMZW5ndGhMaXN0KHN0ZDo6bWFrZV91bmlxdWU8
U1ZHTGVuZ3RoTGlzdFZhbHVlcz4oKSk7Ci0gICAgYW5pbWF0ZWRUeXBlLT5sZW5ndGhMaXN0KCku
cGFyc2Uoc3RyaW5nLCBtX2xlbmd0aE1vZGUpOwotICAgIHJldHVybiBhbmltYXRlZFR5cGU7Cisg
ICAgYXV0byB2YWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR0xlbmd0aExpc3RWYWx1ZXM+Ojpm
cm9tU3RyaW5nKHN0cmluZywgbV9sZW5ndGhNb2RlKTsKKyAgICByZXR1cm4gU1ZHQW5pbWF0ZWRU
eXBlOjpjcmVhdGVMZW5ndGhMaXN0KHN0ZDo6bWFrZV91bmlxdWU8U1ZHTGVuZ3RoTGlzdFZhbHVl
cz4oV1RGTW92ZSh2YWx1ZSkpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlw
ZT4gU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0QW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihj
b25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWROdW1iZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlci5jcHAJKHJldmlzaW9uIDIyODcx
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMzIsMTEgKzMzLDggQEAgU1ZHQW5pbWF0ZWROdW1iZXJBbmltYXRvcjo6U1ZHQW5pbWF0
ZWROdQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZE51bWJl
ckFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewot
ICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVOdW1iZXIoc3Rk
OjptYWtlX3VuaXF1ZTxmbG9hdD4oKSk7Ci0gICAgZmxvYXQmIGFuaW1hdGVkTnVtYmVyID0gYW5p
bWF0ZWRUeXBlLT5udW1iZXIoKTsKLSAgICBpZiAoIXBhcnNlTnVtYmVyRnJvbVN0cmluZyhzdHJp
bmcsIGFuaW1hdGVkTnVtYmVyKSkKLSAgICAgICAgYW5pbWF0ZWROdW1iZXIgPSAwOwotICAgIHJl
dHVybiBhbmltYXRlZFR5cGU7CisgICAgYXV0byB2YWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPGZs
b2F0Pjo6ZnJvbVN0cmluZyhzdHJpbmcpOworICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNy
ZWF0ZU51bWJlcihzdGQ6Om1ha2VfdW5pcXVlPGZsb2F0Pih2YWx1ZSkpOwogfQogCiBzdGQ6OnVu
aXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZE51bWJlckFuaW1hdG9yOjpzdGFy
dEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBh
bmltYXRlZFR5cGVzKQpAQCAtNzQsOSArNzIsNyBAQCB2b2lkIFNWR0FuaW1hdGVkTnVtYmVyQW5p
bWF0b3I6OmFkZEFuaW1hCiAKIHN0YXRpYyBmbG9hdCBwYXJzZU51bWJlckZyb21TdHJpbmcoU1ZH
QW5pbWF0aW9uRWxlbWVudCosIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGZsb2F0IG51
bWJlciA9IDA7Ci0gICAgcGFyc2VOdW1iZXJGcm9tU3RyaW5nKHN0cmluZywgbnVtYmVyKTsKLSAg
ICByZXR1cm4gbnVtYmVyOworICAgIHJldHVybiBTVkdQcm9wZXJ0eVRyYWl0czxmbG9hdD46OmZy
b21TdHJpbmcoc3RyaW5nKTsKIH0KIAogdm9pZCBTVkdBbmltYXRlZE51bWJlckFuaW1hdG9yOjpj
YWxjdWxhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UsIHVuc2lnbmVkIHJlcGVhdENv
dW50LCBTVkdBbmltYXRlZFR5cGUqIGZyb20sIFNWR0FuaW1hdGVkVHlwZSogdG8sIFNWR0FuaW1h
dGVkVHlwZSogdG9BdEVuZE9mRHVyYXRpb24sIFNWR0FuaW1hdGVkVHlwZSogYW5pbWF0ZWQpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmNwcAkocmV2
aXNpb24gMjI4NzE4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTnVtYmVyTGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsOSArMzMsOCBAQCBTVkdBbmltYXRlZE51bWJlckxpc3RB
bmltYXRvcjo6U1ZHQW5pbWF0CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNW
R0FuaW1hdGVkTnVtYmVyTGlzdEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0
cmluZyYgc3RyaW5nKQogewotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBl
OjpjcmVhdGVOdW1iZXJMaXN0KHN0ZDo6bWFrZV91bmlxdWU8U1ZHTnVtYmVyTGlzdFZhbHVlcz4o
KSk7Ci0gICAgYW5pbWF0ZWRUeXBlLT5udW1iZXJMaXN0KCkucGFyc2Uoc3RyaW5nKTsKLSAgICBy
ZXR1cm4gYW5pbWF0ZWRUeXBlOworICAgIGF1dG8gdmFsdWVzID0gU1ZHUHJvcGVydHlUcmFpdHM8
U1ZHTnVtYmVyTGlzdFZhbHVlcz46OmZyb21TdHJpbmcoc3RyaW5nKTsKKyAgICByZXR1cm4gU1ZH
QW5pbWF0ZWRUeXBlOjpjcmVhdGVOdW1iZXJMaXN0KHN0ZDo6bWFrZV91bmlxdWU8U1ZHTnVtYmVy
TGlzdFZhbHVlcz4oV1RGTW92ZSh2YWx1ZXMpKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdB
bmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkTnVtYmVyTGlzdEFuaW1hdG9yOjpzdGFydEFuaW1WYWxB
bmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5
cGVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxO
dW1iZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZE51
bWJlck9wdGlvbmFsTnVtYmVyLmNwcAkocmV2aXNpb24gMjI4NzE4KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMywxMyArMzMsOCBAQCBTVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyQW5pbWF0
b3I6CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkTnVtYmVy
T3B0aW9uYWxOdW1iZXJBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZykKIHsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3Jl
YXRlTnVtYmVyT3B0aW9uYWxOdW1iZXIoc3RkOjptYWtlX3VuaXF1ZTxzdGQ6OnBhaXI8ZmxvYXQs
IGZsb2F0Pj4oKSk7Ci0gICAgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4mIGFuaW1hdGVkTnVtYmVy
ID0gYW5pbWF0ZWRUeXBlLT5udW1iZXJPcHRpb25hbE51bWJlcigpOwotICAgIGlmICghcGFyc2VO
dW1iZXJPcHRpb25hbE51bWJlcihzdHJpbmcsIGFuaW1hdGVkTnVtYmVyLmZpcnN0LCBhbmltYXRl
ZE51bWJlci5zZWNvbmQpKSB7Ci0gICAgICAgIGFuaW1hdGVkTnVtYmVyLmZpcnN0ID0gMDsKLSAg
ICAgICAgYW5pbWF0ZWROdW1iZXIuc2Vjb25kID0gMDsKLSAgICB9Ci0gICAgcmV0dXJuIGFuaW1h
dGVkVHlwZTsKKyAgICBhdXRvIHZhbHVlcyA9IFNWR1Byb3BlcnR5VHJhaXRzPHN0ZDo6cGFpcjxm
bG9hdCwgZmxvYXQ+Pjo6ZnJvbVN0cmluZyhzdHJpbmcpOworICAgIHJldHVybiBTVkdBbmltYXRl
ZFR5cGU6OmNyZWF0ZU51bWJlck9wdGlvbmFsTnVtYmVyKHN0ZDo6bWFrZV91bmlxdWU8c3RkOjpw
YWlyPGZsb2F0LCBmbG9hdD4+KHZhbHVlcykpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5p
bWF0ZWRUeXBlPiBTVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyQW5pbWF0b3I6OnN0YXJ0
QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFu
aW1hdGVkVHlwZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQYXRoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQYXRoLmNwcAko
cmV2aXNpb24gMjI4NzE4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUGF0aC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDYgQEAKIAogI2luY2x1ZGUgIlNWR0FuaW1h
dGVFbGVtZW50QmFzZS5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0
eVRlYXJPZmYuaCIKLSNpbmNsdWRlICJTVkdQYXRoVXRpbGl0aWVzLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtMzMsOSArMzIsOCBAQCBTVkdBbmltYXRlZFBhdGhBbmltYXRvcjo6U1ZH
QW5pbWF0ZWRQYXRoCiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1h
dGVkUGF0aEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5n
KQogewotICAgIGF1dG8gYnl0ZVN0cmVhbSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHUGF0aEJ5dGVT
dHJlYW0+KCk7Ci0gICAgYnVpbGRTVkdQYXRoQnl0ZVN0cmVhbUZyb21TdHJpbmcoc3RyaW5nLCAq
Ynl0ZVN0cmVhbSwgVW5hbHRlcmVkUGFyc2luZyk7Ci0gICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlw
ZTo6Y3JlYXRlUGF0aChXVEZNb3ZlKGJ5dGVTdHJlYW0pKTsKKyAgICBhdXRvIHZhbHVlID0gU1ZH
UHJvcGVydHlUcmFpdHM8U1ZHUGF0aEJ5dGVTdHJlYW0+Ojpmcm9tU3RyaW5nKHN0cmluZyk7Cisg
ICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUGF0aChzdGQ6Om1ha2VfdW5pcXVlPFNW
R1BhdGhCeXRlU3RyZWFtPihXVEZNb3ZlKHZhbHVlKSkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8
U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFBhdGhBbmltYXRvcjo6c3RhcnRBbmltVmFsQW5p
bWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBl
cykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFBvaW50TGlzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUG9pbnRMaXN0LmNwcAko
cmV2aXNpb24gMjI4NzE4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUG9pbnRM
aXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsOCBAQCBTVkdBbmltYXRlZFBvaW50
TGlzdEFuaW1hdG9yOjpTVkdBbmltYXRlCiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5
cGU+IFNWR0FuaW1hdGVkUG9pbnRMaXN0QW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29u
c3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRl
ZFR5cGU6OmNyZWF0ZVBvaW50TGlzdChzdGQ6Om1ha2VfdW5pcXVlPFNWR1BvaW50TGlzdFZhbHVl
cz4oKSk7Ci0gICAgcG9pbnRzTGlzdEZyb21TVkdEYXRhKGFuaW1hdGVkVHlwZS0+cG9pbnRMaXN0
KCksIHN0cmluZyk7Ci0gICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKKyAgICBhdXRvIHZhbHVlcyA9
IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1BvaW50TGlzdFZhbHVlcz46OmZyb21TdHJpbmcoc3RyaW5n
KTsKKyAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVQb2ludExpc3Qoc3RkOjptYWtl
X3VuaXF1ZTxTVkdQb2ludExpc3RWYWx1ZXM+KFdURk1vdmUodmFsdWVzKSkpOwogfQogCiBzdGQ6
OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFBvaW50TGlzdEFuaW1hdG9y
OjpzdGFydEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlM
aXN0JiBhbmltYXRlZFR5cGVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVk
UHJlc2VydmVBc3BlY3RSYXRpby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5jcHAJKHJldmlzaW9uIDIyODcxOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSw4IEBAIFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RS
YXRpb0FuaW1hdG9yOjoKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5p
bWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29u
c3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRl
ZFR5cGU6OmNyZWF0ZVByZXNlcnZlQXNwZWN0UmF0aW8oc3RkOjptYWtlX3VuaXF1ZTxTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWU+KCkpOwotICAgIGFuaW1hdGVkVHlwZS0+cHJlc2VydmVBc3Bl
Y3RSYXRpbygpLnBhcnNlKHN0cmluZyk7Ci0gICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKKyAgICBh
dXRvIHZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
Pjo6ZnJvbVN0cmluZyhzdHJpbmcpOworICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0
ZVByZXNlcnZlQXNwZWN0UmF0aW8oc3RkOjptYWtlX3VuaXF1ZTxTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvVmFsdWU+KHZhbHVlKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+
IFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpb0FuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmlt
YXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVz
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUmVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUmVjdC5jcHAJKHJldmlzaW9uIDIy
ODcxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFJlY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw5ICszMiw4IEBAIFNWR0FuaW1hdGVkUmVjdEFuaW1hdG9yOjpTVkdBbmlt
YXRlZFJlY3QKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRS
ZWN0QW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7
Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVJlY3Qoc3Rk
OjptYWtlX3VuaXF1ZTxGbG9hdFJlY3Q+KCkpOwotICAgIHBhcnNlUmVjdChzdHJpbmcsIGFuaW1h
dGVkVHlwZS0+cmVjdCgpKTsKLSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOworICAgIGF1dG8gdmFs
dWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFJlY3Q+Ojpmcm9tU3RyaW5nKHN0cmluZyk7Cisg
ICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUmVjdChzdGQ6Om1ha2VfdW5pcXVlPEZs
b2F0UmVjdD4odmFsdWUpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4g
U1ZHQW5pbWF0ZWRSZWN0QW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdF
bGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFN0cmluZy5jcHAJKHJldmlzaW9uIDIyODcxOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFN0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDkgKzMxLDggQEAgU1ZHQW5pbWF0ZWRTdHJpbmdBbmltYXRvcjo6U1ZHQW5pbWF0ZWRTdAog
CiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFN0cmluZ0FuaW1h
dG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGF1
dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVTdHJpbmcoc3RkOjptYWtl
X3VuaXF1ZTxTdHJpbmc+KCkpOwotICAgIGFuaW1hdGVkVHlwZS0+c3RyaW5nKCkgPSBzdHJpbmc7
Ci0gICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKKyAgICBhdXRvIHZhbHVlID0gU1ZHUHJvcGVydHlU
cmFpdHM8U3RyaW5nPjo6ZnJvbVN0cmluZyhzdHJpbmcpOworICAgIHJldHVybiBTVkdBbmltYXRl
ZFR5cGU6OmNyZWF0ZVN0cmluZyhzdGQ6Om1ha2VfdW5pcXVlPFN0cmluZz4odmFsdWUpKTsKIH0K
IAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRTdHJpbmdBbmlt
YXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3Bl
cnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlZFRyYW5zZm9ybUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuY3BwCShyZXZpc2lvbiAyMjg3MTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDEsMTAgKzQxLDkgQEAgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0QW5pbWF0b3I6OlNWR0Fu
aQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFRyYW5zZm9y
bUxpc3RBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykK
IHsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlVHJhbnNm
b3JtTGlzdChzdGQ6Om1ha2VfdW5pcXVlPFNWR1RyYW5zZm9ybUxpc3RWYWx1ZXM+KCkpOwotICAg
IGFuaW1hdGVkVHlwZS0+dHJhbnNmb3JtTGlzdCgpLnBhcnNlKG1fdHJhbnNmb3JtVHlwZVN0cmlu
ZyArIHN0cmluZyArICcpJyk7Ci0gICAgQVNTRVJUKGFuaW1hdGVkVHlwZS0+dHJhbnNmb3JtTGlz
dCgpLnNpemUoKSA8PSAxKTsKLSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOworICAgIGF1dG8gdmFs
dWVzID0gU1ZHUHJvcGVydHlUcmFpdHM8U1ZHVHJhbnNmb3JtTGlzdFZhbHVlcz46OmZyb21TdHJp
bmcobV90cmFuc2Zvcm1UeXBlU3RyaW5nICsgc3RyaW5nICsgJyknKTsKKyAgICBBU1NFUlQodmFs
dWVzLnNpemUoKSA8PSAxKTsKKyAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVUcmFu
c2Zvcm1MaXN0KHN0ZDo6bWFrZV91bmlxdWU8U1ZHVHJhbnNmb3JtTGlzdFZhbHVlcz4oV1RGTW92
ZSh2YWx1ZXMpKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0Fu
aW1hdGVkVHJhbnNmb3JtTGlzdEFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24oY29uc3Qg
U1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdMZW5ndGguaAkocmV2aXNpb24gMjI4NzE4KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0xlbmd0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMSArNTcsNiBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0xlbmd0aChpbml0aWFsVmFsdWUpKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgUmVmPFNWR0xlbmd0aD4gY3JlYXRlKGNvbnN0IFNWR0xlbmd0aFZh
bHVlKiBpbml0aWFsVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
VkdMZW5ndGgoaW5pdGlhbFZhbHVlKSk7Ci0gICAgfQotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxTVkdMZW5ndGg+PiBjcmVhdGUoRXhjZXB0aW9uT3I8
VD4mJiBpbml0aWFsVmFsdWUpCiAgICAgewogICAgICAgICBpZiAoaW5pdGlhbFZhbHVlLmhhc0V4
Y2VwdGlvbigpKQpAQCAtMTYyLDExICsxNTcsNiBAQCBwcml2YXRlOgogICAgICAgICA6IFNWR1By
b3BlcnR5VGVhck9mZjxTVkdMZW5ndGhWYWx1ZT4oaW5pdGlhbFZhbHVlKQogICAgIHsKICAgICB9
Ci0KLSAgICBleHBsaWNpdCBTVkdMZW5ndGgoY29uc3QgU1ZHTGVuZ3RoVmFsdWUqIGluaXRpYWxW
YWx1ZSkKLSAgICAgICAgOiBTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHTGVuZ3RoVmFsdWU+KGluaXRp
YWxWYWx1ZSkKLSAgICB7Ci0gICAgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aExpc3RWYWx1ZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoTGlzdFZhbHVlcy5oCShyZXZpc2lvbiAyMjg3
MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoTGlzdFZhbHVlcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCwxMyArMzQsMjYgQEAgcHVibGljOgogICAgIFN0cmluZyB2YWx1ZUFzU3Ry
aW5nKCkgY29uc3Q7CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxT
VkdMZW5ndGhMaXN0VmFsdWVzPiB7Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFp
dHM8U1ZHTGVuZ3RoTGlzdFZhbHVlcz4geworICAgIHN0YXRpYyBTVkdMZW5ndGhMaXN0VmFsdWVz
IGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIHsgfTsgfQorICAgIHN0YXRpYyBTVkdMZW5ndGhMaXN0
VmFsdWVzIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIFNWR0xlbmd0aE1vZGUgbGVu
Z3RoTW9kZSkKKyAgICB7CisgICAgICAgIFNWR0xlbmd0aExpc3RWYWx1ZXMgbGlzdDsKKyAgICAg
ICAgbGlzdC5wYXJzZShzdHJpbmcsIGxlbmd0aE1vZGUpOworICAgICAgICByZXR1cm4gbGlzdDsK
KyAgICB9CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8U1ZHTGVuZ3RoTGlzdFZhbHVlcz4gcGFy
c2UoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQor
ICAgIHsKKyAgICAgICAgU1ZHTGVuZ3RoTGlzdFZhbHVlcyBsaXN0OworICAgICAgICBsaXN0LnBh
cnNlKHN0cmluZywgU1ZHTGVuZ3RoVmFsdWU6Omxlbmd0aE1vZGVGb3JBbmltYXRlZExlbmd0aEF0
dHJpYnV0ZShhdHRyTmFtZSkpOworICAgICAgICByZXR1cm4gbGlzdDsKKyAgICB9CisgICAgc3Rh
dGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBTVkdMZW5ndGhMaXN0VmFsdWVzJiB0eXBlKSB7IHJl
dHVybiB0eXBlLnZhbHVlQXNTdHJpbmcoKTsgfQorCiAgICAgdXNpbmcgTGlzdEl0ZW1UeXBlID0g
U1ZHTGVuZ3RoVmFsdWU7CiAgICAgdXNpbmcgTGlzdEl0ZW1UZWFyT2ZmID0gU1ZHTGVuZ3RoOwog
ICAgIHVzaW5nIExpc3RQcm9wZXJ0eVRlYXJPZmYgPSBTVkdMZW5ndGhMaXN0OwotCi0gICAgc3Rh
dGljIFNWR0xlbmd0aExpc3RWYWx1ZXMgaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gIHsgfTsgfQot
ICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoY29uc3QgU1ZHTGVuZ3RoTGlzdFZhbHVlcyYgdHlw
ZSkgeyByZXR1cm4gdHlwZS52YWx1ZUFzU3RyaW5nKCk7IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuaAkocmV2aXNp
b24gMjI4NzE4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjksNzUgKzI5LDEwIEBACiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgog
I2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKICNpbmNsdWRlICJTVkdG
aXRUb1ZpZXdCb3guaCIKKyNpbmNsdWRlICJTVkdNYXJrZXJUeXBlcy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWVudW0gU1ZHTWFya2VyVW5pdHNUeXBlIHsKLSAgICBTVkdNYXJrZXJVbml0
c1Vua25vd24gPSAwLAotICAgIFNWR01hcmtlclVuaXRzVXNlclNwYWNlT25Vc2UsCi0gICAgU1ZH
TWFya2VyVW5pdHNTdHJva2VXaWR0aAotfTsKLQotZW51bSBTVkdNYXJrZXJPcmllbnRUeXBlIHsK
LSAgICBTVkdNYXJrZXJPcmllbnRVbmtub3duID0gMCwKLSAgICBTVkdNYXJrZXJPcmllbnRBdXRv
LAotICAgIFNWR01hcmtlck9yaWVudEFuZ2xlLAotICAgIFNWR01hcmtlck9yaWVudEF1dG9TdGFy
dFJldmVyc2UsCi0KLSAgICAvLyBBZGQgbmV3IGVsZW1lbnRzIGJlZm9yZSBoZXJlLgotICAgIFNW
R01hcmtlck9yaWVudE1heAotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IFNWR1Byb3BlcnR5VHJh
aXRzPFNWR01hcmtlclVuaXRzVHlwZT4gewotICAgIHN0YXRpYyB1bnNpZ25lZCBoaWdoZXN0RW51
bVZhbHVlKCkgeyByZXR1cm4gU1ZHTWFya2VyVW5pdHNTdHJva2VXaWR0aDsgfQotCi0gICAgc3Rh
dGljIFN0cmluZyB0b1N0cmluZyhTVkdNYXJrZXJVbml0c1R5cGUgdHlwZSkKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIFNWR01hcmtlclVuaXRzVW5rbm93bjoK
LSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICBjYXNlIFNWR01hcmtl
clVuaXRzVXNlclNwYWNlT25Vc2U6Ci0gICAgICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ1
c2VyU3BhY2VPblVzZSIpOwotICAgICAgICBjYXNlIFNWR01hcmtlclVuaXRzU3Ryb2tlV2lkdGg6
Ci0gICAgICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJzdHJva2VXaWR0aCIpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwotICAgIH0KLQotICAgIHN0YXRpYyBTVkdNYXJrZXJVbml0c1R5cGUgZnJvbVN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlID09ICJ1
c2VyU3BhY2VPblVzZSIpCi0gICAgICAgICAgICByZXR1cm4gU1ZHTWFya2VyVW5pdHNVc2VyU3Bh
Y2VPblVzZTsKLSAgICAgICAgaWYgKHZhbHVlID09ICJzdHJva2VXaWR0aCIpCi0gICAgICAgICAg
ICByZXR1cm4gU1ZHTWFya2VyVW5pdHNTdHJva2VXaWR0aDsKLSAgICAgICAgcmV0dXJuIFNWR01h
cmtlclVuaXRzVW5rbm93bjsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgdW5zaWdu
ZWQgU1ZHSURMRW51bUxpbWl0czxTVkdNYXJrZXJPcmllbnRUeXBlPjo6aGlnaGVzdEV4cG9zZWRF
bnVtVmFsdWUoKSB7IHJldHVybiBTVkdNYXJrZXJPcmllbnRBbmdsZTsgfQotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxTVkdNYXJrZXJPcmllbnRUeXBlPiB7Ci0gICAgc3Rh
dGljIHVuc2lnbmVkIGhpZ2hlc3RFbnVtVmFsdWUoKSB7IHJldHVybiBTVkdNYXJrZXJPcmllbnRB
dXRvU3RhcnRSZXZlcnNlOyB9Ci0KLSAgICAvLyB0b1N0cmluZyBpcyBub3QgbmVlZGVkLCBzeW5j
aHJvbml6ZU9yaWVudFR5cGUoKSBoYW5kbGVzIHRoaXMgb24gaXRzIG93bi4KLQotICAgIHN0YXRp
YyBTVkdNYXJrZXJPcmllbnRUeXBlIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSwgU1ZH
QW5nbGVWYWx1ZSYgYW5nbGUpCi0gICAgewotICAgICAgICBpZiAodmFsdWUgPT0gImF1dG8iKQot
ICAgICAgICAgICAgcmV0dXJuIFNWR01hcmtlck9yaWVudEF1dG87Ci0gICAgICAgIGlmICh2YWx1
ZSA9PSAiYXV0by1zdGFydC1yZXZlcnNlIikKLSAgICAgICAgICAgIHJldHVybiBTVkdNYXJrZXJP
cmllbnRBdXRvU3RhcnRSZXZlcnNlOwotICAgICAgICBhdXRvIHNldFZhbHVlUmVzdWx0ID0gYW5n
bGUuc2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7Ci0gICAgICAgIGlmIChzZXRWYWx1ZVJlc3VsdC5o
YXNFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBTVkdNYXJrZXJPcmllbnRVbmtub3du
OwotICAgICAgICByZXR1cm4gU1ZHTWFya2VyT3JpZW50QW5nbGU7Ci0gICAgfQotfTsKLQogY2xh
c3MgU1ZHTWFya2VyRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBTVkdFbGVtZW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdGaXRUb1ZpZXdCb3gg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlclR5cGVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlclR5cGVzLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlclR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTVkdBbmdsZVZhbHVlLmgiCisjaW5jbHVkZSAi
U1ZHUHJvcGVydHlUcmFpdHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIFNWR01h
cmtlclVuaXRzVHlwZSB7CisgICAgU1ZHTWFya2VyVW5pdHNVbmtub3duID0gMCwKKyAgICBTVkdN
YXJrZXJVbml0c1VzZXJTcGFjZU9uVXNlLAorICAgIFNWR01hcmtlclVuaXRzU3Ryb2tlV2lkdGgK
K307CisKK2VudW0gU1ZHTWFya2VyT3JpZW50VHlwZSB7CisgICAgU1ZHTWFya2VyT3JpZW50VW5r
bm93biA9IDAsCisgICAgU1ZHTWFya2VyT3JpZW50QXV0bywKKyAgICBTVkdNYXJrZXJPcmllbnRB
bmdsZSwKKyAgICBTVkdNYXJrZXJPcmllbnRBdXRvU3RhcnRSZXZlcnNlLAorICAgIAorICAgIC8v
IEFkZCBuZXcgZWxlbWVudHMgYmVmb3JlIGhlcmUuCisgICAgU1ZHTWFya2VyT3JpZW50TWF4Cit9
OworICAgIAordGVtcGxhdGU8Pgorc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPFNWR01hcmtlclVu
aXRzVHlwZT4geworICAgIHN0YXRpYyB1bnNpZ25lZCBoaWdoZXN0RW51bVZhbHVlKCkgeyByZXR1
cm4gU1ZHTWFya2VyVW5pdHNTdHJva2VXaWR0aDsgfQorICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJp
bmcoU1ZHTWFya2VyVW5pdHNUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBTVkdNYXJrZXJVbml0c1Vua25vd246CisgICAgICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgY2FzZSBTVkdNYXJrZXJVbml0c1VzZXJTcGFjZU9u
VXNlOgorICAgICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgidXNlclNwYWNlT25Vc2UiKTsK
KyAgICAgICAgY2FzZSBTVkdNYXJrZXJVbml0c1N0cm9rZVdpZHRoOgorICAgICAgICAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgic3Ryb2tlV2lkdGgiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OworICAgIH0KKyAgICBzdGF0aWMgU1ZHTWFya2VyVW5pdHNUeXBlIGZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSA9PSAidXNlclNwYWNlT25V
c2UiKQorICAgICAgICAgICAgcmV0dXJuIFNWR01hcmtlclVuaXRzVXNlclNwYWNlT25Vc2U7Cisg
ICAgICAgIGlmICh2YWx1ZSA9PSAic3Ryb2tlV2lkdGgiKQorICAgICAgICAgICAgcmV0dXJuIFNW
R01hcmtlclVuaXRzU3Ryb2tlV2lkdGg7CisgICAgICAgIHJldHVybiBTVkdNYXJrZXJVbml0c1Vu
a25vd247CisgICAgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRz
PFNWR01hcmtlck9yaWVudFR5cGU+IHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGlnaGVzdEVudW1W
YWx1ZSgpIHsgcmV0dXJuIFNWR01hcmtlck9yaWVudEF1dG9TdGFydFJldmVyc2U7IH0KKyAgICBz
dGF0aWMgU1ZHTWFya2VyT3JpZW50VHlwZSBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUs
IFNWR0FuZ2xlVmFsdWUmIGFuZ2xlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlID09ICJhdXRv
IikKKyAgICAgICAgICAgIHJldHVybiBTVkdNYXJrZXJPcmllbnRBdXRvOworICAgICAgICBpZiAo
dmFsdWUgPT0gImF1dG8tc3RhcnQtcmV2ZXJzZSIpCisgICAgICAgICAgICByZXR1cm4gU1ZHTWFy
a2VyT3JpZW50QXV0b1N0YXJ0UmV2ZXJzZTsKKyAgICAgICAgYXV0byBzZXRWYWx1ZVJlc3VsdCA9
IGFuZ2xlLnNldFZhbHVlQXNTdHJpbmcodmFsdWUpOworICAgICAgICBpZiAoc2V0VmFsdWVSZXN1
bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gU1ZHTWFya2VyT3JpZW50VW5r
bm93bjsKKyAgICAgICAgcmV0dXJuIFNWR01hcmtlck9yaWVudEFuZ2xlOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4KK2lubGluZSB1bnNpZ25lZCBTVkdJRExFbnVtTGltaXRzPFNWR01hcmtlck9y
aWVudFR5cGU+OjpoaWdoZXN0RXhwb3NlZEVudW1WYWx1ZSgpIHsgcmV0dXJuIFNWR01hcmtlck9y
aWVudEFuZ2xlOyB9CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxzdGQ6
OnBhaXI8U1ZHQW5nbGVWYWx1ZSwgdW5zaWduZWQ+PiB7CisgICAgc3RhdGljIHN0ZDo6cGFpcjxT
VkdBbmdsZVZhbHVlLCB1bnNpZ25lZD4gZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykK
KyAgICB7CisgICAgICAgIFNWR0FuZ2xlVmFsdWUgYW5nbGU7CisgICAgICAgIFNWR01hcmtlck9y
aWVudFR5cGUgb3JpZW50VHlwZSA9IFNWR1Byb3BlcnR5VHJhaXRzPFNWR01hcmtlck9yaWVudFR5
cGU+Ojpmcm9tU3RyaW5nKHN0cmluZywgYW5nbGUpOworICAgICAgICBpZiAob3JpZW50VHlwZSAh
PSBTVkdNYXJrZXJPcmllbnRBbmdsZSkKKyAgICAgICAgICAgIGFuZ2xlID0geyB9OworICAgICAg
ICByZXR1cm4gc3RkOjpwYWlyPFNWR0FuZ2xlVmFsdWUsIHVuc2lnbmVkPihhbmdsZSwgb3JpZW50
VHlwZSk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR01hdHJpeC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdNYXRyaXguaAkocmV2aXNpb24gMjI4NzE4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R01hdHJpeC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMSArNDMsNiBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR01hdHJpeChpbml0aWFsVmFsdWUpKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgUmVmPFNWR01hdHJpeD4gY3JlYXRlKGNvbnN0IFNWR01hdHJpeFZhbHVl
KiBpbml0aWFsVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdN
YXRyaXgoaW5pdGlhbFZhbHVlKSk7Ci0gICAgfQotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxTVkdNYXRyaXg+PiBjcmVhdGUoRXhjZXB0aW9uT3I8VD4m
JiBpbml0aWFsVmFsdWUpCiAgICAgewogICAgICAgICBpZiAoaW5pdGlhbFZhbHVlLmhhc0V4Y2Vw
dGlvbigpKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR051bWJlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXIuaAkocmV2aXNpb24gMjI4NzE4KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR051bWJlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSAr
NDEsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR051bWJlcihp
bml0aWFsVmFsdWUpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgUmVmPFNWR051bWJlcj4gY3JlYXRl
KGNvbnN0IGZsb2F0KiBpbml0aWFsVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTVkdOdW1iZXIoaW5pdGlhbFZhbHVlKSk7Ci0gICAgfQotCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxTVkdOdW1iZXI+PiBjcmVhdGUoRXhj
ZXB0aW9uT3I8VD4mJiBpbml0aWFsVmFsdWUpCiAgICAgewogICAgICAgICBpZiAoaW5pdGlhbFZh
bHVlLmhhc0V4Y2VwdGlvbigpKQpAQCAtNzksMTEgKzc0LDYgQEAgcHJpdmF0ZToKICAgICAgICAg
OiBTVkdQcm9wZXJ0eVRlYXJPZmY8ZmxvYXQ+KGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAgfQot
Ci0gICAgZXhwbGljaXQgU1ZHTnVtYmVyKGNvbnN0IGZsb2F0KiBpbml0aWFsVmFsdWUpCi0gICAg
ICAgIDogU1ZHUHJvcGVydHlUZWFyT2ZmPGZsb2F0Pihpbml0aWFsVmFsdWUpCi0gICAgewotICAg
IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdOdW1iZXJMaXN0VmFsdWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR051bWJlckxpc3RWYWx1ZXMuaAkocmV2aXNpb24gMjI4NzE4KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR051bWJlckxpc3RWYWx1ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYs
MTIgQEAgcHVibGljOgogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxTVkdO
dW1iZXJMaXN0VmFsdWVzPiB7CiAgICAgc3RhdGljIFNWR051bWJlckxpc3RWYWx1ZXMgaW5pdGlh
bFZhbHVlKCkgeyByZXR1cm4geyB9OyB9CisgICAgc3RhdGljIFNWR051bWJlckxpc3RWYWx1ZXMg
ZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAgICAgIFNWR051bWJl
ckxpc3RWYWx1ZXMgbGlzdDsKKyAgICAgICAgbGlzdC5wYXJzZShzdHJpbmcpOworICAgICAgICBy
ZXR1cm4gbGlzdDsKKyAgICB9CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBTVkdO
dW1iZXJMaXN0VmFsdWVzJiBsaXN0KSB7IHJldHVybiBsaXN0LnZhbHVlQXNTdHJpbmcoKTsgfQog
CiAgICAgdXNpbmcgTGlzdEl0ZW1UeXBlID0gZmxvYXQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjI4NzE4KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyAr
Miw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgVGhlIEthcmJvbiBEZXZlbG9wZXJz
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGFuZGVyIEtlbGxldHQgPGx5cGFub3ZAa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjE5LDYgKzIxOSwzMSBAQCBib29s
IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoY29uc3QgU3RyCiAgICAgcmV0dXJuIGN1ciA9PSBl
bmQ7CiB9CiAKK2Jvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMsIEZsb2F0UG9pbnQmIHBv
aW50KQoreworICAgIGlmIChzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhzKS51cGNvbnZlcnRlZENo
YXJhY3RlcnMoKTsKKyAgICBjb25zdCBVQ2hhciogY3VyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
OworICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjdXIgKyBzLmxlbmd0aCgpOworCisgICAgaWYgKCFz
a2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBmbG9hdCB4ID0gMDsKKyAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCB4KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZmxvYXQgeSA9IDA7CisgICAgaWYgKCFwYXJzZU51
bWJlcihjdXIsIGVuZCwgeSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHBvaW50ID0g
RmxvYXRQb2ludCh4LCB5KTsKKworICAgIC8vIERpc2FsbG93IGFueXRoaW5nIGV4Y2VwdCBzcGFj
ZXMgYXQgdGhlIGVuZC4KKyAgICByZXR1cm4gIXNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVu
ZCk7Cit9CisKIGJvb2wgcGFyc2VSZWN0KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGbG9hdFJlY3Qm
IHJlY3QpCiB7CiAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHN0
cmluZykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGFyc2VyVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhcnNlclV0aWxpdGllcy5oCShyZXZpc2lvbiAyMjg3MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAg
Ym9vbCBwYXJzZU51bWJlckZyb21TdHJpbmcoY29uc3QgU3RyaW5nJgogYm9vbCBwYXJzZU51bWJl
ck9wdGlvbmFsTnVtYmVyKGNvbnN0IFN0cmluZyYgcywgZmxvYXQmIGgsIGZsb2F0JiB2KTsKIGJv
b2wgcGFyc2VBcmNGbGFnKGNvbnN0IExDaGFyKiYgcHRyLCBjb25zdCBMQ2hhciogZW5kLCBib29s
JiBmbGFnKTsKIGJvb2wgcGFyc2VBcmNGbGFnKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hh
ciogZW5kLCBib29sJiBmbGFnKTsKK2Jvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmLCBGbG9h
dFBvaW50Jik7CiBib29sIHBhcnNlUmVjdChjb25zdCBTdHJpbmcmLCBGbG9hdFJlY3QmKTsKIAog
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aEJ5dGVTdHJlYW0uaAkocmV2aXNpb24gMjI4NzE4KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTksNiArMjAsOCBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIlNWR1BhdGhVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJT
VkdQcm9wZXJ0eVRyYWl0cy5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNDYsMzQgKzQ5LDQ3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIERhdGE6
OmNvbnN0X2l0ZXJhdG9yIERhdGFJdGVyYXRvcjsKIAogICAgIFNWR1BhdGhCeXRlU3RyZWFtKCkg
eyB9Ci0gICAgU1ZHUGF0aEJ5dGVTdHJlYW0oY29uc3QgRGF0YSYgZGF0YSkgOiBtX2RhdGEoZGF0
YSkgeyB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNWR1BhdGhCeXRlU3RyZWFt
JiBvdGhlcikgY29uc3QKKyAgICBTVkdQYXRoQnl0ZVN0cmVhbShjb25zdCBTVkdQYXRoQnl0ZVN0
cmVhbSYgb3RoZXIpCiAgICAgewotICAgICAgICByZXR1cm4gbV9kYXRhID09IG90aGVyLm1fZGF0
YTsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKICAgICB9CiAKLSAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgU1ZHUGF0aEJ5dGVTdHJlYW0mIG90aGVyKSBjb25zdAorICAgIFNWR1BhdGhCeXRlU3Ry
ZWFtKFNWR1BhdGhCeXRlU3RyZWFtJiYgb3RoZXIpCiAgICAgewotICAgICAgICByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7CisgICAgICAgICp0aGlzID0gV1RGTW92ZShvdGhlcik7CiAgICAgfQog
CisgICAgU1ZHUGF0aEJ5dGVTdHJlYW0mIG9wZXJhdG9yPShjb25zdCBTVkdQYXRoQnl0ZVN0cmVh
bSYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCisgICAgICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgICAgIG1fZGF0YSA9IG90aGVyLm1fZGF0YTsKKyAgICAgICAg
cmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFNWR1BhdGhCeXRlU3RyZWFtJiBvcGVyYXRvcj0o
U1ZHUGF0aEJ5dGVTdHJlYW0mJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICgqdGhpcyA9PSBv
dGhlcikKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgbV9kYXRhID0gV1RGTW92
ZShvdGhlci5tX2RhdGEpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFNWR1BhdGhCeXRlU3RyZWFtJiBvdGhlcikgY29uc3QgeyByZXR1
cm4gbV9kYXRhID09IG90aGVyLm1fZGF0YTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBT
VkdQYXRoQnl0ZVN0cmVhbSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OyB9CisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+IGNvcHkoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8U1ZHUGF0aEJ5dGVTdHJl
YW0+KG1fZGF0YSk7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFNWR1BhdGhCeXRl
U3RyZWFtPigqdGhpcyk7CiAgICAgfQogCiAgICAgRGF0YUl0ZXJhdG9yIGJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhLmJlZ2luKCk7IH0KICAgICBEYXRhSXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhLmVuZCgpOyB9CiAKICAgICB2b2lkIGFwcGVuZCh1bnNpZ25lZCBjaGFy
IGJ5dGUpIHsgbV9kYXRhLmFwcGVuZChieXRlKTsgfQotICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNW
R1BhdGhCeXRlU3RyZWFtJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byBzdHJlYW0g
OiBvdGhlcikKLSAgICAgICAgICAgIGFwcGVuZChzdHJlYW0pOwotICAgIH0KKyAgICB2b2lkIGFw
cGVuZChjb25zdCBTVkdQYXRoQnl0ZVN0cmVhbSYgb3RoZXIpIHsgbV9kYXRhLmFwcGVuZFZlY3Rv
cihvdGhlci5tX2RhdGEpOyB9CiAgICAgdm9pZCBjbGVhcigpIHsgbV9kYXRhLmNsZWFyKCk7IH0K
LSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9kYXRhLnNpemUoKTsgfQorICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pc0VtcHR5KCk7IH0KICAgICB1
bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnNpemUoKTsgfQogCiAgICAgLy8g
T25seSBkZWZpbmVkIHRvIGxldCBTVkdBbmltYXRlZFBhdGhBbmltYXRvciB1c2UgdGhlIHN0YW5k
YXJkIGxpc3QgY29kZSBwYXRocyAtIHRoaXMgbWV0aG9kIGlzIG5ldmVyIGNhbGxlZC4KQEAgLTgz
LDQgKzk5LDE1IEBAIHByaXZhdGU6CiAgICAgRGF0YSBtX2RhdGE7CiB9OwogCit0ZW1wbGF0ZTw+
CitzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8U1ZHUGF0aEJ5dGVTdHJlYW0+IHsKKyAgICBzdGF0
aWMgU1ZHUGF0aEJ5dGVTdHJlYW0gaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gU1ZHUGF0aEJ5dGVT
dHJlYW0oKTsgfQorICAgIHN0YXRpYyBTVkdQYXRoQnl0ZVN0cmVhbSBmcm9tU3RyaW5nKGNvbnN0
IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgU1ZHUGF0aEJ5dGVTdHJlYW0gYnl0ZVN0
cmVhbTsKKyAgICAgICAgYnVpbGRTVkdQYXRoQnl0ZVN0cmVhbUZyb21TdHJpbmcoc3RyaW5nLCBi
eXRlU3RyZWFtLCBVbmFsdGVyZWRQYXJzaW5nKTsKKyAgICAgICAgcmV0dXJuIGJ5dGVTdHJlYW07
CisgICAgfQorfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjI4NzE4KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsMTUg
KzIwNiwxNSBAQCBib29sIGJ1aWxkQW5pbWF0ZWRTVkdQYXRoQnl0ZVN0cmVhbShjb25zCiAKIGJv
b2wgYWRkVG9TVkdQYXRoQnl0ZVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSYgc3RyZWFtVG9BcHBl
bmRUbywgY29uc3QgU1ZHUGF0aEJ5dGVTdHJlYW0mIGJ5U3RyZWFtLCB1bnNpZ25lZCByZXBlYXRD
b3VudCkKIHsKLSAgICAvLyBXaHkgcmV0dXJuIHdoZW4gc3RyZWFtVG9BcHBlbmRUbyBpcyBlbXB0
eT8gRG9uJ3Qgd2Ugc3RpbGwgbmVlZCB0byBhcHBlbmQ/CisgICAgLy8gVGhlIGJ5U3RyZWFtIHdp
bGwgYmUgYmxlbmRlZCB3aXRoIHN0cmVhbVRvQXBwZW5kVG8uIFNvIHN0cmVhbVRvQXBwZW5kVG8g
aGFzIHRvIGhhdmUgZWxlbWVudHMuCiAgICAgaWYgKHN0cmVhbVRvQXBwZW5kVG8uaXNFbXB0eSgp
IHx8IGJ5U3RyZWFtLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAvLyBJ
cyBpdCBPSyB0byBtYWtlIHRoZSBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIgZnJvbSBhIHN0cmVh
bSwgYW5kIHRoZW4gY2xlYXIgdGhhdCBzdHJlYW0/CisgICAgLy8gYnVpbGRlciBpcyB0aGUgZGVz
dGluYXRpb24gb2YgYmxlbmRpbmcgZnJvbVNvdXJjZSBhbmQgYnlTb3VyY2UuIFRoZSBzdHJlYW0g
b2YgYnVpbGRlcgorICAgIC8vIChpLmUuIHN0cmVhbVRvQXBwZW5kVG8pIGhhcyB0byBiZSBjbGVh
cmVkIGJlZm9yZSBjYWxsaW5nIGFkZEFuaW1hdGVkUGF0aC4KICAgICBTVkdQYXRoQnl0ZVN0cmVh
bUJ1aWxkZXIgYnVpbGRlcihzdHJlYW1Ub0FwcGVuZFRvKTsKIAotICAgIFNWR1BhdGhCeXRlU3Ry
ZWFtIGZyb21TdHJlYW1Db3B5ID0gc3RyZWFtVG9BcHBlbmRUbzsKLSAgICBzdHJlYW1Ub0FwcGVu
ZFRvLmNsZWFyKCk7CisgICAgU1ZHUGF0aEJ5dGVTdHJlYW0gZnJvbVN0cmVhbUNvcHkgPSBXVEZN
b3ZlKHN0cmVhbVRvQXBwZW5kVG8pOwogCiAgICAgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UgZnJv
bVNvdXJjZShmcm9tU3RyZWFtQ29weSk7CiAgICAgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UgYnlT
b3VyY2UoYnlTdHJlYW0pOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50LmgJKHJldmlzaW9uIDIyODcx
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDMsMTEgKzQ0LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdQ
b2ludChpbml0aWFsVmFsdWUpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgUmVmPFNWR1BvaW50PiBj
cmVhdGUoY29uc3QgRmxvYXRQb2ludCogaW5pdGlhbFZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU1ZHUG9pbnQoaW5pdGlhbFZhbHVlKSk7Ci0gICAgfQotCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxTVkdQb2ludD4+IGNy
ZWF0ZShFeGNlcHRpb25PcjxUPiYmIGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChp
bml0aWFsVmFsdWUuaGFzRXhjZXB0aW9uKCkpCkBAIC0xMTMsMTEgKzEwOSw2IEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgOiBTVkdQcm9wZXJ0eVRlYXJPZmY8RmxvYXRQb2ludD4oaW5pdGlhbFZhbHVl
KQogICAgIHsKICAgICB9Ci0KLSAgICBleHBsaWNpdCBTVkdQb2ludChjb25zdCBGbG9hdFBvaW50
KiBpbml0aWFsVmFsdWUpCi0gICAgICAgIDogU1ZHUHJvcGVydHlUZWFyT2ZmPEZsb2F0UG9pbnQ+
KGluaXRpYWxWYWx1ZSkKLSAgICB7Ci0gICAgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50TGlzdFZhbHVlcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3RWYWx1ZXMuaAkocmV2aXNpb24g
MjI4NzE4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50TGlzdFZhbHVlcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw4ICszNCwxNSBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHZhbHVlQXNT
dHJpbmcoKSBjb25zdDsKIH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRz
PFNWR1BvaW50TGlzdFZhbHVlcz4gewordGVtcGxhdGU8Pgorc3RydWN0IFNWR1Byb3BlcnR5VHJh
aXRzPFNWR1BvaW50TGlzdFZhbHVlcz4gewogICAgIHN0YXRpYyBTVkdQb2ludExpc3RWYWx1ZXMg
aW5pdGlhbFZhbHVlKCkgeyByZXR1cm4geyB9OyB9CisgICAgc3RhdGljIFNWR1BvaW50TGlzdFZh
bHVlcyBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgU1ZH
UG9pbnRMaXN0VmFsdWVzIGxpc3Q7CisgICAgICAgIHBvaW50c0xpc3RGcm9tU1ZHRGF0YShsaXN0
LCBzdHJpbmcpOworICAgICAgICByZXR1cm4gbGlzdDsKKyAgICB9CiAKICAgICB1c2luZyBMaXN0
SXRlbVR5cGUgPSBGbG9hdFBvaW50OwogICAgIHVzaW5nIExpc3RJdGVtVGVhck9mZiA9IFNWR1Bv
aW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
Mjg3MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgU1ZHUG9seUVsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKGNvbnMKICAgICAgICAgaWYgKGF1dG8gd3JhcHBlciA9IFNWR0FuaW1hdGVkUHJvcGVydHk6
Omxvb2t1cFdyYXBwZXI8U1ZHUG9seUVsZW1lbnQsIFNWR0FuaW1hdGVkUG9pbnRMaXN0Pih0aGlz
LCBwb2ludHNQcm9wZXJ0eUluZm8oKSkpCiAgICAgICAgICAgICBzdGF0aWNfcG9pbnRlcl9jYXN0
PFNWR0FuaW1hdGVkUG9pbnRMaXN0Pih3cmFwcGVyKS0+ZGV0YWNoTGlzdFdyYXBwZXJzKG5ld0xp
c3Quc2l6ZSgpKTsKIAotICAgICAgICBtX3BvaW50cy52YWx1ZSA9IG5ld0xpc3Q7CisgICAgICAg
IG1fcG9pbnRzLnZhbHVlID0gV1RGTW92ZShuZXdMaXN0KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5o
CShyZXZpc2lvbiAyMjg3MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDExICs0Miw2IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyhpbml0aWFsVmFsdWUp
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgUmVmPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8+IGNyZWF0
ZShjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUqIGluaXRpYWxWYWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8oaW5p
dGlhbFZhbHVlKSk7Ci0gICAgfQotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIEV4
Y2VwdGlvbk9yPFJlZjxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvPj4gY3JlYXRlKEV4Y2VwdGlvbk9y
PFQ+JiYgaW5pdGlhbFZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKGluaXRpYWxWYWx1ZS5oYXNF
eGNlcHRpb24oKSkKQEAgLTEwMCwxMSArOTUsNiBAQCBwcml2YXRlOgogICAgICAgICA6IFNWR1By
b3BlcnR5VGVhck9mZjxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU+KGluaXRpYWxWYWx1ZSkK
ICAgICB7CiAgICAgfQotCi0gICAgZXhwbGljaXQgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyhjb25z
dCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUqIGluaXRpYWxWYWx1ZSkKLSAgICAgICAgOiBT
VkdQcm9wZXJ0eVRlYXJPZmY8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlPihpbml0aWFsVmFs
dWUpCi0gICAgewotICAgIH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3Bw
CShyZXZpc2lvbiAyMjg3MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsMTEgQEAgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZQogewogfQogCitTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZShjb25zdCBTdHJpbmcm
IHZhbHVlKQoreworICAgIHBhcnNlKHZhbHVlKTsKK30KKwogRXhjZXB0aW9uT3I8dm9pZD4gU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpzZXRBbGlnbih1bnNpZ25lZCBzaG9ydCBhbGlnbikK
IHsKICAgICBpZiAoYWxpZ24gPT0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fVU5LTk9XTiB8fCBh
bGlnbiA+IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUFYKQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaAkocmV2aXNpb24g
MjI4NzE4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIHB1YmxpYzoKICAgICB9OwogCiAg
ICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKCk7CisgICAgU1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlKGNvbnN0IFN0cmluZyYpOwogCiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0QWxp
Z24odW5zaWduZWQgc2hvcnQpOwogICAgIHVuc2lnbmVkIHNob3J0IGFsaWduKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbGlnbjsgfQpAQCAtNzcsNyArNzgsMTUgQEAgcHJpdmF0ZToKIAogdGVtcGxhdGU8
PiBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlPiB7
CiAgICAgc3RhdGljIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBpbml0aWFsVmFsdWUoKSB7
IHJldHVybiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoKTsgfQotICAgIHN0YXRpYyBTdHJp
bmcgdG9TdHJpbmcoY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiB0eXBlKSB7IHJl
dHVybiB0eXBlLnZhbHVlQXNTdHJpbmcoKTsgfQorICAgIHN0YXRpYyBTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWUgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAg
ICAgIHJldHVybiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoc3RyaW5nKTsKKworICAgIH0K
KyAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZSYgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0eXBlLnZhbHVlQXNTdHJpbmcoKTsK
KyAgICB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0
LmgJKHJldmlzaW9uIDIyODcxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjAsNyArMjEsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJTVkdQ
cm9wZXJ0eVRlYXJPZmYuaCIKLSNpbmNsdWRlICJTVkdSZWN0VHJhaXRzLmgiCisjaW5jbHVkZSAi
U1ZHUHJvcGVydHlUcmFpdHMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNiwxMSAr
MzcsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR1JlY3QoaW5p
dGlhbFZhbHVlKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFJlZjxTVkdSZWN0PiBjcmVhdGUoY29u
c3QgRmxvYXRSZWN0KiBpbml0aWFsVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTVkdSZWN0KGluaXRpYWxWYWx1ZSkpOwotICAgIH0KLQogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8U1ZHUmVjdD4+IGNyZWF0ZShFeGNlcHRp
b25PcjxUPiYmIGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChpbml0aWFsVmFsdWUu
aGFzRXhjZXB0aW9uKCkpCkBAIC0xMjIsMTEgKzExOCw2IEBAIHByaXZhdGU6CiAgICAgICAgIDog
U1ZHUHJvcGVydHlUZWFyT2ZmPEZsb2F0UmVjdD4oaW5pdGlhbFZhbHVlKQogICAgIHsKICAgICB9
Ci0KLSAgICBleHBsaWNpdCBTVkdSZWN0KGNvbnN0IEZsb2F0UmVjdCogaW5pdGlhbFZhbHVlKQot
ICAgICAgICA6IFNWR1Byb3BlcnR5VGVhck9mZjxGbG9hdFJlY3Q+KGluaXRpYWxWYWx1ZSkKLSAg
ICB7Ci0gICAgfQogfTsKIAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdFRyYWl0
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0VHJhaXRzLmgJKHJl
dmlzaW9uIDIyODcxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0VHJhaXRzLmgJKG5v
bmV4aXN0ZW50KQpAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJTVkdQcm9wZXJ0eVRyYWl0cy5oIgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8RmxvYXRSZWN0PiB7Ci0g
ICAgc3RhdGljIEZsb2F0UmVjdCBpbml0aWFsVmFsdWUoKSB7IHJldHVybiB7IH07IH0KLSAgICBz
dGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IEZsb2F0UmVjdCYgdHlwZSkKLSAgICB7Ci0gICAg
ICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIo
dHlwZS54KCkpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVy
LmFwcGVuZE51bWJlcih0eXBlLnkoKSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0g
ICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKHR5cGUud2lkdGgoKSk7Ci0gICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKHR5cGUuaGVpZ2h0
KCkpOwotICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotICAgIH0KLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zv
cm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmgJKHJl
dmlzaW9uIDIyODcxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00MywxMSArNDMsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFNWR1RyYW5zZm9ybShpbml0aWFsVmFsdWUpKTsKICAgICB9CiAKLSAgICBzdGF0aWMg
UmVmPFNWR1RyYW5zZm9ybT4gY3JlYXRlKGNvbnN0IFNWR1RyYW5zZm9ybVZhbHVlKiBpbml0aWFs
VmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdUcmFuc2Zvcm0o
aW5pdGlhbFZhbHVlKSk7Ci0gICAgfQotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGlj
IEV4Y2VwdGlvbk9yPFJlZjxTVkdUcmFuc2Zvcm0+PiBjcmVhdGUoRXhjZXB0aW9uT3I8VD4mJiBp
bml0aWFsVmFsdWUpCiAgICAgewogICAgICAgICBpZiAoaW5pdGlhbFZhbHVlLmhhc0V4Y2VwdGlv
bigpKQpAQCAtMTQzLDExICsxMzgsNiBAQCBwcml2YXRlOgogICAgICAgICA6IFNWR1Byb3BlcnR5
VGVhck9mZjxTVkdUcmFuc2Zvcm1WYWx1ZT4oaW5pdGlhbFZhbHVlKQogICAgIHsKICAgICB9Ci0K
LSAgICBleHBsaWNpdCBTVkdUcmFuc2Zvcm0oY29uc3QgU1ZHVHJhbnNmb3JtVmFsdWUqIGluaXRp
YWxWYWx1ZSkKLSAgICAgICAgOiBTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHVHJhbnNmb3JtVmFsdWU+
KGluaXRpYWxWYWx1ZSkKLSAgICB7Ci0gICAgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3RWYWx1ZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdFZhbHVlcy5oCShy
ZXZpc2lvbiAyMjg3MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdFZh
bHVlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMiBAQCBwdWJsaWM6CiAKIHRlbXBs
YXRlPD4gc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1RyYW5zZm9ybUxpc3RWYWx1ZXM+IHsK
ICAgICBzdGF0aWMgU1ZHVHJhbnNmb3JtTGlzdFZhbHVlcyBpbml0aWFsVmFsdWUoKSB7IHJldHVy
biB7IH07IH0KKyAgICBzdGF0aWMgU1ZHVHJhbnNmb3JtTGlzdFZhbHVlcyBmcm9tU3RyaW5nKGNv
bnN0IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgU1ZHVHJhbnNmb3JtTGlzdFZhbHVl
cyB2YWx1ZXM7CisgICAgICAgIHZhbHVlcy5wYXJzZShzdHJpbmcpOworICAgICAgICByZXR1cm4g
dmFsdWVzOworICAgIH0KICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IFNWR1RyYW5z
Zm9ybUxpc3RWYWx1ZXMmIGxpc3QpIHsgcmV0dXJuIGxpc3QudmFsdWVBc1N0cmluZygpOyB9CiAK
ICAgICB1c2luZyBMaXN0SXRlbVR5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1ZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5VGVhck9mZi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5VGVhck9mZi5oCShy
ZXZpc2lvbiAyMjg3MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9w
ZXJ0eVRlYXJPZmYuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDYgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZWxmKGluaXRpYWxWYWx1ZSkpOwogICAgIH0K
IAotICAgIHN0YXRpYyBSZWY8U2VsZj4gY3JlYXRlKGNvbnN0IFByb3BlcnR5VHlwZSogaW5pdGlh
bFZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2VsZihpbml0aWFs
VmFsdWUpKTsKLSAgICB9Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgRXhjZXB0
aW9uT3I8UmVmPFNlbGY+PiBjcmVhdGUoRXhjZXB0aW9uT3I8VT4mJiBpbml0aWFsVmFsdWUpCiAg
ICAgewogICAgICAgICBpZiAoaW5pdGlhbFZhbHVlLmhhc0V4Y2VwdGlvbigpKQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlUcmFpdHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eVRyYWl0cy5oCShy
ZXZpc2lvbiAyMjg3MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9w
ZXJ0eVRyYWl0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTIwLDYgKzIxLDEzIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgi
CisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgorI2luY2x1ZGUgIlNWR1Bh
cnNlclV0aWxpdGllcy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MzAsMTAgKzM4LDI1IEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0cyB7IH07CiB0ZW1wbGF0ZTw+
CiBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8Ym9vbD4gewogICAgIHN0YXRpYyBib29sIGluaXRp
YWxWYWx1ZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgc3RhdGljIGJvb2wgZnJvbVN0cmluZyhj
b25zdCBTdHJpbmcmIHN0cmluZykgeyByZXR1cm4gc3RyaW5nID09ICJ0cnVlIjsgfQogICAgIHN0
YXRpYyBTdHJpbmcgdG9TdHJpbmcoYm9vbCB0eXBlKSB7IHJldHVybiB0eXBlID8gInRydWUiIDog
ImZhbHNlIjsgfQogfTsKIAogdGVtcGxhdGU8Pgorc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPENv
bG9yPiB7CisgICAgc3RhdGljIENvbG9yIGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIENvbG9yKCk7
IH0KKyAgICBzdGF0aWMgQ29sb3IgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykgeyBy
ZXR1cm4gQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKSk7IH0K
KyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxDb2xvcj4gcGFyc2UoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgQ29sb3IgY29sb3IgPSBD
U1NQYXJzZXI6OnBhcnNlQ29sb3Ioc3RyaW5nLnN0cmlwV2hpdGVTcGFjZSgpKTsKKyAgICAgICAg
aWYgKCFjb2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgICAgICByZXR1cm4gY29sb3I7CisgICAgfQorICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmco
Y29uc3QgQ29sb3ImIHR5cGUpIHsgcmV0dXJuIHR5cGUuc2VyaWFsaXplZCgpOyB9Cit9OworCit0
ZW1wbGF0ZTw+CiBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8dW5zaWduZWQ+IHsKICAgICBzdGF0
aWMgdW5zaWduZWQgaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gMDsgfQogICAgIHN0YXRpYyBTdHJp
bmcgdG9TdHJpbmcodW5zaWduZWQgdHlwZSkgeyByZXR1cm4gU3RyaW5nOjpudW1iZXIodHlwZSk7
IH0KQEAgLTQyLDE5ICs2NSwxMTggQEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPHVuc2lnbmVk
PiB7CiB0ZW1wbGF0ZTw+CiBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8aW50PiB7CiAgICAgc3Rh
dGljIGludCBpbml0aWFsVmFsdWUoKSB7IHJldHVybiAwOyB9CisgICAgc3RhdGljIGludCBmcm9t
U3RyaW5nKGNvbnN0IFN0cmluZyZzdHJpbmcpIHsgcmV0dXJuIHN0cmluZy50b0ludFN0cmljdCgp
OyB9CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhpbnQgdHlwZSkgeyByZXR1cm4gU3RyaW5n
OjpudW1iZXIodHlwZSk7IH0KIH07CiAKIHRlbXBsYXRlPD4KK3N0cnVjdCBTVkdQcm9wZXJ0eVRy
YWl0czxzdGQ6OnBhaXI8aW50LCBpbnQ+PiB7CisgICAgc3RhdGljIHN0ZDo6cGFpcjxpbnQsIGlu
dD4gaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4geyB9OyB9CisgICAgc3RhdGljIHN0ZDo6cGFpcjxp
bnQsIGludD4gZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAgICAg
IGZsb2F0IGZpcnN0TnVtYmVyID0gMCwgc2Vjb25kTnVtYmVyID0gMDsKKyAgICAgICAgaWYgKCFw
YXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHN0cmluZywgZmlyc3ROdW1iZXIsIHNlY29uZE51bWJl
cikpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIoc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYoZmlyc3ROdW1iZXIpKSwgc3RhdGljX2Nhc3Q8aW50
Pihyb3VuZGYoc2Vjb25kTnVtYmVyKSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4KIHN0cnVj
dCBTVkdQcm9wZXJ0eVRyYWl0czxmbG9hdD4gewogICAgIHN0YXRpYyBmbG9hdCBpbml0aWFsVmFs
dWUoKSB7IHJldHVybiAwOyB9CisgICAgc3RhdGljIGZsb2F0IGZyb21TdHJpbmcoY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCisgICAgeworICAgICAgICBmbG9hdCBudW1iZXIgPSAwOworICAgICAgICBp
ZiAoIXBhcnNlTnVtYmVyRnJvbVN0cmluZyhzdHJpbmcsIG51bWJlcikpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisgICAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8ZmxvYXQ+IHBhcnNlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcm
IHN0cmluZykKKyAgICB7CisgICAgICAgIGZsb2F0IG51bWJlcjsKKyAgICAgICAgaWYgKCFwYXJz
ZU51bWJlckZyb21TdHJpbmcoc3RyaW5nLCBudW1iZXIpKQorICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CiAgICAgc3RhdGljIFN0
cmluZyB0b1N0cmluZyhmbG9hdCB0eXBlKSB7IHJldHVybiBTdHJpbmc6Om51bWJlcih0eXBlKTsg
fQogfTsKIAogdGVtcGxhdGU8Pgorc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPHN0ZDo6cGFpcjxm
bG9hdCwgZmxvYXQ+PiB7CisgICAgc3RhdGljIHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IGluaXRp
YWxWYWx1ZSgpIHsgcmV0dXJuIHsgfTsgfQorICAgIHN0YXRpYyBzdGQ6OnBhaXI8ZmxvYXQsIGZs
b2F0PiBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgZmxv
YXQgZmlyc3ROdW1iZXIgPSAwLCBzZWNvbmROdW1iZXIgPSAwOworICAgICAgICBpZiAoIXBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIoc3RyaW5nLCBmaXJzdE51bWJlciwgc2Vjb25kTnVtYmVyKSkK
KyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihm
aXJzdE51bWJlciwgc2Vjb25kTnVtYmVyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1
Y3QgU1ZHUHJvcGVydHlUcmFpdHM8RmxvYXRQb2ludD4geworICAgIHN0YXRpYyBGbG9hdFBvaW50
IGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIEZsb2F0UG9pbnQoKTsgfQorICAgIHN0YXRpYyBGbG9h
dFBvaW50IGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAgeworICAgICAgICBG
bG9hdFBvaW50IHBvaW50OworICAgICAgICBpZiAoIXBhcnNlUG9pbnQoc3RyaW5nLCBwb2ludCkp
CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICByZXR1cm4gcG9pbnQ7CisgICAgfQor
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAgICAgIEZsb2F0UG9pbnQg
cG9pbnQ7CisgICAgICAgIGlmICghcGFyc2VQb2ludChzdHJpbmcsIHBvaW50KSkKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBwb2ludDsKKyAgICB9Cisg
ICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBGbG9hdFBvaW50JiB0eXBlKQorICAgIHsK
KyAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgICAgICBidWlsZGVyLmFwcGVuZE51
bWJlcih0eXBlLngoKSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kTnVtYmVyKHR5cGUueSgpKTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9T
dHJpbmcoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFp
dHM8RmxvYXRSZWN0PiB7CisgICAgc3RhdGljIEZsb2F0UmVjdCBpbml0aWFsVmFsdWUoKSB7IHJl
dHVybiBGbG9hdFJlY3QoKTsgfQorICAgIHN0YXRpYyBGbG9hdFJlY3QgZnJvbVN0cmluZyhjb25z
dCBTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAgICAgIEZsb2F0UmVjdCByZWN0OworICAgICAg
ICBpZiAoIXBhcnNlUmVjdChzdHJpbmcsIHJlY3QpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgfQorICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZs
b2F0UmVjdD4gcGFyc2UoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IFN0cmluZyYgc3RyaW5n
KQorICAgIHsKKyAgICAgICAgRmxvYXRSZWN0IHJlY3Q7CisgICAgICAgIGlmICghcGFyc2VSZWN0
KHN0cmluZywgcmVjdCkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAg
ICByZXR1cm4gcmVjdDsKKyAgICB9CisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBG
bG9hdFJlY3QmIHR5cGUpCisgICAgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Cisg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKHR5cGUueCgpKTsKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQoJyAnKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIodHlwZS55KCkpOworICAg
ICAgICBidWlsZGVyLmFwcGVuZCgnICcpOworICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcih0
eXBlLndpZHRoKCkpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOworICAgICAgICBidWls
ZGVyLmFwcGVuZE51bWJlcih0eXBlLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIu
dG9TdHJpbmcoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CiBzdHJ1Y3QgU1ZHUHJvcGVydHlU
cmFpdHM8U3RyaW5nPiB7CiAgICAgc3RhdGljIFN0cmluZyBpbml0aWFsVmFsdWUoKSB7IHJldHVy
biBTdHJpbmcoKTsgfQotICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoY29uc3QgU3RyaW5nJiB0
eXBlKSB7IHJldHVybiB0eXBlOyB9CisgICAgc3RhdGljIFN0cmluZyBmcm9tU3RyaW5nKGNvbnN0
IFN0cmluZyYgc3RyaW5nKSB7IHJldHVybiBzdHJpbmc7IH0KKyAgICBzdGF0aWMgc3RkOjpvcHRp
b25hbDxTdHJpbmc+IHBhcnNlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmIHN0
cmluZykgeyByZXR1cm4gc3RyaW5nOyB9CisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25z
dCBTdHJpbmcmIHN0cmluZykgeyByZXR1cm4gc3RyaW5nOyB9CiB9OwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBFbnVtVHlwZT4K
</data>

          </attachment>
      

    </bug>

</bugzilla>