<?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>71093</bug_id>
          
          <creation_ts>2011-10-27 23:24:45 -0700</creation_ts>
          <short_desc>[meta] CodeGenerator*.pm should support [NamedConstructor] IDL</short_desc>
          <delta_ts>2011-12-01 17:05:58 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>71659</dependson>
    
    <dependson>71660</dependson>
    
    <dependson>71669</dependson>
    
    <dependson>71735</dependson>
    
    <dependson>71756</dependson>
    
    <dependson>71924</dependson>
    
    <dependson>71925</dependson>
    
    <dependson>73496</dependson>
    
    <dependson>73498</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Kentaro Hara">haraken</reporter>
          <assigned_to name="Kentaro Hara">haraken</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dominicc</cc>
    
    <cc>gustavo</cc>
    
    <cc>japhet</cc>
    
    <cc>ojan</cc>
    
    <cc>sam</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>492262</commentid>
    <comment_count>0</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-10-27 23:24:45 -0700</bug_when>
    <thetext>CodeGeneratorJS.pm and CodeGeneratorV8.pm should support [NamedConstructor] IDL.
The spec: http://www.w3.org/TR/WebIDL/#NamedConstructor

Currently, HTMLAudioElement, HTMLImageElement and HTMLOptionElement have [NamedConstructor] and implement the constructors as custom constructors. We should generate the constructors automatically by the [NamedConstructor] IDL.

First I will make a patch for V8, and then for JSC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496610</commentid>
    <comment_count>1</comment_count>
      <attachid>113745</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-11-04 19:33:02 -0700</bug_when>
    <thetext>Created attachment 113745
WIP patch for V8</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496612</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-04 19:38:09 -0700</bug_when>
    <thetext>Attachment 113745 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1

Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.h:27:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructorPrivate.h:21:  #ifndef header guard has wrong style, please use: WebKitDOMTestNamedConstructorPrivate_h  [build/header_guard] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructorPrivate.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructorPrivate.h:28:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:21:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:22:  Found WebCore config.h after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:24:  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]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:29:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:32:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:120:  Declaration has space between type name and * in GObjectClass *gobjectClass  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:145:  Extra space between return and WEBKIT_DOM_TEST_NAMED_CONSTRUCTOR  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/ObjC/DOMTestNamedConstructorInternal.h:32:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 13 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496613</commentid>
    <comment_count>3</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-11-04 19:41:23 -0700</bug_when>
    <thetext>I uploaded a big WIP patch that implements the [NamedConstructor] IDL for V8. I am planning to land it in the following steps:

[1] Refactor CodeGeneratorV8.pm.
[2] Fix the wrong test results of fast/js/custom-constructors.html.
[3] Remove [CustomGetter] from HTMLAudioElementConstructor.
[4] Remove [CustomGetter] from HTMLOptionElementConstructor.
[5] Implement the [NamedConstructor] IDL in IDLParser.pm and CodeGeneratorV8.pm.
[6] Replace the custom constructor of HTMLAudioElement with the [NamedConstructor] IDL.
[7] Replace the custom constructor of HTMLOptionElement with the [NamedConstructor] IDL.

Any thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496615</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-11-04 19:44:15 -0700</bug_when>
    <thetext>Sounds like a reasonable approach.  I can look at the work in progress patch, or I&apos;m also happy to review the changes in the order you propose them (which sounds quite a bit easier to review).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496616</commentid>
    <comment_count>5</comment_count>
      <attachid>113745</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-04 19:49:21 -0700</bug_when>
    <thetext>Comment on attachment 113745
WIP patch for V8

Attachment 113745 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10334204</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496620</commentid>
    <comment_count>6</comment_count>
      <attachid>113745</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-11-04 20:08:26 -0700</bug_when>
    <thetext>Comment on attachment 113745
WIP patch for V8

Attachment 113745 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10332171</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496621</commentid>
    <comment_count>7</comment_count>
      <attachid>113745</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-11-04 20:13:59 -0700</bug_when>
    <thetext>Comment on attachment 113745
WIP patch for V8

Attachment 113745 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10334209</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496624</commentid>
    <comment_count>8</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-11-04 20:48:44 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Sounds like a reasonable approach.  I can look at the work in progress patch, or I&apos;m also happy to review the changes in the order you propose them (which sounds quite a bit easier to review).

Thank you very much, Adam!

After the WIP patch passes all builds and tests, I&apos;ll upload sub-patches with more explanations. I would be happy if you take a detailed look at those sub-patches. (Please use the WIP patch just for capturing the overall image of those patches.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496823</commentid>
    <comment_count>9</comment_count>
      <attachid>113793</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-11-06 10:53:10 -0800</bug_when>
    <thetext>Created attachment 113793
WIP patch for V8 to see if a build passes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496825</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-06 10:56:49 -0800</bug_when>
    <thetext>Attachment 113793 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1

Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.h:27:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructorPrivate.h:21:  #ifndef header guard has wrong style, please use: WebKitDOMTestNamedConstructorPrivate_h  [build/header_guard] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructorPrivate.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructorPrivate.h:28:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:21:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:22:  Found WebCore config.h after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:24:  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]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:29:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:32:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:120:  Declaration has space between type name and * in GObjectClass *gobjectClass  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:145:  Extra space between return and WEBKIT_DOM_TEST_NAMED_CONSTRUCTOR  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/ObjC/DOMTestNamedConstructorInternal.h:32:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 13 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499266</commentid>
    <comment_count>11</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-11-09 12:40:00 -0800</bug_when>
    <thetext>OK. All V8-related patches were landed.

I will write a patch for JSC in a few weeks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510675</commentid>
    <comment_count>12</comment_count>
      <attachid>116943</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-11-29 04:09:33 -0800</bug_when>
    <thetext>Created attachment 116943
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510677</commentid>
    <comment_count>13</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-11-29 04:11:15 -0800</bug_when>
    <thetext>I uploaded a WIP patch that implements the [NamedConstructor] IDL for JSC. I am planning to land it in the following steps:

[1] Implement the [NamedConstructor] IDL in CodeGeneratorV8.pm.
[2] Replace the custom constructor of HTMLAudioElement with the [NamedConstructor] IDL.
[3] Replace the custom constructor of HTMLOptionElement with the [NamedConstructor] IDL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510687</commentid>
    <comment_count>14</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-11-29 04:27:43 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; I uploaded a WIP patch that implements the [NamedConstructor] IDL for JSC. I am planning to land it in the following steps:
&gt; 
&gt; [1] Implement the [NamedConstructor] IDL in CodeGeneratorV8.pm.

Correction: [1] Implement the [NamedConstructor] IDL in CodeGeneratorJS.pm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513296</commentid>
    <comment_count>15</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-12-01 17:05:58 -0800</bug_when>
    <thetext>All related patches were landed. Now both JSC and V8 have the [NamedConstructor] IDL. Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113745</attachid>
            <date>2011-11-04 19:33:02 -0700</date>
            <delta_ts>2011-11-06 10:53:04 -0800</delta_ts>
            <desc>WIP patch for V8</desc>
            <filename>bug-71093-20111104193301.patch</filename>
            <type>text/plain</type>
            <size>103311</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTkyODYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyMzcxNDZmNDgzN2Q1MGEz
ZDczMDkyM2QwODIyYjkyY2M5MDEyY2Q5Li5lNjAwYzI5N2JjMWZkZDdmYmM5M2M1NWUwMDA4MjYw
YjhmODY3NDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTE3IEBACisyMDExLTExLTA0ICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBBIFdJUCBwYXRjaCBm
b3IgaW1wbGVtZW50aW5nIFtOYW1lZENvbnN0cnVjdG9yXSBJREwgZm9yIFY4LgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwOTMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVu
dHMgW05hbWVkQ29uc3RydWN0b3JdIElETCBmb3IgVjguCisgICAgICAgIFRoZSBzcGVjOiBodHRw
Oi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI05hbWVkQ29uc3RydWN0b3IKKworICAgICAgICBJbiBh
ZGRpdGlvbiwgdGhpcyBwYXRjaCByZXBsYWNlcyB0aGUgY3VzdG9tIGNvbnN0cnVjdG9ycyBvZgor
ICAgICAgICBIVE1MQXVkaW9FbGVtZW50IGFuZCBIVE1MT3B0aW9uRWxlbWVudCB3aXRoIHRoZQor
ICAgICAgICBbTmFtZWRDb25zdHJ1Y3Rvcl0gSURMLgorCisgICAgICAgICogVGFyZ2V0LnByaTog
UmVtb3ZlZCBjdXN0b20gY29uc3RydWN0b3IgLmggYW5kIC5jcHAuCisgICAgICAgICogV2ViQ29y
ZS5neXBpOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbToKKyAgICAgICAgKEdlbmVyYXRlSGVhZGVyKTogR2VuZXJhdGVzIGEgaGVhZGVyIGZvciBh
IE5hbWVkQ29uc3RydWN0b3IuCisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9yQ2FsbGJhY2sp
OiBKdXN0IHJlZmFjdG9yZWQgdmFyaWFibGUgbmFtZXMuCisgICAgICAgIChHZW5lcmF0ZU5hbWVk
Q29uc3RydWN0b3JDYWxsYmFjayk6IEdlbmVyYXRlcyBhIGNvbnN0cnVjdG9yIGFuZCBHZXRUZW1w
bGF0ZSgpIGZvciB0aGUgTmFtZWRDb25zdHJ1Y3Rvci4KKyAgICAgICAgKEdlbmVyYXRlU2luZ2xl
QmF0Y2hlZEF0dHJpYnV0ZSk6IElmIGFuIElETCB0eXBlIGlzICJOYW1lZENvbnN0cnVjdG9yIiwg
dGhlbiB3ZSBkbyBub3QgYWRkIGEgaGVhZGVyIGZpbGUgb2YgdGhlIElETCB0eXBlLCBiZWNhdXNl
IHRoZSBkZWNsYXJhdGlvbiBvZiBYWFhYTmFtZWRDb25zdHJ1Y3RvciBpcyB3cml0dGVuIGluIHRo
ZSBoZWFkZXIgZmlsZSBvZiBYWFhYLgorICAgICAgICAoR2V0RG9tTWFwRnVuY3Rpb24pOiBKdXN0
IHJlZmFjdG9yZWQuCisgICAgICAgIChXcml0ZURhdGEpOiBEaXR0by4KKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbToKKyAgICAgICAgKHBhcnNlRXh0ZW5kZWRBdHRyaWJ1
dGVzKTogUGFyc2VzICdOYW1lZENvbnN0cnVjdG9yJyAnPScgbmFtZSAnKCcgcGFyYW1ldGVycyAn
KScgJywnPworICAgICAgICAoUGFyc2VJbnRlcmZhY2UpOiBDcmVhdGVzIHRoZSBzaWduYXR1cmUg
b2YgYSBOYW1lZENvbnN0cnVjdG9yLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0TmFtZWRDb25zdHJ1Y3Rvci5pZGw6IEFkZGVkIGEgbmV3IHRlc3QgZm9yIHRoZSBbTmFtZWRD
b25zdHJ1Y3Rvcl0gSURMLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2Vi
RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwOiBBZGRlZCBhIHJ1bi1iaW5kaW5nLXRlc3QgcmVz
dWx0IG9mIFRlc3ROYW1lZENvbnN0cnVjdG9yLmlkbC4KKyAgICAgICAgKFdlYkRPTVRlc3ROYW1l
ZENvbnN0cnVjdG9yOjpXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGU6OldlYkRPTVRl
c3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZSk6CisgICAgICAgIChXZWJET01UZXN0TmFtZWRDb25z
dHJ1Y3Rvcjo6V2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViRE9NVGVz
dE5hbWVkQ29uc3RydWN0b3I6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJET01UZXN0TmFtZWRD
b25zdHJ1Y3Rvcjo6aW1wbCk6CisgICAgICAgIChXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6
fldlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yKToKKyAgICAgICAgKHRvV2ViQ29yZSk6CisgICAg
ICAgICh0b1dlYktpdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJE
T01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5oOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHA6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpraXQpOgorICAgICAgICAoV2ViS2l0Ojpjb3JlKToKKyAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9maW5hbGl6ZSk6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3Jfc2V0X3Byb3BlcnR5KToKKyAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9nZXRfcHJvcGVydHkpOgorICAg
ICAgICAod2Via2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yX2NvbnN0cnVjdGVkKToKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9jbGFzc19pbml0KToKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9pbml0KToKKyAgICAgICAg
KFdlYktpdDo6d3JhcFRlc3ROYW1lZENvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5oOiBEaXR0
by4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
TmFtZWRDb25zdHJ1Y3RvclByaXZhdGUuaDogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6SlNUZXN0TmFtZWRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29u
c3RydWN0b3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25z
dHJ1Y3RvckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Z2V0Q29u
c3RydWN0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJv
dG90eXBlOjpzZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3I6
OkpTVGVzdE5hbWVkQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRD
b25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvcjo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE5hbWVkQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzT2JzZXJ2YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JPd25lcjo6ZmluYWxpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0b1Rlc3ROYW1lZENvbnN0
cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRD
b25zdHJ1Y3Rvci5oOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9y
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvcjo6aW1wbCk6CisgICAgICAgIChXZWJDb3JlOjp3cmFwcGVyT3duZXIpOgorICAgICAgICAo
V2ViQ29yZTo6d3JhcHBlckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRD
b25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yUHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5oOiBEaXR0by4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5t
bTogRGl0dG8uCisgICAgICAgICgtW0RPTVRlc3ROYW1lZENvbnN0cnVjdG9yIGRlYWxsb2NdKToK
KyAgICAgICAgKC1bRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IgZmluYWxpemVdKToKKyAgICAgICAg
KGNvcmUpOgorICAgICAgICAoa2l0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0TmFtZWRDb25zdHJ1Y3RvckludGVybmFsLmg6IERpdHRvLgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcDogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3RvckludGVybmFsOjpWOF9V
U0UpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0
b3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDb25maWd1cmVWOFRlc3ROYW1lZENvbnN0
cnVjdG9yVGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rv
cjo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1
Y3Rvcjo6R2V0VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1
Y3Rvcjo6SGFzSW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1
Y3Rvcjo6dG9BY3RpdmVET01PYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRD
b25zdHJ1Y3Rvcjo6d3JhcFNsb3cpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25z
dHJ1Y3Rvcjo6ZGVyZWZPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RJbnRlcmZhY2UuaDogVXBkYXRlZCBhIHJ1bi1iaW5kaW5nLXRlc3QgcmVzdWx0Lgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyLmg6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3ROYW1lZENvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFt
ZWRDb25zdHJ1Y3Rvcjo6dG9OYXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRD
b25zdHJ1Y3Rvcjo6ZXhpc3RpbmdXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE5h
bWVkQ29uc3RydWN0b3I6OndyYXApOgorICAgICAgICAoV2ViQ29yZTo6dG9WOCk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5oOiBEaXR0by4KKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmg6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRv
d0N1c3RvbS5jcHA6IFJlbW92ZWQgY3VzdG9tIGdldHRlcnMgb2YgSFRNTEF1ZGlvRWxlbWVudCBh
bmQgSFRNTE9wdGlvbkVsZW1lbnQuCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9y
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9u
RWxlbWVudENvbnN0cnVjdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9IVE1MQXVkaW9F
bGVtZW50LmlkbDogQWRkZWQgW05hbWVkQ29uc3RydWN0b3I9QXVkaW8oLi4uKV0uCisgICAgICAg
ICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5pZGw6IEFkZGVkIFtOYW1lZENvbnN0cnVjdG9yPU9w
dGlvbiguLi4pXS4KKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6IFJlbW92ZWQgW0N1c3Rv
bUdldHRlcl0gZnJvbSBIVE1MQXVkaW9FbGVtZW50IGFuZCBIVE1MT3B0aW9uRWxlbWVudC4gIkhU
TUxBdWRpb0VsZW1lbnROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IgQXVkaW8iIGlzIG5vdCB0
eXBvLiBUaGlzIG1lYW5zIHRoYXQgIkF1ZGlvIiBzaG91bGQgYmUgYm91bmQgdG8gIkhUTUxBdWRp
b0VsZW1lbnROYW1lZENvbnN0cnVjdG9yIi4KKwogMjAxMS0xMS0wMyAgQWRyaWVubmUgV2Fsa2Vy
ICA8ZW5uZUBnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRml4IGluY29ycmVjdCB2
aXNpYmlsaXR5L3NjaXNzb3IgcmVjdCBmb3IgdGhyZWFkZWQgY29tcG9zaXRpbmcKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CmluZGV4IDI4YTc1MGUwMzkyZmI2ZGRjMTQyZWYxMjZhOTM1OTJiNWY5ZTU3ZDMuLmVjZDExZTQ0
MDRlNGQ1ODljMzc4ZDA5OTk5NmE5ODY0MjBhN2ZhOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTgwLDEx
ICsxODAsNiBAQCB2OCB7CiAgICAgICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEZpbGVSZWFkZXJD
dXN0b20uY3BwIFwKICAgICAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEFsbENvbGxlY3Rp
b25DdXN0b20uY3BwCiAKLSAgICBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89MSkgewot
ICAgICAgICBTT1VSQ0VTICs9IFwKLSAgICAgICAgICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhU
TUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKLSAgICB9Ci0KICAgICBTT1VSQ0VTICs9IFwK
ICAgICAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3Bw
IFwKICAgICAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENvbGxlY3Rpb25DdXN0b20uY3Bw
IFwKQEAgLTE5Niw3ICsxOTEsNiBAQCB2OCB7CiAgICAgICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAgXAogICAgICAgICBiaW5kaW5ncy92OC9j
dXN0b20vVjhIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxMaW5rRWxlbWVudEN1c3RvbS5jcHAgXAotICAgICAgICBiaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcCBcCiAgICAgICAgIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAgXAogICAg
ICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3V0cHV0RWxlbWVudEN1c3RvbS5jcHAgXAog
ICAgICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MUGx1Z0luRWxlbWVudEN1c3RvbS5jcHAg
XApAQCAtMTMzMSw5ICsxMzI1LDcgQEAgdjggewogICAgIEhFQURFUlMgKz0gXAogICAgICAgICBi
aW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Wb2lkQ2FsbGJhY2suaCBcCiAgICAgICAgIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVhQYXRoTlNSZXNvbHZlci5oIFwKLSAgICAgICAgYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmggXAogICAgICAgICBi
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuaCBcCi0gICAg
ICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IuaCBc
CiAgICAgICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmgg
XAogICAgICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlUG9ydEN1c3RvbS5oIFwKICAg
ICAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4TmFtZWROb2Rlc0NvbGxlY3Rpb24uaCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKaW5kZXggYzgwOTY4ZGQwN2NlZDFjZTQ1OTUwN2YyZTg0Y2ExMTZiNDc4MTc5Ny4u
Y2NkYjhjYWQxY2NmYjRlYjU1NjI1NWQxNTc2M2FiN2Q4MzljZGRmYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtMjE4NCw4ICsyMTg0LDYgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20v
VjhGbG9hdDY0QXJyYXlDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0
b20vVjhHZW9sb2NhdGlvbkN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEhUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcCcsCi0gICAgICAgICAgICAnYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNwcCcsCi0gICAgICAg
ICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmgn
LAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3Vz
dG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENvbGxlY3Rp
b25DdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9j
dW1lbnRDdXN0b20uY3BwJywKQEAgLTIxOTcsOCArMjE5NSw2IEBACiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmgnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwJywK
ICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MTGlua0VsZW1lbnRDdXN0b20u
Y3BwJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uRWxlbWVu
dENvbnN0cnVjdG9yLmNwcCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9j
dXN0b20vVjhIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwJywKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3V0cHV0RWxlbWVudEN1c3RvbS5jcHAnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxQbHVnSW5FbGVtZW50Q3VzdG9tLmNwcCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4
LnBtCmluZGV4IDBmZjFiZTIxMGQxNDU4YTFhODRlYmNkNDczYzk2OGUyM2MzYTQ1MTUuLjRmNzM3
YmRhNDQxZDhmZGE2MjIxNTE3MWMxYTg1M2QwOWY4MjUyZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0zOSw3ICszOSw2
IEBAIG15ICRvdXRwdXRIZWFkZXJzRGlyID0gIiI7CiBteSBAaGVhZGVyQ29udGVudCA9ICgpOwog
bXkgQGltcGxDb250ZW50SGVhZGVyID0gKCk7CiBteSBAaW1wbEZpeGVkSGVhZGVyID0gKCk7Ci1t
eSBAaW1wbEhlYWRlckNvbnRlbnQgPSAoKTsKIG15IEBpbXBsQ29udGVudCA9ICgpOwogbXkgQGlt
cGxDb250ZW50RGVjbHMgPSAoKTsKIG15ICVpbXBsSW5jbHVkZXMgPSAoKTsKQEAgLTI4Myw2ICsy
ODIsOCBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAkaGVhZGVySW5jbHVkZXN7Ind0Zi90ZXh0
L1N0cmluZ0hhc2guaCJ9ID0gMTsKICAgICAkaGVhZGVySW5jbHVkZXN7IldyYXBwZXJUeXBlSW5m
by5oIn0gPSAxOwogICAgICRoZWFkZXJJbmNsdWRlc3siVjhET01XcmFwcGVyLmgifSA9IDE7Cisg
ICAgJGhlYWRlckluY2x1ZGVzeyJ3dGYvSGFzaE1hcC5oIn0gPSAxOworICAgICRoZWFkZXJJbmNs
dWRlc3sidjguaCJ9ID0gMTsKIAogICAgIG15ICRoZWFkZXJDbGFzc0luY2x1ZGUgPSBHZXRIZWFk
ZXJDbGFzc0luY2x1ZGUoJGltcGxDbGFzc05hbWUpOwogICAgICRoZWFkZXJJbmNsdWRlc3skaGVh
ZGVyQ2xhc3NJbmNsdWRlfSA9IDEgaWYgJGhlYWRlckNsYXNzSW5jbHVkZSBuZSAiIjsKQEAgLTI5
MCwxNiArMjkxLDEzIEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIG15ICgkc3ZnUHJvcGVydHlU
eXBlLCAkc3ZnTGlzdFByb3BlcnR5VHlwZSwgJHN2Z05hdGl2ZVR5cGUpID0gR2V0U1ZHUHJvcGVy
dHlUeXBlcygkaW1wbENsYXNzTmFtZSk7CiAKICAgICBmb3JlYWNoIG15ICRoZWFkZXJJbmNsdWRl
IChzb3J0IGtleXMoJWhlYWRlckluY2x1ZGVzKSkgewotICAgICAgICBpZiAoJGhlYWRlckluY2x1
ZGUgPX4gL3d0Zi8pIHsKKyAgICAgICAgaWYgKCRoZWFkZXJJbmNsdWRlID1+IC93dGZ8djhcLmgv
KSB7CiAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2luY2x1ZGUgXDwke2hlYWRl
ckluY2x1ZGV9XD5cbiIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiNpbmNsdWRlIFwiJHtoZWFkZXJJbmNsdWRlfVwiXG4iKTsKICAgICAgICAg
fQogICAgIH0KIAotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjaW5jbHVkZSA8djguaD5cbiIp
OwotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD5cbiIp
OwotCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxubmFtZXNwYWNlIFdlYkNvcmUge1xuIik7
CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxudGVtcGxhdGU8dHlwZW5hbWUgUHJvcGVydHlU
eXBlPiBjbGFzcyBTVkdQcm9wZXJ0eVRlYXJPZmY7XG4iKSBpZiAkc3ZnUHJvcGVydHlUeXBlOwog
ICAgIGlmICgkc3ZnTmF0aXZlVHlwZSkgewpAQCAtMzEwLDYgKzMwOCwxOSBAQCBzdWIgR2VuZXJh
dGVIZWFkZXIKICAgICAgICAgfQogICAgIH0KICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5j
bGFzcyBGbG9hdFJlY3Q7XG4iKSBpZiAkc3ZnUHJvcGVydHlUeXBlICYmICRzdmdQcm9wZXJ0eVR5
cGUgZXEgIkZsb2F0UmVjdCI7CisKKyAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2ZVR5cGVG
b3JDb252ZXJzaW9ucygkZGF0YU5vZGUsICRpbnRlcmZhY2VOYW1lKTsKKyAgICBpZiAoJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9KSB7CisgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKKworY2xhc3MgVjgke25hdGl2ZVR5cGV9TmFt
ZWRDb25zdHJ1Y3RvciB7CitwdWJsaWM6CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0ZSgpOworICAgIHN0YXRpYyBXcmFwcGVyVHlwZUlu
Zm8gaW5mbzsKK307CitFTkQKKyAgICB9CisKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5j
bGFzcyAkY2xhc3NOYW1lIHtcbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJwdWJsaWM6
XG4iKTsKIApAQCAtMzMyLDE0ICszNDMsMTMgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJmYWxzZTtcbiIpOwogICAgIH0KIAotICAgIG15ICRuYXRp
dmVUeXBlID0gR2V0TmF0aXZlVHlwZUZvckNvbnZlcnNpb25zKCRkYXRhTm9kZSwgJGludGVyZmFj
ZU5hbWUpOwogICAgIG15ICRkb21NYXBGdW5jdGlvbiA9IEdldERvbU1hcEZ1bmN0aW9uKCRkYXRh
Tm9kZSwgJGludGVyZmFjZU5hbWUpOwogICAgIG15ICRmb3JjZU5ld09iamVjdFBhcmFtZXRlciA9
IElzRE9NTm9kZVR5cGUoJGludGVyZmFjZU5hbWUpID8gIiwgYm9vbCBmb3JjZU5ld09iamVjdCA9
IGZhbHNlIiA6ICIiOwogICAgIG15ICRmb3JjZU5ld09iamVjdElucHV0ID0gSXNET01Ob2RlVHlw
ZSgkaW50ZXJmYWNlTmFtZSkgPyAiLCBib29sIGZvcmNlTmV3T2JqZWN0IiA6ICIiOwogICAgIG15
ICRmb3JjZU5ld09iamVjdENhbGwgPSBJc0RPTU5vZGVUeXBlKCRpbnRlcmZhY2VOYW1lKSA/ICIs
IGZvcmNlTmV3T2JqZWN0IiA6ICIiOwogCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQp
OwotICAgIHN0YXRpYyBib29sIEhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1
ZSk7CisgICAgc3RhdGljIGJvb2wgSGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsK
ICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFJhd1Rl
bXBsYXRlKCk7CiAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBHZXRUZW1wbGF0ZSgpOwogICAgIHN0YXRpYyAke25hdGl2ZVR5cGV9KiB0b05hdGl2ZSh2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKQEAgLTM4NSw3ICszOTUsNyBAQCBFTkQKIAogICAg
IGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Db25zdHJ1Y3RvciJ9
IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4Q3VzdG9tQ29uc3RydWN0b3Ii
fSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYW5CZUNvbnN0cnVjdGVkIn0g
fHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3IifSkgewogICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
OworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uc3RydWN0b3JDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJik7CiBFTkQKICAgICB9CiAKQEAgLTE1MjIsNyArMTUzMiw4IEBA
IHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yQ2FsbGJhY2sKICAgICAgICAgfQogICAgIH0KIAotICAg
IG15IEBleHRyYUFyZ3VtZW50TGlzdDsKKyAgICBteSBAYmVmb3JlQXJndW1lbnRMaXN0OworICAg
IG15IEBhZnRlckFyZ3VtZW50TGlzdDsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwog
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4JHtpbXBsQ2xhc3NOYW1lfTo6Y29uc3RydWN0b3JDYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewpAQCAtMTU0Niw5ICsxNTU3LDggQEAg
RU5ECiAgICAgbXkgKCRwYXJhbWV0ZXJDaGVja1N0cmluZywgJHBhcmFtSW5kZXgpID0gR2VuZXJh
dGVQYXJhbWV0ZXJzQ2hlY2soJGZ1bmN0aW9uLCAkaW1wbENsYXNzTmFtZSk7CiAgICAgcHVzaChA
aW1wbENvbnRlbnQsICRwYXJhbWV0ZXJDaGVja1N0cmluZyk7CiAKLSAgICBteSBAY29udGV4dEFy
Z3VtZW50OwogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0
aCJ9ICYmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn0gZXEgIlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQiKSB7Ci0gICAgICAgIHB1c2goQGNvbnRleHRBcmd1bWVudCwg
ImNvbnRleHQiKTsKKyAgICAgICAgcHVzaChAYmVmb3JlQXJndW1lbnRMaXN0LCAiY29udGV4dCIp
OwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwogCiAgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKQEAgLTE1
NTgsNyArMTU2OCw3IEBAIEVORAogICAgIH0KIAogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvclJhaXNlc0V4Y2VwdGlvbiJ9KSB7Ci0gICAgICAgIHB1
c2goQGV4dHJhQXJndW1lbnRMaXN0LCAiZWMiKTsKKyAgICAgICAgcHVzaChAYWZ0ZXJBcmd1bWVu
dExpc3QsICJlYyIpOwogICAgIH0KIAogICAgIG15IEBhcmd1bWVudExpc3Q7CkBAIC0xNTY5LDcg
KzE1NzksNyBAQCBFTkQKICAgICAgICAgJGluZGV4Kys7CiAgICAgfQogCi0gICAgbXkgJGFyZ3Vt
ZW50U3RyaW5nID0gam9pbigiLCAiLCBAY29udGV4dEFyZ3VtZW50LCBAYXJndW1lbnRMaXN0LCBA
ZXh0cmFBcmd1bWVudExpc3QpOworICAgIG15ICRhcmd1bWVudFN0cmluZyA9IGpvaW4oIiwgIiwg
QGJlZm9yZUFyZ3VtZW50TGlzdCwgQGFyZ3VtZW50TGlzdCwgQGFmdGVyQXJndW1lbnRMaXN0KTsK
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgUmVmUHRyPCR7aW1wbENsYXNzTmFtZX0+IG9iaiA9ICR7aW1wbENsYXNzTmFtZX06OmNyZWF0
ZSgke2FyZ3VtZW50U3RyaW5nfSk7XG4iKTsKIApAQCAtMTU5Niw2ICsxNjA2LDE0MyBAQCBFTkQK
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CiB9CiAKK3N1YiBHZW5lcmF0ZU5hbWVkQ29u
c3RydWN0b3JDYWxsYmFjaworeworICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OworICAgIG15ICRk
YXRhTm9kZSA9IHNoaWZ0OworICAgIG15ICRpbXBsQ2xhc3NOYW1lID0gc2hpZnQ7CisKKyAgICBt
eSAkcmFpc2VzRXhjZXB0aW9ucyA9IEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfTsKKyAg
ICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3JSYWlzZXNF
eGNlcHRpb24ifSkgeworICAgICAgICAkcmFpc2VzRXhjZXB0aW9ucyA9IDE7CisgICAgfQorICAg
IGlmICghJHJhaXNlc0V4Y2VwdGlvbnMpIHsKKyAgICAgICAgZm9yZWFjaCBteSAkcGFyYW1ldGVy
IChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKKyAgICAgICAgICAgIGlmICgoISRwYXJhbWV0
ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsYmFjayJ9IGFuZCBUeXBlQ2FuRmFpbENvbnZl
cnNpb24oJHBhcmFtZXRlcikpIG9yICRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJ
c0luZGV4In0pIHsKKyAgICAgICAgICAgICAgICAkcmFpc2VzRXhjZXB0aW9ucyA9IDE7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBteSBAYmVmb3JlQXJndW1lbnRMaXN0
OworICAgIG15IEBhZnRlckFyZ3VtZW50TGlzdDsKKworICAgIGlmICgkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJBY3RpdmVET01PYmplY3QifSkgeworICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgPDxFTkQpOworV3JhcHBlclR5cGVJbmZvIFY4JHtpbXBsQ2xhc3NOYW1lfU5hbWVk
Q29uc3RydWN0b3I6OmluZm8gPSB7IFY4JHtpbXBsQ2xhc3NOYW1lfU5hbWVkQ29uc3RydWN0b3I6
OkdldFRlbXBsYXRlLCBWOCR7aW1wbENsYXNzTmFtZX06OmRlcmVmT2JqZWN0LCBWOCR7aW1wbENs
YXNzTmFtZX06OnRvQWN0aXZlRE9NT2JqZWN0LCAwIH07CisKK0VORAorICAgIH0gZWxzZSB7Cisg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CitXcmFwcGVyVHlwZUluZm8gVjgke2lt
cGxDbGFzc05hbWV9TmFtZWRDb25zdHJ1Y3Rvcjo6aW5mbyA9IHsgVjgke2ltcGxDbGFzc05hbWV9
TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUsIDAsIDAsIDAgfTsKKworRU5ECisgICAgfQor
CisgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjgke2ltcGxDbGFzc05hbWV9Q29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLiR7aW1wbENsYXNzTmFtZX0uQ29u
c3RydWN0b3IiKTsKKworICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKKyAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxl
ZCBhcyBhIGZ1bmN0aW9uLiIsIFY4UHJveHk6OlR5cGVFcnJvcik7CisKKyAgICBpZiAoQ29uc3Ry
dWN0b3JNb2RlOjpjdXJyZW50KCkgPT0gQ29uc3RydWN0b3JNb2RlOjpXcmFwRXhpc3RpbmdPYmpl
Y3QpCisgICAgICAgIHJldHVybiBhcmdzLkhvbGRlcigpOworCisgICAgRnJhbWUqIGZyYW1lID0g
VjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckN1cnJlbnRDb250ZXh0KCk7CisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIiR7aW1wbENsYXNzTmFtZX0gY29uc3RydWN0
b3IgYXNzb2NpYXRlZCBmcmFtZSBpcyB1bmF2YWlsYWJsZSIsIFY4UHJveHk6OlJlZmVyZW5jZUVy
cm9yKTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAg
IGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCIke2ltcGxDbGFzc05h
bWV9IGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiLCBWOFBy
b3h5OjpSZWZlcmVuY2VFcnJvcik7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIGRvY3VtZW50IGlz
IGFkZGVkIHRvIHRoZSBET00gTm9kZSBtYXAuIE90aGVyd2lzZSwgdGhlICR7aW1wbENsYXNzTmFt
ZX0gaW5zdGFuY2UKKyAgICAvLyBtYXkgZW5kIHVwIGJlaW5nIHRoZSBvbmx5IG5vZGUgaW4gdGhl
IG1hcCBhbmQgZ2V0IGdhcmJhZ2UtY29sbGVjdGVkIHByZW1hdHVyZWx5LgorICAgIHRvVjgoZG9j
dW1lbnQpOworCitFTkQKKworICAgIHB1c2goQGltcGxDb250ZW50LCBHZW5lcmF0ZUFyZ3VtZW50
c0NvdW50Q2hlY2soJGZ1bmN0aW9uLCAkZGF0YU5vZGUpKTsKKworICAgIGlmICgkcmFpc2VzRXhj
ZXB0aW9ucykgeworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRXhjZXB0aW9uQ29kZS5oIik7
CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKTsKKyAgICB9CisKKyAgICBteSAo
JHBhcmFtZXRlckNoZWNrU3RyaW5nLCAkcGFyYW1JbmRleCkgPSBHZW5lcmF0ZVBhcmFtZXRlcnND
aGVjaygkZnVuY3Rpb24sICRpbXBsQ2xhc3NOYW1lKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwg
JHBhcmFtZXRlckNoZWNrU3RyaW5nKTsKKworICAgIHB1c2goQGJlZm9yZUFyZ3VtZW50TGlzdCwg
ImRvY3VtZW50Iik7CisKKyAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q29uc3RydWN0b3JSYWlzZXNFeGNlcHRpb24ifSkgeworICAgICAgICBwdXNoKEBhZnRlckFyZ3Vt
ZW50TGlzdCwgImVjIik7CisgICAgfQorCisgICAgbXkgQGFyZ3VtZW50TGlzdDsKKyAgICBteSAk
aW5kZXggPSAwOworICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQHskZnVuY3Rpb24tPnBhcmFt
ZXRlcnN9KSB7CisgICAgICAgIGxhc3QgaWYgJGluZGV4IGVxICRwYXJhbUluZGV4OworICAgICAg
ICBwdXNoKEBhcmd1bWVudExpc3QsICRwYXJhbWV0ZXItPm5hbWUpOworICAgICAgICAkaW5kZXgr
KzsKKyAgICB9CisKKyAgICBteSAkYXJndW1lbnRTdHJpbmcgPSBqb2luKCIsICIsIEBiZWZvcmVB
cmd1bWVudExpc3QsIEBhcmd1bWVudExpc3QsIEBhZnRlckFyZ3VtZW50TGlzdCk7CisgICAgcHVz
aChAaW1wbENvbnRlbnQsICJcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFJlZlB0
cjwke2ltcGxDbGFzc05hbWV9PiBvYmogPSAke2ltcGxDbGFzc05hbWV9OjpjcmVhdGVGb3JKU0Nv
bnN0cnVjdG9yKCR7YXJndW1lbnRTdHJpbmd9KTtcbiIpOworCisgICAgaWYgKCRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yUmFpc2VzRXhjZXB0aW9uIn0pIHsKKyAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGVjKVxuIik7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICBnb3RvIGZhaWw7XG4iKTsKKyAgICB9CisKKyAgICBteSAk
RE9NT2JqZWN0ID0gIkRPTU9iamVjdCI7CisgICAgIyBBIERPTU9iamVjdCB0aGF0IGlzIGFuIEFj
dGl2ZURPTU9iamVjdCBhbmQgYWxzbyBhIERPTU5vZGUgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4g
QWN0aXZlRE9NT2JqZWN0LgorICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJBY3RpdmVET01PYmplY3QifSkgeworICAgICAgICAkRE9NT2JqZWN0ID0gIkFjdGl2ZURPTU9i
amVjdCI7CisgICAgfSBlbHNpZiAoSXNOb2RlU3ViVHlwZSgkZGF0YU5vZGUpKSB7CisgICAgICAg
ICRET01PYmplY3QgPSAiRE9NTm9kZSI7CisgICAgfQorICAgIHB1c2goQGltcGxDb250ZW50LCA8
PEVORCk7CisKKyAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwg
JlY4JHtpbXBsQ2xhc3NOYW1lfU5hbWVkQ29uc3RydWN0b3I6OmluZm8sIG9iai5nZXQoKSk7Cisg
ICAgb2JqLT5yZWYoKTsKKyAgICBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZvciR7RE9NT2Jq
ZWN0fShvYmouZ2V0KCksIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoYXJncy5Ib2xk
ZXIoKSkpOworICAgIHJldHVybiBhcmdzLkhvbGRlcigpOworRU5ECisKKyAgICBpZiAoJHJhaXNl
c0V4Y2VwdGlvbnMpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgIGZhaWw6XG4iKTsK
KyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHRocm93RXJyb3IoZWMpO1xu
Iik7CisgICAgfQorCisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKKworICAgIHB1c2go
QGltcGxDb250ZW50LCA8PEVORCk7CisKK3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBWOCR7aW1wbENsYXNzTmFtZX1OYW1lZENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSgpCit7
CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBjYWNoZWRU
ZW1wbGF0ZTsKKyAgICBpZiAoIWNhY2hlZFRlbXBsYXRlLklzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIGNhY2hlZFRlbXBsYXRlOworCisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIHY4
OjpMb2NhbDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcmVzdWx0ID0gdjg6OkZ1bmN0aW9uVGVtcGxh
dGU6Ok5ldyhWOCR7aW1wbENsYXNzTmFtZX1Db25zdHJ1Y3RvckNhbGxiYWNrKTsKKworICAgIHY4
OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IGluc3RhbmNlID0gcmVzdWx0LT5JbnN0YW5jZVRl
bXBsYXRlKCk7CisgICAgaW5zdGFuY2UtPlNldEludGVybmFsRmllbGRDb3VudChWOCR7aW1wbENs
YXNzTmFtZX06OmludGVybmFsRmllbGRDb3VudCk7CisgICAgcmVzdWx0LT5TZXRDbGFzc05hbWUo
djg6OlN0cmluZzo6TmV3KCIke2ltcGxDbGFzc05hbWV9IikpOworICAgIHJlc3VsdC0+SW5oZXJp
dChWOCR7aW1wbENsYXNzTmFtZX06OkdldFRlbXBsYXRlKCkpOworCisgICAgY2FjaGVkVGVtcGxh
dGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyhyZXN1bHQpOwor
ICAgIHJldHVybiBjYWNoZWRUZW1wbGF0ZTsKK30KKworRU5ECit9CisKIHN1YiBHZW5lcmF0ZUJh
dGNoZWRBdHRyaWJ1dGVEYXRhCiB7CiAgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CkBAIC0xNjcy
LDcgKzE4MTksOSBAQCBzdWIgR2VuZXJhdGVTaW5nbGVCYXRjaGVkQXR0cmlidXRlCiAgICAgaWYg
KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSA9fiAvQ29uc3RydWN0b3IkLykgewogICAgICAg
ICBteSAkY29uc3RydWN0b3JUeXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRhdHRy
aWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSk7CiAgICAgICAgICRjb25zdHJ1Y3RvclR5cGUgPX4gcy9D
b25zdHJ1Y3RvciQvLzsKLSAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlY4JHtjb25zdHJ1Y3Rv
clR5cGV9LmgiLCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
b25kaXRpb25hbCJ9KTsKKyAgICAgICAgaWYgKCRjb25zdHJ1Y3RvclR5cGUgIX4gL05hbWVkQ29u
c3RydWN0b3IkLykgeworICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlY4JHtjb25zdHJ1
Y3RvclR5cGV9LmgiLCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDb25kaXRpb25hbCJ9KTsKKyAgICAgICAgfQogICAgICAgICBpZiAoJGN1c3RvbUFjY2Vzc29y
KSB7CiAgICAgICAgICAgICAkZ2V0dGVyID0gIlY4JHtjdXN0b21BY2Nlc3Nvcn1BY2Nlc3Nvckdl
dHRlciI7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0yMTUzLDYgKzIzMDIsOCBAQCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gJHtjbGFzc05hbWV9Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZwogfQogCiBFTkQKKyAgICB9IGVsc2lmICgkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9yIn0gJiYgISgkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJWOEN1c3RvbUNvbnN0cnVjdG9yIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifSkpIHsKKyAgICAgICAgR2VuZXJhdGVO
YW1lZENvbnN0cnVjdG9yQ2FsbGJhY2soJGRhdGFOb2RlLT5jb25zdHJ1Y3RvciwgJGRhdGFOb2Rl
LCAkaW50ZXJmYWNlTmFtZSk7CiAgICAgfSBlbHNpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ2FuQmVDb25zdHJ1Y3RlZCJ9ICYmICEoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiVjhDdXN0b21Db25zdHJ1Y3RvciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkN1c3RvbUNvbnN0cnVjdG9yIn0pKSB7CiAgICAgICAgIEdlbmVyYXRlQ29uc3Ry
dWN0b3JDYWxsYmFjaygkZGF0YU5vZGUtPmNvbnN0cnVjdG9yLCAkZGF0YU5vZGUsICRpbnRlcmZh
Y2VOYW1lKTsKICAgICB9CkBAIC0yODYxLDcgKzMwMTIsNyBAQCBzdWIgR2V0RG9tTWFwRnVuY3Rp
b24KICAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKICAgICBteSAkdHlwZSA9IHNoaWZ0OwogICAg
IHJldHVybiAiZ2V0RE9NU1ZHRWxlbWVudEluc3RhbmNlTWFwKCkiIGlmICR0eXBlIGVxICJTVkdF
bGVtZW50SW5zdGFuY2UiOwotICAgIHJldHVybiAiZ2V0RE9NTm9kZU1hcCgpIiBpZiAoSXNOb2Rl
U3ViVHlwZSgkZGF0YU5vZGUpKTsKKyAgICByZXR1cm4gImdldERPTU5vZGVNYXAoKSIgaWYgSXNO
b2RlU3ViVHlwZSgkZGF0YU5vZGUpOwogICAgIHJldHVybiAiZ2V0QWN0aXZlRE9NT2JqZWN0TWFw
KCkiIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkFjdGl2ZURPTU9iamVjdCJ9
OwogICAgIHJldHVybiAiZ2V0RE9NT2JqZWN0TWFwKCkiOwogfQpAQCAtMzUxOSw3ICszNjcwLDYg
QEAgc3ViIFdyaXRlRGF0YQogCiAgICAgICAgICVpbXBsSW5jbHVkZXMgPSAoKTsKICAgICAgICAg
QGltcGxGaXhlZEhlYWRlciA9ICgpOwotICAgICAgICBAaW1wbEhlYWRlckNvbnRlbnQgPSAoKTsK
ICAgICAgICAgQGltcGxDb250ZW50RGVjbHMgPSAoKTsKICAgICAgICAgQGltcGxDb250ZW50ID0g
KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9J
RExQYXJzZXIucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5w
bQppbmRleCBkNmExYmU5MWFiZjUwMGQxZWYyYTk2OWFiNDJjZjc5YTM3MDA3YTlkLi4zNmYwZWVi
YmY5ZTM5ODU4Zjc3NzEyMTViZmI3YTY0NDQwMDg4NjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQpAQCAtMTUxLDE3ICsxNTEsNDEgQEAgc3ViIHBh
cnNlRXh0ZW5kZWRBdHRyaWJ1dGVzCiAgICAgICAgICRzdHIgPX4gcy9eXHMqKFtcd1xkXSspLy87
CiAKICAgICAgICAgaWYgKCRzdHIgPX4gL15ccyo9LykgewotICAgICAgICAgICAgIyBQYXJzZSAn
PScgdmFsdWUgfCAnPScgdmFsdWUgJywnCiAgICAgICAgICAgICAkc3RyID1+IHMvXlxzKj0vLzsK
LSAgICAgICAgICAgIGlmICgkc3RyID1+IC9eXHMqKFteLF0qKSw/LykgewotICAgICAgICAgICAg
ICAgICRhdHRyc3skbmFtZX0gPSAkMTsKLSAgICAgICAgICAgICAgICAkYXR0cnN7JG5hbWV9ID1+
IHMvXiguKj8pXHMqJC8kMS87Ci0gICAgICAgICAgICAgICAgJHN0ciA9fiBzL15ccyooW14sXSop
LD8vLzsKKyAgICAgICAgICAgIGlmICgkbmFtZSBlcSAiTmFtZWRDb25zdHJ1Y3RvciIpIHsKKyAg
ICAgICAgICAgICAgICAjIFBhcnNlICc9JyBuYW1lICcoJyBhcmd1bWVudHMgJyknICcsJz8KKyAg
ICAgICAgICAgICAgICBpZiAoJHN0ciA9fiAvXlxzKihbXHdcZF0rKS8pIHsKKyAgICAgICAgICAg
ICAgICAgICAgIyBGb3Igbm93IGlnbm9yZSB0aGUgbmFtZSwgc2luY2UgdGhlIG5hbWUgaXMgbWFu
YWdlZCBpbiBET01XaW5kb3cuaWRsLgorICAgICAgICAgICAgICAgICAgICAkc3RyID1+IHMvXlxz
KihbXHdcZF0rKS8vOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoJHN0
ciA9fiAvXlxzKlwoLykgeworICAgICAgICAgICAgICAgICAgICAjIFBhcnNlICcoJyBhcmd1bWVu
dHMgJyknICcsJz8KKyAgICAgICAgICAgICAgICAgICAgJHN0ciA9fiBzL15ccypcKC8vOworICAg
ICAgICAgICAgICAgICAgICBpZiAoJHN0ciA9fiAvXihbXildKilcKSw/LykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgJGF0dHJzeyRuYW1lfSA9ICQxOworICAgICAgICAgICAgICAgICAgICAg
ICAgJGF0dHJzeyRuYW1lfSA9fiBzL14oLio/KVxzKiQvJDEvOworICAgICAgICAgICAgICAgICAg
ICAgICAgJHN0ciA9fiBzL14oW14pXSopXCksPy8vOworICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZGllKCJJbnZhbGlkIGV4dGVuZGVkIGF0dHJp
YnV0ZTogJyRzdHInXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0gZWxzaWYgKCRzdHIgPX4gL15ccyosPy8pIHsKKyAgICAgICAgICAgICAgICAgICAgJGF0dHJz
eyRuYW1lfSA9ICIiOworICAgICAgICAgICAgICAgICAgICAkc3RyID1+IHMvXlxzKiw/Ly87Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGllKCJJbnZhbGlk
IGV4dGVuZGVkIGF0dHJpYnV0ZTogJyRzdHInXG4iKTsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRpZSgiSW52YWxpZCBleHRlbmRlZCBh
dHRyaWJ1dGU6ICckc3RyJ1xuIik7CisgICAgICAgICAgICAgICAgIyBQYXJzZSAnPScgdmFsdWUg
JywnPworICAgICAgICAgICAgICAgIGlmICgkc3RyID1+IC9eXHMqKFteLF0qKSw/LykgeworICAg
ICAgICAgICAgICAgICAgICAkYXR0cnN7JG5hbWV9ID0gJDE7CisgICAgICAgICAgICAgICAgICAg
ICRhdHRyc3skbmFtZX0gPX4gcy9eKC4qPylccyokLyQxLzsKKyAgICAgICAgICAgICAgICAgICAg
JHN0ciA9fiBzL15ccyooW14sXSopLD8vLzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBkaWUoIkludmFsaWQgZXh0ZW5kZWQgYXR0cmlidXRlOiAnJHN0cidc
biIpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNpZiAo
JHN0ciA9fiAvXlxzKlwoLykgewotICAgICAgICAgICAgIyBQYXJzZSAnKCcgYXJndW1lbnRzICcp
JyB8ICcoJyBhcmd1bWVudHMgJyknICcsJworICAgICAgICAgICAgIyBQYXJzZSAnKCcgYXJndW1l
bnRzICcpJyAnLCc/CiAgICAgICAgICAgICAkc3RyID1+IHMvXlxzKlwoLy87CiAgICAgICAgICAg
ICBpZiAoJHN0ciA9fiAvXihbXildKilcKSw/LykgewogICAgICAgICAgICAgICAgICRhdHRyc3sk
bmFtZX0gPSAkMTsKQEAgLTI1OSw2ICsyODMsMTQgQEAgc3ViIFBhcnNlSW50ZXJmYWNlCiAgICAg
ICAgICAgICBwYXJzZVBhcmFtZXRlcnMoJG5ld0RhdGFOb2RlLCAkZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkNvbnN0cnVjdG9yIn0pOwogICAgICAgICAgICAgJGV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
b25zdHJ1Y3RvciJ9ID0gMTsKICAgICAgICAgICAgICRkYXRhTm9kZS0+Y29uc3RydWN0b3IoJG5l
d0RhdGFOb2RlKTsKKyAgICAgICAgfSBlbHNpZiAoZGVmaW5lZCAkZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Ik5hbWVkQ29uc3RydWN0b3IifSkgeworICAgICAgICAgICAgbXkgJG5ld0RhdGFOb2RlID0g
bmV3IGRvbUZ1bmN0aW9uKCk7CisgICAgICAgICAgICAkbmV3RGF0YU5vZGUtPnNpZ25hdHVyZShu
ZXcgZG9tU2lnbmF0dXJlKCkpOworICAgICAgICAgICAgJG5ld0RhdGFOb2RlLT5zaWduYXR1cmUt
Pm5hbWUoIk5hbWVkQ29uc3RydWN0b3IiKTsKKyAgICAgICAgICAgICRuZXdEYXRhTm9kZS0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlcyk7CisgICAgICAg
ICAgICBwYXJzZVBhcmFtZXRlcnMoJG5ld0RhdGFOb2RlLCAkZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Ik5hbWVkQ29uc3RydWN0b3IifSk7CisgICAgICAgICAgICAkZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Ik5hbWVkQ29uc3RydWN0b3IifSA9IDE7CisgICAgICAgICAgICAkZGF0YU5vZGUtPmNvbnN0cnVj
dG9yKCRuZXdEYXRhTm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01U
ZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjBjMzc3N2JmNGNmNjIyNjliNDRl
ZTc2NjZhNTUxMDcxZjNlOTc5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCkBA
IC0wLDAgKzEsODIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IuaCIKKworI2luY2x1ZGUgIlRlc3RO
YW1lZENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgorI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK3N0cnVjdCBX
ZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6V2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2
YXRlIHsKKyAgICBXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGUoV2ViQ29yZTo6VGVz
dE5hbWVkQ29uc3RydWN0b3IqIG9iamVjdCA9IDApCisgICAgICAgIDogaW1wbChvYmplY3QpCisg
ICAgeworICAgIH0KKworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4g
aW1wbDsKK307CisKK1dlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yOjpXZWJET01UZXN0TmFtZWRD
b25zdHJ1Y3RvcigpCisgICAgOiBXZWJET01PYmplY3QoKQorICAgICwgbV9pbXBsKDApCit7Cit9
CisKK1dlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yOjpXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rv
cihXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3RvciogaW1wbCkKKyAgICA6IFdlYkRPTU9iamVj
dCgpCisgICAgLCBtX2ltcGwobmV3IFdlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZShp
bXBsKSkKK3sKK30KKworV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3I6OldlYkRPTVRlc3ROYW1l
ZENvbnN0cnVjdG9yKGNvbnN0IFdlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yJiBjb3B5KQorICAg
IDogV2ViRE9NT2JqZWN0KCkKK3sKKyAgICBtX2ltcGwgPSBjb3B5LmltcGwoKSA/IG5ldyBXZWJE
T01UZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGUoY29weS5pbXBsKCkpIDogMDsKK30KKworV2Vi
RE9NVGVzdE5hbWVkQ29uc3RydWN0b3ImIFdlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yOjpvcGVy
YXRvcj0oY29uc3QgV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3ImIGNvcHkpCit7CisgICAgZGVs
ZXRlIG1faW1wbDsKKyAgICBtX2ltcGwgPSBjb3B5LmltcGwoKSA/IG5ldyBXZWJET01UZXN0TmFt
ZWRDb25zdHJ1Y3RvclByaXZhdGUoY29weS5pbXBsKCkpIDogMDsKKyAgICByZXR1cm4gKnRoaXM7
Cit9CisKK1dlYkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9yKiBXZWJET01UZXN0TmFtZWRDb25z
dHJ1Y3Rvcjo6aW1wbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+aW1w
bC5nZXQoKSA6IDA7Cit9CisKK1dlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yOjp+V2ViRE9NVGVz
dE5hbWVkQ29uc3RydWN0b3IoKQoreworICAgIGRlbGV0ZSBtX2ltcGw7CisgICAgbV9pbXBsID0g
MDsKK30KKworV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqIHRvV2ViQ29yZShjb25zdCBX
ZWJET01UZXN0TmFtZWRDb25zdHJ1Y3RvciYgd3JhcHBlcikKK3sKKyAgICByZXR1cm4gd3JhcHBl
ci5pbXBsKCk7Cit9CisKK1dlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yIHRvV2ViS2l0KFdlYkNv
cmU6OlRlc3ROYW1lZENvbnN0cnVjdG9yKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gV2ViRE9NVGVz
dE5hbWVkQ29uc3RydWN0b3IodmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0TmFtZWRD
b25zdHJ1Y3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0NWRhYTc2MWM5MmJlMjYyNTZlYjRhZDk0YjNlMmE5
NTcwNzM4MWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw1MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CisgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3JfaAorI2RlZmluZSBX
ZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlIDxXZWJET01PYmplY3QuaD4K
KyNpbmNsdWRlIDxXZWJET01TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3Mg
VGVzdE5hbWVkQ29uc3RydWN0b3I7Cit9OworCisKK2NsYXNzIFdlYkRPTVRlc3ROYW1lZENvbnN0
cnVjdG9yIDogcHVibGljIFdlYkRPTU9iamVjdCB7CitwdWJsaWM6CisgICAgV2ViRE9NVGVzdE5h
bWVkQ29uc3RydWN0b3IoKTsKKyAgICBleHBsaWNpdCBXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rv
cihXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3RvciopOworICAgIFdlYkRPTVRlc3ROYW1lZENv
bnN0cnVjdG9yKGNvbnN0IFdlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yJik7CisgICAgV2ViRE9N
VGVzdE5hbWVkQ29uc3RydWN0b3ImIG9wZXJhdG9yPShjb25zdCBXZWJET01UZXN0TmFtZWRDb25z
dHJ1Y3RvciYpOworICAgIHZpcnR1YWwgfldlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yKCk7CisK
KworICAgIFdlYkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9yKiBpbXBsKCkgY29uc3Q7CisKK3By
b3RlY3RlZDoKKyAgICBzdHJ1Y3QgV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2YXRlOwor
ICAgIFdlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZSogbV9pbXBsOworfTsKKworV2Vi
Q29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqIHRvV2ViQ29yZShjb25zdCBXZWJET01UZXN0TmFt
ZWRDb25zdHJ1Y3RvciYpOworV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IgdG9XZWJLaXQoV2Vi
Q29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFt
ZWRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjA0
MTcyOTc5MDFmOGY1OGRlNmU5OGRkNjJmM2NmM2M1ZWM2YzI5ZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3ROYW1lZENvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAgICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5j
bHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCisjaW5jbHVkZSAiVGVzdE5hbWVkQ29uc3Ry
dWN0b3IuaCIKKyNpbmNsdWRlICJXZWJLaXRET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiZ29iamVj
dC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRlc3RO
YW1lZENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRlc3ROYW1lZENv
bnN0cnVjdG9yUHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIKKyNpbmNsdWRl
ICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisgICAgCitXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvciog
a2l0KFdlYkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9yKiBvYmopCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwob2JqLCAwKTsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RD
YWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRET01UZXN0
TmFtZWRDb25zdHJ1Y3Rvcio+KHJldCk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0
RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IqPihET01PYmplY3RDYWNoZTo6cHV0KG9iaiwgV2ViS2l0
Ojp3cmFwVGVzdE5hbWVkQ29uc3RydWN0b3Iob2JqKSkpOworfQorICAgIAorfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0IC8vCisKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1
Y3Rvciwgd2Via2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yLCBXRUJLSVRfVFlQRV9ET01f
T0JKRUNUKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3Ry
dWN0b3IqIGNvcmUoV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IqIHJlcXVlc3QpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocmVxdWVzdCwgMCk7CisKKyAgICBXZWJDb3JlOjpUZXN0
TmFtZWRDb25zdHJ1Y3RvciogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RO
YW1lZENvbnN0cnVjdG9yKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3Qp
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAgcmV0dXJu
IGNvcmVPYmplY3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorZW51bSB7CisgICAgUFJP
UF8wLAorfTsKKworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0
b3JfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTU9iamVjdCogZG9t
X29iamVjdCA9IFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCk7CisgICAgCisgICAgaWYgKGRvbV9v
YmplY3QtPmNvcmVPYmplY3QpIHsKKyAgICAgICAgV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0
b3IqIGNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3Rv
ciAqPihkb21fb2JqZWN0LT5jb3JlT2JqZWN0KTsKKworICAgICAgICBXZWJLaXQ6OkRPTU9iamVj
dENhY2hlOjpmb3JnZXQoY29yZU9iamVjdCk7CisgICAgICAgIGNvcmVPYmplY3QtPmRlcmVmKCk7
CisKKyAgICAgICAgZG9tX29iamVjdC0+Y29yZU9iamVjdCA9IE5VTEw7CisgICAgfQorCisgICAg
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yX3BhcmVudF9j
bGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF9uYW1lZF9jb25zdHJ1Y3Rvcl9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wX2lkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgc3dpdGNoIChwcm9wX2lk
KSB7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yX2dldF9wcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfbmFt
ZWRfY29uc3RydWN0b3JfY29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQoreworCisgICAgaWYg
KEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9wYXJlbnRf
Y2xhc3MpLT5jb25zdHJ1Y3RlZCkKKyAgICAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90
ZXN0X25hbWVkX2NvbnN0cnVjdG9yX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKG9iamVjdCk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9jbGFz
c19pbml0KFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yQ2xhc3MqIHJlcXVlc3RDbGFzcykK
K3sKKyAgICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVl
c3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9u
YW1lZF9jb25zdHJ1Y3Rvcl9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9zZXRfcHJvcGVydHk7CisgICAg
Z29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3Ry
dWN0b3JfZ2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJr
aXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3JfY29uc3RydWN0ZWQ7CisKKworCit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9pbml0KFdlYktpdERP
TVRlc3ROYW1lZENvbnN0cnVjdG9yKiByZXF1ZXN0KQoreworfQorCituYW1lc3BhY2UgV2ViS2l0
IHsKK1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yKiB3cmFwVGVzdE5hbWVkQ29uc3RydWN0
b3IoV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqIGNvcmVPYmplY3QpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7CisKKyAgICAvKiBXZSBjYWxsIHJlZigp
IHJhdGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBz
dG9yZSBhIEMrKyBvYmplY3QKKyAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0
dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQorICAgICAqIG1hdGNoaW5nIGRl
cmVmKCkuCisgICAgICovCisgICAgY29yZU9iamVjdC0+cmVmKCk7CisKKyAgICByZXR1cm4gIFdF
QktJVF9ET01fVEVTVF9OQU1FRF9DT05TVFJVQ1RPUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVf
RE9NX1RFU1RfTkFNRURfQ09OU1RSVUNUT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKK30K
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3ROYW1lZENvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjBmOWMyNzhmMDA0OGMyNDkwNzY1N2Jh
MDdhNTEwMjBkYzUzNzBhZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmgK
QEAgLTAsMCArMSw1MSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFdlYktp
dERPTVRlc3ROYW1lZENvbnN0cnVjdG9yX2gKKyNkZWZpbmUgV2ViS2l0RE9NVGVzdE5hbWVkQ29u
c3RydWN0b3JfaAorCisjaW5jbHVkZSAid2Via2l0L3dlYmtpdGRvbWRlZmluZXMuaCIKKyNpbmNs
dWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+Cisj
aW5jbHVkZSAid2Via2l0L1dlYktpdERPTU9iamVjdC5oIgorCisKK0dfQkVHSU5fREVDTFMKKyNk
ZWZpbmUgV0VCS0lUX1RZUEVfRE9NX1RFU1RfTkFNRURfQ09OU1RSVUNUT1IgICAgICAgICAgICAo
d2Via2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yX2dldF90eXBlKCkpCisjZGVmaW5lIFdF
QktJVF9ET01fVEVTVF9OQU1FRF9DT05TVFJVQ1RPUihvYmopICAgICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9ET01fVEVTVF9OQU1FRF9DT05T
VFJVQ1RPUiwgV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IpKQorI2RlZmluZSBXRUJLSVRf
RE9NX1RFU1RfTkFNRURfQ09OU1RSVUNUT1JfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfTkFNRURfQ09OU1RSVUNU
T1IsIFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9E
T01fSVNfVEVTVF9OQU1FRF9DT05TVFJVQ1RPUihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9ET01fVEVTVF9OQU1FRF9DT05TVFJVQ1RP
UikpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9OQU1FRF9DT05TVFJVQ1RPUl9DTEFTUyhr
bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9ET01f
VEVTVF9OQU1FRF9DT05TVFJVQ1RPUikpCisjZGVmaW5lIFdFQktJVF9ET01fVEVTVF9OQU1FRF9D
T05TVFJVQ1RPUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9i
aiksICBXRUJLSVRfVFlQRV9ET01fVEVTVF9OQU1FRF9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVz
dE5hbWVkQ29uc3RydWN0b3JDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NVGVzdE5hbWVkQ29u
c3RydWN0b3IgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitz
dHJ1Y3QgX1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yQ2xhc3MgeworICAgIFdlYktpdERP
TU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtp
dF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9nZXRfdHlwZSAodm9pZCk7CisKK0dfRU5EX0RF
Q0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcl9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJp
dmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmI1ODUxNzFjMjBlOTZhOTAyODg3ZmM5NjhjOWU5NjU5ZjM5OTMy
M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGUuaApAQCAtMCww
ICsxLDM5IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgV0VCX0tJVF9ET01f
VEVTVF9OQU1FRF9DT05TVFJVQ1RPUl9QUklWQVRFX0gKKyNkZWZpbmUgV0VCX0tJVF9ET01fVEVT
VF9OQU1FRF9DT05TVFJVQ1RPUl9QUklWQVRFX0gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+
CisjaW5jbHVkZSA8d2Via2l0L1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgIlRlc3ROYW1l
ZENvbnN0cnVjdG9yLmgiCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICBXZWJLaXRET01UZXN0TmFt
ZWRDb25zdHJ1Y3RvciAqCisgICAgd3JhcFRlc3ROYW1lZENvbnN0cnVjdG9yKFdlYkNvcmU6OlRl
c3ROYW1lZENvbnN0cnVjdG9yICpjb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OlRlc3ROYW1l
ZENvbnN0cnVjdG9yICoKKyAgICBjb3JlKFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yICpy
ZXF1ZXN0KTsKKworICAgIFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yKgorICAgIGtpdChX
ZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3Rvciogbm9kZSk7CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLyogV0VCX0tJVF9ET01fVEVTVF9OQU1FRF9DT05TVFJVQ1RPUl9QUklW
QVRFX0ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
YzUwYzgwMzgxM2Q2NmQ2ZWJhZmQ3NzgyZDhmYjRkODQzNmIzY2I5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29u
c3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsMjEzIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmgi
CisKKyNpbmNsdWRlICJUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitB
U1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTVGVzdE5hbWVkQ29uc3RydWN0b3IpOworCisvKiBI
YXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLworI2lmIEVOQUJMRShKSVQpCisjZGVmaW5lIFRI
VU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpICwgZ2VuZXJhdG9yCisjZWxzZQorI2RlZmluZSBUSFVO
S19HRU5FUkFUT1IoZ2VuZXJhdG9yKQorI2VuZGlmCisjaWYgRU5BQkxFKERGR19KSVQpCisjZGVm
aW5lIElOVFJJTlNJQyhpbnRyaW5zaWMpICwgaW50cmluc2ljCisjZWxzZQorI2RlZmluZSBJTlRS
SU5TSUMoaW50cmluc2ljKQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBK
U1Rlc3ROYW1lZENvbnN0cnVjdG9yVGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAiY29uc3RydWN0
b3IiLCBEb250RW51bSB8IFJlYWRPbmx5LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlT
bG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvciksIChp
bnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSBJTlRSSU5TSUMoREZHOjpOb0ludHJpbnNpYykg
fSwKKyAgICB7IDAsIDAsIDAsIDAgVEhVTktfR0VORVJBVE9SKDApIElOVFJJTlNJQyhERkc6Ok5v
SW50cmluc2ljKSB9Cit9OworCisjdW5kZWYgVEhVTktfR0VORVJBVE9SCitzdGF0aWMgSlNDX0NP
TlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclRhYmxlID0geyAy
LCAxLCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yVGFibGVWYWx1ZXMsIDAgfTsKKy8qIEhhc2ggdGFi
bGUgZm9yIGNvbnN0cnVjdG9yICovCisjaWYgRU5BQkxFKEpJVCkKKyNkZWZpbmUgVEhVTktfR0VO
RVJBVE9SKGdlbmVyYXRvcikgLCBnZW5lcmF0b3IKKyNlbHNlCisjZGVmaW5lIFRIVU5LX0dFTkVS
QVRPUihnZW5lcmF0b3IpCisjZW5kaWYKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyNkZWZpbmUgSU5U
UklOU0lDKGludHJpbnNpYykgLCBpbnRyaW5zaWMKKyNlbHNlCisjZGVmaW5lIElOVFJJTlNJQyhp
bnRyaW5zaWMpCisjZW5kaWYKKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE5h
bWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvclRhYmxlVmFsdWVzW10gPQoreworICAgIHsgMCwgMCwg
MCwgMCBUSFVOS19HRU5FUkFUT1IoMCkgSU5UUklOU0lDKERGRzo6Tm9JbnRyaW5zaWMpIH0KK307
CisKKyN1bmRlZiBUSFVOS19HRU5FUkFUT1IKK3N0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhh
c2hUYWJsZSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3JUYWJsZSA9IHsgMSwgMCwg
SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsIDAgfTsKK2NvbnN0
IENsYXNzSW5mbyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsg
IlRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IiLCAmRE9NQ29uc3RydWN0b3JPYmplY3Q6
OnNfaW5mbywgJkpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvclRhYmxlLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvcikgfTsKKwor
SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9y
Q29uc3RydWN0b3IoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCisgICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9i
amVjdCkKK3sKK30KKwordm9pZCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmZp
bmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOwor
ICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0TmFtZWRDb25z
dHJ1Y3RvclByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpOworfQorCitib29sIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6
Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICByZXR1
cm4gZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvciwg
SlNET01XcmFwcGVyPihleGVjLCAmSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yVGFi
bGUsIHN0YXRpY19jYXN0PEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcio+KGNlbGwp
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JD
b25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yQ29uc3RydWN0b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgJkpTVGVzdE5hbWVkQ29u
c3RydWN0b3JDb25zdHJ1Y3RvclRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Ip
OworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE5hbWVkQ29uc3RydWN0
b3JDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0TmFtZWRDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKiBqc0NvbnN0
cnVjdG9yID0gc3RhdGljX2Nhc3Q8SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKj4o
ZXhlYy0+Y2FsbGVlKCkpOworICAgIFJlZlB0cjxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4gb2JqZWN0
ID0gVGVzdE5hbWVkQ29uc3RydWN0b3I6OmNyZWF0ZSgpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwg
b2JqZWN0LmdldCgpKSkpOworfQorCitDb25zdHJ1Y3RUeXBlIEpTVGVzdE5hbWVkQ29uc3RydWN0
b3JDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBj
b25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29u
c3RydWN0SlNUZXN0TmFtZWRDb25zdHJ1Y3RvcjsKKyAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhv
c3Q7Cit9CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLworI2lmIEVOQUJMRShKSVQp
CisjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpICwgZ2VuZXJhdG9yCisjZWxzZQor
I2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKQorI2VuZGlmCisjaWYgRU5BQkxFKERG
R19KSVQpCisjZGVmaW5lIElOVFJJTlNJQyhpbnRyaW5zaWMpICwgaW50cmluc2ljCisjZWxzZQor
I2RlZmluZSBJTlRSSU5TSUMoaW50cmluc2ljKQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBIYXNo
VGFibGVWYWx1ZSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9
Cit7CisgICAgeyAwLCAwLCAwLCAwIFRIVU5LX0dFTkVSQVRPUigwKSBJTlRSSU5TSUMoREZHOjpO
b0ludHJpbnNpYykgfQorfTsKKworI3VuZGVmIFRIVU5LX0dFTkVSQVRPUgorc3RhdGljIEpTQ19D
T05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGVU
YWJsZSA9IHsgMSwgMCwgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlVmFsdWVz
LCAwIH07Citjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6
c19pbmZvID0geyAiVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUiLCAmSlNDOjpKU05vbkZp
bmFsT2JqZWN0OjpzX2luZm8sICZKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlVGFibGUs
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSkg
fTsKKworSlNPYmplY3QqIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OnNlbGYoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVy
biBnZXRET01Qcm90b3R5cGU8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4oZXhlYywgZ2xvYmFsT2Jq
ZWN0KTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OnNfaW5m
byA9IHsgIlRlc3ROYW1lZENvbnN0cnVjdG9yIiwgJkpTRE9NV3JhcHBlcjo6c19pbmZvLCAmSlNU
ZXN0TmFtZWRDb25zdHJ1Y3RvclRhYmxlLCAwICwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yKSB9OworCitKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQYXNzUmVmUHRyPFRlc3ROYW1lZENvbnN0cnVjdG9yPiBpbXBsKQorICAgIDog
SlNET01XcmFwcGVyKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQorICAgICwgbV9pbXBsKGltcGwp
Cit7Cit9CisKK3ZvaWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEpOworICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Cit9CisKK0pTT2JqZWN0KiBK
U1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmpl
Y3QsIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVj
dFByb3RvdHlwZSgpKSk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Z2V0T3du
UHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvcio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
JnNfaW5mbyk7CisgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yLCBCYXNlPihleGVjLCAmSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclRhYmxlLCB0aGlzT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTVGVzdE5hbWVkQ29uc3RydWN0
b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQorewor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpcywgJnNfaW5mbyk7CisgICAgcmV0dXJu
IGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yLCBCYXNlPihl
eGVjLCAmSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IpOworfQorCitKU1ZhbHVlIGpzVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQor
eworICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3IqIGRvbU9iamVjdCA9IHN0YXRpY19jYXN0PEpT
VGVzdE5hbWVkQ29uc3RydWN0b3IqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIHJldHVybiBK
U1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RvcihleGVjLCBkb21PYmplY3QtPmds
b2JhbE9iamVjdCgpKTsKK30KKworSlNWYWx1ZSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdE5hbWVkQ29uc3RydWN0b3JD
b25zdHJ1Y3Rvcj4oZXhlYywgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxP
YmplY3QpKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzT2JzZXJ2YWJsZShKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yKiBqc1Rlc3ROYW1lZENvbnN0cnVjdG9yKQoreworICAgIGlmIChqc1Rlc3RO
YW1lZENvbnN0cnVjdG9yLT5oYXNDdXN0b21Qcm9wZXJ0aWVzKCkpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9y
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3RvcioganNUZXN0TmFtZWRDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTVGVz
dE5hbWVkQ29uc3RydWN0b3IqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOworICAgIGlmIChqc1Rl
c3ROYW1lZENvbnN0cnVjdG9yLT5pbXBsKCktPmhhc1BlbmRpbmdBY3Rpdml0eSgpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIWlzT2JzZXJ2YWJsZShqc1Rlc3ROYW1lZENvbnN0cnVj
dG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck93bmVy
OjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4
dCkKK3sKKyAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKiBqc1Rlc3ROYW1lZENvbnN0cnVjdG9y
ID0gc3RhdGljX2Nhc3Q8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcio+KGhhbmRsZS5nZXQoKS5hc0Nl
bGwoKSk7CisgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCA9IHN0YXRpY19jYXN0PERPTVdyYXBw
ZXJXb3JsZCo+KGNvbnRleHQpOworICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxkLCBqc1Rlc3ROYW1l
ZENvbnN0cnVjdG9yLT5pbXBsKCksIGpzVGVzdE5hbWVkQ29uc3RydWN0b3IpOworfQorCitKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVGVzdE5hbWVkQ29uc3RydWN0b3IqIGltcGwpCit7CisgICAgcmV0dXJuIHdy
YXA8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4oZXhlYywgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKK30K
KworVGVzdE5hbWVkQ29uc3RydWN0b3IqIHRvVGVzdE5hbWVkQ29uc3RydWN0b3IoSlNDOjpKU1Zh
bHVlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZS5pbmhlcml0cygmSlNUZXN0TmFtZWRDb25z
dHJ1Y3Rvcjo6c19pbmZvKSA/IHN0YXRpY19jYXN0PEpTVGVzdE5hbWVkQ29uc3RydWN0b3IqPihh
c09iamVjdCh2YWx1ZSkpLT5pbXBsKCkgOiAwOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29u
c3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OGNkMGI3M2FkOTEwNjE5MGM4MmU1N2E4YTM5MzY3NDgz
OGU2NDhkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuaApAQCAtMCwwICsxLDEzOCBAQAorLyoK
KyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JfaAor
I2RlZmluZSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgorI2luY2x1ZGUgIlRlc3ROYW1lZENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSA8cnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KKyNpbmNs
dWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEpTVGVzdE5hbWVkQ29uc3RydWN0b3IgOiBwdWJsaWMgSlNET01XcmFwcGVyIHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIEpTRE9NV3JhcHBlciBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxUZXN0TmFtZWRDb25zdHJ1Y3Rv
cj4gaW1wbCkKKyAgICB7CisgICAgICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3IqIHB0ciA9IG5l
dyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4oZ2xvYmFsT2JqZWN0
LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpTVGVzdE5hbWVkQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBn
bG9iYWxPYmplY3QsIGltcGwpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgdmlydHVhbCBib29sIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyBjb25z
dCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgVGVz
dE5hbWVkQ29uc3RydWN0b3IqIGltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0K
KworcHJpdmF0ZToKKyAgICBSZWZQdHI8VGVzdE5hbWVkQ29uc3RydWN0b3I+IG1faW1wbDsKK3By
b3RlY3RlZDoKKyAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFRlc3ROYW1lZENvbnN0cnVjdG9yPik7CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkpTR2xvYmFsRGF0YSYpOworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Cit9OworCitjbGFzcyBKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgeworICAgIHZpcnR1YWwg
Ym9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGZp
bmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOworfTsKKwor
aW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxk
KiwgVGVzdE5hbWVkQ29uc3RydWN0b3IqKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSlNU
ZXN0TmFtZWRDb25zdHJ1Y3Rvck93bmVyLCBqc1Rlc3ROYW1lZENvbnN0cnVjdG9yT3duZXIsICgp
KTsKKyAgICByZXR1cm4gJmpzVGVzdE5hbWVkQ29uc3RydWN0b3JPd25lcjsKK30KKworaW5saW5l
IHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXb3JsZCogd29ybGQsIFRlc3ROYW1lZENv
bnN0cnVjdG9yKikKK3sKKyAgICByZXR1cm4gd29ybGQ7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0TmFtZWRDb25zdHJ1Y3Rv
ciopOworVGVzdE5hbWVkQ29uc3RydWN0b3IqIHRvVGVzdE5hbWVkQ29uc3RydWN0b3IoSlNDOjpK
U1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSA6IHB1Ymxp
YyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05v
bkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTVGVzdE5hbWVk
Q29uc3RydWN0b3JQcm90b3R5cGUqIGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSog
cHRyID0gbmV3IChKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90
eXBlPihnbG9iYWxEYXRhLmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKGds
b2JhbERhdGEsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBz
dGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdE5h
bWVkQ29uc3RydWN0b3JQcm90b3R5cGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNO
b25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpIHsgfQorcHJvdGVjdGVkOgorICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzOworfTsKKworY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yIDogcHVi
bGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0TmFtZWRDb25z
dHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
Y3QqKTsKKworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsK
KyAgICBzdGF0aWMgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKiBjcmVhdGUoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFtZWRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgSlNUZXN0TmFtZWRDb25zdHJ1
Y3RvckNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5m
aW5pc2hDcmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOwor
ICAgIH0KKworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCos
IEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eVNs
b3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3Im
KTsKKyAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgfQorcHJvdGVjdGVkOgorICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1
Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKik7CisgICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRh
KEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Cit9OworCisvLyBBdHRyaWJ1dGVz
CisKK0pTQzo6SlNWYWx1ZSBqc1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3ROYW1lZENvbnN0
cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZWEyM2FkZGI3MzA1NWQwOTI5ZWMzNmU4MzE2Zjk5MTcwMjg5
ZjlhMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9PYmpDL0RPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSwzNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVs
IFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPFdlYkNvcmUv
RE9NT2JqZWN0Lmg+CisKKyNpZiBXRUJLSVRfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBXRUJLSVRf
VkVSU0lPTl9MQVRFU1QKKworQGludGVyZmFjZSBET01UZXN0TmFtZWRDb25zdHJ1Y3RvciA6IERP
TU9iamVjdAorQGVuZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3ROYW1lZENvbnN0cnVjdG9yLm1tIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE5hbWVkQ29uc3RydWN0
b3IubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOTYyY2U4OTQxYmMyNGNmZTk1MTAxYmMwZmQzZDMzMjA0ZjE3YTll
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9PYmpDL0RPTVRlc3ROYW1lZENvbnN0cnVjdG9yLm1tCkBAIC0wLDAgKzEsODcgQEAKKy8qCisg
KiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkRPTUlu
dGVybmFsLmgiCisKKyNpbXBvcnQgIkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmgiCisKKyNpbXBv
cnQgIkRPTUJsb2JJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NQ1NTUnVsZUludGVybmFsLmgiCisj
aW1wb3J0ICJET01DU1NWYWx1ZUludGVybmFsLmgiCisjaW1wb3J0ICJET01FdmVudEludGVybmFs
LmgiCisjaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTVN0eWxlU2hlZXRJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NVGVzdE5hbWVkQ29uc3RydWN0b3JJbnRlcm5hbC5oIgor
I2ltcG9ydCAiRXhjZXB0aW9uSGFuZGxlcnMuaCIKKyNpbXBvcnQgIkpTTWFpblRocmVhZEV4ZWNT
dGF0ZS5oIgorI2ltcG9ydCAiVGVzdE5hbWVkQ29uc3RydWN0b3IuaCIKKyNpbXBvcnQgIlRocmVh
ZENoZWNrLmgiCisjaW1wb3J0ICJXZWJDb3JlT2JqQ0V4dHJhcy5oIgorI2ltcG9ydCAiV2ViU2Ny
aXB0T2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8d3RmL0dldFB0ci5oPgorCisjZGVmaW5lIElN
UEwgcmVpbnRlcnByZXRfY2FzdDxXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3Rvcio+KF9pbnRl
cm5hbCkKKworQGltcGxlbWVudGF0aW9uIERPTVRlc3ROYW1lZENvbnN0cnVjdG9yCisKKy0gKHZv
aWQpZGVhbGxvYworeworICAgIGlmIChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFp
blRocmVhZChbRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IgY2xhc3NdLCBzZWxmKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKF9pbnRlcm5hbCkKKyAgICAgICAgSU1QTC0+ZGVyZWYoKTsKKyAg
ICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpZmluYWxpemUKK3sKKyAgICBpZiAoX2lu
dGVybmFsKQorICAgICAgICBJTVBMLT5kZXJlZigpOworICAgIFtzdXBlciBmaW5hbGl6ZV07Cit9
CisKK0BlbmQKKworV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqIGNvcmUoRE9NVGVzdE5h
bWVkQ29uc3RydWN0b3IgKndyYXBwZXIpCit7CisgICAgcmV0dXJuIHdyYXBwZXIgPyByZWludGVy
cHJldF9jYXN0PFdlYkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9yKj4od3JhcHBlci0+X2ludGVy
bmFsKSA6IDA7Cit9CisKK0RPTVRlc3ROYW1lZENvbnN0cnVjdG9yICpraXQoV2ViQ29yZTo6VGVz
dE5hbWVkQ29uc3RydWN0b3IqIHZhbHVlKQoreworICAgIHsgRE9NX0FTU0VSVF9NQUlOX1RIUkVB
RCgpOyBXZWJDb3JlVGhyZWFkVmlvbGF0aW9uQ2hlY2tSb3VuZE9uZSgpOyB9OworICAgIGlmICgh
dmFsdWUpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgaWYgKERPTVRlc3ROYW1lZENvbnN0cnVj
dG9yICp3cmFwcGVyID0gZ2V0RE9NV3JhcHBlcih2YWx1ZSkpCisgICAgICAgIHJldHVybiBbW3dy
YXBwZXIgcmV0YWluXSBhdXRvcmVsZWFzZV07CisgICAgRE9NVGVzdE5hbWVkQ29uc3RydWN0b3Ig
KndyYXBwZXIgPSBbW0RPTVRlc3ROYW1lZENvbnN0cnVjdG9yIGFsbG9jXSBfaW5pdF07CisgICAg
d3JhcHBlci0+X2ludGVybmFsID0gcmVpbnRlcnByZXRfY2FzdDxET01PYmplY3RJbnRlcm5hbCo+
KHZhbHVlKTsKKyAgICB2YWx1ZS0+cmVmKCk7CisgICAgYWRkRE9NV3JhcHBlcih3cmFwcGVyLCB2
YWx1ZSk7CisgICAgcmV0dXJuIFt3cmFwcGVyIGF1dG9yZWxlYXNlXTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3ROYW1lZENv
bnN0cnVjdG9ySW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9PYmpDL0RPTVRlc3ROYW1lZENvbnN0cnVjdG9ySW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YjQ5
MDRiMjc1ZTg5N2FkMmZjODQ5ZGI3MGQ5YThiYThkMjgzNWZiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE5hbWVkQ29u
c3RydWN0b3JJbnRlcm5hbC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW1wb3J0IDxXZWJDb3JlL0RPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmg+CisKKyNp
ZiBXRUJLSVRfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBXRUJLSVRfVkVSU0lPTl9MQVRFU1QKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIFRlc3ROYW1lZENvbnN0cnVjdG9yOworfQor
CitXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3RvciogY29yZShET01UZXN0TmFtZWRDb25zdHJ1
Y3RvciAqKTsKK0RPTVRlc3ROYW1lZENvbnN0cnVjdG9yICpraXQoV2ViQ29yZTo6VGVzdE5hbWVk
Q29uc3RydWN0b3IqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkQ29uc3RydWN0b3IuaWRsIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZENvbnN0cnVjdG9yLmlkbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hYTI0NjFhZmQ1YTg4ZTZjNzFlZmI2OWI0OGY2ZDcxNGZiODUyOGFjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZENv
bnN0cnVjdG9yLmlkbApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtc3RyQXJnLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRXN0ckFyZywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIFRoaXMgSURMIGZp
bGUgaXMgZm9yIHRlc3RpbmcgdGhlIGJpbmRpbmdzIGNvZGUgZ2VuZXJhdG9yIGFuZCBmb3IgdHJh
Y2tpbmcKKy8vIGNoYW5nZXMgaW4gaXRzIG91cHV0LgorbW9kdWxlIHRlc3QgeworICAgIGludGVy
ZmFjZSBbCisgICAgICAgIEFjdGl2ZURPTU9iamVjdCwKKyAgICAgICAgQ2FuQmVDb25zdHJ1Y3Rl
ZCwKKyAgICAgICAgTmFtZWRDb25zdHJ1Y3RvcihpbiBET01TdHJpbmcgc3RyMSwgaW4gW09wdGlv
bmFsPUNhbGxXaXRoRGVmYXVsdFZhbHVlXSBET01TdHJpbmcgc3RyMiwgaW4gW09wdGlvbmFsPUNh
bGxXaXRoTnVsbFZhbHVlXSBET01TdHJpbmcgc3RyMyksCisgICAgICAgIENvbnN0cnVjdG9yUmFp
c2VzRXhjZXB0aW9uCisgICAgXSBUZXN0TmFtZWRDb25zdHJ1Y3RvciB7CisgICAgfTsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJ
bnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RJbnRlcmZhY2UuaAppbmRleCA0Y2I1MDE4NjUyZDIxNjAzNGExNDg3ZWEzZmQ3MjMxNmFmODgz
MGNlLi5lNWI1YjlhYjg1ZDhjNDNmNDJkYzYwMGRhYjk2MjE5ODA1NDc3ZTBkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdElu
dGVyZmFjZS5oCkBAIC0yNiwxNiArMjYsMTYgQEAKICNpbmNsdWRlICJUZXN0SW50ZXJmYWNlLmgi
CiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgi
Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHY4Lmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVjhUZXN0SW50ZXJmYWNlIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNEZXBlbmRlbnRMaWZldGltZSA9IHRydWU7Ci0gICAg
c3RhdGljIGJvb2wgSGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKTsKKyAg
ICBzdGF0aWMgYm9vbCBIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwogICAgIHN0
YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0UmF3VGVtcGxhdGUo
KTsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFRl
bXBsYXRlKCk7CiAgICAgc3RhdGljIFRlc3RJbnRlcmZhY2UqIHRvTmF0aXZlKHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gb2JqZWN0KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IHZvaWQgZGVyZWZPYmplY3Qodm9pZCopOwogICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5m
bzsKICAgICBzdGF0aWMgQWN0aXZlRE9NT2JqZWN0KiB0b0FjdGl2ZURPTU9iamVjdCh2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+KTsKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnN0
cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CisgICAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmKTsKICAgICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsRmllbGRDb3VudCA9IHY4RGVmYXVs
dFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAwOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGV4aXN0aW5nV3JhcHBlcihUZXN0SW50ZXJmYWNlKik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCmluZGV4IGVlMGE5NjBlZTIwYTVkYjY1Yjc4
YTY3MGM2YzMzOThkMTQ3MjM4MDkuLjFlNGVmNDFjNDM0NDg4OTJiMDAyMjRmYmExMGFhMTJhYjg5
NGNjOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaApAQCAt
MjQsMTYgKzI0LDE2IEBACiAjaW5jbHVkZSAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCIK
ICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJXcmFwcGVyVHlwZUluZm8uaCIK
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8djguaD4KICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNEZXBlbmRlbnRMaWZldGltZSA9
IGZhbHNlOwotICAgIHN0YXRpYyBib29sIEhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB2YWx1ZSk7CisgICAgc3RhdGljIGJvb2wgSGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFs
dWU+KTsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdl
dFJhd1RlbXBsYXRlKCk7CiAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiBHZXRUZW1wbGF0ZSgpOwogICAgIHN0YXRpYyBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lciogdG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25z
dHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmJhZDg0NTRlMGU2OTA3MGY1NzRl
MDdjYTZkYzllOTJjY2Y5MDVhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcApAQCAtMCww
ICsxLDEyNCBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBC
b3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJWOFRlc3ROYW1lZENvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJSdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhCaW5k
aW5nU3RhdGUuaCIKKyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJWOElzb2xh
dGVkQ29udGV4dC5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvVW51c2Vk
UGFyYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXcmFwcGVyVHlwZUluZm8gVjhUZXN0
TmFtZWRDb25zdHJ1Y3Rvcjo6aW5mbyA9IHsgVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0VGVt
cGxhdGUsIFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OmRlcmVmT2JqZWN0LCBWOFRlc3ROYW1lZENv
bnN0cnVjdG9yOjp0b0FjdGl2ZURPTU9iamVjdCwgMCB9OworCituYW1lc3BhY2UgVGVzdE5hbWVk
Q29uc3RydWN0b3JJbnRlcm5hbCB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIFY4X1VT
RShUKSB7IH0KKworfSAvLyBuYW1lc3BhY2UgVGVzdE5hbWVkQ29uc3RydWN0b3JJbnRlcm5hbAor
Cit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0
b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygi
RE9NLlRlc3ROYW1lZENvbnN0cnVjdG9yLkNvbnRydWN0b3IiKTsKKyAgICByZXR1cm4gVjhQcm94
eTo6Y29uc3RydWN0RE9NT2JqZWN0PFRlc3ROYW1lZENvbnN0cnVjdG9yPihhcmdzLCAmaW5mbyk7
Cit9CisKK3N0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29uZmln
dXJlVjhUZXN0TmFtZWRDb25zdHJ1Y3RvclRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBkZXNjKQoreworICAgIGRlc2MtPlJlYWRPbmx5UHJvdG90eXBlKCk7CisK
KyAgICB2ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4gZGVmYXVsdFNpZ25hdHVyZTsKKyAgICBkZWZh
dWx0U2lnbmF0dXJlID0gY29uZmlndXJlVGVtcGxhdGUoZGVzYywgIlRlc3ROYW1lZENvbnN0cnVj
dG9yIiwgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KCksIFY4VGVzdE5hbWVk
Q29uc3RydWN0b3I6OmludGVybmFsRmllbGRDb3VudCwKKyAgICAgICAgMCwgMCwKKyAgICAgICAg
MCwgMCk7CisgICAgVU5VU0VEX1BBUkFNKGRlZmF1bHRTaWduYXR1cmUpOyAvLyBJbiBzb21lIGNh
c2VzLCBpdCB3aWxsIG5vdCBiZSB1c2VkLgorICAgIGRlc2MtPlNldENhbGxIYW5kbGVyKFY4VGVz
dE5hbWVkQ29uc3RydWN0b3I6OmNvbnN0cnVjdG9yQ2FsbGJhY2spOworICAgIAorCisgICAgLy8g
Q3VzdG9tIHRvU3RyaW5nIHRlbXBsYXRlCisgICAgZGVzYy0+U2V0KGdldFRvU3RyaW5nTmFtZSgp
LCBnZXRUb1N0cmluZ1RlbXBsYXRlKCkpOworICAgIHJldHVybiBkZXNjOworfQorCit2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0
UmF3VGVtcGxhdGUoKQoreworICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhC
aW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKKyAgICBWOEJpbmRpbmdQZXJJc29sYXRl
RGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFw
KCkuZmluZCgmaW5mbyk7CisgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgp
LmVuZCgpKQorICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisKKyAgICB2ODo6SGFuZGxl
U2NvcGUgaGFuZGxlU2NvcGU7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKKyAgICBkYXRhLT5yYXdUZW1wbGF0ZU1h
cCgpLmFkZCgmaW5mbywgdGVtcGwpOworICAgIHJldHVybiB0ZW1wbDsKK30KKwordjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OkdldFRl
bXBsYXRlKCkKK3sKKyAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGlu
Z1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CisgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6
OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQo
JmluZm8pOworICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworCisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRs
ZVNjb3BlOworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9
CisgICAgICAgIENvbmZpZ3VyZVY4VGVzdE5hbWVkQ29uc3RydWN0b3JUZW1wbGF0ZShHZXRSYXdU
ZW1wbGF0ZSgpKTsKKyAgICBkYXRhLT50ZW1wbGF0ZU1hcCgpLmFkZCgmaW5mbywgdGVtcGwpOwor
ICAgIHJldHVybiB0ZW1wbDsKK30KKworYm9vbCBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjpIYXNJ
bnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCit7CisgICAgcmV0dXJuIEdldFJh
d1RlbXBsYXRlKCktPkhhc0luc3RhbmNlKHZhbHVlKTsKK30KKworQWN0aXZlRE9NT2JqZWN0KiBW
OFRlc3ROYW1lZENvbnN0cnVjdG9yOjp0b0FjdGl2ZURPTU9iamVjdCh2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IG9iamVjdCkKK3sKKyAgICByZXR1cm4gdG9OYXRpdmUob2JqZWN0KTsKK30gICAgICAK
Kwordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjp3cmFwU2xv
dyhUZXN0TmFtZWRDb25zdHJ1Y3RvciogaW1wbCkKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHdyYXBwZXI7CisgICAgVjhQcm94eSogcHJveHkgPSAwOworICAgIHdyYXBwZXIgPSBWOERP
TVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QocHJveHksICZpbmZvLCBpbXBsKTsKKyAgICBp
ZiAod3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOworCisgICAgaW1w
bC0+cmVmKCk7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlckhhbmRsZSA9
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcod3JhcHBlcik7CisKKyAgICBpZiAoIWhh
c0RlcGVuZGVudExpZmV0aW1lKQorICAgICAgICB3cmFwcGVySGFuZGxlLk1hcmtJbmRlcGVuZGVu
dCgpOworICAgIGdldEFjdGl2ZURPTU9iamVjdE1hcCgpLnNldChpbXBsLCB3cmFwcGVySGFuZGxl
KTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwordm9pZCBWOFRlc3ROYW1lZENvbnN0cnVjdG9y
OjpkZXJlZk9iamVjdCh2b2lkKiBvYmplY3QpCit7CisgICAgc3RhdGljX2Nhc3Q8VGVzdE5hbWVk
Q29uc3RydWN0b3IqPihvYmplY3QpLT5kZXJlZigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ODUwNTk3YzNk
ZTY1YzE1MTI4YzdkNDcxYmUxZWE5MDBiNTU3MWMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3Iu
aApAQCAtMCwwICsxLDg2IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMw
LAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKi8KKworI2lmbmRlZiBWOFRlc3RO
YW1lZENvbnN0cnVjdG9yX2gKKyNkZWZpbmUgVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcl9oCisKKyNp
bmNsdWRlICJUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5o
IgorI2luY2x1ZGUgIldyYXBwZXJUeXBlSW5mby5oIgorI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29u
c3RydWN0b3IgeworcHVibGljOgorICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gR2V0VGVtcGxhdGUoKTsKKyAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGlu
Zm87Cit9OworCitjbGFzcyBWOFRlc3ROYW1lZENvbnN0cnVjdG9yIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNEZXBlbmRlbnRMaWZldGltZSA9IHRydWU7CisgICAgc3RhdGlj
IGJvb2wgSGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKKyAgICBzdGF0aWMgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFJhd1RlbXBsYXRlKCk7CisgICAg
c3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0ZSgp
OworICAgIHN0YXRpYyBUZXN0TmFtZWRDb25zdHJ1Y3RvciogdG9OYXRpdmUodjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxUZXN0TmFtZWRDb25zdHJ1Y3Rvcio+KG9iamVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZp
ZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4KSk7CisgICAgfQorICAgIGlubGluZSBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3ROYW1lZENvbnN0cnVjdG9yKik7CisgICAg
c3RhdGljIHZvaWQgZGVyZWZPYmplY3Qodm9pZCopOworICAgIHN0YXRpYyBXcmFwcGVyVHlwZUlu
Zm8gaW5mbzsKKyAgICBzdGF0aWMgQWN0aXZlRE9NT2JqZWN0KiB0b0FjdGl2ZURPTU9iamVjdCh2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYpOworICAgIHN0YXRpYyBj
b25zdCBpbnQgaW50ZXJuYWxGaWVsZENvdW50ID0gdjhEZWZhdWx0V3JhcHBlckludGVybmFsRmll
bGRDb3VudCArIDA7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZXhpc3RpbmdX
cmFwcGVyKFRlc3ROYW1lZENvbnN0cnVjdG9yKik7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNsb3coVGVzdE5hbWVkQ29uc3RydWN0b3IqKTsKK307
CisKK0FMV0FZU19JTkxJTkUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3ROYW1lZENvbnN0
cnVjdG9yOjpleGlzdGluZ1dyYXBwZXIoVGVzdE5hbWVkQ29uc3RydWN0b3IqIGltcGwpCit7Cisg
ICAgcmV0dXJuIGdldEFjdGl2ZURPTU9iamVjdE1hcCgpLmdldChpbXBsKTsKK30KKwordjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjp3cmFwKFRlc3ROYW1lZENv
bnN0cnVjdG9yKiBpbXBsKQoreworICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBw
ZXIgPSBleGlzdGluZ1dyYXBwZXIoaW1wbCk7CisgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICByZXR1cm4gVjhUZXN0TmFtZWRD
b25zdHJ1Y3Rvcjo6d3JhcFNsb3coaW1wbCk7Cit9CisKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdG9WOChUZXN0TmFtZWRDb25zdHJ1Y3RvciogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwp
CisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworICAgIHJldHVybiBWOFRlc3ROYW1lZENvbnN0
cnVjdG9yOjp3cmFwKGltcGwpOworfQoraW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4
KFBhc3NSZWZQdHI8IFRlc3ROYW1lZENvbnN0cnVjdG9yID4gaW1wbCkKK3sKKyAgICByZXR1cm4g
dG9WOChpbXBsLmdldCgpKTsKK30KK30KKworI2VuZGlmIC8vIFY4VGVzdE5hbWVkQ29uc3RydWN0
b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE9iai5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdE9iai5oCmluZGV4IDM0YWE0NzY5NzJjNmVhY2Y2ZDBhOWM5NjRjYWIwNWUzZDE2MDE0MTQu
LjIyNGIxZDJlOTZkNDAwYzQ0ZjAwNTBmYjEyOGY5MjQyNTM3MmVlNDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmgKQEAgLTI0
LDE2ICsyNCwxNiBAQAogI2luY2x1ZGUgIlRlc3RPYmouaCIKICNpbmNsdWRlICJWOERPTVdyYXBw
ZXIuaCIKICNpbmNsdWRlICJXcmFwcGVyVHlwZUluZm8uaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBWOFRlc3RPYmogewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0Rl
cGVuZGVudExpZmV0aW1lID0gZmFsc2U7Ci0gICAgc3RhdGljIGJvb2wgSGFzSW5zdGFuY2Uodjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKTsKKyAgICBzdGF0aWMgYm9vbCBIYXNJbnN0YW5jZSh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwogICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gR2V0UmF3VGVtcGxhdGUoKTsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFRlbXBsYXRlKCk7CiAgICAgc3RhdGljIFRlc3RP
YmoqIHRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQpAQCAtNDUsNyArNDUs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOwogICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3VzdG9tTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYpOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3VzdG9tTWV0aG9k
V2l0aEFyZ3NDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJik7Ci0gICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MpOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uc3RydWN0b3JDYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJik7CiAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBjdXN0b21BdHRyQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pOwogICAgIHN0YXRpYyB2b2lkIGN1c3RvbUF0
dHJBY2Nlc3NvclNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pOwogICAgIHN0YXRp
YyBjb25zdCBpbnQgaW50ZXJuYWxGaWVsZENvdW50ID0gdjhEZWZhdWx0V3JhcHBlckludGVybmFs
RmllbGRDb3VudCArIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLmgKaW5kZXggYThlYzNjZTg4MGU3MThkNjNhYzE2ZWUwODc2YzUzMGY5
Njc2ZGRkNy4uOTQ5NjhlN2U2MzY1NzQyZjdjNzkxN2ZmMGFkMjcyODI0NTlmYjg1YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaApA
QCAtMjYsMTYgKzI2LDE2IEBACiAjaW5jbHVkZSAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIldyYXBwZXJU
eXBlSW5mby5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx2
OC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFY4VGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
RGVwZW5kZW50TGlmZXRpbWUgPSBmYWxzZTsKLSAgICBzdGF0aWMgYm9vbCBIYXNJbnN0YW5jZSh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpOworICAgIHN0YXRpYyBib29sIEhhc0luc3RhbmNl
KHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CiAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBHZXRSYXdUZW1wbGF0ZSgpOwogICAgIHN0YXRpYyB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0VGVtcGxhdGUoKTsKICAgICBzdGF0aWMgVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogdG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBvYmplY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAppbmRleCAzYTNlN2E1NTUwODA4ZWExZjViMjc2
MGY0NTQ1MDYxMDY1YjQxMzdiLi44Yjg2NzY3ZDdkMWE2N2JkM2ZkMjVjN2RjNzQ1OTM1NmE5Y2Jl
ZTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01X
aW5kb3dDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OERPTVdpbmRvd0N1c3RvbS5jcHAKQEAgLTU2LDEwICs1Niw4IEBACiAjaW5jbHVkZSAiVjhFdmVu
dExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhHQ0ZvckNvbnRleHREaXNwb3NlLmgiCiAjaW5jbHVk
ZSAiVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaCIKLSNpbmNsdWRlICJWOEhUTUxBdWRpb0VsZW1lbnRD
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlY4SFRNTENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJW
OEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIlY4SFRNTE9wdGlvbkVs
ZW1lbnRDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlY4TWVzc2FnZVBvcnRDdXN0b20uaCIKICNp
bmNsdWRlICJWOE5vZGUuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCkBAIC0yMjcsMjggKzIyNSwx
MiBAQCB2b2lkIFY4RE9NV2luZG93OjpvcGVuZXJBY2Nlc3NvclNldHRlcih2ODo6TG9jYWw8djg6
OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OgogICAgIGluZm8uVGhpcygpLT5TZXQobmFtZSwg
dmFsdWUpOwogfQogCi0jaWYgRU5BQkxFKFZJREVPKQotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
VjhET01XaW5kb3c6OkF1ZGlvQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgRE9NV2luZG93KiB3aW5k
b3cgPSBWOERPTVdpbmRvdzo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIFY4
RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IoJlY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9y
OjppbmZvLCB3aW5kb3cpOwotfQotCi0jZW5kaWYKLQogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
RE9NV2luZG93OjpJbWFnZUFjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIERPTVdpbmRvdyogd2luZG93
ID0gVjhET01XaW5kb3c6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwogICAgIHJldHVybiBWOERP
TVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKCZWOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvcjo6
aW5mbywgd2luZG93KTsKIH0KIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV2luZG93OjpP
cHRpb25BY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBET01XaW5kb3cqIHdpbmRvdyA9IFY4RE9NV2lu
ZG93Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gVjhET01XcmFwcGVyOjpn
ZXRDb25zdHJ1Y3RvcigmVjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yOjppbmZvLCB3aW5k
b3cpOwotfQotCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XaW5kb3c6OmFkZEV2ZW50TGlz
dGVuZXJDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFU
UygiRE9NLkRPTVdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCkiKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVt
ZW50Q29uc3RydWN0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTYzNDgw
NWI1MTMyZmY4NGU2OWZmNWIyMGUyYmRhNmZmMjQ2NjJhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
MDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShWSURFTykKLQotI2lu
Y2x1ZGUgIlY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmgiCi0KLSNpbmNsdWRlICJIVE1M
QXVkaW9FbGVtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5o
IgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIlY4QmluZGluZy5oIgotI2luY2x1
ZGUgIlY4RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxBdWRpb0VsZW1lbnQuaCIKLSNpbmNs
dWRlICJWOFByb3h5LmgiCi0KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotV3JhcHBlclR5cGVJbmZvIFY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9y
OjppbmZvID0geyBWOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUsIFY4
SFRNTEF1ZGlvRWxlbWVudDo6ZGVyZWZPYmplY3QsIFY4SFRNTEF1ZGlvRWxlbWVudDo6dG9BY3Rp
dmVET01PYmplY3QsIDAgfTsKLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OEhUTUxB
dWRpb0VsZW1lbnRDb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
Ci17Ci0gICAgSU5DX1NUQVRTKCJET00uSFRNTEF1ZGlvRWxlbWVudC5Db250cnVjdG9yIik7Ci0K
LSAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlv
bi4iLCBWOFByb3h5OjpUeXBlRXJyb3IpOwotCi0gICAgaWYgKENvbnN0cnVjdG9yTW9kZTo6Y3Vy
cmVudCgpID09IENvbnN0cnVjdG9yTW9kZTo6V3JhcEV4aXN0aW5nT2JqZWN0KQotICAgICAgICBy
ZXR1cm4gYXJncy5Ib2xkZXIoKTsKLQotICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6OnJldHJp
ZXZlRnJhbWVGb3JDdXJyZW50Q29udGV4dCgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKCJBdWRpbyBjb25zdHJ1Y3RvciBhc3NvY2lhdGVkIGZyYW1lIGlzIHVu
YXZhaWxhYmxlIiwgVjhQcm94eTo6UmVmZXJlbmNlRXJyb3IpOwotCi0gICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoIkF1ZGlvIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQg
aXMgdW5hdmFpbGFibGUiLCBWOFByb3h5OjpSZWZlcmVuY2VFcnJvcik7Ci0KLSAgICAvLyBNYWtl
IHN1cmUgdGhlIGRvY3VtZW50IGlzIGFkZGVkIHRvIHRoZSBET00gTm9kZSBtYXAuIE90aGVyd2lz
ZSwgdGhlIEhUTUxBdWRpb0VsZW1lbnQgaW5zdGFuY2UKLSAgICAvLyBtYXkgZW5kIHVwIGJlaW5n
IHRoZSBvbmx5IG5vZGUgaW4gdGhlIG1hcCBhbmQgZ2V0IGdhcmJhZ2UtY29sbGVjdGVkIHByZW1h
dHVyZWx5LgotICAgIHRvVjgoZG9jdW1lbnQpOwotCi0gICAgU3RyaW5nIHNyYzsKLSAgICBpZiAo
YXJncy5MZW5ndGgoKSA+IDApCi0gICAgICAgIHNyYyA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBd
KTsKLSAgICBSZWZQdHI8SFRNTEF1ZGlvRWxlbWVudD4gYXVkaW8gPSBIVE1MQXVkaW9FbGVtZW50
OjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKGRvY3VtZW50LCBzcmMpOwotCi0gICAgVjhET01XcmFw
cGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksICZWOEhUTUxBdWRpb0VsZW1lbnRDb25z
dHJ1Y3Rvcjo6aW5mbywgYXVkaW8uZ2V0KCkpOwotICAgIGF1ZGlvLT5yZWYoKTsKLSAgICBWOERP
TVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckFjdGl2ZURPTU9iamVjdChhdWRpby5nZXQoKSwgdjg6
OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhhcmdzLkhvbGRlcigpKSk7Ci0gICAgcmV0dXJu
IGFyZ3MuSG9sZGVyKCk7Ci19Ci0KLXY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBWOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUoKQotewotICAgIHN0
YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY2FjaGVkVGVtcGxhdGU7
Ci0gICAgaWYgKCFjYWNoZWRUZW1wbGF0ZS5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBjYWNo
ZWRUZW1wbGF0ZTsKLQotICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICB2ODo6TG9jYWw8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHJlc3VsdCA9IHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXco
djhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3JDYWxsYmFjayk7Ci0KLSAgICB2ODo6TG9jYWw8
djg6Ok9iamVjdFRlbXBsYXRlPiBpbnN0YW5jZSA9IHJlc3VsdC0+SW5zdGFuY2VUZW1wbGF0ZSgp
OwotICAgIGluc3RhbmNlLT5TZXRJbnRlcm5hbEZpZWxkQ291bnQoVjhIVE1MQXVkaW9FbGVtZW50
OjppbnRlcm5hbEZpZWxkQ291bnQpOwotICAgIHJlc3VsdC0+U2V0Q2xhc3NOYW1lKHY4OjpTdHJp
bmc6Ok5ldygiSFRNTEF1ZGlvRWxlbWVudCIpKTsKLSAgICByZXN1bHQtPkluaGVyaXQoVjhIVE1M
QXVkaW9FbGVtZW50OjpHZXRUZW1wbGF0ZSgpKTsKLQotICAgIGNhY2hlZFRlbXBsYXRlID0gdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcocmVzdWx0KTsKLSAgICByZXR1
cm4gY2FjaGVkVGVtcGxhdGU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShWSURFTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMDM5N2EwYzY3ZGY5ZWEyMzhiNGNmNWNjY2E2MGE2
ZmM2ODVlYmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0
cnVjdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBWOEhUTUxBdWRp
b0VsZW1lbnRDb25zdHJ1Y3Rvcl9oCi0jZGVmaW5lIFY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVj
dG9yX2gKLQotI2lmIEVOQUJMRShWSURFTykKLQotI2luY2x1ZGUgIldyYXBwZXJUeXBlSW5mby5o
IgotCi0jaW5jbHVkZSA8djguaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBWOEhU
TUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3RvciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0ZSgpOwotICAgIHN0YXRpYyBX
cmFwcGVyVHlwZUluZm8gaW5mbzsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykK
LQotI2VuZGlmIC8vIFY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25FbGVtZW50Q29u
c3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9w
dGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDVjNzFhYjZiMmE0NDJiMGU3ZWQzMzk2Y2Y2Mzg5NmVlMWMzMmM3YTYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJWOEhUTUxP
cHRpb25FbGVtZW50Q29uc3RydWN0b3IuaCIKLQotI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50
LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIlRleHQuaCIKLSNpbmNsdWRlICJWOEJpbmRpbmcuaCIK
LSNpbmNsdWRlICJWOEhUTUxPcHRpb25FbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhQcm94eS5oIgot
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdyYXBw
ZXJUeXBlSW5mbyBWOEhUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3I6OmluZm8gPSB7IFY4SFRN
TE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUsIDAsIDAsIDAgfTsKLQotc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OEhUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3JD
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIElOQ19TVEFUUygiRE9N
LkhUTUxPcHRpb25FbGVtZW50LkNvbnRydWN0b3IiKTsKLQotICAgIGlmICghYXJncy5Jc0NvbnN0
cnVjdENhbGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkRPTSBvYmplY3QgY29uc3Ry
dWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIsIFY4UHJveHk6OlR5cGVFcnJv
cik7Ci0KLSAgICBpZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50KCkgPT0gQ29uc3RydWN0b3JN
b2RlOjpXcmFwRXhpc3RpbmdPYmplY3QpCi0gICAgICAgIHJldHVybiBhcmdzLkhvbGRlcigpOwot
Ci0gICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckN1cnJlbnRDb250
ZXh0KCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk9wdGlv
biBjb25zdHJ1Y3RvciBhc3NvY2lhdGVkIGZyYW1lIGlzIHVuYXZhaWxhYmxlIiwgVjhQcm94eTo6
UmVmZXJlbmNlRXJyb3IpOwotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3Vt
ZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk9w
dGlvbiBjb25zdHJ1Y3RvciBhc3NvY2lhdGVkIGRvY3VtZW50IGlzIHVuYXZhaWxhYmxlIiwgVjhQ
cm94eTo6UmVmZXJlbmNlRXJyb3IpOwotCi0gICAgU3RyaW5nIGRhdGE7Ci0gICAgU3RyaW5nIHZh
bHVlOwotICAgIGJvb2wgZGVmYXVsdFNlbGVjdGVkID0gZmFsc2U7Ci0gICAgYm9vbCBzZWxlY3Rl
ZCA9IGZhbHNlOwotICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMCAmJiAhYXJnc1swXS0+SXNVbmRl
ZmluZWQoKSkKLSAgICAgICAgZGF0YSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKLSAgICBp
ZiAoYXJncy5MZW5ndGgoKSA+IDEgJiYgIWFyZ3NbMV0tPklzVW5kZWZpbmVkKCkpCi0gICAgICAg
IHZhbHVlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMV0pOwotICAgIGlmIChhcmdzLkxlbmd0aCgp
ID4gMikKLSAgICAgICAgZGVmYXVsdFNlbGVjdGVkID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7
Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAzKQotICAgICAgICBzZWxlY3RlZCA9IGFyZ3NbM10t
PkJvb2xlYW5WYWx1ZSgpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRy
PEhUTUxPcHRpb25FbGVtZW50PiBvcHRpb24gPSBIVE1MT3B0aW9uRWxlbWVudDo6Y3JlYXRlRm9y
SlNDb25zdHJ1Y3Rvcihkb2N1bWVudCwgZGF0YSwgdmFsdWUsIGRlZmF1bHRTZWxlY3RlZCwgc2Vs
ZWN0ZWQsIGVjKTsKLQotICAgIGlmIChlYykKLSAgICAgICAgdGhyb3dFcnJvcihlYyk7Ci0KLSAg
ICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJlY4SFRNTE9wdGlv
bkVsZW1lbnRDb25zdHJ1Y3Rvcjo6aW5mbywgb3B0aW9uLmdldCgpKTsKLSAgICBvcHRpb24tPnJl
ZigpOwotICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NTm9kZShvcHRpb24uZ2V0
KCksIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoYXJncy5Ib2xkZXIoKSkpOwotICAg
IHJldHVybiBhcmdzLkhvbGRlcigpOwotfQotCi12ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gVjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSgpCi17
Ci0gICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBjYWNoZWRU
ZW1wbGF0ZTsKLSAgICBpZiAoIWNhY2hlZFRlbXBsYXRlLklzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIGNhY2hlZFRlbXBsYXRlOwotCi0gICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgIHY4
OjpMb2NhbDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcmVzdWx0ID0gdjg6OkZ1bmN0aW9uVGVtcGxh
dGU6Ok5ldyh2OEhUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3JDYWxsYmFjayk7Ci0KLSAgICB2
ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBpbnN0YW5jZSA9IHJlc3VsdC0+SW5zdGFuY2VU
ZW1wbGF0ZSgpOwotICAgIGluc3RhbmNlLT5TZXRJbnRlcm5hbEZpZWxkQ291bnQoVjhIVE1MT3B0
aW9uRWxlbWVudDo6aW50ZXJuYWxGaWVsZENvdW50KTsKLSAgICByZXN1bHQtPlNldENsYXNzTmFt
ZSh2ODo6U3RyaW5nOjpOZXcoIkhUTUxPcHRpb25FbGVtZW50IikpOwotICAgIHJlc3VsdC0+SW5o
ZXJpdChWOEhUTUxPcHRpb25FbGVtZW50OjpHZXRUZW1wbGF0ZSgpKTsKLQotICAgIGNhY2hlZFRl
bXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcocmVzdWx0
KTsKLSAgICByZXR1cm4gY2FjaGVkVGVtcGxhdGU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxP
cHRpb25FbGVtZW50Q29uc3RydWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEhUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMmFkZjBmZTZkZWI1MGEyYjU3OTFlZTg3OTI0MTQxZjFiYWFiNjVkYS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBWOEhUTUxPcHRpb25FbGVtZW50Q29u
c3RydWN0b3JfaAotI2RlZmluZSBWOEhUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3JfaAotCi0j
aW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgiCi0KLSNpbmNsdWRlIDx2OC5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFY4SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3RvciB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBH
ZXRUZW1wbGF0ZSgpOwotICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKLX07Ci0KLX0K
LQotI2VuZGlmIC8vIFY4SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmlkbAppbmRleCBlNTY3MjJhZTI1MjkzZjQ5NTdlOTE4
ZGRhYjBmNjEyNGJjMGFhNTg5Li4xNDljMDRmM2EwZTMyNWU4YmFmNTFiOTMyZDQ3YzczNjUzNDFj
ZGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5pZGwKQEAgLTI2LDcg
KzI2LDggQEAKIG1vZHVsZSBodG1sIHsKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBBY3RpdmVE
T01PYmplY3QsCi0gICAgICAgIENvbmRpdGlvbmFsPVZJREVPCisgICAgICAgIENvbmRpdGlvbmFs
PVZJREVPLAorICAgICAgICBOYW1lZENvbnN0cnVjdG9yPUF1ZGlvKGluIFtPcHRpb25hbD1DYWxs
V2l0aE51bGxWYWx1ZV0gRE9NU3RyaW5nIHNyYykKICAgICBdIEhUTUxBdWRpb0VsZW1lbnQgOiBI
VE1MTWVkaWFFbGVtZW50IHsKIAogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxPcHRpb25FbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlv
bkVsZW1lbnQuaWRsCmluZGV4IDA2ZDU1NDRkYTJhNzdjYWUxNTkzMDkxMDJmMDBmZWU0ZGI1NDFk
ZjUuLjZiYTMyN2FmNDFlYzVlZGU4NTRjMDUzNDg2NWIxOTQzYTAzMGM0OTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaWRsCkBAIC0yMSw3ICsyMSw5IEBACiBtb2R1
bGUgaHRtbCB7CiAKICAgICBpbnRlcmZhY2UgWwotICAgICAgICBHZW5lcmF0ZU5hdGl2ZUNvbnZl
cnRlcgorICAgICAgICBHZW5lcmF0ZU5hdGl2ZUNvbnZlcnRlciwKKyAgICAgICAgTmFtZWRDb25z
dHJ1Y3Rvcj1PcHRpb24oaW4gW09wdGlvbmFsPUNhbGxXaXRoTnVsbFZhbHVlXSBET01TdHJpbmcg
ZGF0YSwgaW4gW09wdGlvbmFsPUNhbGxXaXRoTnVsbFZhbHVlXSBET01TdHJpbmcgdmFsdWUsIGlu
IFtPcHRpb25hbD1DYWxsV2l0aERlZmF1bHRWYWx1ZV0gYm9vbGVhbiBkZWZhdWx0U2VsZWN0ZWQs
IGluIFtPcHRpb25hbD1DYWxsV2l0aERlZmF1bHRWYWx1ZV0gYm9vbGVhbiBzZWxlY3RlZCksCisg
ICAgICAgIENvbnN0cnVjdG9yUmFpc2VzRXhjZXB0aW9uCiAgICAgXSBIVE1MT3B0aW9uRWxlbWVu
dCA6IEhUTUxFbGVtZW50IHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxGb3JtRWxl
bWVudCBmb3JtOwogICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3Q9c2VsZWN0ZWRdIGJvb2xlYW4g
ZGVmYXVsdFNlbGVjdGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCmluZGV4IDkxMjcwMjdj
OWQzOWQ2OGMxZDJmNzk3MGY0ZmY5ZjkwNGE2YTg0M2UuLjgxM2RhYTUxYTA2ODFkMDIyMTVlMTI0
OTNjNGM3YTdjYTZhOTZmMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKQEAgLTQ5MCw4
ICs0OTAsOCBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgYXR0cmlidXRlIEhUTUxBbGxDb2xs
ZWN0aW9uQ29uc3RydWN0b3IgSFRNTEFsbENvbGxlY3Rpb247CiAgICAgICAgIGF0dHJpYnV0ZSBI
VE1MVW5rbm93bkVsZW1lbnRDb25zdHJ1Y3RvciBIVE1MVW5rbm93bkVsZW1lbnQ7CiAKLSAgICAg
ICAgYXR0cmlidXRlIFtDdXN0b21HZXR0ZXJdIEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3RvciBJ
bWFnZTsgLy8gVXNhYmxlIHdpdGggbmV3IG9wZXJhdG9yCi0gICAgICAgIGF0dHJpYnV0ZSBbQ3Vz
dG9tR2V0dGVyXSBIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yIE9wdGlvbjsgLy8gVXNhYmxl
IHdpdGggbmV3IG9wZXJhdG9yCisgICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tR2V0dGVyXSBIVE1M
SW1hZ2VFbGVtZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciBJbWFnZTsgLy8gVXNhYmxlIHdpdGgg
bmV3IG9wZXJhdG9yCisgICAgICAgIGF0dHJpYnV0ZSBIVE1MT3B0aW9uRWxlbWVudE5hbWVkQ29u
c3RydWN0b3JDb25zdHJ1Y3RvciBPcHRpb247IC8vIFVzYWJsZSB3aXRoIG5ldyBvcGVyYXRvcgog
CiAgICAgICAgIGF0dHJpYnV0ZSBDYW52YXNQYXR0ZXJuQ29uc3RydWN0b3IgQ2FudmFzUGF0dGVy
bjsKICAgICAgICAgYXR0cmlidXRlIENhbnZhc0dyYWRpZW50Q29uc3RydWN0b3IgQ2FudmFzR3Jh
ZGllbnQ7CkBAIC02MjcsNyArNjI3LDcgQEAgbW9kdWxlIHdpbmRvdyB7CiAKICAgICAgICAgYXR0
cmlidXRlIFN0b3JhZ2VDb25zdHJ1Y3RvciBTdG9yYWdlOwogCi0gICAgICAgIGF0dHJpYnV0ZSBb
Q3VzdG9tR2V0dGVyLCBDb25kaXRpb25hbD1WSURFTywgRW5hYmxlZEF0UnVudGltZV0gSFRNTEF1
ZGlvRWxlbWVudENvbnN0cnVjdG9yIEF1ZGlvOyAvLyBVc2FibGUgd2l0aCB0aGUgbmV3IG9wZXJh
dG9yCisgICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9VklERU8sIEVuYWJsZWRBdFJ1bnRp
bWVdIEhUTUxBdWRpb0VsZW1lbnROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IgQXVkaW87IC8v
IFVzYWJsZSB3aXRoIHRoZSBuZXcgb3BlcmF0b3IKICAgICAgICAgYXR0cmlidXRlIFtDb25kaXRp
b25hbD1WSURFTywgRW5hYmxlZEF0UnVudGltZV0gSFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9y
IEhUTUxBdWRpb0VsZW1lbnQ7CiAgICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9VklERU8s
IEVuYWJsZWRBdFJ1bnRpbWVdIEhUTUxNZWRpYUVsZW1lbnRDb25zdHJ1Y3RvciBIVE1MTWVkaWFF
bGVtZW50OwogICAgICAgICBhdHRyaWJ1dGUgW0NvbmRpdGlvbmFsPVZJREVPLCBFbmFibGVkQXRS
dW50aW1lXSBIVE1MVmlkZW9FbGVtZW50Q29uc3RydWN0b3IgSFRNTFZpZGVvRWxlbWVudDsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCAxMDkyN2MzYjJmNWJkMzI1NWExZjc5MWJhNDI3MDYyNTAyYjFmNWZkLi5hNjc0NThlY2I5
MzJlNzI3NWY3NDEzOWU0ZWM3NTM3NWJjNTQzZTkyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIw
MTEtMTEtMDQgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAg
IEEgV0lQIHBhdGNoIGZvciBpbXBsZW1lbnRpbmcgW05hbWVkQ29uc3RydWN0b3JdIElETCBmb3Ig
VjguCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTA5
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSB0
ZXN0IHJlc3VsdHMgZm9yICJuZXcgT3B0aW9uKC4uLikiIGFyZSB3cm9uZy4KKyAgICAgICAgVGhp
cyBwYXRjaCBmaXhlcyB0aGUgcmVzdWx0IGFjY29yZGluZyB0byB0aGUgc3BlYzoKKyAgICAgICAg
aHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy90aGUtYnV0dG9uLWVsZW1lbnQuaHRtbCN0aGUt
b3B0aW9uLWVsZW1lbnQKKyAgICAgICAgaHR0cDovL2Rldi53My5vcmcvMjAwNi93ZWJhcGkvV2Vi
SURMLyNlcy1ET01TdHJpbmcKKworICAgICAgICAqIGZhc3QvanMvY3VzdG9tLWNvbnN0cnVjdG9y
cy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9qcy9zY3JpcHQtdGVzdHMvY3VzdG9tLWNv
bnN0cnVjdG9ycy5qczoKKwogMjAxMS0xMS0wNCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5k
QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gRGlzYWJsZSBWSURFT19UUkFDSyBmb3Igbm93
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL2N1c3RvbS1jb25zdHJ1Y3RvcnMtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9jdXN0b20tY29uc3RydWN0b3JzLWV4cGVj
dGVkLnR4dAppbmRleCA3NGZhMTgzZDM1M2M2YzdjYTA4MTQwZWIzNDg5ZjY0NTAwNWIwODBmLi5m
ZDNjZTcyYWU4ZDY3OThlNTczNmZmZWFjNjhkYTZmYjJiZjNjNmU4IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L2pzL2N1c3RvbS1jb25zdHJ1Y3RvcnMtZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvanMvY3VzdG9tLWNvbnN0cnVjdG9ycy1leHBlY3RlZC50eHQKQEAgLTE3
LDExICsxNywxMSBAQCBQQVNTIG5ldyBPcHRpb24oKSBpcyBub24tbnVsbC4KIFBBU1MgbmV3IE9w
dGlvbigpLnRhZ05hbWUgaXMgIk9QVElPTiIKIFBBU1MgbmV3IE9wdGlvbigpLmlubmVyVGV4dCBp
cyAiIgogUEFTUyBuZXcgT3B0aW9uKG51bGwpLmlubmVyVGV4dCBpcyAibnVsbCIKLVBBU1MgbmV3
IE9wdGlvbih1bmRlZmluZWQpLmlubmVyVGV4dCBpcyAiIgorUEFTUyBuZXcgT3B0aW9uKHVuZGVm
aW5lZCkuaW5uZXJUZXh0IGlzICJ1bmRlZmluZWQiCiBQQVNTIG5ldyBPcHRpb24oJ3NvbWVkYXRh
JykuaW5uZXJUZXh0IGlzICJzb21lZGF0YSIKIFBBU1MgbmV3IE9wdGlvbigpLnZhbHVlIGlzICIi
CiBQQVNTIG5ldyBPcHRpb24oJ3NvbWVkYXRhJywgbnVsbCkudmFsdWUgaXMgIm51bGwiCi1QQVNT
IG5ldyBPcHRpb24oJ3NvbWVkYXRhJywgdW5kZWZpbmVkKS52YWx1ZSBpcyAic29tZWRhdGEiCitQ
QVNTIG5ldyBPcHRpb24oJ3NvbWVkYXRhJywgdW5kZWZpbmVkKS52YWx1ZSBpcyAidW5kZWZpbmVk
IgogUEFTUyBuZXcgT3B0aW9uKCdzb21lZGF0YScsICdzb21ldmFsdWUnKS52YWx1ZSBpcyAic29t
ZXZhbHVlIgogUEFTUyBuZXcgT3B0aW9uKCkuZGVmYXVsdFNlbGVjdGVkIGlzIGZhbHNlCiBQQVNT
IG5ldyBPcHRpb24oJ3NvbWVkYXRhJywgJ3NvbWV2YWx1ZScpLmRlZmF1bHRTZWxlY3RlZCBpcyBm
YWxzZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvY3VzdG9t
LWNvbnN0cnVjdG9ycy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2N1c3Rv
bS1jb25zdHJ1Y3RvcnMuanMKaW5kZXggNTI2NDg0NmNhMTQyYWQ4ZWYyYzYwM2EzYTkzOGI1YTA5
ZDlmZDkxZS4uZDUxY2RmM2JjMTc2YzFhNGU0MTU4YjVkYjQ2NGE3OTc3ZGViZWExOCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvY3VzdG9tLWNvbnN0cnVjdG9y
cy5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9jdXN0b20tY29uc3Ry
dWN0b3JzLmpzCkBAIC0yMywxMiArMjMsMTIgQEAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJuZXcg
T3B0aW9uKCkudGFnTmFtZSIsICJPUFRJT04iKTsKIAogc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJu
ZXcgT3B0aW9uKCkuaW5uZXJUZXh0IiwgIiIpOwogc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJuZXcg
T3B0aW9uKG51bGwpLmlubmVyVGV4dCIsICJudWxsIik7Ci1zaG91bGRCZUVxdWFsVG9TdHJpbmco
Im5ldyBPcHRpb24odW5kZWZpbmVkKS5pbm5lclRleHQiLCAiIik7CitzaG91bGRCZUVxdWFsVG9T
dHJpbmcoIm5ldyBPcHRpb24odW5kZWZpbmVkKS5pbm5lclRleHQiLCAidW5kZWZpbmVkIik7CiBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoIm5ldyBPcHRpb24oJ3NvbWVkYXRhJykuaW5uZXJUZXh0Iiwg
InNvbWVkYXRhIik7CiAKIHNob3VsZEJlRXF1YWxUb1N0cmluZygibmV3IE9wdGlvbigpLnZhbHVl
IiwgIiIpOwogc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJuZXcgT3B0aW9uKCdzb21lZGF0YScsIG51
bGwpLnZhbHVlIiwgIm51bGwiKTsKLXNob3VsZEJlRXF1YWxUb1N0cmluZygibmV3IE9wdGlvbign
c29tZWRhdGEnLCB1bmRlZmluZWQpLnZhbHVlIiwgInNvbWVkYXRhIik7CitzaG91bGRCZUVxdWFs
VG9TdHJpbmcoIm5ldyBPcHRpb24oJ3NvbWVkYXRhJywgdW5kZWZpbmVkKS52YWx1ZSIsICJ1bmRl
ZmluZWQiKTsKIHNob3VsZEJlRXF1YWxUb1N0cmluZygibmV3IE9wdGlvbignc29tZWRhdGEnLCAn
c29tZXZhbHVlJykudmFsdWUiLCAic29tZXZhbHVlIik7CiAKIHNob3VsZEJlRmFsc2UoIm5ldyBP
cHRpb24oKS5kZWZhdWx0U2VsZWN0ZWQiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113793</attachid>
            <date>2011-11-06 10:53:10 -0800</date>
            <delta_ts>2011-11-29 04:09:19 -0800</delta_ts>
            <desc>WIP patch for V8 to see if a build passes</desc>
            <filename>bug-71093-20111106105309.patch</filename>
            <type>text/plain</type>
            <size>107244</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTkzNzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxNzMzYzY1YjIyOTQzMDI3
OGNjNGZhMTcxNWZlNDc2NGIyMWM1ODAzLi43Mjc1OWQ1NmQ1MzU0MDI5ODBmN2Y2OTYwYmM2YzY1
OGM0N2RmNTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI5IEBACisyMDExLTExLTA0ICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBBIFdJUCBwYXRjaCBm
b3IgaW1wbGVtZW50aW5nIFtOYW1lZENvbnN0cnVjdG9yXSBJREwgZm9yIFY4LgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwOTMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVu
dHMgW05hbWVkQ29uc3RydWN0b3JdIElETCBmb3IgVjguCisgICAgICAgIFRoZSBzcGVjOiBodHRw
Oi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI05hbWVkQ29uc3RydWN0b3IKKworICAgICAgICBJbiBh
ZGRpdGlvbiwgdGhpcyBwYXRjaCByZXBsYWNlcyB0aGUgY3VzdG9tIGNvbnN0cnVjdG9ycyBvZgor
ICAgICAgICBIVE1MQXVkaW9FbGVtZW50IGFuZCBIVE1MT3B0aW9uRWxlbWVudCB3aXRoIHRoZQor
ICAgICAgICBbTmFtZWRDb25zdHJ1Y3Rvcl0gSURMLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2pz
L2N1c3RvbS1jb25zdHJ1Y3RvcnMuaHRtbAorICAgICAgICAgICAgICAgbWVkaWEvYXVkaW8tY29u
c3RydWN0b3IuaHRtbAorICAgICAgICAgICAgICAgbWVkaWEvYXVkaW8tY29uc3RydWN0b3Itc3Jj
Lmh0bWwKKyAgICAgICAgICAgICAgIG1lZGlhL2F1ZGlvLWNvbnN0cnVjdG9yLXByZWxvYWQuaHRt
bAorICAgICAgICAgICAgICAgbWVkaWEvYXVkaW8tY29udHJvbHMtZG8tbm90LWZhZGUtb3V0Lmh0
bWwKKyAgICAgICAgICAgICAgIG1lZGlhL2F1ZGlvLWNvbnRyb2xzLXJlbmRlcmluZy5odG1sCisg
ICAgICAgICAgICAgICBmYXN0L2Zvcm1zL29wdGlvbi1pbmRleC5odG1sCisgICAgICAgICAgICAg
ICBmYXN0L2Zvcm1zL2FkZC1hbmQtcmVtb3ZlLW9wdGlvbi5odG1sCisgICAgICAgICAgICAgICBm
YXN0L2RvbS9kb20tYWRkLW9wdGlvbmVsZW1lbnQuaHRtbAorCisgICAgICAgICogVGFyZ2V0LnBy
aTogUmVtb3ZlZCBjdXN0b20gY29uc3RydWN0b3IgLmggYW5kIC5jcHAuCisgICAgICAgICogV2Vi
Q29yZS5neXBpOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOiBJZiBhbiBJREwgdHlw
ZSBpcyAiWFhYWENvbnN0cnVjdG9yQ29uc3RydWN0b3IiLCB0aGVuIHdlIGRvIG5vdCBhZGQgYSBo
ZWFkZXIgZmlsZSBvZiB0aGUgSURMIHR5cGUsIGJlY2F1c2UgdGhlIE5hbWVkQ29uc3RydWN0b3Ig
ZGVjbGFyYXRpb24gaXMgd3JpdHRlbiBpbiB0aGUgaGVhZGVyIGZpbGUgb2YgY2xhc3MgWFhYWC4K
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAg
KEdlbmVyYXRlSGVhZGVyKTogR2VuZXJhdGVzIGEgaGVhZGVyIGZvciBhIE5hbWVkQ29uc3RydWN0
b3IuCisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9yQ2FsbGJhY2spOiBKdXN0IHJlZmFjdG9y
ZWQgdmFyaWFibGUgbmFtZXMuCisgICAgICAgIChHZW5lcmF0ZU5hbWVkQ29uc3RydWN0b3JDYWxs
YmFjayk6IEdlbmVyYXRlcyBhIGNvbnN0cnVjdG9yIGFuZCBHZXRUZW1wbGF0ZSgpIGZvciB0aGUg
TmFtZWRDb25zdHJ1Y3Rvci4KKyAgICAgICAgKEdlbmVyYXRlU2luZ2xlQmF0Y2hlZEF0dHJpYnV0
ZSk6IElmIGFuIElETCB0eXBlIGlzICJYWFhYQ29uc3RydWN0b3JDb25zdHJ1Y3RvciIsIHRoZW4g
d2UgZG8gbm90IGFkZCBhIGhlYWRlciBmaWxlIG9mIHRoZSBJREwgdHlwZSwgYmVjYXVzZSB0aGUg
TmFtZWRDb25zdHJ1Y3RvciBkZWNsYXJhdGlvbiBpcyB3cml0dGVuIGluIHRoZSBoZWFkZXIgZmls
ZSBvZiBjbGFzcyBYWFhYLgorICAgICAgICAoR2V0RG9tTWFwRnVuY3Rpb24pOiBKdXN0IHJlZmFj
dG9yZWQuCisgICAgICAgIChXcml0ZURhdGEpOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL0lETFBhcnNlci5wbToKKyAgICAgICAgKHBhcnNlRXh0ZW5kZWRBdHRyaWJ1dGVzKTog
UGFyc2VzICdOYW1lZENvbnN0cnVjdG9yJyAnPScgbmFtZSAnKCcgcGFyYW1ldGVycyAnKScgJywn
PworICAgICAgICAoUGFyc2VJbnRlcmZhY2UpOiBDcmVhdGVzIHRoZSBzaWduYXR1cmUgb2YgYSBO
YW1lZENvbnN0cnVjdG9yLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0TmFt
ZWRDb25zdHJ1Y3Rvci5pZGw6IEFkZGVkIGEgbmV3IHRlc3QgZm9yIHRoZSBbTmFtZWRDb25zdHJ1
Y3Rvcl0gSURMLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVz
dE5hbWVkQ29uc3RydWN0b3IuY3BwOiBBZGRlZCBhIHJ1bi1iaW5kaW5nLXRlc3QgcmVzdWx0IG9m
IFRlc3ROYW1lZENvbnN0cnVjdG9yLmlkbC4KKyAgICAgICAgKFdlYkRPTVRlc3ROYW1lZENvbnN0
cnVjdG9yOjpXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGU6OldlYkRPTVRlc3ROYW1l
ZENvbnN0cnVjdG9yUHJpdmF0ZSk6CisgICAgICAgIChXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rv
cjo6V2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViRE9NVGVzdE5hbWVk
Q29uc3RydWN0b3I6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJET01UZXN0TmFtZWRDb25zdHJ1
Y3Rvcjo6aW1wbCk6CisgICAgICAgIChXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6fldlYkRP
TVRlc3ROYW1lZENvbnN0cnVjdG9yKToKKyAgICAgICAgKHRvV2ViQ29yZSk6CisgICAgICAgICh0
b1dlYktpdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0
TmFtZWRDb25zdHJ1Y3Rvci5oOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHA6IERpdHRvLgorICAg
ICAgICAoV2ViS2l0OjpraXQpOgorICAgICAgICAoV2ViS2l0Ojpjb3JlKToKKyAgICAgICAgKHdl
YmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9maW5hbGl6ZSk6CisgICAgICAgICh3ZWJr
aXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3Jfc2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdl
YmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9nZXRfcHJvcGVydHkpOgorICAgICAgICAo
d2Via2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yX2NvbnN0cnVjdGVkKToKKyAgICAgICAg
KHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9jbGFzc19pbml0KToKKyAgICAgICAg
KHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9pbml0KToKKyAgICAgICAgKFdlYktp
dDo6d3JhcFRlc3ROYW1lZENvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5oOiBEaXR0by4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRD
b25zdHJ1Y3RvclByaXZhdGUuaDogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6SlNUZXN0TmFtZWRDb25zdHJ1
Y3RvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0
b3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBl
OjpzZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OkpTVGVz
dE5hbWVkQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25z
dHJ1Y3Rvcjo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVk
Q29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3ROYW1lZENvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OmlzT2JzZXJ2YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JPd25lcjo6ZmluYWxpemUpOgorICAgICAgICAo
V2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0b1Rlc3ROYW1lZENvbnN0cnVjdG9y
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvci5oOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3I6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6
aW1wbCk6CisgICAgICAgIChXZWJDb3JlOjp3cmFwcGVyT3duZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6d3JhcHBlckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1
Y3RvclByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29u
c3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJv
dG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1
Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JD
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvT2JqQy9ET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5oOiBEaXR0by4KKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5tbTogRGl0
dG8uCisgICAgICAgICgtW0RPTVRlc3ROYW1lZENvbnN0cnVjdG9yIGRlYWxsb2NdKToKKyAgICAg
ICAgKC1bRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IgZmluYWxpemVdKToKKyAgICAgICAgKGNvcmUp
OgorICAgICAgICAoa2l0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9E
T01UZXN0TmFtZWRDb25zdHJ1Y3RvckludGVybmFsLmg6IERpdHRvLgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcDogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3RvckludGVybmFsOjpWOF9VU0UpOgor
ICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0b3JDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDb25maWd1cmVWOFRlc3ROYW1lZENvbnN0cnVjdG9y
VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0
UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6
R2V0VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6
SGFzSW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6
dG9BY3RpdmVET01PYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1
Y3Rvcjo6d3JhcFNsb3cpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rv
cjo6ZGVyZWZPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RJbnRlcmZhY2UuaDogVXBkYXRlZCBhIHJ1bi1iaW5kaW5nLXRlc3QgcmVzdWx0LgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Lmg6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1l
ZENvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25z
dHJ1Y3Rvcjo6dG9OYXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1
Y3Rvcjo6ZXhpc3RpbmdXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE5hbWVkQ29u
c3RydWN0b3I6OndyYXApOgorICAgICAgICAoV2ViQ29yZTo6dG9WOCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5oOiBEaXR0by4KKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
Lmg6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3Rv
bS5jcHA6IFJlbW92ZWQgY3VzdG9tIGdldHRlcnMgb2YgSFRNTEF1ZGlvRWxlbWVudCBhbmQgSFRN
TE9wdGlvbkVsZW1lbnQuCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlv
RWxlbWVudENvbnN0cnVjdG9yLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uRWxlbWVu
dENvbnN0cnVjdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9IVE1MQXVkaW9FbGVtZW50
LmlkbDogQWRkZWQgW05hbWVkQ29uc3RydWN0b3I9QXVkaW8oLi4uKV0uCisgICAgICAgICogaHRt
bC9IVE1MT3B0aW9uRWxlbWVudC5pZGw6IEFkZGVkIFtOYW1lZENvbnN0cnVjdG9yPU9wdGlvbigu
Li4pXS4KKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6IFJlbW92ZWQgW0N1c3RvbUdldHRl
cl0gZnJvbSBIVE1MQXVkaW9FbGVtZW50IGFuZCBIVE1MT3B0aW9uRWxlbWVudC4gIkhUTUxBdWRp
b0VsZW1lbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yIEF1ZGlvIiBpcyBub3QgdHlwby4gVGhpcyBt
ZWFucyB0aGF0ICJBdWRpbyIgc2hvdWxkIGJlIGJvdW5kIHRvICJIVE1MQXVkaW9FbGVtZW50Q29u
c3RydWN0b3IiLgorCiAyMDExLTExLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CiAKICAgICAgICAgSlNDIHNob3VsZCBiZSBhYmxlIHRvIHNhbXBsZSBpdHNlbGYgaW4gYSBtb3Jl
IGZsZXhpYmxlIHdheSB0aGFuIGp1c3Qgc2FtcGxpbmcgZmxhZ3MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDg3
ZDU0YTJjZjA3NzI0NWExOTg2M2I4NjI4MWNhN2JjYTMxMDFhNDEuLjgxNzI2YmJlOGY1Yzc0YjA5
MDY4ZWJiZDE4OGVlNzA5MmE5NjY0NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTgwLDExICsxODAsNiBA
QCB2OCB7CiAgICAgICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEZpbGVSZWFkZXJDdXN0b20uY3Bw
IFwKICAgICAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEFsbENvbGxlY3Rpb25DdXN0b20u
Y3BwCiAKLSAgICBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89MSkgewotICAgICAgICBT
T1VSQ0VTICs9IFwKLSAgICAgICAgICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0Vs
ZW1lbnRDb25zdHJ1Y3Rvci5jcHAKLSAgICB9Ci0KICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAg
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwIFwKICAgICAg
ICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENvbGxlY3Rpb25DdXN0b20uY3BwIFwKQEAgLTE5
Niw3ICsxOTEsNiBAQCB2OCB7CiAgICAgICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFn
ZUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAgXAogICAgICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OEhUTUxMaW5rRWxlbWVudEN1c3RvbS5jcHAgXAotICAgICAgICBiaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAgXAogICAgICAgICBiaW5k
aW5ncy92OC9jdXN0b20vVjhIVE1MT3V0cHV0RWxlbWVudEN1c3RvbS5jcHAgXAogICAgICAgICBi
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MUGx1Z0luRWxlbWVudEN1c3RvbS5jcHAgXApAQCAtMTM0
Myw5ICsxMzM3LDcgQEAgdjggewogICAgIEhFQURFUlMgKz0gXAogICAgICAgICBiaW5kaW5ncy92
OC9jdXN0b20vVjhDdXN0b21Wb2lkQ2FsbGJhY2suaCBcCiAgICAgICAgIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOEN1c3RvbVhQYXRoTlNSZXNvbHZlci5oIFwKLSAgICAgICAgYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmggXAogICAgICAgICBiaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuaCBcCi0gICAgICAgIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IuaCBcCiAgICAgICAg
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmggXAogICAgICAg
ICBiaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlUG9ydEN1c3RvbS5oIFwKICAgICAgICAgYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4TmFtZWROb2Rlc0NvbGxlY3Rpb24uaCBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggYmEwY2UyNjAyMzEzYjQ4MDhkNGI1YjZhNDEzMGE2OTY2MDY1OTkyMS4uZTA5NmNmM2Jl
ZmE1NTM1MjE3ZGNhYmFlMGVmMjE3OGE0YTIxZTE3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjE4
NCw4ICsyMTg0LDYgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhGbG9hdDY0
QXJyYXlDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhHZW9s
b2NhdGlvbkN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhU
TUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNwcCcsCi0gICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmgnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENvbGxlY3Rpb25DdXN0b20u
Y3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0
b20uY3BwJywKQEAgLTIxOTcsOCArMjE5NSw2IEBACiAgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmgnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwJywKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MTGlua0VsZW1lbnRDdXN0b20uY3BwJywKLSAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVj
dG9yLmNwcCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlvbkVs
ZW1lbnRDb25zdHJ1Y3Rvci5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MT3V0cHV0RWxlbWVudEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxQbHVnSW5FbGVtZW50Q3VzdG9tLmNwcCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4
IDQwMzdhMzI4NTkyZDg1OTdlOGQ5YmVmZWJkOTAxN2FmODRmM2Q2NzYuLmI5M2Q2YjQwYjljNmMw
M2I5OWFiMzM2MGUwYmEyYWZkZGUyZjU2NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0xODE3LDcgKzE4MTcsMTAgQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
aWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSA9fiAvQ29uc3RydWN0b3IkLykgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRjb25zdHJ1Y3RvclR5cGUgPSAkYXR0cmlidXRl
LT5zaWduYXR1cmUtPnR5cGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnN0cnVj
dG9yVHlwZSA9fiBzL0NvbnN0cnVjdG9yJC8vOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgkY29uc3RydWN0b3JUeXBlIG5lICJET01PYmplY3QiKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIyAkY29uc3RydWN0b3JUeXBlIH49IC9Db25zdHJ1Y3RvciQvIGluZGljYXRl
cyB0aGF0IGl0IGlzIE5hbWVkQ29uc3RydWN0b3IuCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIyBXZSBkbyBub3QgZ2VuZXJhdGUgdGhlIGhlYWRlciBmaWxlIGZvciBOYW1lZENvbnN0cnVj
dG9yIG9mIGNsYXNzIFhYWFgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzaW5jZSB3
ZSBnZW5lcmF0ZSB0aGUgTmFtZWRDb25zdHJ1Y3RvciBkZWNsYXJhdGlvbiBpbnRvIHRoZSBoZWFk
ZXIgZmlsZSBvZiBjbGFzcyBYWFhYLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk
Y29uc3RydWN0b3JUeXBlIG5lICJET01PYmplY3QiIGFuZCAkY29uc3RydWN0b3JUeXBlICF+IC9D
b25zdHJ1Y3RvciQvKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZFRvSW1w
bEluY2x1ZGVzKCJKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4gIi5oIiwgJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yXG4iKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0KaW5kZXggMGZmMWJlMjEwZDE0NThhMWE4NGViY2Q0NzNjOTY4ZTIzYzNhNDUxNS4uMGQwZGJi
Yjg4NTFkY2MwYmMyZmU0ZjkxY2YwMGUxMDY5ZDE3ODFhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTM5LDcgKzM5LDYg
QEAgbXkgJG91dHB1dEhlYWRlcnNEaXIgPSAiIjsKIG15IEBoZWFkZXJDb250ZW50ID0gKCk7CiBt
eSBAaW1wbENvbnRlbnRIZWFkZXIgPSAoKTsKIG15IEBpbXBsRml4ZWRIZWFkZXIgPSAoKTsKLW15
IEBpbXBsSGVhZGVyQ29udGVudCA9ICgpOwogbXkgQGltcGxDb250ZW50ID0gKCk7CiBteSBAaW1w
bENvbnRlbnREZWNscyA9ICgpOwogbXkgJWltcGxJbmNsdWRlcyA9ICgpOwpAQCAtMjgzLDYgKzI4
Miw4IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICRoZWFkZXJJbmNsdWRlc3sid3RmL3RleHQv
U3RyaW5nSGFzaC5oIn0gPSAxOwogICAgICRoZWFkZXJJbmNsdWRlc3siV3JhcHBlclR5cGVJbmZv
LmgifSA9IDE7CiAgICAgJGhlYWRlckluY2x1ZGVzeyJWOERPTVdyYXBwZXIuaCJ9ID0gMTsKKyAg
ICAkaGVhZGVySW5jbHVkZXN7Ind0Zi9IYXNoTWFwLmgifSA9IDE7CisgICAgJGhlYWRlckluY2x1
ZGVzeyJ2OC5oIn0gPSAxOwogCiAgICAgbXkgJGhlYWRlckNsYXNzSW5jbHVkZSA9IEdldEhlYWRl
ckNsYXNzSW5jbHVkZSgkaW1wbENsYXNzTmFtZSk7CiAgICAgJGhlYWRlckluY2x1ZGVzeyRoZWFk
ZXJDbGFzc0luY2x1ZGV9ID0gMSBpZiAkaGVhZGVyQ2xhc3NJbmNsdWRlIG5lICIiOwpAQCAtMjkw
LDE2ICsyOTEsMTMgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgbXkgKCRzdmdQcm9wZXJ0eVR5
cGUsICRzdmdMaXN0UHJvcGVydHlUeXBlLCAkc3ZnTmF0aXZlVHlwZSkgPSBHZXRTVkdQcm9wZXJ0
eVR5cGVzKCRpbXBsQ2xhc3NOYW1lKTsKIAogICAgIGZvcmVhY2ggbXkgJGhlYWRlckluY2x1ZGUg
KHNvcnQga2V5cyglaGVhZGVySW5jbHVkZXMpKSB7Ci0gICAgICAgIGlmICgkaGVhZGVySW5jbHVk
ZSA9fiAvd3RmLykgeworICAgICAgICBpZiAoJGhlYWRlckluY2x1ZGUgPX4gL3d0Znx2OFwuaC8p
IHsKICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjaW5jbHVkZSBcPCR7aGVhZGVy
SW5jbHVkZX1cPlxuIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiI2luY2x1ZGUgXCIke2hlYWRlckluY2x1ZGV9XCJcbiIpOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIDx2OC5oPlxuIik7
Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPlxuIik7
Ci0KICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5uYW1lc3BhY2UgV2ViQ29yZSB7XG4iKTsK
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG50ZW1wbGF0ZTx0eXBlbmFtZSBQcm9wZXJ0eVR5
cGU+IGNsYXNzIFNWR1Byb3BlcnR5VGVhck9mZjtcbiIpIGlmICRzdmdQcm9wZXJ0eVR5cGU7CiAg
ICAgaWYgKCRzdmdOYXRpdmVUeXBlKSB7CkBAIC0zMTAsNiArMzA4LDE5IEBAIHN1YiBHZW5lcmF0
ZUhlYWRlcgogICAgICAgICB9CiAgICAgfQogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbmNs
YXNzIEZsb2F0UmVjdDtcbiIpIGlmICRzdmdQcm9wZXJ0eVR5cGUgJiYgJHN2Z1Byb3BlcnR5VHlw
ZSBlcSAiRmxvYXRSZWN0IjsKKworICAgIG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZlVHlwZUZv
ckNvbnZlcnNpb25zKCRkYXRhTm9kZSwgJGludGVyZmFjZU5hbWUpOworICAgIGlmICgkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9yIn0pIHsKKyAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOworCitjbGFzcyBWOCR7bmF0aXZlVHlwZX1Db25z
dHJ1Y3RvciB7CitwdWJsaWM6CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBHZXRUZW1wbGF0ZSgpOworICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5m
bzsKK307CitFTkQKKyAgICB9CisKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5jbGFzcyAk
Y2xhc3NOYW1lIHtcbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJwdWJsaWM6XG4iKTsK
IApAQCAtMzMyLDE0ICszNDMsMTMgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICJmYWxzZTtcbiIpOwogICAgIH0KIAotICAgIG15ICRuYXRpdmVUeXBl
ID0gR2V0TmF0aXZlVHlwZUZvckNvbnZlcnNpb25zKCRkYXRhTm9kZSwgJGludGVyZmFjZU5hbWUp
OwogICAgIG15ICRkb21NYXBGdW5jdGlvbiA9IEdldERvbU1hcEZ1bmN0aW9uKCRkYXRhTm9kZSwg
JGludGVyZmFjZU5hbWUpOwogICAgIG15ICRmb3JjZU5ld09iamVjdFBhcmFtZXRlciA9IElzRE9N
Tm9kZVR5cGUoJGludGVyZmFjZU5hbWUpID8gIiwgYm9vbCBmb3JjZU5ld09iamVjdCA9IGZhbHNl
IiA6ICIiOwogICAgIG15ICRmb3JjZU5ld09iamVjdElucHV0ID0gSXNET01Ob2RlVHlwZSgkaW50
ZXJmYWNlTmFtZSkgPyAiLCBib29sIGZvcmNlTmV3T2JqZWN0IiA6ICIiOwogICAgIG15ICRmb3Jj
ZU5ld09iamVjdENhbGwgPSBJc0RPTU5vZGVUeXBlKCRpbnRlcmZhY2VOYW1lKSA/ICIsIGZvcmNl
TmV3T2JqZWN0IiA6ICIiOwogCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOwotICAg
IHN0YXRpYyBib29sIEhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSk7Cisg
ICAgc3RhdGljIGJvb2wgSGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKICAgICBz
dGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFJhd1RlbXBsYXRl
KCk7CiAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRU
ZW1wbGF0ZSgpOwogICAgIHN0YXRpYyAke25hdGl2ZVR5cGV9KiB0b05hdGl2ZSh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IG9iamVjdCkKQEAgLTM4NSw3ICszOTUsNyBAQCBFTkQKIAogICAgIGlmICgk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Db25zdHJ1Y3RvciJ9IHx8ICRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4Q3VzdG9tQ29uc3RydWN0b3IifSB8fCAk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYW5CZUNvbnN0cnVjdGVkIn0gfHwgJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3IifSkgewogICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOworICAg
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2
ODo6QXJndW1lbnRzJik7CiBFTkQKICAgICB9CiAKQEAgLTE1MjIsNyArMTUzMiw4IEBAIHN1YiBH
ZW5lcmF0ZUNvbnN0cnVjdG9yQ2FsbGJhY2sKICAgICAgICAgfQogICAgIH0KIAotICAgIG15IEBl
eHRyYUFyZ3VtZW50TGlzdDsKKyAgICBteSBAYmVmb3JlQXJndW1lbnRMaXN0OworICAgIG15IEBh
ZnRlckFyZ3VtZW50TGlzdDsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwogdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4JHtpbXBsQ2xhc3NOYW1lfTo6Y29uc3RydWN0b3JDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewpAQCAtMTU0Niw5ICsxNTU3LDggQEAgRU5ECiAg
ICAgbXkgKCRwYXJhbWV0ZXJDaGVja1N0cmluZywgJHBhcmFtSW5kZXgpID0gR2VuZXJhdGVQYXJh
bWV0ZXJzQ2hlY2soJGZ1bmN0aW9uLCAkaW1wbENsYXNzTmFtZSk7CiAgICAgcHVzaChAaW1wbENv
bnRlbnQsICRwYXJhbWV0ZXJDaGVja1N0cmluZyk7CiAKLSAgICBteSBAY29udGV4dEFyZ3VtZW50
OwogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0aCJ9ICYm
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn0gZXEgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQiKSB7Ci0gICAgICAgIHB1c2goQGNvbnRleHRBcmd1bWVudCwgImNvbnRl
eHQiKTsKKyAgICAgICAgcHVzaChAYmVmb3JlQXJndW1lbnRMaXN0LCAiY29udGV4dCIpOwogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwogCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKQEAgLTE1NTgsNyAr
MTU2OCw3IEBAIEVORAogICAgIH0KIAogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDb25zdHJ1Y3RvclJhaXNlc0V4Y2VwdGlvbiJ9KSB7Ci0gICAgICAgIHB1c2goQGV4
dHJhQXJndW1lbnRMaXN0LCAiZWMiKTsKKyAgICAgICAgcHVzaChAYWZ0ZXJBcmd1bWVudExpc3Qs
ICJlYyIpOwogICAgIH0KIAogICAgIG15IEBhcmd1bWVudExpc3Q7CkBAIC0xNTY5LDcgKzE1Nzks
NyBAQCBFTkQKICAgICAgICAgJGluZGV4Kys7CiAgICAgfQogCi0gICAgbXkgJGFyZ3VtZW50U3Ry
aW5nID0gam9pbigiLCAiLCBAY29udGV4dEFyZ3VtZW50LCBAYXJndW1lbnRMaXN0LCBAZXh0cmFB
cmd1bWVudExpc3QpOworICAgIG15ICRhcmd1bWVudFN0cmluZyA9IGpvaW4oIiwgIiwgQGJlZm9y
ZUFyZ3VtZW50TGlzdCwgQGFyZ3VtZW50TGlzdCwgQGFmdGVyQXJndW1lbnRMaXN0KTsKICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIlxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVm
UHRyPCR7aW1wbENsYXNzTmFtZX0+IG9iaiA9ICR7aW1wbENsYXNzTmFtZX06OmNyZWF0ZSgke2Fy
Z3VtZW50U3RyaW5nfSk7XG4iKTsKIApAQCAtMTU5Niw2ICsxNjA2LDE0MyBAQCBFTkQKICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIlxuIik7CiB9CiAKK3N1YiBHZW5lcmF0ZU5hbWVkQ29uc3RydWN0
b3JDYWxsYmFjaworeworICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OworICAgIG15ICRkYXRhTm9k
ZSA9IHNoaWZ0OworICAgIG15ICRpbXBsQ2xhc3NOYW1lID0gc2hpZnQ7CisKKyAgICBteSAkcmFp
c2VzRXhjZXB0aW9ucyA9IEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfTsKKyAgICBpZiAo
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3JSYWlzZXNFeGNlcHRp
b24ifSkgeworICAgICAgICAkcmFpc2VzRXhjZXB0aW9ucyA9IDE7CisgICAgfQorICAgIGlmICgh
JHJhaXNlc0V4Y2VwdGlvbnMpIHsKKyAgICAgICAgZm9yZWFjaCBteSAkcGFyYW1ldGVyIChAeyRm
dW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKKyAgICAgICAgICAgIGlmICgoISRwYXJhbWV0ZXItPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsYmFjayJ9IGFuZCBUeXBlQ2FuRmFpbENvbnZlcnNpb24o
JHBhcmFtZXRlcikpIG9yICRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJc0luZGV4
In0pIHsKKyAgICAgICAgICAgICAgICAkcmFpc2VzRXhjZXB0aW9ucyA9IDE7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBteSBAYmVmb3JlQXJndW1lbnRMaXN0OworICAg
IG15IEBhZnRlckFyZ3VtZW50TGlzdDsKKworICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJBY3RpdmVET01PYmplY3QifSkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgPDxFTkQpOworV3JhcHBlclR5cGVJbmZvIFY4JHtpbXBsQ2xhc3NOYW1lfUNvbnN0cnVjdG9y
OjppbmZvID0geyBWOCR7aW1wbENsYXNzTmFtZX1Db25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUsIFY4
JHtpbXBsQ2xhc3NOYW1lfTo6ZGVyZWZPYmplY3QsIFY4JHtpbXBsQ2xhc3NOYW1lfTo6dG9BY3Rp
dmVET01PYmplY3QsIDAgfTsKKworRU5ECisgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsIDw8RU5EKTsKK1dyYXBwZXJUeXBlSW5mbyBWOCR7aW1wbENsYXNzTmFtZX1Db25z
dHJ1Y3Rvcjo6aW5mbyA9IHsgVjgke2ltcGxDbGFzc05hbWV9Q29uc3RydWN0b3I6OkdldFRlbXBs
YXRlLCAwLCAwLCAwIH07CisKK0VORAorICAgIH0KKworICAgIHB1c2goQGltcGxDb250ZW50LCA8
PEVORCk7CitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4JHtpbXBsQ2xhc3NOYW1lfUNv
bnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNf
U1RBVFMoIkRPTS4ke2ltcGxDbGFzc05hbWV9LkNvbnN0cnVjdG9yIik7CisKKyAgICBpZiAoIWFy
Z3MuSXNDb25zdHJ1Y3RDYWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJET00gb2Jq
ZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iLCBWOFByb3h5
OjpUeXBlRXJyb3IpOworCisgICAgaWYgKENvbnN0cnVjdG9yTW9kZTo6Y3VycmVudCgpID09IENv
bnN0cnVjdG9yTW9kZTo6V3JhcEV4aXN0aW5nT2JqZWN0KQorICAgICAgICByZXR1cm4gYXJncy5I
b2xkZXIoKTsKKworICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JD
dXJyZW50Q29udGV4dCgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKCIke2ltcGxDbGFzc05hbWV9IGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZnJhbWUgaXMgdW5h
dmFpbGFibGUiLCBWOFByb3h5OjpSZWZlcmVuY2VFcnJvcik7CisKKyAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcigiJHtpbXBsQ2xhc3NOYW1lfSBjb25zdHJ1Y3RvciBhc3NvY2lhdGVk
IGRvY3VtZW50IGlzIHVuYXZhaWxhYmxlIiwgVjhQcm94eTo6UmVmZXJlbmNlRXJyb3IpOworCisg
ICAgLy8gTWFrZSBzdXJlIHRoZSBkb2N1bWVudCBpcyBhZGRlZCB0byB0aGUgRE9NIE5vZGUgbWFw
LiBPdGhlcndpc2UsIHRoZSAke2ltcGxDbGFzc05hbWV9IGluc3RhbmNlCisgICAgLy8gbWF5IGVu
ZCB1cCBiZWluZyB0aGUgb25seSBub2RlIGluIHRoZSBtYXAgYW5kIGdldCBnYXJiYWdlLWNvbGxl
Y3RlZCBwcmVtYXR1cmVseS4KKyAgICB0b1Y4KGRvY3VtZW50KTsKKworRU5ECisKKyAgICBwdXNo
KEBpbXBsQ29udGVudCwgR2VuZXJhdGVBcmd1bWVudHNDb3VudENoZWNrKCRmdW5jdGlvbiwgJGRh
dGFOb2RlKSk7CisKKyAgICBpZiAoJHJhaXNlc0V4Y2VwdGlvbnMpIHsKKyAgICAgICAgQWRkVG9J
bXBsSW5jbHVkZXMoIkV4Y2VwdGlvbkNvZGUuaCIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIlxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwO1xuIik7CisgICAgfQorCisgICAgbXkgKCRwYXJhbWV0ZXJDaGVja1N0cmluZywgJHBh
cmFtSW5kZXgpID0gR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2soJGZ1bmN0aW9uLCAkaW1wbENsYXNz
TmFtZSk7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICRwYXJhbWV0ZXJDaGVja1N0cmluZyk7CisK
KyAgICBwdXNoKEBiZWZvcmVBcmd1bWVudExpc3QsICJkb2N1bWVudCIpOworCisgICAgaWYgKCRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yUmFpc2VzRXhjZXB0aW9u
In0pIHsKKyAgICAgICAgcHVzaChAYWZ0ZXJBcmd1bWVudExpc3QsICJlYyIpOworICAgIH0KKwor
ICAgIG15IEBhcmd1bWVudExpc3Q7CisgICAgbXkgJGluZGV4ID0gMDsKKyAgICBmb3JlYWNoIG15
ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgeworICAgICAgICBsYXN0IGlm
ICRpbmRleCBlcSAkcGFyYW1JbmRleDsKKyAgICAgICAgcHVzaChAYXJndW1lbnRMaXN0LCAkcGFy
YW1ldGVyLT5uYW1lKTsKKyAgICAgICAgJGluZGV4Kys7CisgICAgfQorCisgICAgbXkgJGFyZ3Vt
ZW50U3RyaW5nID0gam9pbigiLCAiLCBAYmVmb3JlQXJndW1lbnRMaXN0LCBAYXJndW1lbnRMaXN0
LCBAYWZ0ZXJBcmd1bWVudExpc3QpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKyAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8JHtpbXBsQ2xhc3NOYW1lfT4gb2JqID0g
JHtpbXBsQ2xhc3NOYW1lfTo6Y3JlYXRlRm9ySlNDb25zdHJ1Y3Rvcigke2FyZ3VtZW50U3RyaW5n
fSk7XG4iKTsKKworICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25z
dHJ1Y3RvclJhaXNlc0V4Y2VwdGlvbiJ9KSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGlmIChlYylcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgZ290
byBmYWlsO1xuIik7CisgICAgfQorCisgICAgbXkgJERPTU9iamVjdCA9ICJET01PYmplY3QiOwor
ICAgICMgQSBET01PYmplY3QgdGhhdCBpcyBhbiBBY3RpdmVET01PYmplY3QgYW5kIGFsc28gYSBE
T01Ob2RlIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIEFjdGl2ZURPTU9iamVjdC4KKyAgICBpZiAo
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQWN0aXZlRE9NT2JqZWN0In0pIHsKKyAg
ICAgICAgJERPTU9iamVjdCA9ICJBY3RpdmVET01PYmplY3QiOworICAgIH0gZWxzaWYgKElzTm9k
ZVN1YlR5cGUoJGRhdGFOb2RlKSkgeworICAgICAgICAkRE9NT2JqZWN0ID0gIkRPTU5vZGUiOwor
ICAgIH0KKyAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworCisgICAgVjhET01XcmFwcGVy
OjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksICZWOCR7aW1wbENsYXNzTmFtZX1Db25zdHJ1
Y3Rvcjo6aW5mbywgb2JqLmdldCgpKTsKKyAgICBvYmotPnJlZigpOworICAgIFY4RE9NV3JhcHBl
cjo6c2V0SlNXcmFwcGVyRm9yJHtET01PYmplY3R9KG9iai5nZXQoKSwgdjg6OlBlcnNpc3RlbnQ8
djg6Ok9iamVjdD46Ok5ldyhhcmdzLkhvbGRlcigpKSk7CisgICAgcmV0dXJuIGFyZ3MuSG9sZGVy
KCk7CitFTkQKKworICAgIGlmICgkcmFpc2VzRXhjZXB0aW9ucykgeworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgZmFpbDpcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXR1cm4gdGhyb3dFcnJvcihlYyk7XG4iKTsKKyAgICB9CisKKyAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIn1cbiIpOworCisgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKwordjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4JHtpbXBsQ2xhc3NOYW1lfUNvbnN0cnVj
dG9yOjpHZXRUZW1wbGF0ZSgpCit7CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBjYWNoZWRUZW1wbGF0ZTsKKyAgICBpZiAoIWNhY2hlZFRlbXBsYXRlLklz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZFRlbXBsYXRlOworCisgICAgdjg6OkhhbmRs
ZVNjb3BlIHNjb3BlOworICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcmVzdWx0
ID0gdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhWOCR7aW1wbENsYXNzTmFtZX1Db25zdHJ1Y3Rv
ckNhbGxiYWNrKTsKKworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IGluc3RhbmNl
ID0gcmVzdWx0LT5JbnN0YW5jZVRlbXBsYXRlKCk7CisgICAgaW5zdGFuY2UtPlNldEludGVybmFs
RmllbGRDb3VudChWOCR7aW1wbENsYXNzTmFtZX06OmludGVybmFsRmllbGRDb3VudCk7CisgICAg
cmVzdWx0LT5TZXRDbGFzc05hbWUodjg6OlN0cmluZzo6TmV3KCIke2ltcGxDbGFzc05hbWV9Iikp
OworICAgIHJlc3VsdC0+SW5oZXJpdChWOCR7aW1wbENsYXNzTmFtZX06OkdldFRlbXBsYXRlKCkp
OworCisgICAgY2FjaGVkVGVtcGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT46Ok5ldyhyZXN1bHQpOworICAgIHJldHVybiBjYWNoZWRUZW1wbGF0ZTsKK30KKworRU5E
Cit9CisKIHN1YiBHZW5lcmF0ZUJhdGNoZWRBdHRyaWJ1dGVEYXRhCiB7CiAgICAgbXkgJGRhdGFO
b2RlID0gc2hpZnQ7CkBAIC0xNjcyLDcgKzE4MTksMTIgQEAgc3ViIEdlbmVyYXRlU2luZ2xlQmF0
Y2hlZEF0dHJpYnV0ZQogICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgPX4gL0Nv
bnN0cnVjdG9yJC8pIHsKICAgICAgICAgbXkgJGNvbnN0cnVjdG9yVHlwZSA9ICRjb2RlR2VuZXJh
dG9yLT5TdHJpcE1vZHVsZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOwogICAgICAgICAk
Y29uc3RydWN0b3JUeXBlID1+IHMvQ29uc3RydWN0b3IkLy87Ci0gICAgICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCJWOCR7Y29uc3RydWN0b3JUeXBlfS5oIiwgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifSk7CisgICAgICAgICMgJGNvbnN0cnVj
dG9yVHlwZSB+PSAvQ29uc3RydWN0b3IkLyBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBOYW1lZENvbnN0
cnVjdG9yLgorICAgICAgICAjIFdlIGRvIG5vdCBnZW5lcmF0ZSB0aGUgaGVhZGVyIGZpbGUgZm9y
IE5hbWVkQ29uc3RydWN0b3Igb2YgY2xhc3MgWFhYWCwKKyAgICAgICAgIyBzaW5jZSB3ZSBnZW5l
cmF0ZSB0aGUgTmFtZWRDb25zdHJ1Y3RvciBkZWNsYXJhdGlvbiBpbnRvIHRoZSBoZWFkZXIgZmls
ZSBvZiBjbGFzcyBYWFhYLgorICAgICAgICBpZiAoJGNvbnN0cnVjdG9yVHlwZSAhfiAvQ29uc3Ry
dWN0b3IkLykgeworICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlY4JHtjb25zdHJ1Y3Rv
clR5cGV9LmgiLCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
b25kaXRpb25hbCJ9KTsKKyAgICAgICAgfQogICAgICAgICBpZiAoJGN1c3RvbUFjY2Vzc29yKSB7
CiAgICAgICAgICAgICAkZ2V0dGVyID0gIlY4JHtjdXN0b21BY2Nlc3Nvcn1BY2Nlc3NvckdldHRl
ciI7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0yMTUzLDYgKzIzMDUsOCBAQCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gJHtjbGFzc05hbWV9Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZwogfQogCiBFTkQKKyAgICB9IGVsc2lmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9yIn0gJiYgISgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJWOEN1c3RvbUNvbnN0cnVjdG9yIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifSkpIHsKKyAgICAgICAgR2VuZXJhdGVOYW1l
ZENvbnN0cnVjdG9yQ2FsbGJhY2soJGRhdGFOb2RlLT5jb25zdHJ1Y3RvciwgJGRhdGFOb2RlLCAk
aW50ZXJmYWNlTmFtZSk7CiAgICAgfSBlbHNpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ2FuQmVDb25zdHJ1Y3RlZCJ9ICYmICEoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiVjhDdXN0b21Db25zdHJ1Y3RvciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkN1c3RvbUNvbnN0cnVjdG9yIn0pKSB7CiAgICAgICAgIEdlbmVyYXRlQ29uc3RydWN0
b3JDYWxsYmFjaygkZGF0YU5vZGUtPmNvbnN0cnVjdG9yLCAkZGF0YU5vZGUsICRpbnRlcmZhY2VO
YW1lKTsKICAgICB9CkBAIC0yODYxLDcgKzMwMTUsNyBAQCBzdWIgR2V0RG9tTWFwRnVuY3Rpb24K
ICAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKICAgICBteSAkdHlwZSA9IHNoaWZ0OwogICAgIHJl
dHVybiAiZ2V0RE9NU1ZHRWxlbWVudEluc3RhbmNlTWFwKCkiIGlmICR0eXBlIGVxICJTVkdFbGVt
ZW50SW5zdGFuY2UiOwotICAgIHJldHVybiAiZ2V0RE9NTm9kZU1hcCgpIiBpZiAoSXNOb2RlU3Vi
VHlwZSgkZGF0YU5vZGUpKTsKKyAgICByZXR1cm4gImdldERPTU5vZGVNYXAoKSIgaWYgSXNOb2Rl
U3ViVHlwZSgkZGF0YU5vZGUpOwogICAgIHJldHVybiAiZ2V0QWN0aXZlRE9NT2JqZWN0TWFwKCki
IGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkFjdGl2ZURPTU9iamVjdCJ9Owog
ICAgIHJldHVybiAiZ2V0RE9NT2JqZWN0TWFwKCkiOwogfQpAQCAtMzUxOSw3ICszNjczLDYgQEAg
c3ViIFdyaXRlRGF0YQogCiAgICAgICAgICVpbXBsSW5jbHVkZXMgPSAoKTsKICAgICAgICAgQGlt
cGxGaXhlZEhlYWRlciA9ICgpOwotICAgICAgICBAaW1wbEhlYWRlckNvbnRlbnQgPSAoKTsKICAg
ICAgICAgQGltcGxDb250ZW50RGVjbHMgPSAoKTsKICAgICAgICAgQGltcGxDb250ZW50ID0gKCk7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQ
YXJzZXIucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQpp
bmRleCBkNmExYmU5MWFiZjUwMGQxZWYyYTk2OWFiNDJjZjc5YTM3MDA3YTlkLi4zNmYwZWViYmY5
ZTM5ODU4Zjc3NzEyMTViZmI3YTY0NDQwMDg4NjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQpAQCAtMTUxLDE3ICsxNTEsNDEgQEAgc3ViIHBhcnNl
RXh0ZW5kZWRBdHRyaWJ1dGVzCiAgICAgICAgICRzdHIgPX4gcy9eXHMqKFtcd1xkXSspLy87CiAK
ICAgICAgICAgaWYgKCRzdHIgPX4gL15ccyo9LykgewotICAgICAgICAgICAgIyBQYXJzZSAnPScg
dmFsdWUgfCAnPScgdmFsdWUgJywnCiAgICAgICAgICAgICAkc3RyID1+IHMvXlxzKj0vLzsKLSAg
ICAgICAgICAgIGlmICgkc3RyID1+IC9eXHMqKFteLF0qKSw/LykgewotICAgICAgICAgICAgICAg
ICRhdHRyc3skbmFtZX0gPSAkMTsKLSAgICAgICAgICAgICAgICAkYXR0cnN7JG5hbWV9ID1+IHMv
XiguKj8pXHMqJC8kMS87Ci0gICAgICAgICAgICAgICAgJHN0ciA9fiBzL15ccyooW14sXSopLD8v
LzsKKyAgICAgICAgICAgIGlmICgkbmFtZSBlcSAiTmFtZWRDb25zdHJ1Y3RvciIpIHsKKyAgICAg
ICAgICAgICAgICAjIFBhcnNlICc9JyBuYW1lICcoJyBhcmd1bWVudHMgJyknICcsJz8KKyAgICAg
ICAgICAgICAgICBpZiAoJHN0ciA9fiAvXlxzKihbXHdcZF0rKS8pIHsKKyAgICAgICAgICAgICAg
ICAgICAgIyBGb3Igbm93IGlnbm9yZSB0aGUgbmFtZSwgc2luY2UgdGhlIG5hbWUgaXMgbWFuYWdl
ZCBpbiBET01XaW5kb3cuaWRsLgorICAgICAgICAgICAgICAgICAgICAkc3RyID1+IHMvXlxzKihb
XHdcZF0rKS8vOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoJHN0ciA9
fiAvXlxzKlwoLykgeworICAgICAgICAgICAgICAgICAgICAjIFBhcnNlICcoJyBhcmd1bWVudHMg
JyknICcsJz8KKyAgICAgICAgICAgICAgICAgICAgJHN0ciA9fiBzL15ccypcKC8vOworICAgICAg
ICAgICAgICAgICAgICBpZiAoJHN0ciA9fiAvXihbXildKilcKSw/LykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgJGF0dHJzeyRuYW1lfSA9ICQxOworICAgICAgICAgICAgICAgICAgICAgICAg
JGF0dHJzeyRuYW1lfSA9fiBzL14oLio/KVxzKiQvJDEvOworICAgICAgICAgICAgICAgICAgICAg
ICAgJHN0ciA9fiBzL14oW14pXSopXCksPy8vOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgZGllKCJJbnZhbGlkIGV4dGVuZGVkIGF0dHJpYnV0
ZTogJyRzdHInXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0g
ZWxzaWYgKCRzdHIgPX4gL15ccyosPy8pIHsKKyAgICAgICAgICAgICAgICAgICAgJGF0dHJzeyRu
YW1lfSA9ICIiOworICAgICAgICAgICAgICAgICAgICAkc3RyID1+IHMvXlxzKiw/Ly87CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGllKCJJbnZhbGlkIGV4
dGVuZGVkIGF0dHJpYnV0ZTogJyRzdHInXG4iKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRpZSgiSW52YWxpZCBleHRlbmRlZCBhdHRy
aWJ1dGU6ICckc3RyJ1xuIik7CisgICAgICAgICAgICAgICAgIyBQYXJzZSAnPScgdmFsdWUgJywn
PworICAgICAgICAgICAgICAgIGlmICgkc3RyID1+IC9eXHMqKFteLF0qKSw/LykgeworICAgICAg
ICAgICAgICAgICAgICAkYXR0cnN7JG5hbWV9ID0gJDE7CisgICAgICAgICAgICAgICAgICAgICRh
dHRyc3skbmFtZX0gPX4gcy9eKC4qPylccyokLyQxLzsKKyAgICAgICAgICAgICAgICAgICAgJHN0
ciA9fiBzL15ccyooW14sXSopLD8vLzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBkaWUoIkludmFsaWQgZXh0ZW5kZWQgYXR0cmlidXRlOiAnJHN0cidcbiIp
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNpZiAoJHN0
ciA9fiAvXlxzKlwoLykgewotICAgICAgICAgICAgIyBQYXJzZSAnKCcgYXJndW1lbnRzICcpJyB8
ICcoJyBhcmd1bWVudHMgJyknICcsJworICAgICAgICAgICAgIyBQYXJzZSAnKCcgYXJndW1lbnRz
ICcpJyAnLCc/CiAgICAgICAgICAgICAkc3RyID1+IHMvXlxzKlwoLy87CiAgICAgICAgICAgICBp
ZiAoJHN0ciA9fiAvXihbXildKilcKSw/LykgewogICAgICAgICAgICAgICAgICRhdHRyc3skbmFt
ZX0gPSAkMTsKQEAgLTI1OSw2ICsyODMsMTQgQEAgc3ViIFBhcnNlSW50ZXJmYWNlCiAgICAgICAg
ICAgICBwYXJzZVBhcmFtZXRlcnMoJG5ld0RhdGFOb2RlLCAkZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkNvbnN0cnVjdG9yIn0pOwogICAgICAgICAgICAgJGV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25z
dHJ1Y3RvciJ9ID0gMTsKICAgICAgICAgICAgICRkYXRhTm9kZS0+Y29uc3RydWN0b3IoJG5ld0Rh
dGFOb2RlKTsKKyAgICAgICAgfSBlbHNpZiAoZGVmaW5lZCAkZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Ik5hbWVkQ29uc3RydWN0b3IifSkgeworICAgICAgICAgICAgbXkgJG5ld0RhdGFOb2RlID0gbmV3
IGRvbUZ1bmN0aW9uKCk7CisgICAgICAgICAgICAkbmV3RGF0YU5vZGUtPnNpZ25hdHVyZShuZXcg
ZG9tU2lnbmF0dXJlKCkpOworICAgICAgICAgICAgJG5ld0RhdGFOb2RlLT5zaWduYXR1cmUtPm5h
bWUoIk5hbWVkQ29uc3RydWN0b3IiKTsKKyAgICAgICAgICAgICRuZXdEYXRhTm9kZS0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlcyk7CisgICAgICAgICAg
ICBwYXJzZVBhcmFtZXRlcnMoJG5ld0RhdGFOb2RlLCAkZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5h
bWVkQ29uc3RydWN0b3IifSk7CisgICAgICAgICAgICAkZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5h
bWVkQ29uc3RydWN0b3IifSA9IDE7CisgICAgICAgICAgICAkZGF0YU5vZGUtPmNvbnN0cnVjdG9y
KCRuZXdEYXRhTm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0
TmFtZWRDb25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjBjMzc3N2JmNGNmNjIyNjliNDRlZTc2
NjZhNTUxMDcxZjNlOTc5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCkBAIC0w
LDAgKzEsODIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IuaCIKKworI2luY2x1ZGUgIlRlc3ROYW1l
ZENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgorI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK3N0cnVjdCBXZWJE
T01UZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6V2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2YXRl
IHsKKyAgICBXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGUoV2ViQ29yZTo6VGVzdE5h
bWVkQ29uc3RydWN0b3IqIG9iamVjdCA9IDApCisgICAgICAgIDogaW1wbChvYmplY3QpCisgICAg
eworICAgIH0KKworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4gaW1w
bDsKK307CisKK1dlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yOjpXZWJET01UZXN0TmFtZWRDb25z
dHJ1Y3RvcigpCisgICAgOiBXZWJET01PYmplY3QoKQorICAgICwgbV9pbXBsKDApCit7Cit9CisK
K1dlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yOjpXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3RvcihX
ZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3RvciogaW1wbCkKKyAgICA6IFdlYkRPTU9iamVjdCgp
CisgICAgLCBtX2ltcGwobmV3IFdlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZShpbXBs
KSkKK3sKK30KKworV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3I6OldlYkRPTVRlc3ROYW1lZENv
bnN0cnVjdG9yKGNvbnN0IFdlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yJiBjb3B5KQorICAgIDog
V2ViRE9NT2JqZWN0KCkKK3sKKyAgICBtX2ltcGwgPSBjb3B5LmltcGwoKSA/IG5ldyBXZWJET01U
ZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGUoY29weS5pbXBsKCkpIDogMDsKK30KKworV2ViRE9N
VGVzdE5hbWVkQ29uc3RydWN0b3ImIFdlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yOjpvcGVyYXRv
cj0oY29uc3QgV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3ImIGNvcHkpCit7CisgICAgZGVsZXRl
IG1faW1wbDsKKyAgICBtX2ltcGwgPSBjb3B5LmltcGwoKSA/IG5ldyBXZWJET01UZXN0TmFtZWRD
b25zdHJ1Y3RvclByaXZhdGUoY29weS5pbXBsKCkpIDogMDsKKyAgICByZXR1cm4gKnRoaXM7Cit9
CisKK1dlYkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9yKiBXZWJET01UZXN0TmFtZWRDb25zdHJ1
Y3Rvcjo6aW1wbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+aW1wbC5n
ZXQoKSA6IDA7Cit9CisKK1dlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yOjp+V2ViRE9NVGVzdE5h
bWVkQ29uc3RydWN0b3IoKQoreworICAgIGRlbGV0ZSBtX2ltcGw7CisgICAgbV9pbXBsID0gMDsK
K30KKworV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqIHRvV2ViQ29yZShjb25zdCBXZWJE
T01UZXN0TmFtZWRDb25zdHJ1Y3RvciYgd3JhcHBlcikKK3sKKyAgICByZXR1cm4gd3JhcHBlci5p
bXBsKCk7Cit9CisKK1dlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yIHRvV2ViS2l0KFdlYkNvcmU6
OlRlc3ROYW1lZENvbnN0cnVjdG9yKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gV2ViRE9NVGVzdE5h
bWVkQ29uc3RydWN0b3IodmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0TmFtZWRDb25z
dHJ1Y3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0NWRhYTc2MWM5MmJlMjYyNTZlYjRhZDk0YjNlMmE5NTcw
NzM4MWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvQ1BQL1dlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw1MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CisgKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3JfaAorI2RlZmluZSBXZWJE
T01UZXN0TmFtZWRDb25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlIDxXZWJET01PYmplY3QuaD4KKyNp
bmNsdWRlIDxXZWJET01TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVGVz
dE5hbWVkQ29uc3RydWN0b3I7Cit9OworCisKK2NsYXNzIFdlYkRPTVRlc3ROYW1lZENvbnN0cnVj
dG9yIDogcHVibGljIFdlYkRPTU9iamVjdCB7CitwdWJsaWM6CisgICAgV2ViRE9NVGVzdE5hbWVk
Q29uc3RydWN0b3IoKTsKKyAgICBleHBsaWNpdCBXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3RvcihX
ZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3RvciopOworICAgIFdlYkRPTVRlc3ROYW1lZENvbnN0
cnVjdG9yKGNvbnN0IFdlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yJik7CisgICAgV2ViRE9NVGVz
dE5hbWVkQ29uc3RydWN0b3ImIG9wZXJhdG9yPShjb25zdCBXZWJET01UZXN0TmFtZWRDb25zdHJ1
Y3RvciYpOworICAgIHZpcnR1YWwgfldlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yKCk7CisKKwor
ICAgIFdlYkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9yKiBpbXBsKCkgY29uc3Q7CisKK3Byb3Rl
Y3RlZDoKKyAgICBzdHJ1Y3QgV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2YXRlOworICAg
IFdlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZSogbV9pbXBsOworfTsKKworV2ViQ29y
ZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqIHRvV2ViQ29yZShjb25zdCBXZWJET01UZXN0TmFtZWRD
b25zdHJ1Y3RvciYpOworV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IgdG9XZWJLaXQoV2ViQ29y
ZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRD
b25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjA0MTcy
OTc5MDFmOGY1OGRlNmU5OGRkNjJmM2NmM2M1ZWM2YzI5ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RO
YW1lZENvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAgICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVk
ZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVk
ZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCisjaW5jbHVkZSAiVGVzdE5hbWVkQ29uc3RydWN0
b3IuaCIKKyNpbmNsdWRlICJXZWJLaXRET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiZ29iamVjdC9D
b252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRlc3ROYW1l
ZENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0
cnVjdG9yUHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIKKyNpbmNsdWRlICJ3
ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisgICAgCitXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcioga2l0
KFdlYkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9yKiBvYmopCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwob2JqLCAwKTsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNo
ZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRET01UZXN0TmFt
ZWRDb25zdHJ1Y3Rvcio+KHJldCk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0RE9N
VGVzdE5hbWVkQ29uc3RydWN0b3IqPihET01PYmplY3RDYWNoZTo6cHV0KG9iaiwgV2ViS2l0Ojp3
cmFwVGVzdE5hbWVkQ29uc3RydWN0b3Iob2JqKSkpOworfQorICAgIAorfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0IC8vCisKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rv
ciwgd2Via2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yLCBXRUJLSVRfVFlQRV9ET01fT0JK
RUNUKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0
b3IqIGNvcmUoV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IqIHJlcXVlc3QpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwocmVxdWVzdCwgMCk7CisKKyAgICBXZWJDb3JlOjpUZXN0TmFt
ZWRDb25zdHJ1Y3RvciogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3ROYW1l
ZENvbnN0cnVjdG9yKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAgcmV0dXJuIGNv
cmVPYmplY3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorZW51bSB7CisgICAgUFJPUF8w
LAorfTsKKworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3Jf
ZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTU9iamVjdCogZG9tX29i
amVjdCA9IFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCk7CisgICAgCisgICAgaWYgKGRvbV9vYmpl
Y3QtPmNvcmVPYmplY3QpIHsKKyAgICAgICAgV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3Iq
IGNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3RvciAq
Pihkb21fb2JqZWN0LT5jb3JlT2JqZWN0KTsKKworICAgICAgICBXZWJLaXQ6OkRPTU9iamVjdENh
Y2hlOjpmb3JnZXQoY29yZU9iamVjdCk7CisgICAgICAgIGNvcmVPYmplY3QtPmRlcmVmKCk7CisK
KyAgICAgICAgZG9tX29iamVjdC0+Y29yZU9iamVjdCA9IE5VTEw7CisgICAgfQorCisgICAgR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yX3BhcmVudF9jbGFz
cyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9u
YW1lZF9jb25zdHJ1Y3Rvcl9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
X2lkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgc3dpdGNoIChwcm9wX2lkKSB7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yX2dldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfbmFtZWRf
Y29uc3RydWN0b3JfY29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQoreworCisgICAgaWYgKEdf
T0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9wYXJlbnRfY2xh
c3MpLT5jb25zdHJ1Y3RlZCkKKyAgICAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0
X25hbWVkX2NvbnN0cnVjdG9yX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKG9iamVjdCk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9jbGFzc19p
bml0KFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sK
KyAgICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RD
bGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9uYW1l
ZF9jb25zdHJ1Y3Rvcl9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9
IHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9zZXRfcHJvcGVydHk7CisgICAgZ29i
amVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0
b3JfZ2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRf
ZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3JfY29uc3RydWN0ZWQ7CisKKworCit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9pbml0KFdlYktpdERPTVRl
c3ROYW1lZENvbnN0cnVjdG9yKiByZXF1ZXN0KQoreworfQorCituYW1lc3BhY2UgV2ViS2l0IHsK
K1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yKiB3cmFwVGVzdE5hbWVkQ29uc3RydWN0b3Io
V2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqIGNvcmVPYmplY3QpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7CisKKyAgICAvKiBXZSBjYWxsIHJlZigpIHJh
dGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9y
ZSBhIEMrKyBvYmplY3QKKyAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJl
LiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQorICAgICAqIG1hdGNoaW5nIGRlcmVm
KCkuCisgICAgICovCisgICAgY29yZU9iamVjdC0+cmVmKCk7CisKKyAgICByZXR1cm4gIFdFQktJ
VF9ET01fVEVTVF9OQU1FRF9DT05TVFJVQ1RPUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9N
X1RFU1RfTkFNRURfQ09OU1RSVUNUT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKK30KK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RO
YW1lZENvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjBmOWMyNzhmMDA0OGMyNDkwNzY1N2JhMDdh
NTEwMjBkYzUzNzBhZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmgKQEAg
LTAsMCArMSw1MSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFdlYktpdERP
TVRlc3ROYW1lZENvbnN0cnVjdG9yX2gKKyNkZWZpbmUgV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3Ry
dWN0b3JfaAorCisjaW5jbHVkZSAid2Via2l0L3dlYmtpdGRvbWRlZmluZXMuaCIKKyNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CisjaW5j
bHVkZSAid2Via2l0L1dlYktpdERPTU9iamVjdC5oIgorCisKK0dfQkVHSU5fREVDTFMKKyNkZWZp
bmUgV0VCS0lUX1RZUEVfRE9NX1RFU1RfTkFNRURfQ09OU1RSVUNUT1IgICAgICAgICAgICAod2Vi
a2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fVEVTVF9OQU1FRF9DT05TVFJVQ1RPUihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9ET01fVEVTVF9OQU1FRF9DT05TVFJV
Q1RPUiwgV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IpKQorI2RlZmluZSBXRUJLSVRfRE9N
X1RFU1RfTkFNRURfQ09OU1RSVUNUT1JfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfTkFNRURfQ09OU1RSVUNUT1Is
IFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfVEVTVF9OQU1FRF9DT05TVFJVQ1RPUihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9ET01fVEVTVF9OQU1FRF9DT05TVFJVQ1RPUikp
CisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9OQU1FRF9DT05TVFJVQ1RPUl9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9ET01fVEVT
VF9OQU1FRF9DT05TVFJVQ1RPUikpCisjZGVmaW5lIFdFQktJVF9ET01fVEVTVF9OQU1FRF9DT05T
VFJVQ1RPUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiks
ICBXRUJLSVRfVFlQRV9ET01fVEVTVF9OQU1FRF9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdE5h
bWVkQ29uc3RydWN0b3JDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3Ry
dWN0b3IgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1
Y3QgX1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yQ2xhc3MgeworICAgIFdlYktpdERPTU9i
amVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9k
b21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9nZXRfdHlwZSAodm9pZCk7CisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZiAvKiBXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcl9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmI1ODUxNzFjMjBlOTZhOTAyODg3ZmM5NjhjOWU5NjU5ZjM5OTMyM2UK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGUuaApAQCAtMCwwICsx
LDM5IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgV0VCX0tJVF9ET01fVEVT
VF9OQU1FRF9DT05TVFJVQ1RPUl9QUklWQVRFX0gKKyNkZWZpbmUgV0VCX0tJVF9ET01fVEVTVF9O
QU1FRF9DT05TVFJVQ1RPUl9QUklWQVRFX0gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0L1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgIlRlc3ROYW1lZENv
bnN0cnVjdG9yLmgiCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICBXZWJLaXRET01UZXN0TmFtZWRD
b25zdHJ1Y3RvciAqCisgICAgd3JhcFRlc3ROYW1lZENvbnN0cnVjdG9yKFdlYkNvcmU6OlRlc3RO
YW1lZENvbnN0cnVjdG9yICpjb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OlRlc3ROYW1lZENv
bnN0cnVjdG9yICoKKyAgICBjb3JlKFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yICpyZXF1
ZXN0KTsKKworICAgIFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yKgorICAgIGtpdChXZWJD
b3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3Rvciogbm9kZSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLyogV0VCX0tJVF9ET01fVEVTVF9OQU1FRF9DT05TVFJVQ1RPUl9QUklWQVRF
X0ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNGIy
MGY5ODZkNjRlNDg1NDQzMjAxZjI4M2ZmYzNmY2Y5NzNiOWQxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3Ry
dWN0b3IuY3BwCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmgiCisK
KyNpbmNsdWRlICJUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitBU1NF
UlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTVGVzdE5hbWVkQ29uc3RydWN0b3IpOworCisvKiBIYXNo
IHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLworI2lmIEVOQUJMRShKSVQpCisjZGVmaW5lIFRIVU5L
X0dFTkVSQVRPUihnZW5lcmF0b3IpICwgZ2VuZXJhdG9yCisjZWxzZQorI2RlZmluZSBUSFVOS19H
RU5FUkFUT1IoZ2VuZXJhdG9yKQorI2VuZGlmCisjaWYgRU5BQkxFKERGR19KSVQpCisjZGVmaW5l
IElOVFJJTlNJQyhpbnRyaW5zaWMpICwgaW50cmluc2ljCisjZWxzZQorI2RlZmluZSBJTlRSSU5T
SUMoaW50cmluc2ljKQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rl
c3ROYW1lZENvbnN0cnVjdG9yVGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAiY29uc3RydWN0b3Ii
LCBEb250RW51bSB8IFJlYWRPbmx5LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvciksIChpbnRw
dHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSBJTlRSSU5TSUMoREZHOjpOb0ludHJpbnNpYykgfSwK
KyAgICB7IDAsIDAsIDAsIDAgVEhVTktfR0VORVJBVE9SKDApIElOVFJJTlNJQyhERkc6Ok5vSW50
cmluc2ljKSB9Cit9OworCisjdW5kZWYgVEhVTktfR0VORVJBVE9SCitzdGF0aWMgSlNDX0NPTlNU
X0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclRhYmxlID0geyAyLCAx
LCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yVGFibGVWYWx1ZXMsIDAgfTsKKy8qIEhhc2ggdGFibGUg
Zm9yIGNvbnN0cnVjdG9yICovCisjaWYgRU5BQkxFKEpJVCkKKyNkZWZpbmUgVEhVTktfR0VORVJB
VE9SKGdlbmVyYXRvcikgLCBnZW5lcmF0b3IKKyNlbHNlCisjZGVmaW5lIFRIVU5LX0dFTkVSQVRP
UihnZW5lcmF0b3IpCisjZW5kaWYKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyNkZWZpbmUgSU5UUklO
U0lDKGludHJpbnNpYykgLCBpbnRyaW5zaWMKKyNlbHNlCisjZGVmaW5lIElOVFJJTlNJQyhpbnRy
aW5zaWMpCisjZW5kaWYKKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE5hbWVk
Q29uc3RydWN0b3JDb25zdHJ1Y3RvclRhYmxlVmFsdWVzW10gPQoreworICAgIHsgMCwgMCwgMCwg
MCBUSFVOS19HRU5FUkFUT1IoMCkgSU5UUklOU0lDKERGRzo6Tm9JbnRyaW5zaWMpIH0KK307CisK
KyN1bmRlZiBUSFVOS19HRU5FUkFUT1IKK3N0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hU
YWJsZSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3JUYWJsZSA9IHsgMSwgMCwgSlNU
ZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsIDAgfTsKK2NvbnN0IENs
YXNzSW5mbyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRl
c3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IiLCAmRE9NQ29uc3RydWN0b3JPYmplY3Q6OnNf
aW5mbywgJkpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvclRhYmxlLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvcikgfTsKKworSlNU
ZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29u
c3RydWN0b3IoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCisgICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVj
dCkKK3sKK30KKwordm9pZCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAg
IEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0TmFtZWRDb25zdHJ1
Y3RvclByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpOworfQorCitib29sIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Z2V0
T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICByZXR1cm4g
Z2V0U3RhdGljVmFsdWVTbG90PEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvciwgSlNE
T01XcmFwcGVyPihleGVjLCAmSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yVGFibGUs
IHN0YXRpY19jYXN0PEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcio+KGNlbGwpLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25z
dHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Ip
Cit7CisgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yQ29uc3RydWN0b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgJkpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3JDb25zdHJ1Y3RvclRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwor
fQorCisvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKyNpZiBFTkFCTEUoSklUKQorI2Rl
ZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKSAsIGdlbmVyYXRvcgorI2Vsc2UKKyNkZWZp
bmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikKKyNlbmRpZgorI2lmIEVOQUJMRShERkdfSklU
KQorI2RlZmluZSBJTlRSSU5TSUMoaW50cmluc2ljKSAsIGludHJpbnNpYworI2Vsc2UKKyNkZWZp
bmUgSU5UUklOU0lDKGludHJpbnNpYykKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgSGFzaFRhYmxl
VmFsdWUgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQorewor
ICAgIHsgMCwgMCwgMCwgMCBUSFVOS19HRU5FUkFUT1IoMCkgSU5UUklOU0lDKERGRzo6Tm9JbnRy
aW5zaWMpIH0KK307CisKKyN1bmRlZiBUSFVOS19HRU5FUkFUT1IKK3N0YXRpYyBKU0NfQ09OU1Rf
SEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlVGFibGUg
PSB7IDEsIDAsIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9
OworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OnNfaW5m
byA9IHsgIlRlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlIiwgJkpTQzo6SlNOb25GaW5hbE9i
amVjdDo6c19pbmZvLCAmSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUpIH07CisK
K0pTT2JqZWN0KiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpzZWxmKEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0
RE9NUHJvdG90eXBlPEpTVGVzdE5hbWVkQ29uc3RydWN0b3I+KGV4ZWMsIGdsb2JhbE9iamVjdCk7
Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpzX2luZm8gPSB7
ICJUZXN0TmFtZWRDb25zdHJ1Y3RvciIsICZKU0RPTVdyYXBwZXI6OnNfaW5mbywgJkpTVGVzdE5h
bWVkQ29uc3RydWN0b3JUYWJsZSwgMCAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0TmFtZWRD
b25zdHJ1Y3RvcikgfTsKKworSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6SlNUZXN0TmFtZWRDb25z
dHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUGFzc1JlZlB0cjxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4gaW1wbCkKKyAgICA6IEpTRE9N
V3JhcHBlcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKKyAgICAsIG1faW1wbChpbXBsKQorewor
fQorCit2b2lkIEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRh
KTsKKyAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworfQorCitKU09iamVjdCogSlNUZXN0
TmFtZWRDb25zdHJ1Y3Rvcjo6Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0TmFtZWRDb25zdHJ1
Y3RvclByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBK
U1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90
b3R5cGUoKSkpOworfQorCitib29sIEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OmdldE93blByb3Bl
cnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNUZXN0TmFtZWRDb25z
dHJ1Y3RvciogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdE5hbWVkQ29uc3RydWN0b3Iq
PihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2lu
Zm8pOworICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rv
ciwgQmFzZT4oZXhlYywgJkpTVGVzdE5hbWVkQ29uc3RydWN0b3JUYWJsZSwgdGhpc09iamVjdCwg
cHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXMsICZzX2luZm8pOworICAgIHJldHVybiBnZXRT
dGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNUZXN0TmFtZWRDb25zdHJ1Y3RvciwgQmFzZT4oZXhlYywg
JkpTVGVzdE5hbWVkQ29uc3RydWN0b3JUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlw
dG9yKTsKK30KKworSlNWYWx1ZSBqc1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAg
ICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKiBkb21PYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKKyAgICByZXR1cm4gSlNUZXN0
TmFtZWRDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3IoZXhlYywgZG9tT2JqZWN0LT5nbG9iYWxP
YmplY3QoKSk7Cit9CisKK0pTVmFsdWUgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorewor
ICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3I+KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0
KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc09ic2VydmFibGUoSlNUZXN0TmFtZWRDb25z
dHJ1Y3RvcioganNUZXN0TmFtZWRDb25zdHJ1Y3RvcikKK3sKKyAgICBpZiAoanNUZXN0TmFtZWRD
b25zdHJ1Y3Rvci0+aGFzQ3VzdG9tUHJvcGVydGllcygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEpTVGVzdE5hbWVkQ29u
c3RydWN0b3IqIGpzVGVzdE5hbWVkQ29uc3RydWN0b3IgPSBzdGF0aWNfY2FzdDxKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yKj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAgICBpZiAoanNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvci0+aW1wbCgpLT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgaWYgKCFpc09ic2VydmFibGUoanNUZXN0TmFtZWRDb25zdHJ1Y3Rvcikp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JPd25lcjo6Zmlu
YWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCit7
CisgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvcioganNUZXN0TmFtZWRDb25zdHJ1Y3RvciA9IHN0
YXRpY19jYXN0PEpTVGVzdE5hbWVkQ29uc3RydWN0b3IqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkp
OworICAgIERPTVdyYXBwZXJXb3JsZCogd29ybGQgPSBzdGF0aWNfY2FzdDxET01XcmFwcGVyV29y
bGQqPihjb250ZXh0KTsKKyAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwganNUZXN0TmFtZWRDb25z
dHJ1Y3Rvci0+aW1wbCgpLCBqc1Rlc3ROYW1lZENvbnN0cnVjdG9yKTsKK30KKworSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFRlc3ROYW1lZENvbnN0cnVjdG9yKiBpbXBsKQoreworICAgIHJldHVybiB3cmFwPEpT
VGVzdE5hbWVkQ29uc3RydWN0b3I+KGV4ZWMsIGdsb2JhbE9iamVjdCwgaW1wbCk7Cit9CisKK1Rl
c3ROYW1lZENvbnN0cnVjdG9yKiB0b1Rlc3ROYW1lZENvbnN0cnVjdG9yKEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUuaW5oZXJpdHMoJkpTVGVzdE5hbWVkQ29uc3RydWN0
b3I6OnNfaW5mbykgPyBzdGF0aWNfY2FzdDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKj4oYXNPYmpl
Y3QodmFsdWUpKS0+aW1wbCgpIDogMDsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVj
dG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMzI1NWM2MjI5MzQ0NzEzNjhiZTMyZDdhYzFhOTJjOTZlYWFkOGJl
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAg
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yX2gKKyNkZWZp
bmUgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
KyNpbmNsdWRlICJUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+CisjaW5jbHVkZSA8
cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yIDogcHVibGljIEpTRE9NV3JhcHBlciB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU0RPTVdyYXBwZXIgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0TmFtZWRD
b25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8VGVzdE5hbWVkQ29uc3RydWN0b3I+IGlt
cGwpCisgICAgeworICAgICAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKEpT
Qzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkQ29uc3RydWN0b3I+KGdsb2JhbE9iamVjdC0+Z2xv
YmFsRGF0YSgpLmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFs
T2JqZWN0LCBpbXBsKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3Qt
Pmdsb2JhbERhdGEoKSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGlj
IEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNH
bG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpK
U0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgY29uc3QgSlND
OjpDbGFzc0luZm8gc19pbmZvOworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCAmc19pbmZvKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIFRlc3ROYW1l
ZENvbnN0cnVjdG9yKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CisKK3By
aXZhdGU6CisgICAgUmVmUHRyPFRlc3ROYW1lZENvbnN0cnVjdG9yPiBtX2ltcGw7Citwcm90ZWN0
ZWQ6CisgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xv
YmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4pOworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEmKTsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworfTsKKworY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rv
ck93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6
ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKK307CisKK2lubGlu
ZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCosIFRl
c3ROYW1lZENvbnN0cnVjdG9yKikKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEpTVGVzdE5h
bWVkQ29uc3RydWN0b3JPd25lciwganNUZXN0TmFtZWRDb25zdHJ1Y3Rvck93bmVyLCAoKSk7Cisg
ICAgcmV0dXJuICZqc1Rlc3ROYW1lZENvbnN0cnVjdG9yT3duZXI7Cit9CisKK2lubGluZSB2b2lk
KiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVyV29ybGQqIHdvcmxkLCBUZXN0TmFtZWRDb25zdHJ1
Y3RvciopCit7CisgICAgcmV0dXJuIHdvcmxkOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5hbWVkQ29uc3RydWN0b3IqKTsK
K1Rlc3ROYW1lZENvbnN0cnVjdG9yKiB0b1Rlc3ROYW1lZENvbnN0cnVjdG9yKEpTQzo6SlNWYWx1
ZSk7CisKK2NsYXNzIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUgOiBwdWJsaWMgSlND
OjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5h
bE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICB7CisgICAgICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUqIHB0ciA9
IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZT4o
Z2xvYmFsRGF0YS5oZWFwKSkgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZShnbG9iYWxE
YXRhLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGlj
IGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yUHJvdG90eXBlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmlu
YWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKSB7IH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsK
K307CisKK2NsYXNzIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvciA6IHB1YmxpYyBE
T01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0
b3JDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7
CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAg
c3RhdGljIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNv
bnN0cnVjdG9yKiBwdHIgPSBuZXcgKEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3JDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JD
b25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24oZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9
CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7
CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7Cisg
ICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0
YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JP
YmplY3Q6OlN0cnVjdHVyZUZsYWdzOworfTsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkpTVmFs
dWUganNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9PYmpDL0RPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmVhMjNhZGRiNzMwNTVkMDkyOWVjMzZlODMxNmY5OTE3MDI4OWY5YTMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01U
ZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53
ZWluaWdAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxXZWJDb3JlL0RPTU9iamVjdC5oPgor
CisjaWYgV0VCS0lUX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gV0VCS0lUX1ZFUlNJT05fTEFURVNU
CisKK0BpbnRlcmZhY2UgRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IgOiBET01PYmplY3QKK0BlbmQK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvT2JqQy9ET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5tbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3ROYW1lZENvbnN0cnVjdG9yLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjk2MmNlODk0MWJjMjRjZmU5NTEwMWJjMGZkM2QzMzIwNGYxN2E5ZTkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
TmFtZWRDb25zdHJ1Y3Rvci5tbQpAQCAtMCwwICsxLDg3IEBACisvKgorICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJET01JbnRlcm5hbC5oIgorCisj
aW1wb3J0ICJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5oIgorCisjaW1wb3J0ICJET01CbG9iSW50
ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTUNTU1J1bGVJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NQ1NT
VmFsdWVJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NRXZlbnRJbnRlcm5hbC5oIgorI2ltcG9ydCAi
RE9NTm9kZUludGVybmFsLmgiCisjaW1wb3J0ICJET01TdHlsZVNoZWV0SW50ZXJuYWwuaCIKKyNp
bXBvcnQgIkRPTVRlc3ROYW1lZENvbnN0cnVjdG9ySW50ZXJuYWwuaCIKKyNpbXBvcnQgIkV4Y2Vw
dGlvbkhhbmRsZXJzLmgiCisjaW1wb3J0ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKKyNpbXBv
cnQgIlRlc3ROYW1lZENvbnN0cnVjdG9yLmgiCisjaW1wb3J0ICJUaHJlYWRDaGVjay5oIgorI2lt
cG9ydCAiV2ViQ29yZU9iakNFeHRyYXMuaCIKKyNpbXBvcnQgIldlYlNjcmlwdE9iamVjdFByaXZh
dGUuaCIKKyNpbXBvcnQgPHd0Zi9HZXRQdHIuaD4KKworI2RlZmluZSBJTVBMIHJlaW50ZXJwcmV0
X2Nhc3Q8V2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqPihfaW50ZXJuYWwpCisKK0BpbXBs
ZW1lbnRhdGlvbiBET01UZXN0TmFtZWRDb25zdHJ1Y3RvcgorCistICh2b2lkKWRlYWxsb2MKK3sK
KyAgICBpZiAoV2ViQ29yZU9iakNTY2hlZHVsZURlYWxsb2NhdGVPbk1haW5UaHJlYWQoW0RPTVRl
c3ROYW1lZENvbnN0cnVjdG9yIGNsYXNzXSwgc2VsZikpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChfaW50ZXJuYWwpCisgICAgICAgIElNUEwtPmRlcmVmKCk7CisgICAgW3N1cGVyIGRlYWxs
b2NdOworfQorCistICh2b2lkKWZpbmFsaXplCit7CisgICAgaWYgKF9pbnRlcm5hbCkKKyAgICAg
ICAgSU1QTC0+ZGVyZWYoKTsKKyAgICBbc3VwZXIgZmluYWxpemVdOworfQorCitAZW5kCisKK1dl
YkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9yKiBjb3JlKERPTVRlc3ROYW1lZENvbnN0cnVjdG9y
ICp3cmFwcGVyKQoreworICAgIHJldHVybiB3cmFwcGVyID8gcmVpbnRlcnByZXRfY2FzdDxXZWJD
b3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3Rvcio+KHdyYXBwZXItPl9pbnRlcm5hbCkgOiAwOworfQor
CitET01UZXN0TmFtZWRDb25zdHJ1Y3RvciAqa2l0KFdlYkNvcmU6OlRlc3ROYW1lZENvbnN0cnVj
dG9yKiB2YWx1ZSkKK3sKKyAgICB7IERPTV9BU1NFUlRfTUFJTl9USFJFQUQoKTsgV2ViQ29yZVRo
cmVhZFZpb2xhdGlvbkNoZWNrUm91bmRPbmUoKTsgfTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIGlmIChET01UZXN0TmFtZWRDb25zdHJ1Y3RvciAqd3JhcHBlciA9
IGdldERPTVdyYXBwZXIodmFsdWUpKQorICAgICAgICByZXR1cm4gW1t3cmFwcGVyIHJldGFpbl0g
YXV0b3JlbGVhc2VdOworICAgIERPTVRlc3ROYW1lZENvbnN0cnVjdG9yICp3cmFwcGVyID0gW1tE
T01UZXN0TmFtZWRDb25zdHJ1Y3RvciBhbGxvY10gX2luaXRdOworICAgIHdyYXBwZXItPl9pbnRl
cm5hbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RE9NT2JqZWN0SW50ZXJuYWwqPih2YWx1ZSk7CisgICAg
dmFsdWUtPnJlZigpOworICAgIGFkZERPTVdyYXBwZXIod3JhcHBlciwgdmFsdWUpOworICAgIHJl
dHVybiBbd3JhcHBlciBhdXRvcmVsZWFzZV07Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0TmFtZWRDb25zdHJ1Y3RvckludGVy
bmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
TmFtZWRDb25zdHJ1Y3RvckludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWI0OTA0YjI3NWU4OTdhZDJm
Yzg0OWRiNzBkOWE4YmE4ZDI4MzVmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3ROYW1lZENvbnN0cnVjdG9ySW50ZXJu
YWwuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9y
dCA8V2ViQ29yZS9ET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5oPgorCisjaWYgV0VCS0lUX1ZFUlNJ
T05fTUFYX0FMTE9XRUQgPj0gV0VCS0lUX1ZFUlNJT05fTEFURVNUCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKyAgICBjbGFzcyBUZXN0TmFtZWRDb25zdHJ1Y3RvcjsKK30KKworV2ViQ29yZTo6VGVz
dE5hbWVkQ29uc3RydWN0b3IqIGNvcmUoRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IgKik7CitET01U
ZXN0TmFtZWRDb25zdHJ1Y3RvciAqa2l0KFdlYkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9yKik7
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3ROYW1lZENvbnN0cnVjdG9yLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0TmFtZWRDb25zdHJ1Y3Rvci5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDQyYWQ1ODIy
NGFjYTllMDRkZjA2YmIwNTVmOWI5MDJkY2IxZWI5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0TmFtZWRDb25zdHJ1Y3Rvci5pZGwK
QEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXN0ckFyZywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVzdHJBcmcsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBUaGlzIElETCBmaWxlIGlzIGZvciB0ZXN0
aW5nIHRoZSBiaW5kaW5ncyBjb2RlIGdlbmVyYXRvciBhbmQgZm9yIHRyYWNraW5nCisvLyBjaGFu
Z2VzIGluIGl0cyBvdXB1dC4KK21vZHVsZSB0ZXN0IHsKKyAgICBpbnRlcmZhY2UgWworICAgICAg
ICBBY3RpdmVET01PYmplY3QsCisgICAgICAgIE5hbWVkQ29uc3RydWN0b3IoaW4gRE9NU3RyaW5n
IHN0cjEsIGluIFtPcHRpb25hbD1DYWxsV2l0aERlZmF1bHRWYWx1ZV0gRE9NU3RyaW5nIHN0cjIs
IGluIFtPcHRpb25hbD1DYWxsV2l0aE51bGxWYWx1ZV0gRE9NU3RyaW5nIHN0cjMpLAorICAgICAg
ICBDb25zdHJ1Y3RvclJhaXNlc0V4Y2VwdGlvbgorICAgIF0gVGVzdE5hbWVkQ29uc3RydWN0b3Ig
eworICAgIH07Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmgKaW5kZXggNGNiNTAxODY1MmQyMTYwMzRhMTQ4
N2VhM2ZkNzIzMTZhZjg4MzBjZS4uZTViNWI5YWI4NWQ4YzQzZjQyZGM2MDBkYWI5NjIxOTgwNTQ3
N2UwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuaApAQCAtMjYsMTYgKzI2LDE2IEBACiAjaW5jbHVkZSAi
VGVzdEludGVyZmFjZS5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIldy
YXBwZXJUeXBlSW5mby5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNs
dWRlIDx2OC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSGFzaC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFY4VGVzdEludGVy
ZmFjZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzRGVwZW5kZW50TGlmZXRp
bWUgPSB0cnVlOwotICAgIHN0YXRpYyBib29sIEhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB2YWx1ZSk7CisgICAgc3RhdGljIGJvb2wgSGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6
VmFsdWU+KTsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IEdldFJhd1RlbXBsYXRlKCk7CiAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBHZXRUZW1wbGF0ZSgpOwogICAgIHN0YXRpYyBUZXN0SW50ZXJmYWNlKiB0b05h
dGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZvaWQqKTsKICAgICBzdGF0aWMgV3Jh
cHBlclR5cGVJbmZvIGluZm87CiAgICAgc3RhdGljIEFjdGl2ZURPTU9iamVjdCogdG9BY3RpdmVE
T01PYmplY3Qodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
OworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uc3RydWN0b3JDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJik7CiAgICAgc3RhdGljIGNvbnN0IGludCBpbnRlcm5hbEZpZWxk
Q291bnQgPSB2OERlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsgMDsKICAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBleGlzdGluZ1dyYXBwZXIoVGVzdEludGVyZmFjZSop
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaAppbmRleCBlZTBh
OTYwZWUyMGE1ZGI2NWI3OGE2NzBjNmMzMzk4ZDE0NzIzODA5Li4xZTRlZjQxYzQzNDQ4ODkyYjAw
MjI0ZmJhMTBhYTEyYWI4OTRjYzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyLmgKQEAgLTI0LDE2ICsyNCwxNiBAQAogI2luY2x1ZGUgIlRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiV3Jh
cHBlclR5cGVJbmZvLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1
ZGUgPHY4Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVjhUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzRGVw
ZW5kZW50TGlmZXRpbWUgPSBmYWxzZTsKLSAgICBzdGF0aWMgYm9vbCBIYXNJbnN0YW5jZSh2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpOworICAgIHN0YXRpYyBib29sIEhhc0luc3RhbmNlKHY4
OjpIYW5kbGU8djg6OlZhbHVlPik7CiAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBHZXRSYXdUZW1wbGF0ZSgpOwogICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0VGVtcGxhdGUoKTsKICAgICBzdGF0aWMgVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIqIHRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2Jq
ZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3ZWYz
MDI4ODFlODdkNGQ2MWFkMmI0MzRmNmExZjFlOWViNDgyYzkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1
Y3Rvci5jcHAKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBT
dWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oIgorCisjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMu
aCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmdNYWNyb3MuaCIK
KyNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgor
I2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorI2lu
Y2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dyYXBw
ZXJUeXBlSW5mbyBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjppbmZvID0geyBWOFRlc3ROYW1lZENv
bnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSwgVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6ZGVyZWZPYmpl
Y3QsIFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OnRvQWN0aXZlRE9NT2JqZWN0LCAwIH07CisKK25h
bWVzcGFjZSBUZXN0TmFtZWRDb25zdHJ1Y3RvckludGVybmFsIHsKKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IHZvaWQgVjhfVVNFKFQpIHsgfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0TmFtZWRDb25z
dHJ1Y3RvckludGVybmFsCisKK1dyYXBwZXJUeXBlSW5mbyBWOFRlc3ROYW1lZENvbnN0cnVjdG9y
Q29uc3RydWN0b3I6OmluZm8gPSB7IFY4VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6
R2V0VGVtcGxhdGUsIFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OmRlcmVmT2JqZWN0LCBWOFRlc3RO
YW1lZENvbnN0cnVjdG9yOjp0b0FjdGl2ZURPTU9iamVjdCwgMCB9OworCitzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvckNhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE5h
bWVkQ29uc3RydWN0b3IuQ29uc3RydWN0b3IiKTsKKworICAgIGlmICghYXJncy5Jc0NvbnN0cnVj
dENhbGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0
b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIsIFY4UHJveHk6OlR5cGVFcnJvcik7
CisKKyAgICBpZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50KCkgPT0gQ29uc3RydWN0b3JNb2Rl
OjpXcmFwRXhpc3RpbmdPYmplY3QpCisgICAgICAgIHJldHVybiBhcmdzLkhvbGRlcigpOworCisg
ICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckN1cnJlbnRDb250ZXh0
KCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIlRlc3ROYW1l
ZENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZnJhbWUgaXMgdW5hdmFpbGFibGUi
LCBWOFByb3h5OjpSZWZlcmVuY2VFcnJvcik7CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBm
cmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcigiVGVzdE5hbWVkQ29uc3RydWN0b3IgY29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1
bWVudCBpcyB1bmF2YWlsYWJsZSIsIFY4UHJveHk6OlJlZmVyZW5jZUVycm9yKTsKKworICAgIC8v
IE1ha2Ugc3VyZSB0aGUgZG9jdW1lbnQgaXMgYWRkZWQgdG8gdGhlIERPTSBOb2RlIG1hcC4gT3Ro
ZXJ3aXNlLCB0aGUgVGVzdE5hbWVkQ29uc3RydWN0b3IgaW5zdGFuY2UKKyAgICAvLyBtYXkgZW5k
IHVwIGJlaW5nIHRoZSBvbmx5IG5vZGUgaW4gdGhlIG1hcCBhbmQgZ2V0IGdhcmJhZ2UtY29sbGVj
dGVkIHByZW1hdHVyZWx5LgorICAgIHRvVjgoZG9jdW1lbnQpOworCisgICAgaWYgKGFyZ3MuTGVu
Z3RoKCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiTm90IGVub3VnaCBhcmd1bWVu
dHMiLCBWOFByb3h5OjpUeXBlRXJyb3IpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+LCBz
dHIxLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBNaXNzaW5nSXNVbmRlZmluZWQp
KTsKKyAgICBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVy
PD4sIHN0cjIsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDEsIE1pc3NpbmdJc1VuZGVm
aW5lZCkpOworICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxPQ0soVjhQYXJh
bWV0ZXI8Piwgc3RyMywgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMiwgTWlzc2luZ0lz
RW1wdHkpKTsKKworICAgIFJlZlB0cjxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4gb2JqID0gVGVzdE5h
bWVkQ29uc3RydWN0b3I6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoZG9jdW1lbnQsIHN0cjEsIHN0
cjIsIHN0cjMsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIFY4
RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCAmVjhUZXN0TmFtZWRDb25z
dHJ1Y3RvckNvbnN0cnVjdG9yOjppbmZvLCBvYmouZ2V0KCkpOworICAgIG9iai0+cmVmKCk7Cisg
ICAgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JBY3RpdmVET01PYmplY3Qob2JqLmdldCgp
LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGFyZ3MuSG9sZGVyKCkpKTsKKyAgICBy
ZXR1cm4gYXJncy5Ib2xkZXIoKTsKKyAgZmFpbDoKKyAgICByZXR1cm4gdGhyb3dFcnJvcihlYyk7
Cit9CisKK3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3ROYW1lZENv
bnN0cnVjdG9yQ29uc3RydWN0b3I6OkdldFRlbXBsYXRlKCkKK3sKKyAgICBzdGF0aWMgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGNhY2hlZFRlbXBsYXRlOworICAgIGlmICgh
Y2FjaGVkVGVtcGxhdGUuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gY2FjaGVkVGVtcGxhdGU7
CisKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlv
blRlbXBsYXRlPiByZXN1bHQgPSB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFY4VGVzdE5hbWVk
Q29uc3RydWN0b3JDb25zdHJ1Y3RvckNhbGxiYWNrKTsKKworICAgIHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0VGVtcGxhdGU+IGluc3RhbmNlID0gcmVzdWx0LT5JbnN0YW5jZVRlbXBsYXRlKCk7CisgICAg
aW5zdGFuY2UtPlNldEludGVybmFsRmllbGRDb3VudChWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjpp
bnRlcm5hbEZpZWxkQ291bnQpOworICAgIHJlc3VsdC0+U2V0Q2xhc3NOYW1lKHY4OjpTdHJpbmc6
Ok5ldygiVGVzdE5hbWVkQ29uc3RydWN0b3IiKSk7CisgICAgcmVzdWx0LT5Jbmhlcml0KFY4VGVz
dE5hbWVkQ29uc3RydWN0b3I6OkdldFRlbXBsYXRlKCkpOworCisgICAgY2FjaGVkVGVtcGxhdGUg
PSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyhyZXN1bHQpOworICAg
IHJldHVybiBjYWNoZWRUZW1wbGF0ZTsKK30KKworc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBDb25maWd1cmVWOFRlc3ROYW1lZENvbnN0cnVjdG9yVGVtcGxhdGUo
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MpCit7CisgICAgZGVzYy0+
UmVhZE9ubHlQcm90b3R5cGUoKTsKKworICAgIHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPiBkZWZh
dWx0U2lnbmF0dXJlOworICAgIGRlZmF1bHRTaWduYXR1cmUgPSBjb25maWd1cmVUZW1wbGF0ZShk
ZXNjLCAiVGVzdE5hbWVkQ29uc3RydWN0b3IiLCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4oKSwgVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6aW50ZXJuYWxGaWVsZENvdW50LAor
ICAgICAgICAwLCAwLAorICAgICAgICAwLCAwKTsKKyAgICBVTlVTRURfUEFSQU0oZGVmYXVsdFNp
Z25hdHVyZSk7IC8vIEluIHNvbWUgY2FzZXMsIGl0IHdpbGwgbm90IGJlIHVzZWQuCisgICAgCisK
KyAgICAvLyBDdXN0b20gdG9TdHJpbmcgdGVtcGxhdGUKKyAgICBkZXNjLT5TZXQoZ2V0VG9TdHJp
bmdOYW1lKCksIGdldFRvU3RyaW5nVGVtcGxhdGUoKSk7CisgICAgcmV0dXJuIGRlc2M7Cit9CisK
K3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3ROYW1lZENvbnN0cnVj
dG9yOjpHZXRSYXdUZW1wbGF0ZSgpCit7CisgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRh
dGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOworICAgIFY4QmluZGluZ1Bl
cklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVt
cGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKKyAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBs
YXRlTWFwKCkuZW5kKCkpCisgICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKworICAgIHY4
OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOworICAgIGRhdGEtPnJhd1Rl
bXBsYXRlTWFwKCkuYWRkKCZpbmZvLCB0ZW1wbCk7CisgICAgcmV0dXJuIHRlbXBsOworfQorCit2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0TmFtZWRDb25zdHJ1Y3Rv
cjo6R2V0VGVtcGxhdGUoKQoreworICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0g
VjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKKyAgICBWOEJpbmRpbmdQZXJJc29s
YXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFw
KCkuZmluZCgmaW5mbyk7CisgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVu
ZCgpKQorICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisKKyAgICB2ODo6SGFuZGxlU2Nv
cGUgaGFuZGxlU2NvcGU7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IHRlbXBsID0KKyAgICAgICAgQ29uZmlndXJlVjhUZXN0TmFtZWRDb25zdHJ1Y3RvclRlbXBsYXRl
KEdldFJhd1RlbXBsYXRlKCkpOworICAgIGRhdGEtPnRlbXBsYXRlTWFwKCkuYWRkKCZpbmZvLCB0
ZW1wbCk7CisgICAgcmV0dXJuIHRlbXBsOworfQorCitib29sIFY4VGVzdE5hbWVkQ29uc3RydWN0
b3I6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gR2V0UmF3VGVtcGxhdGUoKS0+SGFzSW5zdGFuY2UodmFsdWUpOworfQorCitBY3RpdmVET01P
YmplY3QqIFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OnRvQWN0aXZlRE9NT2JqZWN0KHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gb2JqZWN0KQoreworICAgIHJldHVybiB0b05hdGl2ZShvYmplY3QpOwor
fSAgICAgIAorCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6
OndyYXBTbG93KFRlc3ROYW1lZENvbnN0cnVjdG9yKiBpbXBsKQoreworICAgIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gd3JhcHBlcjsKKyAgICBWOFByb3h5KiBwcm94eSA9IDA7CisgICAgd3JhcHBl
ciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChwcm94eSwgJmluZm8sIGltcGwp
OworICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisK
KyAgICBpbXBsLT5yZWYoKTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVy
SGFuZGxlID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh3cmFwcGVyKTsKKworICAg
IGlmICghaGFzRGVwZW5kZW50TGlmZXRpbWUpCisgICAgICAgIHdyYXBwZXJIYW5kbGUuTWFya0lu
ZGVwZW5kZW50KCk7CisgICAgZ2V0QWN0aXZlRE9NT2JqZWN0TWFwKCkuc2V0KGltcGwsIHdyYXBw
ZXJIYW5kbGUpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCit2b2lkIFY4VGVzdE5hbWVkQ29u
c3RydWN0b3I6OmRlcmVmT2JqZWN0KHZvaWQqIG9iamVjdCkKK3sKKyAgICBzdGF0aWNfY2FzdDxU
ZXN0TmFtZWRDb25zdHJ1Y3Rvcio+KG9iamVjdCktPmRlcmVmKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNm
NmUzMjdkZWJhNWQyM2M4Nzc0NGFlMjU2YWY0ZDM0NTQ4OWM5YmEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25z
dHJ1Y3Rvci5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBT
dWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisqLworCisjaWZuZGVm
IFY4VGVzdE5hbWVkQ29uc3RydWN0b3JfaAorI2RlZmluZSBWOFRlc3ROYW1lZENvbnN0cnVjdG9y
X2gKKworI2luY2x1ZGUgIlRlc3ROYW1lZENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVjhET01X
cmFwcGVyLmgiCisjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgiCisjaW5jbHVkZSA8djguaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBWOFRlc3ROYW1lZENvbnN0cnVjdG9y
Q29uc3RydWN0b3IgeworcHVibGljOgorICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gR2V0VGVtcGxhdGUoKTsKKyAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZv
IGluZm87Cit9OworCitjbGFzcyBWOFRlc3ROYW1lZENvbnN0cnVjdG9yIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNEZXBlbmRlbnRMaWZldGltZSA9IHRydWU7CisgICAgc3Rh
dGljIGJvb2wgSGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKKyAgICBzdGF0aWMg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFJhd1RlbXBsYXRlKCk7Cisg
ICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0
ZSgpOworICAgIHN0YXRpYyBUZXN0TmFtZWRDb25zdHJ1Y3RvciogdG9OYXRpdmUodjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxUZXN0TmFtZWRDb25zdHJ1Y3Rvcio+KG9iamVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5h
bEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4KSk7CisgICAgfQorICAgIGlubGluZSBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3ROYW1lZENvbnN0cnVjdG9yKik7Cisg
ICAgc3RhdGljIHZvaWQgZGVyZWZPYmplY3Qodm9pZCopOworICAgIHN0YXRpYyBXcmFwcGVyVHlw
ZUluZm8gaW5mbzsKKyAgICBzdGF0aWMgQWN0aXZlRE9NT2JqZWN0KiB0b0FjdGl2ZURPTU9iamVj
dCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKKyAgICBzdGF0aWMgY29uc3QgaW50IGludGVybmFs
RmllbGRDb3VudCA9IHY4RGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAwOworICAg
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGV4aXN0aW5nV3JhcHBlcihUZXN0TmFtZWRD
b25zdHJ1Y3RvciopOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHdyYXBTbG93KFRlc3ROYW1lZENvbnN0cnVjdG9yKik7Cit9OworCitBTFdBWVNfSU5MSU5F
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6ZXhpc3RpbmdX
cmFwcGVyKFRlc3ROYW1lZENvbnN0cnVjdG9yKiBpbXBsKQoreworICAgIHJldHVybiBnZXRBY3Rp
dmVET01PYmplY3RNYXAoKS5nZXQoaW1wbCk7Cit9CisKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4g
VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6d3JhcChUZXN0TmFtZWRDb25zdHJ1Y3RvciogaW1wbCkK
K3sKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZXhpc3RpbmdXcmFw
cGVyKGltcGwpOworICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAg
cmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OndyYXBT
bG93KGltcGwpOworfQorCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdE5h
bWVkQ29uc3RydWN0b3IqIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4g
djg6Ok51bGwoKTsKKyAgICByZXR1cm4gVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6d3JhcChpbXBs
KTsKK30KK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0
TmFtZWRDb25zdHJ1Y3RvciA+IGltcGwpCit7CisgICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSk7
Cit9Cit9CisKKyNlbmRpZiAvLyBWOFRlc3ROYW1lZENvbnN0cnVjdG9yX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouaAppbmRleCAz
NGFhNDc2OTcyYzZlYWNmNmQwYTljOTY0Y2FiMDVlM2QxNjAxNDE0Li4yMjRiMWQyZTk2ZDQwMGM0
NGYwMDUwZmIxMjhmOTI0MjUzNzJlZTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5oCkBAIC0yNCwxNiArMjQsMTYgQEAKICNp
bmNsdWRlICJUZXN0T2JqLmgiCiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAi
V3JhcHBlclR5cGVJbmZvLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2lu
Y2x1ZGUgPHY4Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVjhUZXN0T2Jq
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNEZXBlbmRlbnRMaWZldGltZSA9
IGZhbHNlOwotICAgIHN0YXRpYyBib29sIEhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB2YWx1ZSk7CisgICAgc3RhdGljIGJvb2wgSGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFs
dWU+KTsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdl
dFJhd1RlbXBsYXRlKCk7CiAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiBHZXRUZW1wbGF0ZSgpOwogICAgIHN0YXRpYyBUZXN0T2JqKiB0b05hdGl2ZSh2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGN1c3RvbU1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmKTsKICAgICBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGN1c3RvbU1ldGhvZFdpdGhBcmdzQ2FsbGJhY2so
Y29uc3Qgdjg6OkFyZ3VtZW50cyYpOwotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
Y29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKKyAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYpOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3VzdG9tQXR0ckFj
Y2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKTsKICAgICBzdGF0aWMgdm9pZCBjdXN0b21BdHRyQWNjZXNzb3JTZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKTsKICAgICBzdGF0aWMgY29uc3QgaW50IGludGVy
bmFsRmllbGRDb3VudCA9IHY4RGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5o
CmluZGV4IGE4ZWMzY2U4ODBlNzE4ZDYzYWMxNmVlMDg3NmM1MzBmOTY3NmRkZDcuLjk0OTY4ZTdl
NjM2NTc0MmY3Yzc5MTdmZjBhZDI3MjgyNDU5ZmI4NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKQEAgLTI2LDE2ICsyNiwxNiBA
QAogI2luY2x1ZGUgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCIKICNpbmNs
dWRlICJWOERPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJXcmFwcGVyVHlwZUluZm8uaCIKLSNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UgewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0RlcGVuZGVudExpZmV0aW1l
ID0gZmFsc2U7Ci0gICAgc3RhdGljIGJvb2wgSGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHZhbHVlKTsKKyAgICBzdGF0aWMgYm9vbCBIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4pOwogICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
R2V0UmF3VGVtcGxhdGUoKTsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IEdldFRlbXBsYXRlKCk7CiAgICAgc3RhdGljIFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UqIHRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRv
d0N1c3RvbS5jcHAKaW5kZXggM2EzZTdhNTU1MDgwOGVhMWY1YjI3NjBmNDU0NTA2MTA2NWI0MTM3
Yi4uOGI4Njc2N2Q3ZDFhNjdiZDNmZDI1YzdkYzc0NTkzNTZhOWNiZWUzMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20u
Y3BwCkBAIC01NiwxMCArNTYsOCBAQAogI2luY2x1ZGUgIlY4RXZlbnRMaXN0ZW5lci5oIgogI2lu
Y2x1ZGUgIlY4R0NGb3JDb250ZXh0RGlzcG9zZS5oIgogI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVy
dHlOYW1lLmgiCi0jaW5jbHVkZSAiVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuaCIKICNp
bmNsdWRlICJWOEhUTUxDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiVjhIVE1MSW1hZ2VFbGVtZW50
Q29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJWOEhUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJWOE1lc3NhZ2VQb3J0Q3VzdG9tLmgiCiAjaW5jbHVkZSAiVjhOb2RlLmgi
CiAjaW5jbHVkZSAiVjhQcm94eS5oIgpAQCAtMjI3LDI4ICsyMjUsMTIgQEAgdm9pZCBWOERPTVdp
bmRvdzo6b3BlbmVyQWNjZXNzb3JTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4
OjpMb2NhbDx2ODoKICAgICBpbmZvLlRoaXMoKS0+U2V0KG5hbWUsIHZhbHVlKTsKIH0KIAotI2lm
IEVOQUJMRShWSURFTykKLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV2luZG93OjpBdWRp
b0FjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQotewotICAgIERPTVdpbmRvdyogd2luZG93ID0gVjhET01XaW5kb3c6
OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmdldENv
bnN0cnVjdG9yKCZWOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvcjo6aW5mbywgd2luZG93KTsK
LX0KLQotI2VuZGlmCi0KIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6SW1hZ2VB
Y2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKIHsKICAgICBET01XaW5kb3cqIHdpbmRvdyA9IFY4RE9NV2luZG93Ojp0
b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpnZXRDb25z
dHJ1Y3RvcigmVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3I6OmluZm8sIHdpbmRvdyk7CiB9
CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6T3B0aW9uQWNjZXNzb3JHZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGlu
Zm8pCi17Ci0gICAgRE9NV2luZG93KiB3aW5kb3cgPSBWOERPTVdpbmRvdzo6dG9OYXRpdmUoaW5m
by5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IoJlY4
SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcjo6aW5mbywgd2luZG93KTsKLX0KLQogdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4RE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyQ2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5ET01XaW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcigpIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk2MzQ4MDViNTEzMmZmODRlNjlmZjVi
MjBlMmJkYTZmZjI0NjYyYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVt
ZW50Q29uc3RydWN0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pCi0KLSNpbmNsdWRlICJWOEhUTUxBdWRp
b0VsZW1lbnRDb25zdHJ1Y3Rvci5oIgotCi0jaW5jbHVkZSAiSFRNTEF1ZGlvRWxlbWVudC5oIgot
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKLSNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOERvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiVjhIVE1MQXVkaW9FbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhQcm94eS5oIgot
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdyYXBw
ZXJUeXBlSW5mbyBWOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvcjo6aW5mbyA9IHsgVjhIVE1M
QXVkaW9FbGVtZW50Q29uc3RydWN0b3I6OkdldFRlbXBsYXRlLCBWOEhUTUxBdWRpb0VsZW1lbnQ6
OmRlcmVmT2JqZWN0LCBWOEhUTUxBdWRpb0VsZW1lbnQ6OnRvQWN0aXZlRE9NT2JqZWN0LCAwIH07
Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhIVE1MQXVkaW9FbGVtZW50Q29uc3Ry
dWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIElOQ19TVEFU
UygiRE9NLkhUTUxBdWRpb0VsZW1lbnQuQ29udHJ1Y3RvciIpOwotCi0gICAgaWYgKCFhcmdzLklz
Q29uc3RydWN0Q2FsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiRE9NIG9iamVjdCBj
b25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIiwgVjhQcm94eTo6VHlw
ZUVycm9yKTsKLQotICAgIGlmIChDb25zdHJ1Y3Rvck1vZGU6OmN1cnJlbnQoKSA9PSBDb25zdHJ1
Y3Rvck1vZGU6OldyYXBFeGlzdGluZ09iamVjdCkKLSAgICAgICAgcmV0dXJuIGFyZ3MuSG9sZGVy
KCk7Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yQ3VycmVu
dENvbnRleHQoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigi
QXVkaW8gY29uc3RydWN0b3IgYXNzb2NpYXRlZCBmcmFtZSBpcyB1bmF2YWlsYWJsZSIsIFY4UHJv
eHk6OlJlZmVyZW5jZUVycm9yKTsKLQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5k
b2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KCJBdWRpbyBjb25zdHJ1Y3RvciBhc3NvY2lhdGVkIGRvY3VtZW50IGlzIHVuYXZhaWxhYmxlIiwg
VjhQcm94eTo6UmVmZXJlbmNlRXJyb3IpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBkb2N1bWVu
dCBpcyBhZGRlZCB0byB0aGUgRE9NIE5vZGUgbWFwLiBPdGhlcndpc2UsIHRoZSBIVE1MQXVkaW9F
bGVtZW50IGluc3RhbmNlCi0gICAgLy8gbWF5IGVuZCB1cCBiZWluZyB0aGUgb25seSBub2RlIGlu
IHRoZSBtYXAgYW5kIGdldCBnYXJiYWdlLWNvbGxlY3RlZCBwcmVtYXR1cmVseS4KLSAgICB0b1Y4
KGRvY3VtZW50KTsKLQotICAgIFN0cmluZyBzcmM7Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAw
KQotICAgICAgICBzcmMgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7Ci0gICAgUmVmUHRyPEhU
TUxBdWRpb0VsZW1lbnQ+IGF1ZGlvID0gSFRNTEF1ZGlvRWxlbWVudDo6Y3JlYXRlRm9ySlNDb25z
dHJ1Y3Rvcihkb2N1bWVudCwgc3JjKTsKLQotICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBl
cihhcmdzLkhvbGRlcigpLCAmVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3I6OmluZm8sIGF1
ZGlvLmdldCgpKTsKLSAgICBhdWRpby0+cmVmKCk7Ci0gICAgVjhET01XcmFwcGVyOjpzZXRKU1dy
YXBwZXJGb3JBY3RpdmVET01PYmplY3QoYXVkaW8uZ2V0KCksIHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+OjpOZXcoYXJncy5Ib2xkZXIoKSkpOwotICAgIHJldHVybiBhcmdzLkhvbGRlcigpOwot
fQotCi12ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhIVE1MQXVkaW9FbGVt
ZW50Q29uc3RydWN0b3I6OkdldFRlbXBsYXRlKCkKLXsKLSAgICBzdGF0aWMgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGNhY2hlZFRlbXBsYXRlOwotICAgIGlmICghY2FjaGVk
VGVtcGxhdGUuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gY2FjaGVkVGVtcGxhdGU7Ci0KLSAg
ICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7Ci0gICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvblRlbXBs
YXRlPiByZXN1bHQgPSB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KHY4SFRNTEF1ZGlvRWxlbWVu
dENvbnN0cnVjdG9yQ2FsbGJhY2spOwotCi0gICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0
ZT4gaW5zdGFuY2UgPSByZXN1bHQtPkluc3RhbmNlVGVtcGxhdGUoKTsKLSAgICBpbnN0YW5jZS0+
U2V0SW50ZXJuYWxGaWVsZENvdW50KFY4SFRNTEF1ZGlvRWxlbWVudDo6aW50ZXJuYWxGaWVsZENv
dW50KTsKLSAgICByZXN1bHQtPlNldENsYXNzTmFtZSh2ODo6U3RyaW5nOjpOZXcoIkhUTUxBdWRp
b0VsZW1lbnQiKSk7Ci0gICAgcmVzdWx0LT5Jbmhlcml0KFY4SFRNTEF1ZGlvRWxlbWVudDo6R2V0
VGVtcGxhdGUoKSk7Ci0KLSAgICBjYWNoZWRUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPjo6TmV3KHJlc3VsdCk7Ci0gICAgcmV0dXJuIGNhY2hlZFRlbXBsYXRl
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoVklERU8p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQXVk
aW9FbGVtZW50Q29uc3RydWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4YzAzOTdhMGM2N2RmOWVhMjM4YjRjZjVjY2NhNjBhNmZjNjg1ZWJjLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5oCisrKyAvZGV2
L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0
b3JfaAotI2RlZmluZSBWOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvcl9oCi0KLSNpZiBFTkFC
TEUoVklERU8pCi0KLSNpbmNsdWRlICJXcmFwcGVyVHlwZUluZm8uaCIKLQotI2luY2x1ZGUgPHY4
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgVjhIVE1MQXVkaW9FbGVtZW50Q29u
c3RydWN0b3IgewotcHVibGljOgotICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gR2V0VGVtcGxhdGUoKTsKLSAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGlu
Zm87Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoVklERU8pCi0KLSNlbmRpZiAvLyBWOEhU
TUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25FbGVtZW50Q29uc3Ry
dWN0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzcxYWI2YjJhNDQyYjBl
N2VkMzM5NmNmNjM4OTZlZTFjMzJjN2E2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxP
cHRpb25FbGVtZW50Q29uc3RydWN0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVjhIVE1MT3B0aW9uRWxlbWVudENvbnN0
cnVjdG9yLmgiCi0KLSNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgotI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNp
bmNsdWRlICJUZXh0LmgiCi0jaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhIVE1M
T3B0aW9uRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4UHJveHkuaCIKLQotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1XcmFwcGVyVHlwZUluZm8gVjhIVE1M
T3B0aW9uRWxlbWVudENvbnN0cnVjdG9yOjppbmZvID0geyBWOEhUTUxPcHRpb25FbGVtZW50Q29u
c3RydWN0b3I6OkdldFRlbXBsYXRlLCAwLCAwLCAwIH07Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5IVE1MT3B0aW9uRWxlbWVu
dC5Db250cnVjdG9yIik7Ci0KLSAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCi0gICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBj
YWxsZWQgYXMgYSBmdW5jdGlvbi4iLCBWOFByb3h5OjpUeXBlRXJyb3IpOwotCi0gICAgaWYgKENv
bnN0cnVjdG9yTW9kZTo6Y3VycmVudCgpID09IENvbnN0cnVjdG9yTW9kZTo6V3JhcEV4aXN0aW5n
T2JqZWN0KQotICAgICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKLQotICAgIEZyYW1lKiBmcmFt
ZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JDdXJyZW50Q29udGV4dCgpOwotICAgIGlmICgh
ZnJhbWUpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJPcHRpb24gY29uc3RydWN0b3IgYXNz
b2NpYXRlZCBmcmFtZSBpcyB1bmF2YWlsYWJsZSIsIFY4UHJveHk6OlJlZmVyZW5jZUVycm9yKTsK
LQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICgh
ZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJPcHRpb24gY29uc3RydWN0b3Ig
YXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJsZSIsIFY4UHJveHk6OlJlZmVyZW5jZUVy
cm9yKTsKLQotICAgIFN0cmluZyBkYXRhOwotICAgIFN0cmluZyB2YWx1ZTsKLSAgICBib29sIGRl
ZmF1bHRTZWxlY3RlZCA9IGZhbHNlOwotICAgIGJvb2wgc2VsZWN0ZWQgPSBmYWxzZTsKLSAgICBp
ZiAoYXJncy5MZW5ndGgoKSA+IDAgJiYgIWFyZ3NbMF0tPklzVW5kZWZpbmVkKCkpCi0gICAgICAg
IGRhdGEgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkg
PiAxICYmICFhcmdzWzFdLT5Jc1VuZGVmaW5lZCgpKQotICAgICAgICB2YWx1ZSA9IHRvV2ViQ29y
ZVN0cmluZyhhcmdzWzFdKTsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDIpCi0gICAgICAgIGRl
ZmF1bHRTZWxlY3RlZCA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwotICAgIGlmIChhcmdzLkxl
bmd0aCgpID4gMykKLSAgICAgICAgc2VsZWN0ZWQgPSBhcmdzWzNdLT5Cb29sZWFuVmFsdWUoKTsK
LQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVu
dD4gb3B0aW9uID0gSFRNTE9wdGlvbkVsZW1lbnQ6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoZG9j
dW1lbnQsIGRhdGEsIHZhbHVlLCBkZWZhdWx0U2VsZWN0ZWQsIHNlbGVjdGVkLCBlYyk7Ci0KLSAg
ICBpZiAoZWMpCi0gICAgICAgIHRocm93RXJyb3IoZWMpOwotCi0gICAgVjhET01XcmFwcGVyOjpz
ZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksICZWOEhUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0
b3I6OmluZm8sIG9wdGlvbi5nZXQoKSk7Ci0gICAgb3B0aW9uLT5yZWYoKTsKLSAgICBWOERPTVdy
YXBwZXI6OnNldEpTV3JhcHBlckZvckRPTU5vZGUob3B0aW9uLmdldCgpLCB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0Pjo6TmV3KGFyZ3MuSG9sZGVyKCkpKTsKLSAgICByZXR1cm4gYXJncy5Ib2xk
ZXIoKTsKLX0KLQotdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4SFRNTE9w
dGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUoKQotewotICAgIHN0YXRpYyB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY2FjaGVkVGVtcGxhdGU7Ci0gICAgaWYg
KCFjYWNoZWRUZW1wbGF0ZS5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBjYWNoZWRUZW1wbGF0
ZTsKLQotICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICB2ODo6TG9jYWw8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IHJlc3VsdCA9IHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcodjhIVE1MT3B0
aW9uRWxlbWVudENvbnN0cnVjdG9yQ2FsbGJhY2spOwotCi0gICAgdjg6OkxvY2FsPHY4OjpPYmpl
Y3RUZW1wbGF0ZT4gaW5zdGFuY2UgPSByZXN1bHQtPkluc3RhbmNlVGVtcGxhdGUoKTsKLSAgICBp
bnN0YW5jZS0+U2V0SW50ZXJuYWxGaWVsZENvdW50KFY4SFRNTE9wdGlvbkVsZW1lbnQ6OmludGVy
bmFsRmllbGRDb3VudCk7Ci0gICAgcmVzdWx0LT5TZXRDbGFzc05hbWUodjg6OlN0cmluZzo6TmV3
KCJIVE1MT3B0aW9uRWxlbWVudCIpKTsKLSAgICByZXN1bHQtPkluaGVyaXQoVjhIVE1MT3B0aW9u
RWxlbWVudDo6R2V0VGVtcGxhdGUoKSk7Ci0KLSAgICBjYWNoZWRUZW1wbGF0ZSA9IHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHJlc3VsdCk7Ci0gICAgcmV0dXJuIGNh
Y2hlZFRlbXBsYXRlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uRWxlbWVudENvbnN0
cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9u
RWxlbWVudENvbnN0cnVjdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZGYw
ZmU2ZGViNTBhMmI1NzkxZWU4NzkyNDE0MWYxYmFhYjY1ZGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5oCisrKyAvZGV2L251bGwKQEAgLTEs
NDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgVjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yX2gKLSNkZWZp
bmUgVjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yX2gKLQotI2luY2x1ZGUgIldyYXBwZXJU
eXBlSW5mby5oIgotCi0jaW5jbHVkZSA8djguaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBWOEhUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IgewotcHVibGljOgotICAgIHN0YXRp
YyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0VGVtcGxhdGUoKTsKLSAg
ICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBWOEhU
TUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQXVkaW9FbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlv
RWxlbWVudC5pZGwKaW5kZXggZTU2NzIyYWUyNTI5M2Y0OTU3ZTkxOGRkYWIwZjYxMjRiYzBhYTU4
OS4uMTQ5YzA0ZjNhMGUzMjVlOGJhZjUxYjkzMmQ0N2M3MzY1MzQxY2RhYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaWRsCkBAIC0yNiw3ICsyNiw4IEBACiBtb2R1bGUg
aHRtbCB7CiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQWN0aXZlRE9NT2JqZWN0LAotICAgICAg
ICBDb25kaXRpb25hbD1WSURFTworICAgICAgICBDb25kaXRpb25hbD1WSURFTywKKyAgICAgICAg
TmFtZWRDb25zdHJ1Y3Rvcj1BdWRpbyhpbiBbT3B0aW9uYWw9Q2FsbFdpdGhOdWxsVmFsdWVdIERP
TVN0cmluZyBzcmMpCiAgICAgXSBIVE1MQXVkaW9FbGVtZW50IDogSFRNTE1lZGlhRWxlbWVudCB7
CiAKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxl
bWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmlkbAppbmRl
eCAwNmQ1NTQ0ZGEyYTc3Y2FlMTU5MzA5MTAyZjAwZmVlNGRiNTQxZGY1Li42YmEzMjdhZjQxZWM1
ZWRlODU0YzA1MzQ4NjViMTk0M2EwMzBjNDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxPcHRpb25FbGVtZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxP
cHRpb25FbGVtZW50LmlkbApAQCAtMjEsNyArMjEsOSBAQAogbW9kdWxlIGh0bWwgewogCiAgICAg
aW50ZXJmYWNlIFsKLSAgICAgICAgR2VuZXJhdGVOYXRpdmVDb252ZXJ0ZXIKKyAgICAgICAgR2Vu
ZXJhdGVOYXRpdmVDb252ZXJ0ZXIsCisgICAgICAgIE5hbWVkQ29uc3RydWN0b3I9T3B0aW9uKGlu
IFtPcHRpb25hbD1DYWxsV2l0aE51bGxWYWx1ZV0gRE9NU3RyaW5nIGRhdGEsIGluIFtPcHRpb25h
bD1DYWxsV2l0aE51bGxWYWx1ZV0gRE9NU3RyaW5nIHZhbHVlLCBpbiBbT3B0aW9uYWw9Q2FsbFdp
dGhEZWZhdWx0VmFsdWVdIGJvb2xlYW4gZGVmYXVsdFNlbGVjdGVkLCBpbiBbT3B0aW9uYWw9Q2Fs
bFdpdGhEZWZhdWx0VmFsdWVdIGJvb2xlYW4gc2VsZWN0ZWQpLAorICAgICAgICBDb25zdHJ1Y3Rv
clJhaXNlc0V4Y2VwdGlvbgogICAgIF0gSFRNTE9wdGlvbkVsZW1lbnQgOiBIVE1MRWxlbWVudCB7
CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBIVE1MRm9ybUVsZW1lbnQgZm9ybTsKICAgICAg
ICAgYXR0cmlidXRlIFtSZWZsZWN0PXNlbGVjdGVkXSBib29sZWFuIGRlZmF1bHRTZWxlY3RlZDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAppbmRleCA5MTI3MDI3YzlkMzlkNjhjMWQyZjc5NzBm
NGZmOWY5MDRhNmE4NDNlLi5hZTBiNGQzYzc2ZTcxOWMzZDRjNTUxYTJhNTg2NWExNzM2MzIyMzg1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCkBAIC00OTEsNyArNDkxLDcgQEAgbW9kdWxl
IHdpbmRvdyB7CiAgICAgICAgIGF0dHJpYnV0ZSBIVE1MVW5rbm93bkVsZW1lbnRDb25zdHJ1Y3Rv
ciBIVE1MVW5rbm93bkVsZW1lbnQ7CiAKICAgICAgICAgYXR0cmlidXRlIFtDdXN0b21HZXR0ZXJd
IEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3RvciBJbWFnZTsgLy8gVXNhYmxlIHdpdGggbmV3IG9w
ZXJhdG9yCi0gICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tR2V0dGVyXSBIVE1MT3B0aW9uRWxlbWVu
dENvbnN0cnVjdG9yIE9wdGlvbjsgLy8gVXNhYmxlIHdpdGggbmV3IG9wZXJhdG9yCisgICAgICAg
IGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0dGVyXSBIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9y
Q29uc3RydWN0b3IgT3B0aW9uOyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKIAogICAgICAg
ICBhdHRyaWJ1dGUgQ2FudmFzUGF0dGVybkNvbnN0cnVjdG9yIENhbnZhc1BhdHRlcm47CiAgICAg
ICAgIGF0dHJpYnV0ZSBDYW52YXNHcmFkaWVudENvbnN0cnVjdG9yIENhbnZhc0dyYWRpZW50OwpA
QCAtNjI3LDcgKzYyNyw3IEBAIG1vZHVsZSB3aW5kb3cgewogCiAgICAgICAgIGF0dHJpYnV0ZSBT
dG9yYWdlQ29uc3RydWN0b3IgU3RvcmFnZTsKIAotICAgICAgICBhdHRyaWJ1dGUgW0N1c3RvbUdl
dHRlciwgQ29uZGl0aW9uYWw9VklERU8sIEVuYWJsZWRBdFJ1bnRpbWVdIEhUTUxBdWRpb0VsZW1l
bnRDb25zdHJ1Y3RvciBBdWRpbzsgLy8gVXNhYmxlIHdpdGggdGhlIG5ldyBvcGVyYXRvcgorICAg
ICAgICBhdHRyaWJ1dGUgW0NvbmRpdGlvbmFsPVZJREVPLCBFbmFibGVkQXRSdW50aW1lLCBKU0ND
dXN0b21HZXR0ZXJdIEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yIEF1ZGlv
OyAvLyBVc2FibGUgd2l0aCB0aGUgbmV3IG9wZXJhdG9yCiAgICAgICAgIGF0dHJpYnV0ZSBbQ29u
ZGl0aW9uYWw9VklERU8sIEVuYWJsZWRBdFJ1bnRpbWVdIEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1
Y3RvciBIVE1MQXVkaW9FbGVtZW50OwogICAgICAgICBhdHRyaWJ1dGUgW0NvbmRpdGlvbmFsPVZJ
REVPLCBFbmFibGVkQXRSdW50aW1lXSBIVE1MTWVkaWFFbGVtZW50Q29uc3RydWN0b3IgSFRNTE1l
ZGlhRWxlbWVudDsKICAgICAgICAgYXR0cmlidXRlIFtDb25kaXRpb25hbD1WSURFTywgRW5hYmxl
ZEF0UnVudGltZV0gSFRNTFZpZGVvRWxlbWVudENvbnN0cnVjdG9yIEhUTUxWaWRlb0VsZW1lbnQ7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggNGZlMmZhMDQ5NTY3MWRhYTJmZmY5NTRhMjBmNDEyOGNlOTAyY2E1OS4uYzhlMWQ4
ZTlmNDViMWIwZDA1ODkwMDhlZTdiYzhmNDZlNGIyYTQ3YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBA
CisyMDExLTExLTA0ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBBIFdJUCBwYXRjaCBmb3IgaW1wbGVtZW50aW5nIFtOYW1lZENvbnN0cnVjdG9yXSBJREwg
Zm9yIFY4LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzEwOTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGUgdGVzdCByZXN1bHRzIGZvciAibmV3IE9wdGlvbiguLi4pIiBhcmUgd3JvbmcuCisgICAgICAg
IFRoaXMgcGF0Y2ggZml4ZXMgdGhlIHJlc3VsdCBhY2NvcmRpbmcgdG8gdGhlIHNwZWM6CisgICAg
ICAgIGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvdGhlLWJ1dHRvbi1lbGVtZW50Lmh0bWwj
dGhlLW9wdGlvbi1lbGVtZW50CisgICAgICAgIGh0dHA6Ly9kZXYudzMub3JnLzIwMDYvd2ViYXBp
L1dlYklETC8jZXMtRE9NU3RyaW5nCisKKyAgICAgICAgKiBmYXN0L2pzL2N1c3RvbS1jb25zdHJ1
Y3RvcnMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvanMvc2NyaXB0LXRlc3RzL2N1c3Rv
bS1jb25zdHJ1Y3RvcnMuanM6CisKIDIwMTEtMTEtMDYgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24u
aGF1c21hbm5Abm9raWEuY29tPgogCiAgICAgICAgIFtRdF0gVW5yZXZpZXdlZCBnYXJkZW5pbmcu
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL2N1c3RvbS1jb25zdHJ1Y3RvcnMtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9jdXN0b20tY29uc3RydWN0b3JzLWV4cGVj
dGVkLnR4dAppbmRleCA3NGZhMTgzZDM1M2M2YzdjYTA4MTQwZWIzNDg5ZjY0NTAwNWIwODBmLi5m
ZDNjZTcyYWU4ZDY3OThlNTczNmZmZWFjNjhkYTZmYjJiZjNjNmU4IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L2pzL2N1c3RvbS1jb25zdHJ1Y3RvcnMtZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvanMvY3VzdG9tLWNvbnN0cnVjdG9ycy1leHBlY3RlZC50eHQKQEAgLTE3
LDExICsxNywxMSBAQCBQQVNTIG5ldyBPcHRpb24oKSBpcyBub24tbnVsbC4KIFBBU1MgbmV3IE9w
dGlvbigpLnRhZ05hbWUgaXMgIk9QVElPTiIKIFBBU1MgbmV3IE9wdGlvbigpLmlubmVyVGV4dCBp
cyAiIgogUEFTUyBuZXcgT3B0aW9uKG51bGwpLmlubmVyVGV4dCBpcyAibnVsbCIKLVBBU1MgbmV3
IE9wdGlvbih1bmRlZmluZWQpLmlubmVyVGV4dCBpcyAiIgorUEFTUyBuZXcgT3B0aW9uKHVuZGVm
aW5lZCkuaW5uZXJUZXh0IGlzICJ1bmRlZmluZWQiCiBQQVNTIG5ldyBPcHRpb24oJ3NvbWVkYXRh
JykuaW5uZXJUZXh0IGlzICJzb21lZGF0YSIKIFBBU1MgbmV3IE9wdGlvbigpLnZhbHVlIGlzICIi
CiBQQVNTIG5ldyBPcHRpb24oJ3NvbWVkYXRhJywgbnVsbCkudmFsdWUgaXMgIm51bGwiCi1QQVNT
IG5ldyBPcHRpb24oJ3NvbWVkYXRhJywgdW5kZWZpbmVkKS52YWx1ZSBpcyAic29tZWRhdGEiCitQ
QVNTIG5ldyBPcHRpb24oJ3NvbWVkYXRhJywgdW5kZWZpbmVkKS52YWx1ZSBpcyAidW5kZWZpbmVk
IgogUEFTUyBuZXcgT3B0aW9uKCdzb21lZGF0YScsICdzb21ldmFsdWUnKS52YWx1ZSBpcyAic29t
ZXZhbHVlIgogUEFTUyBuZXcgT3B0aW9uKCkuZGVmYXVsdFNlbGVjdGVkIGlzIGZhbHNlCiBQQVNT
IG5ldyBPcHRpb24oJ3NvbWVkYXRhJywgJ3NvbWV2YWx1ZScpLmRlZmF1bHRTZWxlY3RlZCBpcyBm
YWxzZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvY3VzdG9t
LWNvbnN0cnVjdG9ycy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2N1c3Rv
bS1jb25zdHJ1Y3RvcnMuanMKaW5kZXggNTI2NDg0NmNhMTQyYWQ4ZWYyYzYwM2EzYTkzOGI1YTA5
ZDlmZDkxZS4uZDUxY2RmM2JjMTc2YzFhNGU0MTU4YjVkYjQ2NGE3OTc3ZGViZWExOCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvY3VzdG9tLWNvbnN0cnVjdG9y
cy5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9jdXN0b20tY29uc3Ry
dWN0b3JzLmpzCkBAIC0yMywxMiArMjMsMTIgQEAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJuZXcg
T3B0aW9uKCkudGFnTmFtZSIsICJPUFRJT04iKTsKIAogc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJu
ZXcgT3B0aW9uKCkuaW5uZXJUZXh0IiwgIiIpOwogc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJuZXcg
T3B0aW9uKG51bGwpLmlubmVyVGV4dCIsICJudWxsIik7Ci1zaG91bGRCZUVxdWFsVG9TdHJpbmco
Im5ldyBPcHRpb24odW5kZWZpbmVkKS5pbm5lclRleHQiLCAiIik7CitzaG91bGRCZUVxdWFsVG9T
dHJpbmcoIm5ldyBPcHRpb24odW5kZWZpbmVkKS5pbm5lclRleHQiLCAidW5kZWZpbmVkIik7CiBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoIm5ldyBPcHRpb24oJ3NvbWVkYXRhJykuaW5uZXJUZXh0Iiwg
InNvbWVkYXRhIik7CiAKIHNob3VsZEJlRXF1YWxUb1N0cmluZygibmV3IE9wdGlvbigpLnZhbHVl
IiwgIiIpOwogc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJuZXcgT3B0aW9uKCdzb21lZGF0YScsIG51
bGwpLnZhbHVlIiwgIm51bGwiKTsKLXNob3VsZEJlRXF1YWxUb1N0cmluZygibmV3IE9wdGlvbign
c29tZWRhdGEnLCB1bmRlZmluZWQpLnZhbHVlIiwgInNvbWVkYXRhIik7CitzaG91bGRCZUVxdWFs
VG9TdHJpbmcoIm5ldyBPcHRpb24oJ3NvbWVkYXRhJywgdW5kZWZpbmVkKS52YWx1ZSIsICJ1bmRl
ZmluZWQiKTsKIHNob3VsZEJlRXF1YWxUb1N0cmluZygibmV3IE9wdGlvbignc29tZWRhdGEnLCAn
c29tZXZhbHVlJykudmFsdWUiLCAic29tZXZhbHVlIik7CiAKIHNob3VsZEJlRmFsc2UoIm5ldyBP
cHRpb24oKS5kZWZhdWx0U2VsZWN0ZWQiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116943</attachid>
            <date>2011-11-29 04:09:33 -0800</date>
            <delta_ts>2011-11-29 04:09:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71093-20111129210931.patch</filename>
            <type>text/plain</type>
            <size>47968</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMjkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGZjNTdiOWVkMzNjMTYz
NTA5MDFjZTdkNDI4OTVjZTNjMTI0ZWNkYS4uOGQ3YjE3OWEzYmE2NDgwY2YzN2QyMzU1ZmZmODI2
ZDJhMTIyZWQ0NyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDExLTExLTI5ICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBXSVA6IEltcGxlbWVu
dCB0aGUgW05hbWVkQ29uc3RydWN0b3JdIElETCBpbiBKU0MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMDkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBbTmFt
ZWRDb25zdHJ1Y3Rvcl0gSURMIGZvciBKU0MuCisgICAgICAgIFRoZSBzcGVjOiBodHRwOi8vd3d3
LnczLm9yZy9UUi9XZWJJREwvI05hbWVkQ29uc3RydWN0b3IKKworICAgICAgICBJbiBhZGRpdGlv
biwgdGhpcyBwYXRjaCByZXBsYWNlcyB0aGUgY3VzdG9tIGNvbnN0cnVjdG9ycyBvZgorICAgICAg
ICBIVE1MQXVkaW9FbGVtZW50IGFuZCBIVE1MT3B0aW9uRWxlbWVudCB3aXRoIHRoZSBbTmFtZWRD
b25zdHJ1Y3Rvcl0gSURMLgorCisgICAgICAgIFRlc3RzOiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5pZGwKKyAgICAgICAgICAgICAgIGZhc3QvanMvY3Vz
dG9tLWNvbnN0cnVjdG9ycy5odG1sCisgICAgICAgICAgICAgICBtZWRpYS9hdWRpby1jb25zdHJ1
Y3Rvci5odG1sCisgICAgICAgICAgICAgICBtZWRpYS9hdWRpby1jb25zdHJ1Y3Rvci1zcmMuaHRt
bAorICAgICAgICAgICAgICAgbWVkaWEvYXVkaW8tY29uc3RydWN0b3ItcHJlbG9hZC5odG1sCisg
ICAgICAgICAgICAgICBtZWRpYS9hdWRpby1jb250cm9scy1kby1ub3QtZmFkZS1vdXQuaHRtbAor
ICAgICAgICAgICAgICAgbWVkaWEvYXVkaW8tY29udHJvbHMtcmVuZGVyaW5nLmh0bWwKKyAgICAg
ICAgICAgICAgIGZhc3QvZm9ybXMvb3B0aW9uLWluZGV4Lmh0bWwKKyAgICAgICAgICAgICAgIGZh
c3QvZm9ybXMvYWRkLWFuZC1yZW1vdmUtb3B0aW9uLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qv
ZG9tL2RvbS1hZGQtb3B0aW9uZWxlbWVudC5odG1sCisKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRv
dy5pZGw6IFJlbW92ZWQgdGhlIFtKU0N1c3RvbUNvbnN0cnVjdG9yXSBJREwuIChJIGRvIG5vdCBr
bm93IHdoeSB0aGUgbGluZSBvZiBXZWJLaXRDU1NTaGFkZXJWYWx1ZS5oIGlzIHJlbW92ZWQuIEkg
anVzdCBkZWxldGVkIEpTQXVkaW9Db25zdHJ1Y3Rvci57aCxjcHB9IGFuZCBKU09wdGlvbkNvbnN0
cnVjdG9yLntoLGNwcH0gdXNpbmcgWGNvZGUgMy4yLjUuKQorCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBSZW1vdmVkIEpTQXVkaW9Db25zdHJ1Y3Rvci57aCxj
cHB9IGFuZCBKU09wdGlvbkNvbnN0cnVjdG9yLntoLGNwcH0uCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNBdWRpb0NvbnN0cnVjdG9yLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0F1ZGlvQ29uc3RydWN0b3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U09wdGlvbkNvbnN0cnVjdG9yLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U09wdGlvbkNvbnN0cnVjdG9yLmg6IFJlbW92ZWQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6b3B0
aW9uKTogU3BlY2lmaWVzIHRoZSBOYW1lZENvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6
SlNET01XaW5kb3c6OmF1ZGlvKTogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6IFJlbW92ZWQgdW5u
ZWNlc3NhcnkgY29uZGl0aW9ucyAnJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlND
dXN0b21Db25zdHJ1Y3RvciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1
c3RvbUNvbnN0cnVjdG9yIn0nLgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6IENh
bGxzIEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9uKCkgdG8gZ2VuZXJhdGUgYSBOYW1lZENv
bnN0cnVjdG9yLgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKTogR2Vu
ZXJhdGVzIGEgaGVhZGVyIGZvciBhIE5hbWVkQ29uc3RydWN0b3IuCisgICAgICAgIChHZW5lcmF0
ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbik6IEdlbmVyYXRlcyBhIE5hbWVkQ29uc3RydWN0b3IgaW1w
bGVtZW50YXRpb24gYW5kIGdldENvbnN0cnVjdERhdGEoKSBmb3IgdGhlIE5hbWVkQ29uc3RydWN0
b3IuCisgICAgICAgIChJc0NvbnN0cnVjdGFibGUpOiBBZGRlZCBhIE5hbWVkQ29uc3RydWN0b3Ig
Y29uZGl0aW9uLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkQ29uc3RydWN0b3IuY3BwOiBVcGRhdGVkIGEgcnVuLWJpbmRpbmdzLXRlc3RzIHJlc3VsdC4K
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9y
OjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3Ry
dWN0b3I6OmNvbnN0cnVjdEpTVGVzdE5hbWVkQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERh
dGEpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0
cnVjdG9yLmg6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rv
ck5hbWVkQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKwogMjAxMS0x
MS0yOCAgUm9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjEwMTIwMi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyNTRkMGRiZmZkOGE1NGY0YTY5NzVlYjhj
ZDIxMmI5M2MxMmQxZWQyLi5jZGM0NjQzMjM0MTRjNmU3MDlkN2NlNzc2ZDRjYmM0MzA3ZTg5NTcy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0xMzg2LDcgKzEzODYsNiBAQAogCQk1MDM4QkU0MTE0NzJBRDk4MDA5NUUwRDEgLyog
Q2FjaGVkU2hhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MDM4QkUzRjE0NzJBRDk4MDA5NUUwRDEgLyogQ2FjaGVkU2hhZGVyLmggKi87IH07CiAJ
CTUwOENDQTRGMTNDRjEwNkIwMDMxNTFGMyAvKiBSZW5kZXJGbG93VGhyZWFkLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDhDQ0E0RDEzQ0YxMDZCMDAz
MTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5oICovOyB9OwogCQk1MDhDQ0E1MDEzQ0YxMDZCMDAz
MTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MDhDQ0E0RTEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxv
d1RocmVhZC5jcHAgKi87IH07Ci0JCTUwQjQyMTU4MTQ2OTc2OTYwMDg3RTYwNCAvKiBXZWJLaXRD
U1NTaGFkZXJWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTBCNDIxNTcxNDY5NzY5NjAwODdFNjA0IC8qIFdlYktpdENTU1NoYWRlclZhbHVlLmgg
Ki87IH07CiAJCTUwRTU2NkQ2MTM5RTM4QzUwMDIxNDQzMyAvKiBDU1NXcmFwU2hhcGVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwMUJBQUIxMTM5
NTExNEIwMEY3QUNFQiAvKiBDU1NXcmFwU2hhcGVzLmNwcCAqLzsgfTsKIAkJNTEwMTg0NjkwQjA4
NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDE4NDY3MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEw
MTg0NkEwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwMTg0NjgwQjA4NjAyQTAwNEE4MjVGIC8q
IENhY2hlZFBhZ2UuY3BwICovOyB9OwpAQCAtMzc3Nyw4ICszNzc2LDYgQEAKIAkJQTgyMzlFMDAw
OUIzQ0Y4QTAwQjYwNjQxIC8qIExvZ2dpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTgyMzlERkUwOUIzQ0Y4QTAwQjYwNjQxIC8qIExvZ2dpbmcu
Y3BwICovOyB9OwogCQlBODIzOUUwMTA5QjNDRjhBMDBCNjA2NDEgLyogTG9nZ2luZy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgyMzlERkYwOUIzQ0Y4
QTAwQjYwNjQxIC8qIExvZ2dpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlBODI0QjQ2NTBFMkVGMkVBMDA4MUE3QjcgLyogVGV4dFJ1bi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgyNEI0NjQwRTJF
RjJFQTAwODFBN0I3IC8qIFRleHRSdW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQlBODI2RThBRTBBMUE4RjIzMDBDRDFCQjYgLyogSlNPcHRpb25D
b25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTgyNkU4QUMwQTFBOEYyMzAwQ0QxQkI2IC8qIEpTT3B0aW9uQ29uc3RydWN0b3IuaCAqLzsg
fTsKLQkJQTgyNkVDNDgwQTFCMENCRTAwQ0QxQkI2IC8qIEpTT3B0aW9uQ29uc3RydWN0b3IuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgyNkU4QUQw
QTFBOEYyMzAwQ0QxQkI2IC8qIEpTT3B0aW9uQ29uc3RydWN0b3IuY3BwICovOyB9OwogCQlBODMz
QzdDQTBBMkNGMDZCMDBENTc2NjQgLyogU1ZHTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2NTgxRTgwOUQxNTA4RDAwMEU2MUQ3IC8qIFNW
R05hbWVzLmNwcCAqLzsgfTsKIAkJQTgzM0M3Q0MwQTJDRjA3NDAwRDU3NjY0IC8qIFhMaW5rTmFt
ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2
NTgxRUEwOUQxNTA4RDAwMEU2MUQ3IC8qIFhMaW5rTmFtZXMuY3BwICovOyB9OwogCQlBODMzQzgw
QzBBMkNGMjU2MDBENTc2NjQgLyogWE1MTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgzM0M4MEEwQTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5h
bWVzLmNwcCAqLzsgfTsKQEAgLTYwMDMsOCArNjAwMCw2IEBACiAJCUU0QzI3OTU5MENGOTc0MTkw
MEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTRDMjc5NTcwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmgg
Ki87IH07CiAJCUU0RDY4Nzc3MEVEN0FFM0QwMDZFQTk3OCAvKiBQdXJnZWFibGVCdWZmZXJNYWMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRENjg3
NzYwRUQ3QUUzRDAwNkVBOTc4IC8qIFB1cmdlYWJsZUJ1ZmZlck1hYy5jcHAgKi87IH07CiAJCUU0
RDY4Nzc5MEVEN0FFNEYwMDZFQTk3OCAvKiBQdXJnZWFibGVCdWZmZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDY4Nzc4MEVEN0FFNEYwMDZFQTk3
OCAvKiBQdXJnZWFibGVCdWZmZXIuaCAqLzsgfTsKLQkJRTRFRUZGQzgwRDM0NTUwQzAwNDY5QTU4
IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNEVFRkZDNjBEMzQ1NTBDMDA0NjlBNTggLyogSlNBdWRpb0NvbnN0
cnVjdG9yLmNwcCAqLzsgfTsKLQkJRTRFRUZGQzkwRDM0NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9D
b25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTRFRUZGQzcwRDM0NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5oICovOyB9
OwogCQlFRDJCQTgzQzA5QTI0QjkxMDA2QzBBQzQgLyogRG9jdW1lbnRNYXJrZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVEMkJBODNCMDlBMjRCOTEw
MDZDMEFDNCAvKiBEb2N1bWVudE1hcmtlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUVENTAxREM2MEIyNDlGMjkwMEFFMThEOSAvKiBFZGl0b3JN
YWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFRDUw
MURDNTBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tICovOyB9OwogCQlFREUzQTUwMDBD
N0E0MzA2MDA5NTZBMzcgLyogQ29sb3JNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEVERTNBNEZGMEM3QTQzMDYwMDk1NkEzNyAvKiBDb2xvck1hYy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMDg3
OSw4ICsxMDg3NCw2IEBACiAJCUE4MjM5REZFMDlCM0NGOEEwMEI2MDY0MSAvKiBMb2dnaW5nLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2dnaW5nLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgyMzlERkYwOUIzQ0Y4QTAwQjYwNjQxIC8qIExv
Z2dpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgyNEI0NjQwRTJFRjJFQTAwODFBN0I3IC8qIFRl
eHRSdW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFJ1bi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBODI2RThBQzBBMUE4RjIzMDBDRDFCQjYgLyogSlNP
cHRpb25Db25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNP
cHRpb25Db25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBODI2RThB
RDBBMUE4RjIzMDBDRDFCQjYgLyogSlNPcHRpb25Db25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNPcHRpb25Db25zdHJ1Y3Rvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MzNDN0Y2MEEyQ0YxRDgwMEQ1NzY2NCAvKiB4bWxh
dHRycy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0geG1sYXR0cnMuaW47IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE4MzNDODBBMEEyQ0YyNTYwMEQ1NzY2NCAvKiBYTUxOYW1lcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1MTmFtZXMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODMzQzgwQjBBMkNGMjU2MDBENTc2NjQgLyog
WE1MTmFtZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhNTE5hbWVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzM4Miw4ICsxMzM3NSw2IEBACiAJCUU0
QzI3OTU3MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJNZWRpYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNEQ2ODc3NjBFRDdBRTNEMDA2RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVyTWFjLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1cmdlYWJsZUJ1ZmZlck1hYy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RDY4Nzc4MEVEN0FFNEYwMDZFQTk3
OCAvKiBQdXJnZWFibGVCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHVyZ2VhYmxlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0RUVGRkM2
MEQzNDU1MEMwMDQ2OUE1OCAvKiBKU0F1ZGlvQ29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBdWRpb0NvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTRFRUZGQzcwRDM0NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9D
b25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0F1ZGlvQ29u
c3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUQyQkE4M0IwOUEyNEI5
MTAwNkMwQUM0IC8qIERvY3VtZW50TWFya2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERvY3VtZW50TWFya2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVE
NTAxREM1MEIyNDlGMjkwMEFFMThEOSAvKiBFZGl0b3JNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBuYW1lID0gRWRpdG9yTWFjLm1tOyBwYXRoID0gbWFjL0VkaXRvck1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRURFM0E0RkYwQzdBNDMwNjAwOTU2
QTM3IC8qIENvbG9yTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbG9y
TWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDA4MiwxMiArMjAwNzMsOCBA
QAogCQlCQ0NFNThCNDEwNjFFOTI1MDA4RkIzNUEgLyogQ29uc3RydWN0b3JzICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlFNEVFRkZDNjBEMzQ1NTBDMDA0
NjlBNTggLyogSlNBdWRpb0NvbnN0cnVjdG9yLmNwcCAqLywKLQkJCQlFNEVFRkZDNzBEMzQ1NTBD
MDA0NjlBNTggLyogSlNBdWRpb0NvbnN0cnVjdG9yLmggKi8sCiAJCQkJQkM2QzQ5RjEwRDdEQkEw
NTAwRkZBNTU4IC8qIEpTSW1hZ2VDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQkM2QzQ5RjIwRDdE
QkEwNTAwRkZBNTU4IC8qIEpTSW1hZ2VDb25zdHJ1Y3Rvci5oICovLAotCQkJCUE4MjZFOEFEMEEx
QThGMjMwMENEMUJCNiAvKiBKU09wdGlvbkNvbnN0cnVjdG9yLmNwcCAqLywKLQkJCQlBODI2RThB
QzBBMUE4RjIzMDBDRDFCQjYgLyogSlNPcHRpb25Db25zdHJ1Y3Rvci5oICovLAogCQkJKTsKIAkJ
CW5hbWUgPSBDb25zdHJ1Y3RvcnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjMx
NjcsNyArMjMxNTQsNiBAQAogCQkJCUZEQTE1RUEwMTJCMDNFRTEwMDNBNTgzQSAvKiBKU0F1ZGlv
QnVmZmVyU291cmNlTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRBMTVFQTIxMkIwM0VFMTAw
M0E1ODNBIC8qIEpTQXVkaW9DaGFubmVsTWVyZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGREEx
NUVBNDEyQjAzRUUxMDAzQTU4M0EgLyogSlNBdWRpb0NoYW5uZWxTcGxpdHRlci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJRTRFRUZGQzkwRDM0NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRBMTVFQTYxMkIwM0VFMTAwM0E1ODNBIC8qIEpTQXVk
aW9Db250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGREExNUVBODEyQjAzRUUxMDAzQTU4M0Eg
LyogSlNBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRBMTVFQUEx
MkIwM0VFMTAwM0E1ODNBIC8qIEpTQXVkaW9HYWluLmggaW4gSGVhZGVycyAqLywKQEAgLTIzNDIz
LDcgKzIzNDA5LDYgQEAKIAkJCQk3N0ExN0FBNzEyRjI4QjJBMDA0RTAyRjYgLyogSlNPRVNWZXJ0
ZXhBcnJheU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRGNkJBRjkxMzRBNEM5ODAwODIy
OTIwIC8qIEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyRTI0NDc2OTEzOTU5MTczMDA0QjZDMTkgLyogSlNPcGVyYXRpb25Ob3RBbGxvd2VkRXhjZXB0
aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlBODI2RThBRTBBMUE4RjIzMDBDRDFCQjYgLyogSlNP
cHRpb25Db25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEwRDU3NDEwQTVDNzg2NzAw
N0VERDRDIC8qIEpTT3ZlcmZsb3dFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyODRCQjEx
MDQ0OUZGQTAwRUFFQjUyIC8qIEpTUGFnZVRyYW5zaXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOEE5QTU4NzUxMUU4NEM4MTAwOEFDRkQxIC8qIEpTUGVyZm9ybWFuY2UuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjYxNTAsNyArMjYxMzUsNiBAQAogCQkJCUZERUFBQUYzMTJCMDJFRTQwMERD
RjMzQiAvKiBKU0F1ZGlvQnVmZmVyU291cmNlTm9kZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGREExNUVBMTEyQjAzRUUxMDAzQTU4M0EgLyogSlNBdWRpb0NoYW5uZWxNZXJnZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkRBMTVFQTMxMkIwM0VFMTAwM0E1ODNBIC8qIEpTQXVkaW9D
aGFubmVsU3BsaXR0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTRFRUZGQzgwRDM0NTUwQzAw
NDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGREEx
NUVBNTEyQjAzRUUxMDAzQTU4M0EgLyogSlNBdWRpb0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkRFQUFBRjQxMkIwMkVFNDAwRENGMzNCIC8qIEpTQXVkaW9Db250ZXh0Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUZEQTE1RUE3MTJCMDNFRTEwMDNBNTgzQSAvKiBKU0F1ZGlv
RGVzdGluYXRpb25Ob2RlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjY0ODUsNyArMjY0NjksNiBA
QAogCQkJCTc3QTE3QUE2MTJGMjhCMkEwMDRFMDJGNiAvKiBKU09FU1ZlcnRleEFycmF5T2JqZWN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZERjZCQUY4MTM0QTRDOTgwMDgyMjkyMCAvKiBKU09m
ZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRTI0NDc2
ODEzOTU5MTczMDA0QjZDMTkgLyogSlNPcGVyYXRpb25Ob3RBbGxvd2VkRXhjZXB0aW9uLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCUE4MjZFQzQ4MEExQjBDQkUwMENEMUJCNiAvKiBKU09wdGlvbkNv
bnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMEQ1NzQwMEE1Qzc4NjcwMDdFREQ0
QyAvKiBKU092ZXJmbG93RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEyODRCQjIxMDQ0
OUZGQTAwRUFFQjUyIC8qIEpTUGFnZVRyYW5zaXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4QTlBNTg3NDExRTg0QzgxMDA4QUNGRDEgLyogSlNQZXJmb3JtYW5jZS5jcHAgaW4gU291
cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9D
b25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29uc3Ry
dWN0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjIwYTIxMzNhYzA0NTZm
YjFlNzQ3Y2Q3YjQzYzBiNjNiYzNlNTY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1
Y3Rvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pCi0KLSNpbmNsdWRl
ICJKU0F1ZGlvQ29uc3RydWN0b3IuaCIKLQotI2luY2x1ZGUgIkhUTUxBdWRpb0VsZW1lbnQuaCIK
LSNpbmNsdWRlICJKU0hUTUxBdWRpb0VsZW1lbnQuaCIKLSNpbmNsdWRlIDxydW50aW1lL0Vycm9y
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY29u
c3QgQ2xhc3NJbmZvIEpTQXVkaW9Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiQXVkaW9Db25zdHJ1
Y3RvciIsICZET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudDo6c19pbmZvLCAwLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTQXVkaW9Db25zdHJ1Y3RvcikgfTsKLQotSlNBdWRpb0NvbnN0cnVjdG9y
OjpKU0F1ZGlvQ29uc3RydWN0b3IoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgOiBET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudChzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCkKLXsKLX0KLQotdm9pZCBKU0F1ZGlvQ29uc3RydWN0b3I6OmZp
bmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QpOwotICAgIEFT
U0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNIVE1MQXVkaW9FbGVtZW50UHJv
dG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIE5vbmUpOwotICAgIHB1dERpcmVjdChl
eGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVy
KDEpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7Ci19Ci0KLXN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEF1ZGlvKEV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICBKU0F1ZGlvQ29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBzdGF0aWNfY2FzdDxK
U0F1ZGlvQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7Ci0KLSAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBqc0NvbnN0cnVjdG9yLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0g
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhl
YywgIkF1ZGlvIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUi
KSk7Ci0KLSAgICAvLyBDYWxsaW5nIHRvSlMgb24gdGhlIGRvY3VtZW50IGNhdXNlcyB0aGUgSlMg
ZG9jdW1lbnQgd3JhcHBlciB0byBiZQotICAgIC8vIGFkZGVkIHRvIHRoZSB3aW5kb3cgb2JqZWN0
LiBUaGlzIGlzIGRvbmUgdG8gZW5zdXJlIHRoYXQgSlNEb2N1bWVudDo6dmlzaXRDaGlsZHJlbgot
ICAgIC8vIHdpbGwgYmUgY2FsbGVkLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBhdWRpbyBlbGVtZW50
IHRvIGJlIG1hcmtlZCBpZiBuZWNlc3NhcnkuCi0gICAgdG9KUyhleGVjLCBqc0NvbnN0cnVjdG9y
LT5nbG9iYWxPYmplY3QoKSwgZG9jdW1lbnQpOwotCi0gICAgLy8gRklYTUU6IFRoaXMgY29udmVy
dHMgYW4gdW5kZWZpbmVkIGFyZ3VtZW50IHRvIHRoZSBzdHJpbmcgInVuZGVmaW5lZCIsIGJ1dCBw
b3NzaWJseSB3ZQotICAgIC8vIHNob3VsZCB0cmVhdCBpdCBhcyBpZiBubyBhcmd1bWVudCB3YXMg
cGFzc2VkIGluc3RlYWQsIGJ5IGNoZWNraW5nIHRoZSB2YWx1ZSBvZiBleGVjLT5hcmd1bWVudAot
ICAgIC8vIHJhdGhlciB0aGFuIGxvb2tpbmcgYXQgZXhlYy0+YXJndW1lbnRDb3VudC4KLSAgICBT
dHJpbmcgc3JjOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAwKQotICAgICAgICBz
cmMgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVj
dG9yLT5nbG9iYWxPYmplY3QoKSwKLSAgICAgICAgSFRNTEF1ZGlvRWxlbWVudDo6Y3JlYXRlRm9y
SlNDb25zdHJ1Y3Rvcihkb2N1bWVudCwgc3JjKSkpKTsKLX0KLQotQ29uc3RydWN0VHlwZSBKU0F1
ZGlvQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYg
Y29uc3RydWN0RGF0YSkKLXsKLSAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNv
bnN0cnVjdEF1ZGlvOwotICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVjdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29uc3RydWN0b3IuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNGZhNDQwNjQ1OTE1MDk5NTg5ZWJjMzQ0N2Y4ZTYxMGZhODJkM2IwMy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29uc3RydWN0b3IuaAorKysgL2Rldi9udWxsCkBAIC0x
LDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEpTQXVkaW9Db25zdHJ1Y3Rvcl9o
Ci0jZGVmaW5lIEpTQXVkaW9Db25zdHJ1Y3Rvcl9oCi0KLSNpZiBFTkFCTEUoVklERU8pCi0KLSNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RvY3VtZW50LmgiCi0jaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBKU0F1
ZGlvQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgewotICAg
IHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudCBCYXNl
OwotCi0gICAgICAgIHN0YXRpYyBKU0F1ZGlvQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgSlNBdWRpb0NvbnN0cnVjdG9y
KiBjb25zdHJ1Y3RvciA9IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNBdWRpb0NvbnN0cnVjdG9y
PigqZXhlYy0+aGVhcCgpKSkgSlNBdWRpb0NvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2Jq
ZWN0KTsKLSAgICAgICAgICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbihleGVjLCBnbG9i
YWxPYmplY3QpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwotICAgICAgICB9Ci0K
LSAgICAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8p
OwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5m
bzsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEpTQXVkaW9Db25zdHJ1Y3RvcihKU0M6OlN0cnVj
dHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgICAgICBzdGF0aWMgSlND
OjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0
cnVjdERhdGEmKTsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoVklERU8pCi0KLSNlbmRpZiAvLyBKU0F1ZGlvQ29uc3RydWN0b3JfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCmluZGV4IGJh
YmQyMWZjYzllZDNjOGE5MGRkZWZkNTEyZDBhNDFkMTU0OWViNDEuLjdmYWEyYzE2Yjk4Yjc3ZDky
MmI0MDViMDIxNTA4OTlkNzEyNzNhNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKQEAgLTI2LDE0ICsyNiwxNSBAQAogI2luY2x1ZGUg
IkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhpc3RvcnkuaCIKICNpbmNsdWRlICJKU0FycmF5
QnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNBdWRpb0NvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNE
YXRhVmlldy5oIgogI2luY2x1ZGUgIkpTRXZlbnQuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVu
ZXIuaCIKICNpbmNsdWRlICJKU0V2ZW50U291cmNlLmgiCiAjaW5jbHVkZSAiSlNGbG9hdDMyQXJy
YXkuaCIKICNpbmNsdWRlICJKU0Zsb2F0NjRBcnJheS5oIgorI2luY2x1ZGUgIkpTSFRNTEF1ZGlv
RWxlbWVudC5oIgogI2luY2x1ZGUgIkpTSFRNTENvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJKU0hU
TUxPcHRpb25FbGVtZW50LmgiCiAjaW5jbHVkZSAiSlNIaXN0b3J5LmgiCiAjaW5jbHVkZSAiSlNJ
bWFnZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNJbnQxNkFycmF5LmgiCkBAIC00Miw3ICs0
Myw2IEBACiAjaW5jbHVkZSAiSlNMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkpTTWVzc2FnZUNoYW5u
ZWwuaCIKICNpbmNsdWRlICJKU01lc3NhZ2VQb3J0Q3VzdG9tLmgiCi0jaW5jbHVkZSAiSlNPcHRp
b25Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTVWludDE2QXJyYXkuaCIKICNpbmNsdWRlICJK
U1VpbnQzMkFycmF5LmgiCiAjaW5jbHVkZSAiSlNVaW50OEFycmF5LmgiCkBAIC00ODgsNyArNDg4
LDcgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6aW1hZ2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAog
CiBKU1ZhbHVlIEpTRE9NV2luZG93OjpvcHRpb24oRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewot
ICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU09wdGlvbkNvbnN0cnVjdG9yPihleGVjLCB0
aGlzKTsKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNIVE1MT3B0aW9uRWxlbWVudE5h
bWVkQ29uc3RydWN0b3I+KGV4ZWMsIHRoaXMpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAt
NDk2LDcgKzQ5Niw3IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OmF1ZGlvKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKIHsKICAgICBpZiAoIU1lZGlhUGxheWVyOjppc0F2YWlsYWJsZSgpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNB
dWRpb0NvbnN0cnVjdG9yPihleGVjLCB0aGlzKTsKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0
b3I8SlNIVE1MQXVkaW9FbGVtZW50TmFtZWRDb25zdHJ1Y3Rvcj4oZXhlYywgdGhpcyk7CiB9CiAj
ZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPcHRpb25D
b25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09wdGlvbkNvbnN0
cnVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE2ODE4NjY5ZWMxZDQ5
NTNjMTdhMjFmNDYzMmYyMmQ1ZmIzNTZiZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09wdGlvbkNvbnN0
cnVjdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNPcHRpb25Db25zdHJ1Y3Rvci5oIgotCi0j
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKLSNp
bmNsdWRlICJKU0hUTUxPcHRpb25FbGVtZW50LmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgotI2luY2x1ZGUgIlRleHQuaCIKLSNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQVNTRVJU
X0NMQVNTX0ZJVFNfSU5fQ0VMTChKU09wdGlvbkNvbnN0cnVjdG9yKTsKLQotY29uc3QgQ2xhc3NJ
bmZvIEpTT3B0aW9uQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIk9wdGlvbkNvbnN0cnVjdG9yIiwg
JkRPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNPcHRpb25Db25zdHJ1Y3RvcikgfTsKLQotSlNPcHRpb25Db25zdHJ1Y3Rvcjo6SlNP
cHRpb25Db25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKLSAgICA6IERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50KHN0cnVjdHVy
ZSwgZ2xvYmFsT2JqZWN0KQotewotfQotCi12b2lkIEpTT3B0aW9uQ29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QpOwotICAgIEFTU0VS
VChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNIVE1MT3B0aW9uRWxlbWVudFByb3Rv
dHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKLSAgICBwdXREaXJlY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcig0
KSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwotfQotCi1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RIVE1MT3B0aW9uRWxlbWVudChFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgSlNPcHRpb25Db25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0
YXRpY19jYXN0PEpTT3B0aW9uQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7Ci0gICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0ganNDb25zdHJ1Y3Rvci0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRv
Y3VtZW50KQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5j
ZUVycm9yKGV4ZWMsICJPcHRpb24gY29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1
bmF2YWlsYWJsZSIpKTsKLQotICAgIFN0cmluZyBkYXRhOwotICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPj0gMSkKLSAgICAgICAgZGF0YSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1
bWVudCgwKS50b1N0cmluZyhleGVjKSk7Ci0KLSAgICBTdHJpbmcgdmFsdWU7Ci0gICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKQotICAgICAgICB2YWx1ZSA9IHVzdHJpbmdUb1N0cmlu
ZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSk7Ci0gICAgYm9vbCBkZWZhdWx0U2Vs
ZWN0ZWQgPSAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDMpICYmIGV4ZWMtPmFyZ3VtZW50KDIp
LnRvQm9vbGVhbihleGVjKTsKLSAgICBib29sIHNlbGVjdGVkID0gKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA+PSA0KSAmJiBleGVjLT5hcmd1bWVudCgzKS50b0Jvb2xlYW4oZXhlYyk7Ci0KLSAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+IGVsZW1l
bnQgPSBIVE1MT3B0aW9uRWxlbWVudDo6Y3JlYXRlRm9ySlNDb25zdHJ1Y3Rvcihkb2N1bWVudCwg
ZGF0YSwgdmFsdWUsIGRlZmF1bHRTZWxlY3RlZCwgc2VsZWN0ZWQsIGVjKTsKLSAgICBpZiAoZWMp
IHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwotICAgIH0KLQotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwg
ZWxlbWVudC5yZWxlYXNlKCkpKSk7Ci19Ci0KLUNvbnN0cnVjdFR5cGUgSlNPcHRpb25Db25zdHJ1
Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3RE
YXRhKQotewotICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0SFRN
TE9wdGlvbkVsZW1lbnQ7Ci0gICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwotfQotCi0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTT3B0aW9uQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
T3B0aW9uQ29uc3RydWN0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJlMTU5
ZTYwNDEzNjE3ODNhNTcyOTM1YmYwOTY4MWNlNjllMGY5Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09w
dGlvbkNvbnN0cnVjdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2lmbmRlZiBKU09wdGlvbkNvbnN0cnVjdG9yX2gKLSNkZWZpbmUgSlNPcHRpb25Db25zdHJ1Y3Rv
cl9oCi0KLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RvY3VtZW50Lmgi
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBj
bGFzcyBKU09wdGlvbkNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yV2l0aERvY3Vt
ZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JXaXRoRG9j
dW1lbnQgQmFzZTsKLQotICAgICAgICBzdGF0aWMgSlNPcHRpb25Db25zdHJ1Y3RvciogY3JlYXRl
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBKU09wdGlv
bkNvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNPcHRp
b25Db25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIEpTT3B0aW9uQ29uc3RydWN0b3Ioc3RydWN0
dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICAgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0
aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7
Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpD
bGFzc0luZm8gc19pbmZvOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgSlNPcHRpb25Db25zdHJ1
Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAg
ICAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0Nl
bGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBKU09wdGlvbkNvbnN0cnVjdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggY2FjMzUwYjQ5
NDE1MzFiODZhNzQyYTg3MmJiMjVjMjMwOGY0YjY5OC4uMjcyMjBlMjQ0NzRkYTU2YTY3MTI3MWZh
NTA5OWRjOWVhODZjNDk4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTEwNzEsNyArMTA3MSw3IEBAIHN1YiBHZW5lcmF0
ZUhlYWRlcgogCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn07XG5cbiIpOwogCi0gICAgaWYg
KCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tQ29uc3RydWN0b3IifSB8
fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Db25zdHJ1Y3RvciJ9IHx8
ICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPbWl0Q29uc3RydWN0b3IifSkgewor
ICAgIGlmICghJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiT21pdENvbnN0cnVjdG9y
In0pIHsKICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKICAg
ICAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKFxAaGVhZGVyQ29udGVudCwgJGNs
YXNzTmFtZSwgJGRhdGFOb2RlLCAkaW50ZXJmYWNlTmFtZSk7CiAgICAgfQpAQCAtMTM4Miw2ICsx
MzgyLDkgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgICAgICBteSAkcHJvdG9D
bGFzc05hbWUgPSAiJHtjbGFzc05hbWV9UHJvdG90eXBlIjsKICAgICAgICAgR2VuZXJhdGVDb25z
dHJ1Y3RvckRlZmluaXRpb24oXEBpbXBsQ29udGVudCwgJGNsYXNzTmFtZSwgJHByb3RvQ2xhc3NO
YW1lLCAkaW50ZXJmYWNlTmFtZSwgJHZpc2libGVDbGFzc05hbWUsICRkYXRhTm9kZSk7CisgICAg
ICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9y
In0pIHsKKyAgICAgICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9uKFxAaW1wbENv
bnRlbnQsICRjbGFzc05hbWUsICRwcm90b0NsYXNzTmFtZSwgJGludGVyZmFjZU5hbWUsICR2aXNp
YmxlQ2xhc3NOYW1lLCAkZGF0YU5vZGUsICJHZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3RvciIpOwor
ICAgICAgICB9CiAgICAgfQogCiAgICAgIyAtIEFkZCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cyB0
byBhIGhhc2h0YWJsZSBkZWZpbml0aW9uCkBAIC0zMjM0LDcgKzMyMzcsNyBAQCBzdWIgR2VuZXJh
dGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAicHJvdGVj
dGVkOlxuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
SlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0
dXJlRmxhZ3M7XG4iKTsKIAotICAgIGlmIChJc0NvbnN0cnVjdGFibGUoJGRhdGFOb2RlKSkgewor
ICAgIGlmIChJc0NvbnN0cnVjdGFibGUoJGRhdGFOb2RlKSAmJiAhJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9KSB7CiAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnN0cnVjdCR7Y2xhc3NOYW1lfShKU0M6OkV4ZWNTdGF0ZSopO1xuIik7CiAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVj
dERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTtcbiIpOwogICAgIH0KQEAg
LTMyNDMsNiArMzI0NiwzNiBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uCiAg
ICAgaWYgKElzQ29uc3RydWN0b3JUZW1wbGF0ZSgkZGF0YU5vZGUsICJFdmVudCIpKSB7CiAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImJvb2wgZmlsbCR7aW50ZXJmYWNlTmFtZX1Jbml0KCR7
aW50ZXJmYWNlTmFtZX1Jbml0JiwgSlNEaWN0aW9uYXJ5Jik7XG5cbiIpOwogICAgIH0KKworICAg
IGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9yIn0p
IHsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCA8PEVORCk7CitjbGFzcyBKUyR7aW50ZXJm
YWNlTmFtZX1OYW1lZENvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yV2l0aERvY3Vt
ZW50IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50IEJh
c2U7CisKKyAgICBzdGF0aWMgSlMke2ludGVyZmFjZU5hbWV9TmFtZWRDb25zdHJ1Y3RvciogY3Jl
YXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlMke2ludGVyZmFj
ZU5hbWV9TmFtZWRDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBuZXcgKEpTQzo6YWxsb2NhdGVD
ZWxsPEpTJHtpbnRlcmZhY2VOYW1lfU5hbWVkQ29uc3RydWN0b3I+KCpleGVjLT5oZWFwKCkpKSBK
UyR7aW50ZXJmYWNlTmFtZX1OYW1lZENvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0
KTsKKyAgICAgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKGV4ZWMsIGdsb2JhbE9iamVj
dCk7CisgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgIH0KKworICAgIHN0YXRpYyBjb25z
dCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisKK3ByaXZhdGU6CisgICAgSlMke2ludGVyZmFjZU5h
bWV9TmFtZWRDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7
CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RK
UyR7aW50ZXJmYWNlTmFtZX0oSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgSlNDOjpDb25z
dHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERh
dGEmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9i
YWxPYmplY3QqKTsKK307CisKK0VORAorICAgIH0KIH0KIAogc3ViIEdlbmVyYXRlQ29uc3RydWN0
b3JEZWZpbml0aW9uCkBAIC0zMjU0LDM4ICszMjg3LDU0IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVj
dG9yRGVmaW5pdGlvbgogICAgIG15ICRpbnRlcmZhY2VOYW1lID0gc2hpZnQ7CiAgICAgbXkgJHZp
c2libGVDbGFzc05hbWUgPSBzaGlmdDsKICAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICBt
eSAkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IgPSBzaGlmdDsKIAotICAgIG15ICRjb25zdHJ1
Y3RvckNsYXNzTmFtZSA9ICIke2NsYXNzTmFtZX1Db25zdHJ1Y3RvciI7CisgICAgbXkgJGNvbnN0
cnVjdG9yQ2xhc3NOYW1lID0gJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yID8gIiR7Y2xhc3NO
YW1lfU5hbWVkQ29uc3RydWN0b3IiIDogIiR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yIjsKICAgICBt
eSAkbnVtYmVyT2Zjb25zdHJ1Y3RQYXJhbWV0ZXJzID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ29uc3RydWN0b3JQYXJhbWV0ZXJzIn07CiAKLSAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICJjb25zdCBDbGFzc0luZm8gJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OnNfaW5mbyA9IHsg
XCIke3Zpc2libGVDbGFzc05hbWV9Q29uc3RydWN0b3JcIiwgJkRPTUNvbnN0cnVjdG9yT2JqZWN0
OjpzX2luZm8sICYke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKCRjb25zdHJ1Y3RvckNsYXNzTmFtZSkgfTtcblxuIik7Ci0KLSAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6JHtjb25zdHJ1Y3RvckNsYXNzTmFt
ZX0oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
XG4iKTsKLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgOiBET01Db25zdHJ1Y3Rvck9iamVj
dChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdClcbiIpOwotICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IntcbiIpOwotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7CisgICAgaWYgKCRnZW5l
cmF0aW5nTmFtZWRDb25zdHJ1Y3RvcikgeworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJj
b25zdCBDbGFzc0luZm8gJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OnNfaW5mbyA9IHsgXCIke3Zp
c2libGVDbGFzc05hbWV9Q29uc3RydWN0b3JcIiwgJkRPTUNvbnN0cnVjdG9yT2JqZWN0OjpzX2lu
Zm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoJGNvbnN0cnVjdG9yQ2xhc3NOYW1lKSB9O1xu
XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiJHtjb25zdHJ1Y3RvckNsYXNzTmFt
ZX06OiR7Y29uc3RydWN0b3JDbGFzc05hbWV9KFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICA6IERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50KHN0cnVjdHVyZSwgZ2xvYmFsT2Jq
ZWN0KVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOworICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgImNvbnN0IENsYXNzSW5mbyAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6
c19pbmZvID0geyBcIiR7dmlzaWJsZUNsYXNzTmFtZX1Db25zdHJ1Y3RvclwiLCAmRE9NQ29uc3Ry
dWN0b3JPYmplY3Q6OnNfaW5mbywgJiR7Y29uc3RydWN0b3JDbGFzc05hbWV9VGFibGUsIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoJGNvbnN0cnVjdG9yQ2xhc3NOYW1lKSB9O1xuXG4iKTsKKyAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OiR7Y29uc3Ry
dWN0b3JDbGFzc05hbWV9KFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICA6IERP
TUNvbnN0cnVjdG9yT2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KVxuIik7CisgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICJ9XG5cbiIpOworICAgIH0KIAogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInZvaWQgJHtjb25z
dHJ1Y3RvckNsYXNzTmFtZX06OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdClcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IntcbiIpOwotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bihleGVjLT5nbG9iYWxEYXRhKCkpO1xuIik7Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7XG4iKTsKICAgICBpZiAoJGludGVyZmFjZU5hbWUg
ZXEgIkRPTVdpbmRvdyIpIHsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7XG4iKTsKKyAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7XG4iKTsKICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCks
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGdsb2JhbE9iamVjdC0+cHJvdG90eXBl
KCksIERvbnREZWxldGUgfCBSZWFkT25seSk7XG4iKTsKKyAgICB9IGVsc2lmICgkZ2VuZXJhdGlu
Z05hbWVkQ29uc3RydWN0b3IpIHsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7XG4iKTsKKyAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6c2Vs
ZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTtcbiIpOwogICAgIH0gZWxzZSB7CisgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9i
YWxEYXRhKCkpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlQo
aW5oZXJpdHMoJnNfaW5mbykpO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJv
dG90eXBlLCAke3Byb3RvQ2xhc3NOYW1lfTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpO1xuIik7CiAgICAgfQogICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoLCBqc051bWJlcigke251bWJlck9mY29uc3RydWN0UGFyYW1ldGVyc30pLCBSZWFkT25s
eSB8IERvbnREZWxldGUgfCBEb250RW51bSk7XG4iKSBpZiAkbnVtYmVyT2Zjb25zdHJ1Y3RQYXJh
bWV0ZXJzOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7CiAKLSAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICJib29sICR7Y29uc3RydWN0b3JDbGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KVxuIik7Ci0gICAgcHVzaChAJG91dHB1dEFy
cmF5LCAie1xuIik7Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBnZXRTdGF0
aWNWYWx1ZVNsb3Q8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0sIEpTRE9NV3JhcHBlcj4oZXhlYywg
JiR7Y29uc3RydWN0b3JDbGFzc05hbWV9VGFibGUsIHN0YXRpY19jYXN0PCR7Y29uc3RydWN0b3JD
bGFzc05hbWV9Kj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7XG4iKTsKLSAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICJ9XG5cbiIpOworICAgIGlmICghJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVj
dG9yKSB7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImJvb2wgJHtjb25zdHJ1Y3RvckNs
YXNzTmFtZX06OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpXG4i
KTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7CisgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PCR7Y29uc3RydWN0b3JD
bGFzc05hbWV9LCBKU0RPTVdyYXBwZXI+KGV4ZWMsICYke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfVRh
YmxlLCBzdGF0aWNfY2FzdDwke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSo+KGNlbGwpLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7
CiAKLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJib29sICR7Y29uc3RydWN0b3JDbGFzc05hbWV9
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcilcbiIpOwotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPCR7
Y29uc3RydWN0b3JDbGFzc05hbWV9LCBKU0RPTVdyYXBwZXI+KGV4ZWMsICYke2NvbnN0cnVjdG9y
Q2xhc3NOYW1lfVRhYmxlLCBzdGF0aWNfY2FzdDwke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSo+KG9i
amVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XG4iKTsKLSAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICJ9XG5cbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJib29sICR7Y29u
c3RydWN0b3JDbGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcilcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICJ7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBn
ZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0sIEpTRE9NV3Jh
cHBlcj4oZXhlYywgJiR7Y29uc3RydWN0b3JDbGFzc05hbWV9VGFibGUsIHN0YXRpY19jYXN0PCR7
Y29uc3RydWN0b3JDbGFzc05hbWV9Kj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOworICAgIH0KIAog
ICAgIGlmIChJc0NvbnN0cnVjdGFibGUoJGRhdGFOb2RlKSkgewogICAgICAgICBpZiAoSXNDb25z
dHJ1Y3RvclRlbXBsYXRlKCRkYXRhTm9kZSwgIkV2ZW50IikpIHsKQEAgLTMzNTIsNyArMzQwMSw3
IEBAIEVORAogfQogCiBFTkQKLSAgICAgICAgfSBlbHNpZiAoISgkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJKU0N1c3RvbUNvbnN0cnVjdG9yIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifSkpIHsKKyAgICAgICAgfSBlbHNpZiAo
ISgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUNvbnN0cnVjdG9yIn0g
fHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifSkg
JiYgKCEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9yIn0g
fHwgJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yKSkgewogICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2NvbnN0cnVjdG9yQ2xh
c3NOYW1lfTo6Y29uc3RydWN0JHtjbGFzc05hbWV9KEV4ZWNTdGF0ZSogZXhlYylcbiIpOwogICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7CiAKQEAgLTMzODIsNiArMzQzMSw5
IEBAIEVORAogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIWNv
bnRleHQpXG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgXCIk
e2ludGVyZmFjZU5hbWV9IGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFp
bGFibGVcIikpO1xuIik7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoJGdlbmVyYXRp
bmdOYW1lZENvbnN0cnVjdG9yKSB7CisgICAgICAgICAgICAgICAgcHVzaChAY29uc3RydWN0b3JB
cmdMaXN0LCAianNDb25zdHJ1Y3Rvci0+ZG9jdW1lbnQoKSIpOworICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBteSAkaW5kZXggPSAwOwogICAgICAgICAgICAgZm9yZWFjaCBteSAkcGFyYW1l
dGVyIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKQEAgLTMzOTQsNyArMzQ0NiwxMiBAQCBF
TkQKICAgICAgICAgICAgICAgICBwdXNoKEBjb25zdHJ1Y3RvckFyZ0xpc3QsICJlYyIpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgbXkgJGNvbnN0cnVjdG9yQXJnID0gam9pbigiLCAiLCBA
Y29uc3RydWN0b3JBcmdMaXN0KTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBSZWZQdHI8JHtpbnRlcmZhY2VOYW1lfT4gb2JqZWN0ID0gJHtpbnRlcmZhY2VOYW1lfTo6Y3Jl
YXRlKCR7Y29uc3RydWN0b3JBcmd9KTtcbiIpOworICAgICAgICAgICAgaWYgKCRnZW5lcmF0aW5n
TmFtZWRDb25zdHJ1Y3RvcikgeworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBSZWZQdHI8JHtpbnRlcmZhY2VOYW1lfT4gb2JqZWN0ID0gJHtpbnRlcmZhY2VOYW1lfTo6
Y3JlYXRlRm9ySlNDb25zdHJ1Y3Rvcigke2NvbnN0cnVjdG9yQXJnfSk7XG4iKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJl
ZlB0cjwke2ludGVyZmFjZU5hbWV9PiBvYmplY3QgPSAke2ludGVyZmFjZU5hbWV9OjpjcmVhdGUo
JHtjb25zdHJ1Y3RvckFyZ30pO1xuIik7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlm
ICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvclJhaXNlc0V4Y2Vw
dGlvbiJ9KSB7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChl
Yykge1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpO1xuIik7CkBAIC0zNDA2LDExICszNDYzLDEzIEBAIEVO
RAogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKICAgICAgICAgfQog
Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIkNvbnN0cnVjdFR5cGUgJHtjb25zdHJ1Y3Rv
ckNsYXNzTmFtZX06OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29u
c3RydWN0RGF0YSlcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKLSAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0
aW9uID0gY29uc3RydWN0JHtjbGFzc05hbWV9O1xuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7XG4iKTsKLSAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAifVxuXG4iKTsKKyAgICAgICAgaWYgKCEkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9yIn0gfHwgJGdlbmVyYXRpbmdOYW1lZENvbnN0
cnVjdG9yKSB7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJDb25zdHJ1Y3RUeXBl
ICR7Y29uc3RydWN0b3JDbGFzc05hbWV9OjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0
cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIntcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGNvbnN0
cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0JHtjbGFzc05hbWV9O1xuIik7Cisg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVI
b3N0O1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOworICAg
ICAgICB9CiAgICAgfQogfQogCkBAIC0zNDE4LDcgKzM0NzcsNyBAQCBzdWIgSXNDb25zdHJ1Y3Rh
YmxlCiB7CiAgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CiAKLSAgICByZXR1cm4gJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifSB8fCAkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUNvbnN0cnVjdG9yIn0gfHwgJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3IifSB8fCAkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJKU0NvbnN0cnVjdG9yVGVtcGxhdGUifSB8fCAkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvclRlbXBsYXRlIn07CisgICAgcmV0dXJuICRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUNvbnN0cnVjdG9yIn0gfHwgJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21Db25zdHJ1Y3RvciJ9IHx8ICRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yIn0gfHwgJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9IHx8ICRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ29uc3RydWN0b3JUZW1wbGF0ZSJ9IHx8ICRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yVGVtcGxhdGUifTsKIH0KIAogc3Vi
IElzQ29uc3RydWN0b3JUZW1wbGF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3Bw
CmluZGV4IGI3M2Y4ODA4NmIzNmI3MjU0NTUxNDYzOTg4Y2RhMTNhMjYwNTg0ZWYuLmYyMTVmYWY0
ZjZlN2FlN2Q5NjE4NTg0M2IwOTQwNDk1YTU2YTUxNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRD
b25zdHJ1Y3Rvci5jcHAKQEAgLTIxLDcgKzIxLDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oIgogCisjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIlRlc3ROYW1lZENv
bnN0cnVjdG9yLmgiCisjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHd0Zi9H
ZXRQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKQEAgLTkzLDYgKzk2LDQ5IEBAIGJvb2wg
SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNPYmplY3QqIG9iamVjCiAgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxK
U1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgJkpT
VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvclRhYmxlLCBzdGF0aWNfY2FzdDxKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IpOwogfQogCitjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVk
Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3Ii
LCAmRE9NQ29uc3RydWN0b3JPYmplY3Q6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3RvcikgfTsKKworSlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1l
ZENvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQorICAgIDogRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQoc3RydWN0dXJlLCBn
bG9iYWxPYmplY3QpCit7Cit9CisKK3ZvaWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29u
c3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmpl
Y3QpOworICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgcHV0RGlyZWN0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsK
K30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9y
TmFtZWRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0TmFtZWRDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3Iq
IGpzQ29uc3RydWN0b3IgPSBzdGF0aWNfY2FzdDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRD
b25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgIk5vdCBlbm91Z2ggYXJndW1lbnRzIikpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGNvbnN0IFN0cmluZyYgc3RyMSh1c3RyaW5nVG9TdHJpbmcoTUFZQkVfTUlTU0lO
R19QQVJBTUVURVIoZXhlYywgMCwgTWlzc2luZ0lzVW5kZWZpbmVkKS5pc0VtcHR5KCkgPyBVU3Ry
aW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBNaXNzaW5nSXNVbmRlZmlu
ZWQpLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIGNvbnN0IFN0
cmluZyYgc3RyMih1c3RyaW5nVG9TdHJpbmcoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywg
MSwgTWlzc2luZ0lzVW5kZWZpbmVkKS5pc0VtcHR5KCkgPyBVU3RyaW5nKCkgOiBNQVlCRV9NSVNT
SU5HX1BBUkFNRVRFUihleGVjLCAxLCBNaXNzaW5nSXNVbmRlZmluZWQpLnRvU3RyaW5nKGV4ZWMp
KSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIGNvbnN0IFN0cmluZyYgc3RyMyh1c3RyaW5n
VG9TdHJpbmcoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMiwgTWlzc2luZ0lzRW1wdHkp
LmlzRW1wdHkoKSA/IFVTdHJpbmcoKSA6IE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDIs
IE1pc3NpbmdJc0VtcHR5KS50b1N0cmluZyhleGVjKSkpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICBSZWZQdHI8VGVzdE5hbWVkQ29uc3RydWN0b3I+IG9iamVjdCA9IFRlc3ROYW1lZENvbnN0
cnVjdG9yOjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKGpzQ29uc3RydWN0b3ItPmRvY3VtZW50KCks
IHN0cjEsIHN0cjIsIHN0cjMsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOworICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMoZXhl
YywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIG9iamVjdC5nZXQoKSkpKTsKK30KKwor
Q29uc3RydWN0VHlwZSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcjo6Z2V0
Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQorewor
ICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0SlNUZXN0TmFtZWRD
b25zdHJ1Y3RvcjsKKyAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7Cit9CisKIC8qIEhhc2gg
dGFibGUgZm9yIHByb3RvdHlwZSAqLwogI2lmIEVOQUJMRShKSVQpCiAjZGVmaW5lIFRIVU5LX0dF
TkVSQVRPUihnZW5lcmF0b3IpICwgZ2VuZXJhdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0
b3IuaAppbmRleCBmZTJmZDUwODU0YTNmOGI0YzI0MTIwYzcwNmY2YmViOGU2YTBiM2M0Li5hM2Y3
YjcxNGI2NTMyNTllZWU3NzA4M2EyMDZjYWQ4NTEzZjc4MThkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yLmgKQEAgLTEyOCw2ICsxMjgsMzEgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9i
amVjdDo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCitjbGFzcyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9y
TmFtZWRDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudCB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudCBCYXNlOworCisg
ICAgc3RhdGljIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKiBjcmVhdGUo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yTmFtZWRDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBuZXcgKEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgp
KSkgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9i
YWxPYmplY3QpOworICAgICAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24oZXhlYywgZ2xv
YmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworICAgIH0KKworICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgfQorCisgICAgc3Rh
dGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKworcHJpdmF0ZToKKyAgICBKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xv
YmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zdHJ1Y3RKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKik7CisgICAg
c3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwg
SlNDOjpDb25zdHJ1Y3REYXRhJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Cit9OworCiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6
SlNWYWx1ZSBqc1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuaWRsCmluZGV4IGM5YWMyNTFjMjZiZGU0OTMwODcyNjI5MGRjNmFhNzg0MzAwMTkxYTYu
LmEyNjRmOTVkMjFkZGYwMGQ0MGM5Y2I5M2Y5ZTQ2YjQzM2ZiZWM5MzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5pZGwKQEAgLTQ5Miw3ICs0OTIsNyBAQCBtb2R1bGUgd2luZG93IHsKICAgICAg
ICAgYXR0cmlidXRlIEhUTUxVbmtub3duRWxlbWVudENvbnN0cnVjdG9yIEhUTUxVbmtub3duRWxl
bWVudDsKIAogICAgICAgICBhdHRyaWJ1dGUgW0pTQ0N1c3RvbUdldHRlciwgQ3VzdG9tQ29uc3Ry
dWN0b3JdIEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yIEltYWdlOyAvLyBV
c2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKLSAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0
ZXIsIEpTQ3VzdG9tQ29uc3RydWN0b3JdIEhUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3JDb25z
dHJ1Y3RvciBPcHRpb247IC8vIFVzYWJsZSB3aXRoIG5ldyBvcGVyYXRvcgorICAgICAgICBhdHRy
aWJ1dGUgW0pTQ0N1c3RvbUdldHRlcl0gSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3RvckNvbnN0
cnVjdG9yIE9wdGlvbjsgLy8gVXNhYmxlIHdpdGggbmV3IG9wZXJhdG9yCiAKICAgICAgICAgYXR0
cmlidXRlIENhbnZhc1BhdHRlcm5Db25zdHJ1Y3RvciBDYW52YXNQYXR0ZXJuOwogICAgICAgICBh
dHRyaWJ1dGUgQ2FudmFzR3JhZGllbnRDb25zdHJ1Y3RvciBDYW52YXNHcmFkaWVudDsKQEAgLTYy
OSw3ICs2MjksNyBAQCBtb2R1bGUgd2luZG93IHsKIAogICAgICAgICBhdHRyaWJ1dGUgU3RvcmFn
ZUNvbnN0cnVjdG9yIFN0b3JhZ2U7CiAKLSAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0
ZXIsIEpTQ3VzdG9tQ29uc3RydWN0b3IsIENvbmRpdGlvbmFsPVZJREVPLCBFbmFibGVkQXRSdW50
aW1lXSBIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciBBdWRpbzsgLy8gVXNh
YmxlIHdpdGggdGhlIG5ldyBvcGVyYXRvcgorICAgICAgICBhdHRyaWJ1dGUgW0pTQ0N1c3RvbUdl
dHRlciwgQ29uZGl0aW9uYWw9VklERU8sIEVuYWJsZWRBdFJ1bnRpbWVdIEhUTUxBdWRpb0VsZW1l
bnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yIEF1ZGlvOyAvLyBVc2FibGUgd2l0aCB0aGUgbmV3IG9w
ZXJhdG9yCiAgICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9VklERU8sIEVuYWJsZWRBdFJ1
bnRpbWVdIEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3RvciBIVE1MQXVkaW9FbGVtZW50OwogICAg
ICAgICBhdHRyaWJ1dGUgW0NvbmRpdGlvbmFsPVZJREVPLCBFbmFibGVkQXRSdW50aW1lXSBIVE1M
TWVkaWFFbGVtZW50Q29uc3RydWN0b3IgSFRNTE1lZGlhRWxlbWVudDsKICAgICAgICAgYXR0cmli
dXRlIFtDb25kaXRpb25hbD1WSURFTywgRW5hYmxlZEF0UnVudGltZV0gSFRNTFZpZGVvRWxlbWVu
dENvbnN0cnVjdG9yIEhUTUxWaWRlb0VsZW1lbnQ7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>