<?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>30206</bug_id>
          
          <creation_ts>2009-10-08 05:01:03 -0700</creation_ts>
          <short_desc>Geolocation lacks V8 bindings</short_desc>
          <delta_ts>2009-12-01 13:26:33 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Steve Block">steveblock</assigned_to>
          <cc>abarth</cc>
    
    <cc>android-webkit-unforking</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>joth</cc>
    
    <cc>steveblock</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>153341</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-10-08 05:01:03 -0700</bug_when>
    <thetext>Geolocation lacks V8 bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166778</commentid>
    <comment_count>1</comment_count>
      <attachid>43930</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-11-26 12:44:20 -0800</bug_when>
    <thetext>Created attachment 43930
Patch 1 for Bug 30206</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167235</commentid>
    <comment_count>2</comment_count>
      <attachid>44021</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-11-30 07:57:14 -0800</bug_when>
    <thetext>Created attachment 44021
Patch 2 for Bug 30206

Updates build files for Chromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167389</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-11-30 12:51:24 -0800</bug_when>
    <thetext>Attachment 44021 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/bindings/v8/custom/V8CoordinatesCustom.cpp:33:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
WebCore/bindings/v8/custom/V8CoordinatesCustom.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/v8/custom/V8CoordinatesCustom.cpp:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebCore/bindings/v8/custom/V8CoordinatesCustom.cpp:51:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebCore/bindings/v8/custom/V8CoordinatesCustom.cpp:60:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebCore/bindings/v8/custom/V8CoordinatesCustom.cpp:69:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebCore/bindings/v8/custom/V8CoordinatesCustom.cpp:42:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebCore/bindings/v8/custom/V8CoordinatesCustom.cpp:51:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebCore/bindings/v8/custom/V8CoordinatesCustom.cpp:60:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebCore/bindings/v8/custom/V8CoordinatesCustom.cpp:69:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Done processing WebCore/bindings/v8/custom/V8CoordinatesCustom.cpp
Done processing WebCore/bindings/v8/DOMObjectsInclude.h
WebCore/bindings/v8/DerivedSourcesAllInOne.cpp:107:  Alphabetical sorting problem.  [build/include_order] [4]
Done processing WebCore/bindings/v8/DerivedSourcesAllInOne.cpp
Done processing WebCore/bindings/v8/custom/V8CustomPositionCallback.h
Done processing WebCore/bindings/v8/custom/V8CustomBinding.h
Done processing WebCore/bindings/v8/custom/V8CustomPositionErrorCallback.cpp
Done processing WebCore/bindings/v8/V8Index.cpp
Done processing WebCore/bindings/v8/custom/V8CustomPositionCallback.cpp
Done processing WebCore/bindings/v8/V8Index.h
WebCore/bindings/v8/custom/V8GeolocationCustom.cpp:33:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Done processing WebCore/bindings/v8/custom/V8GeolocationCustom.cpp
Done processing WebCore/bindings/v8/custom/V8CustomPositionErrorCallback.h
Total errors found: 12</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167395</commentid>
    <comment_count>4</comment_count>
      <attachid>44021</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-11-30 12:53:14 -0800</bug_when>
    <thetext>Comment on attachment 44021
Patch 2 for Bug 30206

Yeah, what the style-elf said.

BTW, do we need compile guards around geolocation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167567</commentid>
    <comment_count>5</comment_count>
      <attachid>44067</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-12-01 04:24:03 -0800</bug_when>
    <thetext>Created attachment 44067
Patch 3 for Bug 30206

&gt; Yeah, what the style-elf said.
Fixed. The script still reports a couple of errors regarding include order, because V8GeolocationCustom and V8CoordinatesCustom don&apos;t have a &apos;primary header&apos; that follows the standard naming pattern.

&gt; BTW, do we need compile guards around geolocation?
No, the decision taken for Geolocation was to not guard the (majority of the) code with enable flags, so as to make sure it&apos;s always built and doesn&apos;t rot (See Bug 25756). The guards are used only in Navigator.idl (to conditionally expose the JS geolocation object) and in GeolocationService.cpp (to satisfy the linker on platforms that don&apos;t implement GeolocationService).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167568</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-01 04:27:48 -0800</bug_when>
    <thetext>Attachment 44067 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/bindings/v8/custom/V8CoordinatesCustom.cpp:27:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/bindings/v8/custom/V8GeolocationCustom.cpp:27:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167635</commentid>
    <comment_count>7</comment_count>
      <attachid>44067</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-12-01 08:33:50 -0800</bug_when>
    <thetext>Comment on attachment 44067
Patch 3 for Bug 30206

ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167643</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-01 08:46:36 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Attachment 44067 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
&gt; WebCore/bindings/v8/custom/V8CoordinatesCustom.cpp:27:  Found other header
&gt; before a header this file implements. Should be: config.h, primary header,
&gt; blank line, and then alphabetically sorted.  [build/include_order] [4]
&gt; WebCore/bindings/v8/custom/V8GeolocationCustom.cpp:27:  Found other header
&gt; before a header this file implements. Should be: config.h, primary header,
&gt; blank line, and then alphabetically sorted.  [build/include_order] [4]
&gt; Total errors found: 2

Do we need to file a bug against check-webkit-style here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167644</commentid>
    <comment_count>9</comment_count>
      <attachid>44067</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-01 08:46:47 -0800</bug_when>
    <thetext>Comment on attachment 44067
Patch 3 for Bug 30206

Clearing flags on attachment: 44067

Committed r51540: &lt;http://trac.webkit.org/changeset/51540&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167645</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-01 08:46:53 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167675</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-01 10:50:04 -0800</bug_when>
    <thetext>&gt; Do we need to file a bug against check-webkit-style here?

Yes.  I think it doesn&apos;t understand includes for the custom bindings.  Can you file this one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167725</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-01 13:26:33 -0800</bug_when>
    <thetext>Filed bug 32033 to cover the false positives.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43930</attachid>
            <date>2009-11-26 12:44:20 -0800</date>
            <delta_ts>2009-11-30 07:57:14 -0800</delta_ts>
            <desc>Patch 1 for Bug 30206</desc>
            <filename>addV8Bindings.txt</filename>
            <type>text/plain</type>
            <size>33078</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTQxMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMDktMTEtMjYgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZHMgVjggYmluZGluZ3MgZm9yIEdlb2xvY2F0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAyMDYKKworICAgICAgICBBbHNvIGFkZHMgR2Vv
