<?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>222434</bug_id>
          
          <creation_ts>2021-02-25 13:01:05 -0800</creation_ts>
          <short_desc>Add some exception checks to the bindings generator</short_desc>
          <delta_ts>2021-02-25 17:57:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>cdumez</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1733469</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-02-25 13:01:05 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733483</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-02-25 13:37:27 -0800</bug_when>
    <thetext>&lt;rdar://69066130&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733494</commentid>
    <comment_count>2</comment_count>
      <attachid>421560</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-02-25 13:55:35 -0800</bug_when>
    <thetext>Created attachment 421560
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733504</commentid>
    <comment_count>3</comment_count>
      <attachid>421560</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-02-25 14:03:07 -0800</bug_when>
    <thetext>Comment on attachment 421560
patch

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

r=me, looks good!

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:1261
&gt;          push(@$outputArray, &quot;    if (pluginElementCustomPut(thisObject, lexicalGlobalObject, propertyName, value, putPropertySlot, putResult))\n&quot;);
&gt;          push(@$outputArray, &quot;        return putResult;\n\n&quot;);
&gt; +        push(@$outputArray, &quot;    RETURN_IF_EXCEPTION(throwScope, false);\n&quot;);

I wonder if we need to put `RETURN_IF_EXCEPTION(throwScope, false)` even in `true` case of pluginElementCustomPut.

bool success = pluginElementCustomPut(...);
RETURN_IF_EXCEPTION(throwScope, false);
if (success)
    return putResult;

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:1266
&gt;      push(@$outputArray, &quot;    return JSObject::put(thisObject, lexicalGlobalObject, propertyName, value, putPropertySlot);\n&quot;);

How about using this instead?

RELEASE_AND_RETURN(throwScope, JSObject::put(thisObject, lexicalGlobalObject, propertyName, value, putPropertySlot));

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:1342
&gt;          push(@$outputArray, &quot;    if (pluginElementCustomPut(thisObject, lexicalGlobalObject, propertyName, value, putPropertySlot, putResult))\n&quot;);
&gt;          push(@$outputArray, &quot;        return putResult;\n\n&quot;);
&gt; +        push(@$outputArray, &quot;    RETURN_IF_EXCEPTION(throwScope, false);\n&quot;);

Ditto.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:1348
&gt;          push(@$outputArray, &quot;    return JSObject::putByIndex(cell, lexicalGlobalObject, index, value, shouldThrow);\n&quot;);

Ditto about RELEASE_AND_RETURN.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:1506
&gt;      push(@$outputArray, &quot;    return JSObject::defineOwnProperty(object, lexicalGlobalObject, propertyName, newPropertyDescriptor, shouldThrow);\n&quot;);

Ditto about RELEASE_AND_RETURN.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733520</commentid>
    <comment_count>4</comment_count>
      <attachid>421560</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-02-25 14:27:43 -0800</bug_when>
    <thetext>Comment on attachment 421560
patch

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

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:1261
&gt;&gt; +        push(@$outputArray, &quot;    RETURN_IF_EXCEPTION(throwScope, false);\n&quot;);
&gt; 
&gt; I wonder if we need to put `RETURN_IF_EXCEPTION(throwScope, false)` even in `true` case of pluginElementCustomPut.
&gt; 
&gt; bool success = pluginElementCustomPut(...);
&gt; RETURN_IF_EXCEPTION(throwScope, false);
&gt; if (success)
&gt;     return putResult;

yeah, I think this is the right way to do it. I&apos;ll fix.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:1266
&gt;&gt;      push(@$outputArray, &quot;    return JSObject::put(thisObject, lexicalGlobalObject, propertyName, value, putPropertySlot);\n&quot;);
&gt; 
&gt; How about using this instead?
&gt; 
&gt; RELEASE_AND_RETURN(throwScope, JSObject::put(thisObject, lexicalGlobalObject, propertyName, value, putPropertySlot));

yeah, I can do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733526</commentid>
    <comment_count>5</comment_count>
      <attachid>421567</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-02-25 14:40:30 -0800</bug_when>
    <thetext>Created attachment 421567
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733620</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-02-25 17:57:27 -0800</bug_when>
    <thetext>Committed r273524: &lt;https://commits.webkit.org/r273524&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 421567.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421560</attachid>
            <date>2021-02-25 13:55:35 -0800</date>
            <delta_ts>2021-02-25 14:40:30 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>83592</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MzUwNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBACisyMDIxLTAyLTI1ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzb21lIGV4Y2VwdGlvbiBj