bG9jYXRpb24gZmlsZXMgdG8gQ2hyb21lIGJ1aWxkIGZpbGVzLgorCisgICAgICAgICogV2ViQ29y
ZS5neXAvV2ViQ29yZS5neXA6IE1vZGlmaWVkLiBDb3JyZWN0cyBsaXN0IG9mIEdlb2xvY2F0aW9u
IElETCBmaWxlcy4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IE1vZGlmaWVkLiBBZGRzIEdlb2xv
Y2F0aW9uIGZpbGVzLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTU9iamVjdHNJbmNsdWRlLmg6
IE1vZGlmaWVkLiBBZGRzIEdlb2xvY2F0aW9uIGluY2x1ZGVzLgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwOiBNb2RpZmllZC4gQWRkcyBWOEdlb2xvY2F0
aW9uLmNwcC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEluZGV4LmNwcDogTW9kaWZpZWQuIElu
Y2x1ZGVzIEdlb2xvY2F0aW9uIGdlbmVyYXRlZCBoZWFkZXJzLgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4SW5kZXguaDogTW9kaWZpZWQuIEFkZHMgR2VvbG9jYXRpb24gdHlwZXMgdG8gRE9NX09C
SkVDVF9UWVBFUy4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDb29yZGluYXRlc0N1
c3RvbS5jcHA6IEFkZGVkLiBIYW5kbGVzIG9wdGlvbmFsIHByb3BlcnRpZXMuCisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oOiBNb2RpZmllZC4gRGVjbGFyZXMg
Y2FsbGJhY2tzIGFuZCBnZXR0ZXJzLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1
c3RvbVBvc2l0aW9uQ2FsbGJhY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlY4Q3Vz
dG9tUG9zaXRpb25DYWxsYmFjazo6VjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrKTogQWRkZWQuIENv
bnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrOjp+
VjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrKTogQWRkZWQuIERlc3RydWN0b3IuCisgICAgICAgIChX
ZWJDb3JlOjpWOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KTogQWRkZWQuIElu
dm9rZXMgY2FsbGJhY2suCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9z
aXRpb25DYWxsYmFjay5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tUG9zaXRp
b25DYWxsYmFjazo6Y3JlYXRlKTogQWRkZWQuIEZhY3RvcnkgbWV0aG9kLgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjay5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6OlY4Q3Vz
dG9tUG9zaXRpb25FcnJvckNhbGxiYWNrKTogQWRkZWQuIENvbnN0cnVjdG9yLgorICAgICAgICAo
V2ViQ29yZTo6VjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6On5WOEN1c3RvbVBvc2l0aW9u
RXJyb3JDYWxsYmFjayk6IEFkZGVkLiBEZXN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6VjhD
dXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KTogQWRkZWQuIEludm9rZXMg
Y2FsbGJhY2suCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25F
cnJvckNhbGxiYWNrLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21Qb3NpdGlv
bkVycm9yQ2FsbGJhY2s6OmNyZWF0ZSk6IEFkZGVkLiBGYWN0b3J5IG1ldGhvZC4KKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhHZW9sb2NhdGlvbkN1c3RvbS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6dGhyb3dUeXBlTWlzbWF0Y2hFeGNlcHRpb24pOiBBZGRlZC4gVGhyb3dz
IGEgdHlwZSBtaXNtYXRjaCBlcnJvci4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBvc2l0aW9u
Q2FsbGJhY2spOiBBZGRlZC4gSGFuZGxlcyB0eXBlIGNoZWNraW5nIGZvciBzdWNjZXNzQ2FsbGJh
Y2sgYXJndW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVQb3NpdGlvbkVycm9yQ2FsbGJh
Y2spOiBBZGRlZC4gSGFuZGxlcyB0eXBlIGNoZWNraW5nIGZvciBlcnJvckNhbGxiYWNrIGFyZ3Vt
ZW50LgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUG9zaXRpb25PcHRpb25zKTogQWRkZWQuIEhh
bmRsZXMgdHlwZSBjaGVja2luZyBmb3IgcG9zaXRpb25PcHRpb25zIGFyZ3VtZW50LgorCiAyMDA5
LTExLTI0ICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciAgPHplY2tlQHNlbGZpc2gub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDUxMzc5
KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw2ICsxODcs
NyBAQAogICAgICAgICAgICAgJ3BhZ2UvQWJzdHJhY3RWaWV3LmlkbCcsCiAgICAgICAgICAgICAn
cGFnZS9CYXJJbmZvLmlkbCcsCiAgICAgICAgICAgICAncGFnZS9Db25zb2xlLmlkbCcsCisgICAg
ICAgICAgICAncGFnZS9Db29yZGluYXRlcy5pZGwnLAogICAgICAgICAgICAgJ3BhZ2UvRE9NU2Vs
ZWN0aW9uLmlkbCcsCiAgICAgICAgICAgICAncGFnZS9ET01XaW5kb3cuaWRsJywKICAgICAgICAg
ICAgICdwYWdlL0dlb2xvY2F0aW9uLmlkbCcsCkBAIC02NDgsMTIgKzY0OSwxNyBAQAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaWVudFJlY3RMaXN0Q3Vz
dG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3Vz
dG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29vcmRpbmF0ZXND
dXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZURl
Y2xhcmF0aW9uQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q29uc29sZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1
c3RvbUJpbmRpbmcuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0
b21CaW5kaW5nLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUV2
ZW50TGlzdGVuZXIuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0
b21FdmVudExpc3RlbmVyLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1
c3RvbVBvc2l0aW9uQ2FsbGJhY2suY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0
b20vVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjay5jcHAnLAorICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjay5oJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFj
ay5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRl
bWVudENhbGxiYWNrLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3Rv
bVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwJywKQEAgLTY3Nyw2ICs2ODMsNyBAQAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudEN1c3RvbS5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEZpbGVMaXN0Q3VzdG9tLmNwcCcsCisgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4R2VvbG9jYXRpb25DdXN0b20uY3BwJywKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVtZW50Q29u
c3RydWN0b3IuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEFsbENv
bGxlY3Rpb25DdXN0b20uY3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5n
eXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkocmV2aXNp
b24gNTEzNzkpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjksMTEgKzIyOSwxMCBAQAogICAgICAgICAnLi4vaW5zcGVjdG9yL0phdmFTY3Jp
cHRDYWxsRnJhbWUuaWRsJywKIAogICAgICAgICAjIEVOQUJMRV9HRU9MT0NBVElPTiBvbmx5Lgor
ICAgICAgICAnLi4vcGFnZS9Db29yZGluYXRlcy5pZGwnLAogICAgICAgICAnLi4vcGFnZS9HZW9s
b2NhdGlvbi5pZGwnLAogICAgICAgICAnLi4vcGFnZS9HZW9wb3NpdGlvbi5pZGwnLAotICAgICAg
ICAnLi4vcGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmlkbCcsCiAgICAgICAgICcuLi9wYWdlL1Bvc2l0
aW9uRXJyb3IuaWRsJywKLSAgICAgICAgJy4uL3BhZ2UvUG9zaXRpb25FcnJvckNhbGxiYWNrLmlk
bCcsCiAKICAgICAgICAgIyBCaW5kaW5ncyB3aXRoIGN1c3RvbSBPYmplY3RpdmUtQyBpbXBsZW1l
bnRhdGlvbnMuCiAgICAgICAgICcuLi9wYWdlL0Fic3RyYWN0Vmlldy5pZGwnLApJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9ET01PYmplY3RzSW5jbHVkZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvRE9NT2JqZWN0c0luY2x1ZGUuaAkocmV2aXNpb24gNTEzNzkpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTU9iamVjdHNJbmNsdWRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE4NSw2ICsxODUsMTMgQEAKICNpbmNsdWRlICJTdG9yYWdlRXZlbnQuaCIKICNlbmRpZiAvLyBE
T01fU1RPUkFHRQogCisjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQorI2luY2x1ZGUgIkNvb3JkaW5h
dGVzLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKKyNpbmNsdWRlICJHZW9wb3NpdGlvbi5o
IgorI2luY2x1ZGUgIlBvc2l0aW9uRXJyb3IuaCIKKyNlbmRpZiAvLyBHRU9MT0NBVElPTgorCiAj
aWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdBbmdsZS5oIgogI2luY2x1ZGUgIlNWR0FuaW1h
dGVkUG9pbnRzLmgiCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L0Rlcml2ZWRTb3VyY2VzQWxs
SW5PbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvRGVyaXZlZFNvdXJj
ZXNBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDUxMzc5KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9E
ZXJpdmVkU291cmNlc0FsbEluT25lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw3
IEBACiAjaW5jbHVkZSAiYmluZGluZ3MvVjhGaWxlLmNwcCIKICNpbmNsdWRlICJiaW5kaW5ncy9W
OEZpbGVMaXN0LmNwcCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOEhpc3RvcnkuY3BwIgorI2luY2x1
ZGUgImJpbmRpbmdzL1Y4R2VvbG9jYXRpb24uY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4SFRN
TEFsbENvbGxlY3Rpb24uY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4SFRNTEFuY2hvckVsZW1l
bnQuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4SFRNTEFwcGxldEVsZW1lbnQuY3BwIgpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOEluZGV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4SW5kZXguY3BwCShyZXZpc2lvbiA1MTM3OSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhJbmRleC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNiw2ICs0MzYsMTMgQEAK
ICNpbmNsdWRlICJWOEluc3BlY3RvckJhY2tlbmQuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKEdF
T0xPQ0FUSU9OKQorI2luY2x1ZGUgIlY4Q29vcmRpbmF0ZXMuaCIKKyNpbmNsdWRlICJWOEdlb2xv
Y2F0aW9uLmgiCisjaW5jbHVkZSAiVjhHZW9wb3NpdGlvbi5oIgorI2luY2x1ZGUgIlY4UG9zaXRp
b25FcnJvci5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRnVuY3Rpb25UZW1w
bGF0ZUZhY3RvcnkgVjhDbGFzc0luZGV4OjpHZXRGYWN0b3J5KFY4V3JhcHBlclR5cGUgdHlwZSkK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCShyZXZpc2lvbiA1MTM3OSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhJbmRleC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTIsNiArNDkyLDE2IEBAIHR5
cGVkZWYgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGwKICNkZWZpbmUgRE9NX09CSkVD
VF9JTlNQRUNUT1JfVFlQRVMoVikKICNlbmRpZgogCisjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQor
I2RlZmluZSBET01fT0JKRUNUX0dFT0xPQ0FUSU9OX1RZUEVTKFYpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIFYoQ09PUkRJTkFURVMsIENvb3JkaW5hdGVzKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFYoR0VPTE9DQVRJT04sIEdl
b2xvY2F0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IFYoR0VPUE9TSVRJT04sIEdlb3Bvc2l0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIFYoUE9TSVRJT05FUlJPUiwgUG9zaXRpb25FcnJvcikKKyNlbHNl
CisjZGVmaW5lIERPTV9PQkpFQ1RfR0VPTE9DQVRJT05fVFlQRVMoVikKKyNlbmRpZgorCiAjZGVm
aW5lIERPTV9PQkpFQ1RfVFlQRVMoVikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgRE9NX09CSkVDVF9UWVBFU18xKFYpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRE9NX09CSkVDVF9UWVBFU18yKFYp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC01MDEs
NyArNTExLDggQEAgdHlwZWRlZiB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbAogICAg
IERPTV9PQkpFQ1RfM0RfQ0FOVkFTX1RZUEVTKFYpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgIERPTV9PQkpFQ1RfWFBBVEhfVFlQRVMoVikgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIERPTV9PQkpFQ1RfWFNMVF9UWVBF
UyhWKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIERP
TV9PQkpFQ1RfSU5TUEVDVE9SX1RZUEVTKFYpCisgICAgRE9NX09CSkVDVF9JTlNQRUNUT1JfVFlQ
RVMoVikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRE9NX09C
SkVDVF9HRU9MT0NBVElPTl9UWVBFUyhWKQogCiAjaWYgRU5BQkxFKFNWRykKIC8vIFNWR19PQkpF
Q1RfVFlQRVMgYXJlIHN2ZyBub24tbm9kZSwgbm9uLXBvZCB0eXBlcy4KSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29vcmRpbmF0ZXNDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29vcmRpbmF0ZXNDdXN0b20uY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDb29yZGluYXRlc0N1c3Rv
bS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJWOENvb3JkaW5hdGVzLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5j
bHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCisjaW5jbHVk
ZSAiQ29vcmRpbmF0ZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgQUNDRVNTT1Jf
R0VUVEVSKENvb3JkaW5hdGVzQWx0aXR1ZGUpIHsKKyAgICAgICAgSU5DX1NUQVRTKCJET00uQ29v
cmRpbmF0ZXMuYWx0aXR1ZGUuX2dldCIpOworICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7CisgICAgICAgIENvb3JkaW5hdGVzKiBpbXAgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDb29yZGluYXRlcz4oVjhDbGFzc0luZGV4
OjpDT09SRElOQVRFUywgaG9sZGVyKTsKKyAgICAgICAgaWYgKCFpbXAtPmNhblByb3ZpZGVBbHRp
dHVkZSgpKQorICAgICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgICAgIHJldHVybiB2
ODo6TnVtYmVyOjpOZXcoaW1wLT5hbHRpdHVkZSgpKTsKKyAgICB9CisKKyAgICBBQ0NFU1NPUl9H
RVRURVIoQ29vcmRpbmF0ZXNBbHRpdHVkZUFjY3VyYWN5KSB7CisgICAgICAgIElOQ19TVEFUUygi
RE9NLkNvb3JkaW5hdGVzLmFsdGl0dWRlQWNjdXJhY3kuX2dldCIpOworICAgICAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7CisgICAgICAgIENvb3JkaW5h
dGVzKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDb29yZGluYXRl
cz4oVjhDbGFzc0luZGV4OjpDT09SRElOQVRFUywgaG9sZGVyKTsKKyAgICAgICAgaWYgKCFpbXAt
PmNhblByb3ZpZGVBbHRpdHVkZUFjY3VyYWN5KCkpCisgICAgICAgICAgICByZXR1cm4gdjg6Ok51
bGwoKTsKKyAgICAgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhpbXAtPmFsdGl0dWRlQWNjdXJh
Y3koKSk7CisgICAgfQorCisgICAgQUNDRVNTT1JfR0VUVEVSKENvb3JkaW5hdGVzSGVhZGluZykg
eworICAgICAgICBJTkNfU1RBVFMoIkRPTS5Db29yZGluYXRlcy5oZWFkaW5nLl9nZXQiKTsKKyAg
ICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOworICAg
ICAgICBDb29yZGluYXRlcyogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8Q29vcmRpbmF0ZXM+KFY4Q2xhc3NJbmRleDo6Q09PUkRJTkFURVMsIGhvbGRlcik7CisgICAg
ICAgIGlmICghaW1wLT5jYW5Qcm92aWRlSGVhZGluZygpKQorICAgICAgICAgICAgcmV0dXJuIHY4
OjpOdWxsKCk7CisgICAgICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcoaW1wLT5oZWFkaW5nKCkp
OworICAgIH0KKworICAgIEFDQ0VTU09SX0dFVFRFUihDb29yZGluYXRlc1NwZWVkKSB7CisgICAg
ICAgIElOQ19TVEFUUygiRE9NLkNvb3JkaW5hdGVzLnNwZWVkLl9nZXQiKTsKKyAgICAgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOworICAgICAgICBDb29y
ZGluYXRlcyogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q29vcmRp
bmF0ZXM+KFY4Q2xhc3NJbmRleDo6Q09PUkRJTkFURVMsIGhvbGRlcik7CisgICAgICAgIGlmICgh
aW1wLT5jYW5Qcm92aWRlU3BlZWQoKSkKKyAgICAgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwor
ICAgICAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3KGltcC0+c3BlZWQoKSk7CisgICAgfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEN1c3RvbUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEN1c3RvbUJpbmRpbmcuaAkocmV2aXNpb24gNTEzNzkpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNjkyLDYgKzY5
MiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERFQ0xBUkVfQUNDRVNTT1JfUlVO
VElNRV9FTkFCTEVSKERPTVdpbmRvd1dlYlNvY2tldCk7CiAjZW5kaWYKIAorICAgICAgICBERUNM
QVJFX0NBTExCQUNLKEdlb2xvY2F0aW9uR2V0Q3VycmVudFBvc2l0aW9uKTsKKyAgICAgICAgREVD
TEFSRV9DQUxMQkFDSyhHZW9sb2NhdGlvbldhdGNoUG9zaXRpb24pOworICAgICAgICBERUNMQVJF
X1BST1BFUlRZX0FDQ0VTU09SX0dFVFRFUihDb29yZGluYXRlc0FsdGl0dWRlKTsKKyAgICAgICAg
REVDTEFSRV9QUk9QRVJUWV9BQ0NFU1NPUl9HRVRURVIoQ29vcmRpbmF0ZXNBbHRpdHVkZUFjY3Vy
YWN5KTsKKyAgICAgICAgREVDTEFSRV9QUk9QRVJUWV9BQ0NFU1NPUl9HRVRURVIoQ29vcmRpbmF0
ZXNIZWFkaW5nKTsKKyAgICAgICAgREVDTEFSRV9QUk9QRVJUWV9BQ0NFU1NPUl9HRVRURVIoQ29v
cmRpbmF0ZXNTcGVlZCk7CisKICN1bmRlZiBERUNMQVJFX0lOREVYRURfQUNDRVNTX0NIRUNLCiAj
dW5kZWYgREVDTEFSRV9OQU1FRF9BQ0NFU1NfQ0hFQ0sKIApJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2suY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlv
bkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrLmgiCisKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tVm9pZENhbGxiYWNrLmgiICAvLyBGb3IgaW52
b2tlQ2FsbGJhY2sKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitWOEN1c3RvbVBvc2l0aW9uQ2Fs
bGJhY2s6OlY4Q3VzdG9tUG9zaXRpb25DYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4gY2Fs
bGJhY2ssIEZyYW1lKiBmcmFtZSkKKyAgICA6IG1fY2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6
Ok9iamVjdD46Ok5ldyhjYWxsYmFjaykpCisgICAgLCBtX2ZyYW1lKGZyYW1lKQoreworfQorCitW
OEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2s6On5WOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2soKQorewor
ICAgIG1fY2FsbGJhY2suRGlzcG9zZSgpOworfQorCit2b2lkIFY4Q3VzdG9tUG9zaXRpb25DYWxs
YmFjazo6aGFuZGxlRXZlbnQoR2VvcG9zaXRpb24qIHBvc2l0aW9uKQoreworICAgIHY4OjpIYW5k
bGVTY29wZSBoYW5kbGVTY29wZTsKKworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRl
eHQgPSBWOFByb3h5Ojpjb250ZXh0KG1fZnJhbWUuZ2V0KCkpOworICAgIGlmIChjb250ZXh0Lklz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3Bl
KGNvbnRleHQpOworCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHsKKyAgICAg
ICAgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkdFT1BPU0lU
SU9OLCBwb3NpdGlvbikKKyAgICB9OworCisgICAgLy8gUHJvdGVjdCB0aGUgZnJhbWUgdW50aWwg
dGhlIGNhbGxiYWNrIHJldHVybnMuCisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFt
ZSk7CisKKyAgICBib29sIGNhbGxiYWNrUmV0dXJuVmFsdWUgPSBmYWxzZTsKKyAgICBpbnZva2VD
YWxsYmFjayhtX2NhbGxiYWNrLCAxLCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2suaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNr
X2gKKyNkZWZpbmUgVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrX2gKKworI2luY2x1ZGUgIlBvc2l0
aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEZyYW1lOworY2xhc3MgR2VvcG9zaXRpb247CisKK2NsYXNzIFY4Q3VzdG9tUG9zaXRpb25D
YWxsYmFjayA6IHB1YmxpYyBQb3NpdGlvbkNhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxWOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2s+IGNyZWF0ZSh2ODo6TG9jYWw8djg6
OlZhbHVlPiB2YWx1ZSwgRnJhbWUqIGZyYW1lKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZhbHVl
LT5Jc09iamVjdCgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOEN1c3RvbVBvc2l0
aW9uQ2FsbGJhY2sodmFsdWUtPlRvT2JqZWN0KCksIGZyYW1lKSk7CisgICAgfQorICAgIHZpcnR1
YWwgflY4Q3VzdG9tUG9zaXRpb25DYWxsYmFjaygpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRs
ZUV2ZW50KEdlb3Bvc2l0aW9uKik7CisKK3ByaXZhdGU6CisgICAgVjhDdXN0b21Qb3NpdGlvbkNh
bGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiwgRnJhbWUqKTsKKworICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpPYmplY3Q+IG1fY2FsbGJhY2s7CisgICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1lOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVjhDdXN0b21Qb3NpdGlv
bkNhbGxiYWNrX2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9z
aXRpb25FcnJvckNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjay5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFj
ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmgiCisKKyNpbmNsdWRlICJG
cmFtZS5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tVm9pZENhbGxiYWNrLmgiICAvLyBGb3IgaW52b2tl
Q2FsbGJhY2sKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitWOEN1c3RvbVBvc2l0aW9uRXJyb3JD
YWxsYmFjazo6VjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpPYmpl
Y3Q+IGNhbGxiYWNrLCBGcmFtZSogZnJhbWUpCisgICAgOiBtX2NhbGxiYWNrKHY4OjpQZXJzaXN0
ZW50PHY4OjpPYmplY3Q+OjpOZXcoY2FsbGJhY2spKQorICAgICwgbV9mcmFtZShmcmFtZSkKK3sK
K30KKworVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6On5WOEN1c3RvbVBvc2l0aW9uRXJy
b3JDYWxsYmFjaygpCit7CisgICAgbV9jYWxsYmFjay5EaXNwb3NlKCk7Cit9CisKK3ZvaWQgVjhD
dXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFBvc2l0aW9uRXJyb3IqIGVy
cm9yKQoreworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKworICAgIHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBWOFByb3h5Ojpjb250ZXh0KG1fZnJhbWUuZ2V0KCkp
OworICAgIGlmIChjb250ZXh0LklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdjg6
OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOworCisgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGFyZ3ZbXSA9IHsKKyAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChW
OENsYXNzSW5kZXg6OlBPU0lUSU9ORVJST1IsIGVycm9yKQorICAgIH07CisKKyAgICAvLyBQcm90
ZWN0IHRoZSBmcmFtZSB1bnRpbCB0aGUgY2FsbGJhY2sgcmV0dXJucy4KKyAgICBSZWZQdHI8RnJh
bWU+IHByb3RlY3RvcihtX2ZyYW1lKTsKKworICAgIGJvb2wgY2FsbGJhY2tSZXR1cm5WYWx1ZSA9
IGZhbHNlOworICAgIGludm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssIDEsIGFyZ3YsIGNhbGxiYWNr
UmV0dXJuVmFsdWUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25FcnJv
ckNhbGxiYWNrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBWOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFja19oCisjZGVmaW5lIFY4Q3Vz
dG9tUG9zaXRpb25FcnJvckNhbGxiYWNrX2gKKworI2luY2x1ZGUgIlBvc2l0aW9uRXJyb3JDYWxs
YmFjay5oIgorI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJh
bWU7CitjbGFzcyBQb3NpdGlvbkVycm9yOworCitjbGFzcyBWOEN1c3RvbVBvc2l0aW9uRXJyb3JD
YWxsYmFjayA6IHB1YmxpYyBQb3NpdGlvbkVycm9yQ2FsbGJhY2sgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrPiBjcmVhdGUodjg6
OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIEZyYW1lKiBmcmFtZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVCh2YWx1ZS0+SXNPYmplY3QoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhD
dXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2sodmFsdWUtPlRvT2JqZWN0KCksIGZyYW1lKSk7Cisg
ICAgfQorICAgIHZpcnR1YWwgflY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrKCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoUG9zaXRpb25FcnJvciopOworCitwcml2YXRlOgor
ICAgIFY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0Piwg
RnJhbWUqKTsKKworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1fY2FsbGJhY2s7Cisg
ICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2tfaApJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhHZW9sb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhHZW9sb2NhdGlvbkN1c3RvbS5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEdlb2xvY2F0aW9uQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgorI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2lu
Y2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tUG9zaXRpb25DYWxs
YmFjay5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmgiCisjaW5j
bHVkZSAiVjhQcm94eS5oIgorCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7Cit1c2luZyBuYW1lc3Bh
Y2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiB0eXBl
TWlzbWF0Y2hFcnJvciA9ICJUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNyI7CisK
K3N0YXRpYyB2b2lkIHRocm93VHlwZU1pc21hdGNoRXhjZXB0aW9uKCkKK3sKKyAgICBWOFByb3h5
Ojp0aHJvd0Vycm9yKFY4UHJveHk6OkdlbmVyYWxFcnJvciwgdHlwZU1pc21hdGNoRXJyb3IpOwor
fQorCitzdGF0aWMgUGFzc1JlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBjcmVhdGVQb3NpdGlvbkNh
bGxiYWNrKHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBib29sJiBzdWNjZWVkZWQpCit7Cisg
ICAgc3VjY2VlZGVkID0gdHJ1ZTsKKworICAgIC8vIFRoZSBzcGVjIHNwZWNpZmllcyAnRnVuY3Rp
b25Pbmx5JyBmb3IgdGhpcyBvYmplY3QuCisgICAgaWYgKCF2YWx1ZS0+SXNGdW5jdGlvbigpKSB7
CisgICAgICAgIHN1Y2NlZWRlZCA9IGZhbHNlOworICAgICAgICB0aHJvd1R5cGVNaXNtYXRjaEV4
Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBGcmFtZSogZnJhbWUg
PSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yQ3VycmVudENvbnRleHQoKTsKKyAgICByZXR1cm4g
VjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrOjpjcmVhdGUodmFsdWUsIGZyYW1lKTsKK30KKworc3Rh
dGljIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBjcmVhdGVQb3NpdGlvbkVycm9y
Q2FsbGJhY2sodjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wmIHN1Y2NlZWRlZCkKK3sK
KyAgICBzdWNjZWVkZWQgPSB0cnVlOworCisgICAgLy8gQXJndW1lbnQgaXMgb3B0aW9uYWwgKGhl
bmNlIHVuZGVmaW5lZCBpcyBhbGxvd2VkKSwgYW5kIG51bGwgaXMgYWxsb3dlZC4KKyAgICBpZiAo
aXNVbmRlZmluZWRPck51bGwodmFsdWUpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIFRo
ZSBzcGVjIHNwZWNpZmllcyAnRnVuY3Rpb25Pbmx5JyBmb3IgdGhpcyBvYmplY3QuCisgICAgaWYg
KCF2YWx1ZS0+SXNGdW5jdGlvbigpKSB7CisgICAgICAgIHN1Y2NlZWRlZCA9IGZhbHNlOworICAg
ICAgICB0aHJvd1R5cGVNaXNtYXRjaEV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKKyAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yQ3VycmVu
dENvbnRleHQoKTsKKyAgICByZXR1cm4gVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6OmNy
ZWF0ZSh2YWx1ZSwgZnJhbWUpOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlv
bnM+IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucyh2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9v
bCYgc3VjY2VlZGVkKQoreworICAgIHN1Y2NlZWRlZCA9IHRydWU7CisKKyAgICAvLyBDcmVhdGUg
ZGVmYXVsdCBvcHRpb25zLgorICAgIFJlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IG9wdGlvbnMgPSBQ
b3NpdGlvbk9wdGlvbnM6OmNyZWF0ZSgpOworCisgICAgLy8gQXJndW1lbnQgaXMgb3B0aW9uYWwg
KGhlbmNlIHVuZGVmaW5lZCBpcyBhbGxvd2VkKSwgYW5kIG51bGwgaXMgYWxsb3dlZC4KKyAgICBp
ZiAoaXNVbmRlZmluZWRPck51bGwodmFsdWUpKSB7CisgICAgICAgIC8vIFVzZSBkZWZhdWx0IG9w
dGlvbnMuCisgICAgICAgIHJldHVybiBvcHRpb25zLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICAv
LyBHaXZlbiB0aGUgYWJvdmUgdGVzdCwgdGhpcyB3aWxsIGFsd2F5cyB5aWVsZCBhbiBvYmplY3Qu
CisgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCA9IHZhbHVlLT5Ub09iamVjdCgpOwor
CisgICAgLy8gRm9yIGFsbCB0aHJlZSBwcm9wZXJ0aWVzLCB3ZSBhcHBseSB0aGUgZm9sbG93aW5n
IC4uLgorICAgIC8vIC0gSWYgdGhlIGdldHRlciBvciB0aGUgcHJvcGVydHkncyB2YWx1ZU9mIG1l
dGhvZCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB3ZQorICAgIC8vICAgcXVpdCBzbyBhcyBub3QgdG8g
cmlzayBvdmVyd3JpdGluZyB0aGUgZXhjZXB0aW9uLgorICAgIC8vIC0gSWYgdGhlIHZhbHVlIGlz
IGFic2VudCBvciB1bmRlZmluZWQsIHdlIGRvbid0IG92ZXJyaWRlIHRoZSBkZWZhdWx0LgorICAg
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IGVuYWJsZUhpZ2hBY2N1cmFjeVZhbHVlID0gb2JqZWN0LT5H
ZXQodjg6OlN0cmluZzo6TmV3KCJlbmFibGVIaWdoQWNjdXJhY3kiKSk7CisgICAgaWYgKGVuYWJs
ZUhpZ2hBY2N1cmFjeVZhbHVlLklzRW1wdHkoKSkgeworICAgICAgICBzdWNjZWVkZWQgPSBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICghZW5hYmxlSGlnaEFjY3VyYWN5
VmFsdWUtPklzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpCb29sZWFuPiBl
bmFibGVIaWdoQWNjdXJhY3lCb29sZWFuID0gZW5hYmxlSGlnaEFjY3VyYWN5VmFsdWUtPlRvQm9v
bGVhbigpOworICAgICAgICBpZiAoZW5hYmxlSGlnaEFjY3VyYWN5Qm9vbGVhbi5Jc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIHN1Y2NlZWRlZCA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIH0KKyAgICAgICAgb3B0aW9ucy0+c2V0RW5hYmxlSGlnaEFjY3VyYWN5KGVuYWJs
ZUhpZ2hBY2N1cmFjeUJvb2xlYW4tPlZhbHVlKCkpOworICAgIH0KKworICAgIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IHRpbWVvdXRWYWx1ZSA9IG9iamVjdC0+R2V0KHY4OjpTdHJpbmc6Ok5ldygidGlt
ZW91dCIpKTsKKyAgICBpZiAodGltZW91dFZhbHVlLklzRW1wdHkoKSkgeworICAgICAgICBzdWNj
ZWVkZWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICghdGltZW91
dFZhbHVlLT5Jc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6TnVtYmVyPiB0
aW1lb3V0TnVtYmVyID0gdGltZW91dFZhbHVlLT5Ub051bWJlcigpOworICAgICAgICBpZiAodGlt
ZW91dE51bWJlci5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHN1Y2NlZWRlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgZG91YmxlIHRpbWVvdXRE
b3VibGUgPSB0aW1lb3V0TnVtYmVyLT5WYWx1ZSgpOworICAgICAgICAvLyBJZiB0aGUgdmFsdWUg
aXMgcG9zaXRpdmUgaW5maW5pdHksIHRoZXJlJ3Mgbm90aGluZyB0byBkby4KKyAgICAgICAgaWYg
KCEoaXNpbmYodGltZW91dERvdWJsZSkgJiYgdGltZW91dERvdWJsZSA+IDApKSB7CisgICAgICAg
ICAgICB2ODo6TG9jYWw8djg6OkludDMyPiB0aW1lb3V0SW50MzIgPSB0aW1lb3V0VmFsdWUtPlRv
SW50MzIoKTsKKyAgICAgICAgICAgIGlmICh0aW1lb3V0SW50MzIuSXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICAgICAgc3VjY2VlZGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBXcmFwIHRvIGludDMyIGFuZCBmb3JjZSBu
b24tbmVnYXRpdmUgdG8gbWF0Y2ggYmVoYXZpb3Igb2Ygd2luZG93LnNldFRpbWVvdXQuCisgICAg
ICAgICAgICBvcHRpb25zLT5zZXRUaW1lb3V0KG1heCgwLCB0aW1lb3V0SW50MzItPlZhbHVlKCkp
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG1heGltdW1B
Z2VWYWx1ZSA9IG9iamVjdC0+R2V0KHY4OjpTdHJpbmc6Ok5ldygibWF4aW11bUFnZSIpKTsKKyAg
ICBpZiAobWF4aW11bUFnZVZhbHVlLklzRW1wdHkoKSkgeworICAgICAgICBzdWNjZWVkZWQgPSBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICghbWF4aW11bUFnZVZhbHVl
LT5Jc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6TnVtYmVyPiBtYXhpbXVt
QWdlTnVtYmVyID0gbWF4aW11bUFnZVZhbHVlLT5Ub051bWJlcigpOworICAgICAgICBpZiAobWF4
aW11bUFnZU51bWJlci5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHN1Y2NlZWRlZCA9IGZhbHNl
OworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgZG91YmxlIG1heGlt
dW1BZ2VEb3VibGUgPSBtYXhpbXVtQWdlTnVtYmVyLT5WYWx1ZSgpOworICAgICAgICBpZiAoaXNp
bmYobWF4aW11bUFnZURvdWJsZSkgJiYgbWF4aW11bUFnZURvdWJsZSA+IDApIHsKKyAgICAgICAg
ICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBwb3NpdGl2ZSBpbmZpbml0eSwgY2xlYXIgbWF4aW11bUFn
ZS4KKyAgICAgICAgICAgIG9wdGlvbnMtPmNsZWFyTWF4aW11bUFnZSgpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpJbnQzMj4gbWF4aW11bUFnZUludDMyID0g
bWF4aW11bUFnZVZhbHVlLT5Ub0ludDMyKCk7CisgICAgICAgICAgICBpZiAobWF4aW11bUFnZUlu
dDMyLklzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHN1Y2NlZWRlZCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gV3Jh
cCB0byBpbnQzMiBhbmQgZm9yY2Ugbm9uLW5lZ2F0aXZlIHRvIG1hdGNoIGJlaGF2aW9yIG9mIHdp
bmRvdy5zZXRUaW1lb3V0LgorICAgICAgICAgICAgb3B0aW9ucy0+c2V0TWF4aW11bUFnZShtYXgo
MCwgbWF4aW11bUFnZUludDMyLT5WYWx1ZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gb3B0aW9ucy5yZWxlYXNlKCk7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChHZW9sb2Nh
dGlvbkdldEN1cnJlbnRQb3NpdGlvbikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5HZW9sb2NhdGlv
bi5nZXRDdXJyZW50UG9zaXRpb24oKSIpOworCisgICAgYm9vbCBzdWNjZWVkZWQgPSBmYWxzZTsK
KworICAgIFJlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNrID0gY3JlYXRl
UG9zaXRpb25DYWxsYmFjayhhcmdzWzBdLCBzdWNjZWVkZWQpOworICAgIGlmICghc3VjY2VlZGVk
KQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIEFTU0VSVChwb3NpdGlvbkNh
bGxiYWNrKTsKKworICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+IHBvc2l0aW9uRXJy
b3JDYWxsYmFjayA9IGNyZWF0ZVBvc2l0aW9uRXJyb3JDYWxsYmFjayhhcmdzWzFdLCBzdWNjZWVk
ZWQpOworICAgIGlmICghc3VjY2VlZGVkKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
OworCisgICAgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gcG9zaXRpb25PcHRpb25zID0gY3JlYXRl
UG9zaXRpb25PcHRpb25zKGFyZ3NbMl0sIHN1Y2NlZWRlZCk7CisgICAgaWYgKCFzdWNjZWVkZWQp
CisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgQVNTRVJUKHBvc2l0aW9uT3B0
aW9ucyk7CisKKyAgICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24gPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxHZW9sb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpHRU9MT0NBVElP
TiwgYXJncy5Ib2xkZXIoKSk7CisgICAgZ2VvbG9jYXRpb24tPmdldEN1cnJlbnRQb3NpdGlvbihw
b3NpdGlvbkNhbGxiYWNrLnJlbGVhc2UoKSwgcG9zaXRpb25FcnJvckNhbGxiYWNrLnJlbGVhc2Uo
KSwgcG9zaXRpb25PcHRpb25zLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKEdlb2xvY2F0aW9uV2F0Y2hQb3NpdGlvbikKK3sK
KyAgICBJTkNfU1RBVFMoIkRPTS5HZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKCkiKTsKKworICAg
IGJvb2wgc3VjY2VlZGVkID0gZmFsc2U7CisKKyAgICBSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4g
cG9zaXRpb25DYWxsYmFjayA9IGNyZWF0ZVBvc2l0aW9uQ2FsbGJhY2soYXJnc1swXSwgc3VjY2Vl
ZGVkKTsKKyAgICBpZiAoIXN1Y2NlZWRlZCkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKKyAgICBBU1NFUlQocG9zaXRpb25DYWxsYmFjayk7CisKKyAgICBSZWZQdHI8UG9zaXRpb25F
cnJvckNhbGxiYWNrPiBwb3NpdGlvbkVycm9yQ2FsbGJhY2sgPSBjcmVhdGVQb3NpdGlvbkVycm9y
Q2FsbGJhY2soYXJnc1sxXSwgc3VjY2VlZGVkKTsKKyAgICBpZiAoIXN1Y2NlZWRlZCkKKyAgICAg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIFJlZlB0cjxQb3NpdGlvbk9wdGlvbnM+
IHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucyhhcmdzWzJdLCBzdWNjZWVk
ZWQpOworICAgIGlmICghc3VjY2VlZGVkKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
OworICAgIEFTU0VSVChwb3NpdGlvbk9wdGlvbnMpOworCisgICAgR2VvbG9jYXRpb24qIGdlb2xv
Y2F0aW9uID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8R2VvbG9jYXRpb24+
KFY4Q2xhc3NJbmRleDo6R0VPTE9DQVRJT04sIGFyZ3MuSG9sZGVyKCkpOworICAgIGludCB3YXRj
aElkID0gZ2VvbG9jYXRpb24tPndhdGNoUG9zaXRpb24ocG9zaXRpb25DYWxsYmFjay5yZWxlYXNl
KCksIHBvc2l0aW9uRXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHBvc2l0aW9uT3B0aW9ucy5yZWxl
YXNlKCkpOworICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcod2F0Y2hJZCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44021</attachid>
            <date>2009-11-30 07:57:14 -0800</date>
            <delta_ts>2009-12-01 04:24:03 -0800</delta_ts>
            <desc>Patch 2 for Bug 30206</desc>
            <filename>addV8Bindings2.txt</filename>
            <type>text/plain</type>
            <size>33555</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTQ4NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMDktMTEtMzAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZHMgVjggYmluZGluZ3MgZm9yIEdlb2xvY2F0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAyMDYKKworICAgICAgICBBbHNvIGFkZHMgR2Vv