aGVja3MgdG8gdGhlIGJpbmRpbmdzIGdlbmVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyNDM0CisgICAgICAgIDxyZGFyOi8vNjkwNjYxMzA+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDog
anMvZG9tL2xvY2FsLXN0b3JhZ2UtZXhjZXB0aW9uLWNoZWNrcy5odG1sCisKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlSW52
b2tlSW5kZXhlZFByb3BlcnR5U2V0dGVyKToKKyAgICAgICAgKEdlbmVyYXRlSW52b2tlTmFtZWRQ
cm9wZXJ0eVNldHRlcik6CisgICAgICAgIChHZW5lcmF0ZVB1dCk6CisgICAgICAgIChHZW5lcmF0
ZVB1dEJ5SW5kZXgpOgorICAgICAgICAoR2VuZXJhdGVEZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllcjo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXI6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllcjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpw
dXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uOjpwdXRCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdXQp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpw
dXRCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpw
dXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyOjpwdXRCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllcjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpwdXRCeUluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdXQp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXI6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnB1dCk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6cHV0QnlJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6
ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dCk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpwdXRCeUluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmRlZmlu
ZU93blByb3BlcnR5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RO
YW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHV0QnlJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpkZWZpbmVPd25Qcm9wZXJ0eSk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlcjo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXI6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyQW5kU2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjpwdXRCeUluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0
ZXI6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
OjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3Zl
cnJpZGVCdWlsdEluczo6cHV0QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpkZWZpbmVPd25Qcm9wZXJ0eSk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM6OnB1dCk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRp
ZXM6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVu
Zm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0
aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92
ZXJyaWRlQnVpbHRJbnM6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVC
dWlsdEluczo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0UGx1Z2luSW50ZXJmYWNlOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UGx1Z2lu
SW50ZXJmYWNlOjpwdXRCeUluZGV4KToKKwogMjAyMS0wMi0yMyAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgU3RyZWFtbGluZSBJbWFnZURhdGEgc2l6ZSBjYWxjdWxh
dGlvbnMgYW5kIGhhbmRsZSBvdXQtb2YtbWVtb3J5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjczMjgz
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0J
KHdvcmtpbmcgY29weSkKQEAgLTExNTIsNyArMTE1Miw2IEBAIHN1YiBHZW5lcmF0ZUludm9rZUlu
ZGV4ZWRQcm9wZXJ0eVNldHRlcgogICAgIG15ICRhcmd1bWVudCA9IEB7JGluZGV4ZWRTZXR0ZXJP
cGVyYXRpb24tPmFyZ3VtZW50c31bMV07CiAgICAgbXkgJG5hdGl2ZVZhbHVlID0gSlNWYWx1ZVRv
TmF0aXZlKCRpbnRlcmZhY2UsICRhcmd1bWVudCwgJHZhbHVlLCAkaW5kZXhlZFNldHRlck9wZXJh
dGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q29uZGl0aW9uYWx9LCAibGV4aWNhbEdsb2JhbE9i
amVjdCIsICIqbGV4aWNhbEdsb2JhbE9iamVjdCIsICJ0aGlzT2JqZWN0IiwgIiIsICIiKTsKICAg
ICAKLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTtcbiIp
OwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJhdXRvIG5hdGl2ZVZhbHVlID0g
JHtuYXRpdmVWYWx1ZX07XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAi
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTtcbiIpOwogICAgIApAQCAtMTE3
MCw3ICsxMTY5LDYgQEAgc3ViIEdlbmVyYXRlSW52b2tlTmFtZWRQcm9wZXJ0eVNldHRlcgogICAg
IG15ICRhcmd1bWVudCA9IEB7JG5hbWVkU2V0dGVyT3BlcmF0aW9uLT5hcmd1bWVudHN9WzFdOwog
ICAgIG15ICRuYXRpdmVWYWx1ZSA9IEpTVmFsdWVUb05hdGl2ZSgkaW50ZXJmYWNlLCAkYXJndW1l
bnQsICR2YWx1ZSwgJG5hbWVkU2V0dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntD
b25kaXRpb25hbH0sICJsZXhpY2FsR2xvYmFsT2JqZWN0IiwgIipsZXhpY2FsR2xvYmFsT2JqZWN0
IiwgInRoaXNPYmplY3QiLCAiIiwgIiIpOwogICAgIAotICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
JGluZGVudCAuICJhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0
Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpO1xuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAk
aW5kZW50IC4gImF1dG8gbmF0aXZlVmFsdWUgPSAke25hdGl2ZVZhbHVlfTtcbiIpOwogICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHRydWUpO1xuIik7CiAKQEAgLTEyMDIsNiArMTIwMCw4IEBAIHN1YiBHZW5lcmF0ZVB1dAog
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7
Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcblxuIik7CiAKKyAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTtcblxuIik7CisKICAgICBhc3NlcnQo
IkNFUmVhY3Rpb25zIGlzIG5vdCBzdXBwb3J0ZWQgb24gaGF2aW5nIGJvdGggbmFtZWQgc2V0dGVy
cyBhbmQgaW5kZXhlZCBzZXR0ZXJzIikgaWYgJG5hbWVkU2V0dGVyT3BlcmF0aW9uICYmICRuYW1l
ZFNldHRlck9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q0VSZWFjdGlvbnN9CiAgICAg
ICAgICYmICRpbmRleGVkU2V0dGVyT3BlcmF0aW9uICYmICRpbmRleGVkU2V0dGVyT3BlcmF0aW9u
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDRVJlYWN0aW9uc307CiAgICAgaWYgKCRuYW1lZFNldHRl
ck9wZXJhdGlvbikgewpAQCAtMTIzMiw2ICsxMjMyLDcgQEAgc3ViIEdlbmVyYXRlUHV0CiAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0g
dGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCkpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGJv
b2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5n
ZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTtc
biIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBzbG90LmRpc2Fs
bG93Vk1FbnRyeS5yZXNldCgpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTtcbiIpOwogICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBpZiAoIWZvdW5kKSB7XG4iKTsKICAgICAg
ICAgICAgICRhZGRpdGlvbmFsSW5kZW50IC49ICIgICAgIjsKICAgICAgICAgfQpAQCAtMTIzOSw3
ICsxMjQwLDcgQEAgc3ViIEdlbmVyYXRlUHV0CiAgICAgICAgIEdlbmVyYXRlSW52b2tlTmFtZWRQ
cm9wZXJ0eVNldHRlcigkb3V0cHV0QXJyYXksICRhZGRpdGlvbmFsSW5kZW50IC4gIiAgICAgICAg
IiwgJGludGVyZmFjZSwgJG5hbWVkU2V0dGVyT3BlcmF0aW9uLCAidmFsdWUiKTsKICAgICAgICAg
aWYgKCRuYW1lZFNldHRlck9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FsbE5hbWVk
U2V0dGVyT25seUZvclN1cHBvcnRlZFByb3BlcnRpZXN9KSB7CiAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICRhZGRpdGlvbmFsSW5kZW50IC4gIiAgICAgICAgaWYgKCFpc1Byb3BlcnR5
U3VwcG9ydGVkKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRhZGRpdGlv
bmFsSW5kZW50IC4gIiAgICAgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3Qs
IGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xv
dCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRl
bnQgLiAiICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTT2JqZWN0
OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgcHV0UHJvcGVydHlTbG90KSk7XG4iKTsKICAgICAgICAgfQogICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICRhZGRpdGlvbmFsSW5kZW50IC4gIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsK
IApAQCAtMTI1Nyw4ICsxMjU4LDExIEBAIHN1YiBHZW5lcmF0ZVB1dAogICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTtcbiIpOwogICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKHBsdWdpbkVsZW1lbnRDdXN0b21QdXQodGhpc09i
amVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVy
dHlTbG90LCBwdXRSZXN1bHQpKVxuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICAgICAgcmV0dXJuIHB1dFJlc3VsdDtcblxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTtcbiIpOwogICAg
IH0KIAorICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhj
ZXB0aW9uKCk7XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgdGhyb3dTY29wZS5y
ZWxlYXNlKCk7XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIEpTT2Jq
ZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgcHV0UHJvcGVydHlTbG90KTtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1c
blxuIik7CiB9CkBAIC0xMjc3LDEyICsxMjgxLDEyIEBAIHN1YiBHZW5lcmF0ZVB1dEJ5SW5kZXgK
ICAgICAKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJib29sICR7Y2xhc3NOYW1lfTo6cHV0QnlJ
bmRleChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1
bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCIgLiAoISRlbGxpZGVzQ2FsbHNUb0Jh
c2UgPyAiIHNob3VsZFRocm93IiA6ICIiKSAuICIpXG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICJ7XG4iKTsKLSAgICBpZiAoJG5hbWVkU2V0dGVyT3BlcmF0aW9uIHx8ICRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+e1BsdWdpbn0pIHsKLSAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7XG4iKTsK
LSAgICB9CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuXG4i
KTsKIAorICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxl
eGljYWxHbG9iYWxPYmplY3QpO1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pO1xuXG4iKTsKKwogICAgIGFz
c2VydCgiQ0VSZWFjdGlvbnMgaXMgbm90IHN1cHBvcnRlZCBvbiBoYXZpbmcgYm90aCBuYW1lZCBz
ZXR0ZXJzIGFuZCBpbmRleGVkIHNldHRlcnMiKSBpZiAkbmFtZWRTZXR0ZXJPcGVyYXRpb24gJiYg
JG5hbWVkU2V0dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDRVJlYWN0aW9uc30K
ICAgICAgICAgJiYgJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24gJiYgJGluZGV4ZWRTZXR0ZXJPcGVy
YXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NFUmVhY3Rpb25zfTsKICAgICBpZiAoJG5hbWVk
U2V0dGVyT3BlcmF0aW9uKSB7CkBAIC0xMzEwLDYgKzEzMTQsNyBAQCBzdWIgR2VuZXJhdGVQdXRC
eUluZGV4CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgSlNWYWx1ZSBwcm90
b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pO1xuIik7CiAgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlwZS5pc09i
amVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTtcbiIpOworICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNl
cHRpb24oKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICgh
Zm91bmQpIHtcbiIpOwogICAgICAgICAgICAgJGFkZGl0aW9uYWxJbmRlbnQgLj0gIiAgICAiOwog
ICAgICAgICB9CkBAIC0xMzE3LDcgKzEzMjIsNyBAQCBzdWIgR2VuZXJhdGVQdXRCeUluZGV4CiAg
ICAgICAgIEdlbmVyYXRlSW52b2tlTmFtZWRQcm9wZXJ0eVNldHRlcigkb3V0cHV0QXJyYXksICRh
ZGRpdGlvbmFsSW5kZW50IC4gIiAgICAiLCAkaW50ZXJmYWNlLCAkbmFtZWRTZXR0ZXJPcGVyYXRp
b24sICJ2YWx1ZSIpOwogICAgICAgICBpZiAoJG5hbWVkU2V0dGVyT3BlcmF0aW9uLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntDYWxsTmFtZWRTZXR0ZXJPbmx5Rm9yU3VwcG9ydGVkUHJvcGVydGllc30p
IHsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRlbnQgLiAi
ICAgIGlmICghaXNQcm9wZXJ0eVN1cHBvcnRlZClcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudCAuICIgICAgICAgIHJldHVybiBKU09iamVjdDo6
cHV0QnlJbmRleChjZWxsLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgdmFsdWUsIHNob3Vs
ZFRocm93KTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkYWRkaXRpb25h
bEluZGVudCAuICIgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU09iamVj
dDo6cHV0QnlJbmRleChjZWxsLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgdmFsdWUsIHNo
b3VsZFRocm93KSk7XG4iKTsKICAgICAgICAgfQogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICRhZGRpdGlvbmFsSW5kZW50IC4gIiAgICByZXR1cm4gdHJ1ZTtcbiIpOwogICAgICAgICAKQEAg
LTEzMzQsOSArMTMzOSwxMiBAQCBzdWIgR2VuZXJhdGVQdXRCeUluZGV4CiAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlO1xuIik7CiAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAocGx1Z2luRWxlbWVudEN1c3RvbVB1dCh0aGlz
T2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9w
ZXJ0eVNsb3QsIHB1dFJlc3VsdCkpXG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgICAgICByZXR1cm4gcHV0UmVzdWx0O1xuXG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpO1xuIik7CiAg
ICAgfQogCiAgICAgaWYgKCEkZWxsaWRlc0NhbGxzVG9CYXNlKSB7CisgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7XG4iKTsKKyAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHRocm93U2NvcGUucmVsZWFzZSgpO1xuIik7
CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gSlNPYmplY3Q6OnB1dEJ5
SW5kZXgoY2VsbCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJv
dyk7XG4iKTsKICAgICB9CiAgICAgCkBAIC0xMzg1LDYgKzEzOTMsOCBAQCBzdWIgR2VuZXJhdGVE
ZWZpbmVPd25Qcm9wZXJ0eQogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KG9iamVjdCk7XG4iKTsKICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpO1xuXG4iKTsKIAorICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpO1xu
XG4iKTsKKwogICAgIGFzc2VydCgiQ0VSZWFjdGlvbnMgaXMgbm90IHN1cHBvcnRlZCBvbiBoYXZp
bmcgYm90aCBuYW1lZCBzZXR0ZXJzIGFuZCBpbmRleGVkIHNldHRlcnMiKSBpZiAkbmFtZWRTZXR0
ZXJPcGVyYXRpb24gJiYgJG5hbWVkU2V0dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PntDRVJlYWN0aW9uc30KICAgICAgICAgJiYgJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24gJiYgJGlu
ZGV4ZWRTZXR0ZXJPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NFUmVhY3Rpb25zfTsK
ICAgICBpZiAoJG5hbWVkU2V0dGVyT3BlcmF0aW9uKSB7CkBAIC0xNDQ2LDYgKzE0NTYsNyBAQCBz
dWIgR2VuZXJhdGVEZWZpbmVPd25Qcm9wZXJ0eQogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAkYWRkaXRpb25hbEluZGVudC4gIiAgICAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlz
T2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5LCAmbGV4
aWNhbEdsb2JhbE9iamVjdC0+dm0oKSB9O1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICRhZGRpdGlvbmFsSW5kZW50LiAiICAgICAgICBib29sIGZvdW5kID0gSlNPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRh
ZGRpdGlvbmFsSW5kZW50LiAiICAgICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpO1xu
Iik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRhZGRpdGlvbmFsSW5kZW50LiAi
ICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7XG4iKTsKICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRlbnQuICIgICAgICAgIGlmICghZm91
bmQpIHtcbiIpOwogICAgICAgICAgICAgJGFkZGl0aW9uYWxJbmRlbnQgLj0gIiAgICAiOwogICAg
ICAgICB9CkBAIC0xNDY0LDcgKzE0NzUsNyBAQCBzdWIgR2VuZXJhdGVEZWZpbmVPd25Qcm9wZXJ0
eQogICAgICAgICAgICAgR2VuZXJhdGVJbnZva2VOYW1lZFByb3BlcnR5U2V0dGVyKCRvdXRwdXRB
cnJheSwgJGFkZGl0aW9uYWxJbmRlbnQgLiAiICAgICAgICAiLCAkaW50ZXJmYWNlLCAkbmFtZWRT
ZXR0ZXJPcGVyYXRpb24sICJwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSIpOwogICAgICAgICAg
ICAgaWYgKCRuYW1lZFNldHRlck9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FsbE5h
bWVkU2V0dGVyT25seUZvclN1cHBvcnRlZFByb3BlcnRpZXN9KSB7CiAgICAgICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudCAuICIgICAgaWYgKCFpc1Byb3Bl
cnR5U3VwcG9ydGVkKVxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAk
YWRkaXRpb25hbEluZGVudCAuICIgICAgICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJv
cGVydHkob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHByb3BlcnR5
RGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudCAuICIgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHByb3BlcnR5RGVzY3JpcHRvciwgc2hvdWxkVGhy
b3cpKTtcbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgIyAyLjIuMy4gUmV0dXJuIHRy
dWUuCiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRhZGRpdGlvbmFsSW5kZW50IC4g
IiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKQEAgLTE0OTEsNiArMTUwMiw3IEBAIHN1YiBHZW5l
cmF0ZURlZmluZU93blByb3BlcnR5CiAgICAgfQogICAgIAogICAgICMgNC4gUmV0dXJuIE9yZGlu
YXJ5RGVmaW5lT3duUHJvcGVydHkoTywgUCwgRGVzYykuCisgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIHRocm93U2NvcGUucmVsZWFzZSgpO1xuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIG5ld1Byb3BlcnR5RGVzY3JpcHRvciwgc2hvdWxk
VGhyb3cpO1xuIik7CiAgICAgCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJ
KHJldmlzaW9uIDI3MzI4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTk0LDE0ICsxOTQsMTcgQEAgYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
OjpwdQogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlck5v
SWRlbnRpZmllcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKIAorICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CisKICAgICBpZiAoYXV0byBpbmRleCA9IHBh
cnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
dHJ1ZSk7CiAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNz
YXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09i
amVjdC0+d3JhcHBlZCgpLnNldEl0ZW0oaW5kZXgudmFsdWUoKSwgV1RGTW92ZShuYXRpdmVWYWx1
ZSkpOyB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgdGhyb3dTY29wZS5h
c3NlcnROb0V4Y2VwdGlvbigpOworICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVy
biBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiB9CiAKQEAgLTIxMCwxNCArMjEzLDE4IEBA
IGJvb2wgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6cHUKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAg
ICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKExJS0VMWShpbmRl
eCA8PSBNQVhfQVJSQVlfSU5ERVgpKSB7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0
cnVlKTsKICAgICAgICAgaW52b2tlRnVuY3RvclByb3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3Nh
cnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCkuc2V0SXRlbShpbmRleCwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpOworICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVybiBKU09iamVj
dDo6cHV0QnlJbmRleChjZWxsLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgdmFsdWUsIHNo
b3VsZFRocm93KTsKIH0KIApAQCAtMjI2LDEwICsyMzMsMTEgQEAgYm9vbCBKU1Rlc3RJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyOjpkZQogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKKwogICAg
IGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIGlm
ICghcHJvcGVydHlEZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVy
dHlEZXNjcmlwdG9yLnZhbHVlKCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHRydWUpOwogICAgICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRpbmdFeGNlcHRpb25J
Zk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsgcmV0dXJu
IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXRJdGVtKGluZGV4LnZhbHVlKCksIFdURk1vdmUobmF0
aXZlVmFsdWUpKTsgfSk7CkBAIC0yMzgsNiArMjQ2LDcgQEAgYm9vbCBKU1Rlc3RJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyOjpkZQogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIG5ld1Byb3BlcnR5
RGVzY3JpcHRvciA9IHByb3BlcnR5RGVzY3JpcHRvcjsKICAgICBuZXdQcm9wZXJ0eURlc2NyaXB0
b3Iuc2V0Q29uZmlndXJhYmxlKHRydWUpOworICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAg
IHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIG5ld1Byb3BlcnR5RGVzY3JpcHRvciwgc2hvdWxkVGhyb3cp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjczMjgzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCwxNCArMTk0LDE3IEBAIGJvb2wgSlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW8KICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0o
KSk7CisKICAgICBpZiAoYXV0byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewot
ICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0o
bGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIGludm9rZUZ1bmN0
b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldEl0ZW0oaW5k
ZXgudmFsdWUoKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIHRo
cm93U2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3Qs
IGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xv
dCk7CiB9CiAKQEAgLTIxMCwxNCArMjEzLDE4IEBAIGJvb2wgSlNUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW8KICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKICAgICBpZiAoTElLRUxZKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCkp
IHsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAgICBpbnZva2VG
dW5jdG9yUHJvcGFnYXRpbmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgWyZdIHsgcmV0dXJuIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXRJdGVt
KGluZGV4LCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKKyAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgdGhyb3dT
Y29wZS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXRCeUluZGV4KGNlbGwsIGxl
eGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogfQogCkBAIC0y
MjYsMTAgKzIzMywxMSBAQCBib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24qPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKIAorICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CisKICAgICBpZiAoYXV0byBpbmRleCA9
IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewogICAgICAgICBpZiAoIXByb3BlcnR5RGVzY3Jp
cHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5RGVzY3JpcHRvci52YWx1
ZSgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKICAg
ICAgICAgaW52b2tlRnVuY3RvclByb3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3NhcnkoKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2JqZWN0LT53cmFw
cGVkKCkuc2V0SXRlbShpbmRleC52YWx1ZSgpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwpA
QCAtMjM4LDYgKzI0Niw3IEBAIGJvb2wgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW8KIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBuZXdQcm9wZXJ0eURlc2NyaXB0b3IgPSBwcm9w
ZXJ0eURlc2NyaXB0b3I7CiAgICAgbmV3UHJvcGVydHlEZXNjcmlwdG9yLnNldENvbmZpZ3VyYWJs
ZSh0cnVlKTsKKyAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6
OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCBuZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJl
dmlzaW9uIDI3MzI4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDEsMTQgKzIwMSwxNyBAQCBib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
cjo6CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CiAKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOworCiAgICAgaWYgKGF1dG8gaW5kZXggPSBw
YXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHRydWUpOwogICAgICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRpbmdFeGNlcHRpb25JZk5lY2Vz
c2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsgcmV0dXJuIHRoaXNP
YmplY3QtPndyYXBwZWQoKS5pbmRleGVkU2V0dGVyKGluZGV4LnZhbHVlKCksIFdURk1vdmUobmF0
aXZlVmFsdWUpKTsgfSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIHRocm93
U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAg
ICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogfQogCkBAIC0yMTcsMTQgKzIy
MCwxOCBAQCBib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CiAKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKExJ
S0VMWShpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpKSB7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7
CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB0cnVlKTsKICAgICAgICAgaW52b2tlRnVuY3RvclByb3BhZ2F0aW5nRXhjZXB0aW9u
SWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7IHJldHVy
biB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaW5kZXhlZFNldHRlcihpbmRleCwgV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOyB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgdGhyb3dT
Y29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAg
IHJldHVybiBKU09iamVjdDo6cHV0QnlJbmRleChjZWxsLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBp
bmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsKIH0KIApAQCAtMjMzLDEwICsyNDAsMTEgQEAgYm9v
bCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OgogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0KTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmpl
Y3QtPnZtKCkpOworCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFt
ZSkpIHsKICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAg
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9w
YWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLmluZGV4ZWRTZXR0ZXIoaW5k
ZXgudmFsdWUoKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKQEAgLTI0NSw2ICsyNTMsNyBA
QCBib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6CiAKICAgICBQcm9wZXJ0
eURlc2NyaXB0b3IgbmV3UHJvcGVydHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yOwog
ICAgIG5ld1Byb3BlcnR5RGVzY3JpcHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7CisgICAgdGhy
b3dTY29wZS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0
eShvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgbmV3UHJvcGVydHlE
ZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lv
biAyNzMyODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjI1LDggKzIyNSw5IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGkKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CisKICAgICBpZiAoYXV0byBpbmRl
eCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwog
ICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgdHJ1ZSk7CiAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklm
TmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4g
dGhpc09iamVjdC0+d3JhcHBlZCgpLnNldEl0ZW0oaW5kZXgudmFsdWUoKSwgV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOyB9KTsKQEAgLTIzOCw4ICsyMzksOCBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpCiAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVj
dC0+Z2V0UHJvdG90eXBlRGlyZWN0KEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwog
ICAgICAgICBib29sIGZvdW5kID0gcHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJv
dG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7CiAgICAgICAgIHNsb3QuZGlzYWxsb3dWTUVudHJ5LnJlc2V0KCk7CisgICAgICAg
IHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAgICAgaWYgKCFmb3VuZCkgewot
ICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAg
ICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRpbmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsgcmV0dXJuIHRoaXNPYmplY3QtPndyYXBw
ZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKQEAgLTI0NywxNyArMjQ4LDIwIEBAIGJvb2wgSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGkKICAgICAgICAgfQogICAgIH0KIAorICAgIHRo
cm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsK
ICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogfQogCiBib29sIEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6cHV0QnlJbmRleChKU0NlbGwqIGNl
bGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbmRleCwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBWTSYgdm0gPSBKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgVk0mIHZt
ID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChMSUtFTFkoaW5kZXggPD0gTUFY
X0FSUkFZX0lOREVYKSkgewotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2
YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAg
ICAgICAgIGludm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3Jh
cHBlZCgpLnNldEl0ZW0oaW5kZXgsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsgfSk7CkBAIC0yNjks
MTQgKzI3MywxNiBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpCiAg
ICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0p
OwogICAgIGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90
b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCBzbG90KTsKICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOworICAgIHRocm93U2Nv
cGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB0cnVlKTsKICAgICAgICAgaW52b2tlRnVuY3RvclByb3BhZ2F0aW5n
RXhjZXB0aW9uSWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsm
XSB7IHJldHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFt
ZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsgfSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRp
b24oKTsKKyAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6OnB1
dEJ5SW5kZXgoY2VsbCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHZhbHVlLCBzaG91bGRU
aHJvdyk7CiB9CiAKQEAgLTI4NSwxMCArMjkxLDExIEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGkKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKKwog
ICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAg
IGlmICghcHJvcGVydHlEZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlEZXNjcmlwdG9yLnZhbHVlKCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHRydWUpOwogICAgICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRpbmdFeGNlcHRp
b25JZk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsgcmV0
dXJuIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXRJdGVtKGluZGV4LnZhbHVlKCksIFdURk1vdmUo
bmF0aXZlVmFsdWUpKTsgfSk7CkBAIC0yOTksMTAgKzMwNiwxMCBAQCBib29sIEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpCiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhp
c09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSwgJmxl
eGljYWxHbG9iYWxPYmplY3QtPnZtKCkgfTsKICAgICAgICAgYm9vbCBmb3VuZCA9IEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTsK
KyAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAgICBpZiAoIWZv
dW5kKSB7CiAgICAgICAgICAgICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlw
dG9yKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxP
YmplY3QpKTsKICAgICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0
cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpKTsK
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAg
ICAgICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRpbmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsgcmV0dXJuIHRoaXNPYmplY3QtPndy
YXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwg
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKQEAgLTMxMiw2ICszMTksNyBAQCBib29sIEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpCiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3Ig
bmV3UHJvcGVydHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yOwogICAgIG5ld1Byb3Bl
cnR5RGVzY3JpcHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7CisgICAgdGhyb3dTY29wZS5yZWxl
YXNlKCk7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGxl
eGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgbmV3UHJvcGVydHlEZXNjcmlwdG9yLCBz
aG91bGRUaHJvdyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24g
MjczMjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjI1LDggKzIyNSw5IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhy
b3dpbmcKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKKwogICAgIGlmIChh
dXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB0cnVlKTsKICAgICAgICAgaW52b2tlRnVuY3RvclByb3BhZ2F0aW5nRXhj
ZXB0aW9uSWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7
IHJldHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0SXRlbShpbmRleC52YWx1ZSgpLCBXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwpAQCAtMjM4LDggKzIzOSw4IEBAIGJvb2wgSlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmcKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0
aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CiAgICAgICAgIGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09i
amVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTsK
KyAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAgICBpZiAoIWZv
dW5kKSB7Ci0gICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsK
ICAgICAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVj
dC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5h
bWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwpAQCAtMjQ3LDE3ICsyNDgsMjAgQEAgYm9v
bCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZwogICAgICAgICB9CiAgICAgfQog
CisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIHRocm93U2NvcGUucmVs
ZWFzZSgpOwogICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiB9CiAKIGJv
b2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dEJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5z
aWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgVk0m
IHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogCisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChM
SUtFTFkoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKSkgewotICAgICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkp
OwogICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlv
bklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1
cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldEl0ZW0oaW5kZXgsIFdURk1vdmUobmF0aXZlVmFs
dWUpKTsgfSk7CkBAIC0yNjksMTQgKzI3MywxNiBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlclRocm93aW5nCiAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQ
cm90b3R5cGVEaXJlY3Qodm0pOwogICAgIGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmplY3Qo
KSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNl
dCgpOworICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBpZiAoIWZvdW5k
KSB7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpn
ZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKICAgICAgICAgaW52b2tl
RnVuY3RvclByb3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFt
ZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZl
VmFsdWUpKTsgfSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIHRocm93U2Nv
cGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBy
ZXR1cm4gSlNPYmplY3Q6OnB1dEJ5SW5kZXgoY2VsbCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5k
ZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7CiB9CiAKQEAgLTI4NSwxMCArMjkxLDExIEBAIGJvb2wg
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmcKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4o
b2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CiAKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxH
bG9iYWxPYmplY3QtPnZtKCkpOworCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHBy
b3BlcnR5TmFtZSkpIHsKICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVz
Y3JpcHRvcigpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVj
dCkpOwogICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIGludm9rZUZ1
bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldEl0ZW0o
aW5kZXgudmFsdWUoKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKQEAgLTI5OSwxMCArMzA2
LDEwIEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmcKICAgICAgICAg
UHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0
aG9kVHlwZTo6Vk1JbnF1aXJ5LCAmbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSB9OwogICAgICAg
ICBib29sIGZvdW5kID0gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICBzbG90LmRp
c2FsbG93Vk1FbnRyeS5yZXNldCgpOworICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0
aW9uKCk7CiAgICAgICAgIGlmICghZm91bmQpIHsKICAgICAgICAgICAgIGlmICghcHJvcGVydHlE
ZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpT
Qzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVy
dHlEZXNjcmlwdG9yLnZhbHVlKCkpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB0cnVlKTsKICAgICAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4
Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0g
eyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVU
b1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwpAQCAtMzEy
LDYgKzMxOSw3IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmcKIAog
ICAgIFByb3BlcnR5RGVzY3JpcHRvciBuZXdQcm9wZXJ0eURlc2NyaXB0b3IgPSBwcm9wZXJ0eURl
c2NyaXB0b3I7CiAgICAgbmV3UHJvcGVydHlEZXNjcmlwdG9yLnNldENvbmZpZ3VyYWJsZSh0cnVl
KTsKKyAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6OmRlZmlu
ZU93blByb3BlcnR5KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBu
ZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIuY3BwCShyZXZpc2lvbiAyNzMyODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsOCArMjM0LDkgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbgogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwor
CiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGlj
YWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAgICBpbnZva2VGdW5jdG9yUHJv
cGFnYXRpbmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgWyZdIHsgcmV0dXJuIHRoaXNPYmplY3QtPndyYXBwZWQoKS5pbmRleGVkU2V0dGVyKGlu
ZGV4LnZhbHVlKCksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsgfSk7CkBAIC0yNDcsOCArMjQ4LDgg
QEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbgogICAgICAgICBKU1Zh
bHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdChKU0M6OmdldFZN
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlwZS5p
c09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICBzbG90LmRpc2FsbG93
Vk1FbnRyeS5yZXNldCgpOworICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7
CiAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAg
ICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHRydWUpOwogICAgICAgICAgICAgaW52b2tlRnVuY3RvclByb3BhZ2F0aW5nRXhj
ZXB0aW9uSWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7
IHJldHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkubmFtZWRTZXR0ZXIocHJvcGVydHlOYW1lVG9T
dHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKQEAgLTI1Niwx
NyArMjU3LDIwIEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW4KICAg
ICAgICAgfQogICAgIH0KIAorICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAg
ICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2Jq
ZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0
eVNsb3QpOwogfQogCiBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93
KQogewotICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKIAorICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
ICAgICBpZiAoTElLRUxZKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCkpIHsKLSAgICAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRp
bmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
WyZdIHsgcmV0dXJuIHRoaXNPYmplY3QtPndyYXBwZWQoKS5pbmRleGVkU2V0dGVyKGluZGV4LCBX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwpAQCAtMjc4LDE0ICsyODIsMTYgQEAgYm9vbCBKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbgogICAgIEpTVmFsdWUgcHJvdG90eXBlID0g
dGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHZtKTsKICAgICBib29sIGZvdW5kID0gcHJv
dG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90
KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgc2xvdC5kaXNh
bGxvd1ZNRW50cnkucmVzZXQoKTsKKyAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7
CiAgICAgaWYgKCFmb3VuZCkgewotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7
CiAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+
d3JhcHBlZCgpLm5hbWVkU2V0dGVyKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSks
IFdURk1vdmUobmF0aXZlVmFsdWUpKTsgfSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAorICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICB0aHJvd1Njb3BlLnJl
bGVhc2UoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dEJ5SW5kZXgoY2VsbCwgbGV4aWNhbEds
b2JhbE9iamVjdCwgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7CiB9CiAKQEAgLTI5NCwxMCAr
MzAwLDExIEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW4KICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CiAKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOworCiAgICAgaWYgKGF1dG8gaW5kZXggPSBw
YXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0
b3IuaXNEYXRhRGVzY3JpcHRvcigpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCkpOwogICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExE
T01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUo
KSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAg
ICAgIGludm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBl
ZCgpLmluZGV4ZWRTZXR0ZXIoaW5kZXgudmFsdWUoKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9
KTsKQEAgLTMwOCwxMCArMzE1LDEwIEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
V2l0aElkZW4KICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5LCAmbGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKSB9OwogICAgICAgICBib29sIGZvdW5kID0gSlNPYmplY3Q6OmdldE93blByb3BlcnR5
U2xvdCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwogICAgICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOworICAgICAgICB0aHJvd1Nj
b3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAgIGlmICghZm91bmQpIHsKICAgICAgICAg
ICAgIGlmICghcHJvcGVydHlEZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAg
ICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgcHJvcGVydHlEZXNjcmlwdG9yLnZhbHVlKCkpOwogICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKICAgICAgICAgICAgIGludm9rZUZ1
bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLm5hbWVkU2V0
dGVyKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFs
dWUpKTsgfSk7CkBAIC0zMjEsNiArMzI4LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbgogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIG5ld1Byb3BlcnR5RGVzY3Jp
cHRvciA9IHByb3BlcnR5RGVzY3JpcHRvcjsKICAgICBuZXdQcm9wZXJ0eURlc2NyaXB0b3Iuc2V0
Q29uZmlndXJhYmxlKHRydWUpOworICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVy
biBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIG5ld1Byb3BlcnR5RGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5jcHAJ
KHJldmlzaW9uIDI3MzI4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwNiwxMyArMjA2LDE1IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnB1
dCgKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVu
dGlmaWVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwogCisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShs
ZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKKwogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3lt
Ym9sKCkpIHsKICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5LCAmbGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKSB9OwogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFBy
b3RvdHlwZURpcmVjdChKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAg
Ym9vbCBmb3VuZCA9IHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSkt
PmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwogICAgICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOworICAgICAgICB0aHJvd1Nj
b3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAg
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAgICAgICAgaW52
b2tlRnVuY3RvclByb3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0
TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0
aXZlVmFsdWUpKTsgfSk7CkBAIC0yMjAsMjggKzIyMiwzNCBAQCBib29sIEpTVGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyOjpwdXQoCiAgICAgICAgIH0KICAgICB9CiAKKyAgICB0aHJvd1Njb3Bl
LmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgcmV0
dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKIH0KIAogYm9vbCBKU1Rlc3ROYW1lZFNl
dHRlck5vSWRlbnRpZmllcjo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9v
bCBzaG91bGRUaHJvdykKIHsKLSAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJO
b0lkZW50aWZpZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CiAKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAg
ICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFs
TWV0aG9kVHlwZTo6Vk1JbnF1aXJ5LCAmdm0gfTsKICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRo
aXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7CiAgICAgYm9vbCBmb3VuZCA9IHByb3Rv
dHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgIHNsb3QuZGlzYWxs
b3dWTUVudHJ5LnJlc2V0KCk7CisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwog
ICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwog
ICAgICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRpbmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsgcmV0dXJuIHRoaXNPYmplY3QtPndy
YXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwg
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIHRocm93U2NvcGUucmVs
ZWFzZSgpOwogICAgIHJldHVybiBKU09iamVjdDo6cHV0QnlJbmRleChjZWxsLCBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsKIH0KIApAQCAtMjUwLDE0ICsy
NTgsMTYgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6ZGVmaQogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihv
YmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKIAorICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEds
b2JhbE9iamVjdC0+dm0oKSk7CisKICAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7
CiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJ
bnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSwgJmxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkg
fTsKICAgICAgICAgYm9vbCBmb3VuZCA9IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhp
c09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAg
ICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTsKKyAgICAgICAgdGhyb3dTY29wZS5hc3Nl
cnROb0V4Y2VwdGlvbigpOwogICAgICAgICBpZiAoIWZvdW5kKSB7CiAgICAgICAgICAgICBpZiAo
IXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHByb3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgICAgICBpbnZva2VGdW5jdG9yUHJv
cGFnYXRpbmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgWyZdIHsgcmV0dXJuIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJv
cGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9
KTsKQEAgLTI2Nyw2ICsyNzcsNyBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVy
OjpkZWZpCiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgbmV3UHJvcGVydHlEZXNjcmlwdG9yID0g
cHJvcGVydHlEZXNjcmlwdG9yOwogICAgIG5ld1Byb3BlcnR5RGVzY3JpcHRvci5zZXRDb25maWd1
cmFibGUodHJ1ZSk7CisgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIEpTT2Jq
ZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgbmV3UHJvcGVydHlEZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5j
cHAJKHJldmlzaW9uIDI3MzI4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjA2LDEzICsyMDYsMTUgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5n
RXhjZXB0aW9uOgogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CisKICAgICBpZiAoIXByb3Bl
cnR5TmFtZS5pc1N5bWJvbCgpKSB7CiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09i
amVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSwgJmxleGlj
YWxHbG9iYWxPYmplY3QtPnZtKCkgfTsKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlz
T2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7CiAgICAgICAgIGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVj
dChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTsKKyAg
ICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAgICBpZiAoIWZvdW5k
KSB7Ci0gICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpT
Qzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUp
OwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKICAg
ICAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+
d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUp
LCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwpAQCAtMjIwLDI4ICsyMjIsMzQgQEAgYm9vbCBK
U1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOgogICAgICAgICB9CiAgICAgfQogCisg
ICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIHRocm93U2NvcGUucmVsZWFz
ZSgpOwogICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiB9CiAKIGJvb2wg
SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6cHV0QnlJbmRleChKU0NlbGwqIGNl
bGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbmRleCwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBWTSYgdm0gPSBKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIFZNJiB2bSA9IEpT
Qzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZp
ZXI6OmZyb20odm0sIGluZGV4KTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3Qs
IFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnksICZ2bSB9OwogICAg
IEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHZtKTsK
ICAgICBib29sIGZvdW5kID0gcHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90
eXBlKS0+Z2V0UHJvcGVydHlTbG90KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwg
c2xvdCk7CiAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTsKKyAgICB0aHJvd1Njb3Bl
LmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgaWYgKCFmb3VuZCkgewotICAgICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCkpOwogICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4
Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0g
eyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVU
b1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9u
KCk7CisgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXRC
eUluZGV4KGNlbGwsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhy
b3cpOwogfQogCkBAIC0yNTAsMTQgKzI1OCwxNiBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb246CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOworCiAgICAgaWYg
KCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgewogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7
IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnks
ICZsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpIH07CiAgICAgICAgIGJvb2wgZm91bmQgPSBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgICAgIHNsb3QuZGlzYWxsb3dWTUVudHJ5LnJlc2V0
KCk7CisgICAgICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAgICAgaWYg
KCFmb3VuZCkgewogICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVz
Y3JpcHRvcigpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xv
YmFsT2JqZWN0KSk7CiAgICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExE
T01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUo
KSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwog
ICAgICAgICAgICAgaW52b2tlRnVuY3RvclByb3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3Nhcnko
KmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2JqZWN0
LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFt
ZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsgfSk7CkBAIC0yNjcsNiArMjc3LDcgQEAgYm9vbCBK
U1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOgogCiAgICAgUHJvcGVydHlEZXNjcmlw
dG9yIG5ld1Byb3BlcnR5RGVzY3JpcHRvciA9IHByb3BlcnR5RGVzY3JpcHRvcjsKICAgICBuZXdQ
cm9wZXJ0eURlc2NyaXB0b3Iuc2V0Q29uZmlndXJhYmxlKHRydWUpOworICAgIHRocm93U2NvcGUu
cmVsZWFzZSgpOwogICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIG5ld1Byb3BlcnR5RGVzY3JpcHRv
ciwgc2hvdWxkVGhyb3cpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzMyODMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiwxMyArMjEyLDE1IEBAIGJvb2wgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHUKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwor
CiAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgewogICAgICAgICBQcm9wZXJ0eVNs
b3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpW
TUlucXVpcnksICZsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpIH07CiAgICAgICAgIEpTVmFsdWUg
cHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KEpTQzo6Z2V0Vk0obGV4
aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICBib29sIGZvdW5kID0gcHJvdG90eXBlLmlzT2Jq
ZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KGxleGljYWxHbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgICAgIHNsb3QuZGlzYWxsb3dWTUVu
dHJ5LnJlc2V0KCk7CisgICAgICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAg
ICAgICAgaWYgKCFmb3VuZCkgewotICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAg
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgdHJ1ZSk7CiAgICAgICAgICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRpbmdFeGNlcHRp
b25JZk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsgcmV0
dXJuIHRoaXNPYmplY3QtPndyYXBwZWQoKS5uYW1lZFNldHRlcihwcm9wZXJ0eU5hbWVUb1N0cmlu
Zyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwpAQCAtMjI2LDI4ICsy
MjgsMzQgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdQogICAgICAg
ICB9CiAgICAgfQogCisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIHRo
cm93U2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3Qs
IGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xv
dCk7CiB9CiAKIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHV0QnlJbmRl
eChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnNp
Z25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBWTSYg
dm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIFZN
JiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9
IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRo
aXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnksICZ2
bSB9OwogICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGly
ZWN0KHZtKTsKICAgICBib29sIGZvdW5kID0gcHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmpl
Y3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7CiAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTsKKyAgICB0
aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgaWYgKCFmb3VuZCkgewotICAgICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCkpOwogICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExE
T01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9w
YWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLm5hbWVkU2V0dGVyKHByb3Bl
cnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsgfSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9F
eGNlcHRpb24oKTsKKyAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICByZXR1cm4gSlNPYmpl
Y3Q6OnB1dEJ5SW5kZXgoY2VsbCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHZhbHVlLCBz
aG91bGRUaHJvdyk7CiB9CiAKQEAgLTI1NiwxNCArMjY0LDE2IEBAIGJvb2wgSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcjo6ZGUKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CisKICAg
ICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CiAgICAgICAgIFByb3BlcnR5U2xvdCBz
bG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5x
dWlyeSwgJmxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkgfTsKICAgICAgICAgYm9vbCBmb3VuZCA9
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnku
cmVzZXQoKTsKKyAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAg
ICBpZiAoIWZvdW5kKSB7CiAgICAgICAgICAgICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0Rh
dGFEZXNjcmlwdG9yKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGlj
YWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5RGVzY3JpcHRvci52
YWx1ZSgpKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1
ZSk7CiAgICAgICAgICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRpbmdFeGNlcHRpb25JZk5lY2Vz
c2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsgcmV0dXJuIHRoaXNP
YmplY3QtPndyYXBwZWQoKS5uYW1lZFNldHRlcihwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0
eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwpAQCAtMjczLDYgKzI4Myw3IEBAIGJv
b2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6ZGUKIAogICAgIFByb3BlcnR5RGVz
Y3JpcHRvciBuZXdQcm9wZXJ0eURlc2NyaXB0b3IgPSBwcm9wZXJ0eURlc2NyaXB0b3I7CiAgICAg
bmV3UHJvcGVydHlEZXNjcmlwdG9yLnNldENvbmZpZ3VyYWJsZSh0cnVlKTsKKyAgICB0aHJvd1Nj
b3BlLnJlbGVhc2UoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KG9i
amVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBuZXdQcm9wZXJ0eURlc2Ny
aXB0b3IsIHNob3VsZFRocm93KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAkocmV2aXNpb24gMjczMjgzKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsMTMgKzIzNCwxNSBA
QCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwog
CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFs
T2JqZWN0LT52bSgpKTsKKwogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKICAg
ICAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVy
bmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5LCAmbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSB9Owog
ICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVj
dChKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgYm9vbCBmb3VuZCA9
IHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5
U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICBz
bG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOworICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5v
RXhjZXB0aW9uKCk7CiAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CiAgICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJp
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAgICAgICAgaW52b2tlRnVuY3RvclBy
b3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkubmFtZWRTZXR0ZXIocHJv
cGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9
KTsKQEAgLTI0OCwyOCArMjUwLDM0IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlcjoKICAgICAgICAgfQogICAgIH0KIAorICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNl
cHRpb24oKTsKKyAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6
OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBwdXRQcm9wZXJ0eVNsb3QpOwogfQogCiBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXI6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpCiB7Ci0gICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CiAKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAg
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAg
UHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0
aG9kVHlwZTo6Vk1JbnF1aXJ5LCAmdm0gfTsKICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNP
YmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7CiAgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlw
ZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgIHNsb3QuZGlzYWxsb3dW
TUVudHJ5LnJlc2V0KCk7CisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAg
IGlmICghZm91bmQpIHsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAg
ICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRpbmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsgcmV0dXJuIHRoaXNPYmplY3QtPndyYXBw
ZWQoKS5uYW1lZFNldHRlcihwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAg
ICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgdGhyb3dTY29wZS5yZWxlYXNl
KCk7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXRCeUluZGV4KGNlbGwsIGxleGljYWxHbG9iYWxP
YmplY3QsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogfQogCkBAIC0yNzgsNiArMjg2LDgg
QEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOgogICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcio+KG9i
amVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwogCisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xv
YmFsT2JqZWN0LT52bSgpKTsKKwogICAgIGlmIChwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjg1LDEwICsyOTUsMTAgQEAgYm9vbCBKU1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOgogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7
IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnks
ICZsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpIH07CiAgICAgICAgIGJvb2wgZm91bmQgPSBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgICAgIHNsb3QuZGlzYWxsb3dWTUVudHJ5LnJlc2V0
KCk7CisgICAgICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAgICAgaWYg
KCFmb3VuZCkgewogICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVz
Y3JpcHRvcigpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xv
YmFsT2JqZWN0KSk7CiAgICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExE
T01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUo
KSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwog
ICAgICAgICAgICAgaW52b2tlRnVuY3RvclByb3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3Nhcnko
KmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2JqZWN0
LT53cmFwcGVkKCkubmFtZWRTZXR0ZXIocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1l
KSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKQEAgLTI5OCw2ICszMDgsNyBAQCBib29sIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6CiAKICAgICBQcm9wZXJ0eURlc2NyaXB0
b3IgbmV3UHJvcGVydHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yOwogICAgIG5ld1By
b3BlcnR5RGVzY3JpcHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7CisgICAgdGhyb3dTY29wZS5y
ZWxlYXNlKCk7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3Qs
IGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgbmV3UHJvcGVydHlEZXNjcmlwdG9y
LCBzaG91bGRUaHJvdyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAJKHJldmlzaW9u
IDI3MzI4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjM0LDggKzIzNCw5IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlckEKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOworCiAgICAgaWYgKGF1
dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHRydWUpOwogICAgICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRpbmdFeGNl
cHRpb25JZk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsg
cmV0dXJuIHRoaXNPYmplY3QtPndyYXBwZWQoKS5pbmRleGVkU2V0dGVyKGluZGV4LnZhbHVlKCks
IFdURk1vdmUobmF0aXZlVmFsdWUpKTsgfSk7CkBAIC0yNDcsOCArMjQ4LDggQEAgYm9vbCBKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQQogICAgICAgICBKU1ZhbHVlIHByb3RvdHlw
ZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdChKU0M6OmdldFZNKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKICAgICAgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlwZS5pc09iamVjdCgpICYm
IGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNl
dCgpOworICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAgIGlm
ICghZm91bmQpIHsKLSAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRy
dWUpOwogICAgICAgICAgICAgaW52b2tlRnVuY3RvclByb3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNl
c3NhcnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7IHJldHVybiB0aGlz
T2JqZWN0LT53cmFwcGVkKCkubmFtZWRTZXR0ZXIocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVy
dHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKQEAgLTI1NiwxNyArMjU3LDIwIEBA
IGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckEKICAgICAgICAgfQogICAg
IH0KIAorICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICB0aHJvd1Njb3Bl
LnJlbGVhc2UoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogfQog
CiBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnB1dEJ5
SW5kZXgoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
dW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAg
Vk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0
ZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CiAKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYg
KExJS0VMWShpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpKSB7Ci0gICAgICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB0cnVlKTsKICAgICAgICAgaW52b2tlRnVuY3RvclByb3BhZ2F0aW5nRXhjZXB0
aW9uSWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7IHJl
dHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaW5kZXhlZFNldHRlcihpbmRleCwgV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOyB9KTsKQEAgLTI3OCwxNCArMjgyLDE2IEBAIGJvb2wgSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSW5kZXhlZEdldHRlckEKICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmpl
Y3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7CiAgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlwZS5p
c09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgIHNsb3QuZGlzYWxsb3dWTUVu
dHJ5LnJlc2V0KCk7CisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIGlm
ICghZm91bmQpIHsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAg
ICBpbnZva2VGdW5jdG9yUHJvcGFnYXRpbmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsgcmV0dXJuIHRoaXNPYmplY3QtPndyYXBwZWQo
KS5uYW1lZFNldHRlcihwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7IH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICB0
aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7
CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXRCeUluZGV4KGNlbGwsIGxleGljYWxHbG9iYWxPYmpl
Y3QsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogfQogCkBAIC0yOTQsMTAgKzMwMCwxMSBA
QCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBCiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0
dGVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CiAKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxl
eGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOworCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUlu
ZGV4KHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNE
YXRhRGVzY3JpcHRvcigpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwogICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJp
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIGlu
dm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLmlu
ZGV4ZWRTZXR0ZXIoaW5kZXgudmFsdWUoKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKQEAg
LTMwOCwxMCArMzE1LDEwIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ckEKICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6
OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5LCAmbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0o
KSB9OwogICAgICAgICBib29sIGZvdW5kID0gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0
aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAg
ICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOworICAgICAgICB0aHJvd1Njb3BlLmFz
c2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAgIGlmICghZm91bmQpIHsKICAgICAgICAgICAgIGlm
ICghcHJvcGVydHlEZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgcHJvcGVydHlEZXNjcmlwdG9yLnZhbHVlKCkpOwogICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKICAgICAgICAgICAgIGludm9rZUZ1bmN0b3JQ
cm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLm5hbWVkU2V0dGVyKHBy
b3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsg
fSk7CkBAIC0zMjEsNiArMzI4LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyQQogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIG5ld1Byb3BlcnR5RGVzY3JpcHRvciA9
IHByb3BlcnR5RGVzY3JpcHRvcjsKICAgICBuZXdQcm9wZXJ0eURlc2NyaXB0b3Iuc2V0Q29uZmln
dXJhYmxlKHRydWUpOworICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVybiBKU09i
amVjdDo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIG5ld1Byb3BlcnR5RGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnMuY3BwCShyZXZpc2lvbiAyNzMyODMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3Zl
cnJpZGVCdWlsdElucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiwyNSArMjA2LDI5IEBAIGJv
b2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGUKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CiAKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxH
bG9iYWxPYmplY3QtPnZtKCkpOworCiAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkg
ewotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0
Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIGludm9rZUZ1
bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVk
SXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7IH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICB0aHJvd1Njb3Bl
LmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgcmV0
dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKIH0KIAogYm9vbCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwg
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBKU1Zh
bHVlIHZhbHVlLCBib29sKQogewotICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgVk0mIHZtID0gSlNDOjpnZXRW
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJv
bSh2bSwgaW5kZXgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
SlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgaW52b2tlRnVuY3Rv
clByb3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVt
KHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUp
KTsgfSk7CkBAIC0yMzYsMTAgKzI0MCwxMSBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeU92ZXJyaWRlCiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOworCiAg
ICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgewogICAgICAgICBpZiAoIXByb3BlcnR5
RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRW
TShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5RGVzY3JpcHRv
ci52YWx1ZSgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVl
KTsKICAgICAgICAgaW52b2tlRnVuY3RvclByb3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3Nhcnko
KmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2JqZWN0
LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFt
ZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsgfSk7CkBAIC0yNDgsNiArMjUzLDcgQEAgYm9vbCBK
U1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZQogCiAgICAgUHJvcGVydHlEZXNjcmlw
dG9yIG5ld1Byb3BlcnR5RGVzY3JpcHRvciA9IHByb3BlcnR5RGVzY3JpcHRvcjsKICAgICBuZXdQ
cm9wZXJ0eURlc2NyaXB0b3Iuc2V0Q29uZmlndXJhYmxlKHRydWUpOworICAgIHRocm93U2NvcGUu
cmVsZWFzZSgpOwogICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIG5ld1Byb3BlcnR5RGVzY3JpcHRv
ciwgc2hvdWxkVGhyb3cpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0
aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmNw
cAkocmV2aXNpb24gMjczMjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCwxMyArMjMwLDE1IEBAIGJvb2wgSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWEKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKSk7CisKICAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CiAgICAgICAg
IFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1l
dGhvZFR5cGU6OlZNSW5xdWlyeSwgJmxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkgfTsKICAgICAg
ICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoSlND
OjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIGJvb2wgZm91bmQgPSBwcm90
b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qo
bGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5k
aXNhbGxvd1ZNRW50cnkucmVzZXQoKTsKKyAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbigpOwogICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkp
OwogICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB0cnVlKTsKICAgICAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9wYWdh
dGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0
eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwpA
QCAtMjQ0LDI4ICsyNDYsMzQgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZv
cmdlYQogICAgICAgICB9CiAgICAgfQogCisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlv
bigpOworICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVybiBKU09iamVjdDo6cHV0
KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1
dFByb3BlcnR5U2xvdCk7CiB9CiAKIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBi
b29sIHNob3VsZFRocm93KQogewotICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMqPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBWTSYgdm0gPSBKU0M6
OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVy
Ojpmcm9tKHZtLCBpbmRleCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQ
cm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5LCAmdm0gfTsKICAgICBK
U1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7CiAg
ICAgYm9vbCBmb3VuZCA9IHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlw
ZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOwogICAgIHNsb3QuZGlzYWxsb3dWTUVudHJ5LnJlc2V0KCk7CisgICAgdGhyb3dTY29wZS5h
c3NlcnROb0V4Y2VwdGlvbigpOwogICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHRydWUpOwogICAgICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRpbmdFeGNl
cHRpb25JZk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsg
cmV0dXJuIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9T
dHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigp
OworICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVybiBKU09iamVjdDo6cHV0QnlJ
bmRleChjZWxsLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93
KTsKIH0KIApAQCAtMjc0LDYgKzI4Miw4IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5VW5mb3JnZWEKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyo+KG9iamVjdCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsK
KwogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKIHN0YXRpYyBib29sIGlzTGVn
YWN5VW5mb3JnZWFibGVQcm9wZXJ0eU5hbWUoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsK
QEAgLTI4NCwxMCArMjk0LDEwIEBAIHN0YXRpYyBib29sIGlzTGVnYWN5VW5mb3JnZWFibGVQcm9w
ZXJ0eU4KICAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVy
dHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSwgJmxleGljYWxHbG9iYWxPYmpl
Y3QtPnZtKCkgfTsKICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwg
c2xvdCk7CiAgICAgICAgICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOworICAgICAg
ICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAgICAgICAgaWYgKCFm
b3VuZCkgewogICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlEZXNjcmlwdG9yLmlzRGF0YURl
c2NyaXB0b3IoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlEZXNj
cmlwdG9yLnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgaW52b2tlRnVuY3RvclByb3BhZ2F0aW5n
RXhjZXB0aW9uSWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsm
XSB7IHJldHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFt
ZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsgfSk7CkBAIC0y
OTgsNiArMzA4LDcgQEAgc3RhdGljIGJvb2wgaXNMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnR5Tgog
CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIG5ld1Byb3BlcnR5RGVzY3JpcHRvciA9IHByb3BlcnR5
RGVzY3JpcHRvcjsKICAgICBuZXdQcm9wZXJ0eURlc2NyaXB0b3Iuc2V0Q29uZmlndXJhYmxlKHRy
dWUpOworICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVybiBKU09iamVjdDo6ZGVm
aW5lT3duUHJvcGVydHkob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IG5ld1Byb3BlcnR5RGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMuY3BwCShyZXZpc2lvbiAyNzMyODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFi
bGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzMCwyNSArMjMwLDI5IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWEKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CiAKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9i
YWxPYmplY3QtPnZtKCkpOworCiAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgewot
ICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0o
bGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIGludm9rZUZ1bmN0
b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRl
bShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7IH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICB0aHJvd1Njb3BlLmFz
c2VydE5vRXhjZXB0aW9uKCk7CisgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgcmV0dXJu
IEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKIH0KIAogYm9vbCBKU1Rlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sKQogewotICAgIFZNJiB2
bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRp
ZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgVk0mIHZtID0gSlNDOjpnZXRW
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJv
bSh2bSwgaW5kZXgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
SlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgaW52b2tlRnVuY3Rv
clByb3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVt
KHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUp
KTsgfSk7CkBAIC0yNjAsNiArMjY0LDggQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lVbmZvcmdlYQogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0
ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElu
cyo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogCisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhp
Y2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKKwogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9s
KCkpIHsKIHN0YXRpYyBib29sIGlzTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0eU5hbWUoUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKQEAgLTI2OSw3ICsyNzUsNiBAQCBzdGF0aWMgYm9vbCBp
c0xlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydHlOCiAgICAgICAgIGlmICghaXNMZWdhY3lVbmZvcmdl
YWJsZVByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgICAgICBpZiAoIXByb3Bl
cnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRp
bmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
WyZdIHsgcmV0dXJuIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlO
YW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKQEAg
LTI3OSw2ICsyODQsNyBAQCBzdGF0aWMgYm9vbCBpc0xlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydHlO
CiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgbmV3UHJvcGVydHlEZXNjcmlwdG9yID0gcHJvcGVy
dHlEZXNjcmlwdG9yOwogICAgIG5ld1Byb3BlcnR5RGVzY3JpcHRvci5zZXRDb25maWd1cmFibGUo
dHJ1ZSk7CisgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIEpTT2JqZWN0Ojpk
ZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgbmV3UHJvcGVydHlEZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAyNzMyODMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDI1ICsxODEsMzUgQEAgYm9vbCBKU1Rlc3RQbHVnaW5J
bnRlcmZhY2U6OnB1dChKU0NlbGwqIAogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0UGx1Z2luSW50ZXJmYWNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKKwogICAgIGJvb2wgcHV0UmVz
dWx0ID0gZmFsc2U7CiAgICAgaWYgKHBsdWdpbkVsZW1lbnRDdXN0b21QdXQodGhpc09iamVjdCwg
bGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90
LCBwdXRSZXN1bHQpKQogICAgICAgICByZXR1cm4gcHV0UmVzdWx0OwogCisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpOworICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVybiBKU09iamVj
dDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHB1dFByb3BlcnR5U2xvdCk7CiB9CiAKIGJvb2wgSlNUZXN0UGx1Z2luSW50ZXJmYWNlOjpw
dXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewot
ICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RQbHVnaW5JbnRlcmZhY2UqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBWTSYg
dm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJ
ZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHB1dFByb3Bl
cnR5U2xvdCh0aGlzT2JqZWN0LCBzaG91bGRUaHJvdyk7CiAgICAgYm9vbCBwdXRSZXN1bHQgPSBm
YWxzZTsKICAgICBpZiAocGx1Z2luRWxlbWVudEN1c3RvbVB1dCh0aGlzT2JqZWN0LCBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QsIHB1dFJl
c3VsdCkpCiAgICAgICAgIHJldHVybiBwdXRSZXN1bHQ7CiAKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9u
KCk7CisgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXRC
eUluZGV4KGNlbGwsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhy
b3cpOwogfQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzMyODMpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wMi0yNSAgU2FhbSBC
YXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc29tZSBleGNlcHRpb24g
Y2hlY2tzIHRvIHRoZSBiaW5kaW5ncyBnZW5lcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjQzNAorICAgICAgICA8cmRhcjovLzY5MDY2MTMw
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganMv
ZG9tL2xvY2FsLXN0b3JhZ2UtZXhjZXB0aW9uLWNoZWNrcy1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGpzL2RvbS9sb2NhbC1zdG9yYWdlLWV4Y2VwdGlvbi1jaGVja3MuaHRtbDogQWRk
ZWQuCisKIDIwMjEtMDItMjIgIFJvYiBCdWlzICA8cmJ1aXNAaWdhbGlhLmNvbT4KIAogICAgICAg
ICBSZXN5bmMgd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2l6aW5nL2FzcGVjdC1yYXRpbyBm
cm9tIHVwc3RyZWFtCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9kb20vbG9jYWwtc3RvcmFnZS1leGNl
cHRpb24tY2hlY2tzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9k
b20vbG9jYWwtc3RvcmFnZS1leGNlcHRpb24tY2hlY2tzLWV4cGVjdGVkLnR4dAkobm9uZXhpc3Rl
bnQpCisrKyBMYXlvdXRUZXN0cy9qcy9kb20vbG9jYWwtc3RvcmFnZS1leGNlcHRpb24tY2hlY2tz
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0
cy9qcy9kb20vbG9jYWwtc3RvcmFnZS1leGNlcHRpb24tY2hlY2tzLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvZG9tL2xvY2FsLXN0b3JhZ2UtZXhjZXB0aW9uLWNoZWNrcy5odG1s
CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2pzL2RvbS9sb2NhbC1zdG9yYWdlLWV4Y2Vw
dGlvbi1jaGVja3MuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZ
UEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGpzY09wdGlvbnM9LS12YWxpZGF0ZUV4
Y2VwdGlvbkNoZWNrcz10cnVlIF0gLS0+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+CisgICAgPHNjcmlwdD4KKyAgICAgICAgbG9jYWxTdG9yYWdlLl9fcHJvdG9fXyA9ICgpID0+
IHt9OworICAgICAgICBsb2NhbFN0b3JhZ2UuX19wcm90b19fID0gdW5kZWZpbmVkOworICAgIDwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="440434"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421567</attachid>
            <date>2021-02-25 14:40:30 -0800</date>
            <delta_ts>2021-02-25 17:57:28 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>90349</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MzUwNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBACisyMDIxLTAyLTI1ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzb21lIGV4Y2VwdGlvbiBj