bG9jYXRpb24gZmlsZXMgdG8gQ2hyb21lIGJ1aWxkIGZpbGVzLgorCisgICAgICAgICogV2ViQ29y
ZS5neXAvV2ViQ29yZS5neXA6IE1vZGlmaWVkLiBDb3JyZWN0cyBsaXN0IG9mIEdlb2xvY2F0aW9u
IElETCBmaWxlcy4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IE1vZGlmaWVkLiBBZGRzIEdlb2xv
Y2F0aW9uIGZpbGVzLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTU9iamVjdHNJbmNsdWRlLmg6
IE1vZGlmaWVkLiBBZGRzIEdlb2xvY2F0aW9uIGluY2x1ZGVzLgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwOiBNb2RpZmllZC4gQWRkcyBHZW9sb2NhdGlv
biBmaWxlcy4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEluZGV4LmNwcDogTW9kaWZpZWQuIElu
Y2x1ZGVzIEdlb2xvY2F0aW9uIGdlbmVyYXRlZCBoZWFkZXJzLgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4SW5kZXguaDogTW9kaWZpZWQuIEFkZHMgR2VvbG9jYXRpb24gdHlwZXMgdG8gRE9NX09C
SkVDVF9UWVBFUy4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDb29yZGluYXRlc0N1
c3RvbS5jcHA6IEFkZGVkLiBIYW5kbGVzIG9wdGlvbmFsIHByb3BlcnRpZXMuCisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oOiBNb2RpZmllZC4gRGVjbGFyZXMg
Y2FsbGJhY2tzIGFuZCBnZXR0ZXJzLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1
c3RvbVBvc2l0aW9uQ2FsbGJhY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlY4Q3Vz
dG9tUG9zaXRpb25DYWxsYmFjazo6VjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrKTogQWRkZWQuIENv
bnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrOjp+
VjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrKTogQWRkZWQuIERlc3RydWN0b3IuCisgICAgICAgIChX
ZWJDb3JlOjpWOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KTogQWRkZWQuIElu
dm9rZXMgY2FsbGJhY2suCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9z
aXRpb25DYWxsYmFjay5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tUG9zaXRp
b25DYWxsYmFjazo6Y3JlYXRlKTogQWRkZWQuIEZhY3RvcnkgbWV0aG9kLgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjay5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6OlY4Q3Vz
dG9tUG9zaXRpb25FcnJvckNhbGxiYWNrKTogQWRkZWQuIENvbnN0cnVjdG9yLgorICAgICAgICAo
V2ViQ29yZTo6VjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6On5WOEN1c3RvbVBvc2l0aW9u
RXJyb3JDYWxsYmFjayk6IEFkZGVkLiBEZXN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6VjhD
dXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KTogQWRkZWQuIEludm9rZXMg
Y2FsbGJhY2suCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25F
cnJvckNhbGxiYWNrLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21Qb3NpdGlv
bkVycm9yQ2FsbGJhY2s6OmNyZWF0ZSk6IEFkZGVkLiBGYWN0b3J5IG1ldGhvZC4KKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhHZW9sb2NhdGlvbkN1c3RvbS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6dGhyb3dUeXBlTWlzbWF0Y2hFeGNlcHRpb24pOiBBZGRlZC4gVGhyb3dz
IGEgdHlwZSBtaXNtYXRjaCBlcnJvci4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBvc2l0aW9u
Q2FsbGJhY2spOiBBZGRlZC4gSGFuZGxlcyB0eXBlIGNoZWNraW5nIGZvciBzdWNjZXNzQ2FsbGJh
Y2sgYXJndW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVQb3NpdGlvbkVycm9yQ2FsbGJh
Y2spOiBBZGRlZC4gSGFuZGxlcyB0eXBlIGNoZWNraW5nIGZvciBlcnJvckNhbGxiYWNrIGFyZ3Vt
ZW50LgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUG9zaXRpb25PcHRpb25zKTogQWRkZWQuIEhh
bmRsZXMgdHlwZSBjaGVja2luZyBmb3IgcG9zaXRpb25PcHRpb25zIGFyZ3VtZW50LgorCiAyMDA5
LTExLTMwICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBHdXN0YXZvIE5vcm9uaGEuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNTE0ODYpCisrKyBXZWJDb3Jl
L1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMTg3LDYgKzE4Nyw3IEBACiAgICAgICAg
ICAgICAncGFnZS9BYnN0cmFjdFZpZXcuaWRsJywKICAgICAgICAgICAgICdwYWdlL0JhckluZm8u
aWRsJywKICAgICAgICAgICAgICdwYWdlL0NvbnNvbGUuaWRsJywKKyAgICAgICAgICAgICdwYWdl
L0Nvb3JkaW5hdGVzLmlkbCcsCiAgICAgICAgICAgICAncGFnZS9ET01TZWxlY3Rpb24uaWRsJywK
ICAgICAgICAgICAgICdwYWdlL0RPTVdpbmRvdy5pZGwnLAogICAgICAgICAgICAgJ3BhZ2UvR2Vv
bG9jYXRpb24uaWRsJywKQEAgLTY0OCwxMiArNjQ5LDE3IEBACiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpZW50UmVjdExpc3RDdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDbGlwYm9hcmRDdXN0b20uY3BwJywKKyAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDb29yZGluYXRlc0N1c3RvbS5jcHAnLAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0
b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDb25zb2xlQ3VzdG9t
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRXZlbnRMaXN0ZW5lci5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUV2ZW50TGlzdGVu
ZXIuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25D
YWxsYmFjay5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBv
c2l0aW9uQ2FsbGJhY2suaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3Vz
dG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmgnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrLmNwcCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2su
aCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjay5jcHAnLApAQCAtNjc3LDYgKzY4Myw3IEBACiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvY3VzdG9tL1Y4RmlsZUxpc3RDdXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92
OC9jdXN0b20vVjhHZW9sb2NhdGlvbkN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5oJywK
ICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQWxsQ29sbGVjdGlvbkN1c3Rv
bS5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiA1MTQ4NikKKysr
IFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCwx
MyArMjI4LDYgQEAKICAgICAgICAgIyBKU0Mtb25seS4KICAgICAgICAgJy4uL2luc3BlY3Rvci9K
YXZhU2NyaXB0Q2FsbEZyYW1lLmlkbCcsCiAKLSAgICAgICAgIyBFTkFCTEVfR0VPTE9DQVRJT04g
b25seS4KLSAgICAgICAgJy4uL3BhZ2UvR2VvbG9jYXRpb24uaWRsJywKLSAgICAgICAgJy4uL3Bh
Z2UvR2VvcG9zaXRpb24uaWRsJywKLSAgICAgICAgJy4uL3BhZ2UvUG9zaXRpb25DYWxsYmFjay5p
ZGwnLAotICAgICAgICAnLi4vcGFnZS9Qb3NpdGlvbkVycm9yLmlkbCcsCi0gICAgICAgICcuLi9w
YWdlL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5pZGwnLAotCiAgICAgICAgICMgQmluZGluZ3Mgd2l0
aCBjdXN0b20gT2JqZWN0aXZlLUMgaW1wbGVtZW50YXRpb25zLgogICAgICAgICAnLi4vcGFnZS9B
YnN0cmFjdFZpZXcuaWRsJywKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9ET01PYmplY3Rz
SW5jbHVkZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvRE9NT2JqZWN0c0lu
Y2x1ZGUuaAkocmV2aXNpb24gNTE0ODYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTU9iamVj
dHNJbmNsdWRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw2ICsxODUsMTIgQEAKICNpbmNsdWRl
ICJTdG9yYWdlRXZlbnQuaCIKICNlbmRpZiAvLyBET01fU1RPUkFHRQogCisvLyBHRU9MT0NBVElP
TgorI2luY2x1ZGUgIkNvb3JkaW5hdGVzLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKKyNp
bmNsdWRlICJHZW9wb3NpdGlvbi5oIgorI2luY2x1ZGUgIlBvc2l0aW9uRXJyb3IuaCIKKwogI2lm
IEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHQW5nbGUuaCIKICNpbmNsdWRlICJTVkdBbmltYXRl
ZFBvaW50cy5oIgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9EZXJpdmVkU291cmNlc0FsbElu
T25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L0Rlcml2ZWRTb3VyY2Vz
QWxsSW5PbmUuY3BwCShyZXZpc2lvbiA1MTQ4NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvRGVy
aXZlZFNvdXJjZXNBbGxJbk9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcgQEAK
ICNpbmNsdWRlICJiaW5kaW5ncy9WOENvbW1lbnQuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4
Q29tcG9zaXRpb25FdmVudC5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhDb25zb2xlLmNwcCIK
KyNpbmNsdWRlICJiaW5kaW5ncy9WOENvb3JkaW5hdGVzLmNwcCIKICNpbmNsdWRlICJiaW5kaW5n
cy9WOENvdW50ZXIuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q1NTQ2hhcnNldFJ1bGUuY3Bw
IgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q1NTRm9udEZhY2VSdWxlLmNwcCIKQEAgLTEwMyw2ICsx
MDQsOCBAQAogI2luY2x1ZGUgImJpbmRpbmdzL1Y4RmlsZS5jcHAiCiAjaW5jbHVkZSAiYmluZGlu
Z3MvVjhGaWxlTGlzdC5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhIaXN0b3J5LmNwcCIKKyNp
bmNsdWRlICJiaW5kaW5ncy9WOEdlb2xvY2F0aW9uLmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9W
OEdlb3Bvc2l0aW9uLmNwcCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOEhUTUxBbGxDb2xsZWN0aW9u
LmNwcCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOEhUTUxBbmNob3JFbGVtZW50LmNwcCIKICNpbmNs
dWRlICJiaW5kaW5ncy9WOEhUTUxBcHBsZXRFbGVtZW50LmNwcCIKQEAgLTE5OCw2ICsyMDEsNyBA
QAogI2luY2x1ZGUgImJpbmRpbmdzL1Y4UGFnZVRyYW5zaXRpb25FdmVudC5jcHAiCiAjaW5jbHVk
ZSAiYmluZGluZ3MvVjhQbHVnaW4uY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4UGx1Z2luQXJy
YXkuY3BwIgorI2luY2x1ZGUgImJpbmRpbmdzL1Y4UG9zaXRpb25FcnJvci5jcHAiCiAjaW5jbHVk
ZSAiYmluZGluZ3MvVjhQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwIgogI2luY2x1ZGUgImJpbmRp
bmdzL1Y4UHJvZ3Jlc3NFdmVudC5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhSYW5nZS5jcHAi
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5jcHAJKHJldmlzaW9uIDUxNDg2KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEluZGV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM2LDYgKzQzNiwx
MiBAQAogI2luY2x1ZGUgIlY4SW5zcGVjdG9yQmFja2VuZC5oIgogI2VuZGlmCiAKKy8vIEdlb2xv
Y2F0aW9uCisjaW5jbHVkZSAiVjhDb29yZGluYXRlcy5oIgorI2luY2x1ZGUgIlY4R2VvbG9jYXRp
b24uaCIKKyNpbmNsdWRlICJWOEdlb3Bvc2l0aW9uLmgiCisjaW5jbHVkZSAiVjhQb3NpdGlvbkVy
cm9yLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRnVuY3Rpb25UZW1wbGF0ZUZhY3Rvcnkg
VjhDbGFzc0luZGV4OjpHZXRGYWN0b3J5KFY4V3JhcHBlclR5cGUgdHlwZSkKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvVjhJbmRleC5oCShyZXZpc2lvbiA1MTQ4NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJ
bmRleC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTIsNiArNDkyLDEyIEBAIHR5cGVkZWYgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGwKICNkZWZpbmUgRE9NX09CSkVDVF9JTlNQRUNUT1Jf
VFlQRVMoVikKICNlbmRpZgogCisjZGVmaW5lIERPTV9PQkpFQ1RfR0VPTE9DQVRJT05fVFlQRVMo
VikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVihDT09SRElOQVRFUywg
Q29vcmRpbmF0ZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgVihHRU9MT0NBVElPTiwgR2VvbG9jYXRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgVihHRU9QT1NJVElPTiwgR2VvcG9zaXRpb24pICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVihQT1NJVElPTkVSUk9SLCBQ
b3NpdGlvbkVycm9yKQorCiAjZGVmaW5lIERPTV9PQkpFQ1RfVFlQRVMoVikgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRE9NX09CSkVDVF9UWVBFU18x
KFYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg
RE9NX09CSkVDVF9UWVBFU18yKFYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCkBAIC01MDEsNyArNTA3LDggQEAgdHlwZWRlZiB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbAogICAgIERPTV9PQkpFQ1RfM0RfQ0FOVkFTX1RZUEVTKFYpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIERPTV9PQkpFQ1RfWFBBVEhf
VFlQRVMoVikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
IERPTV9PQkpFQ1RfWFNMVF9UWVBFUyhWKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIERPTV9PQkpFQ1RfSU5TUEVDVE9SX1RZUEVTKFYpCisgICAgRE9N
X09CSkVDVF9JTlNQRUNUT1JfVFlQRVMoVikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgRE9NX09CSkVDVF9HRU9MT0NBVElPTl9UWVBFUyhWKQogCiAjaWYgRU5B
QkxFKFNWRykKIC8vIFNWR19PQkpFQ1RfVFlQRVMgYXJlIHN2ZyBub24tbm9kZSwgbm9uLXBvZCB0
eXBlcy4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29vcmRpbmF0ZXNDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29vcmRp
bmF0ZXNDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhDb29yZGluYXRlc0N1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJWOENvb3JkaW5hdGVzLmgiCisjaW5jbHVk
ZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAi
VjhQcm94eS5oIgorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZXMuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisgICAgQUNDRVNTT1JfR0VUVEVSKENvb3JkaW5hdGVzQWx0aXR1ZGUpIHsKKyAgICAg
ICAgSU5DX1NUQVRTKCJET00uQ29vcmRpbmF0ZXMuYWx0aXR1ZGUuX2dldCIpOworICAgICAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7CisgICAgICAgIENv
b3JkaW5hdGVzKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDb29y
ZGluYXRlcz4oVjhDbGFzc0luZGV4OjpDT09SRElOQVRFUywgaG9sZGVyKTsKKyAgICAgICAgaWYg
KCFpbXAtPmNhblByb3ZpZGVBbHRpdHVkZSgpKQorICAgICAgICAgICAgcmV0dXJuIHY4OjpOdWxs
KCk7CisgICAgICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcoaW1wLT5hbHRpdHVkZSgpKTsKKyAg
ICB9CisKKyAgICBBQ0NFU1NPUl9HRVRURVIoQ29vcmRpbmF0ZXNBbHRpdHVkZUFjY3VyYWN5KSB7
CisgICAgICAgIElOQ19TVEFUUygiRE9NLkNvb3JkaW5hdGVzLmFsdGl0dWRlQWNjdXJhY3kuX2dl
dCIpOworICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVy
KCk7CisgICAgICAgIENvb3JkaW5hdGVzKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxDb29yZGluYXRlcz4oVjhDbGFzc0luZGV4OjpDT09SRElOQVRFUywgaG9sZGVy
KTsKKyAgICAgICAgaWYgKCFpbXAtPmNhblByb3ZpZGVBbHRpdHVkZUFjY3VyYWN5KCkpCisgICAg
ICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICAgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5l
dyhpbXAtPmFsdGl0dWRlQWNjdXJhY3koKSk7CisgICAgfQorCisgICAgQUNDRVNTT1JfR0VUVEVS
KENvb3JkaW5hdGVzSGVhZGluZykgeworICAgICAgICBJTkNfU1RBVFMoIkRPTS5Db29yZGluYXRl
cy5oZWFkaW5nLl9nZXQiKTsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIg
PSBpbmZvLkhvbGRlcigpOworICAgICAgICBDb29yZGluYXRlcyogaW1wID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q29vcmRpbmF0ZXM+KFY4Q2xhc3NJbmRleDo6Q09PUkRJ
TkFURVMsIGhvbGRlcik7CisgICAgICAgIGlmICghaW1wLT5jYW5Qcm92aWRlSGVhZGluZygpKQor
ICAgICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgICAgIHJldHVybiB2ODo6TnVtYmVy
OjpOZXcoaW1wLT5oZWFkaW5nKCkpOworICAgIH0KKworICAgIEFDQ0VTU09SX0dFVFRFUihDb29y
ZGluYXRlc1NwZWVkKSB7CisgICAgICAgIElOQ19TVEFUUygiRE9NLkNvb3JkaW5hdGVzLnNwZWVk
Ll9nZXQiKTsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhv
bGRlcigpOworICAgICAgICBDb29yZGluYXRlcyogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8Q29vcmRpbmF0ZXM+KFY4Q2xhc3NJbmRleDo6Q09PUkRJTkFURVMsIGhv
bGRlcik7CisgICAgICAgIGlmICghaW1wLT5jYW5Qcm92aWRlU3BlZWQoKSkKKyAgICAgICAgICAg
IHJldHVybiB2ODo6TnVsbCgpOworICAgICAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3KGltcC0+
c3BlZWQoKSk7CisgICAgfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAkocmV2aXNpb24gNTE0ODYp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjkyLDYgKzY5MiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IERFQ0xBUkVfQUNDRVNTT1JfUlVOVElNRV9FTkFCTEVSKERPTVdpbmRvd1dlYlNvY2tldCk7CiAj
ZW5kaWYKIAorICAgICAgICBERUNMQVJFX0NBTExCQUNLKEdlb2xvY2F0aW9uR2V0Q3VycmVudFBv
c2l0aW9uKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhHZW9sb2NhdGlvbldhdGNoUG9zaXRp
b24pOworICAgICAgICBERUNMQVJFX1BST1BFUlRZX0FDQ0VTU09SX0dFVFRFUihDb29yZGluYXRl
c0FsdGl0dWRlKTsKKyAgICAgICAgREVDTEFSRV9QUk9QRVJUWV9BQ0NFU1NPUl9HRVRURVIoQ29v
cmRpbmF0ZXNBbHRpdHVkZUFjY3VyYWN5KTsKKyAgICAgICAgREVDTEFSRV9QUk9QRVJUWV9BQ0NF
U1NPUl9HRVRURVIoQ29vcmRpbmF0ZXNIZWFkaW5nKTsKKyAgICAgICAgREVDTEFSRV9QUk9QRVJU
WV9BQ0NFU1NPUl9HRVRURVIoQ29vcmRpbmF0ZXNTcGVlZCk7CisKICN1bmRlZiBERUNMQVJFX0lO
REVYRURfQUNDRVNTX0NIRUNLCiAjdW5kZWYgREVDTEFSRV9OQU1FRF9BQ0NFU1NfQ0hFQ0sKIApJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBv
c2l0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhDdXN0b21Qb3NpdGlvbkNh
bGxiYWNrLmgiCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tVm9pZENh
bGxiYWNrLmgiICAvLyBGb3IgaW52b2tlQ2FsbGJhY2sKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitWOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2s6OlY4Q3VzdG9tUG9zaXRpb25DYWxsYmFjayh2ODo6
TG9jYWw8djg6Ok9iamVjdD4gY2FsbGJhY2ssIEZyYW1lKiBmcmFtZSkKKyAgICA6IG1fY2FsbGJh
Y2sodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhjYWxsYmFjaykpCisgICAgLCBtX2Zy
YW1lKGZyYW1lKQoreworfQorCitWOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2s6On5WOEN1c3RvbVBv
c2l0aW9uQ2FsbGJhY2soKQoreworICAgIG1fY2FsbGJhY2suRGlzcG9zZSgpOworfQorCit2b2lk
IFY4Q3VzdG9tUG9zaXRpb25DYWxsYmFjazo6aGFuZGxlRXZlbnQoR2VvcG9zaXRpb24qIHBvc2l0
aW9uKQoreworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKworICAgIHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBWOFByb3h5Ojpjb250ZXh0KG1fZnJhbWUuZ2V0KCkp
OworICAgIGlmIChjb250ZXh0LklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdjg6
OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOworCisgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGFyZ3ZbXSA9IHsKKyAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChW
OENsYXNzSW5kZXg6OkdFT1BPU0lUSU9OLCBwb3NpdGlvbikKKyAgICB9OworCisgICAgLy8gUHJv
dGVjdCB0aGUgZnJhbWUgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVybnMuCisgICAgUmVmUHRyPEZy
YW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7CisKKyAgICBib29sIGNhbGxiYWNrUmV0dXJuVmFsdWUg
PSBmYWxzZTsKKyAgICBpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAxLCBhcmd2LCBjYWxsYmFj
a1JldHVyblZhbHVlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNr
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBv
c2l0aW9uQ2FsbGJhY2suaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVjhD
dXN0b21Qb3NpdGlvbkNhbGxiYWNrX2gKKyNkZWZpbmUgVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNr
X2gKKworI2luY2x1ZGUgIlBvc2l0aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlIDx2OC5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyYW1lOworY2xhc3MgR2VvcG9zaXRpb247CisKK2Ns
YXNzIFY4Q3VzdG9tUG9zaXRpb25DYWxsYmFjayA6IHB1YmxpYyBQb3NpdGlvbkNhbGxiYWNrIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2s+
IGNyZWF0ZSh2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgRnJhbWUqIGZyYW1lKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKHZhbHVlLT5Jc09iamVjdCgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBWOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2sodmFsdWUtPlRvT2JqZWN0KCksIGZyYW1l
KSk7CisgICAgfQorICAgIHZpcnR1YWwgflY4Q3VzdG9tUG9zaXRpb25DYWxsYmFjaygpOworCisg
ICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEdlb3Bvc2l0aW9uKik7CisKK3ByaXZhdGU6Cisg
ICAgVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiwgRnJhbWUq
KTsKKworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1fY2FsbGJhY2s7CisgICAgUmVm
UHRyPEZyYW1lPiBtX2ZyYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrX2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFj
ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3Rv
bVBvc2l0aW9uRXJyb3JDYWxsYmFjay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxi
YWNrLmgiCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tVm9pZENhbGxi
YWNrLmgiICAvLyBGb3IgaW52b2tlQ2FsbGJhY2sKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitW
OEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjazo6VjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJh
Y2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNhbGxiYWNrLCBGcmFtZSogZnJhbWUpCisgICAgOiBt
X2NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoY2FsbGJhY2spKQorICAg
ICwgbV9mcmFtZShmcmFtZSkKK3sKK30KKworVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6
On5WOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjaygpCit7CisgICAgbV9jYWxsYmFjay5EaXNw
b3NlKCk7Cit9CisKK3ZvaWQgVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2
ZW50KFBvc2l0aW9uRXJyb3IqIGVycm9yKQoreworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVT
Y29wZTsKKworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBWOFByb3h5Ojpj
b250ZXh0KG1fZnJhbWUuZ2V0KCkpOworICAgIGlmIChjb250ZXh0LklzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOworCisg
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHsKKyAgICAgICAgVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlBPU0lUSU9ORVJST1IsIGVycm9yKQor
ICAgIH07CisKKyAgICAvLyBQcm90ZWN0IHRoZSBmcmFtZSB1bnRpbCB0aGUgY2FsbGJhY2sgcmV0
dXJucy4KKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3RvcihtX2ZyYW1lKTsKKworICAgIGJvb2wg
Y2FsbGJhY2tSZXR1cm5WYWx1ZSA9IGZhbHNlOworICAgIGludm9rZUNhbGxiYWNrKG1fY2FsbGJh
Y2ssIDEsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9u
RXJyb3JDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjay5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBWOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxs
YmFja19oCisjZGVmaW5lIFY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrX2gKKworI2luY2x1
ZGUgIlBvc2l0aW9uRXJyb3JDYWxsYmFjay5oIgorI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRnJhbWU7CitjbGFzcyBQb3NpdGlvbkVycm9yOworCitjbGFzcyBW
OEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjayA6IHB1YmxpYyBQb3NpdGlvbkVycm9yQ2FsbGJh
Y2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4Q3VzdG9tUG9zaXRpb25FcnJv
ckNhbGxiYWNrPiBjcmVhdGUodjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIEZyYW1lKiBmcmFt
ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+SXNPYmplY3QoKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2sodmFsdWUtPlRv
T2JqZWN0KCksIGZyYW1lKSk7CisgICAgfQorICAgIHZpcnR1YWwgflY4Q3VzdG9tUG9zaXRpb25F
cnJvckNhbGxiYWNrKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoUG9zaXRpb25F
cnJvciopOworCitwcml2YXRlOgorICAgIFY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrKHY4
OjpMb2NhbDx2ODo6T2JqZWN0PiwgRnJhbWUqKTsKKworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+IG1fY2FsbGJhY2s7CisgICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1lOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2Fs
bGJhY2tfaApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhHZW9sb2NhdGlvbkN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhHZW9s
b2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEdlb2xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgorI2luY2x1
ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1ZGUg
IlY4Q3VzdG9tUG9zaXRpb25DYWxsYmFjay5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tUG9zaXRpb25F
cnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCisKK3VzaW5nIG5hbWVzcGFj
ZSBzdGQ7Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBjb25zdCBjaGFyKiB0eXBlTWlzbWF0Y2hFcnJvciA9ICJUWVBFX01JU01BVENIX0VSUjog
RE9NIEV4Y2VwdGlvbiAxNyI7CisKK3N0YXRpYyB2b2lkIHRocm93VHlwZU1pc21hdGNoRXhjZXB0
aW9uKCkKK3sKKyAgICBWOFByb3h5Ojp0aHJvd0Vycm9yKFY4UHJveHk6OkdlbmVyYWxFcnJvciwg
dHlwZU1pc21hdGNoRXJyb3IpOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxQb3NpdGlvbkNhbGxi
YWNrPiBjcmVhdGVQb3NpdGlvbkNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBi
b29sJiBzdWNjZWVkZWQpCit7CisgICAgc3VjY2VlZGVkID0gdHJ1ZTsKKworICAgIC8vIFRoZSBz
cGVjIHNwZWNpZmllcyAnRnVuY3Rpb25Pbmx5JyBmb3IgdGhpcyBvYmplY3QuCisgICAgaWYgKCF2
YWx1ZS0+SXNGdW5jdGlvbigpKSB7CisgICAgICAgIHN1Y2NlZWRlZCA9IGZhbHNlOworICAgICAg
ICB0aHJvd1R5cGVNaXNtYXRjaEV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yQ3VycmVudENv
bnRleHQoKTsKKyAgICByZXR1cm4gVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrOjpjcmVhdGUodmFs
dWUsIGZyYW1lKTsKK30KKworc3RhdGljIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNr
PiBjcmVhdGVQb3NpdGlvbkVycm9yQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUs
IGJvb2wmIHN1Y2NlZWRlZCkKK3sKKyAgICBzdWNjZWVkZWQgPSB0cnVlOworCisgICAgLy8gQXJn
dW1lbnQgaXMgb3B0aW9uYWwgKGhlbmNlIHVuZGVmaW5lZCBpcyBhbGxvd2VkKSwgYW5kIG51bGwg
aXMgYWxsb3dlZC4KKyAgICBpZiAoaXNVbmRlZmluZWRPck51bGwodmFsdWUpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIC8vIFRoZSBzcGVjIHNwZWNpZmllcyAnRnVuY3Rpb25Pbmx5JyBmb3Ig
dGhpcyBvYmplY3QuCisgICAgaWYgKCF2YWx1ZS0+SXNGdW5jdGlvbigpKSB7CisgICAgICAgIHN1
Y2NlZWRlZCA9IGZhbHNlOworICAgICAgICB0aHJvd1R5cGVNaXNtYXRjaEV4Y2VwdGlvbigpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5Ojpy
ZXRyaWV2ZUZyYW1lRm9yQ3VycmVudENvbnRleHQoKTsKKyAgICByZXR1cm4gVjhDdXN0b21Qb3Np
dGlvbkVycm9yQ2FsbGJhY2s6OmNyZWF0ZSh2YWx1ZSwgZnJhbWUpOworfQorCitzdGF0aWMgUGFz
c1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucyh2ODo6TG9jYWw8
djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgc3VjY2VlZGVkKQoreworICAgIHN1Y2NlZWRlZCA9IHRy
dWU7CisKKyAgICAvLyBDcmVhdGUgZGVmYXVsdCBvcHRpb25zLgorICAgIFJlZlB0cjxQb3NpdGlv
bk9wdGlvbnM+IG9wdGlvbnMgPSBQb3NpdGlvbk9wdGlvbnM6OmNyZWF0ZSgpOworCisgICAgLy8g
QXJndW1lbnQgaXMgb3B0aW9uYWwgKGhlbmNlIHVuZGVmaW5lZCBpcyBhbGxvd2VkKSwgYW5kIG51
bGwgaXMgYWxsb3dlZC4KKyAgICBpZiAoaXNVbmRlZmluZWRPck51bGwodmFsdWUpKSB7CisgICAg
ICAgIC8vIFVzZSBkZWZhdWx0IG9wdGlvbnMuCisgICAgICAgIHJldHVybiBvcHRpb25zLnJlbGVh
c2UoKTsKKyAgICB9CisKKyAgICAvLyBHaXZlbiB0aGUgYWJvdmUgdGVzdCwgdGhpcyB3aWxsIGFs
d2F5cyB5aWVsZCBhbiBvYmplY3QuCisgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCA9
IHZhbHVlLT5Ub09iamVjdCgpOworCisgICAgLy8gRm9yIGFsbCB0aHJlZSBwcm9wZXJ0aWVzLCB3
ZSBhcHBseSB0aGUgZm9sbG93aW5nIC4uLgorICAgIC8vIC0gSWYgdGhlIGdldHRlciBvciB0aGUg
cHJvcGVydHkncyB2YWx1ZU9mIG1ldGhvZCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB3ZQorICAgIC8v
ICAgcXVpdCBzbyBhcyBub3QgdG8gcmlzayBvdmVyd3JpdGluZyB0aGUgZXhjZXB0aW9uLgorICAg
IC8vIC0gSWYgdGhlIHZhbHVlIGlzIGFic2VudCBvciB1bmRlZmluZWQsIHdlIGRvbid0IG92ZXJy
aWRlIHRoZSBkZWZhdWx0LgorICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGVuYWJsZUhpZ2hBY2N1
cmFjeVZhbHVlID0gb2JqZWN0LT5HZXQodjg6OlN0cmluZzo6TmV3KCJlbmFibGVIaWdoQWNjdXJh
Y3kiKSk7CisgICAgaWYgKGVuYWJsZUhpZ2hBY2N1cmFjeVZhbHVlLklzRW1wdHkoKSkgeworICAg
ICAgICBzdWNjZWVkZWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlm
ICghZW5hYmxlSGlnaEFjY3VyYWN5VmFsdWUtPklzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgdjg6
OkxvY2FsPHY4OjpCb29sZWFuPiBlbmFibGVIaWdoQWNjdXJhY3lCb29sZWFuID0gZW5hYmxlSGln
aEFjY3VyYWN5VmFsdWUtPlRvQm9vbGVhbigpOworICAgICAgICBpZiAoZW5hYmxlSGlnaEFjY3Vy
YWN5Qm9vbGVhbi5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHN1Y2NlZWRlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgb3B0aW9ucy0+c2V0RW5h
YmxlSGlnaEFjY3VyYWN5KGVuYWJsZUhpZ2hBY2N1cmFjeUJvb2xlYW4tPlZhbHVlKCkpOworICAg
IH0KKworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHRpbWVvdXRWYWx1ZSA9IG9iamVjdC0+R2V0
KHY4OjpTdHJpbmc6Ok5ldygidGltZW91dCIpKTsKKyAgICBpZiAodGltZW91dFZhbHVlLklzRW1w
dHkoKSkgeworICAgICAgICBzdWNjZWVkZWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorICAgIGlmICghdGltZW91dFZhbHVlLT5Jc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHY4
OjpMb2NhbDx2ODo6TnVtYmVyPiB0aW1lb3V0TnVtYmVyID0gdGltZW91dFZhbHVlLT5Ub051bWJl
cigpOworICAgICAgICBpZiAodGltZW91dE51bWJlci5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IHN1Y2NlZWRlZCA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAg
ICAgICAgZG91YmxlIHRpbWVvdXREb3VibGUgPSB0aW1lb3V0TnVtYmVyLT5WYWx1ZSgpOworICAg
ICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgcG9zaXRpdmUgaW5maW5pdHksIHRoZXJlJ3Mgbm90aGlu
ZyB0byBkby4KKyAgICAgICAgaWYgKCEoaXNpbmYodGltZW91dERvdWJsZSkgJiYgdGltZW91dERv
dWJsZSA+IDApKSB7CisgICAgICAgICAgICB2ODo6TG9jYWw8djg6OkludDMyPiB0aW1lb3V0SW50
MzIgPSB0aW1lb3V0VmFsdWUtPlRvSW50MzIoKTsKKyAgICAgICAgICAgIGlmICh0aW1lb3V0SW50
MzIuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgc3VjY2VlZGVkID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBXcmFw
IHRvIGludDMyIGFuZCBmb3JjZSBub24tbmVnYXRpdmUgdG8gbWF0Y2ggYmVoYXZpb3Igb2Ygd2lu
ZG93LnNldFRpbWVvdXQuCisgICAgICAgICAgICBvcHRpb25zLT5zZXRUaW1lb3V0KG1heCgwLCB0
aW1lb3V0SW50MzItPlZhbHVlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IG1heGltdW1BZ2VWYWx1ZSA9IG9iamVjdC0+R2V0KHY4OjpTdHJpbmc6Ok5l
dygibWF4aW11bUFnZSIpKTsKKyAgICBpZiAobWF4aW11bUFnZVZhbHVlLklzRW1wdHkoKSkgewor
ICAgICAgICBzdWNjZWVkZWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IGlmICghbWF4aW11bUFnZVZhbHVlLT5Jc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHY4OjpMb2Nh
bDx2ODo6TnVtYmVyPiBtYXhpbXVtQWdlTnVtYmVyID0gbWF4aW11bUFnZVZhbHVlLT5Ub051bWJl
cigpOworICAgICAgICBpZiAobWF4aW11bUFnZU51bWJlci5Jc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIHN1Y2NlZWRlZCA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0K
KyAgICAgICAgZG91YmxlIG1heGltdW1BZ2VEb3VibGUgPSBtYXhpbXVtQWdlTnVtYmVyLT5WYWx1
ZSgpOworICAgICAgICBpZiAoaXNpbmYobWF4aW11bUFnZURvdWJsZSkgJiYgbWF4aW11bUFnZURv
dWJsZSA+IDApIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBwb3NpdGl2ZSBpbmZp
bml0eSwgY2xlYXIgbWF4aW11bUFnZS4KKyAgICAgICAgICAgIG9wdGlvbnMtPmNsZWFyTWF4aW11
bUFnZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpJbnQz
Mj4gbWF4aW11bUFnZUludDMyID0gbWF4aW11bUFnZVZhbHVlLT5Ub0ludDMyKCk7CisgICAgICAg
ICAgICBpZiAobWF4aW11bUFnZUludDMyLklzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHN1
Y2NlZWRlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgLy8gV3JhcCB0byBpbnQzMiBhbmQgZm9yY2Ugbm9uLW5lZ2F0aXZlIHRv
IG1hdGNoIGJlaGF2aW9yIG9mIHdpbmRvdy5zZXRUaW1lb3V0LgorICAgICAgICAgICAgb3B0aW9u
cy0+c2V0TWF4aW11bUFnZShtYXgoMCwgbWF4aW11bUFnZUludDMyLT5WYWx1ZSgpKSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gb3B0aW9ucy5yZWxlYXNlKCk7Cit9CisKK0NBTExC
QUNLX0ZVTkNfREVDTChHZW9sb2NhdGlvbkdldEN1cnJlbnRQb3NpdGlvbikKK3sKKyAgICBJTkNf
U1RBVFMoIkRPTS5HZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oKSIpOworCisgICAgYm9v
bCBzdWNjZWVkZWQgPSBmYWxzZTsKKworICAgIFJlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3Np
dGlvbkNhbGxiYWNrID0gY3JlYXRlUG9zaXRpb25DYWxsYmFjayhhcmdzWzBdLCBzdWNjZWVkZWQp
OworICAgIGlmICghc3VjY2VlZGVkKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwor
ICAgIEFTU0VSVChwb3NpdGlvbkNhbGxiYWNrKTsKKworICAgIFJlZlB0cjxQb3NpdGlvbkVycm9y
Q2FsbGJhY2s+IHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9IGNyZWF0ZVBvc2l0aW9uRXJyb3JDYWxs
YmFjayhhcmdzWzFdLCBzdWNjZWVkZWQpOworICAgIGlmICghc3VjY2VlZGVkKQorICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gcG9z
aXRpb25PcHRpb25zID0gY3JlYXRlUG9zaXRpb25PcHRpb25zKGFyZ3NbMl0sIHN1Y2NlZWRlZCk7
CisgICAgaWYgKCFzdWNjZWVkZWQpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cisg
ICAgQVNTRVJUKHBvc2l0aW9uT3B0aW9ucyk7CisKKyAgICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRp
b24gPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxHZW9sb2NhdGlvbj4oVjhD
bGFzc0luZGV4OjpHRU9MT0NBVElPTiwgYXJncy5Ib2xkZXIoKSk7CisgICAgZ2VvbG9jYXRpb24t
PmdldEN1cnJlbnRQb3NpdGlvbihwb3NpdGlvbkNhbGxiYWNrLnJlbGVhc2UoKSwgcG9zaXRpb25F
cnJvckNhbGxiYWNrLnJlbGVhc2UoKSwgcG9zaXRpb25PcHRpb25zLnJlbGVhc2UoKSk7CisgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKEdlb2xvY2F0
aW9uV2F0Y2hQb3NpdGlvbikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5HZW9sb2NhdGlvbi53YXRj
aFBvc2l0aW9uKCkiKTsKKworICAgIGJvb2wgc3VjY2VlZGVkID0gZmFsc2U7CisKKyAgICBSZWZQ
dHI8UG9zaXRpb25DYWxsYmFjaz4gcG9zaXRpb25DYWxsYmFjayA9IGNyZWF0ZVBvc2l0aW9uQ2Fs
bGJhY2soYXJnc1swXSwgc3VjY2VlZGVkKTsKKyAgICBpZiAoIXN1Y2NlZWRlZCkKKyAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICBBU1NFUlQocG9zaXRpb25DYWxsYmFjayk7CisK
KyAgICBSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBwb3NpdGlvbkVycm9yQ2FsbGJhY2sg
PSBjcmVhdGVQb3NpdGlvbkVycm9yQ2FsbGJhY2soYXJnc1sxXSwgc3VjY2VlZGVkKTsKKyAgICBp
ZiAoIXN1Y2NlZWRlZCkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIFJl
ZlB0cjxQb3NpdGlvbk9wdGlvbnM+IHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0
aW9ucyhhcmdzWzJdLCBzdWNjZWVkZWQpOworICAgIGlmICghc3VjY2VlZGVkKQorICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIEFTU0VSVChwb3NpdGlvbk9wdGlvbnMpOworCisg
ICAgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8R2VvbG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6R0VPTE9DQVRJT04sIGFyZ3MuSG9s
ZGVyKCkpOworICAgIGludCB3YXRjaElkID0gZ2VvbG9jYXRpb24tPndhdGNoUG9zaXRpb24ocG9z
aXRpb25DYWxsYmFjay5yZWxlYXNlKCksIHBvc2l0aW9uRXJyb3JDYWxsYmFjay5yZWxlYXNlKCks
IHBvc2l0aW9uT3B0aW9ucy5yZWxlYXNlKCkpOworICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXco
d2F0Y2hJZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="25788"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44067</attachid>
            <date>2009-12-01 04:24:03 -0800</date>
            <delta_ts>2009-12-01 08:46:46 -0800</delta_ts>
            <desc>Patch 3 for Bug 30206</desc>
            <filename>addV8Bindings3.txt</filename>
            <type>text/plain</type>
            <size>32075</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTQ4NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMDktMTItMDEgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZHMgVjggYmluZGluZ3MgZm9yIEdlb2xvY2F0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAyMDYKKworICAgICAgICBBbHNvIGFkZHMgR2Vv