aGVja3MgdG8gdGhlIGJpbmRpbmdzIGdlbmVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyNDM0CisgICAgICAgIDxyZGFyOi8vNjkwNjYxMzA+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAgICAgICBUZXN0OiBq
cy9kb20vbG9jYWwtc3RvcmFnZS1leGNlcHRpb24tY2hlY2tzLmh0bWwKKworICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVJbnZv
a2VJbmRleGVkUHJvcGVydHlTZXR0ZXIpOgorICAgICAgICAoR2VuZXJhdGVJbnZva2VOYW1lZFBy
b3BlcnR5U2V0dGVyKToKKyAgICAgICAgKEdlbmVyYXRlUHV0KToKKyAgICAgICAgKEdlbmVyYXRl
UHV0QnlJbmRleCk6CisgICAgICAgIChHZW5lcmF0ZURlZmluZU93blByb3BlcnR5KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllcjo6cHV0QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1
dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b246OnB1dEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1dCk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1
dEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnB1
dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXI6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dEJ5SW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246
OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1dCk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllcjo6cHV0QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6cHV0KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXRCeUlu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpk
ZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6cHV0KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dEJ5SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6ZGVmaW5l
T3duUHJvcGVydHkpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RO
YW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdXRCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmRlZmluZU93blByb3BlcnR5KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlcjo6cHV0QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXJBbmRTZXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnB1dEJ5SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRl
cjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6
OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVy
cmlkZUJ1aWx0SW5zOjpwdXRCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OmRlZmluZU93blByb3BlcnR5KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllczo6cHV0KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGll
czo6cHV0QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhM
ZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRp
ZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3Zl
cnJpZGVCdWlsdEluczo6cHV0QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1
aWx0SW5zOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RQbHVnaW5JbnRlcmZhY2U6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQbHVnaW5J
bnRlcmZhY2U6OnB1dEJ5SW5kZXgpOgorCiAyMDIxLTAyLTIzICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KIAogICAgICAgICBTdHJlYW1saW5lIEltYWdlRGF0YSBzaXplIGNhbGN1bGF0
aW9ucyBhbmQgaGFuZGxlIG91dC1vZi1tZW1vcnkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyNzMyODMp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQko
d29ya2luZyBjb3B5KQpAQCAtMTE1Miw3ICsxMTUyLDYgQEAgc3ViIEdlbmVyYXRlSW52b2tlSW5k
ZXhlZFByb3BlcnR5U2V0dGVyCiAgICAgbXkgJGFyZ3VtZW50ID0gQHskaW5kZXhlZFNldHRlck9w
ZXJhdGlvbi0+YXJndW1lbnRzfVsxXTsKICAgICBteSAkbmF0aXZlVmFsdWUgPSBKU1ZhbHVlVG9O
YXRpdmUoJGludGVyZmFjZSwgJGFyZ3VtZW50LCAkdmFsdWUsICRpbmRleGVkU2V0dGVyT3BlcmF0
aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25kaXRpb25hbH0sICJsZXhpY2FsR2xvYmFsT2Jq
ZWN0IiwgIipsZXhpY2FsR2xvYmFsT2JqZWN0IiwgInRoaXNPYmplY3QiLCAiIiwgIiIpOwogICAg
IAotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpO1xuIik7
CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gImF1dG8gbmF0aXZlVmFsdWUgPSAk
e25hdGl2ZVZhbHVlfTtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpO1xuIik7CiAgICAgCkBAIC0xMTcw
LDcgKzExNjksNiBAQCBzdWIgR2VuZXJhdGVJbnZva2VOYW1lZFByb3BlcnR5U2V0dGVyCiAgICAg
bXkgJGFyZ3VtZW50ID0gQHskbmFtZWRTZXR0ZXJPcGVyYXRpb24tPmFyZ3VtZW50c31bMV07CiAg
ICAgbXkgJG5hdGl2ZVZhbHVlID0gSlNWYWx1ZVRvTmF0aXZlKCRpbnRlcmZhY2UsICRhcmd1bWVu
dCwgJHZhbHVlLCAkbmFtZWRTZXR0ZXJPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0Nv
bmRpdGlvbmFsfSwgImxleGljYWxHbG9iYWxPYmplY3QiLCAiKmxleGljYWxHbG9iYWxPYmplY3Qi
LCAidGhpc09iamVjdCIsICIiLCAiIik7CiAgICAgCi0gICAgcHVzaChAJG91dHB1dEFycmF5LCAk
aW5kZW50IC4gImF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRW
TShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRp
bmRlbnQgLiAiYXV0byBuYXRpdmVWYWx1ZSA9ICR7bmF0aXZlVmFsdWV9O1xuIik7CiAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gIlJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgdHJ1ZSk7XG4iKTsKIApAQCAtMTIwMiw2ICsxMjAwLDggQEAgc3ViIEdlbmVyYXRlUHV0CiAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtj
bGFzc05hbWV9Kj4oY2VsbCk7XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuXG4iKTsKIAorICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpO1xuXG4iKTsKKwogICAgIGFzc2VydCgi
Q0VSZWFjdGlvbnMgaXMgbm90IHN1cHBvcnRlZCBvbiBoYXZpbmcgYm90aCBuYW1lZCBzZXR0ZXJz
IGFuZCBpbmRleGVkIHNldHRlcnMiKSBpZiAkbmFtZWRTZXR0ZXJPcGVyYXRpb24gJiYgJG5hbWVk
U2V0dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDRVJlYWN0aW9uc30KICAgICAg
ICAgJiYgJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24gJiYgJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24t
PmV4dGVuZGVkQXR0cmlidXRlcy0+e0NFUmVhY3Rpb25zfTsKICAgICBpZiAoJG5hbWVkU2V0dGVy
T3BlcmF0aW9uKSB7CkBAIC0xMjMyLDYgKzEyMzIsNyBAQCBzdWIgR2VuZXJhdGVQdXQKICAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0
aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgYm9v
bCBmb3VuZCA9IHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdl
dFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpO1xu
Iik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHNsb3QuZGlzYWxs
b3dWTUVudHJ5LnJlc2V0KCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpO1xuIik7CiAgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGlmICghZm91bmQpIHtcbiIpOwogICAgICAg
ICAgICAgJGFkZGl0aW9uYWxJbmRlbnQgLj0gIiAgICAiOwogICAgICAgICB9CkBAIC0xMjM5LDcg
KzEyNDAsNyBAQCBzdWIgR2VuZXJhdGVQdXQKICAgICAgICAgR2VuZXJhdGVJbnZva2VOYW1lZFBy
b3BlcnR5U2V0dGVyKCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRlbnQgLiAiICAgICAgICAi
LCAkaW50ZXJmYWNlLCAkbmFtZWRTZXR0ZXJPcGVyYXRpb24sICJ2YWx1ZSIpOwogICAgICAgICBp
ZiAoJG5hbWVkU2V0dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDYWxsTmFtZWRT
ZXR0ZXJPbmx5Rm9yU3VwcG9ydGVkUHJvcGVydGllc30pIHsKICAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRlbnQgLiAiICAgICAgICBpZiAoIWlzUHJvcGVydHlT
dXBwb3J0ZWQpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFkZGl0aW9u
YWxJbmRlbnQgLiAiICAgICAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwg
bGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90
KTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVu
dCAuICIgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNPYmplY3Q6
OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBwdXRQcm9wZXJ0eVNsb3QpKTtcbiIpOwogICAgICAgICB9CiAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgJGFkZGl0aW9uYWxJbmRlbnQgLiAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOwog
CkBAIC0xMjU1LDExICsxMjU2LDE0IEBAIHN1YiBHZW5lcmF0ZVB1dAogICAgICAgICBBZGRUb0lt
cGxJbmNsdWRlcygiSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmgiKTsKIAogICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTtcbiIpOwotICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKHBsdWdpbkVsZW1lbnRDdXN0b21QdXQodGhp
c09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJv
cGVydHlTbG90LCBwdXRSZXN1bHQpKVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBib29sIHN1Y2Nlc3MgPSBwbHVnaW5FbGVtZW50Q3VzdG9tUHV0KHRoaXNPYmplY3QsIGxl
eGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCwg
cHV0UmVzdWx0KTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIGlmIChzdWNjZXNzKVxuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICAgICAgcmV0dXJuIHB1dFJlc3VsdDtcblxuIik7CiAgICAgfQogCi0gICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxl
eGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7
XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpO1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCkpO1xuIik7CiAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKIH0KIApAQCAtMTI3NywxMiArMTI4MSwx
MiBAQCBzdWIgR2VuZXJhdGVQdXRCeUluZGV4CiAgICAgCiAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiYm9vbCAke2NsYXNzTmFtZX06OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUs
IGJvb2wiIC4gKCEkZWxsaWRlc0NhbGxzVG9CYXNlID8gIiBzaG91bGRUaHJvdyIgOiAiIikgLiAi
KVxuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7Ci0gICAgaWYgKCRuYW1lZFNl
dHRlck9wZXJhdGlvbiB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQbHVnaW59
KSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBWTSYgdm0gPSBKU0M6OmdldFZN
KGxleGljYWxHbG9iYWxPYmplY3QpO1xuIik7Ci0gICAgfQogICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xu
Iik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTtcblxuIik7CiAKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTtcbiIpOworICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTtcblxuIik7CisKICAgICBhc3NlcnQoIkNFUmVhY3Rpb25zIGlzIG5vdCBzdXBw
b3J0ZWQgb24gaGF2aW5nIGJvdGggbmFtZWQgc2V0dGVycyBhbmQgaW5kZXhlZCBzZXR0ZXJzIikg
aWYgJG5hbWVkU2V0dGVyT3BlcmF0aW9uICYmICRuYW1lZFNldHRlck9wZXJhdGlvbi0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Q0VSZWFjdGlvbnN9CiAgICAgICAgICYmICRpbmRleGVkU2V0dGVyT3Bl
cmF0aW9uICYmICRpbmRleGVkU2V0dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntD
RVJlYWN0aW9uc307CiAgICAgaWYgKCRuYW1lZFNldHRlck9wZXJhdGlvbikgewpAQCAtMTMxMCw2
ICsxMzE0LDcgQEAgc3ViIEdlbmVyYXRlUHV0QnlJbmRleAogICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90
eXBlRGlyZWN0KHZtKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUp
LT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90
KTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHNsb3QuZGlzYWxs
b3dWTUVudHJ5LnJlc2V0KCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7XG4iKTsKICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIWZvdW5kKSB7XG4iKTsKICAgICAgICAgICAgICRh
ZGRpdGlvbmFsSW5kZW50IC49ICIgICAgIjsKICAgICAgICAgfQpAQCAtMTMxNyw3ICsxMzIyLDcg
QEAgc3ViIEdlbmVyYXRlUHV0QnlJbmRleAogICAgICAgICBHZW5lcmF0ZUludm9rZU5hbWVkUHJv
cGVydHlTZXR0ZXIoJG91dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudCAuICIgICAgIiwgJGlu
dGVyZmFjZSwgJG5hbWVkU2V0dGVyT3BlcmF0aW9uLCAidmFsdWUiKTsKICAgICAgICAgaWYgKCRu
YW1lZFNldHRlck9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FsbE5hbWVkU2V0dGVy
T25seUZvclN1cHBvcnRlZFByb3BlcnRpZXN9KSB7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICRhZGRpdGlvbmFsSW5kZW50IC4gIiAgICBpZiAoIWlzUHJvcGVydHlTdXBwb3J0ZWQp
XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRlbnQg
LiAiICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dEJ5SW5kZXgoY2VsbCwgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7XG4iKTsKKyAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRlbnQgLiAiICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoY2VsbCwgbGV4aWNhbEds
b2JhbE9iamVjdCwgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdykpO1xuIik7CiAgICAgICAgIH0K
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudCAuICIgICAgcmV0
dXJuIHRydWU7XG4iKTsKICAgICAgICAgCkBAIC0xMzMyLDEyICsxMzM3LDE1IEBAIHN1YiBHZW5l
cmF0ZVB1dEJ5SW5kZXgKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gcHJv
cGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpO1xuIik7CiAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBQdXRQcm9wZXJ0eVNsb3QgcHV0UHJvcGVydHlTbG90KHRo
aXNPYmplY3QsIHNob3VsZFRocm93KTtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgaWYgKHBsdWdpbkVsZW1lbnRDdXN0b21QdXQodGhpc09iamVjdCwgbGV4aWNh
bEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90LCBwdXRS
ZXN1bHQpKVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBib29sIHN1Y2Nl
c3MgPSBwbHVnaW5FbGVtZW50Q3VzdG9tUHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCwgcHV0UmVzdWx0KTtcbiIp
OworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IGlmIChzdWNjZXNzKVxuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAg
cmV0dXJuIHB1dFJlc3VsdDtcblxuIik7CiAgICAgfQogCiAgICAgaWYgKCEkZWxsaWRlc0NhbGxz
VG9CYXNlKSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gSlNPYmpl
Y3Q6OnB1dEJ5SW5kZXgoY2VsbCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHZhbHVlLCBz
aG91bGRUaHJvdyk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHRocm93
U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTT2JqZWN0OjpwdXRCeUlu
ZGV4KGNlbGwsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cp
KTtcbiIpOwogICAgIH0KICAgICAKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwpA
QCAtMTM4NSw2ICsxMzkzLDggQEAgc3ViIEdlbmVyYXRlRGVmaW5lT3duUHJvcGVydHkKICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNz
TmFtZX0qPihvYmplY3QpO1xuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcblxuIik7CiAKKyAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTtcblxuIik7CisKICAgICBhc3NlcnQoIkNF
UmVhY3Rpb25zIGlzIG5vdCBzdXBwb3J0ZWQgb24gaGF2aW5nIGJvdGggbmFtZWQgc2V0dGVycyBh
bmQgaW5kZXhlZCBzZXR0ZXJzIikgaWYgJG5hbWVkU2V0dGVyT3BlcmF0aW9uICYmICRuYW1lZFNl
dHRlck9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q0VSZWFjdGlvbnN9CiAgICAgICAg
ICYmICRpbmRleGVkU2V0dGVyT3BlcmF0aW9uICYmICRpbmRleGVkU2V0dGVyT3BlcmF0aW9uLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntDRVJlYWN0aW9uc307CiAgICAgaWYgKCRuYW1lZFNldHRlck9w
ZXJhdGlvbikgewpAQCAtMTQ0Niw2ICsxNDU2LDcgQEAgc3ViIEdlbmVyYXRlRGVmaW5lT3duUHJv
cGVydHkKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRlbnQu
ICIgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJ
bnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSwgJmxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkg
fTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVu
dC4gIiAgICAgICAgYm9vbCBmb3VuZCA9IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhp
c09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTtcbiIpOwog
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudC4gIiAgICAg
ICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTtcbiIpOworICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudC4gIiAgICAgICAgdGhyb3dTY29wZS5hc3Nl
cnROb0V4Y2VwdGlvbigpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRh
ZGRpdGlvbmFsSW5kZW50LiAiICAgICAgICBpZiAoIWZvdW5kKSB7XG4iKTsKICAgICAgICAgICAg
ICRhZGRpdGlvbmFsSW5kZW50IC49ICIgICAgIjsKICAgICAgICAgfQpAQCAtMTQ2NCw3ICsxNDc1
LDcgQEAgc3ViIEdlbmVyYXRlRGVmaW5lT3duUHJvcGVydHkKICAgICAgICAgICAgIEdlbmVyYXRl
SW52b2tlTmFtZWRQcm9wZXJ0eVNldHRlcigkb3V0cHV0QXJyYXksICRhZGRpdGlvbmFsSW5kZW50
IC4gIiAgICAgICAgIiwgJGludGVyZmFjZSwgJG5hbWVkU2V0dGVyT3BlcmF0aW9uLCAicHJvcGVy
dHlEZXNjcmlwdG9yLnZhbHVlKCkiKTsKICAgICAgICAgICAgIGlmICgkbmFtZWRTZXR0ZXJPcGVy
YXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NhbGxOYW1lZFNldHRlck9ubHlGb3JTdXBwb3J0
ZWRQcm9wZXJ0aWVzfSkgewogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFk
ZGl0aW9uYWxJbmRlbnQgLiAiICAgIGlmICghaXNQcm9wZXJ0eVN1cHBvcnRlZClcbiIpOwotICAg
ICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRlbnQgLiAiICAg
ICAgICByZXR1cm4gSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgbGV4aWNhbEds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBwcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRocm93
KTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJ
bmRlbnQgLiAiICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNPYmplY3Q6
OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCBwcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRocm93KSk7XG4iKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICMgMi4yLjMuIFJldHVybiB0cnVlLgogICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudCAuICIgICAgICAgIHJldHVybiB0cnVlO1xu
Iik7CkBAIC0xNDkxLDYgKzE1MDIsNyBAQCBzdWIgR2VuZXJhdGVEZWZpbmVPd25Qcm9wZXJ0eQog
ICAgIH0KICAgICAKICAgICAjIDQuIFJldHVybiBPcmRpbmFyeURlZmluZU93blByb3BlcnR5KE8s
IFAsIERlc2MpLgorICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB0aHJvd1Njb3BlLnJlbGVh
c2UoKTtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gSlNPYmplY3Q6
OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCBuZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRocm93KTtcbiIpOwogICAgIAogICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzMyODMpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCwxNSArMTk0LDE3IEBAIGJv
b2wgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6cHUKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3Qt
PnZtKCkpOworCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkp
IHsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAgICBpbnZva2VG
dW5jdG9yUHJvcGFnYXRpbmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgWyZdIHsgcmV0dXJuIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXRJdGVt
KGluZGV4LnZhbHVlKCksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsgfSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxl
eGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7
CisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCkpOwogfQogCiBib29s
IEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxs
LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5kZXgsIEpT
VmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCkBAIC0yMTAsMTUgKzIxMiwxOCBAQCBib29s
IEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnB1CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgVk0m
IHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChMSUtFTFkoaW5kZXggPD0g
TUFYX0FSUkFZX0lOREVYKSkgewotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7
CiAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+
d3JhcHBlZCgpLnNldEl0ZW0oaW5kZXgsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsgfSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6cHV0QnlJbmRl
eChjZWxsLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsK
KyAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIEpTT2JqZWN0OjpwdXRCeUluZGV4KGNlbGwsIGxleGljYWxHbG9iYWxP
YmplY3QsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpKTsKIH0KIAogYm9vbCBKU1Rlc3RJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0
LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBwcm9wZXJ0eURlc2NyaXB0b3IsIGJv
b2wgc2hvdWxkVGhyb3cpCkBAIC0yMjYsMTAgKzIzMSwxMSBAQCBib29sIEpTVGVzdEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXI6OmRlCiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOworCiAgICAg
aWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgaWYg
KCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eURlc2NyaXB0b3IudmFsdWUoKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgdHJ1ZSk7CiAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklm
TmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4g
dGhpc09iamVjdC0+d3JhcHBlZCgpLnNldEl0ZW0oaW5kZXgudmFsdWUoKSwgV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOyB9KTsKQEAgLTIzOCw2ICsyNDQsNyBAQCBib29sIEpTVGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXI6OmRlCiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgbmV3UHJvcGVydHlE
ZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yOwogICAgIG5ld1Byb3BlcnR5RGVzY3JpcHRv
ci5zZXRDb25maWd1cmFibGUodHJ1ZSk7CisgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAg
cmV0dXJuIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGxleGljYWxHbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgbmV3UHJvcGVydHlEZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyNzMyODMpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDE1ICsxOTQsMTcgQEAgYm9vbCBKU1Rlc3RJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpbwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgp
KTsKKwogICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0g
ICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKICAgICAgICAgaW52b2tlRnVuY3Rv
clByb3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0SXRlbShpbmRl
eC52YWx1ZSgpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOworICAg
IHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpKTsKIH0KIAogYm9vbCBKU1Rl
c3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxs
LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5kZXgsIEpT
VmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCkBAIC0yMTAsMTUgKzIxMiwxOCBAQCBib29s
IEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvCiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAg
ICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKExJS0VMWShpbmRl
eCA8PSBNQVhfQVJSQVlfSU5ERVgpKSB7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0
cnVlKTsKICAgICAgICAgaW52b2tlRnVuY3RvclByb3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3Nh
cnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCkuc2V0SXRlbShpbmRleCwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpwdXRC
eUluZGV4KGNlbGwsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhy
b3cpOworICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoY2VsbCwgbGV4aWNhbEds
b2JhbE9iamVjdCwgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdykpOwogfQogCiBib29sIEpTVGVz
dEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgcHJvcGVydHlEZXNj
cmlwdG9yLCBib29sIHNob3VsZFRocm93KQpAQCAtMjI2LDEwICsyMzEsMTEgQEAgYm9vbCBKU1Rl
c3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpbwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3Qt
PnZtKCkpOworCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkp
IHsKICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9wYWdh
dGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldEl0ZW0oaW5kZXgudmFsdWUo
KSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKQEAgLTIzOCw2ICsyNDQsNyBAQCBib29sIEpT
VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvCiAKICAgICBQcm9wZXJ0eURlc2NyaXB0
b3IgbmV3UHJvcGVydHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yOwogICAgIG5ld1By
b3BlcnR5RGVzY3JpcHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7CisgICAgdGhyb3dTY29wZS5y
ZWxlYXNlKCk7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3Qs
IGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgbmV3UHJvcGVydHlEZXNjcmlwdG9y
LCBzaG91bGRUaHJvdyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzMyODMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDE1ICsyMDEsMTcgQEAgYm9vbCBK
U1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OgogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52
bSgpKTsKKwogICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7
Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRW
TShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKICAgICAgICAgaW52b2tlRnVu
Y3RvclByb3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaW5kZXhlZFNl
dHRlcihpbmRleC52YWx1ZSgpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNs
b3QpOworICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpKTsKIH0KIAog
Ym9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1dEJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5k
ZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCkBAIC0yMTcsMTUgKzIxOSwxOCBA
QCBib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAK
KyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKExJS0VMWShp
bmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpKSB7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAg
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB0cnVlKTsKICAgICAgICAgaW52b2tlRnVuY3RvclByb3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNl
c3NhcnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7IHJldHVybiB0aGlz
T2JqZWN0LT53cmFwcGVkKCkuaW5kZXhlZFNldHRlcihpbmRleCwgV1RGTW92ZShuYXRpdmVWYWx1
ZSkpOyB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2Jq
ZWN0OjpwdXRCeUluZGV4KGNlbGwsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCB2YWx1ZSwg
c2hvdWxkVGhyb3cpOworICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoY2VsbCwg
bGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdykpOwogfQogCiBi
b29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6ZGVmaW5lT3duUHJvcGVydHko
SlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgcHJvcGVy
dHlEZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQpAQCAtMjMzLDEwICsyMzgsMTEgQEAgYm9v
bCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OgogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0KTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmpl
Y3QtPnZtKCkpOworCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFt
ZSkpIHsKICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAg
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9w
YWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLmluZGV4ZWRTZXR0ZXIoaW5k
ZXgudmFsdWUoKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKQEAgLTI0NSw2ICsyNTEsNyBA
QCBib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6CiAKICAgICBQcm9wZXJ0
eURlc2NyaXB0b3IgbmV3UHJvcGVydHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yOwog
ICAgIG5ld1Byb3BlcnR5RGVzY3JpcHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7CisgICAgdGhy
b3dTY29wZS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0
eShvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgbmV3UHJvcGVydHlE
ZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lv
biAyNzMyODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjI1LDggKzIyNSw5IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGkKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CisKICAgICBpZiAoYXV0byBpbmRl
eCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwog
ICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgdHJ1ZSk7CiAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklm
TmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4g
dGhpc09iamVjdC0+d3JhcHBlZCgpLnNldEl0ZW0oaW5kZXgudmFsdWUoKSwgV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOyB9KTsKQEAgLTIzOCw4ICsyMzksOCBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpCiAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVj
dC0+Z2V0UHJvdG90eXBlRGlyZWN0KEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwog
ICAgICAgICBib29sIGZvdW5kID0gcHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJv
dG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7CiAgICAgICAgIHNsb3QuZGlzYWxsb3dWTUVudHJ5LnJlc2V0KCk7CisgICAgICAg
IHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAgICAgaWYgKCFmb3VuZCkgewot
ICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAg
ICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRpbmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsgcmV0dXJuIHRoaXNPYmplY3QtPndyYXBw
ZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKQEAgLTI0NywxNyArMjQ4LDE5IEBAIGJvb2wgSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGkKICAgICAgICAgfQogICAgIH0KIAotICAgIHJl
dHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CisgICAgdGhyb3dTY29wZS5hc3NlcnRO
b0V4Y2VwdGlvbigpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU09iamVj
dDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHB1dFByb3BlcnR5U2xvdCkpOwogfQogCiBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllcjo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9v
bCBzaG91bGRUaHJvdykKIHsKLSAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIGlmIChMSUtFTFkoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKSkgewot
ICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0o
bGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIGludm9rZUZ1bmN0
b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldEl0ZW0oaW5k
ZXgsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsgfSk7CkBAIC0yNjksMTUgKzI3MiwxNiBAQCBib29s
IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpCiAgICAgSlNWYWx1ZSBwcm90b3R5
cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwogICAgIGJvb2wgZm91bmQg
PSBwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0
eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICBzbG90
LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOworICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRp
b24oKTsKICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0
cnVlKTsKICAgICAgICAgaW52b2tlRnVuY3RvclByb3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3Nh
cnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5
TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsgfSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6cHV0QnlJbmRleChjZWxsLCBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICB0aHJvd1Njb3BlLmFz
c2VydE5vRXhjZXB0aW9uKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpT
T2JqZWN0OjpwdXRCeUluZGV4KGNlbGwsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCB2YWx1
ZSwgc2hvdWxkVGhyb3cpKTsKIH0KIAogYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXI6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIHByb3BlcnR5RGVzY3JpcHRvciwgYm9vbCBzaG91bGRU
aHJvdykKQEAgLTI4NSwxMCArMjg5LDExIEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGkKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKKwogICAgIGlm
IChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIGlmICgh
cHJvcGVydHlEZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShK
U0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlE
ZXNjcmlwdG9yLnZhbHVlKCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHRydWUpOwogICAgICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRpbmdFeGNlcHRpb25JZk5l
Y2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsgcmV0dXJuIHRo
aXNPYmplY3QtPndyYXBwZWQoKS5zZXRJdGVtKGluZGV4LnZhbHVlKCksIFdURk1vdmUobmF0aXZl
VmFsdWUpKTsgfSk7CkBAIC0yOTksMTAgKzMwNCwxMCBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpCiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVj
dCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSwgJmxleGljYWxH
bG9iYWxPYmplY3QtPnZtKCkgfTsKICAgICAgICAgYm9vbCBmb3VuZCA9IEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTsKKyAgICAg
ICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAgICBpZiAoIWZvdW5kKSB7
CiAgICAgICAgICAgICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKICAgICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpKTsKICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgICAg
ICBpbnZva2VGdW5jdG9yUHJvcGFnYXRpbmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsgcmV0dXJuIHRoaXNPYmplY3QtPndyYXBwZWQo
KS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92
ZShuYXRpdmVWYWx1ZSkpOyB9KTsKQEAgLTMxMiw2ICszMTcsNyBAQCBib29sIEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpCiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgbmV3UHJv
cGVydHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yOwogICAgIG5ld1Byb3BlcnR5RGVz
Y3JpcHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7CisgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7
CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGxleGljYWxH
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgbmV3UHJvcGVydHlEZXNjcmlwdG9yLCBzaG91bGRU
aHJvdyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjczMjgz
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjI1LDggKzIyNSw5IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmcK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKKwogICAgIGlmIChhdXRvIGlu
ZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7
CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB0cnVlKTsKICAgICAgICAgaW52b2tlRnVuY3RvclByb3BhZ2F0aW5nRXhjZXB0aW9u
SWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7IHJldHVy
biB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0SXRlbShpbmRleC52YWx1ZSgpLCBXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7IH0pOwpAQCAtMjM4LDggKzIzOSw4IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyVGhyb3dpbmcKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2Jq
ZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7
CiAgICAgICAgIGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChw
cm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTsKKyAgICAg
ICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAgICBpZiAoIWZvdW5kKSB7
Ci0gICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6
Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwog
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKICAgICAg
ICAgICAgIGludm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3Jh
cHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwpAQCAtMjQ3LDE3ICsyNDgsMTkgQEAgYm9vbCBKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZwogICAgICAgICB9CiAgICAgfQogCi0gICAg
cmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKKyAgICB0aHJvd1Njb3BlLmFzc2Vy
dE5vRXhjZXB0aW9uKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTT2Jq
ZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgcHV0UHJvcGVydHlTbG90KSk7CiB9CiAKIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgVk0mIHZtID0gSlND
OjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChMSUtFTFkoaW5kZXggPD0gTUFYX0FSUkFZ
X0lOREVYKSkgewotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAg
IGludm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgp
LnNldEl0ZW0oaW5kZXgsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsgfSk7CkBAIC0yNjksMTUgKzI3
MiwxNiBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nCiAgICAgSlNW
YWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwogICAg
IGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUp
LT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90
KTsKICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOworICAgIHRocm93U2NvcGUuYXNz
ZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB0cnVlKTsKICAgICAgICAgaW52b2tlRnVuY3RvclByb3BhZ2F0aW5nRXhjZXB0
aW9uSWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7IHJl
dHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3Ry
aW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsgfSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6cHV0QnlJbmRleChjZWxs
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICB0
aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIEpTT2JqZWN0OjpwdXRCeUluZGV4KGNlbGwsIGxleGljYWxHbG9iYWxPYmplY3Qs
IGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpKTsKIH0KIAogYm9vbCBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3Qq
IG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgcHJvcGVydHlEZXNjcmlw
dG9yLCBib29sIHNob3VsZFRocm93KQpAQCAtMjg1LDEwICsyODksMTEgQEAgYm9vbCBKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmplY3Qp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9i
amVjdC0+dm0oKSk7CisKICAgICBpZiAoYXV0byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlO
YW1lKSkgewogICAgICAgICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9y
KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAg
ICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHByb3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKICAgICAgICAgaW52b2tlRnVuY3RvclBy
b3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0SXRlbShpbmRleC52
YWx1ZSgpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwpAQCAtMjk5LDEwICszMDQsMTAgQEAg
Ym9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZwogICAgICAgICBQcm9wZXJ0
eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBl
OjpWTUlucXVpcnksICZsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpIH07CiAgICAgICAgIGJvb2wg
Zm91bmQgPSBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGxleGljYWxH
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgICAgIHNsb3QuZGlzYWxsb3dW
TUVudHJ5LnJlc2V0KCk7CisgICAgICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsK
ICAgICAgICAgaWYgKCFmb3VuZCkgewogICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0
b3IuaXNEYXRhRGVzY3JpcHRvcigpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRW
TShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eURlc2Ny
aXB0b3IudmFsdWUoKSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHRydWUpOwogICAgICAgICAgICAgaW52b2tlRnVuY3RvclByb3BhZ2F0aW5nRXhjZXB0aW9u
SWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7IHJldHVy
biB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5n
KHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsgfSk7CkBAIC0zMTIsNiArMzE3
LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZwogCiAgICAgUHJv
cGVydHlEZXNjcmlwdG9yIG5ld1Byb3BlcnR5RGVzY3JpcHRvciA9IHByb3BlcnR5RGVzY3JpcHRv
cjsKICAgICBuZXdQcm9wZXJ0eURlc2NyaXB0b3Iuc2V0Q29uZmlndXJhYmxlKHRydWUpOworICAg
IHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJv
cGVydHkob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIG5ld1Byb3Bl
cnR5RGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJ
KHJldmlzaW9uIDI3MzI4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzNCw4ICsyMzQsOSBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlcldpdGhJZGVuCiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CisKICAgICBp
ZiAoYXV0byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwogICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJp
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9wYWdhdGlu
Z0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBb
Jl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLmluZGV4ZWRTZXR0ZXIoaW5kZXgudmFs
dWUoKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKQEAgLTI0Nyw4ICsyNDgsOCBAQCBib29s
IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVuCiAgICAgICAgIEpTVmFsdWUgcHJv
dG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCkpOwogICAgICAgICBib29sIGZvdW5kID0gcHJvdG90eXBlLmlzT2JqZWN0
KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KGxleGljYWxHbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgICAgIHNsb3QuZGlzYWxsb3dWTUVudHJ5
LnJlc2V0KCk7CisgICAgICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAg
ICAgaWYgKCFmb3VuZCkgewotICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHZhbHVlKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgdHJ1ZSk7CiAgICAgICAgICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRpbmdFeGNlcHRpb25J
Zk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsgcmV0dXJu
IHRoaXNPYmplY3QtPndyYXBwZWQoKS5uYW1lZFNldHRlcihwcm9wZXJ0eU5hbWVUb1N0cmluZyhw
cm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwpAQCAtMjU2LDE3ICsyNTcs
MTkgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbgogICAgICAgICB9
CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKKyAgICB0
aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KSk7CiB9CiAKIGJvb2wgSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1dEJ5SW5kZXgoSlNDZWxsKiBj
ZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5kZXgs
IEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgVk0mIHZtID0gSlNDOjpn
ZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgVk0m
IHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChMSUtFTFkoaW5kZXggPD0g
TUFYX0FSUkFZX0lOREVYKSkgewotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7
CiAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+
d3JhcHBlZCgpLmluZGV4ZWRTZXR0ZXIoaW5kZXgsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsgfSk7
CkBAIC0yNzgsMTUgKzI4MSwxNiBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldp
dGhJZGVuCiAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVE
aXJlY3Qodm0pOwogICAgIGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09i
amVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCBzbG90KTsKICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOworICAg
IHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBpZiAoIWZvdW5kKSB7Ci0gICAg
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKICAgICAgICAgaW52b2tlRnVuY3RvclBy
b3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkubmFtZWRTZXR0ZXIocHJv
cGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0Ojpw
dXRCeUluZGV4KGNlbGwsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCB2YWx1ZSwgc2hvdWxk
VGhyb3cpOworICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoY2VsbCwgbGV4aWNh
bEdsb2JhbE9iamVjdCwgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdykpOwogfQogCiBib29sIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpkZWZpbmVPd25Qcm9wZXJ0
eShKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBwcm9w
ZXJ0eURlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCkBAIC0yOTQsMTAgKzI5OCwxMSBAQCBi
b29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVuCiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+
KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogCisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2Fs
R2xvYmFsT2JqZWN0LT52bSgpKTsKKwogICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChw
cm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIGlmICghcHJvcGVydHlEZXNjcmlwdG9yLmlzRGF0YURl
c2NyaXB0b3IoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlEZXNjcmlwdG9yLnZhbHVlKCkpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAgICBpbnZva2VG
dW5jdG9yUHJvcGFnYXRpbmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgWyZdIHsgcmV0dXJuIHRoaXNPYmplY3QtPndyYXBwZWQoKS5pbmRleGVk
U2V0dGVyKGluZGV4LnZhbHVlKCksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsgfSk7CkBAIC0zMDgs
MTAgKzMxMywxMCBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVuCiAg
ICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRl
cm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSwgJmxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkgfTsK
ICAgICAgICAgYm9vbCBmb3VuZCA9IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09i
amVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAg
c2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTsKKyAgICAgICAgdGhyb3dTY29wZS5hc3NlcnRO
b0V4Y2VwdGlvbigpOwogICAgICAgICBpZiAoIWZvdW5kKSB7CiAgICAgICAgICAgICBpZiAoIXBy
b3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHByb3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgICAgICBpbnZva2VGdW5jdG9yUHJvcGFn
YXRpbmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgWyZdIHsgcmV0dXJuIHRoaXNPYmplY3QtPndyYXBwZWQoKS5uYW1lZFNldHRlcihwcm9wZXJ0
eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwpA
QCAtMzIxLDYgKzMyNiw3IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW4KIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBuZXdQcm9wZXJ0eURlc2NyaXB0b3IgPSBwcm9w
ZXJ0eURlc2NyaXB0b3I7CiAgICAgbmV3UHJvcGVydHlEZXNjcmlwdG9yLnNldENvbmZpZ3VyYWJs
ZSh0cnVlKTsKKyAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6
OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCBuZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9J
ZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAy
NzMyODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsMTMgKzIw
NiwxNSBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXQoCiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcio+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
IAorICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2Jh
bE9iamVjdC0+dm0oKSk7CisKICAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CiAg
ICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRl
cm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSwgJmxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkgfTsK
ICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJl
Y3QoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIGJvb2wgZm91bmQg
PSBwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0
eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAg
c2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTsKKyAgICAgICAgdGhyb3dTY29wZS5hc3NlcnRO
b0V4Y2VwdGlvbigpOwogICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCkpOwogICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKICAgICAgICAgICAgIGludm9rZUZ1bmN0b3JQ
cm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShw
cm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
IH0pOwpAQCAtMjIwLDI5ICsyMjIsMzMgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRp
Zmllcjo6cHV0KAogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQo
dGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0
UHJvcGVydHlTbG90KTsKKyAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwg
bGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90
KSk7CiB9CiAKIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnB1dEJ5SW5kZXgo
SlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWdu
ZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgVk0mIHZt
ID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgVk0mIHZt
ID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRl
bnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09i
amVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSwgJnZtIH07
CiAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qo
dm0pOwogICAgIGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChw
cm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCBzbG90KTsKICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOworICAgIHRocm93
U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xv
YmFsT2JqZWN0KSk7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0
cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKICAgICAgICAgaW52b2tlRnVuY3RvclByb3BhZ2F0
aW5nRXhjZXB0aW9uSWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IFsmXSB7IHJldHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5
TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsgfSk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6cHV0QnlJ
bmRleChjZWxsLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93
KTsKKyAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsIEpTT2JqZWN0OjpwdXRCeUluZGV4KGNlbGwsIGxleGljYWxHbG9i
YWxPYmplY3QsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpKTsKIH0KIAogYm9vbCBKU1Rlc3RO
YW1lZFNldHRlck5vSWRlbnRpZmllcjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVj
dCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgcHJvcGVydHlEZXNjcmlwdG9yLCBi
b29sIHNob3VsZFRocm93KQpAQCAtMjUwLDE0ICsyNTYsMTYgQEAgYm9vbCBKU1Rlc3ROYW1lZFNl
dHRlck5vSWRlbnRpZmllcjo6ZGVmaQogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CisKICAgICBp
ZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90
IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWly
eSwgJmxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkgfTsKICAgICAgICAgYm9vbCBmb3VuZCA9IEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVz
ZXQoKTsKKyAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAgICBp
ZiAoIWZvdW5kKSB7CiAgICAgICAgICAgICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFE
ZXNjcmlwdG9yKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxH
bG9iYWxPYmplY3QpKTsKICAgICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5RGVzY3JpcHRvci52YWx1
ZSgpKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7
CiAgICAgICAgICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRpbmdFeGNlcHRpb25JZk5lY2Vzc2Fy
eSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsgcmV0dXJuIHRoaXNPYmpl
Y3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlO
YW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKQEAgLTI2Nyw2ICsyNzUsNyBAQCBib29s
IEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpkZWZpCiAKICAgICBQcm9wZXJ0eURlc2Ny
aXB0b3IgbmV3UHJvcGVydHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yOwogICAgIG5l
d1Byb3BlcnR5RGVzY3JpcHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7CisgICAgdGhyb3dTY29w
ZS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShvYmpl
Y3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgbmV3UHJvcGVydHlEZXNjcmlw
dG9yLCBzaG91bGRUaHJvdyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI3MzI4MykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDEzICsyMDYsMTUgQEAg
Ym9vbCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOgogICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9i
amVjdC0+dm0oKSk7CisKICAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CiAgICAg
ICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5h
bE1ldGhvZFR5cGU6OlZNSW5xdWlyeSwgJmxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkgfTsKICAg
ICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qo
SlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIGJvb2wgZm91bmQgPSBw
cm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNs
b3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgc2xv
dC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTsKKyAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpOwogICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVj
dCkpOwogICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKICAgICAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9w
YWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9w
ZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0p
OwpAQCAtMjIwLDI5ICsyMjIsMzMgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uOgogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhp
c09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJv
cGVydHlTbG90KTsKKyAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4
aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KSk7
CiB9CiAKIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6cHV0QnlJbmRl
eChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnNp
Z25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBWTSYg
dm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAg
IFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBhdXRvIHByb3BlcnR5TmFt
ZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7
IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnks
ICZ2bSB9OwogICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBl
RGlyZWN0KHZtKTsKICAgICBib29sIGZvdW5kID0gcHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNP
YmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KGxleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTsKKyAg
ICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgaWYgKCFmb3VuZCkgewotICAg
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4
aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIGludm9rZUZ1bmN0b3JQ
cm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShw
cm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
IH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNPYmplY3Q6
OnB1dEJ5SW5kZXgoY2VsbCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHZhbHVlLCBzaG91
bGRUaHJvdyk7CisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU09iamVjdDo6cHV0QnlJbmRleChjZWxsLCBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KSk7CiB9CiAKIGJvb2wg
SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgcHJvcGVydHlE
ZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQpAQCAtMjUwLDE0ICsyNTYsMTYgQEAgYm9vbCBK
U1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOgogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KG9iamVjdCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0
LT52bSgpKTsKKwogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKICAgICAgICAg
UHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0
aG9kVHlwZTo6Vk1JbnF1aXJ5LCAmbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSB9OwogICAgICAg
ICBib29sIGZvdW5kID0gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICBzbG90LmRp
c2FsbG93Vk1FbnRyeS5yZXNldCgpOworICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0
aW9uKCk7CiAgICAgICAgIGlmICghZm91bmQpIHsKICAgICAgICAgICAgIGlmICghcHJvcGVydHlE
ZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpT
Qzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVy
dHlEZXNjcmlwdG9yLnZhbHVlKCkpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB0cnVlKTsKICAgICAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4
Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0g
eyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVU
b1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwpAQCAtMjY3
LDYgKzI3NSw3IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjoKIAog
ICAgIFByb3BlcnR5RGVzY3JpcHRvciBuZXdQcm9wZXJ0eURlc2NyaXB0b3IgPSBwcm9wZXJ0eURl
c2NyaXB0b3I7CiAgICAgbmV3UHJvcGVydHlEZXNjcmlwdG9yLnNldENvbmZpZ3VyYWJsZSh0cnVl
KTsKKyAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6OmRlZmlu
ZU93blByb3BlcnR5KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBu
ZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50
aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjcz
MjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsMTMgKzIx
MiwxNSBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwogCisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xv
YmFsT2JqZWN0LT52bSgpKTsKKwogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsK
ICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6Oklu
dGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5LCAmbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSB9
OwogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURp
cmVjdChKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgYm9vbCBmb3Vu
ZCA9IHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3Bl
cnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAg
ICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOworICAgICAgICB0aHJvd1Njb3BlLmFzc2Vy
dE5vRXhjZXB0aW9uKCk7CiAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7CiAgICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01T
dHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAgICAgICAgaW52b2tlRnVuY3Rv
clByb3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkubmFtZWRTZXR0ZXIo
cHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OyB9KTsKQEAgLTIyNiwyOSArMjI4LDMzIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcjo6cHUKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6cHV0
KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1
dFByb3BlcnR5U2xvdCk7CisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU09iamVjdDo6cHV0KHRoaXNPYmplY3Qs
IGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xv
dCkpOwogfQogCiBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1dEJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5z
aWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgVk0m
IHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBW
TSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0
aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5LCAm
dm0gfTsKICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURp
cmVjdCh2bSk7CiAgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2Jq
ZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwogICAgIHNsb3QuZGlzYWxsb3dWTUVudHJ5LnJlc2V0KCk7CisgICAg
dGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIGlmICghZm91bmQpIHsKLSAgICAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGlj
YWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAgICBpbnZva2VGdW5jdG9yUHJv
cGFnYXRpbmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgWyZdIHsgcmV0dXJuIHRoaXNPYmplY3QtPndyYXBwZWQoKS5uYW1lZFNldHRlcihwcm9w
ZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0p
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNPYmplY3Q6OnB1
dEJ5SW5kZXgoY2VsbCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHZhbHVlLCBzaG91bGRU
aHJvdyk7CisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU09iamVjdDo6cHV0QnlJbmRleChjZWxsLCBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KSk7CiB9CiAKIGJvb2wgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3Qq
IG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgcHJvcGVydHlEZXNjcmlw
dG9yLCBib29sIHNob3VsZFRocm93KQpAQCAtMjU2LDE0ICsyNjIsMTYgQEAgYm9vbCBKU1Rlc3RO
YW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpkZQogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsK
KwogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKICAgICAgICAgUHJvcGVydHlT
bG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6
Vk1JbnF1aXJ5LCAmbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSB9OwogICAgICAgICBib29sIGZv
dW5kID0gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICBzbG90LmRpc2FsbG93Vk1F
bnRyeS5yZXNldCgpOworICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAg
ICAgICAgIGlmICghZm91bmQpIHsKICAgICAgICAgICAgIGlmICghcHJvcGVydHlEZXNjcmlwdG9y
LmlzRGF0YURlc2NyaXB0b3IoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0o
bGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlEZXNjcmlw
dG9yLnZhbHVlKCkpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB0cnVlKTsKICAgICAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklm
TmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4g
dGhpc09iamVjdC0+d3JhcHBlZCgpLm5hbWVkU2V0dGVyKHByb3BlcnR5TmFtZVRvU3RyaW5nKHBy
b3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsgfSk7CkBAIC0yNzMsNiArMjgxLDcg
QEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpkZQogCiAgICAgUHJvcGVy
dHlEZXNjcmlwdG9yIG5ld1Byb3BlcnR5RGVzY3JpcHRvciA9IHByb3BlcnR5RGVzY3JpcHRvcjsK
ICAgICBuZXdQcm9wZXJ0eURlc2NyaXB0b3Iuc2V0Q29uZmlndXJhYmxlKHRydWUpOworICAgIHRo
cm93U2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVy
dHkob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIG5ld1Byb3BlcnR5
RGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCShyZXZpc2lvbiAyNzMyODMp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNCwxMyArMjM0
LDE1IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjoKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CiAKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxH
bG9iYWxPYmplY3QtPnZtKCkpOworCiAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkg
ewogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6
SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnksICZsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgp
IH07CiAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBl
RGlyZWN0KEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICBib29sIGZv
dW5kID0gcHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJv
cGVydHlTbG90KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAg
ICAgIHNsb3QuZGlzYWxsb3dWTUVudHJ5LnJlc2V0KCk7CisgICAgICAgIHRocm93U2NvcGUuYXNz
ZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAgICAgaWYgKCFmb3VuZCkgewotICAgICAgICAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKICAgICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERP
TVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgICAgICBpbnZva2VGdW5j
dG9yUHJvcGFnYXRpbmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgWyZdIHsgcmV0dXJuIHRoaXNPYmplY3QtPndyYXBwZWQoKS5uYW1lZFNldHRl
cihwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7IH0pOwpAQCAtMjQ4LDI5ICsyNTAsMzMgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyOgogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0Ojpw
dXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
cHV0UHJvcGVydHlTbG90KTsKKyAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Cisg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTT2JqZWN0OjpwdXQodGhpc09iamVj
dCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlT
bG90KSk7CiB9CiAKIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6cHV0
QnlJbmRleChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAg
ICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcio+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
IAorICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBhdXRvIHByb3Bl
cnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICBQcm9wZXJ0eVNsb3Qg
c2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlu
cXVpcnksICZ2bSB9OwogICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJv
dG90eXBlRGlyZWN0KHZtKTsKICAgICBib29sIGZvdW5kID0gcHJvdG90eXBlLmlzT2JqZWN0KCkg
JiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQo
KTsKKyAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgaWYgKCFmb3VuZCkg
ewotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0
Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIGludm9rZUZ1
bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLm5hbWVkU2V0
dGVyKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFs
dWUpKTsgfSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBKU09i
amVjdDo6cHV0QnlJbmRleChjZWxsLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgdmFsdWUs
IHNob3VsZFRocm93KTsKKyAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTT2JqZWN0OjpwdXRCeUluZGV4KGNlbGws
IGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpKTsKIH0KIAog
Ym9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjpkZWZpbmVPd25Qcm9wZXJ0
eShKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBwcm9w
ZXJ0eURlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCkBAIC0yNzgsNiArMjg0LDggQEAgYm9v
bCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOgogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcio+KG9iamVjdCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2Jq
ZWN0LT52bSgpKTsKKwogICAgIGlmIChwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtMjg1LDEwICsyOTMsMTAgQEAgYm9vbCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyOgogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNP
YmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnksICZsZXhp
Y2FsR2xvYmFsT2JqZWN0LT52bSgpIH07CiAgICAgICAgIGJvb2wgZm91bmQgPSBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7CiAgICAgICAgIHNsb3QuZGlzYWxsb3dWTUVudHJ5LnJlc2V0KCk7Cisg
ICAgICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAgICAgaWYgKCFmb3Vu
ZCkgewogICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRv
cigpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CiAgICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJp
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CiAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAg
ICAgICAgaW52b2tlRnVuY3RvclByb3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3NhcnkoKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2JqZWN0LT53cmFw
cGVkKCkubmFtZWRTZXR0ZXIocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKQEAgLTI5OCw2ICszMDYsNyBAQCBib29sIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6CiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgbmV3
UHJvcGVydHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yOwogICAgIG5ld1Byb3BlcnR5
RGVzY3JpcHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7CisgICAgdGhyb3dTY29wZS5yZWxlYXNl
KCk7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGxleGlj
YWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgbmV3UHJvcGVydHlEZXNjcmlwdG9yLCBzaG91
bGRUaHJvdyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAJKHJldmlzaW9uIDI3MzI4
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjM0LDggKzIzNCw5IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckEK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXJBbmRTZXR0ZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOworCiAgICAgaWYgKGF1dG8gaW5k
ZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsK
ICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHRydWUpOwogICAgICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRpbmdFeGNlcHRpb25J
Zk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsgcmV0dXJu
IHRoaXNPYmplY3QtPndyYXBwZWQoKS5pbmRleGVkU2V0dGVyKGluZGV4LnZhbHVlKCksIFdURk1v
dmUobmF0aXZlVmFsdWUpKTsgfSk7CkBAIC0yNDcsOCArMjQ4LDggQEAgYm9vbCBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQQogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRo
aXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdChKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKICAgICAgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2Jq
ZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOwor
ICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAgIGlmICghZm91
bmQpIHsKLSAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
SlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1
ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwog
ICAgICAgICAgICAgaW52b2tlRnVuY3RvclByb3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3Nhcnko
KmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2JqZWN0
LT53cmFwcGVkKCkubmFtZWRTZXR0ZXIocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1l
KSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKQEAgLTI1NiwxNyArMjU3LDE5IEBAIGJvb2wg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckEKICAgICAgICAgfQogICAgIH0KIAot
ICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CisgICAgdGhyb3dTY29wZS5h
c3NlcnROb0V4Y2VwdGlvbigpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBK
U09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCkpOwogfQogCiBib29sIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBWTSYgdm0gPSBK
U0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKExJS0VMWShpbmRleCA8PSBNQVhfQVJS
QVlfSU5ERVgpKSB7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKICAgICAg
ICAgaW52b2tlRnVuY3RvclByb3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3NhcnkoKmxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2JqZWN0LT53cmFwcGVk
KCkuaW5kZXhlZFNldHRlcihpbmRleCwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKQEAgLTI3
OCwxNSArMjgxLDE2IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckEK
ICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2
bSk7CiAgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHBy
b3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOwogICAgIHNsb3QuZGlzYWxsb3dWTUVudHJ5LnJlc2V0KCk7CisgICAgdGhyb3dT
Y29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRp
bmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
WyZdIHsgcmV0dXJuIHRoaXNPYmplY3QtPndyYXBwZWQoKS5uYW1lZFNldHRlcihwcm9wZXJ0eU5h
bWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNPYmplY3Q6OnB1dEJ5SW5k
ZXgoY2VsbCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7
CisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCBKU09iamVjdDo6cHV0QnlJbmRleChjZWxsLCBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KSk7CiB9CiAKIGJvb2wgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6ZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgcHJvcGVydHlE
ZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQpAQCAtMjk0LDEwICsyOTgsMTEgQEAgYm9vbCBK
U1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQQogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcio+KG9i
amVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwogCisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xv
YmFsT2JqZWN0LT52bSgpKTsKKwogICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9w
ZXJ0eU5hbWUpKSB7CiAgICAgICAgIGlmICghcHJvcGVydHlEZXNjcmlwdG9yLmlzRGF0YURlc2Ny
aXB0b3IoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlEZXNjcmlwdG9yLnZhbHVlKCkpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAgICBpbnZva2VGdW5j
dG9yUHJvcGFnYXRpbmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgWyZdIHsgcmV0dXJuIHRoaXNPYmplY3QtPndyYXBwZWQoKS5pbmRleGVkU2V0
dGVyKGluZGV4LnZhbHVlKCksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsgfSk7CkBAIC0zMDgsMTAg
KzMxMywxMCBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBCiAgICAg
ICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5h
bE1ldGhvZFR5cGU6OlZNSW5xdWlyeSwgJmxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkgfTsKICAg
ICAgICAgYm9vbCBmb3VuZCA9IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVj
dCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgc2xv
dC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTsKKyAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpOwogICAgICAgICBpZiAoIWZvdW5kKSB7CiAgICAgICAgICAgICBpZiAoIXByb3Bl
cnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRp
bmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
WyZdIHsgcmV0dXJuIHRoaXNPYmplY3QtPndyYXBwZWQoKS5uYW1lZFNldHRlcihwcm9wZXJ0eU5h
bWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwpAQCAt
MzIxLDYgKzMyNiw3IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckEK
IAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBuZXdQcm9wZXJ0eURlc2NyaXB0b3IgPSBwcm9wZXJ0
eURlc2NyaXB0b3I7CiAgICAgbmV3UHJvcGVydHlEZXNjcmlwdG9yLnNldENvbmZpZ3VyYWJsZSh0
cnVlKTsKKyAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6OmRl
ZmluZU93blByb3BlcnR5KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCBuZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zLmNwcAkocmV2aXNpb24gMjczMjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsMjUgKzIwNiwyOCBAQCBib29sIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlCiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2Jq
ZWN0LT52bSgpKTsKKwogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKLSAgICAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGlj
YWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAgICBpbnZva2VGdW5jdG9yUHJv
cGFnYXRpbmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgWyZdIHsgcmV0dXJuIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJv
cGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0Ojpw
dXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
cHV0UHJvcGVydHlTbG90KTsKKyAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Cisg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTT2JqZWN0OjpwdXQodGhpc09iamVj
dCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlT
bG90KSk7CiB9CiAKIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWls
dEluczo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCkKIHsKLSAgICBW
TSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElu
cyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKIAorICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBhdXRv
IHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKLSAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCkpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHRydWUpOwogICAgIGludm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVj
ZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4gdGhp
c09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9w
ZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwpAQCAtMjM2LDEwICsyMzksMTEg
QEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZQogICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWls
dElucyo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwogCisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShs
ZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKKwogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3lt
Ym9sKCkpIHsKICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRv
cigpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwog
ICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIGludm9rZUZ1bmN0b3JQ
cm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShw
cm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
IH0pOwpAQCAtMjQ4LDYgKzI1Miw3IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5
T3ZlcnJpZGUKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBuZXdQcm9wZXJ0eURlc2NyaXB0b3Ig
PSBwcm9wZXJ0eURlc2NyaXB0b3I7CiAgICAgbmV3UHJvcGVydHlEZXNjcmlwdG9yLnNldENvbmZp
Z3VyYWJsZSh0cnVlKTsKKyAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICByZXR1cm4gSlNP
YmplY3Q6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCBuZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHAJKHJldmlzaW9uIDI3MzI4MykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAs
MTMgKzIzMCwxNSBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhCiAg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lV
bmZvcmdlYWJsZVByb3BlcnRpZXMqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOworCiAgICAgaWYgKCFwcm9w
ZXJ0eU5hbWUuaXNTeW1ib2woKSkgewogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNP
YmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnksICZsZXhp
Y2FsR2xvYmFsT2JqZWN0LT52bSgpIH07CiAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhp
c09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVj
dCkpOwogICAgICAgICBib29sIGZvdW5kID0gcHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmpl
Y3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7CiAgICAgICAgIHNsb3QuZGlzYWxsb3dWTUVudHJ5LnJlc2V0KCk7Cisg
ICAgICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAgICAgaWYgKCFmb3Vu
ZCkgewotICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShK
U0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAg
ICAgICAgICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRpbmdFeGNlcHRpb25JZk5lY2Vzc2FyeSgq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsgcmV0dXJuIHRoaXNPYmplY3Qt
PndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1l
KSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKQEAgLTI0NCwyOSArMjQ2LDMzIEBAIGJvb2wg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWEKICAgICAgICAgfQogICAgIH0KIAot
ICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CisgICAgdGhyb3dTY29wZS5h
c3NlcnROb0V4Y2VwdGlvbigpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBK
U09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCkpOwogfQogCiBib29sIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllczo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGws
IEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbmRleCwgSlNW
YWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBWTSYgdm0gPSBKU0M6OmdldFZN
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAg
Vk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGF1dG8gcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIFByb3BlcnR5U2xvdCBzbG90IHsg
dGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSwg
JnZtIH07CiAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVE
aXJlY3Qodm0pOwogICAgIGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09i
amVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCBzbG90KTsKICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOworICAg
IHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBpZiAoIWZvdW5kKSB7Ci0gICAg
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKICAgICAgICAgaW52b2tlRnVuY3RvclBy
b3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHBy
b3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsg
fSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6
cHV0QnlJbmRleChjZWxsLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgdmFsdWUsIHNob3Vs
ZFRocm93KTsKKyAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTT2JqZWN0OjpwdXRCeUluZGV4KGNlbGwsIGxleGlj
YWxHbG9iYWxPYmplY3QsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpKTsKIH0KIAogYm9vbCBK
U1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM6OmRlZmluZU93
blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0
b3ImIHByb3BlcnR5RGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKQEAgLTI3NCw2ICsyODAs
OCBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhCiAgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJs
ZVByb3BlcnRpZXMqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKIAorICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CisKICAgICBpZiAoIXByb3BlcnR5TmFt
ZS5pc1N5bWJvbCgpKSB7CiBzdGF0aWMgYm9vbCBpc0xlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydHlO
YW1lKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CkBAIC0yODQsMTAgKzI5MiwxMCBAQCBz
dGF0aWMgYm9vbCBpc0xlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydHlOCiAgICAgICAgICAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RU
eXBlOjpWTUlucXVpcnksICZsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpIH07CiAgICAgICAgICAg
ICBib29sIGZvdW5kID0gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICAgICAgc2xv
dC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTsKKyAgICAgICAgICAgIHRocm93U2NvcGUuYXNzZXJ0
Tm9FeGNlcHRpb24oKTsKICAgICAgICAgICAgIGlmICghZm91bmQpIHsKICAgICAgICAgICAgICAg
ICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwog
ICAgICAgICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpKTsKICAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAg
ICAgICAgICAgIGludm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+
d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUp
LCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwpAQCAtMjk4LDYgKzMwNiw3IEBAIHN0YXRpYyBi
b29sIGlzTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0eU4KIAogICAgIFByb3BlcnR5RGVzY3JpcHRv
ciBuZXdQcm9wZXJ0eURlc2NyaXB0b3IgPSBwcm9wZXJ0eURlc2NyaXB0b3I7CiAgICAgbmV3UHJv
cGVydHlEZXNjcmlwdG9yLnNldENvbmZpZ3VyYWJsZSh0cnVlKTsKKyAgICB0aHJvd1Njb3BlLnJl
bGVhc2UoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwg
bGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBuZXdQcm9wZXJ0eURlc2NyaXB0b3Is
IHNob3VsZFRocm93KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGll
c0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lV
bmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkocmV2aXNp
b24gMjczMjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92
ZXJyaWRlQnVpbHRJbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsMjUgKzIzMCwyOCBAQCBi
b29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhCiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKKwogICAg
IGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKLSAgICAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsK
ICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHRydWUpOwogICAgICAgICBpbnZva2VGdW5jdG9yUHJvcGFnYXRpbmdFeGNlcHRpb25J
Zk5lY2Vzc2FyeSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsgcmV0dXJu
IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmco
cHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOyB9KTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4
aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsK
KyAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KSk7CiB9CiAKIGJvb2wg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5
T3ZlcnJpZGVCdWlsdEluczo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9v
bCkKIHsKLSAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucyo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIFZN
JiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9
IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwog
ICAgIGludm9rZUZ1bmN0b3JQcm9wYWdhdGluZ0V4Y2VwdGlvbklmTmVjZXNzYXJ5KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geyByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBl
ZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7IH0pOwpAQCAtMjYwLDYgKzI2Myw4IEBAIGJvb2wgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWEKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnMqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CisKICAgICBpZiAoIXByb3Bl
cnR5TmFtZS5pc1N5bWJvbCgpKSB7CiBzdGF0aWMgYm9vbCBpc0xlZ2FjeVVuZm9yZ2VhYmxlUHJv
cGVydHlOYW1lKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CkBAIC0yNjksNyArMjc0LDYg
QEAgc3RhdGljIGJvb2wgaXNMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnR5TgogICAgICAgICBpZiAo
IWlzTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKSkgewogICAgICAg
ICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAg
ICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CiAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAgICAgICAgaW52b2tl
RnVuY3RvclByb3BhZ2F0aW5nRXhjZXB0aW9uSWZOZWNlc3NhcnkoKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIFsmXSB7IHJldHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFt
ZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZl
VmFsdWUpKTsgfSk7CkBAIC0yNzksNiArMjgzLDcgQEAgc3RhdGljIGJvb2wgaXNMZWdhY3lVbmZv
cmdlYWJsZVByb3BlcnR5TgogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIG5ld1Byb3BlcnR5RGVz
Y3JpcHRvciA9IHByb3BlcnR5RGVzY3JpcHRvcjsKICAgICBuZXdQcm9wZXJ0eURlc2NyaXB0b3Iu
c2V0Q29uZmlndXJhYmxlKHRydWUpOworICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIHJl
dHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIG5ld1Byb3BlcnR5RGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
UGx1Z2luSW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMjcz
MjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBs
dWdpbkludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSwyNiArMTgxLDM2IEBAIGJv
b2wgSlNUZXN0UGx1Z2luSW50ZXJmYWNlOjpwdXQoSlNDZWxsKiAKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdFBsdWdpbkludGVyZmFjZSo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CisK
ICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlOwotICAgIGlmIChwbHVnaW5FbGVtZW50Q3VzdG9t
UHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHB1dFByb3BlcnR5U2xvdCwgcHV0UmVzdWx0KSkKKyAgICBib29sIHN1Y2Nlc3MgPSBwbHVnaW5F
bGVtZW50Q3VzdG9tUHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCwgcHV0UmVzdWx0KTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBpZiAoc3VjY2VzcykKICAgICAgICAg
cmV0dXJuIHB1dFJlc3VsdDsKIAotICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3Qs
IGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xv
dCk7CisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCkpOwogfQogCiBi
b29sIEpTVGVzdFBsdWdpbkludGVyZmFjZTo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0UGx1
Z2luSW50ZXJmYWNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogCisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwog
ICAgIFB1dFByb3BlcnR5U2xvdCBwdXRQcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgc2hvdWxkVGhy
b3cpOwogICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7Ci0gICAgaWYgKHBsdWdpbkVsZW1lbnRD
dXN0b21QdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgcHV0UHJvcGVydHlTbG90LCBwdXRSZXN1bHQpKQorICAgIGJvb2wgc3VjY2VzcyA9IHBs
dWdpbkVsZW1lbnRDdXN0b21QdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90LCBwdXRSZXN1bHQpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIGlmIChzdWNjZXNzKQogICAg
ICAgICByZXR1cm4gcHV0UmVzdWx0OwogCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpwdXRCeUluZGV4
KGNlbGwsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwor
ICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoY2VsbCwgbGV4aWNhbEdsb2JhbE9i
amVjdCwgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdykpOwogfQogCiBDYWxsRGF0YSBKU1Rlc3RQ
bHVnaW5JbnRlcmZhY2U6OmdldENhbGxEYXRhKEpTQ2VsbCogY2VsbCkKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI3MzI4MykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE0IEBACisyMDIxLTAyLTI1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29t
PgorCisgICAgICAgIEFkZCBzb21lIGV4Y2VwdGlvbiBjaGVja3MgdG8gdGhlIGJpbmRpbmdzIGdl
bmVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjIyNDM0CisgICAgICAgIDxyZGFyOi8vNjkwNjYxMzA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
WXVzdWtlIFN1enVraS4KKworICAgICAgICAqIGpzL2RvbS9sb2NhbC1zdG9yYWdlLWV4Y2VwdGlv
bi1jaGVja3MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9kb20vbG9jYWwtc3Rv
cmFnZS1leGNlcHRpb24tY2hlY2tzLmh0bWw6IEFkZGVkLgorCiAyMDIxLTAyLTIyICBSb2IgQnVp
cyAgPHJidWlzQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmVzeW5jIHdlYi1wbGF0Zm9ybS10ZXN0
cy9jc3MvY3NzLXNpemluZy9hc3BlY3QtcmF0aW8gZnJvbSB1cHN0cmVhbQpJbmRleDogTGF5b3V0
VGVzdHMvanMvZG9tL2xvY2FsLXN0b3JhZ2UtZXhjZXB0aW9uLWNoZWNrcy1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvZG9tL2xvY2FsLXN0b3JhZ2UtZXhjZXB0aW9u
LWNoZWNrcy1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvanMvZG9t
L2xvY2FsLXN0b3JhZ2UtZXhjZXB0aW9uLWNoZWNrcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0IEBACitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvZG9tL2xvY2FsLXN0b3JhZ2UtZXhj
ZXB0aW9uLWNoZWNrcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL2RvbS9sb2Nh
bC1zdG9yYWdlLWV4Y2VwdGlvbi1jaGVja3MuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRU
ZXN0cy9qcy9kb20vbG9jYWwtc3RvcmFnZS1leGNlcHRpb24tY2hlY2tzLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1y
dW5uZXIgWyBqc2NPcHRpb25zPS0tdmFsaWRhdGVFeGNlcHRpb25DaGVja3M9dHJ1ZSBdIC0tPgor
PGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxzY3JpcHQ+CisgICAgICAg
IGxvY2FsU3RvcmFnZS5fX3Byb3RvX18gPSAoKSA9PiB7fTsKKyAgICAgICAgbG9jYWxTdG9yYWdl
Ll9fcHJvdG9fXyA9IHVuZGVmaW5lZDsKKyAgICA8L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>