bG9jYXRpb24gZmlsZXMgdG8gQ2hyb21lIGJ1aWxkIGZpbGVzLgorCisgICAgICAgICogV2ViQ29y
ZS5neXAvV2ViQ29yZS5neXA6IE1vZGlmaWVkLiBDb3JyZWN0cyBsaXN0IG9mIEdlb2xvY2F0aW9u
IElETCBmaWxlcy4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IE1vZGlmaWVkLiBBZGRzIEdlb2xv
Y2F0aW9uIGZpbGVzLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTU9iamVjdHNJbmNsdWRlLmg6
IE1vZGlmaWVkLiBBZGRzIEdlb2xvY2F0aW9uIGluY2x1ZGVzLgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwOiBNb2RpZmllZC4gQWRkcyBHZW9sb2NhdGlv
biBmaWxlcy4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEluZGV4LmNwcDogTW9kaWZpZWQuIElu
Y2x1ZGVzIEdlb2xvY2F0aW9uIGdlbmVyYXRlZCBoZWFkZXJzLgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4SW5kZXguaDogTW9kaWZpZWQuIEFkZHMgR2VvbG9jYXRpb24gdHlwZXMgdG8gRE9NX09C
SkVDVF9UWVBFUy4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDb29yZGluYXRlc0N1
c3RvbS5jcHA6IEFkZGVkLiBIYW5kbGVzIG9wdGlvbmFsIHByb3BlcnRpZXMuCisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oOiBNb2RpZmllZC4gRGVjbGFyZXMg
Y2FsbGJhY2tzIGFuZCBnZXR0ZXJzLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1
c3RvbVBvc2l0aW9uQ2FsbGJhY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlY4Q3Vz
dG9tUG9zaXRpb25DYWxsYmFjazo6VjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrKTogQWRkZWQuIENv
bnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrOjp+
VjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrKTogQWRkZWQuIERlc3RydWN0b3IuCisgICAgICAgIChX
ZWJDb3JlOjpWOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KTogQWRkZWQuIElu
dm9rZXMgY2FsbGJhY2suCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9z
aXRpb25DYWxsYmFjay5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tUG9zaXRp
b25DYWxsYmFjazo6Y3JlYXRlKTogQWRkZWQuIEZhY3RvcnkgbWV0aG9kLgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjay5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6OlY4Q3Vz
dG9tUG9zaXRpb25FcnJvckNhbGxiYWNrKTogQWRkZWQuIENvbnN0cnVjdG9yLgorICAgICAgICAo
V2ViQ29yZTo6VjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6On5WOEN1c3RvbVBvc2l0aW9u
RXJyb3JDYWxsYmFjayk6IEFkZGVkLiBEZXN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6VjhD
dXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KTogQWRkZWQuIEludm9rZXMg
Y2FsbGJhY2suCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25F
cnJvckNhbGxiYWNrLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21Qb3NpdGlv
bkVycm9yQ2FsbGJhY2s6OmNyZWF0ZSk6IEFkZGVkLiBGYWN0b3J5IG1ldGhvZC4KKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhHZW9sb2NhdGlvbkN1c3RvbS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6dGhyb3dUeXBlTWlzbWF0Y2hFeGNlcHRpb24pOiBBZGRlZC4gVGhyb3dz
IGEgdHlwZSBtaXNtYXRjaCBlcnJvci4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBvc2l0aW9u
Q2FsbGJhY2spOiBBZGRlZC4gSGFuZGxlcyB0eXBlIGNoZWNraW5nIGZvciBzdWNjZXNzQ2FsbGJh
Y2sgYXJndW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVQb3NpdGlvbkVycm9yQ2FsbGJh
Y2spOiBBZGRlZC4gSGFuZGxlcyB0eXBlIGNoZWNraW5nIGZvciBlcnJvckNhbGxiYWNrIGFyZ3Vt
ZW50LgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUG9zaXRpb25PcHRpb25zKTogQWRkZWQuIEhh
bmRsZXMgdHlwZSBjaGVja2luZyBmb3IgcG9zaXRpb25PcHRpb25zIGFyZ3VtZW50LgorCiAyMDA5
LTExLTMwICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBHdXN0YXZvIE5vcm9uaGEuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNTE0ODYpCisrKyBXZWJDb3Jl
L1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMTg3LDYgKzE4Nyw3IEBACiAgICAgICAg
ICAgICAncGFnZS9BYnN0cmFjdFZpZXcuaWRsJywKICAgICAgICAgICAgICdwYWdlL0JhckluZm8u
aWRsJywKICAgICAgICAgICAgICdwYWdlL0NvbnNvbGUuaWRsJywKKyAgICAgICAgICAgICdwYWdl
L0Nvb3JkaW5hdGVzLmlkbCcsCiAgICAgICAgICAgICAncGFnZS9ET01TZWxlY3Rpb24uaWRsJywK
ICAgICAgICAgICAgICdwYWdlL0RPTVdpbmRvdy5pZGwnLAogICAgICAgICAgICAgJ3BhZ2UvR2Vv
bG9jYXRpb24uaWRsJywKQEAgLTY0OCwxMiArNjQ5LDE3IEBACiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpZW50UmVjdExpc3RDdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDbGlwYm9hcmRDdXN0b20uY3BwJywKKyAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDb29yZGluYXRlc0N1c3RvbS5jcHAnLAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0
b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDb25zb2xlQ3VzdG9t
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRXZlbnRMaXN0ZW5lci5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUV2ZW50TGlzdGVu
ZXIuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25D
YWxsYmFjay5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBv
c2l0aW9uQ2FsbGJhY2suaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3Vz
dG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmgnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrLmNwcCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2su
aCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjay5jcHAnLApAQCAtNjc3LDYgKzY4Myw3IEBACiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvY3VzdG9tL1Y4RmlsZUxpc3RDdXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92
OC9jdXN0b20vVjhHZW9sb2NhdGlvbkN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5oJywK
ICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQWxsQ29sbGVjdGlvbkN1c3Rv
bS5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiA1MTQ4NikKKysr
IFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCwx
MyArMjI4LDYgQEAKICAgICAgICAgIyBKU0Mtb25seS4KICAgICAgICAgJy4uL2luc3BlY3Rvci9K
YXZhU2NyaXB0Q2FsbEZyYW1lLmlkbCcsCiAKLSAgICAgICAgIyBFTkFCTEVfR0VPTE9DQVRJT04g
b25seS4KLSAgICAgICAgJy4uL3BhZ2UvR2VvbG9jYXRpb24uaWRsJywKLSAgICAgICAgJy4uL3Bh
Z2UvR2VvcG9zaXRpb24uaWRsJywKLSAgICAgICAgJy4uL3BhZ2UvUG9zaXRpb25DYWxsYmFjay5p
ZGwnLAotICAgICAgICAnLi4vcGFnZS9Qb3NpdGlvbkVycm9yLmlkbCcsCi0gICAgICAgICcuLi9w
YWdlL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5pZGwnLAotCiAgICAgICAgICMgQmluZGluZ3Mgd2l0
aCBjdXN0b20gT2JqZWN0aXZlLUMgaW1wbGVtZW50YXRpb25zLgogICAgICAgICAnLi4vcGFnZS9B
YnN0cmFjdFZpZXcuaWRsJywKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9ET01PYmplY3Rz
SW5jbHVkZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvRE9NT2JqZWN0c0lu
Y2x1ZGUuaAkocmV2aXNpb24gNTE0ODYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTU9iamVj
dHNJbmNsdWRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw2ICsxODUsMTIgQEAKICNpbmNsdWRl
ICJTdG9yYWdlRXZlbnQuaCIKICNlbmRpZiAvLyBET01fU1RPUkFHRQogCisvLyBHRU9MT0NBVElP
TgorI2luY2x1ZGUgIkNvb3JkaW5hdGVzLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKKyNp
bmNsdWRlICJHZW9wb3NpdGlvbi5oIgorI2luY2x1ZGUgIlBvc2l0aW9uRXJyb3IuaCIKKwogI2lm
IEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHQW5nbGUuaCIKICNpbmNsdWRlICJTVkdBbmltYXRl
ZFBvaW50cy5oIgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9EZXJpdmVkU291cmNlc0FsbElu
T25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L0Rlcml2ZWRTb3VyY2Vz
QWxsSW5PbmUuY3BwCShyZXZpc2lvbiA1MTQ4NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvRGVy
aXZlZFNvdXJjZXNBbGxJbk9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcgQEAK
ICNpbmNsdWRlICJiaW5kaW5ncy9WOENvbW1lbnQuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4
Q29tcG9zaXRpb25FdmVudC5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhDb25zb2xlLmNwcCIK
KyNpbmNsdWRlICJiaW5kaW5ncy9WOENvb3JkaW5hdGVzLmNwcCIKICNpbmNsdWRlICJiaW5kaW5n
cy9WOENvdW50ZXIuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q1NTQ2hhcnNldFJ1bGUuY3Bw
IgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q1NTRm9udEZhY2VSdWxlLmNwcCIKQEAgLTEwMiw2ICsx
MDMsOCBAQAogI2luY2x1ZGUgImJpbmRpbmdzL1Y4RXZlbnRFeGNlcHRpb24uY3BwIgogI2luY2x1
ZGUgImJpbmRpbmdzL1Y4RmlsZS5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhGaWxlTGlzdC5j
cHAiCisjaW5jbHVkZSAiYmluZGluZ3MvVjhHZW9sb2NhdGlvbi5jcHAiCisjaW5jbHVkZSAiYmlu
ZGluZ3MvVjhHZW9wb3NpdGlvbi5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhIaXN0b3J5LmNw
cCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOEhUTUxBbGxDb2xsZWN0aW9uLmNwcCIKICNpbmNsdWRl
ICJiaW5kaW5ncy9WOEhUTUxBbmNob3JFbGVtZW50LmNwcCIKQEAgLTE5OCw2ICsyMDEsNyBAQAog
I2luY2x1ZGUgImJpbmRpbmdzL1Y4UGFnZVRyYW5zaXRpb25FdmVudC5jcHAiCiAjaW5jbHVkZSAi
YmluZGluZ3MvVjhQbHVnaW4uY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4UGx1Z2luQXJyYXku
Y3BwIgorI2luY2x1ZGUgImJpbmRpbmdzL1Y4UG9zaXRpb25FcnJvci5jcHAiCiAjaW5jbHVkZSAi
YmluZGluZ3MvVjhQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwIgogI2luY2x1ZGUgImJpbmRpbmdz
L1Y4UHJvZ3Jlc3NFdmVudC5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhSYW5nZS5jcHAiCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhJbmRleC5jcHAJKHJldmlzaW9uIDUxNDg2KQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9WOEluZGV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM2LDYgKzQzNiwxMiBA
QAogI2luY2x1ZGUgIlY4SW5zcGVjdG9yQmFja2VuZC5oIgogI2VuZGlmCiAKKy8vIEdlb2xvY2F0
aW9uCisjaW5jbHVkZSAiVjhDb29yZGluYXRlcy5oIgorI2luY2x1ZGUgIlY4R2VvbG9jYXRpb24u
aCIKKyNpbmNsdWRlICJWOEdlb3Bvc2l0aW9uLmgiCisjaW5jbHVkZSAiVjhQb3NpdGlvbkVycm9y
LmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRnVuY3Rpb25UZW1wbGF0ZUZhY3RvcnkgVjhD
bGFzc0luZGV4OjpHZXRGYWN0b3J5KFY4V3JhcHBlclR5cGUgdHlwZSkKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhJbmRleC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
VjhJbmRleC5oCShyZXZpc2lvbiA1MTQ4NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRl
eC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTIsNiArNDkyLDEyIEBAIHR5cGVkZWYgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGwKICNkZWZpbmUgRE9NX09CSkVDVF9JTlNQRUNUT1JfVFlQ
RVMoVikKICNlbmRpZgogCisjZGVmaW5lIERPTV9PQkpFQ1RfR0VPTE9DQVRJT05fVFlQRVMoVikg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVihDT09SRElOQVRFUywgQ29v
cmRpbmF0ZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
VihHRU9MT0NBVElPTiwgR2VvbG9jYXRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgVihHRU9QT1NJVElPTiwgR2VvcG9zaXRpb24pICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVihQT1NJVElPTkVSUk9SLCBQb3Np
dGlvbkVycm9yKQorCiAjZGVmaW5lIERPTV9PQkpFQ1RfVFlQRVMoVikgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRE9NX09CSkVDVF9UWVBFU18xKFYp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRE9N
X09CSkVDVF9UWVBFU18yKFYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCkBAIC01MDEsNyArNTA3LDggQEAgdHlwZWRlZiB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbAogICAgIERPTV9PQkpFQ1RfM0RfQ0FOVkFTX1RZUEVTKFYpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIERPTV9PQkpFQ1RfWFBBVEhfVFlQ
RVMoVikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIERP
TV9PQkpFQ1RfWFNMVF9UWVBFUyhWKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIERPTV9PQkpFQ1RfSU5TUEVDVE9SX1RZUEVTKFYpCisgICAgRE9NX09C
SkVDVF9JTlNQRUNUT1JfVFlQRVMoVikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgRE9NX09CSkVDVF9HRU9MT0NBVElPTl9UWVBFUyhWKQogCiAjaWYgRU5BQkxF
KFNWRykKIC8vIFNWR19PQkpFQ1RfVFlQRVMgYXJlIHN2ZyBub24tbm9kZSwgbm9uLXBvZCB0eXBl
cy4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29vcmRpbmF0ZXNDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29vcmRpbmF0
ZXNDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhDb29yZGluYXRlc0N1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBP
V05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlcy5oIgorCisjaW5j
bHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVk
ZSAiVjhQcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0FDQ0VTU09SX0dFVFRFUihD
b29yZGluYXRlc0FsdGl0dWRlKQoreworICAgIElOQ19TVEFUUygiRE9NLkNvb3JkaW5hdGVzLmFs
dGl0dWRlLl9nZXQiKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8u
SG9sZGVyKCk7CisgICAgQ29vcmRpbmF0ZXMqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PENvb3JkaW5hdGVzPihWOENsYXNzSW5kZXg6OkNPT1JESU5BVEVTLCBob2xk
ZXIpOworICAgIGlmICghaW1wLT5jYW5Qcm92aWRlQWx0aXR1ZGUoKSkKKyAgICAgICAgcmV0dXJu
IHY4OjpOdWxsKCk7CisgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhpbXAtPmFsdGl0dWRlKCkp
OworfQorCitBQ0NFU1NPUl9HRVRURVIoQ29vcmRpbmF0ZXNBbHRpdHVkZUFjY3VyYWN5KQorewor
ICAgIElOQ19TVEFUUygiRE9NLkNvb3JkaW5hdGVzLmFsdGl0dWRlQWNjdXJhY3kuX2dldCIpOwor
ICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKKyAgICBD
b29yZGluYXRlcyogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q29v
cmRpbmF0ZXM+KFY4Q2xhc3NJbmRleDo6Q09PUkRJTkFURVMsIGhvbGRlcik7CisgICAgaWYgKCFp
bXAtPmNhblByb3ZpZGVBbHRpdHVkZUFjY3VyYWN5KCkpCisgICAgICAgIHJldHVybiB2ODo6TnVs
bCgpOworICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcoaW1wLT5hbHRpdHVkZUFjY3VyYWN5KCkp
OworfQorCitBQ0NFU1NPUl9HRVRURVIoQ29vcmRpbmF0ZXNIZWFkaW5nKQoreworICAgIElOQ19T
VEFUUygiRE9NLkNvb3JkaW5hdGVzLmhlYWRpbmcuX2dldCIpOworICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gaG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKKyAgICBDb29yZGluYXRlcyogaW1wID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q29vcmRpbmF0ZXM+KFY4Q2xhc3NJ
bmRleDo6Q09PUkRJTkFURVMsIGhvbGRlcik7CisgICAgaWYgKCFpbXAtPmNhblByb3ZpZGVIZWFk
aW5nKCkpCisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworICAgIHJldHVybiB2ODo6TnVtYmVy
OjpOZXcoaW1wLT5oZWFkaW5nKCkpOworfQorCitBQ0NFU1NPUl9HRVRURVIoQ29vcmRpbmF0ZXNT
cGVlZCkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5Db29yZGluYXRlcy5zcGVlZC5fZ2V0Iik7Cisg
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOworICAgIENv
b3JkaW5hdGVzKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDb29y
ZGluYXRlcz4oVjhDbGFzc0luZGV4OjpDT09SRElOQVRFUywgaG9sZGVyKTsKKyAgICBpZiAoIWlt
cC0+Y2FuUHJvdmlkZVNwZWVkKCkpCisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworICAgIHJl
dHVybiB2ODo6TnVtYmVyOjpOZXcoaW1wLT5zcGVlZCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5k
aW5nLmgJKHJldmlzaW9uIDUxNDg2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhD
dXN0b21CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5Miw2ICs2OTIsMTMgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBERUNMQVJFX0FDQ0VTU09SX1JVTlRJTUVfRU5BQkxFUihE
T01XaW5kb3dXZWJTb2NrZXQpOwogI2VuZGlmCiAKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhH
ZW9sb2NhdGlvbkdldEN1cnJlbnRQb3NpdGlvbik7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0so
R2VvbG9jYXRpb25XYXRjaFBvc2l0aW9uKTsKKyAgICAgICAgREVDTEFSRV9QUk9QRVJUWV9BQ0NF
U1NPUl9HRVRURVIoQ29vcmRpbmF0ZXNBbHRpdHVkZSk7CisgICAgICAgIERFQ0xBUkVfUFJPUEVS
VFlfQUNDRVNTT1JfR0VUVEVSKENvb3JkaW5hdGVzQWx0aXR1ZGVBY2N1cmFjeSk7CisgICAgICAg
IERFQ0xBUkVfUFJPUEVSVFlfQUNDRVNTT1JfR0VUVEVSKENvb3JkaW5hdGVzSGVhZGluZyk7Cisg
ICAgICAgIERFQ0xBUkVfUFJPUEVSVFlfQUNDRVNTT1JfR0VUVEVSKENvb3JkaW5hdGVzU3BlZWQp
OworCiAjdW5kZWYgREVDTEFSRV9JTkRFWEVEX0FDQ0VTU19DSEVDSwogI3VuZGVmIERFQ0xBUkVf
TkFNRURfQUNDRVNTX0NIRUNLCiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q3VzdG9tUG9zaXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25DYWxsYmFjay5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSwgVGhl
IEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJWOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2suaCIKKworI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiVjhDdXN0b21Wb2lkQ2FsbGJhY2suaCIgIC8vIEZvciBpbnZva2VDYWxs
YmFjaworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Y4Q3VzdG9tUG9zaXRpb25DYWxsYmFjazo6
VjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjYWxsYmFjaywg
RnJhbWUqIGZyYW1lKQorICAgIDogbV9jYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
Pjo6TmV3KGNhbGxiYWNrKSkKKyAgICAsIG1fZnJhbWUoZnJhbWUpCit7Cit9CisKK1Y4Q3VzdG9t
UG9zaXRpb25DYWxsYmFjazo6flY4Q3VzdG9tUG9zaXRpb25DYWxsYmFjaygpCit7CisgICAgbV9j
YWxsYmFjay5EaXNwb3NlKCk7Cit9CisKK3ZvaWQgVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrOjpo
YW5kbGVFdmVudChHZW9wb3NpdGlvbiogcG9zaXRpb24pCit7CisgICAgdjg6OkhhbmRsZVNjb3Bl
IGhhbmRsZVNjb3BlOworCisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IFY4
UHJveHk6OmNvbnRleHQobV9mcmFtZS5nZXQoKSk7CisgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29udGV4
dCk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0geworICAgICAgICBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6R0VPUE9TSVRJT04sIHBv
c2l0aW9uKQorICAgIH07CisKKyAgICAvLyBQcm90ZWN0IHRoZSBmcmFtZSB1bnRpbCB0aGUgY2Fs
bGJhY2sgcmV0dXJucy4KKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3RvcihtX2ZyYW1lKTsKKwor
ICAgIGJvb2wgY2FsbGJhY2tSZXR1cm5WYWx1ZSA9IGZhbHNlOworICAgIGludm9rZUNhbGxiYWNr
KG1fY2FsbGJhY2ssIDEsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3Rv
bVBvc2l0aW9uQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2suaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25DYWxsYmFjay5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9w
ZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFY4Q3VzdG9tUG9zaXRpb25DYWxsYmFj
a19oCisjZGVmaW5lIFY4Q3VzdG9tUG9zaXRpb25DYWxsYmFja19oCisKKyNpbmNsdWRlICJQb3Np
dGlvbkNhbGxiYWNrLmgiCisjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBGcmFtZTsKK2NsYXNzIEdlb3Bvc2l0aW9uOworCitjbGFzcyBWOEN1c3RvbVBvc2l0aW9u
Q2FsbGJhY2sgOiBwdWJsaWMgUG9zaXRpb25DYWxsYmFjayB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrPiBjcmVhdGUodjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdmFsdWUsIEZyYW1lKiBmcmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1
ZS0+SXNPYmplY3QoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhDdXN0b21Qb3Np
dGlvbkNhbGxiYWNrKHZhbHVlLT5Ub09iamVjdCgpLCBmcmFtZSkpOworICAgIH0KKyAgICB2aXJ0
dWFsIH5WOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2soKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVFdmVudChHZW9wb3NpdGlvbiopOworCitwcml2YXRlOgorICAgIFY4Q3VzdG9tUG9zaXRpb25D
YWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4sIEZyYW1lKik7CisKKyAgICB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0PiBtX2NhbGxiYWNrOworICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFY4Q3VzdG9tUG9zaXRp
b25DYWxsYmFja19oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBv
c2l0aW9uRXJyb3JDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJh
Y2suY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IDIw
MDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaCIKKworI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiVjhDdXN0b21Wb2lkQ2FsbGJhY2suaCIgIC8vIEZv
ciBpbnZva2VDYWxsYmFjaworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Y4Q3VzdG9tUG9zaXRp
b25FcnJvckNhbGxiYWNrOjpWOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjayh2ODo6TG9jYWw8
djg6Ok9iamVjdD4gY2FsbGJhY2ssIEZyYW1lKiBmcmFtZSkKKyAgICA6IG1fY2FsbGJhY2sodjg6
OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhjYWxsYmFjaykpCisgICAgLCBtX2ZyYW1lKGZy
YW1lKQoreworfQorCitWOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjazo6flY4Q3VzdG9tUG9z
aXRpb25FcnJvckNhbGxiYWNrKCkKK3sKKyAgICBtX2NhbGxiYWNrLkRpc3Bvc2UoKTsKK30KKwor
dm9pZCBWOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQoUG9zaXRpb25F
cnJvciogZXJyb3IpCit7CisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworCisgICAg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IFY4UHJveHk6OmNvbnRleHQobV9mcmFt
ZS5nZXQoKSk7CisgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29udGV4dCk7CisKKyAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gYXJndltdID0geworICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4
T2JqZWN0KFY4Q2xhc3NJbmRleDo6UE9TSVRJT05FUlJPUiwgZXJyb3IpCisgICAgfTsKKworICAg
IC8vIFByb3RlY3QgdGhlIGZyYW1lIHVudGlsIHRoZSBjYWxsYmFjayByZXR1cm5zLgorICAgIFJl
ZlB0cjxGcmFtZT4gcHJvdGVjdG9yKG1fZnJhbWUpOworCisgICAgYm9vbCBjYWxsYmFja1JldHVy
blZhbHVlID0gZmFsc2U7CisgICAgaW52b2tlQ2FsbGJhY2sobV9jYWxsYmFjaywgMSwgYXJndiwg
Y2FsbGJhY2tSZXR1cm5WYWx1ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Qb3Np
dGlvbkVycm9yQ2FsbGJhY2suaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3Vy
Y2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2tf
aAorI2RlZmluZSBWOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFja19oCisKKyNpbmNsdWRlICJQ
b3NpdGlvbkVycm9yQ2FsbGJhY2suaCIKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEZyYW1lOworY2xhc3MgUG9zaXRpb25FcnJvcjsKKworY2xhc3MgVjhDdXN0
b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2sgOiBwdWJsaWMgUG9zaXRpb25FcnJvckNhbGxiYWNrIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxs
YmFjaz4gY3JlYXRlKHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBGcmFtZSogZnJhbWUpCisg
ICAgeworICAgICAgICBBU1NFUlQodmFsdWUtPklzT2JqZWN0KCkpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrKHZhbHVlLT5Ub09iamVj
dCgpLCBmcmFtZSkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5WOEN1c3RvbVBvc2l0aW9uRXJyb3JD
YWxsYmFjaygpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFBvc2l0aW9uRXJyb3Iq
KTsKKworcHJpdmF0ZToKKyAgICBWOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjayh2ODo6TG9j
YWw8djg6Ok9iamVjdD4sIEZyYW1lKik7CisKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PiBtX2NhbGxiYWNrOworICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNr
X2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4R2VvbG9jYXRpb25DdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4R2VvbG9jYXRp
b25DdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhHZW9sb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjE4IEBACisv
KgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
T1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKKworI2lu
Y2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1
ZGUgIlY4Q3VzdG9tUG9zaXRpb25DYWxsYmFjay5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tUG9zaXRp
b25FcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCit1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dGF0aWMgY29uc3QgY2hhciB0eXBlTWlzbWF0Y2hFcnJvcltdID0gIlRZUEVfTUlTTUFUQ0hfRVJS
OiBET00gRXhjZXB0aW9uIDE3IjsKKworc3RhdGljIHZvaWQgdGhyb3dUeXBlTWlzbWF0Y2hFeGNl
cHRpb24oKQoreworICAgIFY4UHJveHk6OnRocm93RXJyb3IoVjhQcm94eTo6R2VuZXJhbEVycm9y
LCB0eXBlTWlzbWF0Y2hFcnJvcik7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPFBvc2l0aW9uQ2Fs
bGJhY2s+IGNyZWF0ZVBvc2l0aW9uQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUs
IGJvb2wmIHN1Y2NlZWRlZCkKK3sKKyAgICBzdWNjZWVkZWQgPSB0cnVlOworCisgICAgLy8gVGhl
IHNwZWMgc3BlY2lmaWVzICdGdW5jdGlvbk9ubHknIGZvciB0aGlzIG9iamVjdC4KKyAgICBpZiAo
IXZhbHVlLT5Jc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgc3VjY2VlZGVkID0gZmFsc2U7CisgICAg
ICAgIHRocm93VHlwZU1pc21hdGNoRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JDdXJyZW50
Q29udGV4dCgpOworICAgIHJldHVybiBWOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2s6OmNyZWF0ZSh2
YWx1ZSwgZnJhbWUpOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJh
Y2s+IGNyZWF0ZVBvc2l0aW9uRXJyb3JDYWxsYmFjayh2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1
ZSwgYm9vbCYgc3VjY2VlZGVkKQoreworICAgIHN1Y2NlZWRlZCA9IHRydWU7CisKKyAgICAvLyBB
cmd1bWVudCBpcyBvcHRpb25hbCAoaGVuY2UgdW5kZWZpbmVkIGlzIGFsbG93ZWQpLCBhbmQgbnVs
bCBpcyBhbGxvd2VkLgorICAgIGlmIChpc1VuZGVmaW5lZE9yTnVsbCh2YWx1ZSkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgLy8gVGhlIHNwZWMgc3BlY2lmaWVzICdGdW5jdGlvbk9ubHknIGZv
ciB0aGlzIG9iamVjdC4KKyAgICBpZiAoIXZhbHVlLT5Jc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAg
c3VjY2VlZGVkID0gZmFsc2U7CisgICAgICAgIHRocm93VHlwZU1pc21hdGNoRXhjZXB0aW9uKCk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6
OnJldHJpZXZlRnJhbWVGb3JDdXJyZW50Q29udGV4dCgpOworICAgIHJldHVybiBWOEN1c3RvbVBv
c2l0aW9uRXJyb3JDYWxsYmFjazo6Y3JlYXRlKHZhbHVlLCBmcmFtZSk7Cit9CisKK3N0YXRpYyBQ
YXNzUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gY3JlYXRlUG9zaXRpb25PcHRpb25zKHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHZhbHVlLCBib29sJiBzdWNjZWVkZWQpCit7CisgICAgc3VjY2VlZGVkID0g
dHJ1ZTsKKworICAgIC8vIENyZWF0ZSBkZWZhdWx0IG9wdGlvbnMuCisgICAgUmVmUHRyPFBvc2l0
aW9uT3B0aW9ucz4gb3B0aW9ucyA9IFBvc2l0aW9uT3B0aW9uczo6Y3JlYXRlKCk7CisKKyAgICAv
LyBBcmd1bWVudCBpcyBvcHRpb25hbCAoaGVuY2UgdW5kZWZpbmVkIGlzIGFsbG93ZWQpLCBhbmQg
bnVsbCBpcyBhbGxvd2VkLgorICAgIGlmIChpc1VuZGVmaW5lZE9yTnVsbCh2YWx1ZSkpIHsKKyAg
ICAgICAgLy8gVXNlIGRlZmF1bHQgb3B0aW9ucy4KKyAgICAgICAgcmV0dXJuIG9wdGlvbnMucmVs
ZWFzZSgpOworICAgIH0KKworICAgIC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0LCB0aGlzIHdpbGwg
YWx3YXlzIHlpZWxkIGFuIG9iamVjdC4KKyAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0
ID0gdmFsdWUtPlRvT2JqZWN0KCk7CisKKyAgICAvLyBGb3IgYWxsIHRocmVlIHByb3BlcnRpZXMs
IHdlIGFwcGx5IHRoZSBmb2xsb3dpbmcgLi4uCisgICAgLy8gLSBJZiB0aGUgZ2V0dGVyIG9yIHRo
ZSBwcm9wZXJ0eSdzIHZhbHVlT2YgbWV0aG9kIHRocm93cyBhbiBleGNlcHRpb24sIHdlCisgICAg
Ly8gICBxdWl0IHNvIGFzIG5vdCB0byByaXNrIG92ZXJ3cml0aW5nIHRoZSBleGNlcHRpb24uCisg
ICAgLy8gLSBJZiB0aGUgdmFsdWUgaXMgYWJzZW50IG9yIHVuZGVmaW5lZCwgd2UgZG9uJ3Qgb3Zl
cnJpZGUgdGhlIGRlZmF1bHQuCisgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gZW5hYmxlSGlnaEFj
Y3VyYWN5VmFsdWUgPSBvYmplY3QtPkdldCh2ODo6U3RyaW5nOjpOZXcoImVuYWJsZUhpZ2hBY2N1
cmFjeSIpKTsKKyAgICBpZiAoZW5hYmxlSGlnaEFjY3VyYWN5VmFsdWUuSXNFbXB0eSgpKSB7Cisg
ICAgICAgIHN1Y2NlZWRlZCA9IGZhbHNlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAg
aWYgKCFlbmFibGVIaWdoQWNjdXJhY3lWYWx1ZS0+SXNVbmRlZmluZWQoKSkgeworICAgICAgICB2
ODo6TG9jYWw8djg6OkJvb2xlYW4+IGVuYWJsZUhpZ2hBY2N1cmFjeUJvb2xlYW4gPSBlbmFibGVI
aWdoQWNjdXJhY3lWYWx1ZS0+VG9Cb29sZWFuKCk7CisgICAgICAgIGlmIChlbmFibGVIaWdoQWNj
dXJhY3lCb29sZWFuLklzRW1wdHkoKSkgeworICAgICAgICAgICAgc3VjY2VlZGVkID0gZmFsc2U7
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBvcHRpb25zLT5zZXRF
bmFibGVIaWdoQWNjdXJhY3koZW5hYmxlSGlnaEFjY3VyYWN5Qm9vbGVhbi0+VmFsdWUoKSk7Cisg
ICAgfQorCisgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdGltZW91dFZhbHVlID0gb2JqZWN0LT5H
ZXQodjg6OlN0cmluZzo6TmV3KCJ0aW1lb3V0IikpOworICAgIGlmICh0aW1lb3V0VmFsdWUuSXNF
bXB0eSgpKSB7CisgICAgICAgIHN1Y2NlZWRlZCA9IGZhbHNlOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisgICAgaWYgKCF0aW1lb3V0VmFsdWUtPklzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAg
djg6OkxvY2FsPHY4OjpOdW1iZXI+IHRpbWVvdXROdW1iZXIgPSB0aW1lb3V0VmFsdWUtPlRvTnVt
YmVyKCk7CisgICAgICAgIGlmICh0aW1lb3V0TnVtYmVyLklzRW1wdHkoKSkgeworICAgICAgICAg
ICAgc3VjY2VlZGVkID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQor
ICAgICAgICBkb3VibGUgdGltZW91dERvdWJsZSA9IHRpbWVvdXROdW1iZXItPlZhbHVlKCk7Cisg
ICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBwb3NpdGl2ZSBpbmZpbml0eSwgdGhlcmUncyBub3Ro
aW5nIHRvIGRvLgorICAgICAgICBpZiAoIShpc2luZih0aW1lb3V0RG91YmxlKSAmJiB0aW1lb3V0
RG91YmxlID4gMCkpIHsKKyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6SW50MzI+IHRpbWVvdXRJ
bnQzMiA9IHRpbWVvdXRWYWx1ZS0+VG9JbnQzMigpOworICAgICAgICAgICAgaWYgKHRpbWVvdXRJ
bnQzMi5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBzdWNjZWVkZWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFdy
YXAgdG8gaW50MzIgYW5kIGZvcmNlIG5vbi1uZWdhdGl2ZSB0byBtYXRjaCBiZWhhdmlvciBvZiB3
aW5kb3cuc2V0VGltZW91dC4KKyAgICAgICAgICAgIG9wdGlvbnMtPnNldFRpbWVvdXQobWF4KDAs
IHRpbWVvdXRJbnQzMi0+VmFsdWUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gbWF4aW11bUFnZVZhbHVlID0gb2JqZWN0LT5HZXQodjg6OlN0cmluZzo6
TmV3KCJtYXhpbXVtQWdlIikpOworICAgIGlmIChtYXhpbXVtQWdlVmFsdWUuSXNFbXB0eSgpKSB7
CisgICAgICAgIHN1Y2NlZWRlZCA9IGZhbHNlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cisg
ICAgaWYgKCFtYXhpbXVtQWdlVmFsdWUtPklzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgdjg6Okxv
Y2FsPHY4OjpOdW1iZXI+IG1heGltdW1BZ2VOdW1iZXIgPSBtYXhpbXVtQWdlVmFsdWUtPlRvTnVt
YmVyKCk7CisgICAgICAgIGlmIChtYXhpbXVtQWdlTnVtYmVyLklzRW1wdHkoKSkgeworICAgICAg
ICAgICAgc3VjY2VlZGVkID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
fQorICAgICAgICBkb3VibGUgbWF4aW11bUFnZURvdWJsZSA9IG1heGltdW1BZ2VOdW1iZXItPlZh
bHVlKCk7CisgICAgICAgIGlmIChpc2luZihtYXhpbXVtQWdlRG91YmxlKSAmJiBtYXhpbXVtQWdl
RG91YmxlID4gMCkgeworICAgICAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIHBvc2l0aXZlIGlu
ZmluaXR5LCBjbGVhciBtYXhpbXVtQWdlLgorICAgICAgICAgICAgb3B0aW9ucy0+Y2xlYXJNYXhp
bXVtQWdlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2ODo6TG9jYWw8djg6Oklu
dDMyPiBtYXhpbXVtQWdlSW50MzIgPSBtYXhpbXVtQWdlVmFsdWUtPlRvSW50MzIoKTsKKyAgICAg
ICAgICAgIGlmIChtYXhpbXVtQWdlSW50MzIuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
c3VjY2VlZGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAvLyBXcmFwIHRvIGludDMyIGFuZCBmb3JjZSBub24tbmVnYXRpdmUg
dG8gbWF0Y2ggYmVoYXZpb3Igb2Ygd2luZG93LnNldFRpbWVvdXQuCisgICAgICAgICAgICBvcHRp
b25zLT5zZXRNYXhpbXVtQWdlKG1heCgwLCBtYXhpbXVtQWdlSW50MzItPlZhbHVlKCkpKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBvcHRpb25zLnJlbGVhc2UoKTsKK30KKworQ0FM
TEJBQ0tfRlVOQ19ERUNMKEdlb2xvY2F0aW9uR2V0Q3VycmVudFBvc2l0aW9uKQoreworICAgIElO
Q19TVEFUUygiRE9NLkdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbigpIik7CisKKyAgICBi
b29sIHN1Y2NlZWRlZCA9IGZhbHNlOworCisgICAgUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+IHBv
c2l0aW9uQ2FsbGJhY2sgPSBjcmVhdGVQb3NpdGlvbkNhbGxiYWNrKGFyZ3NbMF0sIHN1Y2NlZWRl
ZCk7CisgICAgaWYgKCFzdWNjZWVkZWQpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
CisgICAgQVNTRVJUKHBvc2l0aW9uQ2FsbGJhY2spOworCisgICAgUmVmUHRyPFBvc2l0aW9uRXJy
b3JDYWxsYmFjaz4gcG9zaXRpb25FcnJvckNhbGxiYWNrID0gY3JlYXRlUG9zaXRpb25FcnJvckNh
bGxiYWNrKGFyZ3NbMV0sIHN1Y2NlZWRlZCk7CisgICAgaWYgKCFzdWNjZWVkZWQpCisgICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBw
b3NpdGlvbk9wdGlvbnMgPSBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoYXJnc1syXSwgc3VjY2VlZGVk
KTsKKyAgICBpZiAoIXN1Y2NlZWRlZCkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
KyAgICBBU1NFUlQocG9zaXRpb25PcHRpb25zKTsKKworICAgIEdlb2xvY2F0aW9uKiBnZW9sb2Nh
dGlvbiA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEdlb2xvY2F0aW9uPihW
OENsYXNzSW5kZXg6OkdFT0xPQ0FUSU9OLCBhcmdzLkhvbGRlcigpKTsKKyAgICBnZW9sb2NhdGlv
bi0+Z2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uQ2FsbGJhY2sucmVsZWFzZSgpLCBwb3NpdGlv
bkVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBwb3NpdGlvbk9wdGlvbnMucmVsZWFzZSgpKTsKKyAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woR2VvbG9j
YXRpb25XYXRjaFBvc2l0aW9uKQoreworICAgIElOQ19TVEFUUygiRE9NLkdlb2xvY2F0aW9uLndh
dGNoUG9zaXRpb24oKSIpOworCisgICAgYm9vbCBzdWNjZWVkZWQgPSBmYWxzZTsKKworICAgIFJl
ZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNrID0gY3JlYXRlUG9zaXRpb25D
YWxsYmFjayhhcmdzWzBdLCBzdWNjZWVkZWQpOworICAgIGlmICghc3VjY2VlZGVkKQorICAgICAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIEFTU0VSVChwb3NpdGlvbkNhbGxiYWNrKTsK
KworICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+IHBvc2l0aW9uRXJyb3JDYWxsYmFj
ayA9IGNyZWF0ZVBvc2l0aW9uRXJyb3JDYWxsYmFjayhhcmdzWzFdLCBzdWNjZWVkZWQpOworICAg
IGlmICghc3VjY2VlZGVkKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAg
UmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gcG9zaXRpb25PcHRpb25zID0gY3JlYXRlUG9zaXRpb25P
cHRpb25zKGFyZ3NbMl0sIHN1Y2NlZWRlZCk7CisgICAgaWYgKCFzdWNjZWVkZWQpCisgICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgQVNTRVJUKHBvc2l0aW9uT3B0aW9ucyk7CisK
KyAgICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24gPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxHZW9sb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpHRU9MT0NBVElPTiwgYXJncy5I
b2xkZXIoKSk7CisgICAgaW50IHdhdGNoSWQgPSBnZW9sb2NhdGlvbi0+d2F0Y2hQb3NpdGlvbihw
b3NpdGlvbkNhbGxiYWNrLnJlbGVhc2UoKSwgcG9zaXRpb25FcnJvckNhbGxiYWNrLnJlbGVhc2Uo
KSwgcG9zaXRpb25PcHRpb25zLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5l
dyh3YXRjaElkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>