<?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>153205</bug_id>
          
          <creation_ts>2016-01-18 06:16:42 -0800</creation_ts>
          <short_desc>Selector checker should not mutate document and style</short_desc>
          <delta_ts>2016-01-19 09:39:56 -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>CSS</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1156393</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-01-18 06:16:42 -0800</bug_when>
    <thetext>Selector checker currently writes affected-by bits directly to the document and style during selector matching. This is confusing, complicated and wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156394</commentid>
    <comment_count>1</comment_count>
      <attachid>269217</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-01-18 06:17:22 -0800</bug_when>
    <thetext>Created attachment 269217
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156395</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-18 06:27:07 -0800</bug_when>
    <thetext>Attachment 269217 did not pass style-queue:


ERROR: Source/WebCore/cssjit/SelectorCompiler.cpp:327:  Missing space inside { }.  [whitespace/braces] [5]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156401</commentid>
    <comment_count>3</comment_count>
      <attachid>269220</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-01-18 07:01:33 -0800</bug_when>
    <thetext>Created attachment 269220
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156408</commentid>
    <comment_count>4</comment_count>
      <attachid>269221</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-01-18 07:48:23 -0800</bug_when>
    <thetext>Created attachment 269221
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156410</commentid>
    <comment_count>5</comment_count>
      <attachid>269223</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-01-18 07:55:07 -0800</bug_when>
    <thetext>Created attachment 269223
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156467</commentid>
    <comment_count>6</comment_count>
      <attachid>269223</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-01-18 15:18:23 -0800</bug_when>
    <thetext>Comment on attachment 269223
patch

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

&gt; Source/WebCore/css/SelectorChecker.cpp:91
&gt; +    checkingContext.styleRelations.append({ const_cast&lt;Element&amp;&gt;(element), type, value });

A little strange that we end up using the const_cast here. Any way to avoid it in future? I guess you are focusing on using const here more to express the fact that we won’t be setting flags and such on the Element.

&gt; Source/WebCore/css/SelectorChecker.cpp:1014
&gt; +        LocalContext subContext(context);

The coined word “subcontext” is a single word and it should not have a capital &quot;C&quot; in it.

&gt; Source/WebCore/css/SelectorCheckerTestFunctions.h:66
&gt; +ALWAYS_INLINE bool isMediaDocument(const Element* element)

This requires a non-null pointer, so I would have expected it to take a reference. Then I thought there was some assembly-language-related reason these have to take pointers, but I noticed that isChecked takes a reference.

&gt; Source/WebCore/css/SelectorCheckerTestFunctions.h:86
&gt; +ALWAYS_INLINE bool isInRange(const Element* element)

Ditto.

&gt; Source/WebCore/css/SelectorCheckerTestFunctions.h:91
&gt; +ALWAYS_INLINE bool isOutOfRange(const Element* element)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156584</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-01-19 02:54:58 -0800</bug_when>
    <thetext>&gt; A little strange that we end up using the const_cast here. Any way to avoid
&gt; it in future? I guess you are focusing on using const here more to express
&gt; the fact that we won’t be setting flags and such on the Element.

Right, this structure is used by the client (which presumably has non-const access to the DOM) to mutate the Element later. Selector checker never reads style relations, just writes them out. To apply the data someone will need to const_cast at some point, I thought better do it here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156611</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-01-19 09:39:56 -0800</bug_when>
    <thetext>https://trac.webkit.org/r195293</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269217</attachid>
            <date>2016-01-18 06:17:22 -0800</date>
            <delta_ts>2016-01-18 07:01:33 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>selector-checker-const-7.patch</filename>
            <type>text/plain</type>
            <size>96244</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAkocmV2
aXNpb24gMTk1MTMwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDExICszMjgsMTEgQEAgaW5saW5lIGJvb2wgRWxl
bWVudFJ1bGVDb2xsZWN0b3I6OnJ1bGVNYQogI2VuZGlmIC8vIEVOQUJMRShDU1NfU0VMRUNUT1Jf
SklUKQogCiAgICAgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQgY29udGV4dChtX21v
ZGUpOwotICAgIGNvbnRleHQuZWxlbWVudFN0eWxlID0gbV9zdHlsZTsKICAgICBjb250ZXh0LnBz
ZXVkb0lkID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQ7CiAgICAgY29udGV4dC5zY3Jv
bGxiYXIgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5zY3JvbGxiYXI7CiAgICAgY29udGV4dC5zY3Jv
bGxiYXJQYXJ0ID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3Quc2Nyb2xsYmFyUGFydDsKIAorICAgIGJv
b2wgc2VsZWN0b3JNYXRjaGVzOwogI2lmIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQogICAgIGlm
IChjb21waWxlZFNlbGVjdG9yQ2hlY2tlcikgewogICAgICAgICBBU1NFUlQocnVsZURhdGEuY29t
cGlsYXRpb25TdGF0dXMoKSA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTZWxlY3RvckNo
ZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KTsKQEAgLTM0MiwxMyArMzQyLDkzIEBAIGlubGluZSBi
b29sIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxlTWEKICNpZiBDU1NfU0VMRUNUT1JfSklUX1BS
T0ZJTElORwogICAgICAgICBydWxlRGF0YS5jb21waWxlZFNlbGVjdG9yVXNlZCgpOwogI2VuZGlm
Ci0gICAgICAgIHJldHVybiBzZWxlY3RvckNoZWNrZXIoJm1fZWxlbWVudCwgJmNvbnRleHQsICZz
cGVjaWZpY2l0eSk7Ci0gICAgfQorICAgICAgICBzZWxlY3Rvck1hdGNoZXMgPSBzZWxlY3RvckNo
ZWNrZXIoJm1fZWxlbWVudCwgJmNvbnRleHQsICZzcGVjaWZpY2l0eSk7CisgICAgfSBlbHNlCiAj
ZW5kaWYgLy8gRU5BQkxFKENTU19TRUxFQ1RPUl9KSVQpCisgICAgeworICAgICAgICAvLyBTbG93
IHBhdGguCisgICAgICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIobV9lbGVtZW50
LmRvY3VtZW50KCkpOworICAgICAgICBzZWxlY3Rvck1hdGNoZXMgPSBzZWxlY3RvckNoZWNrZXIu
bWF0Y2goKnJ1bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCwgY29udGV4dCwgc3BlY2lmaWNp
dHkpOworICAgIH0KKworICAgIGNvbW1pdFN0eWxlUmVsYXRpb25zKGNvbnRleHQuc3R5bGVSZWxh
dGlvbnMpOwogCi0gICAgLy8gU2xvdyBwYXRoLgotICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3Rv
ckNoZWNrZXIobV9lbGVtZW50LmRvY3VtZW50KCkpOwotICAgIHJldHVybiBzZWxlY3RvckNoZWNr
ZXIubWF0Y2gocnVsZURhdGEuc2VsZWN0b3IoKSwgJm1fZWxlbWVudCwgY29udGV4dCwgc3BlY2lm
aWNpdHkpOworICAgIGlmIChjb250ZXh0LnBzZXVkb0lEU2V0KQorICAgICAgICBtX3N0eWxlLT5z
ZXRIYXNQc2V1ZG9TdHlsZXMoY29udGV4dC5wc2V1ZG9JRFNldCk7CisKKyAgICByZXR1cm4gc2Vs
ZWN0b3JNYXRjaGVzOworfQorCisvLyBGSVhNRTogUnVsZSBjb2xsZWN0b3Igc2hvdWxkIG5vdCBi
ZSBkb2luZyBtdXRhdGlvbnMuIE1vdmUgdGhpcyBzb21ld2hlcmUgZWxzZS4KK3ZvaWQgRWxlbWVu
dFJ1bGVDb2xsZWN0b3I6OmNvbW1pdFN0eWxlUmVsYXRpb25zKGNvbnN0IFNlbGVjdG9yQ2hlY2tl
cjo6U3R5bGVSZWxhdGlvbnMmIHN0eWxlUmVsYXRpb25zKQoreworICAgIGZvciAoYXV0byYgcmVs
YXRpb24gOiBzdHlsZVJlbGF0aW9ucykgeworICAgICAgICBzd2l0Y2ggKHJlbGF0aW9uLnR5cGUp
IHsKKyAgICAgICAgY2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVjdGVk
QnlBY3RpdmU6CisgICAgICAgICAgICBpZiAoJnJlbGF0aW9uLmVsZW1lbnQgPT0gJm1fZWxlbWVu
dCkKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRBZmZlY3RlZEJ5QWN0aXZlKCk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVsYXRpb24uZWxlbWVudC5zZXRDaGlsZHJl
bkFmZmVjdGVkQnlBY3RpdmUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNl
bGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeURyYWc6CisgICAgICAgICAg
ICBpZiAoJnJlbGF0aW9uLmVsZW1lbnQgPT0gJm1fZWxlbWVudCkKKyAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRBZmZlY3RlZEJ5RHJhZygpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHJlbGF0aW9uLmVsZW1lbnQuc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5RHJhZygpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0
aW9uOjpBZmZlY3RlZEJ5RW1wdHk6CisgICAgICAgICAgICByZWxhdGlvbi5lbGVtZW50LnNldFN0
eWxlQWZmZWN0ZWRCeUVtcHR5KCk7CisgICAgICAgICAgICBpZiAoJnJlbGF0aW9uLmVsZW1lbnQg
PT0gJm1fZWxlbWVudCkKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRFbXB0eVN0YXRlKHJl
bGF0aW9uLnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNlbGVjdG9y
Q2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeUhvdmVyOgorICAgICAgICAgICAgaWYg
KCZyZWxhdGlvbi5lbGVtZW50ID09ICZtX2VsZW1lbnQpCisgICAgICAgICAgICAgICAgbV9zdHls
ZS0+c2V0QWZmZWN0ZWRCeUhvdmVyKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgcmVsYXRpb24uZWxlbWVudC5zZXRDaGlsZHJlbkFmZmVjdGVkQnlIb3ZlcigpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9u
OjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nOgorICAgICAgICAgICAgcmVsYXRpb24uZWxlbWVu
dC5zZXRTdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3Rz
TmV4dFNpYmxpbmc6CisgICAgICAgICAgICByZWxhdGlvbi5lbGVtZW50LnNldEFmZmVjdHNOZXh0
U2libGluZ0VsZW1lbnRTdHlsZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
U2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2Fy
ZFBvc2l0aW9uYWxSdWxlczoKKyAgICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQuc2V0Q2hpbGRy
ZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5B
ZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzOgorICAgICAgICAgICAgcmVsYXRpb24uZWxlbWVudC5z
ZXRDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5B
ZmZlY3RlZEJ5UHJvcGVydHlCYXNlZEJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzOgorICAgICAgICAg
ICAgcmVsYXRpb24uZWxlbWVudC5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9u
YWxSdWxlcygpOworICAgICAgICAgICAgcmVsYXRpb24uZWxlbWVudC5zZXRDaGlsZHJlbkFmZmVj
dGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6Q2hp
bGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXM6CisgICAgICAgICAgICByZWxhdGlvbi5lbGVt
ZW50LnNldENoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkZpcnN0
Q2hpbGQ6CisgICAgICAgICAgICBpZiAoJnJlbGF0aW9uLmVsZW1lbnQgPT0gJm1fZWxlbWVudCkK
KyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRGaXJzdENoaWxkU3RhdGUoKTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGF1dG8qIHN0eWxlID0gcmVsYXRpb24uZWxlbWVudC5yZW5kZXJTdHlsZSgp
KQorICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRGaXJzdENoaWxkU3RhdGUoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6
TGFzdENoaWxkOgorICAgICAgICAgICAgaWYgKCZyZWxhdGlvbi5lbGVtZW50ID09ICZtX2VsZW1l
bnQpCisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGFzdENoaWxkU3RhdGUoKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGF1dG8qIHN0eWxlID0gcmVsYXRpb24uZWxlbWVudC5yZW5kZXJTdHls
ZSgpKQorICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRMYXN0Q2hpbGRTdGF0ZSgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9u
OjpOdGhDaGlsZEluZGV4OgorICAgICAgICAgICAgcmVsYXRpb24uZWxlbWVudC5zZXRDaGlsZElu
ZGV4KHJlbGF0aW9uLnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNl
bGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6VW5pcXVlOgorICAgICAgICAgICAgaWYgKCZy
ZWxhdGlvbi5lbGVtZW50ID09ICZtX2VsZW1lbnQpCisgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0VW5pcXVlKCk7CisgICAgICAgICAgICBlbHNlIGlmIChhdXRvKiBzdHlsZSA9IHJlbGF0aW9u
LmVsZW1lbnQucmVuZGVyU3R5bGUoKSkKKyAgICAgICAgICAgICAgICBzdHlsZS0+c2V0VW5pcXVl
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KIH0KIAogdm9pZCBFbGVt
ZW50UnVsZUNvbGxlY3Rvcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFJ1bGVT
ZXQ6OlJ1bGVEYXRhVmVjdG9yKiBydWxlcywgY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVl
c3QsIFN0eWxlUmVzb2x2ZXI6OlJ1bGVSYW5nZSYgcnVsZVJhbmdlKQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgJKHJldmlzaW9uIDE5NTEzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC04NCw2ICs4NCw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGFkZE1hdGNoZWRSdWxlKGNvbnN0
IE1hdGNoZWRSdWxlJik7CiAKKyAgICB2b2lkIGNvbW1pdFN0eWxlUmVsYXRpb25zKGNvbnN0IFNl
bGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbnMmKTsKKwogICAgIEVsZW1lbnQmIG1fZWxlbWVu
dDsKICAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKICAgICBjb25zdCBEb2N1bWVudFJ1bGVTZXRz
JiBtX3J1bGVTZXRzOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAJ
KHJldmlzaW9uIDE5NTEzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDQtMjAwNSBB
bGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcgTmljaG9sYXMgU2hhbmtzICh3ZWJraXRAbmlja3NoYW5rcy5jb20pCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIw
MTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQpAQCAtNjMsMjkgKzYzLDM2IEBA
IGVudW0gY2xhc3MgVmlzaXRlZE1hdGNoVHlwZSA6IHVuc2lnbmVkIGMKICAgICBEaXNhYmxlZCwg
RW5hYmxlZAogfTsKIAotc3RydWN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0
aFN0YXR1cyA6IHB1YmxpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCB7Ci0gICAg
Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyhjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dCYgY2hlY2tpbmdDb250ZXh0LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVs
ZW1lbnQqIGVsZW1lbnQpCi0gICAgICAgIDogU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRl
eHQoY2hlY2tpbmdDb250ZXh0KQotICAgICAgICAsIHNlbGVjdG9yKHNlbGVjdG9yKQotICAgICAg
ICAsIGVsZW1lbnQoZWxlbWVudCkKLSAgICAgICAgLCB2aXNpdGVkTWF0Y2hUeXBlKHJlc29sdmlu
Z01vZGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpRdWVyeWluZ1J1bGVzID8gVmlzaXRlZE1h
dGNoVHlwZTo6RGlzYWJsZWQgOiBWaXNpdGVkTWF0Y2hUeXBlOjpFbmFibGVkKQotICAgICAgICAs
IGZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50KHNlbGVjdG9yKQotICAgICAgICAsIGluRnVuY3Rp
b25hbFBzZXVkb0NsYXNzKGZhbHNlKQotICAgICAgICAsIHBzZXVkb0VsZW1lbnRFZmZlY3RpdmUo
dHJ1ZSkKLSAgICAgICAgLCBoYXNTY3JvbGxiYXJQc2V1ZG8oZmFsc2UpCi0gICAgICAgICwgaGFz
U2VsZWN0aW9uUHNldWRvKGZhbHNlKQorc3RydWN0IFNlbGVjdG9yQ2hlY2tlcjo6TG9jYWxDb250
ZXh0IHsKKyAgICBMb2NhbENvbnRleHQoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBjb25z
dCBFbGVtZW50JiBlbGVtZW50LCBWaXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGUsIFBz
ZXVkb0lkIHBzZXVkb0lkKQorICAgICAgICA6IHNlbGVjdG9yKCZzZWxlY3RvcikKKyAgICAgICAg
LCBlbGVtZW50KCZlbGVtZW50KQorICAgICAgICAsIHZpc2l0ZWRNYXRjaFR5cGUodmlzaXRlZE1h
dGNoVHlwZSkKKyAgICAgICAgLCBmaXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCgmc2VsZWN0b3Ip
CisgICAgICAgICwgcHNldWRvSWQocHNldWRvSWQpCiAgICAgeyB9CiAKICAgICBjb25zdCBDU1NT
ZWxlY3Rvciogc2VsZWN0b3I7Ci0gICAgRWxlbWVudCogZWxlbWVudDsKKyAgICBjb25zdCBFbGVt
ZW50KiBlbGVtZW50OwogICAgIFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZTsKICAg
ICBjb25zdCBDU1NTZWxlY3RvciogZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQ7Ci0gICAgYm9v
bCBpbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzczsKLSAgICBib29sIHBzZXVkb0VsZW1lbnRFZmZlY3Rp
dmU7Ci0gICAgYm9vbCBoYXNTY3JvbGxiYXJQc2V1ZG87Ci0gICAgYm9vbCBoYXNTZWxlY3Rpb25Q
c2V1ZG87CisgICAgUHNldWRvSWQgcHNldWRvSWQ7CisgICAgYm9vbCBpc01hdGNoRWxlbWVudCB7
IHRydWUgfTsKKyAgICBib29sIGluRnVuY3Rpb25hbFBzZXVkb0NsYXNzIHsgZmFsc2UgfTsKKyAg
ICBib29sIHBzZXVkb0VsZW1lbnRFZmZlY3RpdmUgeyB0cnVlIH07CisgICAgYm9vbCBoYXNTY3Jv
bGxiYXJQc2V1ZG8geyBmYWxzZSB9OworICAgIGJvb2wgaGFzU2VsZWN0aW9uUHNldWRvIHsgZmFs
c2UgfTsKKwogfTsKIAorc3RhdGljIGlubGluZSB2b2lkIGFkZFN0eWxlUmVsYXRpb24oU2VsZWN0
b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQmIGNoZWNraW5nQ29udGV4dCwgY29uc3QgRWxlbWVu
dCYgZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpUeXBlIHR5cGUsIHVu
c2lnbmVkIHZhbHVlID0gMSkKK3sKKyAgICBBU1NFUlQodmFsdWUgPT0gMSB8fCB0eXBlID09IFNl
bGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6TnRoQ2hpbGRJbmRleCB8fCB0eXBlID09IFNl
bGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeUVtcHR5KTsKKyAgICBpZiAo
Y2hlY2tpbmdDb250ZXh0LnJlc29sdmluZ01vZGUgIT0gU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpS
ZXNvbHZpbmdTdHlsZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNoZWNraW5nQ29udGV4dC5zdHls
ZVJlbGF0aW9ucy5hcHBlbmQoeyBjb25zdF9jYXN0PEVsZW1lbnQmPihlbGVtZW50KSwgdHlwZSwg
dmFsdWUgfSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0ZpcnN0Q2hpbGRFbGVtZW50KGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgcmV0dXJuICFFbGVtZW50VHJhdmVyc2FsOjpw
cmV2aW91c1NpYmxpbmcoZWxlbWVudCk7CkBAIC05NiwxMSArMTAzLDExIEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc0xhc3RDaGlsZEVsZW1lbnQoY28KICAgICByZXR1cm4gIUVsZW1lbnRUcmF2ZXJz
YWw6Om5leHRTaWJsaW5nKGVsZW1lbnQpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNGaXJz
dE9mVHlwZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlLCBib29s
IGlzUmVzb2x2aW5nU3R5bGUpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGaXJzdE9mVHlwZShTZWxl
Y3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCYgY2hlY2tpbmdDb250ZXh0LCBjb25zdCBFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKQogewotICAgIGZvciAoRWxl
bWVudCogc2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZyhlbGVtZW50
KTsgc2libGluZzsgc2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZygq
c2libGluZykpIHsKLSAgICAgICAgaWYgKGlzUmVzb2x2aW5nU3R5bGUpCi0gICAgICAgICAgICBz
aWJsaW5nLT5zZXRBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKTsKKyAgICBmb3IgKGNv
bnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmco
ZWxlbWVudCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1Np
YmxpbmcoKnNpYmxpbmcpKSB7CisgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250
ZXh0LCAqc2libGluZywgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RzTmV4
dFNpYmxpbmcpOworCiAgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTExNiwxMiArMTIzLDEyIEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBpc0xhc3RPZlR5cGUoY29uc3QgRWwKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotc3RhdGljIGlubGluZSBpbnQgY291bnRFbGVtZW50c0JlZm9yZShFbGVtZW50JiBlbGVtZW50
LCBib29sIGlzUmVzb2x2aW5nU3R5bGUpCitzdGF0aWMgaW5saW5lIGludCBjb3VudEVsZW1lbnRz
QmVmb3JlKFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0JiBjaGVja2luZ0NvbnRleHQs
IGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaW50IGNvdW50ID0gMDsKLSAgICBmb3Ig
KEVsZW1lbnQqIHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoZWxl
bWVudCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxp
bmcoKnNpYmxpbmcpKSB7Ci0gICAgICAgIGlmIChpc1Jlc29sdmluZ1N0eWxlKQotICAgICAgICAg
ICAgc2libGluZy0+c2V0QWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlKCk7CisgICAgZm9y
IChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJs
aW5nKGVsZW1lbnQpOyBzaWJsaW5nOyBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlv
dXNTaWJsaW5nKCpzaWJsaW5nKSkgeworCisgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tp
bmdDb250ZXh0LCAqc2libGluZywgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZl
Y3RzTmV4dFNpYmxpbmcpOwogCiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc2libGluZy0+Y2hp
bGRJbmRleCgpOwogICAgICAgICBpZiAoaW5kZXgpIHsKQEAgLTEzMywxMiArMTQwLDExIEBAIHN0
YXRpYyBpbmxpbmUgaW50IGNvdW50RWxlbWVudHNCZWZvcmUoRWwKICAgICByZXR1cm4gY291bnQ7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUoRWxlbWVu
dCYgZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSwgYm9vbCBpc1Jlc29sdmluZ1N0
eWxlKQorc3RhdGljIGlubGluZSBpbnQgY291bnRFbGVtZW50c09mVHlwZUJlZm9yZShTZWxlY3Rv
ckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCYgY2hlY2tpbmdDb250ZXh0LCBjb25zdCBFbGVtZW50
JiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKQogewogICAgIGludCBjb3VudCA9
IDA7Ci0gICAgZm9yIChFbGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlv
dXNTaWJsaW5nKGVsZW1lbnQpOyBzaWJsaW5nOyBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6
cHJldmlvdXNTaWJsaW5nKCpzaWJsaW5nKSkgewotICAgICAgICBpZiAoaXNSZXNvbHZpbmdTdHls
ZSkKLSAgICAgICAgICAgIHNpYmxpbmctPnNldEFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHls
ZSgpOworICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6
OnByZXZpb3VzU2libGluZyhlbGVtZW50KTsgc2libGluZzsgc2libGluZyA9IEVsZW1lbnRUcmF2
ZXJzYWw6OnByZXZpb3VzU2libGluZygqc2libGluZykpIHsKKyAgICAgICAgYWRkU3R5bGVSZWxh
dGlvbihjaGVja2luZ0NvbnRleHQsICpzaWJsaW5nLCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVs
YXRpb246OkFmZmVjdHNOZXh0U2libGluZyk7CiAKICAgICAgICAgaWYgKHNpYmxpbmctPmhhc1Rh
Z05hbWUodHlwZSkpCiAgICAgICAgICAgICArK2NvdW50OwpAQCAtMTcwLDI2ICsxNzYsMjYgQEAg
U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNrZXIoRG9jdW1lbgogewogfQogCi1ib29sIFNl
bGVjdG9yQ2hlY2tlcjo6bWF0Y2goY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBDaGVja2luZ0NvbnRleHQmIHByb3ZpZGVkQ29udGV4dCwgdW5zaWdu
ZWQmIHNwZWNpZmljaXR5KSBjb25zdAorYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoKGNvbnN0
IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgQ2hlY2tpbmdD
b250ZXh0JiBjaGVja2luZ0NvbnRleHQsIHVuc2lnbmVkJiBzcGVjaWZpY2l0eSkgY29uc3QKIHsK
ICAgICBzcGVjaWZpY2l0eSA9IDA7CiAKLSAgICBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIGNv
bnRleHQocHJvdmlkZWRDb250ZXh0LCBzZWxlY3RvciwgZWxlbWVudCk7CisgICAgTG9jYWxDb250
ZXh0IGNvbnRleHQoc2VsZWN0b3IsIGVsZW1lbnQsIGNoZWNraW5nQ29udGV4dC5yZXNvbHZpbmdN
b2RlID09IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdSdWxlcyA/IFZpc2l0ZWRNYXRj
aFR5cGU6OkRpc2FibGVkIDogVmlzaXRlZE1hdGNoVHlwZTo6RW5hYmxlZCwgY2hlY2tpbmdDb250
ZXh0LnBzZXVkb0lkKTsKICAgICBQc2V1ZG9JZFNldCBwc2V1ZG9JZFNldDsKLSAgICBNYXRjaFJl
c3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KGNvbnRleHQsIHBzZXVkb0lkU2V0LCBzcGVj
aWZpY2l0eSk7CisgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShjaGVj
a2luZ0NvbnRleHQsIGNvbnRleHQsIHBzZXVkb0lkU2V0LCBzcGVjaWZpY2l0eSk7CiAgICAgaWYg
KHJlc3VsdC5tYXRjaCAhPSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKGNvbnRleHQucHNldWRvSWQgIT0gTk9QU0VVRE8gJiYgIXBzZXVkb0lk
U2V0Lmhhcyhjb250ZXh0LnBzZXVkb0lkKSkKKyAgICBpZiAoY2hlY2tpbmdDb250ZXh0LnBzZXVk
b0lkICE9IE5PUFNFVURPICYmICFwc2V1ZG9JZFNldC5oYXMoY2hlY2tpbmdDb250ZXh0LnBzZXVk
b0lkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGNvbnRleHQucHNldWRvSWQg
PT0gTk9QU0VVRE8gJiYgcHNldWRvSWRTZXQpIHsKKyAgICBpZiAoY2hlY2tpbmdDb250ZXh0LnBz
ZXVkb0lkID09IE5PUFNFVURPICYmIHBzZXVkb0lkU2V0KSB7CiAgICAgICAgIFBzZXVkb0lkU2V0
IHB1YmxpY1BzZXVkb0lkU2V0ID0gcHNldWRvSWRTZXQgJiBQc2V1ZG9JZFNldDo6ZnJvbU1hc2so
UFVCTElDX1BTRVVET0lEX01BU0spOwotICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2Rl
ID09IE1vZGU6OlJlc29sdmluZ1N0eWxlICYmIHB1YmxpY1BzZXVkb0lkU2V0KQotICAgICAgICAg
ICAgY29udGV4dC5lbGVtZW50U3R5bGUtPnNldEhhc1BzZXVkb1N0eWxlcyhwdWJsaWNQc2V1ZG9J
ZFNldCk7CisgICAgICAgIGlmIChjaGVja2luZ0NvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2Rl
OjpSZXNvbHZpbmdTdHlsZSAmJiBwdWJsaWNQc2V1ZG9JZFNldCkKKyAgICAgICAgICAgIGNoZWNr
aW5nQ29udGV4dC5wc2V1ZG9JRFNldCA9IHB1YmxpY1BzZXVkb0lkU2V0OwogCiAgICAgICAgIC8v
IFdoZW4gaWdub3JpbmcgdmlydHVhbCBwc2V1ZG8gZWxlbWVudHMsIHRoZSBjb250ZXh0J3MgcHNl
dWRvIHNob3VsZCBhbHNvIGJlIE5PUFNFVURPIGJ1dCB0aGF0IGRvZXMKICAgICAgICAgLy8gbm90
IGNhdXNlIGEgZmFpbHVyZS4KLSAgICAgICAgcmV0dXJuIGNvbnRleHQucmVzb2x2aW5nTW9kZSA9
PSBNb2RlOjpDb2xsZWN0aW5nUnVsZXNJZ25vcmluZ1ZpcnR1YWxQc2V1ZG9FbGVtZW50cyB8fCBy
ZXN1bHQubWF0Y2hUeXBlID09IE1hdGNoVHlwZTo6RWxlbWVudDsKKyAgICAgICAgcmV0dXJuIGNo
ZWNraW5nQ29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlc0lnbm9y
aW5nVmlydHVhbFBzZXVkb0VsZW1lbnRzIHx8IHJlc3VsdC5tYXRjaFR5cGUgPT0gTWF0Y2hUeXBl
OjpFbGVtZW50OwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIwNSwxMyArMjExLDE0
IEBAIGlubGluZSBzdGF0aWMgYm9vbCBoYXNTY3JvbGxiYXJQc2V1ZG9FbGUKICAgICByZXR1cm4g
ZHluYW1pY1BzZXVkb0lkU2V0LmhhcyhSRVNJWkVSKTsKIH0KIAotc3RhdGljIFNlbGVjdG9yQ2hl
Y2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBjaGVja2luZ0NvbnRleHRGb3JQYXJlbnQo
Y29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0
KQorc3RhdGljIFNlbGVjdG9yQ2hlY2tlcjo6TG9jYWxDb250ZXh0IGxvY2FsQ29udGV4dEZvclBh
cmVudChjb25zdCBTZWxlY3RvckNoZWNrZXI6OkxvY2FsQ29udGV4dCYgY29udGV4dCkKIHsKLSAg
ICBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgdXBkYXRlZENvbnRl
eHQoY29udGV4dCk7CisgICAgU2VsZWN0b3JDaGVja2VyOjpMb2NhbENvbnRleHQgdXBkYXRlZENv
bnRleHQoY29udGV4dCk7CiAgICAgLy8gRGlzYWJsZSA6dmlzaXRlZCBtYXRjaGluZyB3aGVuIHdl
IHNlZSB0aGUgZmlyc3QgbGluay4KICAgICBpZiAoY29udGV4dC5lbGVtZW50LT5pc0xpbmsoKSkK
ICAgICAgICAgdXBkYXRlZENvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9IFZpc2l0ZWRNYXRjaFR5
cGU6OkRpc2FibGVkOwogICAgIHVwZGF0ZWRDb250ZXh0LmVsZW1lbnQgPSBjb250ZXh0LmVsZW1l
bnQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICB1cGRhdGVkQ29udGV4dC5pc01hdGNoRWxlbWVudCA9
IGZhbHNlOwogICAgIHJldHVybiB1cGRhdGVkQ29udGV4dDsKIH0KIApAQCAtMjIxLDEyICsyMjgs
MTIgQEAgc3RhdGljIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0VwogLy8gKiBTZWxl
Y3RvckZhaWxzTG9jYWxseSAgICAgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIHRoZSBlbGVtZW50
IGUKIC8vICogU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZv
ciBlIGFuZCBhbnkgc2libGluZyBvZiBlCiAvLyAqIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5ICAt
IHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBhbmQgYW55IHNpYmxpbmcgb3IgYW5jZXN0b3Igb2Yg
ZQotU2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVj
dXJzaXZlbHkoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCwgUHNldWRv
SWRTZXQmIGR5bmFtaWNQc2V1ZG9JZFNldCwgdW5zaWduZWQmIHNwZWNpZmljaXR5KSBjb25zdAor
U2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVjdXJz
aXZlbHkoQ2hlY2tpbmdDb250ZXh0JiBjaGVja2luZ0NvbnRleHQsIGNvbnN0IExvY2FsQ29udGV4
dCYgY29udGV4dCwgUHNldWRvSWRTZXQmIGR5bmFtaWNQc2V1ZG9JZFNldCwgdW5zaWduZWQmIHNw
ZWNpZmljaXR5KSBjb25zdAogewogICAgIE1hdGNoVHlwZSBtYXRjaFR5cGUgPSBNYXRjaFR5cGU6
OkVsZW1lbnQ7CiAKICAgICAvLyBUaGUgZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1hdGNoLgotICAg
IGlmICghY2hlY2tPbmUoY29udGV4dCwgZHluYW1pY1BzZXVkb0lkU2V0LCBtYXRjaFR5cGUsIHNw
ZWNpZmljaXR5KSkKKyAgICBpZiAoIWNoZWNrT25lKGNoZWNraW5nQ29udGV4dCwgY29udGV4dCwg
ZHluYW1pY1BzZXVkb0lkU2V0LCBtYXRjaFR5cGUsIHNwZWNpZmljaXR5KSkKICAgICAgICAgcmV0
dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0xvY2FsbHkpOwogCiAg
ICAgaWYgKGNvbnRleHQuc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0Vs
ZW1lbnQpIHsKQEAgLTI0Nyw3ICsyNTQsNyBAQCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0
IFNlbGVjdG9yQ2hlCiAgICAgICAgICAgICBpZiAoIWNvbnRleHQucHNldWRvRWxlbWVudEVmZmVj
dGl2ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpT
ZWxlY3RvckZhaWxzQ29tcGxldGVseSk7CiAKLSAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29s
dmluZ01vZGUgPT0gTW9kZTo6UXVlcnlpbmdSdWxlcykKKyAgICAgICAgICAgIGlmIChjaGVja2lu
Z0NvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpRdWVyeWluZ1J1bGVzKQogICAgICAgICAg
ICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21w
bGV0ZWx5KTsKIAogICAgICAgICAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBDU1NTZWxlY3Rvcjo6
cHNldWRvSWQoY29udGV4dC5zZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSk7CkBAIC0yNjUs
NyArMjcyLDcgQEAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdCBTZWxlY3RvckNoZQogICAg
IGlmICghaGlzdG9yeVNlbGVjdG9yKQogICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6Om1hdGNo
ZXMobWF0Y2hUeXBlKTsKIAotICAgIENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgbmV4dENvbnRl
eHQoY29udGV4dCk7CisgICAgTG9jYWxDb250ZXh0IG5leHRDb250ZXh0KGNvbnRleHQpOwogICAg
IG5leHRDb250ZXh0LnNlbGVjdG9yID0gaGlzdG9yeVNlbGVjdG9yOwogCiAgICAgaWYgKHJlbGF0
aW9uICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikgewpAQCAtMjgwLDE3ICsyODcsMTcgQEAg
U2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdCBTZWxlY3RvckNoZQogICAgICAgICBuZXh0Q29u
dGV4dC5wc2V1ZG9JZCA9IE5PUFNFVURPOwogICAgICAgICAvLyBWaXJ0dWFsIHBzZXVkbyBlbGVt
ZW50IGlzIG9ubHkgZWZmZWN0aXZlIGluIHRoZSByaWdodG1vc3QgZnJhZ21lbnQuCiAgICAgICAg
IG5leHRDb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgbmV4
dENvbnRleHQuaXNNYXRjaEVsZW1lbnQgPSBmYWxzZTsKICAgICB9CiAKICAgICBzd2l0Y2ggKHJl
bGF0aW9uKSB7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudDoKLSAgICAgICAgbmV4
dENvbnRleHQgPSBjaGVja2luZ0NvbnRleHRGb3JQYXJlbnQobmV4dENvbnRleHQpOworICAgICAg
ICBuZXh0Q29udGV4dCA9IGxvY2FsQ29udGV4dEZvclBhcmVudChuZXh0Q29udGV4dCk7CiAgICAg
ICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQu
c2VsZWN0b3I7Ci0gICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7Ci0g
ICAgICAgIGZvciAoOyBuZXh0Q29udGV4dC5lbGVtZW50OyBuZXh0Q29udGV4dCA9IGNoZWNraW5n
Q29udGV4dEZvclBhcmVudChuZXh0Q29udGV4dCkpIHsKKyAgICAgICAgZm9yICg7IG5leHRDb250
ZXh0LmVsZW1lbnQ7IG5leHRDb250ZXh0ID0gbG9jYWxDb250ZXh0Rm9yUGFyZW50KG5leHRDb250
ZXh0KSkgewogICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHluYW1pY1BzZXVkbzsKICAg
ICAgICAgICAgIHVuc2lnbmVkIGRlc2NlbmRhbnRzU3BlY2lmaWNpdHkgPSAwOwotICAgICAgICAg
ICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgaWdu
b3JlRHluYW1pY1BzZXVkbywgZGVzY2VuZGFudHNTcGVjaWZpY2l0eSk7CisgICAgICAgICAgICBN
YXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KGNoZWNraW5nQ29udGV4dCwgbmV4
dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIGRlc2NlbmRhbnRzU3BlY2lmaWNpdHkpOwog
ICAgICAgICAgICAgQVNTRVJUKCFuZXh0Q29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZlICYm
ICFpZ25vcmVEeW5hbWljUHNldWRvKTsKIAogICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXRjaCA9
PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzKQpAQCAtMzAzLDE0ICszMTAsMTMgQEAgU2VsZWN0b3JD
aGVja2VyOjpNYXRjaFJlc3VsdCBTZWxlY3RvckNoZQogCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
Q2hpbGQ6CiAgICAgICAgIHsKLSAgICAgICAgICAgIG5leHRDb250ZXh0ID0gY2hlY2tpbmdDb250
ZXh0Rm9yUGFyZW50KG5leHRDb250ZXh0KTsKKyAgICAgICAgICAgIG5leHRDb250ZXh0ID0gbG9j
YWxDb250ZXh0Rm9yUGFyZW50KG5leHRDb250ZXh0KTsKICAgICAgICAgICAgIGlmICghbmV4dENv
bnRleHQuZWxlbWVudCkKICAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxz
KE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7CiAgICAgICAgICAgICBuZXh0Q29udGV4
dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwotICAg
ICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsKICAgICAgICAgICAg
IFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CiAgICAgICAgICAgICB1bnNpZ25lZCBj
aGlsZFNwZWNpZmljaXR5ID0gMDsKLSAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1h
dGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIGNoaWxkU3Bl
Y2lmaWNpdHkpOworICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNp
dmVseShjaGVja2luZ0NvbnRleHQsIG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBj
aGlsZFNwZWNpZmljaXR5KTsKICAgICAgICAgICAgIEFTU0VSVCghbmV4dENvbnRleHQucHNldWRv
RWxlbWVudEVmZmVjdGl2ZSAmJiAhaWdub3JlRHluYW1pY1BzZXVkbyk7CiAKICAgICAgICAgICAg
IGlmIChyZXN1bHQubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykKQEAgLTMyMywyMCAr
MzI5LDE5IEBAIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQgU2VsZWN0b3JDaGUKIAogICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OkRpcmVjdEFkamFjZW50OgogICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQotICAg
ICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC0+c2V0U3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91
c1NpYmxpbmcoKTsKKyAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0
LCAqY29udGV4dC5lbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJs
aW5nKTsKIAogICAgICAgICAgICAgRWxlbWVudCogcHJldmlvdXNFbGVtZW50ID0gY29udGV4dC5l
bGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7CiAgICAgICAgICAgICBpZiAoIXByZXZp
b3VzRWxlbWVudCkKICAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1h
dGNoOjpTZWxlY3RvckZhaWxzQWxsU2libGluZ3MpOwotICAgICAgICAgICAgaWYgKGNvbnRleHQu
cmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgICAgICAgICBw
cmV2aW91c0VsZW1lbnQtPnNldEFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpOworCisg
ICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnByZXZpb3VzRWxl
bWVudCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5nKTsKKwogICAgICAgICAgICAg
bmV4dENvbnRleHQuZWxlbWVudCA9IHByZXZpb3VzRWxlbWVudDsKICAgICAgICAgICAgIG5leHRD
b250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7
Ci0gICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSBudWxscHRyOwogICAgICAg
ICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHluYW1pY1BzZXVkbzsKICAgICAgICAgICAgIHVuc2ln
bmVkIGFkamFjZW50U3BlY2lmaWNpdHkgPSAwOwotICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVz
dWx0ID0gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywg
YWRqYWNlbnRTcGVjaWZpY2l0eSk7CisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBt
YXRjaFJlY3Vyc2l2ZWx5KGNoZWNraW5nQ29udGV4dCwgbmV4dENvbnRleHQsIGlnbm9yZUR5bmFt
aWNQc2V1ZG8sIGFkamFjZW50U3BlY2lmaWNpdHkpOwogICAgICAgICAgICAgQVNTRVJUKCFuZXh0
Q29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZlICYmICFpZ25vcmVEeW5hbWljUHNldWRvKTsK
IAogICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVz
KQpAQCAtMzQ1LDE4ICszNTAsMTYgQEAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdCBTZWxl
Y3RvckNoZQogICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0Ojp1cGRhdGVXaXRoTWF0Y2hU
eXBlKHJlc3VsdCwgbWF0Y2hUeXBlKTsKICAgICAgICAgfQogICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OkluZGlyZWN0QWRqYWNlbnQ6Ci0gICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0g
TW9kZTo6UmVzb2x2aW5nU3R5bGUpCi0gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQtPnNldFN0
eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgIGFkZFN0eWxlUmVsYXRp
b24oY2hlY2tpbmdDb250ZXh0LCAqY29udGV4dC5lbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpBZmZl
Y3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsKKwogICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50ID0g
Y29udGV4dC5lbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7CiAgICAgICAgIG5leHRD
b250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7
Ci0gICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7CiAgICAgICAgIGZv
ciAoOyBuZXh0Q29udGV4dC5lbGVtZW50OyBuZXh0Q29udGV4dC5lbGVtZW50ID0gbmV4dENvbnRl
eHQuZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7Ci0gICAgICAgICAgICBpZiAo
Y29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQotICAgICAgICAg
ICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnQtPnNldEFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRT
dHlsZSgpOworICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpu
ZXh0Q29udGV4dC5lbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpBZmZlY3RzTmV4dFNpYmxpbmcpOwog
CiAgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvOwogICAgICAgICAg
ICAgdW5zaWduZWQgaW5kaXJlY3RBZGphY2VudFNwZWNpZmljaXR5ID0gMDsKLSAgICAgICAgICAg
IE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9y
ZUR5bmFtaWNQc2V1ZG8sIGluZGlyZWN0QWRqYWNlbnRTcGVjaWZpY2l0eSk7CisgICAgICAgICAg
ICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KGNoZWNraW5nQ29udGV4dCwg
bmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIGluZGlyZWN0QWRqYWNlbnRTcGVjaWZp
Y2l0eSk7CiAgICAgICAgICAgICBBU1NFUlQoIW5leHRDb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZl
Y3RpdmUgJiYgIWlnbm9yZUR5bmFtaWNQc2V1ZG8pOwogCiAgICAgICAgICAgICBpZiAocmVzdWx0
Lm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMpCkBAIC0zNzQsMTMgKzM3NywxMyBAQCBT
ZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0IFNlbGVjdG9yQ2hlCiAgICAgICAgICAgICAvLyB0
byBmb2xsb3cgdGhlIHBzZXVkbyBlbGVtZW50cy4KICAgICAgICAgICAgIG5leHRDb250ZXh0Lmhh
c1Njcm9sbGJhclBzZXVkbyA9IGhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoZHluYW1pY1BzZXVk
b0lkU2V0KTsKICAgICAgICAgICAgIG5leHRDb250ZXh0Lmhhc1NlbGVjdGlvblBzZXVkbyA9IGR5
bmFtaWNQc2V1ZG9JZFNldC5oYXMoU0VMRUNUSU9OKTsKLSAgICAgICAgICAgIGlmICgoY29udGV4
dC5lbGVtZW50U3R5bGUgfHwgY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OkNvbGxlY3Rp
bmdSdWxlcykgJiYgZHluYW1pY1BzZXVkb0lkU2V0CisgICAgICAgICAgICBpZiAoKGNvbnRleHQu
aXNNYXRjaEVsZW1lbnQgfHwgY2hlY2tpbmdDb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6
Q29sbGVjdGluZ1J1bGVzKSAmJiBkeW5hbWljUHNldWRvSWRTZXQKICAgICAgICAgICAgICAgICAm
JiAhbmV4dENvbnRleHQuaGFzU2VsZWN0aW9uUHNldWRvCiAgICAgICAgICAgICAgICAgJiYgIShu
ZXh0Q29udGV4dC5oYXNTY3JvbGxiYXJQc2V1ZG8gJiYgbmV4dENvbnRleHQuc2VsZWN0b3ItPm1h
dGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7CiAK
ICAgICAgICAgICAgIHVuc2lnbmVkIHN1YnNlbGVjdG9yU3BlY2lmaWNpdHkgPSAwOwotICAgICAg
ICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwg
ZHluYW1pY1BzZXVkb0lkU2V0LCBzdWJzZWxlY3RvclNwZWNpZmljaXR5KTsKKyAgICAgICAgICAg
IE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkoY2hlY2tpbmdDb250ZXh0LCBu
ZXh0Q29udGV4dCwgZHluYW1pY1BzZXVkb0lkU2V0LCBzdWJzZWxlY3RvclNwZWNpZmljaXR5KTsK
IAogICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVz
KQogICAgICAgICAgICAgICAgIHNwZWNpZmljaXR5ID0gQ1NTU2VsZWN0b3I6OmFkZFNwZWNpZmlj
aXRpZXMoc3BlY2lmaWNpdHksIHN1YnNlbGVjdG9yU3BlY2lmaWNpdHkpOwpAQCAtMzk0LDEwICsz
OTcsOSBAQCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0IFNlbGVjdG9yQ2hlCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0Nv
bXBsZXRlbHkpOwogICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9IHNoYWRvd0hvc3RO
b2RlOwogICAgICAgICAgICAgbmV4dENvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQg
PSBuZXh0Q29udGV4dC5zZWxlY3RvcjsKLSAgICAgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRT
dHlsZSA9IG51bGxwdHI7CiAgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNl
dWRvOwogICAgICAgICAgICAgdW5zaWduZWQgc2hhZG93RGVzY2VuZGFudFNwZWNpZmljaXR5ID0g
MDsKLSAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkobmV4
dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIHNoYWRvd0Rlc2NlbmRhbnRTcGVjaWZpY2l0
eSk7CisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KGNo
ZWNraW5nQ29udGV4dCwgbmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIHNoYWRvd0Rl
c2NlbmRhbnRTcGVjaWZpY2l0eSk7CiAKICAgICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2ggPT0g
TWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgICAgICAgICBzcGVjaWZpY2l0eSA9IENT
U1NlbGVjdG9yOjphZGRTcGVjaWZpY2l0aWVzKHNwZWNpZmljaXR5LCBzaGFkb3dEZXNjZW5kYW50
U3BlY2lmaWNpdHkpOwpAQCAtNTA0LDcgKzUwNiw3IEBAIHN0YXRpYyBib29sIGF0dHJpYnV0ZVZh
bHVlTWF0Y2hlcyhjb25zdCAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgYW55
QXR0cmlidXRlTWF0Y2hlcyhFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2Vs
ZWN0b3IsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHNlbGVjdG9yQXR0ciwgYm9vbCBjYXNlU2Vuc2l0
aXZlKQorc3RhdGljIGJvb2wgYW55QXR0cmlidXRlTWF0Y2hlcyhjb25zdCBFbGVtZW50KiBlbGVt
ZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHNl
bGVjdG9yQXR0ciwgYm9vbCBjYXNlU2Vuc2l0aXZlKQogewogICAgIEFTU0VSVChlbGVtZW50LT5o
YXNBdHRyaWJ1dGVzV2l0aG91dFVwZGF0ZSgpKTsKICAgICBmb3IgKGNvbnN0IEF0dHJpYnV0ZSYg
YXR0cmlidXRlIDogZWxlbWVudC0+YXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKQEAgLTUxOCw3ICs1
MjAsNyBAQCBzdGF0aWMgYm9vbCBhbnlBdHRyaWJ1dGVNYXRjaGVzKEVsZW1lbnQqCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBjYW5NYXRjaEhvdmVyT3JBY3RpdmVJblF1aXJr
c01vZGUoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBj
b250ZXh0KQorc3RhdGljIGJvb2wgY2FuTWF0Y2hIb3Zlck9yQWN0aXZlSW5RdWlya3NNb2RlKGNv
bnN0IFNlbGVjdG9yQ2hlY2tlcjo6TG9jYWxDb250ZXh0JiBjb250ZXh0KQogewogICAgIC8vIEZv
ciBxdWlya3MgbW9kZSwgZm9sbG93IHRoaXM6IGh0dHA6Ly9xdWlya3Muc3BlYy53aGF0d2cub3Jn
LyN0aGUtOmFjdGl2ZS1hbmQtOmhvdmVyLXF1aXJrCiAgICAgLy8gSW4gcXVpcmtzIG1vZGUsIGEg
Y29tcG91bmQgc2VsZWN0b3IgJ3NlbGVjdG9yJyB0aGF0IG1hdGNoZXMgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIG11c3Qgbm90IG1hdGNoIGVsZW1lbnRzIHRoYXQgd291bGQgbm90IGFsc28gbWF0
Y2ggdGhlICc6YW55LWxpbmsnIHNlbGVjdG9yLgpAQCAtNTg4LDkgKzU5MCw5IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCB0YWdNYXRjaGVzKGNvbnN0IEVsZW0KICAgICByZXR1cm4gbmFtZXNwYWNlVVJJ
ID09IHN0YXJBdG9tIHx8IG5hbWVzcGFjZVVSSSA9PSBlbGVtZW50Lm5hbWVzcGFjZVVSSSgpOwog
fQogCi1ib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0
V2l0aFN0YXR1cyYgY29udGV4dCwgUHNldWRvSWRTZXQmIGR5bmFtaWNQc2V1ZG9JZFNldCwgTWF0
Y2hUeXBlJiBtYXRjaFR5cGUsIHVuc2lnbmVkJiBzcGVjaWZpY2l0eSkgY29uc3QKK2Jvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZShDaGVja2luZ0NvbnRleHQmIGNoZWNraW5nQ29udGV4dCwg
Y29uc3QgTG9jYWxDb250ZXh0JiBjb250ZXh0LCBQc2V1ZG9JZFNldCYgZHluYW1pY1BzZXVkb0lk
U2V0LCBNYXRjaFR5cGUmIG1hdGNoVHlwZSwgdW5zaWduZWQmIHNwZWNpZmljaXR5KSBjb25zdAog
ewotICAgIEVsZW1lbnQqIGNvbnN0ICYgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDsKKyAgICBj
b25zdCBFbGVtZW50KiBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50OwogICAgIGNvbnN0IENTU1Nl
bGVjdG9yKiBjb25zdCAmIHNlbGVjdG9yID0gY29udGV4dC5zZWxlY3RvcjsKICAgICBBU1NFUlQo
ZWxlbWVudCk7CiAgICAgQVNTRVJUKHNlbGVjdG9yKTsKQEAgLTYyNiw3ICs2MjgsNyBAQCBib29s
IFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlCiAgICAgICAgICAgICBjb25zdCBD
U1NTZWxlY3Rvckxpc3QqIHNlbGVjdG9yTGlzdCA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKTsK
IAogICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc3Vic2VsZWN0b3IgPSBzZWxl
Y3Rvckxpc3QtPmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVjdG9y
TGlzdDo6bmV4dChzdWJzZWxlY3RvcikpIHsKLSAgICAgICAgICAgICAgICBDaGVja2luZ0NvbnRl
eHRXaXRoU3RhdHVzIHN1YmNvbnRleHQoY29udGV4dCk7CisgICAgICAgICAgICAgICAgTG9jYWxD
b250ZXh0IHN1YmNvbnRleHQoY29udGV4dCk7CiAgICAgICAgICAgICAgICAgc3ViY29udGV4dC5p
bkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7CiAgICAgICAgICAgICAgICAgc3ViY29udGV4
dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgc3ViY29u
dGV4dC5zZWxlY3RvciA9IHN1YnNlbGVjdG9yOwpAQCAtNjM0LDcgKzYzNiw3IEBAIGJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGUKICAgICAgICAgICAgICAgICBQc2V1ZG9J
ZFNldCBpZ25vcmVEeW5hbWljUHNldWRvOwogCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaWdu
b3JlZFNwZWNpZmljaXR5OwotICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1
YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIGlnbm9yZWRTcGVjaWZpY2l0eSkubWF0Y2gg
PT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykgeworICAgICAgICAgICAgICAgIGlmIChtYXRjaFJl
Y3Vyc2l2ZWx5KGNoZWNraW5nQ29udGV4dCwgc3ViY29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVk
bywgaWdub3JlZFNwZWNpZmljaXR5KS5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzKSB7
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaWdub3JlRHluYW1pY1BzZXVkbyk7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CkBAIC02NDMs
NyArNjQ1LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZQogICAg
ICAgICB9IGVsc2UgaWYgKGNvbnRleHQuaGFzU2Nyb2xsYmFyUHNldWRvKSB7CiAgICAgICAgICAg
ICAvLyBDU1Mgc2Nyb2xsYmFycyBtYXRjaCBhIHNwZWNpZmljIHN1YnNldCBvZiBwc2V1ZG8gY2xh
c3NlcywgYW5kIHRoZXkgaGF2ZSBzcGVjaWFsaXplZCBydWxlcyBmb3IgZWFjaAogICAgICAgICAg
ICAgLy8gKHNpbmNlIHRoZXJlIGFyZSBubyBlbGVtZW50cyBpbnZvbHZlZCBleGNlcHQgd2l0aCB3
aW5kb3ctaW5hY3RpdmUpLgotICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2Nyb2xsYmFyUHNldWRv
Q2xhc3MoY29udGV4dCwgc2VsZWN0b3IpOworICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2Nyb2xs
YmFyUHNldWRvQ2xhc3MoY2hlY2tpbmdDb250ZXh0LCAqY29udGV4dC5lbGVtZW50LCBzZWxlY3Rv
cik7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBOb3JtYWwgZWxlbWVudCBwc2V1ZG8gY2xhc3Mg
Y2hlY2tpbmcuCkBAIC02NjcsNTMgKzY2OSw0MSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmUoY29uc3QgQ2hlCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQu
cmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewotICAgICAgICAgICAgICAg
ICAgICBlbGVtZW50LT5zZXRTdHlsZUFmZmVjdGVkQnlFbXB0eSgpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC5lbGVtZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LmVsZW1lbnRTdHlsZS0+c2V0RW1wdHlTdGF0ZShyZXN1bHQpOwotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwg
KmNvbnRleHQuZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeUVtcHR5LCByZXN1bHQp
OworCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NGaXJzdENoaWxkOgogICAgICAgICAgICAg
Ly8gZmlyc3QtY2hpbGQgbWF0Y2hlcyB0aGUgZmlyc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50
Ci0gICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVu
dEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gaXNGaXJzdENoaWxk
RWxlbWVudCgqZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5n
TW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewotICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVt
ZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICBw
YXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMoKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiBjaGlsZFN0eWxlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgY2hpbGRTdHlsZS0+c2V0Rmlyc3RDaGlsZFN0YXRlKCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICBpZiAo
Y29uc3QgRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIGJvb2wgaXNGaXJzdENoaWxkID0gaXNGaXJzdENoaWxkRWxlbWVu
dCgqZWxlbWVudCk7CisgICAgICAgICAgICAgICAgaWYgKGlzRmlyc3RDaGlsZCkKKyAgICAgICAg
ICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICplbGVtZW50LCBT
dHlsZVJlbGF0aW9uOjpGaXJzdENoaWxkKTsKKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0
aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkNoaWxk
cmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGlz
Rmlyc3RDaGlsZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0ZpcnN0T2ZUeXBlOgogICAgICAgICAgICAgLy8g
Zmlyc3Qtb2YtdHlwZSBtYXRjaGVzIHRoZSBmaXJzdCBlbGVtZW50IG9mIGl0cyB0eXBlCiAgICAg
ICAgICAgICBpZiAoZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAg
ICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0U3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxp
bmcoKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBpc0ZpcnN0T2ZUeXBlKCplbGVtZW50LCBl
bGVtZW50LT50YWdRTmFtZSgpLCBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2
aW5nU3R5bGUpOworICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250
ZXh0LCAqZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGlzRmlyc3RPZlR5cGUoY2hlY2tpbmdDb250ZXh0LCAq
ZWxlbWVudCwgZWxlbWVudC0+dGFnUU5hbWUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NMYXN0Q2hpbGQ6
CiAgICAgICAgICAgICAvLyBsYXN0LWNoaWxkIG1hdGNoZXMgdGhlIGxhc3QgY2hpbGQgdGhhdCBp
cyBhbiBlbGVtZW50Ci0gICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVs
ZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0g
cGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpICYmIGlzTGFzdENoaWxk
RWxlbWVudCgqZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5n
TW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewotICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVt
ZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICBw
YXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcygpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIGNoaWxkU3R5bGUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjaGlsZFN0eWxlLT5zZXRMYXN0Q2hpbGRTdGF0ZSgpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgaWYgKGNv
bnN0IEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsK
KyAgICAgICAgICAgICAgICBib29sIGlzTGFzdENoaWxkID0gcGFyZW50RWxlbWVudC0+aXNGaW5p
c2hlZFBhcnNpbmdDaGlsZHJlbigpICYmIGlzTGFzdENoaWxkRWxlbWVudCgqZWxlbWVudCk7Cisg
ICAgICAgICAgICAgICAgaWYgKGlzTGFzdENoaWxkKQorICAgICAgICAgICAgICAgICAgICBhZGRT
dHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKmVsZW1lbnQsIFN0eWxlUmVsYXRpb246Okxh
c3RDaGlsZCk7CisgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRl
eHQsICpwYXJlbnRFbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlMYXN0
Q2hpbGRSdWxlcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGlzTGFzdENoaWxkOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0NsYXNzTGFzdE9mVHlwZToKICAgICAgICAgICAgIC8vIGxhc3Qtb2YtdHlwZSBtYXRjaGVz
IHRoZSBsYXN0IGVsZW1lbnQgb2YgaXRzIHR5cGUKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBw
YXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAg
ICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFj
a3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9u
KGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkNoaWxkcmVu
QWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsKICAgICAgICAgICAgICAgICBpZiAo
IXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIHJldHVybiBpc0xhc3RPZlR5
cGUoKmVsZW1lbnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkpOwpAQCAtNzIzLDI4ICs3MTMsMjMgQEAg
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZQogICAgICAgICAgICAgaWYg
KEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAg
ICAgICAgICAgICAgICBib29sIGZpcnN0Q2hpbGQgPSBpc0ZpcnN0Q2hpbGRFbGVtZW50KCplbGVt
ZW50KTsKICAgICAgICAgICAgICAgICBib29sIG9ubHlDaGlsZCA9IGZpcnN0Q2hpbGQgJiYgcGFy
ZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpICYmIGlzTGFzdENoaWxkRWxl
bWVudCgqZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9k
ZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJT
dHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50
U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICBwYXJl
bnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMoKTsKLSAgICAg
ICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENo
aWxkUnVsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQgJiYgY2hpbGRT
dHlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkU3R5bGUtPnNldEZpcnN0Q2hpbGRT
dGF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAob25seUNoaWxkICYmIGNoaWxkU3R5bGUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFN0eWxlLT5zZXRMYXN0Q2hpbGRTdGF0ZSgp
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNo
ZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZm
ZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcyk7CisgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlv
bihjaGVja2luZ0NvbnRleHQsICpwYXJlbnRFbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpDaGlsZHJl
bkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcyk7CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2hp
bGQpCisgICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0
LCAqZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6Rmlyc3RDaGlsZCk7CisgICAgICAgICAgICAgICAg
aWYgKG9ubHlDaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVj
a2luZ0NvbnRleHQsICplbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpMYXN0Q2hpbGQpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBvbmx5Q2hpbGQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NPbmx5T2ZUeXBlOgog
ICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2VsZWN0b3IgaXMgdmVyeSBzbG93LgogICAgICAg
ICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50
KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6
OlJlc29sdmluZ1N0eWxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQtPnNldFN0eWxl
SXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmVu
dEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7
Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hl
Y2tpbmdDb250ZXh0LCAqZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3Vz
U2libGluZyk7CisgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRl
eHQsICpwYXJlbnRFbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlCYWNr
d2FyZFBvc2l0aW9uYWxSdWxlcyk7CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50
LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaXNGaXJzdE9mVHlwZSgqZWxlbWVudCwg
ZWxlbWVudC0+dGFnUU5hbWUoKSwgY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29s
dmluZ1N0eWxlKSAmJiBpc0xhc3RPZlR5cGUoKmVsZW1lbnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkp
OworICAgICAgICAgICAgICAgIHJldHVybiBpc0ZpcnN0T2ZUeXBlKGNoZWNraW5nQ29udGV4dCwg
KmVsZW1lbnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkpICYmIGlzTGFzdE9mVHlwZSgqZWxlbWVudCwg
ZWxlbWVudC0+dGFnUU5hbWUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NNYXRjaGVzOgpAQCAtNzU0LDE0
ICs3MzksMTQgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZQogCiAg
ICAgICAgICAgICAgICAgTWF0Y2hUeXBlIGxvY2FsTWF0Y2hUeXBlID0gTWF0Y2hUeXBlOjpWaXJ0
dWFsUHNldWRvRWxlbWVudE9ubHk7CiAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxl
Y3Rvciogc3Vic2VsZWN0b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1
YnNlbGVjdG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJzZWxlY3Rv
cikpIHsKLSAgICAgICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJj
b250ZXh0KGNvbnRleHQpOworICAgICAgICAgICAgICAgICAgICBMb2NhbENvbnRleHQgc3ViY29u
dGV4dChjb250ZXh0KTsKICAgICAgICAgICAgICAgICAgICAgc3ViY29udGV4dC5pbkZ1bmN0aW9u
YWxQc2V1ZG9DbGFzcyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHN1YmNvbnRleHQucHNl
dWRvRWxlbWVudEVmZmVjdGl2ZSA9IGNvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZTsKICAg
ICAgICAgICAgICAgICAgICAgc3ViY29udGV4dC5zZWxlY3RvciA9IHN1YnNlbGVjdG9yOwogICAg
ICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0g
c3Vic2VsZWN0b3I7CiAgICAgICAgICAgICAgICAgICAgIFBzZXVkb0lkU2V0IGxvY2FsRHluYW1p
Y1BzZXVkb0lkU2V0OwogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb2NhbFNwZWNpZmlj
aXR5ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hS
ZWN1cnNpdmVseShzdWJjb250ZXh0LCBsb2NhbER5bmFtaWNQc2V1ZG9JZFNldCwgbG9jYWxTcGVj
aWZpY2l0eSk7CisgICAgICAgICAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNo
UmVjdXJzaXZlbHkoY2hlY2tpbmdDb250ZXh0LCBzdWJjb250ZXh0LCBsb2NhbER5bmFtaWNQc2V1
ZG9JZFNldCwgbG9jYWxTcGVjaWZpY2l0eSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykgewogICAgICAgICAgICAgICAgICAg
ICAgICAgbWF4U3BlY2lmaWNpdHkgPSBzdGQ6Om1heChtYXhTcGVjaWZpY2l0eSwgbG9jYWxTcGVj
aWZpY2l0eSk7CiAKQEAgLTc4MCwxMCArNzY1LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrT25lKGNvbnN0IENoZQogICAgICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzc1BsYWNlaG9sZGVyU2hvd246CiAgICAgICAgICAgICBpZiAoaXM8SFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewotICAgICAgICAgICAgICAgIGlmIChj
b250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKFJlbmRlclN0eWxlKiBzdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxl
ID8gY29udGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldFVuaXF1ZSgpOwotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKmVsZW1l
bnQsIFN0eWxlUmVsYXRpb246OlVuaXF1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRvd25j
YXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkuaXNQbGFjZWhvbGRlclZp
c2libGUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc5
MywyOSArNzc1LDI2IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGUK
ICAgICAgICAgICAgIGlmIChlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAg
ICAgICBpZiAoY29uc3QgQ1NTU2VsZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+
c2VsZWN0b3JMaXN0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2VsZWN0b3JM
aXN0U3BlY2lmaWNpdHk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFNlbGVjdG9yTGlz
dChjb250ZXh0LCAqZWxlbWVudCwgKnNlbGVjdG9yTGlzdCwgc2VsZWN0b3JMaXN0U3BlY2lmaWNp
dHkpKQorICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hTZWxlY3Rvckxpc3QoY2hlY2tpbmdD
b250ZXh0LCBjb250ZXh0LCAqZWxlbWVudCwgKnNlbGVjdG9yTGlzdCwgc2VsZWN0b3JMaXN0U3Bl
Y2lmaWNpdHkpKQogICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNpdHkgPSBDU1NTZWxl
Y3Rvcjo6YWRkU3BlY2lmaWNpdGllcyhzcGVjaWZpY2l0eSwgc2VsZWN0b3JMaXN0U3BlY2lmaWNp
dHkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKGNv
bnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgICAg
ICAgICAgICAgZWxlbWVudC0+c2V0U3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoKTsK
KyAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKmVsZW1l
bnQsIFN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcpOwogCiAgICAgICAg
ICAgICAgICAgaW50IGNvdW50ID0gMTsKICAgICAgICAgICAgICAgICBpZiAoY29uc3QgQ1NTU2Vs
ZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgZm9yIChFbGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNh
bDo6cHJldmlvdXNTaWJsaW5nKCplbGVtZW50KTsgc2libGluZzsgc2libGluZyA9IEVsZW1lbnRU
cmF2ZXJzYWw6OnByZXZpb3VzU2libGluZygqc2libGluZykpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2libGluZy0+c2V0QWZmZWN0c05leHRTaWJs
aW5nRWxlbWVudFN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0
aW9uKGNoZWNraW5nQ29udGV4dCwgKnNpYmxpbmcsIFN0eWxlUmVsYXRpb246OkFmZmVjdHNOZXh0
U2libGluZyk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlnbm9yZWRTcGVj
aWZpY2l0eTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFNlbGVjdG9yTGlzdChj
b250ZXh0LCAqc2libGluZywgKnNlbGVjdG9yTGlzdCwgaWdub3JlZFNwZWNpZmljaXR5KSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFNlbGVjdG9yTGlzdChjaGVja2luZ0NvbnRl
eHQsIGNvbnRleHQsICpzaWJsaW5nLCAqc2VsZWN0b3JMaXN0LCBpZ25vcmVkU3BlY2lmaWNpdHkp
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjb3Vu
dCArPSBjb3VudEVsZW1lbnRzQmVmb3JlKCplbGVtZW50LCBjb250ZXh0LnJlc29sdmluZ01vZGUg
PT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQotICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbWVudC0+c2V0Q2hpbGRJbmRleChjb3VudCk7CisgICAgICAgICAgICAgICAg
ICAgIGNvdW50ICs9IGNvdW50RWxlbWVudHNCZWZvcmUoY2hlY2tpbmdDb250ZXh0LCAqZWxlbWVu
dCk7CisgICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0
LCAqZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6TnRoQ2hpbGRJbmRleCwgY291bnQpOwogICAgICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+bWF0Y2hOdGgoY291
bnQpKQpAQCAtODI3LDEwICs4MDYsOSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUo
Y29uc3QgQ2hlCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGlmIChlbGVt
ZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZXNv
bHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQotICAgICAgICAgICAgICAgICAgICBl
bGVtZW50LT5zZXRTdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpOworICAgICAgICAg
ICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqZWxlbWVudCwgU3R5bGVS
ZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyk7CiAKLSAgICAgICAgICAgICAgICBp
bnQgY291bnQgPSAxICsgY291bnRFbGVtZW50c09mVHlwZUJlZm9yZSgqZWxlbWVudCwgZWxlbWVu
dC0+dGFnUU5hbWUoKSwgY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0
eWxlKTsKKyAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxICsgY291bnRFbGVtZW50c09mVHlw
ZUJlZm9yZShjaGVja2luZ0NvbnRleHQsICplbGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKTsK
ICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3ItPm1hdGNoTnRoKGNvdW50KSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CkBAIC04NDEsMTcgKzgxOSwx
NCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlCiAgICAgICAgICAg
ICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkg
ewogICAgICAgICAgICAgICAgIGlmIChjb25zdCBDU1NTZWxlY3Rvckxpc3QqIHNlbGVjdG9yTGlz
dCA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKSkgewogICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBzZWxlY3Rvckxpc3RTcGVjaWZpY2l0eTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1h
dGNoU2VsZWN0b3JMaXN0KGNvbnRleHQsICplbGVtZW50LCAqc2VsZWN0b3JMaXN0LCBzZWxlY3Rv
ckxpc3RTcGVjaWZpY2l0eSkpCisgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFNlbGVjdG9y
TGlzdChjaGVja2luZ0NvbnRleHQsIGNvbnRleHQsICplbGVtZW50LCAqc2VsZWN0b3JMaXN0LCBz
ZWxlY3Rvckxpc3RTcGVjaWZpY2l0eSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZp
Y2l0eSA9IENTU1NlbGVjdG9yOjphZGRTcGVjaWZpY2l0aWVzKHNwZWNpZmljaXR5LCBzZWxlY3Rv
ckxpc3RTcGVjaWZpY2l0eSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0
eUJhc2VkQmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1
bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAg
ICAgICAgICAgICAgcGFyZW50RWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQ
b3NpdGlvbmFsUnVsZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihj
aGVja2luZ0NvbnRleHQsICpwYXJlbnRFbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFm
ZmVjdGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOworICAgICAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNr
aW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0
ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsKIAogICAgICAgICAgICAgICAgIGlmICghcGFy
ZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC04NjAsNyArODM1LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNr
ZXI6OmNoZWNrT25lKGNvbnN0IENoZQogICAgICAgICAgICAgICAgIGlmIChjb25zdCBDU1NTZWxl
Y3Rvckxpc3QqIHNlbGVjdG9yTGlzdCA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKSkgewogICAg
ICAgICAgICAgICAgICAgICBmb3IgKEVsZW1lbnQqIHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2Fs
OjpuZXh0U2libGluZygqZWxlbWVudCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBFbGVtZW50VHJhdmVy
c2FsOjpuZXh0U2libGluZygqc2libGluZykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGlnbm9yZWRTcGVjaWZpY2l0eTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
YXRjaFNlbGVjdG9yTGlzdChjb250ZXh0LCAqc2libGluZywgKnNlbGVjdG9yTGlzdCwgaWdub3Jl
ZFNwZWNpZmljaXR5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFNlbGVjdG9y
TGlzdChjaGVja2luZ0NvbnRleHQsIGNvbnRleHQsICpzaWJsaW5nLCAqc2VsZWN0b3JMaXN0LCBp
Z25vcmVkU3BlY2lmaWNpdHkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrY291bnQ7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UKQEAgLTg3NCw4
ICs4NDksOCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlCiAgICAg
ICAgICAgICBpZiAoIXNlbGVjdG9yLT5wYXJzZU50aCgpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJl
bnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2Rl
ID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQotICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVt
ZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOworICAg
ICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqcGFyZW50RWxl
bWVudCwgU3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFs
UnVsZXMpOworCiAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVk
UGFyc2luZ0NoaWxkcmVuKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApA
QCAtODkwLDE0ICs4NjUsMTQgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0
IENoZQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzQW55OgogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENoZWNraW5nQ29udGV4
dFdpdGhTdGF0dXMgc3ViQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBMb2NhbENv
bnRleHQgc3ViQ29udGV4dChjb250ZXh0KTsKICAgICAgICAgICAgICAgICBzdWJDb250ZXh0Lmlu
RnVuY3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBzdWJDb250ZXh0
LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBmb3IgKHN1
YkNvbnRleHQuc2VsZWN0b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1
YkNvbnRleHQuc2VsZWN0b3I7IHN1YkNvbnRleHQuc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6
Om5leHQoc3ViQ29udGV4dC5zZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICAgICAgc3ViQ29u
dGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IHN1YkNvbnRleHQuc2VsZWN0b3I7CiAg
ICAgICAgICAgICAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CiAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZ29yZWRTcGVjaWZpY2l0eSA9IDA7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGlnbm9yZUR5bmFt
aWNQc2V1ZG8sIGluZ29yZWRTcGVjaWZpY2l0eSkubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0
Y2hlcykKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoY2hlY2tpbmdD
b250ZXh0LCBzdWJDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBpbmdvcmVkU3BlY2lmaWNp
dHkpLm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC05
MTYsMTIgKzg5MSw4IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGUK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gZWxlbWVu
dC0+aXNMaW5rKCkgJiYgY29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID09IFZpc2l0ZWRNYXRjaFR5
cGU6OkVuYWJsZWQ7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRHJhZzoK
LSAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5n
U3R5bGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5lbGVtZW50U3R5bGUpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5RHJhZygp
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0
Q2hpbGRyZW5BZmZlY3RlZEJ5RHJhZygpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgYWRk
U3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICplbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpB
ZmZlY3RlZEJ5RHJhZyk7CisKICAgICAgICAgICAgIGlmIChlbGVtZW50LT5yZW5kZXJlcigpICYm
IGVsZW1lbnQtPnJlbmRlcmVyKCktPmlzRHJhZ2dpbmcoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTI5LDI1ICs5MDAsMTcgQEAgYm9vbCBT
ZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZQogICAgICAgICAgICAgcmV0dXJuIG1h
dGNoZXNGb2N1c1BzZXVkb0NsYXNzKGVsZW1lbnQpOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzc0hvdmVyOgogICAgICAgICAgICAgaWYgKG1fc3RyaWN0UGFyc2luZyB8fCBl
bGVtZW50LT5pc0xpbmsoKSB8fCBjYW5NYXRjaEhvdmVyT3JBY3RpdmVJblF1aXJrc01vZGUoY29u
dGV4dCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1v
ZGU6OlJlc29sdmluZ1N0eWxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVs
ZW1lbnRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxl
LT5zZXRBZmZlY3RlZEJ5SG92ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5SG92ZXIoKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhvdmVyZWQo
KSB8fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoKmVsZW1lbnQs
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hvdmVyKSkKKyAgICAgICAgICAgICAgICBhZGRTdHls
ZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKmVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkFmZmVj
dGVkQnlIb3Zlcik7CisKKyAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC0+aG92ZXJlZCgpIHx8
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShjb25zdF9jYXN0PEVs
ZW1lbnQmPigqZWxlbWVudCksIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hvdmVyKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBY3RpdmU6CiAgICAg
ICAgICAgICBpZiAobV9zdHJpY3RQYXJzaW5nIHx8IGVsZW1lbnQtPmlzTGluaygpIHx8IGNhbk1h
dGNoSG92ZXJPckFjdGl2ZUluUXVpcmtzTW9kZShjb250ZXh0KSkgewotICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudFN0eWxlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC5lbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlBY3RpdmUoKTsK
LSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVu
dC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QWN0aXZlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmIChlbGVtZW50LT5hY3RpdmUoKSB8fCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmZvcmNlUHNldWRvU3RhdGUoKmVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
c0FjdGl2ZSkpCisgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRl
eHQsICplbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5QWN0aXZlKTsKKworICAgICAg
ICAgICAgICAgIGlmIChlbGVtZW50LT5hY3RpdmUoKSB8fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmZvcmNlUHNldWRvU3RhdGUoY29uc3RfY2FzdDxFbGVtZW50Jj4oKmVsZW1lbnQpLCBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NBY3RpdmUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTAwNyw3ICs5NzAs
NyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlCiAKICAgICAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NTY29wZToKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBjb25zdCBOb2RlKiBjb250ZXh0dWFsUmVmZXJlbmNlTm9kZSA9ICFjb250ZXh0
LnNjb3BlID8gZWxlbWVudC0+ZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKSA6IGNvbnRleHQu
c2NvcGU7CisgICAgICAgICAgICAgICAgY29uc3QgTm9kZSogY29udGV4dHVhbFJlZmVyZW5jZU5v
ZGUgPSAhY2hlY2tpbmdDb250ZXh0LnNjb3BlID8gZWxlbWVudC0+ZG9jdW1lbnQoKS5kb2N1bWVu
dEVsZW1lbnQoKSA6IGNoZWNraW5nQ29udGV4dC5zY29wZTsKICAgICAgICAgICAgICAgICBpZiAo
ZWxlbWVudCA9PSBjb250ZXh0dWFsUmVmZXJlbmNlTm9kZSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDUwLDcgKzEwMTMsNyBA
QCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlCiAgICAgfQogI2lmIEVO
QUJMRShWSURFT19UUkFDSykKICAgICBpZiAoc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0
b3I6OlBzZXVkb0VsZW1lbnQgJiYgc2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkgPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRDdWUpIHsKLSAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0
aFN0YXR1cyBzdWJDb250ZXh0KGNvbnRleHQpOworICAgICAgICBMb2NhbENvbnRleHQgc3ViQ29u
dGV4dChjb250ZXh0KTsKIAogICAgICAgICBjb25zdCBDU1NTZWxlY3RvciogY29uc3QgJiBzZWxl
Y3RvciA9IGNvbnRleHQuc2VsZWN0b3I7CiAgICAgICAgIGZvciAoc3ViQ29udGV4dC5zZWxlY3Rv
ciA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3ViQ29udGV4dC5zZWxlY3Rv
cjsgc3ViQ29udGV4dC5zZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJDb250ZXh0
LnNlbGVjdG9yKSkgewpAQCAtMTA1OSw3ICsxMDIyLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6
OmNoZWNrT25lKGNvbnN0IENoZQogICAgICAgICAgICAgc3ViQ29udGV4dC5wc2V1ZG9FbGVtZW50
RWZmZWN0aXZlID0gZmFsc2U7CiAgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVkRHluYW1p
Y1BzZXVkbzsKICAgICAgICAgICAgIHVuc2lnbmVkIGlnbm9yZWRTcGVjaWZpY2l0eSA9IDA7Ci0g
ICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJDb250ZXh0LCBpZ25vcmVkRHluYW1p
Y1BzZXVkbywgaWdub3JlZFNwZWNpZmljaXR5KS5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRj
aGVzKQorICAgICAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoY2hlY2tpbmdDb250ZXh0LCBz
dWJDb250ZXh0LCBpZ25vcmVkRHluYW1pY1BzZXVkbywgaWdub3JlZFNwZWNpZmljaXR5KS5tYXRj
aCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNjksMTMgKzEwMzIsMTMg
QEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZQogICAgIHJldHVybiB0
cnVlOwogfQogCi1ib29sIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hTZWxlY3Rvckxpc3QoY29uc3Qg
Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgYmFzZUNvbnRleHQsIEVsZW1lbnQmIGVsZW1lbnQs
IGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0LCB1bnNpZ25lZCYgc3BlY2lmaWNp
dHkpIGNvbnN0Citib29sIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hTZWxlY3Rvckxpc3QoQ2hlY2tp
bmdDb250ZXh0JiBjaGVja2luZ0NvbnRleHQsIGNvbnN0IExvY2FsQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxp
c3QsIHVuc2lnbmVkJiBzcGVjaWZpY2l0eSkgY29uc3QKIHsKICAgICBzcGVjaWZpY2l0eSA9IDA7
CiAgICAgYm9vbCBoYXNNYXRjaGVkQW55dGhpbmcgPSBmYWxzZTsKIAogICAgIGZvciAoY29uc3Qg
Q1NTU2VsZWN0b3IqIHN1YnNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LmZpcnN0KCk7IHN1YnNlbGVj
dG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJzZWxlY3RvcikpIHsK
LSAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJjb250ZXh0KGJhc2VDb250ZXh0
KTsKKyAgICAgICAgTG9jYWxDb250ZXh0IHN1YmNvbnRleHQoY29udGV4dCk7CiAgICAgICAgIHN1
YmNvbnRleHQuZWxlbWVudCA9ICZlbGVtZW50OwogICAgICAgICBzdWJjb250ZXh0LnNlbGVjdG9y
ID0gc3Vic2VsZWN0b3I7CiAgICAgICAgIHN1YmNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRvQ2xh
c3MgPSB0cnVlOwpAQCAtMTA4Myw3ICsxMDQ2LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1h
dGNoU2VsZWN0b3JMaXN0KAogICAgICAgICBzdWJjb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZy
YWdtZW50ID0gc3Vic2VsZWN0b3I7CiAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQ
c2V1ZG87CiAgICAgICAgIHVuc2lnbmVkIGxvY2FsU3BlY2lmaWNpdHkgPSAwOwotICAgICAgICBp
ZiAobWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBsb2Nh
bFNwZWNpZmljaXR5KS5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzKSB7CisgICAgICAg
IGlmIChtYXRjaFJlY3Vyc2l2ZWx5KGNoZWNraW5nQ29udGV4dCwgc3ViY29udGV4dCwgaWdub3Jl
RHluYW1pY1BzZXVkbywgbG9jYWxTcGVjaWZpY2l0eSkubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9y
TWF0Y2hlcykgewogICAgICAgICAgICAgQVNTRVJUKCFpZ25vcmVEeW5hbWljUHNldWRvKTsKIAog
ICAgICAgICAgICAgaGFzTWF0Y2hlZEFueXRoaW5nID0gdHJ1ZTsKQEAgLTEwOTMsNDEgKzEwNTYs
NDEgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoU2VsZWN0b3JMaXN0KAogICAgIHJldHVy
biBoYXNNYXRjaGVkQW55dGhpbmc7CiB9CiAKLWJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja1Nj
cm9sbGJhclBzZXVkb0NsYXNzKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRl
eHQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVj
a2VyOjpjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKGNvbnN0IENoZWNraW5nQ29udGV4dCYgY2hl
Y2tpbmdDb250ZXh0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciog
c2VsZWN0b3IpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHNlbGVjdG9yLT5tYXRjaCgpID09IENTU1Nl
bGVjdG9yOjpQc2V1ZG9DbGFzcyk7CiAKICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9DbGFz
c1R5cGUoKSkgewogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzV2luZG93SW5hY3Rp
dmU6Ci0gICAgICAgIHJldHVybiBpc1dpbmRvd0luYWN0aXZlKGNvbnRleHQuZWxlbWVudCk7Cisg
ICAgICAgIHJldHVybiBpc1dpbmRvd0luYWN0aXZlKCZlbGVtZW50KTsKICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9DbGFzc0VuYWJsZWQ6Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXJNYXRj
aGVzRW5hYmxlZFBzZXVkb0NsYXNzKGNvbnRleHQpOworICAgICAgICByZXR1cm4gc2Nyb2xsYmFy
TWF0Y2hlc0VuYWJsZWRQc2V1ZG9DbGFzcyhjaGVja2luZ0NvbnRleHQpOwogICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzRGlzYWJsZWQ6Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXJN
YXRjaGVzRGlzYWJsZWRQc2V1ZG9DbGFzcyhjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIHNjcm9s
bGJhck1hdGNoZXNEaXNhYmxlZFBzZXVkb0NsYXNzKGNoZWNraW5nQ29udGV4dCk7CiAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3ZlcjoKLSAgICAgICAgcmV0dXJuIHNjcm9sbGJh
ck1hdGNoZXNIb3ZlclBzZXVkb0NsYXNzKGNvbnRleHQpOworICAgICAgICByZXR1cm4gc2Nyb2xs
YmFyTWF0Y2hlc0hvdmVyUHNldWRvQ2xhc3MoY2hlY2tpbmdDb250ZXh0KTsKICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0FjdGl2ZToKLSAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1h
dGNoZXNBY3RpdmVQc2V1ZG9DbGFzcyhjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJh
ck1hdGNoZXNBY3RpdmVQc2V1ZG9DbGFzcyhjaGVja2luZ0NvbnRleHQpOwogICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzSG9yaXpvbnRhbDoKLSAgICAgICAgcmV0dXJuIHNjcm9sbGJh
ck1hdGNoZXNIb3Jpem9udGFsUHNldWRvQ2xhc3MoY29udGV4dCk7CisgICAgICAgIHJldHVybiBz
Y3JvbGxiYXJNYXRjaGVzSG9yaXpvbnRhbFBzZXVkb0NsYXNzKGNoZWNraW5nQ29udGV4dCk7CiAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NWZXJ0aWNhbDoKLSAgICAgICAgcmV0dXJu
IHNjcm9sbGJhck1hdGNoZXNWZXJ0aWNhbFBzZXVkb0NsYXNzKGNvbnRleHQpOworICAgICAgICBy
ZXR1cm4gc2Nyb2xsYmFyTWF0Y2hlc1ZlcnRpY2FsUHNldWRvQ2xhc3MoY2hlY2tpbmdDb250ZXh0
KTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0RlY3JlbWVudDoKLSAgICAgICAg
cmV0dXJuIHNjcm9sbGJhck1hdGNoZXNEZWNyZW1lbnRQc2V1ZG9DbGFzcyhjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNoZXNEZWNyZW1lbnRQc2V1ZG9DbGFzcyhjaGVja2lu
Z0NvbnRleHQpOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSW5jcmVtZW50Ogot
ICAgICAgICByZXR1cm4gc2Nyb2xsYmFyTWF0Y2hlc0luY3JlbWVudFBzZXVkb0NsYXNzKGNvbnRl
eHQpOworICAgICAgICByZXR1cm4gc2Nyb2xsYmFyTWF0Y2hlc0luY3JlbWVudFBzZXVkb0NsYXNz
KGNoZWNraW5nQ29udGV4dCk7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NTdGFy
dDoKLSAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNoZXNTdGFydFBzZXVkb0NsYXNzKGNvbnRl
eHQpOworICAgICAgICByZXR1cm4gc2Nyb2xsYmFyTWF0Y2hlc1N0YXJ0UHNldWRvQ2xhc3MoY2hl
Y2tpbmdDb250ZXh0KTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0VuZDoKLSAg
ICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNoZXNFbmRQc2V1ZG9DbGFzcyhjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNoZXNFbmRQc2V1ZG9DbGFzcyhjaGVja2luZ0NvbnRl
eHQpOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRG91YmxlQnV0dG9uOgotICAg
ICAgICByZXR1cm4gc2Nyb2xsYmFyTWF0Y2hlc0RvdWJsZUJ1dHRvblBzZXVkb0NsYXNzKGNvbnRl
eHQpOworICAgICAgICByZXR1cm4gc2Nyb2xsYmFyTWF0Y2hlc0RvdWJsZUJ1dHRvblBzZXVkb0Ns
YXNzKGNoZWNraW5nQ29udGV4dCk7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NT
aW5nbGVCdXR0b246Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXJNYXRjaGVzU2luZ2xlQnV0dG9u
UHNldWRvQ2xhc3MoY29udGV4dCk7CisgICAgICAgIHJldHVybiBzY3JvbGxiYXJNYXRjaGVzU2lu
Z2xlQnV0dG9uUHNldWRvQ2xhc3MoY2hlY2tpbmdDb250ZXh0KTsKICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzc05vQnV0dG9uOgotICAgICAgICByZXR1cm4gc2Nyb2xsYmFyTWF0Y2hl
c05vQnV0dG9uUHNldWRvQ2xhc3MoY29udGV4dCk7CisgICAgICAgIHJldHVybiBzY3JvbGxiYXJN
YXRjaGVzTm9CdXR0b25Qc2V1ZG9DbGFzcyhjaGVja2luZ0NvbnRleHQpOwogICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzQ29ybmVyUHJlc2VudDoKLSAgICAgICAgcmV0dXJuIHNjcm9s
bGJhck1hdGNoZXNDb3JuZXJQcmVzZW50UHNldWRvQ2xhc3MoY29udGV4dCk7CisgICAgICAgIHJl
dHVybiBzY3JvbGxiYXJNYXRjaGVzQ29ybmVyUHJlc2VudFBzZXVkb0NsYXNzKGNoZWNraW5nQ29u
dGV4dCk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgJKHJldmlzaW9uIDE5NTEzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3
ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVA
Y2FyZXdvbGYuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFzIFNoYW5r
cyAod2Via2l0QG5pY2tzaGFua3MuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJv
c2t1cnlha292IDxhcEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkg
VG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLykKQEAgLTc2LDI3ICs3Niw0NiBAQCBwdWJsaWM6CiAKICAgICBTZWxlY3RvckNo
ZWNrZXIoRG9jdW1lbnQmKTsKIAorICAgIHN0cnVjdCBTdHlsZVJlbGF0aW9uIHsKKyAgICAgICAg
ZW51bSBUeXBlIHsKKyAgICAgICAgICAgIEFmZmVjdGVkQnlBY3RpdmUsCisgICAgICAgICAgICBB
ZmZlY3RlZEJ5RHJhZywKKyAgICAgICAgICAgIEFmZmVjdGVkQnlFbXB0eSwKKyAgICAgICAgICAg
IEFmZmVjdGVkQnlIb3ZlciwKKyAgICAgICAgICAgIEFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcs
CisgICAgICAgICAgICBBZmZlY3RzTmV4dFNpYmxpbmcsCisgICAgICAgICAgICBDaGlsZHJlbkFm
ZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcywKKyAgICAgICAgICAgIENoaWxkcmVuQWZm
ZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcywKKyAgICAgICAgICAgIENoaWxkcmVuQWZmZWN0ZWRCeVBy
b3BlcnR5QmFzZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcywKKyAgICAgICAgICAgIENoaWxkcmVu
QWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzLAorICAgICAgICAgICAgRmlyc3RDaGlsZCwKKyAgICAg
ICAgICAgIExhc3RDaGlsZCwKKyAgICAgICAgICAgIE50aENoaWxkSW5kZXgsCisgICAgICAgICAg
ICBVbmlxdWUsCisgICAgICAgIH07CisgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQ7CisgICAgICAg
IFR5cGUgdHlwZTsKKyAgICAgICAgdW5zaWduZWQgdmFsdWU7CisgICAgfTsKKyAgICB1c2luZyBT
dHlsZVJlbGF0aW9ucyA9IFZlY3RvcjxTdHlsZVJlbGF0aW9uLCA4PjsKKwogICAgIHN0cnVjdCBD
aGVja2luZ0NvbnRleHQgewogICAgICAgICBDaGVja2luZ0NvbnRleHQoU2VsZWN0b3JDaGVja2Vy
OjpNb2RlIHJlc29sdmluZ01vZGUpCiAgICAgICAgICAgICA6IHJlc29sdmluZ01vZGUocmVzb2x2
aW5nTW9kZSkKLSAgICAgICAgICAgICwgZWxlbWVudFN0eWxlKG51bGxwdHIpCi0gICAgICAgICAg
ICAsIHBzZXVkb0lkKE5PUFNFVURPKQotICAgICAgICAgICAgLCBzY3JvbGxiYXIobnVsbHB0cikK
LSAgICAgICAgICAgICwgc2Nyb2xsYmFyUGFydChOb1BhcnQpCi0gICAgICAgICAgICAsIHNjb3Bl
KG51bGxwdHIpCiAgICAgICAgIHsgfQogCi0gICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSBy
ZXNvbHZpbmdNb2RlOwotICAgICAgICBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlOwotICAgICAg
ICBQc2V1ZG9JZCBwc2V1ZG9JZDsKLSAgICAgICAgUmVuZGVyU2Nyb2xsYmFyKiBzY3JvbGxiYXI7
Ci0gICAgICAgIFNjcm9sbGJhclBhcnQgc2Nyb2xsYmFyUGFydDsKLSAgICAgICAgY29uc3QgQ29u
dGFpbmVyTm9kZSogc2NvcGU7CisgICAgICAgIGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSBy
ZXNvbHZpbmdNb2RlOworICAgICAgICBQc2V1ZG9JZCBwc2V1ZG9JZCB7IE5PUFNFVURPIH07Cisg
ICAgICAgIFJlbmRlclNjcm9sbGJhciogc2Nyb2xsYmFyIHsgbnVsbHB0ciB9OworICAgICAgICBT
Y3JvbGxiYXJQYXJ0IHNjcm9sbGJhclBhcnQgeyBOb1BhcnQgfTsKKyAgICAgICAgY29uc3QgQ29u
dGFpbmVyTm9kZSogc2NvcGUgeyBudWxscHRyIH07CisKKyAgICAgICAgLy8gRklYTUU6IEl0IHdv
dWxkIGJlIG5pY2VyIHRvIGhhdmUgYSBzZXBhcmF0ZSBvYmplY3QgZm9yIHJldHVybiB2YWx1ZXMu
IFRoaXMgcmVxdWlyZXMgc29tZSBtb3JlIHdvcmsgaW4gdGhlIHNlbGVjdG9yIGNvbXBpbGVyLgor
ICAgICAgICBTdHlsZVJlbGF0aW9ucyBzdHlsZVJlbGF0aW9uczsKKyAgICAgICAgUHNldWRvSWRT
ZXQgcHNldWRvSURTZXQ7CiAgICAgfTsKIAotICAgIHN0cnVjdCBDaGVja2luZ0NvbnRleHRXaXRo
U3RhdHVzOwotCi0gICAgYm9vbCBtYXRjaChjb25zdCBDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBj
b25zdCBDaGVja2luZ0NvbnRleHQmLCB1bnNpZ25lZCYgc3BlY2lmaWNpdHkpIGNvbnN0OworICAg
IGJvb2wgbWF0Y2goY29uc3QgQ1NTU2VsZWN0b3ImLCBjb25zdCBFbGVtZW50JiwgQ2hlY2tpbmdD
b250ZXh0JiwgdW5zaWduZWQmIHNwZWNpZmljaXR5KSBjb25zdDsKIAogICAgIHN0YXRpYyBib29s
IGlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciopOwogICAgIHN0
YXRpYyBib29sIG1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKGNvbnN0IEVsZW1lbnQqKTsKQEAgLTEw
NSwxMiArMTI0LDE0IEBAIHB1YmxpYzoKICAgICBlbnVtIExpbmtNYXRjaE1hc2sgeyBNYXRjaERl
ZmF1bHQgPSAwLCBNYXRjaExpbmsgPSAxLCBNYXRjaFZpc2l0ZWQgPSAyLCBNYXRjaEFsbCA9IE1h
dGNoTGluayB8IE1hdGNoVmlzaXRlZCB9OwogICAgIHN0YXRpYyB1bnNpZ25lZCBkZXRlcm1pbmVM
aW5rTWF0Y2hUeXBlKGNvbnN0IENTU1NlbGVjdG9yKik7CiAKKyAgICBzdHJ1Y3QgTG9jYWxDb250
ZXh0OworICAgIAogcHJpdmF0ZToKLSAgICBNYXRjaFJlc3VsdCBtYXRjaFJlY3Vyc2l2ZWx5KGNv
bnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmLCBQc2V1ZG9JZFNldCYsIHVuc2lnbmVkJiBz
cGVjaWZpY2l0eSkgY29uc3Q7Ci0gICAgYm9vbCBjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRl
eHRXaXRoU3RhdHVzJiwgUHNldWRvSWRTZXQmLCBNYXRjaFR5cGUmLCB1bnNpZ25lZCYgc3BlY2lm
aWNpdHkpIGNvbnN0OwotICAgIGJvb2wgbWF0Y2hTZWxlY3Rvckxpc3QoY29uc3QgQ2hlY2tpbmdD
b250ZXh0V2l0aFN0YXR1cyYsIEVsZW1lbnQmLCBjb25zdCBDU1NTZWxlY3Rvckxpc3QmLCB1bnNp
Z25lZCYgc3BlY2lmaWNpdHkpIGNvbnN0OworICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVjdXJzaXZl
bHkoQ2hlY2tpbmdDb250ZXh0JiwgY29uc3QgTG9jYWxDb250ZXh0JiwgUHNldWRvSWRTZXQmLCB1
bnNpZ25lZCYgc3BlY2lmaWNpdHkpIGNvbnN0OworICAgIGJvb2wgY2hlY2tPbmUoQ2hlY2tpbmdD
b250ZXh0JiwgY29uc3QgTG9jYWxDb250ZXh0JiwgUHNldWRvSWRTZXQmLCBNYXRjaFR5cGUmLCB1
bnNpZ25lZCYgc3BlY2lmaWNpdHkpIGNvbnN0OworICAgIGJvb2wgbWF0Y2hTZWxlY3Rvckxpc3Qo
Q2hlY2tpbmdDb250ZXh0JiwgY29uc3QgTG9jYWxDb250ZXh0JiwgY29uc3QgRWxlbWVudCYsIGNv
bnN0IENTU1NlbGVjdG9yTGlzdCYsIHVuc2lnbmVkJiBzcGVjaWZpY2l0eSkgY29uc3Q7CiAKLSAg
ICBib29sIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0
aFN0YXR1cyYsIGNvbnN0IENTU1NlbGVjdG9yKikgY29uc3Q7CisgICAgYm9vbCBjaGVja1Njcm9s
bGJhclBzZXVkb0NsYXNzKGNvbnN0IENoZWNraW5nQ29udGV4dCYsIGNvbnN0IEVsZW1lbnQmLCBj
b25zdCBDU1NTZWxlY3RvciopIGNvbnN0OwogCiAgICAgYm9vbCBtX3N0cmljdFBhcnNpbmc7CiAg
ICAgYm9vbCBtX2RvY3VtZW50SXNIVE1MOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1NlbGVj
dG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAxOTUxMzApCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC02MywxMiArNjMsMTIgQEAgQUxXQVlTX0lOTElORSBib29sIGlzRW5hYmxlZChj
b25zdCBFbGVtZQogICAgICAgICAmJiAhZWxlbWVudC0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCk7
CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBpc01lZGlhRG9jdW1lbnQoRWxlbWVudCogZWxlbWVu
dCkKK0FMV0FZU19JTkxJTkUgYm9vbCBpc01lZGlhRG9jdW1lbnQoY29uc3QgRWxlbWVudCogZWxl
bWVudCkKIHsKICAgICByZXR1cm4gZWxlbWVudC0+ZG9jdW1lbnQoKS5pc01lZGlhRG9jdW1lbnQo
KTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIGlzQ2hlY2tlZChFbGVtZW50JiBlbGVtZW50KQor
QUxXQVlTX0lOTElORSBib29sIGlzQ2hlY2tlZChjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewog
ICAgIC8vIEV2ZW4gdGhvdWdoIFdpbklFIGFsbG93cyBjaGVja2VkIGFuZCBpbmRldGVybWluYXRl
IHRvIGNvLWV4aXN0LCB0aGUgQ1NTIHNlbGVjdG9yIHNwZWMgc2F5cyB0aGF0CiAgICAgLy8geW91
IGNhbid0IGJlIGJvdGggY2hlY2tlZCBhbmQgaW5kZXRlcm1pbmF0ZS4gV2Ugd2lsbCBiZWhhdmUg
bGlrZSBXaW5JRSBiZWhpbmQgdGhlIHNjZW5lcyBhbmQganVzdApAQCAtNzgsMTcgKzc4LDE3IEBA
IEFMV0FZU19JTkxJTkUgYm9vbCBpc0NoZWNrZWQoRWxlbWVudCYgZWwKICAgICAgICAgcmV0dXJu
IGlucHV0RWxlbWVudC5zaG91bGRBcHBlYXJDaGVja2VkKCkgJiYgIWlucHV0RWxlbWVudC5zaG91
bGRBcHBlYXJJbmRldGVybWluYXRlKCk7CiAgICAgfQogICAgIGlmIChpczxIVE1MT3B0aW9uRWxl
bWVudD4oZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVu
dD4oZWxlbWVudCkuc2VsZWN0ZWQoKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SFRNTE9w
dGlvbkVsZW1lbnQmPihkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkpLnNlbGVj
dGVkKCk7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBpc0lu
UmFuZ2UoRWxlbWVudCogZWxlbWVudCkKK0FMV0FZU19JTkxJTkUgYm9vbCBpc0luUmFuZ2UoY29u
c3QgRWxlbWVudCogZWxlbWVudCkKIHsKICAgICByZXR1cm4gZWxlbWVudC0+aXNJblJhbmdlKCk7
CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBpc091dE9mUmFuZ2UoRWxlbWVudCogZWxlbWVudCkK
K0FMV0FZU19JTkxJTkUgYm9vbCBpc091dE9mUmFuZ2UoY29uc3QgRWxlbWVudCogZWxlbWVudCkK
IHsKICAgICByZXR1cm4gZWxlbWVudC0+aXNPdXRPZlJhbmdlKCk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmgJKHJldmlzaW9uIDE5NTEzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxMCw3ICs2MTAsNyBAQCBp
bmxpbmUgYm9vbCBjaGVja1JlZ2lvblNlbGVjdG9yKGNvbnN0IENTCiAgICAgZm9yIChjb25zdCBD
U1NTZWxlY3RvciogcyA9IHJlZ2lvblNlbGVjdG9yOyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0Ojpu
ZXh0KHMpKSB7CiAgICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0IHNlbGVj
dG9yQ2hlY2tpbmdDb250ZXh0KFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdSdWxlcyk7
CiAgICAgICAgIHVuc2lnbmVkIGlnbm9yZWRTcGVjaWZpY2l0eTsKLSAgICAgICAgaWYgKHNlbGVj
dG9yQ2hlY2tlci5tYXRjaChzLCByZWdpb25FbGVtZW50LCBzZWxlY3RvckNoZWNraW5nQ29udGV4
dCwgaWdub3JlZFNwZWNpZmljaXR5KSkKKyAgICAgICAgaWYgKHNlbGVjdG9yQ2hlY2tlci5tYXRj
aCgqcywgKnJlZ2lvbkVsZW1lbnQsIHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0LCBpZ25vcmVkU3Bl
Y2lmaWNpdHkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBm
YWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAJ
KHJldmlzaW9uIDE5NTEzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBp
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApAQCAtMzIzLDcgKzMyMyw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZW5l
cmF0ZUVsZW1lbnRJc1RhcmdldChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMpOwog
CiAgICAgLy8gSGVscGVycy4KLSAgICB2b2lkIGFkZEZsYWdzVG9FbGVtZW50U3R5bGVGcm9tQ29u
dGV4dChBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0LCBpbnQ2NF90KTsKKyAg
ICB2b2lkIGFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKEFzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OlR5cGUpOworICAg
IHZvaWQgYWRkU3R5bGVSZWxhdGlvbihBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250
ZXh0LCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpTdHls
ZVJlbGF0aW9uOjpUeXBlLCBPcHRpb25hbDxBc3NlbWJsZXI6OlJlZ2lzdGVySUQ+IHZhbHVlID0g
e30pOwogICAgIEFzc2VtYmxlcjo6SnVtcCBicmFuY2hPblJlc29sdmluZ01vZGVXaXRoQ2hlY2tp
bmdDb250ZXh0KEFzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU2VsZWN0b3JDaGVja2Vy
OjpNb2RlLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0KTsKICAgICBBc3Nl
bWJsZXI6Okp1bXAgYnJhbmNoT25SZXNvbHZpbmdNb2RlKEFzc2VtYmxlcjo6UmVsYXRpb25hbENv
bmRpdGlvbiwgU2VsZWN0b3JDaGVja2VyOjpNb2RlLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hl
Y2tpbmdDb250ZXh0KTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudElzRmlyc3RMaW5rKEFzc2Vt
Ymxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGVsZW1l
bnQpOwpAQCAtMzMyLDcgKzMzMyw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZW5lcmF0ZU50aEZp
bHRlclRlc3QoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJl
Z2lzdGVySUQgY291bnRlciwgaW50IGEsIGludCBiKTsKICAgICB2b2lkIGdlbmVyYXRlUmVxdWVz
dGVkUHNldWRvRWxlbWVudEVxdWFsc1RvU2VsZWN0b3JQc2V1ZG9FbGVtZW50KEFzc2VtYmxlcjo6
SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYsIEFzc2VtYmxl
cjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQpOwogICAgIHZvaWQgZ2VuZXJhdGVTcGVjaWFs
RmFpbHVyZUluUXVpcmtzTW9kZUZvckFjdGl2ZUFuZEhvdmVySWZOZWVkZWQoQXNzZW1ibGVyOjpK
dW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50Jik7Ci0gICAgdm9p
ZCBtYXJrRWxlbWVudElmUmVzb2x2aW5nU3R5bGUoQXNzZW1ibGVyOjpSZWdpc3RlcklELCBpbnQz
Ml90KTsKICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IGp1bXBJZk5vUHJldmlvdXNBZGphY2VudEVs
ZW1lbnQoKTsKICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IGp1bXBJZk5vTmV4dEFkamFjZW50RWxl
bWVudCgpOwogICAgIEFzc2VtYmxlcjo6SnVtcCBqdW1wSWZOb3RSZXNvbHZpbmdTdHlsZShBc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0UmVnaXN0ZXIpOwpAQCAtMTg5MSw3ICsx
ODkxLDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlU2VsZQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHNob3VsZE1hcmtTdHlsZUlzQWZm
ZWN0ZWRCeVByZXZpb3VzU2libGluZyhmcmFnbWVudCkpCi0gICAgICAgICAgICBtYXJrRWxlbWVu
dElmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgTm9kZTo6ZmxhZ1N0eWxl
SXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCkpOworICAgICAgICAgICAgYWRkU3R5bGVSZWxh
dGlvbklmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU2VsZWN0b3JDaGVj
a2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsKICAgICAgICAg
Z2VuZXJhdGVCYWNrdHJhY2tpbmdUYWlsc0lmTmVlZGVkKGZhaWx1cmVDYXNlcywgZnJhZ21lbnQp
OwogICAgIH0KIApAQCAtMjEzNSw3ICsyMTM1LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0
b3I6OmdlbmVyYXRlV2Fsawogdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRGly
ZWN0QWRqYWNlbnRUcmVlV2Fsa2VyKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywg
Y29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCiB7CiAgICAgZ2VuZXJhdGVXYWxrVG9Q
cmV2aW91c0FkamFjZW50KGZhaWx1cmVDYXNlcywgZnJhZ21lbnQpOwotICAgIG1hcmtFbGVtZW50
SWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBOb2RlOjpmbGFnQWZmZWN0
c05leHRTaWJsaW5nRWxlbWVudFN0eWxlKCkpOworICAgIGFkZFN0eWxlUmVsYXRpb25JZlJlc29s
dmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVS
ZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5nKTsKIAogICAgIEFzc2VtYmxlcjo6SnVtcExpc3Qg
bWF0Y2hpbmdUYWdOYW1lRmFpbHVyZUNhc2VzOwogICAgIEFzc2VtYmxlcjo6SnVtcExpc3QgbWF0
Y2hpbmdQb3N0VGFnTmFtZUZhaWx1cmVDYXNlczsKQEAgLTIxNjAsNyArMjE2MCw3IEBAIHZvaWQg
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUluZGkKICAgICAgICAgbV9iYWNrdHJhY2tp
bmdMZXZlbHMubGFzdCgpLmluZGlyZWN0QWRqYWNlbnRUcmVlV2Fsa2VyQmFja3RyYWNraW5nUG9p
bnQgPSBtX2Fzc2VtYmxlci5sYWJlbCgpOwogCiAgICAgZ2VuZXJhdGVXYWxrVG9QcmV2aW91c0Fk
amFjZW50KGZhaWx1cmVDYXNlcywgZnJhZ21lbnQpOwotICAgIG1hcmtFbGVtZW50SWZSZXNvbHZp
bmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBOb2RlOjpmbGFnQWZmZWN0c05leHRTaWJs
aW5nRWxlbWVudFN0eWxlKCkpOworICAgIGFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxl
KGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6
QWZmZWN0c05leHRTaWJsaW5nKTsKIAogICAgIGlmIChmcmFnbWVudC5iYWNrdHJhY2tpbmdGbGFn
cyAmIEJhY2t0cmFja2luZ0ZsYWc6OkluZGlyZWN0QWRqYWNlbnRFbnRyeVBvaW50KQogICAgICAg
ICBtX2JhY2t0cmFja2luZ0xldmVscy5sYXN0KCkuaW5kaXJlY3RBZGphY2VudEVudHJ5UG9pbnQg
PSBtX2Fzc2VtYmxlci5sYWJlbCgpOwpAQCAtMjE3MCwzNSArMjE3MCw1MSBAQCB2b2lkIFNlbGVj
dG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVJbmRpCiAgICAgbG9jYWxGYWlsdXJlQ2FzZXMubGlu
a1RvKGxvb3BTdGFydCwgJm1fYXNzZW1ibGVyKTsKIH0KIAordm9pZCBTZWxlY3RvckNvZGVHZW5l
cmF0b3I6OmFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKEFzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OlR5cGUgcmVsYXRp
b25UeXBlKQoreworICAgIGlmIChtX3NlbGVjdG9yQ29udGV4dCA9PSBTZWxlY3RvckNvbnRleHQ6
OlF1ZXJ5U2VsZWN0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIExvY2FsUmVnaXN0ZXIgY2hl
Y2tpbmdDb250ZXh0KG1fcmVnaXN0ZXJBbGxvY2F0b3IpOworICAgIEFzc2VtYmxlcjo6SnVtcCBu
b3RSZXNvbHZpbmdTdHlsZSA9IGp1bXBJZk5vdFJlc29sdmluZ1N0eWxlKGNoZWNraW5nQ29udGV4
dCk7CisKKyAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgcmVs
YXRpb25UeXBlKTsKKworICAgIG5vdFJlc29sdmluZ1N0eWxlLmxpbmsoJm1fYXNzZW1ibGVyKTsK
K30KIAotdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmFkZEZsYWdzVG9FbGVtZW50U3R5bGVG
cm9tQ29udGV4dChBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0LCBpbnQ2NF90
IG5ld0ZsYWcpCitzdGF0aWMgdm9pZCBhZGRTdHlsZVJlbGF0aW9uRWxlbWVudEZ1bmN0aW9uKFNl
bGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0KiBjaGVja2luZ0NvbnRleHQsIEVsZW1lbnQq
IGVsZW1lbnQpCit7CisgICAgY2hlY2tpbmdDb250ZXh0LT5zdHlsZVJlbGF0aW9ucy5hcHBlbmQo
eyAqZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5QWN0
aXZlLCAxIH0pOworfQorCit2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6YWRkU3R5bGVSZWxh
dGlvbihBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0LCBBc3NlbWJsZXI6OlJl
Z2lzdGVySUQgZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpUeXBlIHJl
bGF0aW9uVHlwZSwgT3B0aW9uYWw8QXNzZW1ibGVyOjpSZWdpc3RlcklEPiB2YWx1ZSkKIHsKICAg
ICBBU1NFUlQobV9zZWxlY3RvckNvbnRleHQgIT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVj
dG9yKTsKIAotICAgIExvY2FsUmVnaXN0ZXIgY2hpbGRTdHlsZShtX3JlZ2lzdGVyQWxsb2NhdG9y
KTsKLSAgICBtX2Fzc2VtYmxlci5sb2FkUHRyKEFzc2VtYmxlcjo6QWRkcmVzcyhjaGVja2luZ0Nv
bnRleHQsIE9CSkVDVF9PRkZTRVRPRihTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCwg
ZWxlbWVudFN0eWxlKSksIGNoaWxkU3R5bGUpOworICAgIC8vIEZJWE1FOiBBcHBlbmQgdG8gdmVj
dG9yIHdpdGhvdXQgYSBmdW5jdGlvbiBjYWxsIGF0IGxlYXN0IHdoZW4gdGhlcmUgaXMgc3VmZmlj
aWVudCBjYXBhY2l0eS4KKyAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVy
LCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMp
OworICAgIGZ1bmN0aW9uQ2FsbC5zZXRGdW5jdGlvbkFkZHJlc3MoYWRkU3R5bGVSZWxhdGlvbkVs
ZW1lbnRGdW5jdGlvbik7CisgICAgZnVuY3Rpb25DYWxsLnNldFR3b0FyZ3VtZW50cyhjaGVja2lu
Z0NvbnRleHQsIGVsZW1lbnQpOworICAgIGZ1bmN0aW9uQ2FsbC5jYWxsKCk7CiAKLSAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGxvb2sgaW50byBkb2luZyBzb21ldGhpbmcgc21hcnQgaW4gTWFjcm9B
c3NlbWJsZXIgaW5zdGVhZC4KLSAgICBBc3NlbWJsZXI6OkFkZHJlc3MgZmxhZ0FkZHJlc3MoY2hp
bGRTdHlsZSwgUmVuZGVyU3R5bGU6Om5vbmluaGVyaXRlZEZsYWdzTWVtb3J5T2Zmc2V0KCkgKyBS
ZW5kZXJTdHlsZTo6Tm9uSW5oZXJpdGVkRmxhZ3M6OmZsYWdzTWVtb3J5T2Zmc2V0KCkpOwotI2lm
IENQVShBUk1fVEhVTUIyKQotICAgIGludDMyX3QgZmxhZ0xvd0JpdHMgPSBuZXdGbGFnICYgMHhm
ZmZmZmZmZjsKLSAgICBpbnQzMl90IGZsYWdIaWdoQml0cyA9IG5ld0ZsYWcgPj4gMzI7Ci0gICAg
aWYgKGZsYWdMb3dCaXRzKQotICAgICAgICBtX2Fzc2VtYmxlci5vcjMyKEFzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKGZsYWdMb3dCaXRzKSwgZmxhZ0FkZHJlc3MpOwotICAgIGlmIChmbGFnSGlnaEJp
dHMpIHsKLSAgICAgICAgQXNzZW1ibGVyOjpBZGRyZXNzIGZsYWdIaWdoQWRkcmVzcyA9IGZsYWdB
ZGRyZXNzLndpdGhPZmZzZXQoNCk7Ci0gICAgICAgIG1fYXNzZW1ibGVyLm9yMzIoQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoZmxhZ0hpZ2hCaXRzKSwgZmxhZ0hpZ2hBZGRyZXNzKTsKLSAgICB9Ci0j
ZWxpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCi0gICAgTG9jYWxSZWdpc3RlciBmbGFncyht
X3JlZ2lzdGVyQWxsb2NhdG9yKTsKLSAgICBtX2Fzc2VtYmxlci5sb2FkNjQoZmxhZ0FkZHJlc3Ms
IGZsYWdzKTsKLSAgICBMb2NhbFJlZ2lzdGVyIGlzRmlyc3RDaGlsZFN0YXRlRmxhZ0ltbWVkaWF0
ZShtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKLSAgICBtX2Fzc2VtYmxlci5tb3ZlKEFzc2VtYmxlcjo6
VHJ1c3RlZEltbTY0KG5ld0ZsYWcpLCBpc0ZpcnN0Q2hpbGRTdGF0ZUZsYWdJbW1lZGlhdGUpOwot
ICAgIG1fYXNzZW1ibGVyLm9yNjQoaXNGaXJzdENoaWxkU3RhdGVGbGFnSW1tZWRpYXRlLCBmbGFn
cyk7Ci0gICAgbV9hc3NlbWJsZXIuc3RvcmU2NChmbGFncywgZmxhZ0FkZHJlc3MpOwotI2Vsc2UK
LSNlcnJvciBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmFkZEZsYWdzVG9FbGVtZW50U3R5bGVGcm9t
Q29udGV4dCBub3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLgotI2VuZGlmCisg
ICAgQXNzZW1ibGVyOjpBZGRyZXNzIHZlY3RvckFkZHJlc3MoY2hlY2tpbmdDb250ZXh0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQsIHN0eWxlUmVsYXRp
b25zKSk7CisgICAgYXV0byBkYXRhQWRkcmVzcyA9IHZlY3RvckFkZHJlc3Mud2l0aE9mZnNldChT
ZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb25zOjpkYXRhTWVtb3J5T2Zmc2V0KCkpOworICAg
IGF1dG8gc2l6ZUFkZHJlc3MgPSB2ZWN0b3JBZGRyZXNzLndpdGhPZmZzZXQoU2VsZWN0b3JDaGVj
a2VyOjpTdHlsZVJlbGF0aW9uczo6c2l6ZU1lbW9yeU9mZnNldCgpKTsKKworICAgIExvY2FsUmVn
aXN0ZXIgcmVsYXRpb25Qb2ludGVyKG1fcmVnaXN0ZXJBbGxvY2F0b3IpOworICAgIG1fYXNzZW1i
bGVyLmxvYWQzMihzaXplQWRkcmVzcywgcmVsYXRpb25Qb2ludGVyKTsKKyAgICBtX2Fzc2VtYmxl
ci5zdWIzMihBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgcmVsYXRpb25Qb2ludGVyKTsKKyAg
ICBtX2Fzc2VtYmxlci5tdWwzMihBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoU2VsZWN0
b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uKSksIHJlbGF0aW9uUG9pbnRlciwgcmVsYXRpb25Qb2lu
dGVyKTsKKyAgICBtX2Fzc2VtYmxlci5hZGRQdHIoZGF0YUFkZHJlc3MsIHJlbGF0aW9uUG9pbnRl
cik7CisKKyAgICBBc3NlbWJsZXI6OkFkZHJlc3MgdHlwZUFkZHJlc3MocmVsYXRpb25Qb2ludGVy
LCBPQkpFQ1RfT0ZGU0VUT0YoU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uLCB0eXBlKSk7
CisgICAgbV9hc3NlbWJsZXIuc3RvcmUzMihBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihyZWxhdGlv
blR5cGUpLCB0eXBlQWRkcmVzcyk7CisKKyAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgQXNzZW1i
bGVyOjpBZGRyZXNzIHZhbHVlQWRkcmVzcyhyZWxhdGlvblBvaW50ZXIsIE9CSkVDVF9PRkZTRVRP
RihTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb24sIHZhbHVlKSk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnN0b3JlMzIoKnZhbHVlLCB2YWx1ZUFkZHJlc3MpOworICAgIH0KIH0KIAogQXNzZW1i
bGVyOjpKdW1wTGlzdCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omp1bXBJZk5vUHJldmlvdXNBZGph
Y2VudEVsZW1lbnQoKQpAQCAtMjQyMCwyNyArMjQzNiw2IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjptb2R1bG9Jc1plcm8KICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1vZHVsbyhBc3Nl
bWJsZXI6Ok5vblplcm8sIGlucHV0RGl2aWRlbmQsIGRpdmlzb3IpKTsKIH0KIAotc3RhdGljIHZv
aWQgc2V0Tm9kZUZsYWcoQXNzZW1ibGVyJiBhc3NlbWJsZXIsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCBlbGVtZW50QWRkcmVzcywgaW50MzJfdCBmbGFnKQotewotICAgIGFzc2VtYmxlci5vcjMyKEFz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKGZsYWcpLCBBc3NlbWJsZXI6OkFkZHJlc3MoZWxlbWVudEFk
ZHJlc3MsIE5vZGU6Om5vZGVGbGFnc01lbW9yeU9mZnNldCgpKSk7Ci19Ci0KLXZvaWQgU2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjptYXJrRWxlbWVudElmUmVzb2x2aW5nU3R5bGUoQXNzZW1ibGVyOjpS
ZWdpc3RlcklEIGVsZW1lbnQsIGludDMyX3Qgbm9kZUZsYWcpCi17Ci0gICAgaWYgKG1fc2VsZWN0
b3JDb250ZXh0ID09IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3RvcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBza2lwTWFya2luZzsKLSAgICB7Ci0gICAg
ICAgIExvY2FsUmVnaXN0ZXIgY2hlY2tpbmdDb250ZXh0KG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwot
ICAgICAgICBza2lwTWFya2luZy5hcHBlbmQoanVtcElmTm90UmVzb2x2aW5nU3R5bGUoY2hlY2tp
bmdDb250ZXh0KSk7Ci0gICAgfQotCi0gICAgc2V0Tm9kZUZsYWcobV9hc3NlbWJsZXIsIGVsZW1l
bnQsIG5vZGVGbGFnKTsKLQotICAgIHNraXBNYXJraW5nLmxpbmsoJm1fYXNzZW1ibGVyKTsKLX0K
LQogdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmxpbmtGYWlsdXJlcyhBc3NlbWJsZXI6Okp1
bXBMaXN0JiBnbG9iYWxGYWlsdXJlQ2FzZXMsIEJhY2t0cmFja2luZ0FjdGlvbiBiYWNrdHJhY2tp
bmdBY3Rpb24sIEFzc2VtYmxlcjo6SnVtcExpc3QmIGxvY2FsRmFpbHVyZUNhc2VzKQogewogICAg
IHN3aXRjaCAoYmFja3RyYWNraW5nQWN0aW9uKSB7CkBAIC0zMDUyLDI0ICszMDQ3LDExIEBAIHZv
aWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUNvbnQKICAgICBmYWlsdXJlQ2FzZXMu
YXBwZW5kKGZ1bmN0aW9uQ2FsbC5jYWxsQW5kQnJhbmNoT25Cb29sZWFuUmV0dXJuVmFsdWUoQXNz
ZW1ibGVyOjpaZXJvKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldEZpcnN0Q2hpbGRTdGF0ZShFbGVt
ZW50KiBlbGVtZW50KQotewotICAgIGlmIChSZW5kZXJTdHlsZSogc3R5bGUgPSBlbGVtZW50LT5y
ZW5kZXJTdHlsZSgpKQotICAgICAgICBzdHlsZS0+c2V0Rmlyc3RDaGlsZFN0YXRlKCk7Ci19Ci0K
IHN0YXRpYyBib29sIGVsZW1lbnRJc0FjdGl2ZShFbGVtZW50KiBlbGVtZW50KQogewogICAgIHJl
dHVybiBlbGVtZW50LT5hY3RpdmUoKSB8fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNl
UHNldWRvU3RhdGUoKmVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0FjdGl2ZSk7CiB9
CiAKLXN0YXRpYyBib29sIGVsZW1lbnRJc0FjdGl2ZUZvclN0eWxlUmVzb2x1dGlvbihFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCogY2hlY2tp
bmdDb250ZXh0KQotewotICAgIGlmIChjaGVja2luZ0NvbnRleHQtPnJlc29sdmluZ01vZGUgPT0g
U2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgZWxlbWVudC0+
c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QWN0aXZlKCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQtPmFjdGl2
ZSgpIHx8IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZSgqZWxlbWVu
dCwgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQWN0aXZlKTsKLX0KLQogdm9pZCBTZWxlY3RvckNv
ZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudElzQWN0aXZlKEFzc2VtYmxlcjo6SnVtcExpc3Qm
IGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCiB7CiAgICAg
Z2VuZXJhdGVTcGVjaWFsRmFpbHVyZUluUXVpcmtzTW9kZUZvckFjdGl2ZUFuZEhvdmVySWZOZWVk
ZWQoZmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7CkBAIC0zMDgxLDI2ICszMDYzLDEyIEBAIHZvaWQg
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmIChmcmFnbWVudE1hdGNoZXNUaGVSaWdodG1vc3RFbGVtZW50KG1fc2VsZWN0
b3JDb250ZXh0LCBmcmFnbWVudCkpIHsKLSAgICAgICAgTG9jYWxSZWdpc3RlciBjaGVja2luZ0Nv
bnRleHQobV9yZWdpc3RlckFsbG9jYXRvcik7Ci0gICAgICAgIEFzc2VtYmxlcjo6SnVtcCBub3RS
ZXNvbHZpbmdTdHlsZSA9IGp1bXBJZk5vdFJlc29sdmluZ1N0eWxlKGNoZWNraW5nQ29udGV4dCk7
Ci0gICAgICAgIGFkZEZsYWdzVG9FbGVtZW50U3R5bGVGcm9tQ29udGV4dChjaGVja2luZ0NvbnRl
eHQsIFJlbmRlclN0eWxlOjpOb25Jbmhlcml0ZWRGbGFnczo6ZmxhZ0lzYWZmZWN0ZWRCeUFjdGl2
ZSgpKTsKLSAgICAgICAgbm90UmVzb2x2aW5nU3R5bGUubGluaygmbV9hc3NlbWJsZXIpOwotCi0g
ICAgICAgIEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbkNhbGwobV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJB
bGxvY2F0b3IsIG1fc3RhY2tBbGxvY2F0b3IsIG1fZnVuY3Rpb25DYWxscyk7Ci0gICAgICAgIGZ1
bmN0aW9uQ2FsbC5zZXRGdW5jdGlvbkFkZHJlc3MoZWxlbWVudElzQWN0aXZlKTsKLSAgICAgICAg
ZnVuY3Rpb25DYWxsLnNldE9uZUFyZ3VtZW50KGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIpOwotICAg
ICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGZ1bmN0aW9uQ2FsbC5jYWxsQW5kQnJhbmNoT25Cb29s
ZWFuUmV0dXJuVmFsdWUoQXNzZW1ibGVyOjpaZXJvKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
QXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCA9IG1fcmVnaXN0ZXJBbGxvY2F0
b3IuYWxsb2NhdGVSZWdpc3RlcldpdGhQcmVmZXJlbmNlKEpTQzo6R1BSSW5mbzo6YXJndW1lbnRH
UFIxKTsKLSAgICAgICAgbG9hZENoZWNraW5nQ29udGV4dChjaGVja2luZ0NvbnRleHQpOwotICAg
ICAgICBtX3JlZ2lzdGVyQWxsb2NhdG9yLmRlYWxsb2NhdGVSZWdpc3RlcihjaGVja2luZ0NvbnRl
eHQpOworICAgIGFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNz
UmVnaXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeUFjdGl2
ZSk7CiAKLSAgICAgICAgRnVuY3Rpb25DYWxsIGZ1bmN0aW9uQ2FsbChtX2Fzc2VtYmxlciwgbV9y
ZWdpc3RlckFsbG9jYXRvciwgbV9zdGFja0FsbG9jYXRvciwgbV9mdW5jdGlvbkNhbGxzKTsKLSAg
ICAgICAgZnVuY3Rpb25DYWxsLnNldEZ1bmN0aW9uQWRkcmVzcyhlbGVtZW50SXNBY3RpdmVGb3JT
dHlsZVJlc29sdXRpb24pOwotICAgICAgICBmdW5jdGlvbkNhbGwuc2V0VHdvQXJndW1lbnRzKGVs
ZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIGNoZWNraW5nQ29udGV4dCk7Ci0gICAgICAgIGZhaWx1cmVD
YXNlcy5hcHBlbmQoZnVuY3Rpb25DYWxsLmNhbGxBbmRCcmFuY2hPbkJvb2xlYW5SZXR1cm5WYWx1
ZShBc3NlbWJsZXI6Olplcm8pKTsKLSAgICB9CisgICAgRnVuY3Rpb25DYWxsIGZ1bmN0aW9uQ2Fs
bChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9zdGFja0FsbG9jYXRvciwgbV9m
dW5jdGlvbkNhbGxzKTsKKyAgICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRyZXNzKGVsZW1l
bnRJc0FjdGl2ZSk7CisgICAgZnVuY3Rpb25DYWxsLnNldE9uZUFyZ3VtZW50KGVsZW1lbnRBZGRy
ZXNzUmVnaXN0ZXIpOworICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoZnVuY3Rpb25DYWxsLmNhbGxB
bmRCcmFuY2hPbkJvb2xlYW5SZXR1cm5WYWx1ZShBc3NlbWJsZXI6Olplcm8pKTsKIH0KIAogc3Rh
dGljIHZvaWQganVtcElmRWxlbWVudElzTm90RW1wdHkoQXNzZW1ibGVyJiBhc3NlbWJsZXIsIFJl
Z2lzdGVyQWxsb2NhdG9yJiByZWdpc3RlckFsbG9jYXRvciwgQXNzZW1ibGVyOjpKdW1wTGlzdCYg
bm90RW1wdHlDYXNlcywgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGVsZW1lbnQpCkBAIC0zMTI5LDE4
ICszMDk3LDcgQEAgc3RhdGljIHZvaWQganVtcElmRWxlbWVudElzTm90RW1wdHkoQXNzZQogICAg
IG5vTW9yZUNoaWxkcmVuLmxpbmsoJmFzc2VtYmxlcik7CiB9CiAKLXN0YXRpYyB2b2lkIHNldEVs
ZW1lbnRTdHlsZUlzQWZmZWN0ZWRCeUVtcHR5KEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgZWxl
bWVudC0+c2V0U3R5bGVBZmZlY3RlZEJ5RW1wdHkoKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0RWxl
bWVudFN0eWxlRnJvbUNvbnRleHRJc0FmZmVjdGVkQnlFbXB0eUFuZFVwZGF0ZVJlbmRlclN0eWxl
SWZOZWNlc3NhcnkoU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQqIGNvbnRleHQsIGJv
b2wgaXNFbXB0eSkKLXsKLSAgICBBU1NFUlQoY29udGV4dC0+ZWxlbWVudFN0eWxlKTsKLSAgICBj
b250ZXh0LT5lbGVtZW50U3R5bGUtPnNldEVtcHR5U3RhdGUoaXNFbXB0eSk7Ci19Ci0KLXZvaWQg
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc0VtcHR5KEFzc2VtYmxlcjo6
SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQp
Cit2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNFbXB0eShBc3Nl
bWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKQog
ewogICAgIGlmIChtX3NlbGVjdG9yQ29udGV4dCA9PSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2Vs
ZWN0b3IpIHsKICAgICAgICAganVtcElmRWxlbWVudElzTm90RW1wdHkobV9hc3NlbWJsZXIsIG1f
cmVnaXN0ZXJBbGxvY2F0b3IsIGZhaWx1cmVDYXNlcywgZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7
CkBAIC0zMTU1LDM4ICszMTEyLDE3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZUVsZW0KICAgICBtX2Fzc2VtYmxlci5tb3ZlKEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEp
LCBpc0VtcHR5UmVzdWx0cyk7CiAgICAgbm90RW1wdHkubGluaygmbV9hc3NlbWJsZXIpOwogCi0g
ICAgQXNzZW1ibGVyOjpKdW1wIHNraXBNYXJraW5nOwotICAgIGlmIChmcmFnbWVudE1hdGNoZXNU
aGVSaWdodG1vc3RFbGVtZW50KG1fc2VsZWN0b3JDb250ZXh0LCBmcmFnbWVudCkpIHsKLSAgICAg
ICAgewotICAgICAgICAgICAgTG9jYWxSZWdpc3RlciBjaGVja2luZ0NvbnRleHQobV9yZWdpc3Rl
ckFsbG9jYXRvcik7Ci0gICAgICAgICAgICBza2lwTWFya2luZyA9IGp1bXBJZk5vdFJlc29sdmlu
Z1N0eWxlKGNoZWNraW5nQ29udGV4dCk7CisgICAgTG9jYWxSZWdpc3RlciBjaGVja2luZ0NvbnRl
eHQobV9yZWdpc3RlckFsbG9jYXRvcik7CisgICAgQXNzZW1ibGVyOjpKdW1wIG5vdFJlc29sdmlu
Z1N0eWxlID0ganVtcElmTm90UmVzb2x2aW5nU3R5bGUoY2hlY2tpbmdDb250ZXh0KTsKIAotICAg
ICAgICAgICAgRnVuY3Rpb25DYWxsIGZ1bmN0aW9uQ2FsbChtX2Fzc2VtYmxlciwgbV9yZWdpc3Rl
ckFsbG9jYXRvciwgbV9zdGFja0FsbG9jYXRvciwgbV9mdW5jdGlvbkNhbGxzKTsKLSAgICAgICAg
ICAgIGZ1bmN0aW9uQ2FsbC5zZXRGdW5jdGlvbkFkZHJlc3Moc2V0RWxlbWVudFN0eWxlRnJvbUNv
bnRleHRJc0FmZmVjdGVkQnlFbXB0eUFuZFVwZGF0ZVJlbmRlclN0eWxlSWZOZWNlc3NhcnkpOwot
ICAgICAgICAgICAgZnVuY3Rpb25DYWxsLnNldFR3b0FyZ3VtZW50cyhjaGVja2luZ0NvbnRleHQs
IGlzRW1wdHlSZXN1bHRzKTsKLSAgICAgICAgICAgIGZ1bmN0aW9uQ2FsbC5jYWxsKCk7Ci0gICAg
ICAgIH0KKyAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudEFkZHJl
c3NSZWdpc3RlciwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5RW1w
dHksIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRChpc0VtcHR5UmVzdWx0cykpOwogCi0gICAgICAgIEZ1
bmN0aW9uQ2FsbCBmdW5jdGlvbkNhbGwobV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJBbGxvY2F0b3Is
IG1fc3RhY2tBbGxvY2F0b3IsIG1fZnVuY3Rpb25DYWxscyk7Ci0gICAgICAgIGZ1bmN0aW9uQ2Fs
bC5zZXRGdW5jdGlvbkFkZHJlc3Moc2V0RWxlbWVudFN0eWxlSXNBZmZlY3RlZEJ5RW1wdHkpOwot
ICAgICAgICBmdW5jdGlvbkNhbGwuc2V0T25lQXJndW1lbnQoZWxlbWVudEFkZHJlc3NSZWdpc3Rl
cik7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5jYWxsKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
ewotICAgICAgICAgICAgTG9jYWxSZWdpc3RlciBjaGVja2luZ0NvbnRleHQobV9yZWdpc3RlckFs
bG9jYXRvcik7Ci0gICAgICAgICAgICBza2lwTWFya2luZyA9IGp1bXBJZk5vdFJlc29sdmluZ1N0
eWxlKGNoZWNraW5nQ29udGV4dCk7Ci0gICAgICAgIH0KLSAgICAgICAgRnVuY3Rpb25DYWxsIGZ1
bmN0aW9uQ2FsbChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9zdGFja0FsbG9j
YXRvciwgbV9mdW5jdGlvbkNhbGxzKTsKLSAgICAgICAgZnVuY3Rpb25DYWxsLnNldEZ1bmN0aW9u
QWRkcmVzcyhzZXRFbGVtZW50U3R5bGVJc0FmZmVjdGVkQnlFbXB0eSk7Ci0gICAgICAgIGZ1bmN0
aW9uQ2FsbC5zZXRPbmVBcmd1bWVudChlbGVtZW50QWRkcmVzc1JlZ2lzdGVyKTsKLSAgICAgICAg
ZnVuY3Rpb25DYWxsLmNhbGwoKTsKLSAgICB9Ci0gICAgc2tpcE1hcmtpbmcubGluaygmbV9hc3Nl
bWJsZXIpOworICAgIG5vdFJlc29sdmluZ1N0eWxlLmxpbmsoJm1fYXNzZW1ibGVyKTsKIAogICAg
IGZhaWx1cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6
WmVybywgaXNFbXB0eVJlc3VsdHMpKTsKIH0KIAotdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6
OmdlbmVyYXRlRWxlbWVudElzRmlyc3RDaGlsZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJl
Q2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQordm9pZCBTZWxlY3RvckNv
ZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudElzRmlyc3RDaGlsZChBc3NlbWJsZXI6Okp1bXBM
aXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKQogewogICAgIGlmICht
X3NlbGVjdG9yQ29udGV4dCA9PSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpIHsKICAg
ICAgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBzdWNjZXNzQ2FzZSA9IGp1bXBJZk5vUHJldmlvdXNB
ZGphY2VudEVsZW1lbnQoKTsKQEAgLTMyMTYsMjIgKzMxNTIsMTQgQEAgdm9pZCBTZWxlY3RvckNv
ZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogICAgIExvY2FsUmVnaXN0ZXIgY2hlY2tpbmdDb250
ZXh0KG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwogICAgIEFzc2VtYmxlcjo6SnVtcCBub3RSZXNvbHZp
bmdTdHlsZSA9IGp1bXBJZk5vdFJlc29sdmluZ1N0eWxlKGNoZWNraW5nQ29udGV4dCk7CiAKLSAg
ICBzZXROb2RlRmxhZyhtX2Fzc2VtYmxlciwgcGFyZW50RWxlbWVudCwgTm9kZTo6ZmxhZ0NoaWxk
cmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlc0ZsYWcoKSk7CisgICAgYWRkU3R5bGVSZWxhdGlv
bihjaGVja2luZ0NvbnRleHQsIHBhcmVudEVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVS
ZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKTsKICAgICBtX3JlZ2lz
dGVyQWxsb2NhdG9yLmRlYWxsb2NhdGVSZWdpc3RlcihwYXJlbnRFbGVtZW50KTsKIAogICAgIC8v
IFRoZSBwYXJlbnQgbWFya2luZyBpcyB1bmNvbmRpdGlvbmFsLiBJZiB0aGUgbWF0Y2hpbmcgaXMg
bm90IGEgc3VjY2Vzcywgd2UgY2FuIG5vdyBmYWlsLgogICAgIC8vIE90aGVyd2lzZSB3ZSBuZWVk
IHRvIGFwcGx5IHNldEZpcnN0Q2hpbGRTdGF0ZSgpIG9uIHRoZSBSZW5kZXJTdHlsZS4KICAgICBm
YWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Ok5v
blplcm8sIGlzRmlyc3RDaGlsZFJlZ2lzdGVyKSk7CiAKLSAgICBpZiAoZnJhZ21lbnRNYXRjaGVz
VGhlUmlnaHRtb3N0RWxlbWVudChtX3NlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnQpKQotICAgICAg
ICBhZGRGbGFnc1RvRWxlbWVudFN0eWxlRnJvbUNvbnRleHQoY2hlY2tpbmdDb250ZXh0LCBSZW5k
ZXJTdHlsZTo6Tm9uSW5oZXJpdGVkRmxhZ3M6OnNldEZpcnN0Q2hpbGRTdGF0ZUZsYWdzKCkpOwot
ICAgIGVsc2UgewotICAgICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVy
LCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMp
OwotICAgICAgICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRyZXNzKHNldEZpcnN0Q2hpbGRT
dGF0ZSk7Ci0gICAgICAgIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50QWRkcmVzcyA9IGVs
ZW1lbnRBZGRyZXNzUmVnaXN0ZXI7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRPbmVBcmd1bWVu
dChlbGVtZW50QWRkcmVzcyk7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5jYWxsKCk7Ci0gICAgfQor
ICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50QWRkcmVzc1JlZ2lz
dGVyLCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkZpcnN0Q2hpbGQpOwogCiAgICAg
bm90UmVzb2x2aW5nU3R5bGUubGluaygmbV9hc3NlbWJsZXIpOwogICAgIGZhaWx1cmVDYXNlcy5h
cHBlbmQobV9hc3NlbWJsZXIuYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6Tm9uWmVybywgaXNGaXJz
dENoaWxkUmVnaXN0ZXIpKTsKQEAgLTMyNDIsMTMgKzMxNzAsNiBAQCBzdGF0aWMgYm9vbCBlbGVt
ZW50SXNIb3ZlcmVkKEVsZW1lbnQqIGVsCiAgICAgcmV0dXJuIGVsZW1lbnQtPmhvdmVyZWQoKSB8
fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoKmVsZW1lbnQsIENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hvdmVyKTsKIH0KIAotc3RhdGljIGJvb2wgZWxlbWVudElz
SG92ZXJlZEZvclN0eWxlUmVzb2x1dGlvbihFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTZWxlY3Rv
ckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCogY2hlY2tpbmdDb250ZXh0KQotewotICAgIGlmIChj
aGVja2luZ0NvbnRleHQtPnJlc29sdmluZ01vZGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpS
ZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgZWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5SG92
ZXIoKTsKLSAgICByZXR1cm4gZWxlbWVudC0+aG92ZXJlZCgpIHx8IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZSgqZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVkb0Ns
YXNzSG92ZXIpOwotfQotCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVt
ZW50SXNIb3ZlcmVkKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2Vs
ZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCiB7CiAgICAgZ2VuZXJhdGVTcGVjaWFsRmFpbHVyZUlu
UXVpcmtzTW9kZUZvckFjdGl2ZUFuZEhvdmVySWZOZWVkZWQoZmFpbHVyZUNhc2VzLCBmcmFnbWVu
dCk7CkBAIC0zMjYwLDI2ICszMTgxLDEyIEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZUVsZW0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChmcmFnbWVudE1h
dGNoZXNUaGVSaWdodG1vc3RFbGVtZW50KG1fc2VsZWN0b3JDb250ZXh0LCBmcmFnbWVudCkpIHsK
LSAgICAgICAgTG9jYWxSZWdpc3RlcldpdGhQcmVmZXJlbmNlIGNoZWNraW5nQ29udGV4dChtX3Jl
Z2lzdGVyQWxsb2NhdG9yLCBKU0M6OkdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIEFz
c2VtYmxlcjo6SnVtcCBub3RSZXNvbHZpbmdTdHlsZSA9IGp1bXBJZk5vdFJlc29sdmluZ1N0eWxl
KGNoZWNraW5nQ29udGV4dCk7Ci0gICAgICAgIGFkZEZsYWdzVG9FbGVtZW50U3R5bGVGcm9tQ29u
dGV4dChjaGVja2luZ0NvbnRleHQsIFJlbmRlclN0eWxlOjpOb25Jbmhlcml0ZWRGbGFnczo6Zmxh
Z0lzYWZmZWN0ZWRCeUhvdmVyKCkpOwotICAgICAgICBub3RSZXNvbHZpbmdTdHlsZS5saW5rKCZt
X2Fzc2VtYmxlcik7Ci0KLSAgICAgICAgRnVuY3Rpb25DYWxsIGZ1bmN0aW9uQ2FsbChtX2Fzc2Vt
YmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9zdGFja0FsbG9jYXRvciwgbV9mdW5jdGlvbkNh
bGxzKTsKLSAgICAgICAgZnVuY3Rpb25DYWxsLnNldEZ1bmN0aW9uQWRkcmVzcyhlbGVtZW50SXNI
b3ZlcmVkKTsKLSAgICAgICAgZnVuY3Rpb25DYWxsLnNldE9uZUFyZ3VtZW50KGVsZW1lbnRBZGRy
ZXNzUmVnaXN0ZXIpOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGZ1bmN0aW9uQ2FsbC5j
YWxsQW5kQnJhbmNoT25Cb29sZWFuUmV0dXJuVmFsdWUoQXNzZW1ibGVyOjpaZXJvKSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCA9
IG1fcmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVSZWdpc3RlcldpdGhQcmVmZXJlbmNlKEpTQzo6
R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgbG9hZENoZWNraW5nQ29udGV4dChjaGVj
a2luZ0NvbnRleHQpOwotICAgICAgICBtX3JlZ2lzdGVyQWxsb2NhdG9yLmRlYWxsb2NhdGVSZWdp
c3RlcihjaGVja2luZ0NvbnRleHQpOworICAgIGFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0
eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlv
bjo6QWZmZWN0ZWRCeUhvdmVyKTsKIAotICAgICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxs
KG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1
bmN0aW9uQ2FsbHMpOwotICAgICAgICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRyZXNzKGVs
ZW1lbnRJc0hvdmVyZWRGb3JTdHlsZVJlc29sdXRpb24pOwotICAgICAgICBmdW5jdGlvbkNhbGwu
c2V0VHdvQXJndW1lbnRzKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIGNoZWNraW5nQ29udGV4dCk7
Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoZnVuY3Rpb25DYWxsLmNhbGxBbmRCcmFuY2hP
bkJvb2xlYW5SZXR1cm5WYWx1ZShBc3NlbWJsZXI6Olplcm8pKTsKLSAgICB9CisgICAgRnVuY3Rp
b25DYWxsIGZ1bmN0aW9uQ2FsbChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9z
dGFja0FsbG9jYXRvciwgbV9mdW5jdGlvbkNhbGxzKTsKKyAgICBmdW5jdGlvbkNhbGwuc2V0RnVu
Y3Rpb25BZGRyZXNzKGVsZW1lbnRJc0hvdmVyZWQpOworICAgIGZ1bmN0aW9uQ2FsbC5zZXRPbmVB
cmd1bWVudChlbGVtZW50QWRkcmVzc1JlZ2lzdGVyKTsKKyAgICBmYWlsdXJlQ2FzZXMuYXBwZW5k
KGZ1bmN0aW9uQ2FsbC5jYWxsQW5kQnJhbmNoT25Cb29sZWFuUmV0dXJuVmFsdWUoQXNzZW1ibGVy
OjpaZXJvKSk7CiB9CiAKIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1l
bnRJc0luTGFuZ3VhZ2UoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBT
ZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCkKQEAgLTMzMDAsMTMgKzMyMDcsNyBAQCB2b2lkIFNl
bGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAgICAgZmFpbHVyZUNhc2VzLmFwcGVu
ZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVyblZhbHVlKEFzc2VtYmxl
cjo6WmVybykpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRMYXN0Q2hpbGRTdGF0ZShFbGVtZW50KiBl
bGVtZW50KQotewotICAgIGlmIChSZW5kZXJTdHlsZSogc3R5bGUgPSBlbGVtZW50LT5yZW5kZXJT
dHlsZSgpKQotICAgICAgICBzdHlsZS0+c2V0TGFzdENoaWxkU3RhdGUoKTsKLX0KLQotdm9pZCBT
ZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudElzTGFzdENoaWxkKEFzc2VtYmxl
cjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21l
bnQpCit2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNMYXN0Q2hp
bGQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdt
ZW50JikKIHsKICAgICBpZiAobV9zZWxlY3RvckNvbnRleHQgPT0gU2VsZWN0b3JDb250ZXh0OjpR
dWVyeVNlbGVjdG9yKSB7CiAgICAgICAgIEFzc2VtYmxlcjo6SnVtcExpc3Qgc3VjY2Vzc0Nhc2Ug
PSBqdW1wSWZOb05leHRBZGphY2VudEVsZW1lbnQoKTsKQEAgLTMzNDIsMzYgKzMyNDMsMjAgQEAg
dm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogICAgIExvY2FsUmVnaXN0
ZXIgY2hlY2tpbmdDb250ZXh0KG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwogICAgIEFzc2VtYmxlcjo6
SnVtcCBub3RSZXNvbHZpbmdTdHlsZSA9IGp1bXBJZk5vdFJlc29sdmluZ1N0eWxlKGNoZWNraW5n
Q29udGV4dCk7CiAKLSAgICBzZXROb2RlRmxhZyhtX2Fzc2VtYmxlciwgcGFyZW50RWxlbWVudCwg
Tm9kZTo6ZmxhZ0NoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzRmxhZygpKTsKKyAgICBh
ZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgcGFyZW50RWxlbWVudCwgU2VsZWN0b3JD
aGVja2VyOjpTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcyk7
CiAgICAgbV9yZWdpc3RlckFsbG9jYXRvci5kZWFsbG9jYXRlUmVnaXN0ZXIocGFyZW50RWxlbWVu
dCk7CiAKICAgICAvLyBUaGUgcGFyZW50IG1hcmtpbmcgaXMgdW5jb25kaXRpb25hbC4gSWYgdGhl
IG1hdGNoaW5nIGlzIG5vdCBhIHN1Y2Nlc3MsIHdlIGNhbiBub3cgZmFpbC4KICAgICAvLyBPdGhl
cndpc2Ugd2UgbmVlZCB0byBhcHBseSBzZXRMYXN0Q2hpbGRTdGF0ZSgpIG9uIHRoZSBSZW5kZXJT
dHlsZS4KICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihB
c3NlbWJsZXI6Ok5vblplcm8sIGlzTGFzdENoaWxkUmVnaXN0ZXIpKTsKIAotICAgIGlmIChmcmFn
bWVudE1hdGNoZXNUaGVSaWdodG1vc3RFbGVtZW50KG1fc2VsZWN0b3JDb250ZXh0LCBmcmFnbWVu
dCkpCi0gICAgICAgIGFkZEZsYWdzVG9FbGVtZW50U3R5bGVGcm9tQ29udGV4dChjaGVja2luZ0Nv
bnRleHQsIFJlbmRlclN0eWxlOjpOb25Jbmhlcml0ZWRGbGFnczo6c2V0TGFzdENoaWxkU3RhdGVG
bGFncygpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgRnVuY3Rpb25DYWxsIGZ1bmN0aW9uQ2FsbCht
X2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9zdGFja0FsbG9jYXRvciwgbV9mdW5j
dGlvbkNhbGxzKTsKLSAgICAgICAgZnVuY3Rpb25DYWxsLnNldEZ1bmN0aW9uQWRkcmVzcyhzZXRM
YXN0Q2hpbGRTdGF0ZSk7Ci0gICAgICAgIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50QWRk
cmVzcyA9IGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXI7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRP
bmVBcmd1bWVudChlbGVtZW50QWRkcmVzcyk7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5jYWxsKCk7
Ci0gICAgfQorICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50QWRk
cmVzc1JlZ2lzdGVyLCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246Okxhc3RDaGlsZCk7
CiAKICAgICBub3RSZXNvbHZpbmdTdHlsZS5saW5rKCZtX2Fzc2VtYmxlcik7CiAgICAgZmFpbHVy
ZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2hUZXN0MzIoQXNzZW1ibGVyOjpOb25aZXJv
LCBpc0xhc3RDaGlsZFJlZ2lzdGVyKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldE9ubHlDaGlsZFN0
YXRlKEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKFJlbmRlclN0eWxlKiBzdHlsZSA9IGVs
ZW1lbnQtPnJlbmRlclN0eWxlKCkpIHsKLSAgICAgICAgc3R5bGUtPnNldEZpcnN0Q2hpbGRTdGF0
ZSgpOwotICAgICAgICBzdHlsZS0+c2V0TGFzdENoaWxkU3RhdGUoKTsKLSAgICB9Ci19Ci0KLXZv
aWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc09ubHlDaGlsZChBc3Nl
bWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZy
YWdtZW50KQordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudElzT25s
eUNoaWxkKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JG
cmFnbWVudCYpCiB7CiAgICAgLy8gSXMgT25seSBjaGlsZCBpcyBwcmV0dHkgbXVjaCBhIGNvbWJp
bmF0aW9uIG9mIGlzRmlyc3RDaGlsZCArIGlzTGFzdENoaWxkLiBUaGUgbWFpbiBkaWZmZXJlbmNl
IGlzIHRoYXQgdHJlZSBtYXJraW5nIGlzIGNvbWJpbmVkLgogICAgIGlmIChtX3NlbGVjdG9yQ29u
dGV4dCA9PSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpIHsKQEAgLTM0MTcsNDQgKzMz
MDIsMjcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogICAgIExv
Y2FsUmVnaXN0ZXIgY2hlY2tpbmdDb250ZXh0KG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwogICAgIEFz
c2VtYmxlcjo6SnVtcCBub3RSZXNvbHZpbmdTdHlsZSA9IGp1bXBJZk5vdFJlc29sdmluZ1N0eWxl
KGNoZWNraW5nQ29udGV4dCk7CiAKLSAgICBzZXROb2RlRmxhZyhtX2Fzc2VtYmxlciwgcGFyZW50
RWxlbWVudCwgTm9kZTo6ZmxhZ0NoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlc0ZsYWco
KSB8IE5vZGU6OmZsYWdDaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlc0ZsYWcoKSk7Cisg
ICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIHBhcmVudEVsZW1lbnQsIFNlbGVj
dG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1
bGVzKTsKKyAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgcGFyZW50RWxlbWVu
dCwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlMYXN0
Q2hpbGRSdWxlcyk7CisKICAgICBtX3JlZ2lzdGVyQWxsb2NhdG9yLmRlYWxsb2NhdGVSZWdpc3Rl
cihwYXJlbnRFbGVtZW50KTsKIAogICAgIC8vIFRoZSBwYXJlbnQgbWFya2luZyBpcyB1bmNvbmRp
dGlvbmFsLiBJZiB0aGUgbWF0Y2hpbmcgaXMgbm90IGEgc3VjY2Vzcywgd2UgY2FuIG5vdyBmYWls
LgogICAgIC8vIE90aGVyd2lzZSB3ZSBuZWVkIHRvIGFwcGx5IHNldExhc3RDaGlsZFN0YXRlKCkg
b24gdGhlIFJlbmRlclN0eWxlLgogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIu
YnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6Tm9uWmVybywgaXNPbmx5Q2hpbGRSZWdpc3RlcikpOwog
Ci0gICAgaWYgKGZyYWdtZW50TWF0Y2hlc1RoZVJpZ2h0bW9zdEVsZW1lbnQobV9zZWxlY3RvckNv
bnRleHQsIGZyYWdtZW50KSkKLSAgICAgICAgYWRkRmxhZ3NUb0VsZW1lbnRTdHlsZUZyb21Db250
ZXh0KGNoZWNraW5nQ29udGV4dCwgUmVuZGVyU3R5bGU6Ok5vbkluaGVyaXRlZEZsYWdzOjpzZXRG
aXJzdENoaWxkU3RhdGVGbGFncygpIHwgUmVuZGVyU3R5bGU6Ok5vbkluaGVyaXRlZEZsYWdzOjpz
ZXRMYXN0Q2hpbGRTdGF0ZUZsYWdzKCkpOwotICAgIGVsc2UgewotICAgICAgICBGdW5jdGlvbkNh
bGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNr
QWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOwotICAgICAgICBmdW5jdGlvbkNhbGwuc2V0RnVu
Y3Rpb25BZGRyZXNzKHNldE9ubHlDaGlsZFN0YXRlKTsKLSAgICAgICAgQXNzZW1ibGVyOjpSZWdp
c3RlcklEIGVsZW1lbnRBZGRyZXNzID0gZWxlbWVudEFkZHJlc3NSZWdpc3RlcjsKLSAgICAgICAg
ZnVuY3Rpb25DYWxsLnNldE9uZUFyZ3VtZW50KGVsZW1lbnRBZGRyZXNzKTsKLSAgICAgICAgZnVu
Y3Rpb25DYWxsLmNhbGwoKTsKLSAgICB9CisgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0Nv
bnRleHQsIGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxh
dGlvbjo6Rmlyc3RDaGlsZCk7CisgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQs
IGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6
TGFzdENoaWxkKTsKIAogICAgIG5vdFJlc29sdmluZ1N0eWxlLmxpbmsoJm1fYXNzZW1ibGVyKTsK
ICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJs
ZXI6Ok5vblplcm8sIGlzT25seUNoaWxkUmVnaXN0ZXIpKTsKIH0KIAotc3RhdGljIGJvb2wgbWFr
ZUNvbnRleHRTdHlsZVVuaXF1ZUlmTmVjZXNzYXJ5QW5kVGVzdElzUGxhY2Vob2xkZXJTaG93bihF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCog
Y2hlY2tpbmdDb250ZXh0KQorc3RhdGljIGJvb2wgbWFrZUNvbnRleHRTdHlsZVVuaXF1ZUlmTmVj
ZXNzYXJ5QW5kVGVzdElzUGxhY2Vob2xkZXJTaG93bihFbGVtZW50KiBlbGVtZW50LCBTZWxlY3Rv
ckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCogY2hlY2tpbmdDb250ZXh0KQogewogICAgIGlmIChp
czxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7CiAgICAgICAgIGlmIChj
aGVja2luZ0NvbnRleHQtPnJlc29sdmluZ01vZGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpS
ZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgICAgIGNoZWNraW5nQ29udGV4dC0+ZWxlbWVudFN0eWxl
LT5zZXRVbmlxdWUoKTsKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50PigqZWxlbWVudCkuaXNQbGFjZWhvbGRlclZpc2libGUoKTsKLSAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBtYWtlRWxlbWVudFN0eWxlVW5pcXVlSWZO
ZWNlc3NhcnlBbmRUZXN0SXNQbGFjZWhvbGRlclNob3duKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0KiBjaGVja2luZ0NvbnRleHQpCi17Ci0g
ICAgaWYgKGlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKLSAgICAg
ICAgaWYgKGNoZWNraW5nQ29udGV4dC0+cmVzb2x2aW5nTW9kZSA9PSBTZWxlY3RvckNoZWNrZXI6
Ok1vZGU6OlJlc29sdmluZ1N0eWxlKSB7Ci0gICAgICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0
eWxlID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKSkKLSAgICAgICAgICAgICAgICBzdHlsZS0+c2V0
VW5pcXVlKCk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGNoZWNraW5nQ29udGV4dC0+c3R5bGVS
ZWxhdGlvbnMuYXBwZW5kKHsgKmVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlv
bjo6VW5pcXVlLCAxIH0pOwogICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQ+KCplbGVtZW50KS5pc1BsYWNlaG9sZGVyVmlzaWJsZSgpOwogICAgIH0KICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0zNDY1LDcgKzMzMzMsNyBAQCBzdGF0aWMgYm9vbCBpc1BsYWNl
aG9sZGVyU2hvd24oRWxlbWVudCogCiAgICAgcmV0dXJuIGlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+
KCplbGVtZW50KS5pc1BsYWNlaG9sZGVyVmlzaWJsZSgpOwogfQogCi12b2lkIFNlbGVjdG9yQ29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SGFzUGxhY2Vob2xkZXJTaG93bihBc3NlbWJsZXI6
Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50
KQordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudEhhc1BsYWNlaG9s
ZGVyU2hvd24oQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3Rv
ckZyYWdtZW50JikKIHsKICAgICBpZiAobV9zZWxlY3RvckNvbnRleHQgPT0gU2VsZWN0b3JDb250
ZXh0OjpRdWVyeVNlbGVjdG9yKSB7CiAgICAgICAgIEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbkNhbGwo
bV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJBbGxvY2F0b3IsIG1fc3RhY2tBbGxvY2F0b3IsIG1fZnVu
Y3Rpb25DYWxscyk7CkBAIC0zNDgwLDEwICszMzQ4LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlRWxlbQogICAgIG1fcmVnaXN0ZXJBbGxvY2F0b3IuZGVhbGxvY2F0ZVJl
Z2lzdGVyKGNoZWNraW5nQ29udGV4dCk7CiAKICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxs
KG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1
bmN0aW9uQ2FsbHMpOwotICAgIGlmIChmcmFnbWVudE1hdGNoZXNUaGVSaWdodG1vc3RFbGVtZW50
KG1fc2VsZWN0b3JDb250ZXh0LCBmcmFnbWVudCkpCi0gICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRG
dW5jdGlvbkFkZHJlc3MobWFrZUNvbnRleHRTdHlsZVVuaXF1ZUlmTmVjZXNzYXJ5QW5kVGVzdElz
UGxhY2Vob2xkZXJTaG93bik7Ci0gICAgZWxzZQotICAgICAgICBmdW5jdGlvbkNhbGwuc2V0RnVu
Y3Rpb25BZGRyZXNzKG1ha2VFbGVtZW50U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRlc3RJc1Bs
YWNlaG9sZGVyU2hvd24pOworICAgIGZ1bmN0aW9uQ2FsbC5zZXRGdW5jdGlvbkFkZHJlc3MobWFr
ZUNvbnRleHRTdHlsZVVuaXF1ZUlmTmVjZXNzYXJ5QW5kVGVzdElzUGxhY2Vob2xkZXJTaG93bik7
CiAgICAgZnVuY3Rpb25DYWxsLnNldFR3b0FyZ3VtZW50cyhlbGVtZW50QWRkcmVzc1JlZ2lzdGVy
LCBjaGVja2luZ0NvbnRleHQpOwogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoZnVuY3Rpb25DYWxs
LmNhbGxBbmRCcmFuY2hPbkJvb2xlYW5SZXR1cm5WYWx1ZShBc3NlbWJsZXI6Olplcm8pKTsKIH0K
QEAgLTM1ODUsMTEgKzM0NTAsNiBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJh
dGVFbGVtCiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2hUZXN0MzIo
QXNzZW1ibGVyOjpaZXJvLCBBc3NlbWJsZXI6OkFkZHJlc3MoZWxlbWVudEFkZHJlc3NSZWdpc3Rl
ciwgTm9kZTo6bm9kZUZsYWdzTWVtb3J5T2Zmc2V0KCkpLCBBc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihOb2RlOjpmbGFnSXNMaW5rKCkpKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldEVsZW1lbnRDaGls
ZEluZGV4KEVsZW1lbnQqIGVsZW1lbnQsIGludCBpbmRleCkKLXsKLSAgICBlbGVtZW50LT5zZXRD
aGlsZEluZGV4KGluZGV4KTsKLX0KLQogc3RhdGljIGJvb2wgbnRoRmlsdGVySXNBbHdheXNTYXRp
c2lmaWVkKGludCBhLCBpbnQgYikKIHsKICAgICAvLyBBbnl0aGluZyBtb2R1bG8gMSBpcyB6ZXJv
LiBVbmxlc3MgYiByZXN0cmljdHMgdGhlIHJhbmdlLCB0aGlzIGRvZXMgbm90IGZpbHRlciBhbnl0
aGluZyBvdXQuCkBAIC0zNjE2LDcgKzM0NzYsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVFbGVtCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghaXNBZGphY2VudFJl
bGF0aW9uKGZyYWdtZW50LnJlbGF0aW9uVG9SaWdodEZyYWdtZW50KSkKLSAgICAgICAgbWFya0Vs
ZW1lbnRJZlJlc29sdmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIE5vZGU6OmZsYWdT
dHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpKTsKKyAgICAgICAgYWRkU3R5bGVSZWxh
dGlvbklmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU2VsZWN0b3JDaGVj
a2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsKIAogICAgIC8v
IFNldHVwIHRoZSBjb3VudGVyIGF0IDEuCiAgICAgTG9jYWxSZWdpc3RlcldpdGhQcmVmZXJlbmNl
IGVsZW1lbnRDb3VudGVyKG1fcmVnaXN0ZXJBbGxvY2F0b3IsIEpTQzo6R1BSSW5mbzo6YXJndW1l
bnRHUFIxKTsKQEAgLTM2MzQsNyArMzQ5NCw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9y
OjpnZW5lcmF0ZUVsZW0KIAogICAgICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IG5vQ2FjaGVkQ2hp
bGRJbmRleENhc2VzOwogICAgICAgICBnZW5lcmF0ZVdhbGtUb1ByZXZpb3VzQWRqYWNlbnRFbGVt
ZW50KG5vTW9yZVNpYmxpbmdzQ2FzZXMsIHByZXZpb3VzU2libGluZyk7Ci0gICAgICAgIG1hcmtF
bGVtZW50SWZSZXNvbHZpbmdTdHlsZShwcmV2aW91c1NpYmxpbmcsIE5vZGU6OmZsYWdBZmZlY3Rz
TmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKSk7CisgICAgICAgIGFkZFN0eWxlUmVsYXRpb25JZlJl
c29sdmluZ1N0eWxlKHByZXZpb3VzU2libGluZywgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0
aW9uOjpBZmZlY3RzTmV4dFNpYmxpbmcpOwogICAgICAgICBub0NhY2hlZENoaWxkSW5kZXhDYXNl
cy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6WmVybywgQXNzZW1i
bGVyOjpBZGRyZXNzKHByZXZpb3VzU2libGluZywgTm9kZTo6bm9kZUZsYWdzTWVtb3J5T2Zmc2V0
KCkpLCBBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihOb2RlOjpmbGFnSGFzUmFyZURhdGEoKSkpKTsK
ICAgICAgICAgewogICAgICAgICAgICAgTG9jYWxSZWdpc3RlciBlbGVtZW50UmFyZURhdGEobV9y
ZWdpc3RlckFsbG9jYXRvcik7CkBAIC0zNjUwLDcgKzM1MTAsNyBAQCB2b2lkIFNlbGVjdG9yQ29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAKICAgICAgICAgQXNzZW1ibGVyOjpMYWJlbCBsb29w
U3RhcnQgPSBtX2Fzc2VtYmxlci5sYWJlbCgpOwogICAgICAgICBnZW5lcmF0ZVdhbGtUb1ByZXZp
b3VzQWRqYWNlbnRFbGVtZW50KG5vTW9yZVNpYmxpbmdzQ2FzZXMsIHByZXZpb3VzU2libGluZyk7
Ci0gICAgICAgIG1hcmtFbGVtZW50SWZSZXNvbHZpbmdTdHlsZShwcmV2aW91c1NpYmxpbmcsIE5v
ZGU6OmZsYWdBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKSk7CisgICAgICAgIGFkZFN0
eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKHByZXZpb3VzU2libGluZywgU2VsZWN0b3JDaGVj
a2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RzTmV4dFNpYmxpbmcpOwogICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGQzMihBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgZWxlbWVudENvdW50ZXIpOwog
ICAgICAgICBtX2Fzc2VtYmxlci5qdW1wKCkubGlua1RvKGxvb3BTdGFydCwgJm1fYXNzZW1ibGVy
KTsKICAgICAgICAgbm9Nb3JlU2libGluZ3NDYXNlcy5saW5rKCZtX2Fzc2VtYmxlcik7CkBAIC0z
NjYxLDExICszNTIxLDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxl
bQogICAgICAgICBMb2NhbFJlZ2lzdGVyIGNoZWNraW5nQ29udGV4dChtX3JlZ2lzdGVyQWxsb2Nh
dG9yKTsKICAgICAgICAgQXNzZW1ibGVyOjpKdW1wIG5vdFJlc29sdmluZ1N0eWxlID0ganVtcElm
Tm90UmVzb2x2aW5nU3R5bGUoY2hlY2tpbmdDb250ZXh0KTsKIAotICAgICAgICBBc3NlbWJsZXI6
OlJlZ2lzdGVySUQgZWxlbWVudEFkZHJlc3MgPSBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyOwotICAg
ICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxs
b2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOwotICAgICAgICBmdW5j
dGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRyZXNzKHNldEVsZW1lbnRDaGlsZEluZGV4KTsKLSAgICAg
ICAgZnVuY3Rpb25DYWxsLnNldFR3b0FyZ3VtZW50cyhlbGVtZW50QWRkcmVzcywgZWxlbWVudENv
dW50ZXIpOwotICAgICAgICBmdW5jdGlvbkNhbGwuY2FsbCgpOworICAgICAgICBhZGRTdHlsZVJl
bGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU2VsZWN0b3JD
aGVja2VyOjpTdHlsZVJlbGF0aW9uOjpOdGhDaGlsZEluZGV4LCBBc3NlbWJsZXI6OlJlZ2lzdGVy
SUQoZWxlbWVudENvdW50ZXIpKTsKIAogICAgICAgICBub3RSZXNvbHZpbmdTdHlsZS5saW5rKCZt
X2Fzc2VtYmxlcik7CiAgICAgfQpAQCAtMzY5NSw3ICszNTUxLDcgQEAgdm9pZCBTZWxlY3RvckNv
ZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWlz
QWRqYWNlbnRSZWxhdGlvbihmcmFnbWVudC5yZWxhdGlvblRvUmlnaHRGcmFnbWVudCkpCi0gICAg
ICAgIG1hcmtFbGVtZW50SWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBO
b2RlOjpmbGFnU3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoKSk7CisgICAgICAgIGFk
ZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNl
bGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyk7
CiAKICAgICBmb3IgKGNvbnN0IE50aENoaWxkT2ZTZWxlY3RvckluZm8qIG50aENoaWxkT2ZTZWxl
Y3RvckluZm8gOiB2YWxpZFN1YnNldEZpbHRlcnMpIHsKICAgICAgICAgLy8gU2V0dXAgdGhlIGNv
dW50ZXIgYXQgMS4KQEAgLTM3MTIsNyArMzU2OCw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZUVsZW0KICAgICAgICAgICAgIEFzc2VtYmxlcjo6TGFiZWwgbG9vcFN0YXJ0
ID0gbV9hc3NlbWJsZXIubGFiZWwoKTsKIAogICAgICAgICAgICAgZ2VuZXJhdGVXYWxrVG9QcmV2
aW91c0FkamFjZW50RWxlbWVudChub01vcmVTaWJsaW5nc0Nhc2VzLCBwcmV2aW91c1NpYmxpbmcp
OwotICAgICAgICAgICAgbWFya0VsZW1lbnRJZlJlc29sdmluZ1N0eWxlKHByZXZpb3VzU2libGlu
ZywgTm9kZTo6ZmxhZ0FmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAg
ICAgIGFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKHByZXZpb3VzU2libGluZywgU2Vs
ZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RzTmV4dFNpYmxpbmcpOwogCiAgICAg
ICAgICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IGxvY2FsRmFpbHVyZUNhc2VzOwogICAgICAgICAg
ICAgZ2VuZXJhdGVFbGVtZW50TWF0Y2hlc1NlbGVjdG9yTGlzdChsb2NhbEZhaWx1cmVDYXNlcywg
cHJldmlvdXNTaWJsaW5nLCBudGhDaGlsZE9mU2VsZWN0b3JJbmZvLT5zZWxlY3Rvckxpc3QpOwpA
QCAtMzcyNywxMSArMzU4Myw2IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0
ZUVsZW0KICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIHNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3
YXJkUG9zaXRpb25hbFJ1bGVzKEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgZWxlbWVudC0+c2V0
Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKLX0KLQogdm9pZCBT
ZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudElzTnRoTGFzdENoaWxkKEFzc2Vt
Ymxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJh
Z21lbnQpCiB7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxpbnQsIGludD4sIDMyPiB2YWxpZFN1YnNl
dEZpbHRlcnM7CkBAIC0zNzQwLDIwICszNTkxLDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0
b3I6OmdlbmVyYXRlRWxlbQogICAgICAgICBMb2NhbFJlZ2lzdGVyIHBhcmVudEVsZW1lbnQobV9y
ZWdpc3RlckFsbG9jYXRvcik7CiAgICAgICAgIGdlbmVyYXRlV2Fsa1RvUGFyZW50RWxlbWVudChm
YWlsdXJlQ2FzZXMsIHBhcmVudEVsZW1lbnQpOwogCi0gICAgICAgIGlmIChtX3NlbGVjdG9yQ29u
dGV4dCAhPSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpIHsKLSAgICAgICAgICAgIEFz
c2VtYmxlcjo6SnVtcCBza2lwTWFya2luZzsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBMb2NhbFJlZ2lzdGVyIGNoZWNraW5nQ29udGV4dChtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKLSAg
ICAgICAgICAgICAgICBza2lwTWFya2luZyA9IGp1bXBJZk5vdFJlc29sdmluZ1N0eWxlKGNoZWNr
aW5nQ29udGV4dCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEZ1bmN0aW9uQ2FsbCBm
dW5jdGlvbkNhbGwobV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJBbGxvY2F0b3IsIG1fc3RhY2tBbGxv
Y2F0b3IsIG1fZnVuY3Rpb25DYWxscyk7Ci0gICAgICAgICAgICBmdW5jdGlvbkNhbGwuc2V0RnVu
Y3Rpb25BZGRyZXNzKHNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVz
KTsKLSAgICAgICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRPbmVBcmd1bWVudChwYXJlbnRFbGVtZW50
KTsKLSAgICAgICAgICAgIGZ1bmN0aW9uQ2FsbC5jYWxsKCk7Ci0KLSAgICAgICAgICAgIHNraXBN
YXJraW5nLmxpbmsoJm1fYXNzZW1ibGVyKTsKLSAgICAgICAgfQorICAgICAgICBhZGRTdHlsZVJl
bGF0aW9uSWZSZXNvbHZpbmdTdHlsZShwYXJlbnRFbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlN0
eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsK
IAogICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihB
c3NlbWJsZXI6Olplcm8sIEFzc2VtYmxlcjo6QWRkcmVzcyhwYXJlbnRFbGVtZW50LCBOb2RlOjpu
b2RlRmxhZ3NNZW1vcnlPZmZzZXQoKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5vZGU6OmZs
YWdJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkKCkpKSk7CiAKQEAgLTM3ODgsMTMgKzM2MjYsNiBA
QCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAgICAgICAgIGdlbmVy
YXRlTnRoRmlsdGVyVGVzdChmYWlsdXJlQ2FzZXMsIGVsZW1lbnRDb3VudGVyLCBzbG90LmZpcnN0
LCBzbG90LnNlY29uZCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldFBhcmVudEFmZmVjdGVkQnlMYXN0
Q2hpbGRPZihFbGVtZW50KiBwYXJlbnRFbGVtZW50KQotewotICAgIEFTU0VSVChwYXJlbnRFbGVt
ZW50KTsKLSAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJh
c2VkQmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKLSAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGls
ZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOwotfQotCiB2b2lkIFNlbGVj
dG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNOdGhMYXN0Q2hpbGRPZihBc3NlbWJs
ZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdt
ZW50KQogewogICAgIFZlY3Rvcjxjb25zdCBOdGhDaGlsZE9mU2VsZWN0b3JJbmZvKj4gdmFsaWRT
dWJzZXRGaWx0ZXJzOwpAQCAtMzgwMywyMCArMzYzNCw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICAgICAgTG9jYWxSZWdpc3RlciBwYXJlbnRFbGVtZW50
KG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwogICAgICAgICBnZW5lcmF0ZVdhbGtUb1BhcmVudEVsZW1l
bnQoZmFpbHVyZUNhc2VzLCBwYXJlbnRFbGVtZW50KTsKIAotICAgICAgICBpZiAobV9zZWxlY3Rv
ckNvbnRleHQgIT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yKSB7Ci0gICAgICAgICAg
ICBBc3NlbWJsZXI6Okp1bXAgc2tpcE1hcmtpbmc7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgTG9jYWxSZWdpc3RlciBjaGVja2luZ0NvbnRleHQobV9yZWdpc3RlckFsbG9jYXRvcik7
Ci0gICAgICAgICAgICAgICAgc2tpcE1hcmtpbmcgPSBqdW1wSWZOb3RSZXNvbHZpbmdTdHlsZShj
aGVja2luZ0NvbnRleHQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBGdW5jdGlvbkNh
bGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNr
QWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOwotICAgICAgICAgICAgZnVuY3Rpb25DYWxsLnNl
dEZ1bmN0aW9uQWRkcmVzcyhzZXRQYXJlbnRBZmZlY3RlZEJ5TGFzdENoaWxkT2YpOwotICAgICAg
ICAgICAgZnVuY3Rpb25DYWxsLnNldE9uZUFyZ3VtZW50KHBhcmVudEVsZW1lbnQpOwotICAgICAg
ICAgICAgZnVuY3Rpb25DYWxsLmNhbGwoKTsKLQotICAgICAgICAgICAgc2tpcE1hcmtpbmcubGlu
aygmbV9hc3NlbWJsZXIpOwotICAgICAgICB9CisgICAgICAgIGFkZFN0eWxlUmVsYXRpb25JZlJl
c29sdmluZ1N0eWxlKHBhcmVudEVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlv
bjo6Q2hpbGRyZW5BZmZlY3RlZEJ5UHJvcGVydHlCYXNlZEJhY2t3YXJkUG9zaXRpb25hbFJ1bGVz
KTsKIAogICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRlc3Qz
MihBc3NlbWJsZXI6Olplcm8sIEFzc2VtYmxlcjo6QWRkcmVzcyhwYXJlbnRFbGVtZW50LCBOb2Rl
Ojpub2RlRmxhZ3NNZW1vcnlPZmZzZXQoKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5vZGU6
OmZsYWdJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkKCkpKSk7CiAKQEAgLTQwMDMsNyArMzgyMSwx
MCBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVNYXJrCiAgICAgUHNldWRv
SWQgZHluYW1pY1BzZXVkbyA9IENTU1NlbGVjdG9yOjpwc2V1ZG9JZChmcmFnbWVudC5wc2V1ZG9F
bGVtZW50U2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkpOwogICAgIGlmIChkeW5hbWljUHNl
dWRvIDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQpIHsKICAgICAgICAgZmFpbHVyZUNhc2VzLmFw
cGVuZChicmFuY2hPblJlc29sdmluZ01vZGVXaXRoQ2hlY2tpbmdDb250ZXh0KEFzc2VtYmxlcjo6
Tm90RXF1YWwsIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UmVzb2x2aW5nU3R5bGUsIGNoZWNraW5n
Q29udGV4dCkpOwotICAgICAgICBhZGRGbGFnc1RvRWxlbWVudFN0eWxlRnJvbUNvbnRleHQoY2hl
Y2tpbmdDb250ZXh0LCBSZW5kZXJTdHlsZTo6Tm9uSW5oZXJpdGVkRmxhZ3M6OmZsYWdQc2V1ZG9T
dHlsZShkeW5hbWljUHNldWRvKSk7CisKKyAgICAgICAgQXNzZW1ibGVyOjpBZGRyZXNzIGZsYWdB
ZGRyZXNzKGNoZWNraW5nQ29udGV4dCwgT0JKRUNUX09GRlNFVE9GKFNlbGVjdG9yQ2hlY2tlcjo6
Q2hlY2tpbmdDb250ZXh0LCBwc2V1ZG9JRFNldCkpOworICAgICAgICBQc2V1ZG9JZFNldCBwc2V1
ZG9JZFNldCB7IGR5bmFtaWNQc2V1ZG8gfTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RvcmUzMihB
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihwc2V1ZG9JZFNldC5kYXRhKCkpLCBmbGFnQWRkcmVzcyk7
CiAgICAgfQogCiAgICAgLy8gV2UgaGF2ZSBhIHBzZXVkb0VsZW1lbnRTZWxlY3Rvciwgd2UgYXJl
IG5vdCBpbiBDb2xsZWN0aW5nUnVsZXNJZ25vcmluZ1ZpcnR1YWxQc2V1ZG9FbGVtZW50cyBzbwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAkocmV2aXNpb24gMTk1MTMwKQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTgsNyArMTE4LDcgQEAgaW5saW5lIGJvb2wgU2VsZWN0b3JEYXRhTGlzdDo6c2VsZWN0b3JN
YQogICAgIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0IHNlbGVjdG9yQ2hlY2tpbmdD
b250ZXh0KFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdSdWxlcyk7CiAgICAgc2VsZWN0
b3JDaGVja2luZ0NvbnRleHQuc2NvcGUgPSByb290Tm9kZS5pc0RvY3VtZW50Tm9kZSgpID8gbnVs
bHB0ciA6ICZyb290Tm9kZTsKICAgICB1bnNpZ25lZCBpZ25vcmVkU3BlY2lmaWNpdHk7Ci0gICAg
cmV0dXJuIHNlbGVjdG9yQ2hlY2tlci5tYXRjaChzZWxlY3RvckRhdGEuc2VsZWN0b3IsICZlbGVt
ZW50LCBzZWxlY3RvckNoZWNraW5nQ29udGV4dCwgaWdub3JlZFNwZWNpZmljaXR5KTsKKyAgICBy
ZXR1cm4gc2VsZWN0b3JDaGVja2VyLm1hdGNoKCpzZWxlY3RvckRhdGEuc2VsZWN0b3IsIGVsZW1l
bnQsIHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0LCBpZ25vcmVkU3BlY2lmaWNpdHkpOwogfQogCiBp
bmxpbmUgRWxlbWVudCogU2VsZWN0b3JEYXRhTGlzdDo6c2VsZWN0b3JDbG9zZXN0KGNvbnN0IFNl
bGVjdG9yRGF0YSYgc2VsZWN0b3JEYXRhLCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBDb250YWlu
ZXJOb2RlJiByb290Tm9kZSkgY29uc3QKQEAgLTEyNiwxMSArMTI2LDEwIEBAIGlubGluZSBFbGVt
ZW50KiBTZWxlY3RvckRhdGFMaXN0OjpzZWxlY3QKICAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0
b3JDaGVja2VyKGVsZW1lbnQuZG9jdW1lbnQoKSk7CiAgICAgU2VsZWN0b3JDaGVja2VyOjpDaGVj
a2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQoU2VsZWN0b3JDaGVja2VyOjpNb2Rl
OjpRdWVyeWluZ1J1bGVzKTsKICAgICBzZWxlY3RvckNoZWNraW5nQ29udGV4dC5zY29wZSA9IHJv
b3ROb2RlLmlzRG9jdW1lbnROb2RlKCkgPyBudWxscHRyIDogJnJvb3ROb2RlOwotICAgIEVsZW1l
bnQqIGN1cnJlbnROb2RlID0gJmVsZW1lbnQ7CiAgICAgdW5zaWduZWQgaWdub3JlZFNwZWNpZmlj
aXR5OwotICAgIGlmICghc2VsZWN0b3JDaGVja2VyLm1hdGNoKHNlbGVjdG9yRGF0YS5zZWxlY3Rv
ciwgY3VycmVudE5vZGUsIHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0LCBpZ25vcmVkU3BlY2lmaWNp
dHkpKQorICAgIGlmICghc2VsZWN0b3JDaGVja2VyLm1hdGNoKCpzZWxlY3RvckRhdGEuc2VsZWN0
b3IsIGVsZW1lbnQsIHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0LCBpZ25vcmVkU3BlY2lmaWNpdHkp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gY3VycmVudE5vZGU7CisgICAg
cmV0dXJuICZlbGVtZW50OwogfQogCiBib29sIFNlbGVjdG9yRGF0YUxpc3Q6Om1hdGNoZXMoRWxl
bWVudCYgdGFyZ2V0RWxlbWVudCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAkocmV2aXNpb24gMTk1MTMwKQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA1MCw3ICsxMDUwLDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlYwogICAgICAgICBpbnQgaW5kZXggPSAwOwogICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVj
dG9yKiBzZWxlY3RvciA9IHNlbGVjdG9yTGlzdC5maXJzdCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3Ig
PSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc2VsZWN0b3IpKSB7CiAgICAgICAgICAgICB1bnNpZ25l
ZCBpZ25vcmVkU3BlY2lmaWNpdHk7Ci0gICAgICAgICAgICBib29sIG1hdGNoZWQgPSBzZWxlY3Rv
ckNoZWNrZXIubWF0Y2goc2VsZWN0b3IsIGVsZW1lbnQsIGNvbnRleHQsIGlnbm9yZWRTcGVjaWZp
Y2l0eSk7CisgICAgICAgICAgICBib29sIG1hdGNoZWQgPSBzZWxlY3RvckNoZWNrZXIubWF0Y2go
KnNlbGVjdG9yLCAqZWxlbWVudCwgY29udGV4dCwgaWdub3JlZFNwZWNpZmljaXR5KTsKICAgICAg
ICAgICAgIGlmIChtYXRjaGVkKQogICAgICAgICAgICAgICAgIG1hdGNoaW5nU2VsZWN0b3JzLT5h
ZGRJdGVtKGluZGV4KTsKICAgICAgICAgICAgICsraW5kZXg7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAxOTUx
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg2Miw3ICs4NjIsNyBAQCBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTCiAgICAgICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNr
ZXIoZWxlbWVudC0+ZG9jdW1lbnQoKSk7CiAKICAgICAgICAgdW5zaWduZWQgc3BlY2lmaWNpdHk7
Ci0gICAgICAgIGJvb2wgb2theSA9IHNlbGVjdG9yQ2hlY2tlci5tYXRjaCgmc2VsZWN0b3IsIGVs
ZW1lbnQsIGNvbnRleHQsIHNwZWNpZmljaXR5KTsKKyAgICAgICAgYm9vbCBva2F5ID0gc2VsZWN0
b3JDaGVja2VyLm1hdGNoKHNlbGVjdG9yLCAqZWxlbWVudCwgY29udGV4dCwgc3BlY2lmaWNpdHkp
OwogICAgICAgICBpZiAoIW9rYXkpCiAgICAgICAgICAgICBzcGVjaWZpY2l0eSA9IHNlbGVjdG9y
LnN0YXRpY1NwZWNpZmljaXR5KG9rYXkpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269220</attachid>
            <date>2016-01-18 07:01:33 -0800</date>
            <delta_ts>2016-01-18 07:48:23 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>selector-checker-const-8.patch</filename>
            <type>text/plain</type>
            <size>96895</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAkocmV2
aXNpb24gMTk1MTMwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkNTU1ZhbHVl
S2V5d29yZHMuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1
ZGUgIlJlbmRlclJlZ2lvbi5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJT
ZWxlY3RvckNvbXBpbGVyLmgiCkBAIC0zMjgsMTEgKzMyOSwxMSBAQCBpbmxpbmUgYm9vbCBFbGVt
ZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hCiAjZW5kaWYgLy8gRU5BQkxFKENTU19TRUxFQ1RPUl9K
SVQpCiAKICAgICBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCBjb250ZXh0KG1fbW9k
ZSk7Ci0gICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBtX3N0eWxlOwogICAgIGNvbnRleHQucHNl
dWRvSWQgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5wc2V1ZG9JZDsKICAgICBjb250ZXh0LnNjcm9s
bGJhciA9IG1fcHNldWRvU3R5bGVSZXF1ZXN0LnNjcm9sbGJhcjsKICAgICBjb250ZXh0LnNjcm9s
bGJhclBhcnQgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5zY3JvbGxiYXJQYXJ0OwogCisgICAgYm9v
bCBzZWxlY3Rvck1hdGNoZXM7CiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUl9KSVQpCiAgICAgaWYg
KGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyKSB7CiAgICAgICAgIEFTU0VSVChydWxlRGF0YS5jb21w
aWxhdGlvblN0YXR1cygpID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNlbGVjdG9yQ2hl
Y2tlcldpdGhDaGVja2luZ0NvbnRleHQpOwpAQCAtMzQyLDEzICszNDMsOTMgQEAgaW5saW5lIGJv
b2wgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OnJ1bGVNYQogI2lmIENTU19TRUxFQ1RPUl9KSVRfUFJP
RklMSU5HCiAgICAgICAgIHJ1bGVEYXRhLmNvbXBpbGVkU2VsZWN0b3JVc2VkKCk7CiAjZW5kaWYK
LSAgICAgICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlcigmbV9lbGVtZW50LCAmY29udGV4dCwgJnNw
ZWNpZmljaXR5KTsKLSAgICB9CisgICAgICAgIHNlbGVjdG9yTWF0Y2hlcyA9IHNlbGVjdG9yQ2hl
Y2tlcigmbV9lbGVtZW50LCAmY29udGV4dCwgJnNwZWNpZmljaXR5KTsKKyAgICB9IGVsc2UKICNl
bmRpZiAvLyBFTkFCTEUoQ1NTX1NFTEVDVE9SX0pJVCkKKyAgICB7CisgICAgICAgIC8vIFNsb3cg
cGF0aC4KKyAgICAgICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihtX2VsZW1lbnQu
ZG9jdW1lbnQoKSk7CisgICAgICAgIHNlbGVjdG9yTWF0Y2hlcyA9IHNlbGVjdG9yQ2hlY2tlci5t
YXRjaCgqcnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50LCBjb250ZXh0LCBzcGVjaWZpY2l0
eSk7CisgICAgfQorCisgICAgY29tbWl0U3R5bGVSZWxhdGlvbnMoY29udGV4dC5zdHlsZVJlbGF0
aW9ucyk7CisKKyAgICBpZiAoY29udGV4dC5wc2V1ZG9JRFNldCkKKyAgICAgICAgbV9zdHlsZS0+
c2V0SGFzUHNldWRvU3R5bGVzKGNvbnRleHQucHNldWRvSURTZXQpOworCisgICAgcmV0dXJuIHNl
bGVjdG9yTWF0Y2hlczsKK30KIAotICAgIC8vIFNsb3cgcGF0aC4KLSAgICBTZWxlY3RvckNoZWNr
ZXIgc2VsZWN0b3JDaGVja2VyKG1fZWxlbWVudC5kb2N1bWVudCgpKTsKLSAgICByZXR1cm4gc2Vs
ZWN0b3JDaGVja2VyLm1hdGNoKHJ1bGVEYXRhLnNlbGVjdG9yKCksICZtX2VsZW1lbnQsIGNvbnRl
eHQsIHNwZWNpZmljaXR5KTsKKy8vIEZJWE1FOiBSdWxlIGNvbGxlY3RvciBzaG91bGQgbm90IGJl
IGRvaW5nIG11dGF0aW9ucy4gTW92ZSB0aGlzIHNvbWV3aGVyZSBlbHNlLgordm9pZCBFbGVtZW50
UnVsZUNvbGxlY3Rvcjo6Y29tbWl0U3R5bGVSZWxhdGlvbnMoY29uc3QgU2VsZWN0b3JDaGVja2Vy
OjpTdHlsZVJlbGF0aW9ucyYgc3R5bGVSZWxhdGlvbnMpCit7CisgICAgZm9yIChhdXRvJiByZWxh
dGlvbiA6IHN0eWxlUmVsYXRpb25zKSB7CisgICAgICAgIHN3aXRjaCAocmVsYXRpb24udHlwZSkg
eworICAgICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRC
eUFjdGl2ZToKKyAgICAgICAgICAgIGlmICgmcmVsYXRpb24uZWxlbWVudCA9PSAmbV9lbGVtZW50
KQorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEFmZmVjdGVkQnlBY3RpdmUoKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZWxhdGlvbi5lbGVtZW50LnNldENoaWxkcmVu
QWZmZWN0ZWRCeUFjdGl2ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2Vs
ZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5RHJhZzoKKyAgICAgICAgICAg
IGlmICgmcmVsYXRpb24uZWxlbWVudCA9PSAmbV9lbGVtZW50KQorICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldEFmZmVjdGVkQnlEcmFnKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgcmVsYXRpb24uZWxlbWVudC5zZXRDaGlsZHJlbkFmZmVjdGVkQnlEcmFnKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRp
b246OkFmZmVjdGVkQnlFbXB0eToKKyAgICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQuc2V0U3R5
bGVBZmZlY3RlZEJ5RW1wdHkoKTsKKyAgICAgICAgICAgIGlmICgmcmVsYXRpb24uZWxlbWVudCA9
PSAmbV9lbGVtZW50KQorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEVtcHR5U3RhdGUocmVs
YXRpb24udmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2VsZWN0b3JD
aGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5SG92ZXI6CisgICAgICAgICAgICBpZiAo
JnJlbGF0aW9uLmVsZW1lbnQgPT0gJm1fZWxlbWVudCkKKyAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRBZmZlY3RlZEJ5SG92ZXIoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICByZWxhdGlvbi5lbGVtZW50LnNldENoaWxkcmVuQWZmZWN0ZWRCeUhvdmVyKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246
OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmc6CisgICAgICAgICAgICByZWxhdGlvbi5lbGVtZW50
LnNldFN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVjdHNO
ZXh0U2libGluZzoKKyAgICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQuc2V0QWZmZWN0c05leHRT
aWJsaW5nRWxlbWVudFN0eWxlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBT
ZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJk
UG9zaXRpb25hbFJ1bGVzOgorICAgICAgICAgICAgcmVsYXRpb24uZWxlbWVudC5zZXRDaGlsZHJl
bkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFm
ZmVjdGVkQnlGaXJzdENoaWxkUnVsZXM6CisgICAgICAgICAgICByZWxhdGlvbi5lbGVtZW50LnNl
dENoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcygpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFm
ZmVjdGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dhcmRQb3NpdGlvbmFsUnVsZXM6CisgICAgICAgICAg
ICByZWxhdGlvbi5lbGVtZW50LnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25h
bFJ1bGVzKCk7CisgICAgICAgICAgICByZWxhdGlvbi5lbGVtZW50LnNldENoaWxkcmVuQWZmZWN0
ZWRCeVByb3BlcnR5QmFzZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpDaGls
ZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlczoKKyAgICAgICAgICAgIHJlbGF0aW9uLmVsZW1l
bnQuc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6Rmlyc3RD
aGlsZDoKKyAgICAgICAgICAgIGlmICgmcmVsYXRpb24uZWxlbWVudCA9PSAmbV9lbGVtZW50KQor
ICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEZpcnN0Q2hpbGRTdGF0ZSgpOworICAgICAgICAg
ICAgZWxzZSBpZiAoYXV0byogc3R5bGUgPSByZWxhdGlvbi5lbGVtZW50LnJlbmRlclN0eWxlKCkp
CisgICAgICAgICAgICAgICAgc3R5bGUtPnNldEZpcnN0Q2hpbGRTdGF0ZSgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpM
YXN0Q2hpbGQ6CisgICAgICAgICAgICBpZiAoJnJlbGF0aW9uLmVsZW1lbnQgPT0gJm1fZWxlbWVu
dCkKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRMYXN0Q2hpbGRTdGF0ZSgpOworICAgICAg
ICAgICAgZWxzZSBpZiAoYXV0byogc3R5bGUgPSByZWxhdGlvbi5lbGVtZW50LnJlbmRlclN0eWxl
KCkpCisgICAgICAgICAgICAgICAgc3R5bGUtPnNldExhc3RDaGlsZFN0YXRlKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246
Ok50aENoaWxkSW5kZXg6CisgICAgICAgICAgICByZWxhdGlvbi5lbGVtZW50LnNldENoaWxkSW5k
ZXgocmVsYXRpb24udmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2Vs
ZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpVbmlxdWU6CisgICAgICAgICAgICBpZiAoJnJl
bGF0aW9uLmVsZW1lbnQgPT0gJm1fZWxlbWVudCkKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRVbmlxdWUoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGF1dG8qIHN0eWxlID0gcmVsYXRpb24u
ZWxlbWVudC5yZW5kZXJTdHlsZSgpKQorICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRVbmlxdWUo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIEVsZW1l
bnRSdWxlQ29sbGVjdG9yOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgUnVsZVNl
dDo6UnVsZURhdGFWZWN0b3IqIHJ1bGVzLCBjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVz
dCwgU3R5bGVSZXNvbHZlcjo6UnVsZVJhbmdlJiBydWxlUmFuZ2UpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuaAkocmV2aXNpb24gMTk1MTMwKQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg0LDYgKzg0LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29uc3Qg
TWF0Y2hlZFJ1bGUmKTsKIAorICAgIHZvaWQgY29tbWl0U3R5bGVSZWxhdGlvbnMoY29uc3QgU2Vs
ZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9ucyYpOworCiAgICAgRWxlbWVudCYgbV9lbGVtZW50
OwogICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlOwogICAgIGNvbnN0IERvY3VtZW50UnVsZVNldHMm
IG1fcnVsZVNldHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAko
cmV2aXNpb24gMTk1MTMwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNC0yMDA1IEFs
bGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKICAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNyBOaWNob2xhcyBTaGFua3MgKHdlYmtpdEBuaWNrc2hhbmtzLmNvbSkKLSAqIENv
cHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAx
MiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCkBAIC00NiwxMCArNDYsOCBAQAog
I2luY2x1ZGUgIkhUTUxQcm9ncmVzc0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCi0jaW5jbHVkZSAi
Tm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNlbGVjdG9yQ2hl
Y2tlclRlc3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAi
U3R5bGVkRWxlbWVudC5oIgpAQCAtNjMsMjkgKzYxLDM2IEBAIGVudW0gY2xhc3MgVmlzaXRlZE1h
dGNoVHlwZSA6IHVuc2lnbmVkIGMKICAgICBEaXNhYmxlZCwgRW5hYmxlZAogfTsKIAotc3RydWN0
IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyA6IHB1YmxpYyBTZWxl
Y3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCB7Ci0gICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0
YXR1cyhjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCYgY2hlY2tpbmdDb250
ZXh0LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVsZW1lbnQqIGVsZW1lbnQpCi0gICAg
ICAgIDogU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQoY2hlY2tpbmdDb250ZXh0KQot
ICAgICAgICAsIHNlbGVjdG9yKHNlbGVjdG9yKQotICAgICAgICAsIGVsZW1lbnQoZWxlbWVudCkK
LSAgICAgICAgLCB2aXNpdGVkTWF0Y2hUeXBlKHJlc29sdmluZ01vZGUgPT0gU2VsZWN0b3JDaGVj
a2VyOjpNb2RlOjpRdWVyeWluZ1J1bGVzID8gVmlzaXRlZE1hdGNoVHlwZTo6RGlzYWJsZWQgOiBW
aXNpdGVkTWF0Y2hUeXBlOjpFbmFibGVkKQotICAgICAgICAsIGZpcnN0U2VsZWN0b3JPZlRoZUZy
YWdtZW50KHNlbGVjdG9yKQotICAgICAgICAsIGluRnVuY3Rpb25hbFBzZXVkb0NsYXNzKGZhbHNl
KQotICAgICAgICAsIHBzZXVkb0VsZW1lbnRFZmZlY3RpdmUodHJ1ZSkKLSAgICAgICAgLCBoYXNT
Y3JvbGxiYXJQc2V1ZG8oZmFsc2UpCi0gICAgICAgICwgaGFzU2VsZWN0aW9uUHNldWRvKGZhbHNl
KQorc3RydWN0IFNlbGVjdG9yQ2hlY2tlcjo6TG9jYWxDb250ZXh0IHsKKyAgICBMb2NhbENvbnRl
eHQoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50JiBlbGVtZW50LCBW
aXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGUsIFBzZXVkb0lkIHBzZXVkb0lkKQorICAg
ICAgICA6IHNlbGVjdG9yKCZzZWxlY3RvcikKKyAgICAgICAgLCBlbGVtZW50KCZlbGVtZW50KQor
ICAgICAgICAsIHZpc2l0ZWRNYXRjaFR5cGUodmlzaXRlZE1hdGNoVHlwZSkKKyAgICAgICAgLCBm
aXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCgmc2VsZWN0b3IpCisgICAgICAgICwgcHNldWRvSWQo
cHNldWRvSWQpCiAgICAgeyB9CiAKICAgICBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3I7Ci0g
ICAgRWxlbWVudCogZWxlbWVudDsKKyAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50OwogICAgIFZp
c2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZTsKICAgICBjb25zdCBDU1NTZWxlY3Rvciog
Zmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQ7Ci0gICAgYm9vbCBpbkZ1bmN0aW9uYWxQc2V1ZG9D
bGFzczsKLSAgICBib29sIHBzZXVkb0VsZW1lbnRFZmZlY3RpdmU7Ci0gICAgYm9vbCBoYXNTY3Jv
bGxiYXJQc2V1ZG87Ci0gICAgYm9vbCBoYXNTZWxlY3Rpb25Qc2V1ZG87CisgICAgUHNldWRvSWQg
cHNldWRvSWQ7CisgICAgYm9vbCBpc01hdGNoRWxlbWVudCB7IHRydWUgfTsKKyAgICBib29sIGlu
RnVuY3Rpb25hbFBzZXVkb0NsYXNzIHsgZmFsc2UgfTsKKyAgICBib29sIHBzZXVkb0VsZW1lbnRF
ZmZlY3RpdmUgeyB0cnVlIH07CisgICAgYm9vbCBoYXNTY3JvbGxiYXJQc2V1ZG8geyBmYWxzZSB9
OworICAgIGJvb2wgaGFzU2VsZWN0aW9uUHNldWRvIHsgZmFsc2UgfTsKKwogfTsKIAorc3RhdGlj
IGlubGluZSB2b2lkIGFkZFN0eWxlUmVsYXRpb24oU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0Nv
bnRleHQmIGNoZWNraW5nQ29udGV4dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgU2VsZWN0b3JD
aGVja2VyOjpTdHlsZVJlbGF0aW9uOjpUeXBlIHR5cGUsIHVuc2lnbmVkIHZhbHVlID0gMSkKK3sK
KyAgICBBU1NFUlQodmFsdWUgPT0gMSB8fCB0eXBlID09IFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVS
ZWxhdGlvbjo6TnRoQ2hpbGRJbmRleCB8fCB0eXBlID09IFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVS
ZWxhdGlvbjo6QWZmZWN0ZWRCeUVtcHR5KTsKKyAgICBpZiAoY2hlY2tpbmdDb250ZXh0LnJlc29s
dmluZ01vZGUgIT0gU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZpbmdTdHlsZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGNoZWNraW5nQ29udGV4dC5zdHlsZVJlbGF0aW9ucy5hcHBlbmQoeyBj
b25zdF9jYXN0PEVsZW1lbnQmPihlbGVtZW50KSwgdHlwZSwgdmFsdWUgfSk7Cit9CisKIHN0YXRp
YyBpbmxpbmUgYm9vbCBpc0ZpcnN0Q2hpbGRFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQp
CiB7CiAgICAgcmV0dXJuICFFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoZWxlbWVu
dCk7CkBAIC05NiwxMSArMTAxLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0xhc3RDaGlsZEVs
ZW1lbnQoY28KICAgICByZXR1cm4gIUVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKGVsZW1l
bnQpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNGaXJzdE9mVHlwZShFbGVtZW50JiBlbGVt
ZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlLCBib29sIGlzUmVzb2x2aW5nU3R5bGUpCitz
dGF0aWMgaW5saW5lIGJvb2wgaXNGaXJzdE9mVHlwZShTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dCYgY2hlY2tpbmdDb250ZXh0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBR
dWFsaWZpZWROYW1lJiB0eXBlKQogewotICAgIGZvciAoRWxlbWVudCogc2libGluZyA9IEVsZW1l
bnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZyhlbGVtZW50KTsgc2libGluZzsgc2libGluZyA9
IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZygqc2libGluZykpIHsKLSAgICAgICAg
aWYgKGlzUmVzb2x2aW5nU3R5bGUpCi0gICAgICAgICAgICBzaWJsaW5nLT5zZXRBZmZlY3RzTmV4
dFNpYmxpbmdFbGVtZW50U3R5bGUoKTsKKyAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcg
PSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoZWxlbWVudCk7IHNpYmxpbmc7IHNp
YmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoKnNpYmxpbmcpKSB7Cisg
ICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqc2libGluZywgU2VsZWN0
b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RzTmV4dFNpYmxpbmcpOworCiAgICAgICAg
IGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KQEAgLTExNiwxMiArMTIxLDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0xhc3RP
ZlR5cGUoY29uc3QgRWwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQg
Y291bnRFbGVtZW50c0JlZm9yZShFbGVtZW50JiBlbGVtZW50LCBib29sIGlzUmVzb2x2aW5nU3R5
bGUpCitzdGF0aWMgaW5saW5lIGludCBjb3VudEVsZW1lbnRzQmVmb3JlKFNlbGVjdG9yQ2hlY2tl
cjo6Q2hlY2tpbmdDb250ZXh0JiBjaGVja2luZ0NvbnRleHQsIGNvbnN0IEVsZW1lbnQmIGVsZW1l
bnQpCiB7CiAgICAgaW50IGNvdW50ID0gMDsKLSAgICBmb3IgKEVsZW1lbnQqIHNpYmxpbmcgPSBF
bGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoZWxlbWVudCk7IHNpYmxpbmc7IHNpYmxp
bmcgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoKnNpYmxpbmcpKSB7Ci0gICAg
ICAgIGlmIChpc1Jlc29sdmluZ1N0eWxlKQotICAgICAgICAgICAgc2libGluZy0+c2V0QWZmZWN0
c05leHRTaWJsaW5nRWxlbWVudFN0eWxlKCk7CisgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJs
aW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKGVsZW1lbnQpOyBzaWJsaW5n
OyBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKCpzaWJsaW5nKSkg
eworCisgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqc2libGluZywg
U2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RzTmV4dFNpYmxpbmcpOwogCiAg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc2libGluZy0+Y2hpbGRJbmRleCgpOwogICAgICAgICBp
ZiAoaW5kZXgpIHsKQEAgLTEzMywxMiArMTM4LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGNvdW50
RWxlbWVudHNCZWZvcmUoRWwKICAgICByZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
aW50IGNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUXVh
bGlmaWVkTmFtZSYgdHlwZSwgYm9vbCBpc1Jlc29sdmluZ1N0eWxlKQorc3RhdGljIGlubGluZSBp
bnQgY291bnRFbGVtZW50c09mVHlwZUJlZm9yZShTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29u
dGV4dCYgY2hlY2tpbmdDb250ZXh0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBRdWFs
aWZpZWROYW1lJiB0eXBlKQogewogICAgIGludCBjb3VudCA9IDA7Ci0gICAgZm9yIChFbGVtZW50
KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKGVsZW1lbnQpOyBz
aWJsaW5nOyBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKCpzaWJs
aW5nKSkgewotICAgICAgICBpZiAoaXNSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgICAgIHNpYmxp
bmctPnNldEFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpOworICAgIGZvciAoY29uc3Qg
RWxlbWVudCogc2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZyhlbGVt
ZW50KTsgc2libGluZzsgc2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGlu
Zygqc2libGluZykpIHsKKyAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQs
ICpzaWJsaW5nLCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVjdHNOZXh0U2li
bGluZyk7CiAKICAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpCiAgICAgICAg
ICAgICArK2NvdW50OwpAQCAtMTcwLDI2ICsxNzQsMjYgQEAgU2VsZWN0b3JDaGVja2VyOjpTZWxl
Y3RvckNoZWNrZXIoRG9jdW1lbgogewogfQogCi1ib29sIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2go
Y29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDaGVj
a2luZ0NvbnRleHQmIHByb3ZpZGVkQ29udGV4dCwgdW5zaWduZWQmIHNwZWNpZmljaXR5KSBjb25z
dAorYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3Rv
ciwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgQ2hlY2tpbmdDb250ZXh0JiBjaGVja2luZ0NvbnRl
eHQsIHVuc2lnbmVkJiBzcGVjaWZpY2l0eSkgY29uc3QKIHsKICAgICBzcGVjaWZpY2l0eSA9IDA7
CiAKLSAgICBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIGNvbnRleHQocHJvdmlkZWRDb250ZXh0
LCBzZWxlY3RvciwgZWxlbWVudCk7CisgICAgTG9jYWxDb250ZXh0IGNvbnRleHQoc2VsZWN0b3Is
IGVsZW1lbnQsIGNoZWNraW5nQ29udGV4dC5yZXNvbHZpbmdNb2RlID09IFNlbGVjdG9yQ2hlY2tl
cjo6TW9kZTo6UXVlcnlpbmdSdWxlcyA/IFZpc2l0ZWRNYXRjaFR5cGU6OkRpc2FibGVkIDogVmlz
aXRlZE1hdGNoVHlwZTo6RW5hYmxlZCwgY2hlY2tpbmdDb250ZXh0LnBzZXVkb0lkKTsKICAgICBQ
c2V1ZG9JZFNldCBwc2V1ZG9JZFNldDsKLSAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJl
Y3Vyc2l2ZWx5KGNvbnRleHQsIHBzZXVkb0lkU2V0LCBzcGVjaWZpY2l0eSk7CisgICAgTWF0Y2hS
ZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShjaGVja2luZ0NvbnRleHQsIGNvbnRleHQs
IHBzZXVkb0lkU2V0LCBzcGVjaWZpY2l0eSk7CiAgICAgaWYgKHJlc3VsdC5tYXRjaCAhPSBNYXRj
aDo6U2VsZWN0b3JNYXRjaGVzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGNvbnRl
eHQucHNldWRvSWQgIT0gTk9QU0VVRE8gJiYgIXBzZXVkb0lkU2V0Lmhhcyhjb250ZXh0LnBzZXVk
b0lkKSkKKyAgICBpZiAoY2hlY2tpbmdDb250ZXh0LnBzZXVkb0lkICE9IE5PUFNFVURPICYmICFw
c2V1ZG9JZFNldC5oYXMoY2hlY2tpbmdDb250ZXh0LnBzZXVkb0lkKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaWYgKGNvbnRleHQucHNldWRvSWQgPT0gTk9QU0VVRE8gJiYgcHNldWRv
SWRTZXQpIHsKKyAgICBpZiAoY2hlY2tpbmdDb250ZXh0LnBzZXVkb0lkID09IE5PUFNFVURPICYm
IHBzZXVkb0lkU2V0KSB7CiAgICAgICAgIFBzZXVkb0lkU2V0IHB1YmxpY1BzZXVkb0lkU2V0ID0g
cHNldWRvSWRTZXQgJiBQc2V1ZG9JZFNldDo6ZnJvbU1hc2soUFVCTElDX1BTRVVET0lEX01BU0sp
OwotICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0
eWxlICYmIHB1YmxpY1BzZXVkb0lkU2V0KQotICAgICAgICAgICAgY29udGV4dC5lbGVtZW50U3R5
bGUtPnNldEhhc1BzZXVkb1N0eWxlcyhwdWJsaWNQc2V1ZG9JZFNldCk7CisgICAgICAgIGlmIChj
aGVja2luZ0NvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSAmJiBw
dWJsaWNQc2V1ZG9JZFNldCkKKyAgICAgICAgICAgIGNoZWNraW5nQ29udGV4dC5wc2V1ZG9JRFNl
dCA9IHB1YmxpY1BzZXVkb0lkU2V0OwogCiAgICAgICAgIC8vIFdoZW4gaWdub3JpbmcgdmlydHVh
bCBwc2V1ZG8gZWxlbWVudHMsIHRoZSBjb250ZXh0J3MgcHNldWRvIHNob3VsZCBhbHNvIGJlIE5P
UFNFVURPIGJ1dCB0aGF0IGRvZXMKICAgICAgICAgLy8gbm90IGNhdXNlIGEgZmFpbHVyZS4KLSAg
ICAgICAgcmV0dXJuIGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpDb2xsZWN0aW5nUnVs
ZXNJZ25vcmluZ1ZpcnR1YWxQc2V1ZG9FbGVtZW50cyB8fCByZXN1bHQubWF0Y2hUeXBlID09IE1h
dGNoVHlwZTo6RWxlbWVudDsKKyAgICAgICAgcmV0dXJuIGNoZWNraW5nQ29udGV4dC5yZXNvbHZp
bmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVkb0VsZW1l
bnRzIHx8IHJlc3VsdC5tYXRjaFR5cGUgPT0gTWF0Y2hUeXBlOjpFbGVtZW50OwogICAgIH0KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIwNSwxMyArMjA5LDE0IEBAIGlubGluZSBzdGF0aWMgYm9v
bCBoYXNTY3JvbGxiYXJQc2V1ZG9FbGUKICAgICByZXR1cm4gZHluYW1pY1BzZXVkb0lkU2V0Lmhh
cyhSRVNJWkVSKTsKIH0KIAotc3RhdGljIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0
V2l0aFN0YXR1cyBjaGVja2luZ0NvbnRleHRGb3JQYXJlbnQoY29uc3QgU2VsZWN0b3JDaGVja2Vy
OjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0KQorc3RhdGljIFNlbGVjdG9yQ2hl
Y2tlcjo6TG9jYWxDb250ZXh0IGxvY2FsQ29udGV4dEZvclBhcmVudChjb25zdCBTZWxlY3RvckNo
ZWNrZXI6OkxvY2FsQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBTZWxlY3RvckNoZWNrZXI6OkNo
ZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgdXBkYXRlZENvbnRleHQoY29udGV4dCk7CisgICAgU2Vs
ZWN0b3JDaGVja2VyOjpMb2NhbENvbnRleHQgdXBkYXRlZENvbnRleHQoY29udGV4dCk7CiAgICAg
Ly8gRGlzYWJsZSA6dmlzaXRlZCBtYXRjaGluZyB3aGVuIHdlIHNlZSB0aGUgZmlyc3QgbGluay4K
ICAgICBpZiAoY29udGV4dC5lbGVtZW50LT5pc0xpbmsoKSkKICAgICAgICAgdXBkYXRlZENvbnRl
eHQudmlzaXRlZE1hdGNoVHlwZSA9IFZpc2l0ZWRNYXRjaFR5cGU6OkRpc2FibGVkOwogICAgIHVw
ZGF0ZWRDb250ZXh0LmVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsK
KyAgICB1cGRhdGVkQ29udGV4dC5pc01hdGNoRWxlbWVudCA9IGZhbHNlOwogICAgIHJldHVybiB1
cGRhdGVkQ29udGV4dDsKIH0KIApAQCAtMjIxLDEyICsyMjYsMTIgQEAgc3RhdGljIFNlbGVjdG9y
Q2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0VwogLy8gKiBTZWxlY3RvckZhaWxzTG9jYWxseSAgICAg
LSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIHRoZSBlbGVtZW50IGUKIC8vICogU2VsZWN0b3JGYWls
c0FsbFNpYmxpbmdzIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciBlIGFuZCBhbnkgc2libGluZyBv
ZiBlCiAvLyAqIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5ICAtIHRoZSBzZWxlY3RvciBmYWlscyBm
b3IgZSBhbmQgYW55IHNpYmxpbmcgb3IgYW5jZXN0b3Igb2YgZQotU2VsZWN0b3JDaGVja2VyOjpN
YXRjaFJlc3VsdCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkoY29uc3QgQ2hlY2tp
bmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCwgUHNldWRvSWRTZXQmIGR5bmFtaWNQc2V1ZG9J
ZFNldCwgdW5zaWduZWQmIHNwZWNpZmljaXR5KSBjb25zdAorU2VsZWN0b3JDaGVja2VyOjpNYXRj
aFJlc3VsdCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkoQ2hlY2tpbmdDb250ZXh0
JiBjaGVja2luZ0NvbnRleHQsIGNvbnN0IExvY2FsQ29udGV4dCYgY29udGV4dCwgUHNldWRvSWRT
ZXQmIGR5bmFtaWNQc2V1ZG9JZFNldCwgdW5zaWduZWQmIHNwZWNpZmljaXR5KSBjb25zdAogewog
ICAgIE1hdGNoVHlwZSBtYXRjaFR5cGUgPSBNYXRjaFR5cGU6OkVsZW1lbnQ7CiAKICAgICAvLyBU
aGUgZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1hdGNoLgotICAgIGlmICghY2hlY2tPbmUoY29udGV4
dCwgZHluYW1pY1BzZXVkb0lkU2V0LCBtYXRjaFR5cGUsIHNwZWNpZmljaXR5KSkKKyAgICBpZiAo
IWNoZWNrT25lKGNoZWNraW5nQ29udGV4dCwgY29udGV4dCwgZHluYW1pY1BzZXVkb0lkU2V0LCBt
YXRjaFR5cGUsIHNwZWNpZmljaXR5KSkKICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWls
cyhNYXRjaDo6U2VsZWN0b3JGYWlsc0xvY2FsbHkpOwogCiAgICAgaWYgKGNvbnRleHQuc2VsZWN0
b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpIHsKQEAgLTI0Nyw3ICsy
NTIsNyBAQCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0IFNlbGVjdG9yQ2hlCiAgICAgICAg
ICAgICBpZiAoIWNvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVs
eSk7CiAKLSAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UXVl
cnlpbmdSdWxlcykKKyAgICAgICAgICAgIGlmIChjaGVja2luZ0NvbnRleHQucmVzb2x2aW5nTW9k
ZSA9PSBNb2RlOjpRdWVyeWluZ1J1bGVzKQogICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJl
c3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KTsKIAogICAgICAgICAg
ICAgUHNldWRvSWQgcHNldWRvSWQgPSBDU1NTZWxlY3Rvcjo6cHNldWRvSWQoY29udGV4dC5zZWxl
Y3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSk7CkBAIC0yNjUsNyArMjcwLDcgQEAgU2VsZWN0b3JD
aGVja2VyOjpNYXRjaFJlc3VsdCBTZWxlY3RvckNoZQogICAgIGlmICghaGlzdG9yeVNlbGVjdG9y
KQogICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6Om1hdGNoZXMobWF0Y2hUeXBlKTsKIAotICAg
IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgbmV4dENvbnRleHQoY29udGV4dCk7CisgICAgTG9j
YWxDb250ZXh0IG5leHRDb250ZXh0KGNvbnRleHQpOwogICAgIG5leHRDb250ZXh0LnNlbGVjdG9y
ID0gaGlzdG9yeVNlbGVjdG9yOwogCiAgICAgaWYgKHJlbGF0aW9uICE9IENTU1NlbGVjdG9yOjpT
dWJTZWxlY3RvcikgewpAQCAtMjgwLDE3ICsyODUsMTcgQEAgU2VsZWN0b3JDaGVja2VyOjpNYXRj
aFJlc3VsdCBTZWxlY3RvckNoZQogICAgICAgICBuZXh0Q29udGV4dC5wc2V1ZG9JZCA9IE5PUFNF
VURPOwogICAgICAgICAvLyBWaXJ0dWFsIHBzZXVkbyBlbGVtZW50IGlzIG9ubHkgZWZmZWN0aXZl
IGluIHRoZSByaWdodG1vc3QgZnJhZ21lbnQuCiAgICAgICAgIG5leHRDb250ZXh0LnBzZXVkb0Vs
ZW1lbnRFZmZlY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgbmV4dENvbnRleHQuaXNNYXRjaEVsZW1l
bnQgPSBmYWxzZTsKICAgICB9CiAKICAgICBzd2l0Y2ggKHJlbGF0aW9uKSB7CiAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6RGVzY2VuZGFudDoKLSAgICAgICAgbmV4dENvbnRleHQgPSBjaGVja2luZ0Nv
bnRleHRGb3JQYXJlbnQobmV4dENvbnRleHQpOworICAgICAgICBuZXh0Q29udGV4dCA9IGxvY2Fs
Q29udGV4dEZvclBhcmVudChuZXh0Q29udGV4dCk7CiAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0
U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgIG5l
eHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7Ci0gICAgICAgIGZvciAoOyBuZXh0Q29u
dGV4dC5lbGVtZW50OyBuZXh0Q29udGV4dCA9IGNoZWNraW5nQ29udGV4dEZvclBhcmVudChuZXh0
Q29udGV4dCkpIHsKKyAgICAgICAgZm9yICg7IG5leHRDb250ZXh0LmVsZW1lbnQ7IG5leHRDb250
ZXh0ID0gbG9jYWxDb250ZXh0Rm9yUGFyZW50KG5leHRDb250ZXh0KSkgewogICAgICAgICAgICAg
UHNldWRvSWRTZXQgaWdub3JlRHluYW1pY1BzZXVkbzsKICAgICAgICAgICAgIHVuc2lnbmVkIGRl
c2NlbmRhbnRzU3BlY2lmaWNpdHkgPSAwOwotICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0
ID0gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywgZGVz
Y2VuZGFudHNTcGVjaWZpY2l0eSk7CisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBt
YXRjaFJlY3Vyc2l2ZWx5KGNoZWNraW5nQ29udGV4dCwgbmV4dENvbnRleHQsIGlnbm9yZUR5bmFt
aWNQc2V1ZG8sIGRlc2NlbmRhbnRzU3BlY2lmaWNpdHkpOwogICAgICAgICAgICAgQVNTRVJUKCFu
ZXh0Q29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZlICYmICFpZ25vcmVEeW5hbWljUHNldWRv
KTsKIAogICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRj
aGVzKQpAQCAtMzAzLDE0ICszMDgsMTMgQEAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdCBT
ZWxlY3RvckNoZQogCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2hpbGQ6CiAgICAgICAgIHsKLSAg
ICAgICAgICAgIG5leHRDb250ZXh0ID0gY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KG5leHRDb250
ZXh0KTsKKyAgICAgICAgICAgIG5leHRDb250ZXh0ID0gbG9jYWxDb250ZXh0Rm9yUGFyZW50KG5l
eHRDb250ZXh0KTsKICAgICAgICAgICAgIGlmICghbmV4dENvbnRleHQuZWxlbWVudCkKICAgICAg
ICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxz
Q29tcGxldGVseSk7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVG
cmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwotICAgICAgICAgICAgbmV4dENvbnRleHQu
ZWxlbWVudFN0eWxlID0gbnVsbHB0cjsKICAgICAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5
bmFtaWNQc2V1ZG87CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGlsZFNwZWNpZmljaXR5ID0gMDsK
LSAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkobmV4dENv
bnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIGNoaWxkU3BlY2lmaWNpdHkpOworICAgICAgICAg
ICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShjaGVja2luZ0NvbnRleHQs
IG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBjaGlsZFNwZWNpZmljaXR5KTsKICAg
ICAgICAgICAgIEFTU0VSVCghbmV4dENvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZSAmJiAh
aWdub3JlRHluYW1pY1BzZXVkbyk7CiAKICAgICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2ggPT0g
TWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykKQEAgLTMyMywyMCArMzI3LDE5IEBAIFNlbGVjdG9yQ2hl
Y2tlcjo6TWF0Y2hSZXN1bHQgU2VsZWN0b3JDaGUKIAogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRp
cmVjdEFkamFjZW50OgogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZp
bmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQotICAgICAgICAgICAgICAgIGNvbnRleHQu
ZWxlbWVudC0+c2V0U3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAg
ICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqY29udGV4dC5lbGVtZW50LCBT
dHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsKIAogICAgICAgICAgICAg
RWxlbWVudCogcHJldmlvdXNFbGVtZW50ID0gY29udGV4dC5lbGVtZW50LT5wcmV2aW91c0VsZW1l
bnRTaWJsaW5nKCk7CiAgICAgICAgICAgICBpZiAoIXByZXZpb3VzRWxlbWVudCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQWxs
U2libGluZ3MpOwotICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2Rl
OjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnQtPnNldEFm
ZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpOworCisgICAgICAgICAgICBhZGRTdHlsZVJl
bGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnByZXZpb3VzRWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6
QWZmZWN0c05leHRTaWJsaW5nKTsKKwogICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9
IHByZXZpb3VzRWxlbWVudDsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JP
ZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgICAgICBuZXh0Q29u
dGV4dC5lbGVtZW50U3R5bGUgPSBudWxscHRyOwogICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdu
b3JlRHluYW1pY1BzZXVkbzsKICAgICAgICAgICAgIHVuc2lnbmVkIGFkamFjZW50U3BlY2lmaWNp
dHkgPSAwOwotICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVs
eShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywgYWRqYWNlbnRTcGVjaWZpY2l0eSk7
CisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KGNoZWNr
aW5nQ29udGV4dCwgbmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIGFkamFjZW50U3Bl
Y2lmaWNpdHkpOwogICAgICAgICAgICAgQVNTRVJUKCFuZXh0Q29udGV4dC5wc2V1ZG9FbGVtZW50
RWZmZWN0aXZlICYmICFpZ25vcmVEeW5hbWljUHNldWRvKTsKIAogICAgICAgICAgICAgaWYgKHJl
c3VsdC5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzKQpAQCAtMzQ1LDE4ICszNDgsMTYg
QEAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdCBTZWxlY3RvckNoZQogICAgICAgICAgICAg
cmV0dXJuIE1hdGNoUmVzdWx0Ojp1cGRhdGVXaXRoTWF0Y2hUeXBlKHJlc3VsdCwgbWF0Y2hUeXBl
KTsKICAgICAgICAgfQogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkluZGlyZWN0QWRqYWNlbnQ6Ci0g
ICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUp
Ci0gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQtPnNldFN0eWxlSXNBZmZlY3RlZEJ5UHJldmlv
dXNTaWJsaW5nKCk7CisgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAq
Y29udGV4dC5lbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5n
KTsKKwogICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50ID0gY29udGV4dC5lbGVtZW50LT5wcmV2
aW91c0VsZW1lbnRTaWJsaW5nKCk7CiAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JP
ZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgIG5leHRDb250ZXh0
LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7CiAgICAgICAgIGZvciAoOyBuZXh0Q29udGV4dC5lbGVt
ZW50OyBuZXh0Q29udGV4dC5lbGVtZW50ID0gbmV4dENvbnRleHQuZWxlbWVudC0+cHJldmlvdXNF
bGVtZW50U2libGluZygpKSB7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2Rl
ID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQotICAgICAgICAgICAgICAgIG5leHRDb250ZXh0LmVs
ZW1lbnQtPnNldEFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpOworICAgICAgICAgICAg
YWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpuZXh0Q29udGV4dC5lbGVtZW50LCBT
dHlsZVJlbGF0aW9uOjpBZmZlY3RzTmV4dFNpYmxpbmcpOwogCiAgICAgICAgICAgICBQc2V1ZG9J
ZFNldCBpZ25vcmVEeW5hbWljUHNldWRvOwogICAgICAgICAgICAgdW5zaWduZWQgaW5kaXJlY3RB
ZGphY2VudFNwZWNpZmljaXR5ID0gMDsKLSAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9
IG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIGluZGly
ZWN0QWRqYWNlbnRTcGVjaWZpY2l0eSk7CisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQg
PSBtYXRjaFJlY3Vyc2l2ZWx5KGNoZWNraW5nQ29udGV4dCwgbmV4dENvbnRleHQsIGlnbm9yZUR5
bmFtaWNQc2V1ZG8sIGluZGlyZWN0QWRqYWNlbnRTcGVjaWZpY2l0eSk7CiAgICAgICAgICAgICBB
U1NFUlQoIW5leHRDb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUgJiYgIWlnbm9yZUR5bmFt
aWNQc2V1ZG8pOwogCiAgICAgICAgICAgICBpZiAocmVzdWx0Lm1hdGNoID09IE1hdGNoOjpTZWxl
Y3Rvck1hdGNoZXMpCkBAIC0zNzQsMTMgKzM3NSwxMyBAQCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNo
UmVzdWx0IFNlbGVjdG9yQ2hlCiAgICAgICAgICAgICAvLyB0byBmb2xsb3cgdGhlIHBzZXVkbyBl
bGVtZW50cy4KICAgICAgICAgICAgIG5leHRDb250ZXh0Lmhhc1Njcm9sbGJhclBzZXVkbyA9IGhh
c1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoZHluYW1pY1BzZXVkb0lkU2V0KTsKICAgICAgICAgICAg
IG5leHRDb250ZXh0Lmhhc1NlbGVjdGlvblBzZXVkbyA9IGR5bmFtaWNQc2V1ZG9JZFNldC5oYXMo
U0VMRUNUSU9OKTsKLSAgICAgICAgICAgIGlmICgoY29udGV4dC5lbGVtZW50U3R5bGUgfHwgY29u
dGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlcykgJiYgZHluYW1pY1Bz
ZXVkb0lkU2V0CisgICAgICAgICAgICBpZiAoKGNvbnRleHQuaXNNYXRjaEVsZW1lbnQgfHwgY2hl
Y2tpbmdDb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6Q29sbGVjdGluZ1J1bGVzKSAmJiBk
eW5hbWljUHNldWRvSWRTZXQKICAgICAgICAgICAgICAgICAmJiAhbmV4dENvbnRleHQuaGFzU2Vs
ZWN0aW9uUHNldWRvCiAgICAgICAgICAgICAgICAgJiYgIShuZXh0Q29udGV4dC5oYXNTY3JvbGxi
YXJQc2V1ZG8gJiYgbmV4dENvbnRleHQuc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzKSkKICAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxz
KE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7CiAKICAgICAgICAgICAgIHVuc2lnbmVk
IHN1YnNlbGVjdG9yU3BlY2lmaWNpdHkgPSAwOwotICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVz
dWx0ID0gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgZHluYW1pY1BzZXVkb0lkU2V0LCBz
dWJzZWxlY3RvclNwZWNpZmljaXR5KTsKKyAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9
IG1hdGNoUmVjdXJzaXZlbHkoY2hlY2tpbmdDb250ZXh0LCBuZXh0Q29udGV4dCwgZHluYW1pY1Bz
ZXVkb0lkU2V0LCBzdWJzZWxlY3RvclNwZWNpZmljaXR5KTsKIAogICAgICAgICAgICAgaWYgKHJl
c3VsdC5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzKQogICAgICAgICAgICAgICAgIHNw
ZWNpZmljaXR5ID0gQ1NTU2VsZWN0b3I6OmFkZFNwZWNpZmljaXRpZXMoc3BlY2lmaWNpdHksIHN1
YnNlbGVjdG9yU3BlY2lmaWNpdHkpOwpAQCAtMzk0LDEwICszOTUsOSBAQCBTZWxlY3RvckNoZWNr
ZXI6Ok1hdGNoUmVzdWx0IFNlbGVjdG9yQ2hlCiAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNo
UmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwogICAgICAgICAg
ICAgbmV4dENvbnRleHQuZWxlbWVudCA9IHNoYWRvd0hvc3ROb2RlOwogICAgICAgICAgICAgbmV4
dENvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBuZXh0Q29udGV4dC5zZWxlY3Rv
cjsKLSAgICAgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7CiAgICAg
ICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvOwogICAgICAgICAgICAgdW5z
aWduZWQgc2hhZG93RGVzY2VuZGFudFNwZWNpZmljaXR5ID0gMDsKLSAgICAgICAgICAgIE1hdGNo
UmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFt
aWNQc2V1ZG8sIHNoYWRvd0Rlc2NlbmRhbnRTcGVjaWZpY2l0eSk7CisgICAgICAgICAgICBNYXRj
aFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KGNoZWNraW5nQ29udGV4dCwgbmV4dENv
bnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIHNoYWRvd0Rlc2NlbmRhbnRTcGVjaWZpY2l0eSk7
CiAKICAgICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hl
cykKICAgICAgICAgICAgICAgICBzcGVjaWZpY2l0eSA9IENTU1NlbGVjdG9yOjphZGRTcGVjaWZp
Y2l0aWVzKHNwZWNpZmljaXR5LCBzaGFkb3dEZXNjZW5kYW50U3BlY2lmaWNpdHkpOwpAQCAtNTA0
LDcgKzUwNCw3IEBAIHN0YXRpYyBib29sIGF0dHJpYnV0ZVZhbHVlTWF0Y2hlcyhjb25zdCAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgYW55QXR0cmlidXRlTWF0Y2hlcyhFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHNlbGVjdG9yQXR0ciwgYm9vbCBjYXNlU2Vuc2l0aXZlKQorc3RhdGljIGJvb2wgYW55
QXR0cmlidXRlTWF0Y2hlcyhjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rv
ciogc2VsZWN0b3IsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHNlbGVjdG9yQXR0ciwgYm9vbCBjYXNl
U2Vuc2l0aXZlKQogewogICAgIEFTU0VSVChlbGVtZW50LT5oYXNBdHRyaWJ1dGVzV2l0aG91dFVw
ZGF0ZSgpKTsKICAgICBmb3IgKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlIDogZWxlbWVudC0+
YXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKQEAgLTUxOCw3ICs1MTgsNyBAQCBzdGF0aWMgYm9vbCBh
bnlBdHRyaWJ1dGVNYXRjaGVzKEVsZW1lbnQqCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0
aWMgYm9vbCBjYW5NYXRjaEhvdmVyT3JBY3RpdmVJblF1aXJrc01vZGUoY29uc3QgU2VsZWN0b3JD
aGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0KQorc3RhdGljIGJvb2wg
Y2FuTWF0Y2hIb3Zlck9yQWN0aXZlSW5RdWlya3NNb2RlKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6
TG9jYWxDb250ZXh0JiBjb250ZXh0KQogewogICAgIC8vIEZvciBxdWlya3MgbW9kZSwgZm9sbG93
IHRoaXM6IGh0dHA6Ly9xdWlya3Muc3BlYy53aGF0d2cub3JnLyN0aGUtOmFjdGl2ZS1hbmQtOmhv
dmVyLXF1aXJrCiAgICAgLy8gSW4gcXVpcmtzIG1vZGUsIGEgY29tcG91bmQgc2VsZWN0b3IgJ3Nl
bGVjdG9yJyB0aGF0IG1hdGNoZXMgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIG11c3Qgbm90IG1h
dGNoIGVsZW1lbnRzIHRoYXQgd291bGQgbm90IGFsc28gbWF0Y2ggdGhlICc6YW55LWxpbmsnIHNl
bGVjdG9yLgpAQCAtNTg4LDkgKzU4OCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB0YWdNYXRjaGVz
KGNvbnN0IEVsZW0KICAgICByZXR1cm4gbmFtZXNwYWNlVVJJID09IHN0YXJBdG9tIHx8IG5hbWVz
cGFjZVVSSSA9PSBlbGVtZW50Lm5hbWVzcGFjZVVSSSgpOwogfQogCi1ib29sIFNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCwg
UHNldWRvSWRTZXQmIGR5bmFtaWNQc2V1ZG9JZFNldCwgTWF0Y2hUeXBlJiBtYXRjaFR5cGUsIHVu
c2lnbmVkJiBzcGVjaWZpY2l0eSkgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09u
ZShDaGVja2luZ0NvbnRleHQmIGNoZWNraW5nQ29udGV4dCwgY29uc3QgTG9jYWxDb250ZXh0JiBj
b250ZXh0LCBQc2V1ZG9JZFNldCYgZHluYW1pY1BzZXVkb0lkU2V0LCBNYXRjaFR5cGUmIG1hdGNo
VHlwZSwgdW5zaWduZWQmIHNwZWNpZmljaXR5KSBjb25zdAogewotICAgIEVsZW1lbnQqIGNvbnN0
ICYgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDsKKyAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50
ID0gY29udGV4dC5lbGVtZW50OwogICAgIGNvbnN0IENTU1NlbGVjdG9yKiBjb25zdCAmIHNlbGVj
dG9yID0gY29udGV4dC5zZWxlY3RvcjsKICAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAgQVNTRVJU
KHNlbGVjdG9yKTsKQEAgLTYyNiw3ICs2MjYsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmUoY29uc3QgQ2hlCiAgICAgICAgICAgICBjb25zdCBDU1NTZWxlY3Rvckxpc3QqIHNlbGVj
dG9yTGlzdCA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKTsKIAogICAgICAgICAgICAgZm9yIChj
b25zdCBDU1NTZWxlY3Rvciogc3Vic2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1
YnNlbGVjdG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJzZWxlY3Rv
cikpIHsKLSAgICAgICAgICAgICAgICBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIHN1YmNvbnRl
eHQoY29udGV4dCk7CisgICAgICAgICAgICAgICAgTG9jYWxDb250ZXh0IHN1YmNvbnRleHQoY29u
dGV4dCk7CiAgICAgICAgICAgICAgICAgc3ViY29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFz
cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgc3ViY29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0
aXZlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgc3ViY29udGV4dC5zZWxlY3RvciA9IHN1YnNl
bGVjdG9yOwpAQCAtNjM0LDcgKzYzNCw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09u
ZShjb25zdCBDaGUKICAgICAgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNl
dWRvOwogCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaWdub3JlZFNwZWNpZmljaXR5OwotICAg
ICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YmNvbnRleHQsIGlnbm9yZUR5bmFt
aWNQc2V1ZG8sIGlnbm9yZWRTcGVjaWZpY2l0eSkubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0
Y2hlcykgeworICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KGNoZWNraW5nQ29u
dGV4dCwgc3ViY29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywgaWdub3JlZFNwZWNpZmljaXR5
KS5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzKSB7CiAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghaWdub3JlRHluYW1pY1BzZXVkbyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgICAgICB9CkBAIC02NDMsNyArNjQzLDcgQEAgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZQogICAgICAgICB9IGVsc2UgaWYgKGNvbnRl
eHQuaGFzU2Nyb2xsYmFyUHNldWRvKSB7CiAgICAgICAgICAgICAvLyBDU1Mgc2Nyb2xsYmFycyBt
YXRjaCBhIHNwZWNpZmljIHN1YnNldCBvZiBwc2V1ZG8gY2xhc3NlcywgYW5kIHRoZXkgaGF2ZSBz
cGVjaWFsaXplZCBydWxlcyBmb3IgZWFjaAogICAgICAgICAgICAgLy8gKHNpbmNlIHRoZXJlIGFy
ZSBubyBlbGVtZW50cyBpbnZvbHZlZCBleGNlcHQgd2l0aCB3aW5kb3ctaW5hY3RpdmUpLgotICAg
ICAgICAgICAgcmV0dXJuIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoY29udGV4dCwgc2VsZWN0
b3IpOworICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoY2hlY2tp
bmdDb250ZXh0LCAqY29udGV4dC5lbGVtZW50LCBzZWxlY3Rvcik7CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBOb3JtYWwgZWxlbWVudCBwc2V1ZG8gY2xhc3MgY2hlY2tpbmcuCkBAIC02NjcsNTMg
KzY2Nyw0MSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlCiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2Rl
OjpSZXNvbHZpbmdTdHlsZSkgewotICAgICAgICAgICAgICAgICAgICBlbGVtZW50LT5zZXRTdHls
ZUFmZmVjdGVkQnlFbXB0eSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5lbGVt
ZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+
c2V0RW1wdHlTdGF0ZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKmNvbnRleHQuZWxlbWVudCwgU3R5
bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeUVtcHR5LCByZXN1bHQpOworCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NGaXJzdENoaWxkOgogICAgICAgICAgICAgLy8gZmlyc3QtY2hpbGQgbWF0Y2hl
cyB0aGUgZmlyc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50Ci0gICAgICAgICAgICBpZiAoRWxl
bWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAg
ICAgICAgICAgIGJvb2wgcmVzdWx0ID0gaXNGaXJzdENoaWxkRWxlbWVudCgqZWxlbWVudCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZp
bmdTdHlsZSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9
IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5y
ZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGls
ZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHJlc3VsdCAmJiBjaGlsZFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRTdHls
ZS0+c2V0Rmlyc3RDaGlsZFN0YXRlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICBpZiAoY29uc3QgRWxlbWVudCogcGFyZW50
RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGJv
b2wgaXNGaXJzdENoaWxkID0gaXNGaXJzdENoaWxkRWxlbWVudCgqZWxlbWVudCk7CisgICAgICAg
ICAgICAgICAgaWYgKGlzRmlyc3RDaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVS
ZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICplbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpGaXJzdENo
aWxkKTsKKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwg
KnBhcmVudEVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hp
bGRSdWxlcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGlzRmlyc3RDaGlsZDsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzc0ZpcnN0T2ZUeXBlOgogICAgICAgICAgICAgLy8gZmlyc3Qtb2YtdHlwZSBtYXRjaGVz
IHRoZSBmaXJzdCBlbGVtZW50IG9mIGl0cyB0eXBlCiAgICAgICAgICAgICBpZiAoZWxlbWVudC0+
cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5n
TW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVu
dC0+c2V0U3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoKTsKLQotICAgICAgICAgICAg
ICAgIHJldHVybiBpc0ZpcnN0T2ZUeXBlKCplbGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgpLCBj
b250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpOworICAgICAgICAg
ICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqZWxlbWVudCwgU3R5bGVS
ZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGlzRmlyc3RPZlR5cGUoY2hlY2tpbmdDb250ZXh0LCAqZWxlbWVudCwgZWxlbWVudC0+dGFn
UU5hbWUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NMYXN0Q2hpbGQ6CiAgICAgICAgICAgICAvLyBsYXN0
LWNoaWxkIG1hdGNoZXMgdGhlIGxhc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50Ci0gICAgICAg
ICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQo
KSkgewotICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gcGFyZW50RWxlbWVudC0+aXNGaW5p
c2hlZFBhcnNpbmdDaGlsZHJlbigpICYmIGlzTGFzdENoaWxkRWxlbWVudCgqZWxlbWVudCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZp
bmdTdHlsZSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9
IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5y
ZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGls
ZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcygpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
cmVzdWx0ICYmIGNoaWxkU3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFN0eWxl
LT5zZXRMYXN0Q2hpbGRTdGF0ZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgaWYgKGNvbnN0IEVsZW1lbnQqIHBhcmVudEVs
ZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBib29s
IGlzTGFzdENoaWxkID0gcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigp
ICYmIGlzTGFzdENoaWxkRWxlbWVudCgqZWxlbWVudCk7CisgICAgICAgICAgICAgICAgaWYgKGlz
TGFzdENoaWxkKQorICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5n
Q29udGV4dCwgKmVsZW1lbnQsIFN0eWxlUmVsYXRpb246Okxhc3RDaGlsZCk7CisgICAgICAgICAg
ICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpwYXJlbnRFbGVtZW50LCBT
dHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcyk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGlzTGFzdENoaWxkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGFzdE9mVHlwZToK
ICAgICAgICAgICAgIC8vIGxhc3Qtb2YtdHlwZSBtYXRjaGVzIHRoZSBsYXN0IGVsZW1lbnQgb2Yg
aXRzIHR5cGUKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVu
dC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2
aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgcGFy
ZW50RWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMo
KTsKKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBh
cmVudEVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9z
aXRpb25hbFJ1bGVzKTsKICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmlu
aXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgICAgIHJldHVybiBpc0xhc3RPZlR5cGUoKmVsZW1lbnQsIGVsZW1lbnQt
PnRhZ1FOYW1lKCkpOwpAQCAtNzIzLDI4ICs3MTEsMjMgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6
OmNoZWNrT25lKGNvbnN0IENoZQogICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1l
bnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAgICBib29sIGZp
cnN0Q2hpbGQgPSBpc0ZpcnN0Q2hpbGRFbGVtZW50KCplbGVtZW50KTsKICAgICAgICAgICAgICAg
ICBib29sIG9ubHlDaGlsZCA9IGZpcnN0Q2hpbGQgJiYgcGFyZW50RWxlbWVudC0+aXNGaW5pc2hl
ZFBhcnNpbmdDaGlsZHJlbigpICYmIGlzTGFzdENoaWxkRWxlbWVudCgqZWxlbWVudCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdT
dHlsZSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNv
bnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5k
ZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJl
bkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50
RWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMoKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQgJiYgY2hpbGRTdHlsZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNoaWxkU3R5bGUtPnNldEZpcnN0Q2hpbGRTdGF0ZSgpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAob25seUNoaWxkICYmIGNoaWxkU3R5bGUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjaGlsZFN0eWxlLT5zZXRMYXN0Q2hpbGRTdGF0ZSgpOwotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVu
dEVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxl
cyk7CisgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpw
YXJlbnRFbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRS
dWxlcyk7CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQpCisgICAgICAgICAgICAgICAg
ICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqZWxlbWVudCwgU3R5bGVSZWxh
dGlvbjo6Rmlyc3RDaGlsZCk7CisgICAgICAgICAgICAgICAgaWYgKG9ubHlDaGlsZCkKKyAgICAg
ICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICplbGVtZW50
LCBTdHlsZVJlbGF0aW9uOjpMYXN0Q2hpbGQpOwogICAgICAgICAgICAgICAgIHJldHVybiBvbmx5
Q2hpbGQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NPbmx5T2ZUeXBlOgogICAgICAgICAgICAgLy8gRklYTUU6
IFRoaXMgc2VsZWN0b3IgaXMgdmVyeSBzbG93LgogICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBh
cmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGVsZW1lbnQtPnNldFN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNT
aWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVu
QWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqZWxlbWVu
dCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyk7CisgICAgICAgICAg
ICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpwYXJlbnRFbGVtZW50LCBT
dHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyk7
CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0No
aWxkcmVuKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gaXNGaXJzdE9mVHlwZSgqZWxlbWVudCwgZWxlbWVudC0+dGFnUU5hbWUoKSwg
Y29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSAmJiBpc0xhc3RP
ZlR5cGUoKmVsZW1lbnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkpOworICAgICAgICAgICAgICAgIHJl
dHVybiBpc0ZpcnN0T2ZUeXBlKGNoZWNraW5nQ29udGV4dCwgKmVsZW1lbnQsIGVsZW1lbnQtPnRh
Z1FOYW1lKCkpICYmIGlzTGFzdE9mVHlwZSgqZWxlbWVudCwgZWxlbWVudC0+dGFnUU5hbWUoKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NNYXRjaGVzOgpAQCAtNzU0LDE0ICs3MzcsMTQgQEAgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZQogCiAgICAgICAgICAgICAgICAgTWF0Y2hU
eXBlIGxvY2FsTWF0Y2hUeXBlID0gTWF0Y2hUeXBlOjpWaXJ0dWFsUHNldWRvRWxlbWVudE9ubHk7
CiAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc3Vic2VsZWN0b3IgPSBz
ZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxlY3Rv
ciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJzZWxlY3RvcikpIHsKLSAgICAgICAgICAgICAg
ICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJjb250ZXh0KGNvbnRleHQpOworICAg
ICAgICAgICAgICAgICAgICBMb2NhbENvbnRleHQgc3ViY29udGV4dChjb250ZXh0KTsKICAgICAg
ICAgICAgICAgICAgICAgc3ViY29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgIHN1YmNvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZSA9
IGNvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZTsKICAgICAgICAgICAgICAgICAgICAgc3Vi
Y29udGV4dC5zZWxlY3RvciA9IHN1YnNlbGVjdG9yOwogICAgICAgICAgICAgICAgICAgICBzdWJj
b250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gc3Vic2VsZWN0b3I7CiAgICAgICAg
ICAgICAgICAgICAgIFBzZXVkb0lkU2V0IGxvY2FsRHluYW1pY1BzZXVkb0lkU2V0OwogICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBsb2NhbFNwZWNpZmljaXR5ID0gMDsKLSAgICAgICAgICAg
ICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0
LCBsb2NhbER5bmFtaWNQc2V1ZG9JZFNldCwgbG9jYWxTcGVjaWZpY2l0eSk7CisgICAgICAgICAg
ICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkoY2hlY2tpbmdD
b250ZXh0LCBzdWJjb250ZXh0LCBsb2NhbER5bmFtaWNQc2V1ZG9JZFNldCwgbG9jYWxTcGVjaWZp
Y2l0eSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2ggPT0gTWF0Y2g6OlNl
bGVjdG9yTWF0Y2hlcykgewogICAgICAgICAgICAgICAgICAgICAgICAgbWF4U3BlY2lmaWNpdHkg
PSBzdGQ6Om1heChtYXhTcGVjaWZpY2l0eSwgbG9jYWxTcGVjaWZpY2l0eSk7CiAKQEAgLTc4MCwx
MCArNzYzLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZQogICAg
ICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1BsYWNlaG9s
ZGVyU2hvd246CiAgICAgICAgICAgICBpZiAoaXM8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+
KCplbGVtZW50KSkgewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUg
PT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFJlbmRl
clN0eWxlKiBzdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50U3R5
bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgc3R5
bGUtPnNldFVuaXF1ZSgpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhZGRT
dHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKmVsZW1lbnQsIFN0eWxlUmVsYXRpb246OlVu
aXF1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50PigqZWxlbWVudCkuaXNQbGFjZWhvbGRlclZpc2libGUoKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc5MywyOSArNzczLDI2IEBAIGJvb2wg
U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGUKICAgICAgICAgICAgIGlmIChlbGVt
ZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY29uc3QgQ1NTU2Vs
ZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2VsZWN0b3JMaXN0U3BlY2lmaWNpdHk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChtYXRjaFNlbGVjdG9yTGlzdChjb250ZXh0LCAqZWxlbWVudCwg
KnNlbGVjdG9yTGlzdCwgc2VsZWN0b3JMaXN0U3BlY2lmaWNpdHkpKQorICAgICAgICAgICAgICAg
ICAgICBpZiAobWF0Y2hTZWxlY3Rvckxpc3QoY2hlY2tpbmdDb250ZXh0LCBjb250ZXh0LCAqZWxl
bWVudCwgKnNlbGVjdG9yTGlzdCwgc2VsZWN0b3JMaXN0U3BlY2lmaWNpdHkpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgc3BlY2lmaWNpdHkgPSBDU1NTZWxlY3Rvcjo6YWRkU3BlY2lmaWNpdGll
cyhzcGVjaWZpY2l0eSwgc2VsZWN0b3JMaXN0U3BlY2lmaWNpdHkpOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9
PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0
U3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICBhZGRT
dHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKmVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkFm
ZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcpOwogCiAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0g
MTsKICAgICAgICAgICAgICAgICBpZiAoY29uc3QgQ1NTU2VsZWN0b3JMaXN0KiBzZWxlY3Rvckxp
c3QgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgZm9y
IChFbGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKCpl
bGVtZW50KTsgc2libGluZzsgc2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2li
bGluZygqc2libGluZykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJl
c29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2libGluZy0+c2V0QWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwg
KnNpYmxpbmcsIFN0eWxlUmVsYXRpb246OkFmZmVjdHNOZXh0U2libGluZyk7CiAKICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlnbm9yZWRTcGVjaWZpY2l0eTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChtYXRjaFNlbGVjdG9yTGlzdChjb250ZXh0LCAqc2libGluZywgKnNl
bGVjdG9yTGlzdCwgaWdub3JlZFNwZWNpZmljaXR5KSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChtYXRjaFNlbGVjdG9yTGlzdChjaGVja2luZ0NvbnRleHQsIGNvbnRleHQsICpzaWJsaW5n
LCAqc2VsZWN0b3JMaXN0LCBpZ25vcmVkU3BlY2lmaWNpdHkpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICsrY291bnQ7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBjb3VudEVsZW1lbnRzQmVm
b3JlKCplbGVtZW50LCBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5
bGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1v
ZGU6OlJlc29sdmluZ1N0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0
Q2hpbGRJbmRleChjb3VudCk7CisgICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IGNvdW50RWxl
bWVudHNCZWZvcmUoY2hlY2tpbmdDb250ZXh0LCAqZWxlbWVudCk7CisgICAgICAgICAgICAgICAg
ICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqZWxlbWVudCwgU3R5bGVSZWxh
dGlvbjo6TnRoQ2hpbGRJbmRleCwgY291bnQpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgICAgIGlmIChzZWxlY3Rvci0+bWF0Y2hOdGgoY291bnQpKQpAQCAtODI3LDEwICs4MDQs
OSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGlmIChlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJl
c29sdmluZ1N0eWxlKQotICAgICAgICAgICAgICAgICAgICBlbGVtZW50LT5zZXRTdHlsZUlzQWZm
ZWN0ZWRCeVByZXZpb3VzU2libGluZygpOworICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRp
b24oY2hlY2tpbmdDb250ZXh0LCAqZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeVBy
ZXZpb3VzU2libGluZyk7CiAKLSAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxICsgY291bnRF
bGVtZW50c09mVHlwZUJlZm9yZSgqZWxlbWVudCwgZWxlbWVudC0+dGFnUU5hbWUoKSwgY29udGV4
dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKTsKKyAgICAgICAgICAgICAg
ICBpbnQgY291bnQgPSAxICsgY291bnRFbGVtZW50c09mVHlwZUJlZm9yZShjaGVja2luZ0NvbnRl
eHQsICplbGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKTsKICAgICAgICAgICAgICAgICBpZiAo
c2VsZWN0b3ItPm1hdGNoTnRoKGNvdW50KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICB9CkBAIC04NDEsMTcgKzgxNywxNCBAQCBib29sIFNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlCiAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50
RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICAgICAgICAgIGlm
IChjb25zdCBDU1NTZWxlY3Rvckxpc3QqIHNlbGVjdG9yTGlzdCA9IHNlbGVjdG9yLT5zZWxlY3Rv
ckxpc3QoKSkgewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzZWxlY3Rvckxpc3RTcGVj
aWZpY2l0eTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoU2VsZWN0b3JMaXN0KGNvbnRl
eHQsICplbGVtZW50LCAqc2VsZWN0b3JMaXN0LCBzZWxlY3Rvckxpc3RTcGVjaWZpY2l0eSkpCisg
ICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFNlbGVjdG9yTGlzdChjaGVja2luZ0NvbnRleHQs
IGNvbnRleHQsICplbGVtZW50LCAqc2VsZWN0b3JMaXN0LCBzZWxlY3Rvckxpc3RTcGVjaWZpY2l0
eSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY2l0eSA9IENTU1NlbGVjdG9yOjph
ZGRTcGVjaWZpY2l0aWVzKHNwZWNpZmljaXR5LCBzZWxlY3Rvckxpc3RTcGVjaWZpY2l0eSk7CiAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09
IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRF
bGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dhcmRQb3NpdGlv
bmFsUnVsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENo
aWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9k
ZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxl
bWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAg
ICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpwYXJl
bnRFbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2Vk
QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVs
ZW1lbnQsIFN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25h
bFJ1bGVzKTsKIAogICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hl
ZFBhcnNpbmdDaGlsZHJlbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC04NjAsNyArODMzLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENo
ZQogICAgICAgICAgICAgICAgIGlmIChjb25zdCBDU1NTZWxlY3Rvckxpc3QqIHNlbGVjdG9yTGlz
dCA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKSkgewogICAgICAgICAgICAgICAgICAgICBmb3Ig
KEVsZW1lbnQqIHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZygqZWxlbWVu
dCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZygqc2li
bGluZykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlnbm9yZWRTcGVjaWZp
Y2l0eTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFNlbGVjdG9yTGlzdChjb250
ZXh0LCAqc2libGluZywgKnNlbGVjdG9yTGlzdCwgaWdub3JlZFNwZWNpZmljaXR5KSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFNlbGVjdG9yTGlzdChjaGVja2luZ0NvbnRleHQs
IGNvbnRleHQsICpzaWJsaW5nLCAqc2VsZWN0b3JMaXN0LCBpZ25vcmVkU3BlY2lmaWNpdHkpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9IGVsc2UKQEAgLTg3NCw4ICs4NDcsOCBAQCBib29sIFNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlCiAgICAgICAgICAgICBpZiAoIXNlbGVjdG9y
LT5wYXJzZU50aCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKEVs
ZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0
eWxlKQotICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVj
dGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOworICAgICAgICAgICAgICAgIGFkZFN0eWxl
UmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqcGFyZW50RWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6
Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOworCiAgICAgICAgICAg
ICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtODkwLDE0ICs4NjMsMTQgQEAg
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQW55OgogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgc3ViQ29udGV4
dChjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBMb2NhbENvbnRleHQgc3ViQ29udGV4dChjb250
ZXh0KTsKICAgICAgICAgICAgICAgICBzdWJDb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNz
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBzdWJDb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3Rp
dmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBmb3IgKHN1YkNvbnRleHQuc2VsZWN0b3IgPSBz
ZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1YkNvbnRleHQuc2VsZWN0b3I7IHN1
YkNvbnRleHQuc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3ViQ29udGV4dC5zZWxl
Y3RvcikpIHsKICAgICAgICAgICAgICAgICAgICAgc3ViQ29udGV4dC5maXJzdFNlbGVjdG9yT2ZU
aGVGcmFnbWVudCA9IHN1YkNvbnRleHQuc2VsZWN0b3I7CiAgICAgICAgICAgICAgICAgICAgIFBz
ZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CiAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGluZ29yZWRTcGVjaWZpY2l0eSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYXRj
aFJlY3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIGluZ29yZWRTcGVj
aWZpY2l0eSkubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoY2hlY2tpbmdDb250ZXh0LCBzdWJDb250ZXh0LCBp
Z25vcmVEeW5hbWljUHNldWRvLCBpbmdvcmVkU3BlY2lmaWNpdHkpLm1hdGNoID09IE1hdGNoOjpT
ZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC05MTYsMTIgKzg4OSw4IEBAIGJvb2wg
U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGUKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNMaW5rKCkgJiYgY29udGV4
dC52aXNpdGVkTWF0Y2hUeXBlID09IFZpc2l0ZWRNYXRjaFR5cGU6OkVuYWJsZWQ7CiAgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRHJhZzoKLSAgICAgICAgICAgIGlmIChjb250
ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC5lbGVtZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQuZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5RHJhZygpOwotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5RHJh
ZygpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2lu
Z0NvbnRleHQsICplbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5RHJhZyk7CisKICAg
ICAgICAgICAgIGlmIChlbGVtZW50LT5yZW5kZXJlcigpICYmIGVsZW1lbnQtPnJlbmRlcmVyKCkt
PmlzRHJhZ2dpbmcoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtOTI5LDI1ICs4OTgsMTcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNr
T25lKGNvbnN0IENoZQogICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXNGb2N1c1BzZXVkb0NsYXNz
KGVsZW1lbnQpOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hvdmVyOgog
ICAgICAgICAgICAgaWYgKG1fc3RyaWN0UGFyc2luZyB8fCBlbGVtZW50LT5pc0xpbmsoKSB8fCBj
YW5NYXRjaEhvdmVyT3JBY3RpdmVJblF1aXJrc01vZGUoY29udGV4dCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnRTdHlsZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5SG92ZXIo
KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5SG92ZXIoKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhvdmVyZWQoKSB8fCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoKmVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc0hvdmVyKSkKKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29u
dGV4dCwgKmVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlIb3Zlcik7CisKKyAgICAg
ICAgICAgICAgICBpZiAoZWxlbWVudC0+aG92ZXJlZCgpIHx8IEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShjb25zdF9jYXN0PEVsZW1lbnQmPigqZWxlbWVudCksIENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hvdmVyKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBY3RpdmU6CiAgICAgICAgICAgICBpZiAobV9zdHJpY3RQ
YXJzaW5nIHx8IGVsZW1lbnQtPmlzTGluaygpIHx8IGNhbk1hdGNoSG92ZXJPckFjdGl2ZUluUXVp
cmtzTW9kZShjb250ZXh0KSkgewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmlu
Z01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGNvbnRleHQuZWxlbWVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5l
bGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlBY3RpdmUoKTsKLSAgICAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3Rl
ZEJ5QWN0aXZlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChlbGVt
ZW50LT5hY3RpdmUoKSB8fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3Rh
dGUoKmVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0FjdGl2ZSkpCisgICAgICAgICAg
ICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICplbGVtZW50LCBTdHlsZVJl
bGF0aW9uOjpBZmZlY3RlZEJ5QWN0aXZlKTsKKworICAgICAgICAgICAgICAgIGlmIChlbGVtZW50
LT5hY3RpdmUoKSB8fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUo
Y29uc3RfY2FzdDxFbGVtZW50Jj4oKmVsZW1lbnQpLCBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NB
Y3RpdmUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTAwNyw3ICs5NjgsNyBAQCBib29sIFNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlCiAKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3NTY29wZToKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBOb2Rl
KiBjb250ZXh0dWFsUmVmZXJlbmNlTm9kZSA9ICFjb250ZXh0LnNjb3BlID8gZWxlbWVudC0+ZG9j
dW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKSA6IGNvbnRleHQuc2NvcGU7CisgICAgICAgICAgICAg
ICAgY29uc3QgTm9kZSogY29udGV4dHVhbFJlZmVyZW5jZU5vZGUgPSAhY2hlY2tpbmdDb250ZXh0
LnNjb3BlID8gZWxlbWVudC0+ZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKSA6IGNoZWNraW5n
Q29udGV4dC5zY29wZTsKICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSBjb250ZXh0dWFs
UmVmZXJlbmNlTm9kZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xMDUwLDcgKzEwMTEsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tPbmUoY29uc3QgQ2hlCiAgICAgfQogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAg
ICBpZiAoc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQgJiYg
c2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1l
bnRDdWUpIHsKLSAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJDb250ZXh0KGNv
bnRleHQpOworICAgICAgICBMb2NhbENvbnRleHQgc3ViQ29udGV4dChjb250ZXh0KTsKIAogICAg
ICAgICBjb25zdCBDU1NTZWxlY3RvciogY29uc3QgJiBzZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0
b3I7CiAgICAgICAgIGZvciAoc3ViQ29udGV4dC5zZWxlY3RvciA9IHNlbGVjdG9yLT5zZWxlY3Rv
ckxpc3QoKS0+Zmlyc3QoKTsgc3ViQ29udGV4dC5zZWxlY3Rvcjsgc3ViQ29udGV4dC5zZWxlY3Rv
ciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJDb250ZXh0LnNlbGVjdG9yKSkgewpAQCAtMTA1
OSw3ICsxMDIwLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZQog
ICAgICAgICAgICAgc3ViQ29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZlID0gZmFsc2U7CiAg
ICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVkRHluYW1pY1BzZXVkbzsKICAgICAgICAgICAg
IHVuc2lnbmVkIGlnbm9yZWRTcGVjaWZpY2l0eSA9IDA7Ci0gICAgICAgICAgICBpZiAobWF0Y2hS
ZWN1cnNpdmVseShzdWJDb250ZXh0LCBpZ25vcmVkRHluYW1pY1BzZXVkbywgaWdub3JlZFNwZWNp
ZmljaXR5KS5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzKQorICAgICAgICAgICAgaWYg
KG1hdGNoUmVjdXJzaXZlbHkoY2hlY2tpbmdDb250ZXh0LCBzdWJDb250ZXh0LCBpZ25vcmVkRHlu
YW1pY1BzZXVkbywgaWdub3JlZFNwZWNpZmljaXR5KS5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JN
YXRjaGVzKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTEwNjksMTMgKzEwMzAsMTMgQEAgYm9vbCBTZWxlY3RvckNoZWNr
ZXI6OmNoZWNrT25lKGNvbnN0IENoZQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNlbGVj
dG9yQ2hlY2tlcjo6bWF0Y2hTZWxlY3Rvckxpc3QoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0
YXR1cyYgYmFzZUNvbnRleHQsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yTGlz
dCYgc2VsZWN0b3JMaXN0LCB1bnNpZ25lZCYgc3BlY2lmaWNpdHkpIGNvbnN0Citib29sIFNlbGVj
dG9yQ2hlY2tlcjo6bWF0Y2hTZWxlY3Rvckxpc3QoQ2hlY2tpbmdDb250ZXh0JiBjaGVja2luZ0Nv
bnRleHQsIGNvbnN0IExvY2FsQ29udGV4dCYgY29udGV4dCwgY29uc3QgRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxpc3QsIHVuc2lnbmVkJiBzcGVjaWZp
Y2l0eSkgY29uc3QKIHsKICAgICBzcGVjaWZpY2l0eSA9IDA7CiAgICAgYm9vbCBoYXNNYXRjaGVk
QW55dGhpbmcgPSBmYWxzZTsKIAogICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHN1YnNlbGVj
dG9yID0gc2VsZWN0b3JMaXN0LmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxlY3RvciA9IENT
U1NlbGVjdG9yTGlzdDo6bmV4dChzdWJzZWxlY3RvcikpIHsKLSAgICAgICAgQ2hlY2tpbmdDb250
ZXh0V2l0aFN0YXR1cyBzdWJjb250ZXh0KGJhc2VDb250ZXh0KTsKKyAgICAgICAgTG9jYWxDb250
ZXh0IHN1YmNvbnRleHQoY29udGV4dCk7CiAgICAgICAgIHN1YmNvbnRleHQuZWxlbWVudCA9ICZl
bGVtZW50OwogICAgICAgICBzdWJjb250ZXh0LnNlbGVjdG9yID0gc3Vic2VsZWN0b3I7CiAgICAg
ICAgIHN1YmNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3MgPSB0cnVlOwpAQCAtMTA4Myw3
ICsxMDQ0LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoU2VsZWN0b3JMaXN0KAogICAg
ICAgICBzdWJjb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gc3Vic2VsZWN0b3I7
CiAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CiAgICAgICAgIHVuc2ln
bmVkIGxvY2FsU3BlY2lmaWNpdHkgPSAwOwotICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShz
dWJjb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBsb2NhbFNwZWNpZmljaXR5KS5tYXRjaCA9
PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzKSB7CisgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5
KGNoZWNraW5nQ29udGV4dCwgc3ViY29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywgbG9jYWxT
cGVjaWZpY2l0eSkubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykgewogICAgICAgICAg
ICAgQVNTRVJUKCFpZ25vcmVEeW5hbWljUHNldWRvKTsKIAogICAgICAgICAgICAgaGFzTWF0Y2hl
ZEFueXRoaW5nID0gdHJ1ZTsKQEAgLTEwOTMsNDEgKzEwNTQsNDEgQEAgYm9vbCBTZWxlY3RvckNo
ZWNrZXI6Om1hdGNoU2VsZWN0b3JMaXN0KAogICAgIHJldHVybiBoYXNNYXRjaGVkQW55dGhpbmc7
CiB9CiAKLWJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKGNv
bnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQsIGNvbnN0IENTU1NlbGVjdG9y
KiBzZWxlY3RvcikgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja1Njcm9sbGJhclBz
ZXVkb0NsYXNzKGNvbnN0IENoZWNraW5nQ29udGV4dCYgY2hlY2tpbmdDb250ZXh0LCBjb25zdCBF
bGVtZW50JiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKHNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyk7
CiAKICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9DbGFzc1R5cGUoKSkgewogICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzV2luZG93SW5hY3RpdmU6Ci0gICAgICAgIHJldHVybiBp
c1dpbmRvd0luYWN0aXZlKGNvbnRleHQuZWxlbWVudCk7CisgICAgICAgIHJldHVybiBpc1dpbmRv
d0luYWN0aXZlKCZlbGVtZW50KTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Vu
YWJsZWQ6Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXJNYXRjaGVzRW5hYmxlZFBzZXVkb0NsYXNz
KGNvbnRleHQpOworICAgICAgICByZXR1cm4gc2Nyb2xsYmFyTWF0Y2hlc0VuYWJsZWRQc2V1ZG9D
bGFzcyhjaGVja2luZ0NvbnRleHQpOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNz
RGlzYWJsZWQ6Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXJNYXRjaGVzRGlzYWJsZWRQc2V1ZG9D
bGFzcyhjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNoZXNEaXNhYmxlZFBz
ZXVkb0NsYXNzKGNoZWNraW5nQ29udGV4dCk7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3NIb3ZlcjoKLSAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNoZXNIb3ZlclBzZXVkb0Ns
YXNzKGNvbnRleHQpOworICAgICAgICByZXR1cm4gc2Nyb2xsYmFyTWF0Y2hlc0hvdmVyUHNldWRv
Q2xhc3MoY2hlY2tpbmdDb250ZXh0KTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
c0FjdGl2ZToKLSAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNoZXNBY3RpdmVQc2V1ZG9DbGFz
cyhjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNoZXNBY3RpdmVQc2V1ZG9D
bGFzcyhjaGVja2luZ0NvbnRleHQpOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNz
SG9yaXpvbnRhbDoKLSAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNoZXNIb3Jpem9udGFsUHNl
dWRvQ2xhc3MoY29udGV4dCk7CisgICAgICAgIHJldHVybiBzY3JvbGxiYXJNYXRjaGVzSG9yaXpv
bnRhbFBzZXVkb0NsYXNzKGNoZWNraW5nQ29udGV4dCk7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NWZXJ0aWNhbDoKLSAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNoZXNWZXJ0
aWNhbFBzZXVkb0NsYXNzKGNvbnRleHQpOworICAgICAgICByZXR1cm4gc2Nyb2xsYmFyTWF0Y2hl
c1ZlcnRpY2FsUHNldWRvQ2xhc3MoY2hlY2tpbmdDb250ZXh0KTsKICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzc0RlY3JlbWVudDoKLSAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNo
ZXNEZWNyZW1lbnRQc2V1ZG9DbGFzcyhjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJh
ck1hdGNoZXNEZWNyZW1lbnRQc2V1ZG9DbGFzcyhjaGVja2luZ0NvbnRleHQpOwogICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSW5jcmVtZW50OgotICAgICAgICByZXR1cm4gc2Nyb2xs
YmFyTWF0Y2hlc0luY3JlbWVudFBzZXVkb0NsYXNzKGNvbnRleHQpOworICAgICAgICByZXR1cm4g
c2Nyb2xsYmFyTWF0Y2hlc0luY3JlbWVudFBzZXVkb0NsYXNzKGNoZWNraW5nQ29udGV4dCk7CiAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NTdGFydDoKLSAgICAgICAgcmV0dXJuIHNj
cm9sbGJhck1hdGNoZXNTdGFydFBzZXVkb0NsYXNzKGNvbnRleHQpOworICAgICAgICByZXR1cm4g
c2Nyb2xsYmFyTWF0Y2hlc1N0YXJ0UHNldWRvQ2xhc3MoY2hlY2tpbmdDb250ZXh0KTsKICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0VuZDoKLSAgICAgICAgcmV0dXJuIHNjcm9sbGJh
ck1hdGNoZXNFbmRQc2V1ZG9DbGFzcyhjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJh
ck1hdGNoZXNFbmRQc2V1ZG9DbGFzcyhjaGVja2luZ0NvbnRleHQpOwogICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0NsYXNzRG91YmxlQnV0dG9uOgotICAgICAgICByZXR1cm4gc2Nyb2xsYmFy
TWF0Y2hlc0RvdWJsZUJ1dHRvblBzZXVkb0NsYXNzKGNvbnRleHQpOworICAgICAgICByZXR1cm4g
c2Nyb2xsYmFyTWF0Y2hlc0RvdWJsZUJ1dHRvblBzZXVkb0NsYXNzKGNoZWNraW5nQ29udGV4dCk7
CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NTaW5nbGVCdXR0b246Ci0gICAgICAg
IHJldHVybiBzY3JvbGxiYXJNYXRjaGVzU2luZ2xlQnV0dG9uUHNldWRvQ2xhc3MoY29udGV4dCk7
CisgICAgICAgIHJldHVybiBzY3JvbGxiYXJNYXRjaGVzU2luZ2xlQnV0dG9uUHNldWRvQ2xhc3Mo
Y2hlY2tpbmdDb250ZXh0KTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc05vQnV0
dG9uOgotICAgICAgICByZXR1cm4gc2Nyb2xsYmFyTWF0Y2hlc05vQnV0dG9uUHNldWRvQ2xhc3Mo
Y29udGV4dCk7CisgICAgICAgIHJldHVybiBzY3JvbGxiYXJNYXRjaGVzTm9CdXR0b25Qc2V1ZG9D
bGFzcyhjaGVja2luZ0NvbnRleHQpOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNz
Q29ybmVyUHJlc2VudDoKLSAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNoZXNDb3JuZXJQcmVz
ZW50UHNldWRvQ2xhc3MoY29udGV4dCk7CisgICAgICAgIHJldHVybiBzY3JvbGxiYXJNYXRjaGVz
Q29ybmVyUHJlc2VudFBzZXVkb0NsYXNzKGNoZWNraW5nQ29udGV4dCk7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9T
ZWxlY3RvckNoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0
b3JDaGVja2VyLmgJKHJldmlzaW9uIDE5NTEzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxl
Y3RvckNoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAy
MDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKQogICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFzIFNoYW5rcyAod2Via2l0QG5pY2tzaGFua3Mu
Y29tKQotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
LCAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKQEAgLTc2LDI3
ICs3Niw0NiBAQCBwdWJsaWM6CiAKICAgICBTZWxlY3RvckNoZWNrZXIoRG9jdW1lbnQmKTsKIAor
ICAgIHN0cnVjdCBTdHlsZVJlbGF0aW9uIHsKKyAgICAgICAgZW51bSBUeXBlIHsKKyAgICAgICAg
ICAgIEFmZmVjdGVkQnlBY3RpdmUsCisgICAgICAgICAgICBBZmZlY3RlZEJ5RHJhZywKKyAgICAg
ICAgICAgIEFmZmVjdGVkQnlFbXB0eSwKKyAgICAgICAgICAgIEFmZmVjdGVkQnlIb3ZlciwKKyAg
ICAgICAgICAgIEFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcsCisgICAgICAgICAgICBBZmZlY3Rz
TmV4dFNpYmxpbmcsCisgICAgICAgICAgICBDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0
aW9uYWxSdWxlcywKKyAgICAgICAgICAgIENoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxl
cywKKyAgICAgICAgICAgIENoaWxkcmVuQWZmZWN0ZWRCeVByb3BlcnR5QmFzZWRCYWNrd2FyZFBv
c2l0aW9uYWxSdWxlcywKKyAgICAgICAgICAgIENoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1
bGVzLAorICAgICAgICAgICAgRmlyc3RDaGlsZCwKKyAgICAgICAgICAgIExhc3RDaGlsZCwKKyAg
ICAgICAgICAgIE50aENoaWxkSW5kZXgsCisgICAgICAgICAgICBVbmlxdWUsCisgICAgICAgIH07
CisgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQ7CisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAg
dW5zaWduZWQgdmFsdWU7CisgICAgfTsKKyAgICB1c2luZyBTdHlsZVJlbGF0aW9ucyA9IFZlY3Rv
cjxTdHlsZVJlbGF0aW9uLCA4PjsKKwogICAgIHN0cnVjdCBDaGVja2luZ0NvbnRleHQgewogICAg
ICAgICBDaGVja2luZ0NvbnRleHQoU2VsZWN0b3JDaGVja2VyOjpNb2RlIHJlc29sdmluZ01vZGUp
CiAgICAgICAgICAgICA6IHJlc29sdmluZ01vZGUocmVzb2x2aW5nTW9kZSkKLSAgICAgICAgICAg
ICwgZWxlbWVudFN0eWxlKG51bGxwdHIpCi0gICAgICAgICAgICAsIHBzZXVkb0lkKE5PUFNFVURP
KQotICAgICAgICAgICAgLCBzY3JvbGxiYXIobnVsbHB0cikKLSAgICAgICAgICAgICwgc2Nyb2xs
YmFyUGFydChOb1BhcnQpCi0gICAgICAgICAgICAsIHNjb3BlKG51bGxwdHIpCiAgICAgICAgIHsg
fQogCi0gICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSByZXNvbHZpbmdNb2RlOwotICAgICAg
ICBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlOwotICAgICAgICBQc2V1ZG9JZCBwc2V1ZG9JZDsK
LSAgICAgICAgUmVuZGVyU2Nyb2xsYmFyKiBzY3JvbGxiYXI7Ci0gICAgICAgIFNjcm9sbGJhclBh
cnQgc2Nyb2xsYmFyUGFydDsKLSAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGU7Cisg
ICAgICAgIGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSByZXNvbHZpbmdNb2RlOworICAgICAg
ICBQc2V1ZG9JZCBwc2V1ZG9JZCB7IE5PUFNFVURPIH07CisgICAgICAgIFJlbmRlclNjcm9sbGJh
ciogc2Nyb2xsYmFyIHsgbnVsbHB0ciB9OworICAgICAgICBTY3JvbGxiYXJQYXJ0IHNjcm9sbGJh
clBhcnQgeyBOb1BhcnQgfTsKKyAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgeyBu
dWxscHRyIH07CisKKyAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2VyIHRvIGhhdmUg
YSBzZXBhcmF0ZSBvYmplY3QgZm9yIHJldHVybiB2YWx1ZXMuIFRoaXMgcmVxdWlyZXMgc29tZSBt
b3JlIHdvcmsgaW4gdGhlIHNlbGVjdG9yIGNvbXBpbGVyLgorICAgICAgICBTdHlsZVJlbGF0aW9u
cyBzdHlsZVJlbGF0aW9uczsKKyAgICAgICAgUHNldWRvSWRTZXQgcHNldWRvSURTZXQ7CiAgICAg
fTsKIAotICAgIHN0cnVjdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzOwotCi0gICAgYm9vbCBt
YXRjaChjb25zdCBDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBjb25zdCBDaGVja2luZ0NvbnRleHQm
LCB1bnNpZ25lZCYgc3BlY2lmaWNpdHkpIGNvbnN0OworICAgIGJvb2wgbWF0Y2goY29uc3QgQ1NT
U2VsZWN0b3ImLCBjb25zdCBFbGVtZW50JiwgQ2hlY2tpbmdDb250ZXh0JiwgdW5zaWduZWQmIHNw
ZWNpZmljaXR5KSBjb25zdDsKIAogICAgIHN0YXRpYyBib29sIGlzQ29tbW9uUHNldWRvQ2xhc3NT
ZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciopOwogICAgIHN0YXRpYyBib29sIG1hdGNoZXNGb2N1
c1BzZXVkb0NsYXNzKGNvbnN0IEVsZW1lbnQqKTsKQEAgLTEwNSwxMiArMTI0LDE0IEBAIHB1Ymxp
YzoKICAgICBlbnVtIExpbmtNYXRjaE1hc2sgeyBNYXRjaERlZmF1bHQgPSAwLCBNYXRjaExpbmsg
PSAxLCBNYXRjaFZpc2l0ZWQgPSAyLCBNYXRjaEFsbCA9IE1hdGNoTGluayB8IE1hdGNoVmlzaXRl
ZCB9OwogICAgIHN0YXRpYyB1bnNpZ25lZCBkZXRlcm1pbmVMaW5rTWF0Y2hUeXBlKGNvbnN0IENT
U1NlbGVjdG9yKik7CiAKKyAgICBzdHJ1Y3QgTG9jYWxDb250ZXh0OworICAgIAogcHJpdmF0ZToK
LSAgICBNYXRjaFJlc3VsdCBtYXRjaFJlY3Vyc2l2ZWx5KGNvbnN0IENoZWNraW5nQ29udGV4dFdp
dGhTdGF0dXMmLCBQc2V1ZG9JZFNldCYsIHVuc2lnbmVkJiBzcGVjaWZpY2l0eSkgY29uc3Q7Ci0g
ICAgYm9vbCBjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiwgUHNldWRv
SWRTZXQmLCBNYXRjaFR5cGUmLCB1bnNpZ25lZCYgc3BlY2lmaWNpdHkpIGNvbnN0OwotICAgIGJv
b2wgbWF0Y2hTZWxlY3Rvckxpc3QoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYsIEVs
ZW1lbnQmLCBjb25zdCBDU1NTZWxlY3Rvckxpc3QmLCB1bnNpZ25lZCYgc3BlY2lmaWNpdHkpIGNv
bnN0OworICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVjdXJzaXZlbHkoQ2hlY2tpbmdDb250ZXh0Jiwg
Y29uc3QgTG9jYWxDb250ZXh0JiwgUHNldWRvSWRTZXQmLCB1bnNpZ25lZCYgc3BlY2lmaWNpdHkp
IGNvbnN0OworICAgIGJvb2wgY2hlY2tPbmUoQ2hlY2tpbmdDb250ZXh0JiwgY29uc3QgTG9jYWxD
b250ZXh0JiwgUHNldWRvSWRTZXQmLCBNYXRjaFR5cGUmLCB1bnNpZ25lZCYgc3BlY2lmaWNpdHkp
IGNvbnN0OworICAgIGJvb2wgbWF0Y2hTZWxlY3Rvckxpc3QoQ2hlY2tpbmdDb250ZXh0JiwgY29u
c3QgTG9jYWxDb250ZXh0JiwgY29uc3QgRWxlbWVudCYsIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYs
IHVuc2lnbmVkJiBzcGVjaWZpY2l0eSkgY29uc3Q7CiAKLSAgICBib29sIGNoZWNrU2Nyb2xsYmFy
UHNldWRvQ2xhc3MoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYsIGNvbnN0IENTU1Nl
bGVjdG9yKikgY29uc3Q7CisgICAgYm9vbCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKGNvbnN0
IENoZWNraW5nQ29udGV4dCYsIGNvbnN0IEVsZW1lbnQmLCBjb25zdCBDU1NTZWxlY3RvciopIGNv
bnN0OwogCiAgICAgYm9vbCBtX3N0cmljdFBhcnNpbmc7CiAgICAgYm9vbCBtX2RvY3VtZW50SXNI
VE1MOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyVGVz
dEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAxOTUxMzApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU2Vs
ZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MywxMiArNjMs
MTIgQEAgQUxXQVlTX0lOTElORSBib29sIGlzRW5hYmxlZChjb25zdCBFbGVtZQogICAgICAgICAm
JiAhZWxlbWVudC0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
Ym9vbCBpc01lZGlhRG9jdW1lbnQoRWxlbWVudCogZWxlbWVudCkKK0FMV0FZU19JTkxJTkUgYm9v
bCBpc01lZGlhRG9jdW1lbnQoY29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsKICAgICByZXR1cm4g
ZWxlbWVudC0+ZG9jdW1lbnQoKS5pc01lZGlhRG9jdW1lbnQoKTsKIH0KIAotQUxXQVlTX0lOTElO
RSBib29sIGlzQ2hlY2tlZChFbGVtZW50JiBlbGVtZW50KQorQUxXQVlTX0lOTElORSBib29sIGlz
Q2hlY2tlZChjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIC8vIEV2ZW4gdGhvdWdoIFdp
bklFIGFsbG93cyBjaGVja2VkIGFuZCBpbmRldGVybWluYXRlIHRvIGNvLWV4aXN0LCB0aGUgQ1NT
IHNlbGVjdG9yIHNwZWMgc2F5cyB0aGF0CiAgICAgLy8geW91IGNhbid0IGJlIGJvdGggY2hlY2tl
ZCBhbmQgaW5kZXRlcm1pbmF0ZS4gV2Ugd2lsbCBiZWhhdmUgbGlrZSBXaW5JRSBiZWhpbmQgdGhl
IHNjZW5lcyBhbmQganVzdApAQCAtNzgsMTcgKzc4LDE3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBp
c0NoZWNrZWQoRWxlbWVudCYgZWwKICAgICAgICAgcmV0dXJuIGlucHV0RWxlbWVudC5zaG91bGRB
cHBlYXJDaGVja2VkKCkgJiYgIWlucHV0RWxlbWVudC5zaG91bGRBcHBlYXJJbmRldGVybWluYXRl
KCk7CiAgICAgfQogICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkpCi0gICAg
ICAgIHJldHVybiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkuc2VsZWN0ZWQo
KTsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQmPihkb3duY2Fz
dDxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkpLnNlbGVjdGVkKCk7CiAKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBpc0luUmFuZ2UoRWxlbWVudCogZWxlbWVu
dCkKK0FMV0FZU19JTkxJTkUgYm9vbCBpc0luUmFuZ2UoY29uc3QgRWxlbWVudCogZWxlbWVudCkK
IHsKICAgICByZXR1cm4gZWxlbWVudC0+aXNJblJhbmdlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
Ym9vbCBpc091dE9mUmFuZ2UoRWxlbWVudCogZWxlbWVudCkKK0FMV0FZU19JTkxJTkUgYm9vbCBp
c091dE9mUmFuZ2UoY29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsKICAgICByZXR1cm4gZWxlbWVu
dC0+aXNPdXRPZlJhbmdlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgJ
KHJldmlzaW9uIDE5NTEzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxMCw3ICs2MTAsNyBAQCBpbmxpbmUgYm9vbCBjaGVja1JlZ2lv
blNlbGVjdG9yKGNvbnN0IENTCiAgICAgZm9yIChjb25zdCBDU1NTZWxlY3RvciogcyA9IHJlZ2lv
blNlbGVjdG9yOyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKSB7CiAgICAgICAgIFNl
bGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0IHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KFNl
bGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdSdWxlcyk7CiAgICAgICAgIHVuc2lnbmVkIGln
bm9yZWRTcGVjaWZpY2l0eTsKLSAgICAgICAgaWYgKHNlbGVjdG9yQ2hlY2tlci5tYXRjaChzLCBy
ZWdpb25FbGVtZW50LCBzZWxlY3RvckNoZWNraW5nQ29udGV4dCwgaWdub3JlZFNwZWNpZmljaXR5
KSkKKyAgICAgICAgaWYgKHNlbGVjdG9yQ2hlY2tlci5tYXRjaCgqcywgKnJlZ2lvbkVsZW1lbnQs
IHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0LCBpZ25vcmVkU3BlY2lmaWNpdHkpKQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAJKHJldmlzaW9uIDE5NTEzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQgWXVzdWtl
IFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzIz
LDcgKzMyMyw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc1RhcmdldChB
c3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMpOwogCiAgICAgLy8gSGVscGVycy4KLSAg
ICB2b2lkIGFkZEZsYWdzVG9FbGVtZW50U3R5bGVGcm9tQ29udGV4dChBc3NlbWJsZXI6OlJlZ2lz
dGVySUQgY2hlY2tpbmdDb250ZXh0LCBpbnQ2NF90KTsKKyAgICB2b2lkIGFkZFN0eWxlUmVsYXRp
b25JZlJlc29sdmluZ1N0eWxlKEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50LCBTZWxlY3Rv
ckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OlR5cGUsIE9wdGlvbmFsPEFzc2VtYmxlcjo6UmVnaXN0
ZXJJRD4gdmFsdWUgPSB7IH0pOworICAgIHZvaWQgYWRkU3R5bGVSZWxhdGlvbihBc3NlbWJsZXI6
OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0LCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVu
dCwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpUeXBlLCBPcHRpb25hbDxBc3NlbWJs
ZXI6OlJlZ2lzdGVySUQ+IHZhbHVlID0geyB9KTsKICAgICBBc3NlbWJsZXI6Okp1bXAgYnJhbmNo
T25SZXNvbHZpbmdNb2RlV2l0aENoZWNraW5nQ29udGV4dChBc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24sIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSwgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNo
ZWNraW5nQ29udGV4dCk7CiAgICAgQXNzZW1ibGVyOjpKdW1wIGJyYW5jaE9uUmVzb2x2aW5nTW9k
ZShBc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSwg
QXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCk7CiAgICAgdm9pZCBnZW5lcmF0
ZUVsZW1lbnRJc0ZpcnN0TGluayhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEFz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50KTsKQEAgLTMzMiw3ICszMzMsNiBAQCBwcml2YXRl
OgogICAgIHZvaWQgZ2VuZXJhdGVOdGhGaWx0ZXJUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZh
aWx1cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNvdW50ZXIsIGludCBhLCBpbnQgYik7
CiAgICAgdm9pZCBnZW5lcmF0ZVJlcXVlc3RlZFBzZXVkb0VsZW1lbnRFcXVhbHNUb1NlbGVjdG9y
UHNldWRvRWxlbWVudChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNl
bGVjdG9yRnJhZ21lbnQmLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0KTsK
ICAgICB2b2lkIGdlbmVyYXRlU3BlY2lhbEZhaWx1cmVJblF1aXJrc01vZGVGb3JBY3RpdmVBbmRI
b3ZlcklmTmVlZGVkKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2Vs
ZWN0b3JGcmFnbWVudCYpOwotICAgIHZvaWQgbWFya0VsZW1lbnRJZlJlc29sdmluZ1N0eWxlKEFz
c2VtYmxlcjo6UmVnaXN0ZXJJRCwgaW50MzJfdCk7CiAgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBq
dW1wSWZOb1ByZXZpb3VzQWRqYWNlbnRFbGVtZW50KCk7CiAgICAgQXNzZW1ibGVyOjpKdW1wTGlz
dCBqdW1wSWZOb05leHRBZGphY2VudEVsZW1lbnQoKTsKICAgICBBc3NlbWJsZXI6Okp1bXAganVt
cElmTm90UmVzb2x2aW5nU3R5bGUoQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4
dFJlZ2lzdGVyKTsKQEAgLTE4OTEsNyArMTg5MSw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZVNlbGUKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGlmIChzaG91bGRNYXJrU3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoZnJhZ21lbnQp
KQotICAgICAgICAgICAgbWFya0VsZW1lbnRJZlJlc29sdmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNz
UmVnaXN0ZXIsIE5vZGU6OmZsYWdTdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpKTsK
KyAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKGVsZW1lbnRBZGRy
ZXNzUmVnaXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeVBy
ZXZpb3VzU2libGluZyk7CiAgICAgICAgIGdlbmVyYXRlQmFja3RyYWNraW5nVGFpbHNJZk5lZWRl
ZChmYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKICAgICB9CiAKQEAgLTIxMzUsNyArMjEzNSw3IEBA
IHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVdhbGsKIHZvaWQgU2VsZWN0b3JD
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZURpcmVjdEFkamFjZW50VHJlZVdhbGtlcihBc3NlbWJsZXI6
Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50
KQogewogICAgIGdlbmVyYXRlV2Fsa1RvUHJldmlvdXNBZGphY2VudChmYWlsdXJlQ2FzZXMsIGZy
YWdtZW50KTsKLSAgICBtYXJrRWxlbWVudElmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NS
ZWdpc3RlciwgTm9kZTo6ZmxhZ0FmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpKTsKKyAg
ICBhZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVy
LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVjdHNOZXh0U2libGluZyk7CiAK
ICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IG1hdGNoaW5nVGFnTmFtZUZhaWx1cmVDYXNlczsKICAg
ICBBc3NlbWJsZXI6Okp1bXBMaXN0IG1hdGNoaW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2FzZXM7CkBA
IC0yMTYwLDcgKzIxNjAsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVJ
bmRpCiAgICAgICAgIG1fYmFja3RyYWNraW5nTGV2ZWxzLmxhc3QoKS5pbmRpcmVjdEFkamFjZW50
VHJlZVdhbGtlckJhY2t0cmFja2luZ1BvaW50ID0gbV9hc3NlbWJsZXIubGFiZWwoKTsKIAogICAg
IGdlbmVyYXRlV2Fsa1RvUHJldmlvdXNBZGphY2VudChmYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsK
LSAgICBtYXJrRWxlbWVudElmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3Rlciwg
Tm9kZTo6ZmxhZ0FmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpKTsKKyAgICBhZGRTdHls
ZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTZWxlY3Rv
ckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVjdHNOZXh0U2libGluZyk7CiAKICAgICBpZiAo
ZnJhZ21lbnQuYmFja3RyYWNraW5nRmxhZ3MgJiBCYWNrdHJhY2tpbmdGbGFnOjpJbmRpcmVjdEFk
amFjZW50RW50cnlQb2ludCkKICAgICAgICAgbV9iYWNrdHJhY2tpbmdMZXZlbHMubGFzdCgpLmlu
ZGlyZWN0QWRqYWNlbnRFbnRyeVBvaW50ID0gbV9hc3NlbWJsZXIubGFiZWwoKTsKQEAgLTIxNzAs
MzUgKzIxNzAsNTEgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlSW5kaQog
ICAgIGxvY2FsRmFpbHVyZUNhc2VzLmxpbmtUbyhsb29wU3RhcnQsICZtX2Fzc2VtYmxlcik7CiB9
CiAKK3ZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjphZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZp
bmdTdHlsZShBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpT
dHlsZVJlbGF0aW9uOjpUeXBlIHJlbGF0aW9uVHlwZSwgT3B0aW9uYWw8QXNzZW1ibGVyOjpSZWdp
c3RlcklEPiB2YWx1ZSkKK3sKKyAgICBpZiAobV9zZWxlY3RvckNvbnRleHQgPT0gU2VsZWN0b3JD
b250ZXh0OjpRdWVyeVNlbGVjdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBMb2NhbFJlZ2lz
dGVyIGNoZWNraW5nQ29udGV4dChtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKKyAgICBBc3NlbWJsZXI6
Okp1bXAgbm90UmVzb2x2aW5nU3R5bGUgPSBqdW1wSWZOb3RSZXNvbHZpbmdTdHlsZShjaGVja2lu
Z0NvbnRleHQpOworCisgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1l
bnQsIHJlbGF0aW9uVHlwZSwgdmFsdWUpOworCisgICAgbm90UmVzb2x2aW5nU3R5bGUubGluaygm
bV9hc3NlbWJsZXIpOworfQogCi12b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6YWRkRmxhZ3NU
b0VsZW1lbnRTdHlsZUZyb21Db250ZXh0KEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0Nv
bnRleHQsIGludDY0X3QgbmV3RmxhZykKK3N0YXRpYyB2b2lkIGFkZFN0eWxlUmVsYXRpb25FbGVt
ZW50RnVuY3Rpb24oU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQqIGNoZWNraW5nQ29u
dGV4dCwgRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBjaGVja2luZ0NvbnRleHQtPnN0eWxlUmVs
YXRpb25zLmFwcGVuZCh7ICplbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246
OkFmZmVjdGVkQnlBY3RpdmUsIDEgfSk7Cit9CisKK3ZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9y
OjphZGRTdHlsZVJlbGF0aW9uKEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQs
IEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVs
YXRpb246OlR5cGUgcmVsYXRpb25UeXBlLCBPcHRpb25hbDxBc3NlbWJsZXI6OlJlZ2lzdGVySUQ+
IHZhbHVlKQogewogICAgIEFTU0VSVChtX3NlbGVjdG9yQ29udGV4dCAhPSBTZWxlY3RvckNvbnRl
eHQ6OlF1ZXJ5U2VsZWN0b3IpOwogCi0gICAgTG9jYWxSZWdpc3RlciBjaGlsZFN0eWxlKG1fcmVn
aXN0ZXJBbGxvY2F0b3IpOwotICAgIG1fYXNzZW1ibGVyLmxvYWRQdHIoQXNzZW1ibGVyOjpBZGRy
ZXNzKGNoZWNraW5nQ29udGV4dCwgT0JKRUNUX09GRlNFVE9GKFNlbGVjdG9yQ2hlY2tlcjo6Q2hl
Y2tpbmdDb250ZXh0LCBlbGVtZW50U3R5bGUpKSwgY2hpbGRTdHlsZSk7CisgICAgLy8gRklYTUU6
IEFwcGVuZCB0byB2ZWN0b3Igd2l0aG91dCBhIGZ1bmN0aW9uIGNhbGwgYXQgbGVhc3Qgd2hlbiB0
aGVyZSBpcyBzdWZmaWNpZW50IGNhcGFjaXR5LgorICAgIEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbkNh
bGwobV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJBbGxvY2F0b3IsIG1fc3RhY2tBbGxvY2F0b3IsIG1f
ZnVuY3Rpb25DYWxscyk7CisgICAgZnVuY3Rpb25DYWxsLnNldEZ1bmN0aW9uQWRkcmVzcyhhZGRT
dHlsZVJlbGF0aW9uRWxlbWVudEZ1bmN0aW9uKTsKKyAgICBmdW5jdGlvbkNhbGwuc2V0VHdvQXJn
dW1lbnRzKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCk7CisgICAgZnVuY3Rpb25DYWxsLmNhbGwo
KTsKIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbG9vayBpbnRvIGRvaW5nIHNvbWV0aGluZyBz
bWFydCBpbiBNYWNyb0Fzc2VtYmxlciBpbnN0ZWFkLgotICAgIEFzc2VtYmxlcjo6QWRkcmVzcyBm
bGFnQWRkcmVzcyhjaGlsZFN0eWxlLCBSZW5kZXJTdHlsZTo6bm9uaW5oZXJpdGVkRmxhZ3NNZW1v
cnlPZmZzZXQoKSArIFJlbmRlclN0eWxlOjpOb25Jbmhlcml0ZWRGbGFnczo6ZmxhZ3NNZW1vcnlP
ZmZzZXQoKSk7Ci0jaWYgQ1BVKEFSTV9USFVNQjIpCi0gICAgaW50MzJfdCBmbGFnTG93Qml0cyA9
IG5ld0ZsYWcgJiAweGZmZmZmZmZmOwotICAgIGludDMyX3QgZmxhZ0hpZ2hCaXRzID0gbmV3Rmxh
ZyA+PiAzMjsKLSAgICBpZiAoZmxhZ0xvd0JpdHMpCi0gICAgICAgIG1fYXNzZW1ibGVyLm9yMzIo
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZmxhZ0xvd0JpdHMpLCBmbGFnQWRkcmVzcyk7Ci0gICAg
aWYgKGZsYWdIaWdoQml0cykgewotICAgICAgICBBc3NlbWJsZXI6OkFkZHJlc3MgZmxhZ0hpZ2hB
ZGRyZXNzID0gZmxhZ0FkZHJlc3Mud2l0aE9mZnNldCg0KTsKLSAgICAgICAgbV9hc3NlbWJsZXIu
b3IzMihBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihmbGFnSGlnaEJpdHMpLCBmbGFnSGlnaEFkZHJl
c3MpOwotICAgIH0KLSNlbGlmIENQVShYODZfNjQpIHx8IENQVShBUk02NCkKLSAgICBMb2NhbFJl
Z2lzdGVyIGZsYWdzKG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwotICAgIG1fYXNzZW1ibGVyLmxvYWQ2
NChmbGFnQWRkcmVzcywgZmxhZ3MpOwotICAgIExvY2FsUmVnaXN0ZXIgaXNGaXJzdENoaWxkU3Rh
dGVGbGFnSW1tZWRpYXRlKG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwotICAgIG1fYXNzZW1ibGVyLm1v
dmUoQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQobmV3RmxhZyksIGlzRmlyc3RDaGlsZFN0YXRlRmxh
Z0ltbWVkaWF0ZSk7Ci0gICAgbV9hc3NlbWJsZXIub3I2NChpc0ZpcnN0Q2hpbGRTdGF0ZUZsYWdJ
bW1lZGlhdGUsIGZsYWdzKTsKLSAgICBtX2Fzc2VtYmxlci5zdG9yZTY0KGZsYWdzLCBmbGFnQWRk
cmVzcyk7Ci0jZWxzZQotI2Vycm9yIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6YWRkRmxhZ3NUb0Vs
ZW1lbnRTdHlsZUZyb21Db250ZXh0IG5vdCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBhcmNoaXRlY3R1
cmUuCi0jZW5kaWYKKyAgICBBc3NlbWJsZXI6OkFkZHJlc3MgdmVjdG9yQWRkcmVzcyhjaGVja2lu
Z0NvbnRleHQsIE9CSkVDVF9PRkZTRVRPRihTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4
dCwgc3R5bGVSZWxhdGlvbnMpKTsKKyAgICBhdXRvIGRhdGFBZGRyZXNzID0gdmVjdG9yQWRkcmVz
cy53aXRoT2Zmc2V0KFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbnM6OmRhdGFNZW1vcnlP
ZmZzZXQoKSk7CisgICAgYXV0byBzaXplQWRkcmVzcyA9IHZlY3RvckFkZHJlc3Mud2l0aE9mZnNl
dChTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb25zOjpzaXplTWVtb3J5T2Zmc2V0KCkpOwor
CisgICAgTG9jYWxSZWdpc3RlciByZWxhdGlvblBvaW50ZXIobV9yZWdpc3RlckFsbG9jYXRvcik7
CisgICAgbV9hc3NlbWJsZXIubG9hZDMyKHNpemVBZGRyZXNzLCByZWxhdGlvblBvaW50ZXIpOwor
ICAgIG1fYXNzZW1ibGVyLnN1YjMyKEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZWxhdGlv
blBvaW50ZXIpOworICAgIG1fYXNzZW1ibGVyLm11bDMyKEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KHNpemVvZihTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb24pKSwgcmVsYXRpb25Qb2ludGVy
LCByZWxhdGlvblBvaW50ZXIpOworICAgIG1fYXNzZW1ibGVyLmFkZFB0cihkYXRhQWRkcmVzcywg
cmVsYXRpb25Qb2ludGVyKTsKKworICAgIEFzc2VtYmxlcjo6QWRkcmVzcyB0eXBlQWRkcmVzcyhy
ZWxhdGlvblBvaW50ZXIsIE9CSkVDVF9PRkZTRVRPRihTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVs
YXRpb24sIHR5cGUpKTsKKyAgICBtX2Fzc2VtYmxlci5zdG9yZTMyKEFzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKHJlbGF0aW9uVHlwZSksIHR5cGVBZGRyZXNzKTsKKworICAgIGlmICh2YWx1ZSkgewor
ICAgICAgICBBc3NlbWJsZXI6OkFkZHJlc3MgdmFsdWVBZGRyZXNzKHJlbGF0aW9uUG9pbnRlciwg
T0JKRUNUX09GRlNFVE9GKFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbiwgdmFsdWUpKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIuc3RvcmUzMigqdmFsdWUsIHZhbHVlQWRkcmVzcyk7CisgICAg
fQogfQogCiBBc3NlbWJsZXI6Okp1bXBMaXN0IFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6anVtcElm
Tm9QcmV2aW91c0FkamFjZW50RWxlbWVudCgpCkBAIC0yNDIwLDI3ICsyNDM2LDYgQEAgdm9pZCBT
ZWxlY3RvckNvZGVHZW5lcmF0b3I6Om1vZHVsb0lzWmVybwogICAgIGZhaWx1cmVDYXNlcy5hcHBl
bmQobW9kdWxvKEFzc2VtYmxlcjo6Tm9uWmVybywgaW5wdXREaXZpZGVuZCwgZGl2aXNvcikpOwog
fQogCi1zdGF0aWMgdm9pZCBzZXROb2RlRmxhZyhBc3NlbWJsZXImIGFzc2VtYmxlciwgQXNzZW1i
bGVyOjpSZWdpc3RlcklEIGVsZW1lbnRBZGRyZXNzLCBpbnQzMl90IGZsYWcpCi17Ci0gICAgYXNz
ZW1ibGVyLm9yMzIoQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZmxhZyksIEFzc2VtYmxlcjo6QWRk
cmVzcyhlbGVtZW50QWRkcmVzcywgTm9kZTo6bm9kZUZsYWdzTWVtb3J5T2Zmc2V0KCkpKTsKLX0K
LQotdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6Om1hcmtFbGVtZW50SWZSZXNvbHZpbmdTdHls
ZShBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVudCwgaW50MzJfdCBub2RlRmxhZykKLXsKLSAg
ICBpZiAobV9zZWxlY3RvckNvbnRleHQgPT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9y
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IHNraXBNYXJraW5n
OwotICAgIHsKLSAgICAgICAgTG9jYWxSZWdpc3RlciBjaGVja2luZ0NvbnRleHQobV9yZWdpc3Rl
ckFsbG9jYXRvcik7Ci0gICAgICAgIHNraXBNYXJraW5nLmFwcGVuZChqdW1wSWZOb3RSZXNvbHZp
bmdTdHlsZShjaGVja2luZ0NvbnRleHQpKTsKLSAgICB9Ci0KLSAgICBzZXROb2RlRmxhZyhtX2Fz
c2VtYmxlciwgZWxlbWVudCwgbm9kZUZsYWcpOwotCi0gICAgc2tpcE1hcmtpbmcubGluaygmbV9h
c3NlbWJsZXIpOwotfQotCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6bGlua0ZhaWx1cmVz
KEFzc2VtYmxlcjo6SnVtcExpc3QmIGdsb2JhbEZhaWx1cmVDYXNlcywgQmFja3RyYWNraW5nQWN0
aW9uIGJhY2t0cmFja2luZ0FjdGlvbiwgQXNzZW1ibGVyOjpKdW1wTGlzdCYgbG9jYWxGYWlsdXJl
Q2FzZXMpCiB7CiAgICAgc3dpdGNoIChiYWNrdHJhY2tpbmdBY3Rpb24pIHsKQEAgLTMwNTIsMjQg
KzMwNDcsMTEgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQ29udAogICAg
IGZhaWx1cmVDYXNlcy5hcHBlbmQoZnVuY3Rpb25DYWxsLmNhbGxBbmRCcmFuY2hPbkJvb2xlYW5S
ZXR1cm5WYWx1ZShBc3NlbWJsZXI6Olplcm8pKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0Rmlyc3RD
aGlsZFN0YXRlKEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKFJlbmRlclN0eWxlKiBzdHls
ZSA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkpCi0gICAgICAgIHN0eWxlLT5zZXRGaXJzdENoaWxk
U3RhdGUoKTsKLX0KLQogc3RhdGljIGJvb2wgZWxlbWVudElzQWN0aXZlKEVsZW1lbnQqIGVsZW1l
bnQpCiB7CiAgICAgcmV0dXJuIGVsZW1lbnQtPmFjdGl2ZSgpIHx8IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZSgqZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVkb0Ns
YXNzQWN0aXZlKTsKIH0KIAotc3RhdGljIGJvb2wgZWxlbWVudElzQWN0aXZlRm9yU3R5bGVSZXNv
bHV0aW9uKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdD
b250ZXh0KiBjaGVja2luZ0NvbnRleHQpCi17Ci0gICAgaWYgKGNoZWNraW5nQ29udGV4dC0+cmVz
b2x2aW5nTW9kZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlJlc29sdmluZ1N0eWxlKQotICAg
ICAgICBlbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlBY3RpdmUoKTsKLSAgICByZXR1cm4g
ZWxlbWVudC0+YWN0aXZlKCkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVk
b1N0YXRlKCplbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBY3RpdmUpOwotfQotCiB2
b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNBY3RpdmUoQXNzZW1i
bGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50JiBmcmFn
bWVudCkKIHsKICAgICBnZW5lcmF0ZVNwZWNpYWxGYWlsdXJlSW5RdWlya3NNb2RlRm9yQWN0aXZl
QW5kSG92ZXJJZk5lZWRlZChmYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKQEAgLTMwODEsMjYgKzMw
NjMsMTIgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50TWF0Y2hlc1RoZVJpZ2h0bW9zdEVs
ZW1lbnQobV9zZWxlY3RvckNvbnRleHQsIGZyYWdtZW50KSkgewotICAgICAgICBMb2NhbFJlZ2lz
dGVyIGNoZWNraW5nQ29udGV4dChtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKLSAgICAgICAgQXNzZW1i
bGVyOjpKdW1wIG5vdFJlc29sdmluZ1N0eWxlID0ganVtcElmTm90UmVzb2x2aW5nU3R5bGUoY2hl
Y2tpbmdDb250ZXh0KTsKLSAgICAgICAgYWRkRmxhZ3NUb0VsZW1lbnRTdHlsZUZyb21Db250ZXh0
KGNoZWNraW5nQ29udGV4dCwgUmVuZGVyU3R5bGU6Ok5vbkluaGVyaXRlZEZsYWdzOjpmbGFnSXNh
ZmZlY3RlZEJ5QWN0aXZlKCkpOwotICAgICAgICBub3RSZXNvbHZpbmdTdHlsZS5saW5rKCZtX2Fz
c2VtYmxlcik7Ci0KLSAgICAgICAgRnVuY3Rpb25DYWxsIGZ1bmN0aW9uQ2FsbChtX2Fzc2VtYmxl
ciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9zdGFja0FsbG9jYXRvciwgbV9mdW5jdGlvbkNhbGxz
KTsKLSAgICAgICAgZnVuY3Rpb25DYWxsLnNldEZ1bmN0aW9uQWRkcmVzcyhlbGVtZW50SXNBY3Rp
dmUpOwotICAgICAgICBmdW5jdGlvbkNhbGwuc2V0T25lQXJndW1lbnQoZWxlbWVudEFkZHJlc3NS
ZWdpc3Rlcik7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoZnVuY3Rpb25DYWxsLmNhbGxB
bmRCcmFuY2hPbkJvb2xlYW5SZXR1cm5WYWx1ZShBc3NlbWJsZXI6Olplcm8pKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0ID0gbV9y
ZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZVJlZ2lzdGVyV2l0aFByZWZlcmVuY2UoSlNDOjpHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOwotICAgICAgICBsb2FkQ2hlY2tpbmdDb250ZXh0KGNoZWNraW5n
Q29udGV4dCk7Ci0gICAgICAgIG1fcmVnaXN0ZXJBbGxvY2F0b3IuZGVhbGxvY2F0ZVJlZ2lzdGVy
KGNoZWNraW5nQ29udGV4dCk7CisgICAgYWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUo
ZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpB
ZmZlY3RlZEJ5QWN0aXZlKTsKIAotICAgICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1f
YXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0
aW9uQ2FsbHMpOwotICAgICAgICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRyZXNzKGVsZW1l
bnRJc0FjdGl2ZUZvclN0eWxlUmVzb2x1dGlvbik7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRU
d29Bcmd1bWVudHMoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgY2hlY2tpbmdDb250ZXh0KTsKLSAg
ICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9v
bGVhblJldHVyblZhbHVlKEFzc2VtYmxlcjo6WmVybykpOwotICAgIH0KKyAgICBGdW5jdGlvbkNh
bGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNr
QWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOworICAgIGZ1bmN0aW9uQ2FsbC5zZXRGdW5jdGlv
bkFkZHJlc3MoZWxlbWVudElzQWN0aXZlKTsKKyAgICBmdW5jdGlvbkNhbGwuc2V0T25lQXJndW1l
bnQoZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7CisgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChmdW5j
dGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVyblZhbHVlKEFzc2VtYmxlcjo6WmVy
bykpOwogfQogCiBzdGF0aWMgdm9pZCBqdW1wSWZFbGVtZW50SXNOb3RFbXB0eShBc3NlbWJsZXIm
IGFzc2VtYmxlciwgUmVnaXN0ZXJBbGxvY2F0b3ImIHJlZ2lzdGVyQWxsb2NhdG9yLCBBc3NlbWJs
ZXI6Okp1bXBMaXN0JiBub3RFbXB0eUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVu
dCkKQEAgLTMxMjksMTggKzMwOTcsNyBAQCBzdGF0aWMgdm9pZCBqdW1wSWZFbGVtZW50SXNOb3RF
bXB0eShBc3NlCiAgICAgbm9Nb3JlQ2hpbGRyZW4ubGluaygmYXNzZW1ibGVyKTsKIH0KIAotc3Rh
dGljIHZvaWQgc2V0RWxlbWVudFN0eWxlSXNBZmZlY3RlZEJ5RW1wdHkoRWxlbWVudCogZWxlbWVu
dCkKLXsKLSAgICBlbGVtZW50LT5zZXRTdHlsZUFmZmVjdGVkQnlFbXB0eSgpOwotfQotCi1zdGF0
aWMgdm9pZCBzZXRFbGVtZW50U3R5bGVGcm9tQ29udGV4dElzQWZmZWN0ZWRCeUVtcHR5QW5kVXBk
YXRlUmVuZGVyU3R5bGVJZk5lY2Vzc2FyeShTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4
dCogY29udGV4dCwgYm9vbCBpc0VtcHR5KQotewotICAgIEFTU0VSVChjb250ZXh0LT5lbGVtZW50
U3R5bGUpOwotICAgIGNvbnRleHQtPmVsZW1lbnRTdHlsZS0+c2V0RW1wdHlTdGF0ZShpc0VtcHR5
KTsKLX0KLQotdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudElzRW1w
dHkoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdt
ZW50JiBmcmFnbWVudCkKK3ZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1l
bnRJc0VtcHR5KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0
b3JGcmFnbWVudCYpCiB7CiAgICAgaWYgKG1fc2VsZWN0b3JDb250ZXh0ID09IFNlbGVjdG9yQ29u
dGV4dDo6UXVlcnlTZWxlY3RvcikgewogICAgICAgICBqdW1wSWZFbGVtZW50SXNOb3RFbXB0eSht
X2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwgZmFpbHVyZUNhc2VzLCBlbGVtZW50QWRk
cmVzc1JlZ2lzdGVyKTsKQEAgLTMxNTUsMzggKzMxMTIsMTIgQEAgdm9pZCBTZWxlY3RvckNvZGVH
ZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogICAgIG1fYXNzZW1ibGVyLm1vdmUoQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSksIGlzRW1wdHlSZXN1bHRzKTsKICAgICBub3RFbXB0eS5saW5rKCZtX2Fz
c2VtYmxlcik7CiAKLSAgICBBc3NlbWJsZXI6Okp1bXAgc2tpcE1hcmtpbmc7Ci0gICAgaWYgKGZy
YWdtZW50TWF0Y2hlc1RoZVJpZ2h0bW9zdEVsZW1lbnQobV9zZWxlY3RvckNvbnRleHQsIGZyYWdt
ZW50KSkgewotICAgICAgICB7Ci0gICAgICAgICAgICBMb2NhbFJlZ2lzdGVyIGNoZWNraW5nQ29u
dGV4dChtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKLSAgICAgICAgICAgIHNraXBNYXJraW5nID0ganVt
cElmTm90UmVzb2x2aW5nU3R5bGUoY2hlY2tpbmdDb250ZXh0KTsKLQotICAgICAgICAgICAgRnVu
Y3Rpb25DYWxsIGZ1bmN0aW9uQ2FsbChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwg
bV9zdGFja0FsbG9jYXRvciwgbV9mdW5jdGlvbkNhbGxzKTsKLSAgICAgICAgICAgIGZ1bmN0aW9u
Q2FsbC5zZXRGdW5jdGlvbkFkZHJlc3Moc2V0RWxlbWVudFN0eWxlRnJvbUNvbnRleHRJc0FmZmVj
dGVkQnlFbXB0eUFuZFVwZGF0ZVJlbmRlclN0eWxlSWZOZWNlc3NhcnkpOwotICAgICAgICAgICAg
ZnVuY3Rpb25DYWxsLnNldFR3b0FyZ3VtZW50cyhjaGVja2luZ0NvbnRleHQsIGlzRW1wdHlSZXN1
bHRzKTsKLSAgICAgICAgICAgIGZ1bmN0aW9uQ2FsbC5jYWxsKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxs
b2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOwotICAgICAgICBmdW5j
dGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRyZXNzKHNldEVsZW1lbnRTdHlsZUlzQWZmZWN0ZWRCeUVt
cHR5KTsKLSAgICAgICAgZnVuY3Rpb25DYWxsLnNldE9uZUFyZ3VtZW50KGVsZW1lbnRBZGRyZXNz
UmVnaXN0ZXIpOwotICAgICAgICBmdW5jdGlvbkNhbGwuY2FsbCgpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIExvY2FsUmVnaXN0ZXIgY2hlY2tpbmdDb250ZXh0KG1fcmVn
aXN0ZXJBbGxvY2F0b3IpOwotICAgICAgICAgICAgc2tpcE1hcmtpbmcgPSBqdW1wSWZOb3RSZXNv
bHZpbmdTdHlsZShjaGVja2luZ0NvbnRleHQpOwotICAgICAgICB9Ci0gICAgICAgIEZ1bmN0aW9u
Q2FsbCBmdW5jdGlvbkNhbGwobV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJBbGxvY2F0b3IsIG1fc3Rh
Y2tBbGxvY2F0b3IsIG1fZnVuY3Rpb25DYWxscyk7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRG
dW5jdGlvbkFkZHJlc3Moc2V0RWxlbWVudFN0eWxlSXNBZmZlY3RlZEJ5RW1wdHkpOwotICAgICAg
ICBmdW5jdGlvbkNhbGwuc2V0T25lQXJndW1lbnQoZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7Ci0g
ICAgICAgIGZ1bmN0aW9uQ2FsbC5jYWxsKCk7Ci0gICAgfQotICAgIHNraXBNYXJraW5nLmxpbmso
Jm1fYXNzZW1ibGVyKTsKKyAgICBhZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVt
ZW50QWRkcmVzc1JlZ2lzdGVyLCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVj
dGVkQnlFbXB0eSwgQXNzZW1ibGVyOjpSZWdpc3RlcklEKGlzRW1wdHlSZXN1bHRzKSk7CiAKICAg
ICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6
Olplcm8sIGlzRW1wdHlSZXN1bHRzKSk7CiB9CiAKLXZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9y
OjpnZW5lcmF0ZUVsZW1lbnRJc0ZpcnN0Q2hpbGQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVy
ZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCkKK3ZvaWQgU2VsZWN0b3JD
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc0ZpcnN0Q2hpbGQoQXNzZW1ibGVyOjpKdW1w
TGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50JikKIHsKICAgICBpZiAo
bV9zZWxlY3RvckNvbnRleHQgPT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yKSB7CiAg
ICAgICAgIEFzc2VtYmxlcjo6SnVtcExpc3Qgc3VjY2Vzc0Nhc2UgPSBqdW1wSWZOb1ByZXZpb3Vz
QWRqYWNlbnRFbGVtZW50KCk7CkBAIC0zMjE2LDIyICszMTQ3LDE0IEBAIHZvaWQgU2VsZWN0b3JD
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICBMb2NhbFJlZ2lzdGVyIGNoZWNraW5nQ29u
dGV4dChtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKICAgICBBc3NlbWJsZXI6Okp1bXAgbm90UmVzb2x2
aW5nU3R5bGUgPSBqdW1wSWZOb3RSZXNvbHZpbmdTdHlsZShjaGVja2luZ0NvbnRleHQpOwogCi0g
ICAgc2V0Tm9kZUZsYWcobV9hc3NlbWJsZXIsIHBhcmVudEVsZW1lbnQsIE5vZGU6OmZsYWdDaGls
ZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXNGbGFnKCkpOworICAgIGFkZFN0eWxlUmVsYXRp
b24oY2hlY2tpbmdDb250ZXh0LCBwYXJlbnRFbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxl
UmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcyk7CiAgICAgbV9yZWdp
c3RlckFsbG9jYXRvci5kZWFsbG9jYXRlUmVnaXN0ZXIocGFyZW50RWxlbWVudCk7CiAKICAgICAv
LyBUaGUgcGFyZW50IG1hcmtpbmcgaXMgdW5jb25kaXRpb25hbC4gSWYgdGhlIG1hdGNoaW5nIGlz
IG5vdCBhIHN1Y2Nlc3MsIHdlIGNhbiBub3cgZmFpbC4KICAgICAvLyBPdGhlcndpc2Ugd2UgbmVl
ZCB0byBhcHBseSBzZXRGaXJzdENoaWxkU3RhdGUoKSBvbiB0aGUgUmVuZGVyU3R5bGUuCiAgICAg
ZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2hUZXN0MzIoQXNzZW1ibGVyOjpO
b25aZXJvLCBpc0ZpcnN0Q2hpbGRSZWdpc3RlcikpOwogCi0gICAgaWYgKGZyYWdtZW50TWF0Y2hl
c1RoZVJpZ2h0bW9zdEVsZW1lbnQobV9zZWxlY3RvckNvbnRleHQsIGZyYWdtZW50KSkKLSAgICAg
ICAgYWRkRmxhZ3NUb0VsZW1lbnRTdHlsZUZyb21Db250ZXh0KGNoZWNraW5nQ29udGV4dCwgUmVu
ZGVyU3R5bGU6Ok5vbkluaGVyaXRlZEZsYWdzOjpzZXRGaXJzdENoaWxkU3RhdGVGbGFncygpKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgRnVuY3Rpb25DYWxsIGZ1bmN0aW9uQ2FsbChtX2Fzc2VtYmxl
ciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9zdGFja0FsbG9jYXRvciwgbV9mdW5jdGlvbkNhbGxz
KTsKLSAgICAgICAgZnVuY3Rpb25DYWxsLnNldEZ1bmN0aW9uQWRkcmVzcyhzZXRGaXJzdENoaWxk
U3RhdGUpOwotICAgICAgICBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVudEFkZHJlc3MgPSBl
bGVtZW50QWRkcmVzc1JlZ2lzdGVyOwotICAgICAgICBmdW5jdGlvbkNhbGwuc2V0T25lQXJndW1l
bnQoZWxlbWVudEFkZHJlc3MpOwotICAgICAgICBmdW5jdGlvbkNhbGwuY2FsbCgpOwotICAgIH0K
KyAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudEFkZHJlc3NSZWdp
c3RlciwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpGaXJzdENoaWxkKTsKIAogICAg
IG5vdFJlc29sdmluZ1N0eWxlLmxpbmsoJm1fYXNzZW1ibGVyKTsKICAgICBmYWlsdXJlQ2FzZXMu
YXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Ok5vblplcm8sIGlzRmly
c3RDaGlsZFJlZ2lzdGVyKSk7CkBAIC0zMjQyLDEzICszMTY1LDYgQEAgc3RhdGljIGJvb2wgZWxl
bWVudElzSG92ZXJlZChFbGVtZW50KiBlbAogICAgIHJldHVybiBlbGVtZW50LT5ob3ZlcmVkKCkg
fHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKCplbGVtZW50LCBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3Zlcik7CiB9CiAKLXN0YXRpYyBib29sIGVsZW1lbnRJ
c0hvdmVyZWRGb3JTdHlsZVJlc29sdXRpb24oRWxlbWVudCogZWxlbWVudCwgY29uc3QgU2VsZWN0
b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQqIGNoZWNraW5nQ29udGV4dCkKLXsKLSAgICBpZiAo
Y2hlY2tpbmdDb250ZXh0LT5yZXNvbHZpbmdNb2RlID09IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6
UmVzb2x2aW5nU3R5bGUpCi0gICAgICAgIGVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUhv
dmVyKCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQtPmhvdmVyZWQoKSB8fCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoKmVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc0hvdmVyKTsKLX0KLQogdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxl
bWVudElzSG92ZXJlZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNl
bGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQogewogICAgIGdlbmVyYXRlU3BlY2lhbEZhaWx1cmVJ
blF1aXJrc01vZGVGb3JBY3RpdmVBbmRIb3ZlcklmTmVlZGVkKGZhaWx1cmVDYXNlcywgZnJhZ21l
bnQpOwpAQCAtMzI2MCwyNiArMzE3NiwxMiBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6
Z2VuZXJhdGVFbGVtCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoZnJhZ21lbnRN
YXRjaGVzVGhlUmlnaHRtb3N0RWxlbWVudChtX3NlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnQpKSB7
Ci0gICAgICAgIExvY2FsUmVnaXN0ZXJXaXRoUHJlZmVyZW5jZSBjaGVja2luZ0NvbnRleHQobV9y
ZWdpc3RlckFsbG9jYXRvciwgSlNDOjpHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgICAgICBB
c3NlbWJsZXI6Okp1bXAgbm90UmVzb2x2aW5nU3R5bGUgPSBqdW1wSWZOb3RSZXNvbHZpbmdTdHls
ZShjaGVja2luZ0NvbnRleHQpOwotICAgICAgICBhZGRGbGFnc1RvRWxlbWVudFN0eWxlRnJvbUNv
bnRleHQoY2hlY2tpbmdDb250ZXh0LCBSZW5kZXJTdHlsZTo6Tm9uSW5oZXJpdGVkRmxhZ3M6OmZs
YWdJc2FmZmVjdGVkQnlIb3ZlcigpKTsKLSAgICAgICAgbm90UmVzb2x2aW5nU3R5bGUubGluaygm
bV9hc3NlbWJsZXIpOwotCi0gICAgICAgIEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbkNhbGwobV9hc3Nl
bWJsZXIsIG1fcmVnaXN0ZXJBbGxvY2F0b3IsIG1fc3RhY2tBbGxvY2F0b3IsIG1fZnVuY3Rpb25D
YWxscyk7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRGdW5jdGlvbkFkZHJlc3MoZWxlbWVudElz
SG92ZXJlZCk7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRPbmVBcmd1bWVudChlbGVtZW50QWRk
cmVzc1JlZ2lzdGVyKTsKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChmdW5jdGlvbkNhbGwu
Y2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVyblZhbHVlKEFzc2VtYmxlcjo6WmVybykpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQg
PSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlUmVnaXN0ZXJXaXRoUHJlZmVyZW5jZShKU0M6
OkdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIGxvYWRDaGVja2luZ0NvbnRleHQoY2hl
Y2tpbmdDb250ZXh0KTsKLSAgICAgICAgbV9yZWdpc3RlckFsbG9jYXRvci5kZWFsbG9jYXRlUmVn
aXN0ZXIoY2hlY2tpbmdDb250ZXh0KTsKKyAgICBhZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdT
dHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRp
b246OkFmZmVjdGVkQnlIb3Zlcik7CiAKLSAgICAgICAgRnVuY3Rpb25DYWxsIGZ1bmN0aW9uQ2Fs
bChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9zdGFja0FsbG9jYXRvciwgbV9m
dW5jdGlvbkNhbGxzKTsKLSAgICAgICAgZnVuY3Rpb25DYWxsLnNldEZ1bmN0aW9uQWRkcmVzcyhl
bGVtZW50SXNIb3ZlcmVkRm9yU3R5bGVSZXNvbHV0aW9uKTsKLSAgICAgICAgZnVuY3Rpb25DYWxs
LnNldFR3b0FyZ3VtZW50cyhlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBjaGVja2luZ0NvbnRleHQp
OwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGZ1bmN0aW9uQ2FsbC5jYWxsQW5kQnJhbmNo
T25Cb29sZWFuUmV0dXJuVmFsdWUoQXNzZW1ibGVyOjpaZXJvKSk7Ci0gICAgfQorICAgIEZ1bmN0
aW9uQ2FsbCBmdW5jdGlvbkNhbGwobV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJBbGxvY2F0b3IsIG1f
c3RhY2tBbGxvY2F0b3IsIG1fZnVuY3Rpb25DYWxscyk7CisgICAgZnVuY3Rpb25DYWxsLnNldEZ1
bmN0aW9uQWRkcmVzcyhlbGVtZW50SXNIb3ZlcmVkKTsKKyAgICBmdW5jdGlvbkNhbGwuc2V0T25l
QXJndW1lbnQoZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7CisgICAgZmFpbHVyZUNhc2VzLmFwcGVu
ZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVyblZhbHVlKEFzc2VtYmxl
cjo6WmVybykpOwogfQogCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVt
ZW50SXNJbkxhbmd1YWdlKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3Qg
U2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCkBAIC0zMzAwLDEzICszMjAyLDcgQEAgdm9pZCBT
ZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogICAgIGZhaWx1cmVDYXNlcy5hcHBl
bmQoZnVuY3Rpb25DYWxsLmNhbGxBbmRCcmFuY2hPbkJvb2xlYW5SZXR1cm5WYWx1ZShBc3NlbWJs
ZXI6Olplcm8pKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0TGFzdENoaWxkU3RhdGUoRWxlbWVudCog
ZWxlbWVudCkKLXsKLSAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC0+cmVuZGVy
U3R5bGUoKSkKLSAgICAgICAgc3R5bGUtPnNldExhc3RDaGlsZFN0YXRlKCk7Ci19Ci0KLXZvaWQg
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc0xhc3RDaGlsZChBc3NlbWJs
ZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdt
ZW50KQordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudElzTGFzdENo
aWxkKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFn
bWVudCYpCiB7CiAgICAgaWYgKG1fc2VsZWN0b3JDb250ZXh0ID09IFNlbGVjdG9yQ29udGV4dDo6
UXVlcnlTZWxlY3RvcikgewogICAgICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IHN1Y2Nlc3NDYXNl
ID0ganVtcElmTm9OZXh0QWRqYWNlbnRFbGVtZW50KCk7CkBAIC0zMzQyLDM2ICszMjM4LDIwIEBA
IHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICBMb2NhbFJlZ2lz
dGVyIGNoZWNraW5nQ29udGV4dChtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKICAgICBBc3NlbWJsZXI6
Okp1bXAgbm90UmVzb2x2aW5nU3R5bGUgPSBqdW1wSWZOb3RSZXNvbHZpbmdTdHlsZShjaGVja2lu
Z0NvbnRleHQpOwogCi0gICAgc2V0Tm9kZUZsYWcobV9hc3NlbWJsZXIsIHBhcmVudEVsZW1lbnQs
IE5vZGU6OmZsYWdDaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlc0ZsYWcoKSk7CisgICAg
YWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIHBhcmVudEVsZW1lbnQsIFNlbGVjdG9y
Q2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMp
OwogICAgIG1fcmVnaXN0ZXJBbGxvY2F0b3IuZGVhbGxvY2F0ZVJlZ2lzdGVyKHBhcmVudEVsZW1l
bnQpOwogCiAgICAgLy8gVGhlIHBhcmVudCBtYXJraW5nIGlzIHVuY29uZGl0aW9uYWwuIElmIHRo
ZSBtYXRjaGluZyBpcyBub3QgYSBzdWNjZXNzLCB3ZSBjYW4gbm93IGZhaWwuCiAgICAgLy8gT3Ro
ZXJ3aXNlIHdlIG5lZWQgdG8gYXBwbHkgc2V0TGFzdENoaWxkU3RhdGUoKSBvbiB0aGUgUmVuZGVy
U3R5bGUuCiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2hUZXN0MzIo
QXNzZW1ibGVyOjpOb25aZXJvLCBpc0xhc3RDaGlsZFJlZ2lzdGVyKSk7CiAKLSAgICBpZiAoZnJh
Z21lbnRNYXRjaGVzVGhlUmlnaHRtb3N0RWxlbWVudChtX3NlbGVjdG9yQ29udGV4dCwgZnJhZ21l
bnQpKQotICAgICAgICBhZGRGbGFnc1RvRWxlbWVudFN0eWxlRnJvbUNvbnRleHQoY2hlY2tpbmdD
b250ZXh0LCBSZW5kZXJTdHlsZTo6Tm9uSW5oZXJpdGVkRmxhZ3M6OnNldExhc3RDaGlsZFN0YXRl
RmxhZ3MoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbkNhbGwo
bV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJBbGxvY2F0b3IsIG1fc3RhY2tBbGxvY2F0b3IsIG1fZnVu
Y3Rpb25DYWxscyk7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRGdW5jdGlvbkFkZHJlc3Moc2V0
TGFzdENoaWxkU3RhdGUpOwotICAgICAgICBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVudEFk
ZHJlc3MgPSBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyOwotICAgICAgICBmdW5jdGlvbkNhbGwuc2V0
T25lQXJndW1lbnQoZWxlbWVudEFkZHJlc3MpOwotICAgICAgICBmdW5jdGlvbkNhbGwuY2FsbCgp
OwotICAgIH0KKyAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudEFk
ZHJlc3NSZWdpc3RlciwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpMYXN0Q2hpbGQp
OwogCiAgICAgbm90UmVzb2x2aW5nU3R5bGUubGluaygmbV9hc3NlbWJsZXIpOwogICAgIGZhaWx1
cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6Tm9uWmVy
bywgaXNMYXN0Q2hpbGRSZWdpc3RlcikpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRPbmx5Q2hpbGRT
dGF0ZShFbGVtZW50KiBlbGVtZW50KQotewotICAgIGlmIChSZW5kZXJTdHlsZSogc3R5bGUgPSBl
bGVtZW50LT5yZW5kZXJTdHlsZSgpKSB7Ci0gICAgICAgIHN0eWxlLT5zZXRGaXJzdENoaWxkU3Rh
dGUoKTsKLSAgICAgICAgc3R5bGUtPnNldExhc3RDaGlsZFN0YXRlKCk7Ci0gICAgfQotfQotCi12
b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNPbmx5Q2hpbGQoQXNz
ZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50JiBm
cmFnbWVudCkKK3ZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc09u
bHlDaGlsZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9y
RnJhZ21lbnQmKQogewogICAgIC8vIElzIE9ubHkgY2hpbGQgaXMgcHJldHR5IG11Y2ggYSBjb21i
aW5hdGlvbiBvZiBpc0ZpcnN0Q2hpbGQgKyBpc0xhc3RDaGlsZC4gVGhlIG1haW4gZGlmZmVyZW5j
ZSBpcyB0aGF0IHRyZWUgbWFya2luZyBpcyBjb21iaW5lZC4KICAgICBpZiAobV9zZWxlY3RvckNv
bnRleHQgPT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yKSB7CkBAIC0zNDE3LDQ0ICsz
Mjk3LDI3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICBM
b2NhbFJlZ2lzdGVyIGNoZWNraW5nQ29udGV4dChtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKICAgICBB
c3NlbWJsZXI6Okp1bXAgbm90UmVzb2x2aW5nU3R5bGUgPSBqdW1wSWZOb3RSZXNvbHZpbmdTdHls
ZShjaGVja2luZ0NvbnRleHQpOwogCi0gICAgc2V0Tm9kZUZsYWcobV9hc3NlbWJsZXIsIHBhcmVu
dEVsZW1lbnQsIE5vZGU6OmZsYWdDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXNGbGFn
KCkgfCBOb2RlOjpmbGFnQ2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXNGbGFnKCkpOwor
ICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBwYXJlbnRFbGVtZW50LCBTZWxl
Y3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRS
dWxlcyk7CisgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIHBhcmVudEVsZW1l
bnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5TGFz
dENoaWxkUnVsZXMpOworCiAgICAgbV9yZWdpc3RlckFsbG9jYXRvci5kZWFsbG9jYXRlUmVnaXN0
ZXIocGFyZW50RWxlbWVudCk7CiAKICAgICAvLyBUaGUgcGFyZW50IG1hcmtpbmcgaXMgdW5jb25k
aXRpb25hbC4gSWYgdGhlIG1hdGNoaW5nIGlzIG5vdCBhIHN1Y2Nlc3MsIHdlIGNhbiBub3cgZmFp
bC4KICAgICAvLyBPdGhlcndpc2Ugd2UgbmVlZCB0byBhcHBseSBzZXRMYXN0Q2hpbGRTdGF0ZSgp
IG9uIHRoZSBSZW5kZXJTdHlsZS4KICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVy
LmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Ok5vblplcm8sIGlzT25seUNoaWxkUmVnaXN0ZXIpKTsK
IAotICAgIGlmIChmcmFnbWVudE1hdGNoZXNUaGVSaWdodG1vc3RFbGVtZW50KG1fc2VsZWN0b3JD
b250ZXh0LCBmcmFnbWVudCkpCi0gICAgICAgIGFkZEZsYWdzVG9FbGVtZW50U3R5bGVGcm9tQ29u
dGV4dChjaGVja2luZ0NvbnRleHQsIFJlbmRlclN0eWxlOjpOb25Jbmhlcml0ZWRGbGFnczo6c2V0
Rmlyc3RDaGlsZFN0YXRlRmxhZ3MoKSB8IFJlbmRlclN0eWxlOjpOb25Jbmhlcml0ZWRGbGFnczo6
c2V0TGFzdENoaWxkU3RhdGVGbGFncygpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgRnVuY3Rpb25D
YWxsIGZ1bmN0aW9uQ2FsbChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9zdGFj
a0FsbG9jYXRvciwgbV9mdW5jdGlvbkNhbGxzKTsKLSAgICAgICAgZnVuY3Rpb25DYWxsLnNldEZ1
bmN0aW9uQWRkcmVzcyhzZXRPbmx5Q2hpbGRTdGF0ZSk7Ci0gICAgICAgIEFzc2VtYmxlcjo6UmVn
aXN0ZXJJRCBlbGVtZW50QWRkcmVzcyA9IGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXI7Ci0gICAgICAg
IGZ1bmN0aW9uQ2FsbC5zZXRPbmVBcmd1bWVudChlbGVtZW50QWRkcmVzcyk7Ci0gICAgICAgIGZ1
bmN0aW9uQ2FsbC5jYWxsKCk7Ci0gICAgfQorICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdD
b250ZXh0LCBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVs
YXRpb246OkZpcnN0Q2hpbGQpOworICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0
LCBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246
Okxhc3RDaGlsZCk7CiAKICAgICBub3RSZXNvbHZpbmdTdHlsZS5saW5rKCZtX2Fzc2VtYmxlcik7
CiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2hUZXN0MzIoQXNzZW1i
bGVyOjpOb25aZXJvLCBpc09ubHlDaGlsZFJlZ2lzdGVyKSk7CiB9CiAKLXN0YXRpYyBib29sIG1h
a2VDb250ZXh0U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRlc3RJc1BsYWNlaG9sZGVyU2hvd24o
RWxlbWVudCogZWxlbWVudCwgY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQq
IGNoZWNraW5nQ29udGV4dCkKK3N0YXRpYyBib29sIG1ha2VDb250ZXh0U3R5bGVVbmlxdWVJZk5l
Y2Vzc2FyeUFuZFRlc3RJc1BsYWNlaG9sZGVyU2hvd24oRWxlbWVudCogZWxlbWVudCwgU2VsZWN0
b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQqIGNoZWNraW5nQ29udGV4dCkKIHsKICAgICBpZiAo
aXM8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewogICAgICAgICBpZiAo
Y2hlY2tpbmdDb250ZXh0LT5yZXNvbHZpbmdNb2RlID09IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6
UmVzb2x2aW5nU3R5bGUpCi0gICAgICAgICAgICBjaGVja2luZ0NvbnRleHQtPmVsZW1lbnRTdHls
ZS0+c2V0VW5pcXVlKCk7Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudD4oKmVsZW1lbnQpLmlzUGxhY2Vob2xkZXJWaXNpYmxlKCk7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wgbWFrZUVsZW1lbnRTdHlsZVVuaXF1ZUlm
TmVjZXNzYXJ5QW5kVGVzdElzUGxhY2Vob2xkZXJTaG93bihFbGVtZW50KiBlbGVtZW50LCBjb25z
dCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCogY2hlY2tpbmdDb250ZXh0KQotewot
ICAgIGlmIChpczxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7Ci0gICAg
ICAgIGlmIChjaGVja2luZ0NvbnRleHQtPnJlc29sdmluZ01vZGUgPT0gU2VsZWN0b3JDaGVja2Vy
OjpNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewotICAgICAgICAgICAgaWYgKFJlbmRlclN0eWxlKiBz
dHlsZSA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkpCi0gICAgICAgICAgICAgICAgc3R5bGUtPnNl
dFVuaXF1ZSgpOwotICAgICAgICB9CisgICAgICAgICAgICBjaGVja2luZ0NvbnRleHQtPnN0eWxl
UmVsYXRpb25zLmFwcGVuZCh7ICplbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRp
b246OlVuaXF1ZSwgMSB9KTsKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50PigqZWxlbWVudCkuaXNQbGFjZWhvbGRlclZpc2libGUoKTsKICAgICB9CiAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMzQ2NSw3ICszMzI4LDcgQEAgc3RhdGljIGJvb2wgaXNQbGFj
ZWhvbGRlclNob3duKEVsZW1lbnQqIAogICAgIHJldHVybiBpczxIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
PigqZWxlbWVudCkuaXNQbGFjZWhvbGRlclZpc2libGUoKTsKIH0KIAotdm9pZCBTZWxlY3RvckNv
ZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudEhhc1BsYWNlaG9sZGVyU2hvd24oQXNzZW1ibGVy
OjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVu
dCkKK3ZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRIYXNQbGFjZWhv
bGRlclNob3duKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0
b3JGcmFnbWVudCYpCiB7CiAgICAgaWYgKG1fc2VsZWN0b3JDb250ZXh0ID09IFNlbGVjdG9yQ29u
dGV4dDo6UXVlcnlTZWxlY3RvcikgewogICAgICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxs
KG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1
bmN0aW9uQ2FsbHMpOwpAQCAtMzQ4MCwxMCArMzM0Myw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICBtX3JlZ2lzdGVyQWxsb2NhdG9yLmRlYWxsb2NhdGVS
ZWdpc3RlcihjaGVja2luZ0NvbnRleHQpOwogCiAgICAgRnVuY3Rpb25DYWxsIGZ1bmN0aW9uQ2Fs
bChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9zdGFja0FsbG9jYXRvciwgbV9m
dW5jdGlvbkNhbGxzKTsKLSAgICBpZiAoZnJhZ21lbnRNYXRjaGVzVGhlUmlnaHRtb3N0RWxlbWVu
dChtX3NlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnQpKQotICAgICAgICBmdW5jdGlvbkNhbGwuc2V0
RnVuY3Rpb25BZGRyZXNzKG1ha2VDb250ZXh0U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRlc3RJ
c1BsYWNlaG9sZGVyU2hvd24pOwotICAgIGVsc2UKLSAgICAgICAgZnVuY3Rpb25DYWxsLnNldEZ1
bmN0aW9uQWRkcmVzcyhtYWtlRWxlbWVudFN0eWxlVW5pcXVlSWZOZWNlc3NhcnlBbmRUZXN0SXNQ
bGFjZWhvbGRlclNob3duKTsKKyAgICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRyZXNzKG1h
a2VDb250ZXh0U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRlc3RJc1BsYWNlaG9sZGVyU2hvd24p
OwogICAgIGZ1bmN0aW9uQ2FsbC5zZXRUd29Bcmd1bWVudHMoZWxlbWVudEFkZHJlc3NSZWdpc3Rl
ciwgY2hlY2tpbmdDb250ZXh0KTsKICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGZ1bmN0aW9uQ2Fs
bC5jYWxsQW5kQnJhbmNoT25Cb29sZWFuUmV0dXJuVmFsdWUoQXNzZW1ibGVyOjpaZXJvKSk7CiB9
CkBAIC0zNTg1LDExICszNDQ1LDYgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVy
YXRlRWxlbQogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNoVGVzdDMy
KEFzc2VtYmxlcjo6WmVybywgQXNzZW1ibGVyOjpBZGRyZXNzKGVsZW1lbnRBZGRyZXNzUmVnaXN0
ZXIsIE5vZGU6Om5vZGVGbGFnc01lbW9yeU9mZnNldCgpKSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoTm9kZTo6ZmxhZ0lzTGluaygpKSkpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRFbGVtZW50Q2hp
bGRJbmRleChFbGVtZW50KiBlbGVtZW50LCBpbnQgaW5kZXgpCi17Ci0gICAgZWxlbWVudC0+c2V0
Q2hpbGRJbmRleChpbmRleCk7Ci19Ci0KIHN0YXRpYyBib29sIG50aEZpbHRlcklzQWx3YXlzU2F0
aXNpZmllZChpbnQgYSwgaW50IGIpCiB7CiAgICAgLy8gQW55dGhpbmcgbW9kdWxvIDEgaXMgemVy
by4gVW5sZXNzIGIgcmVzdHJpY3RzIHRoZSByYW5nZSwgdGhpcyBkb2VzIG5vdCBmaWx0ZXIgYW55
dGhpbmcgb3V0LgpAQCAtMzYxNiw3ICszNDcxLDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0
b3I6OmdlbmVyYXRlRWxlbQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWlzQWRqYWNlbnRS
ZWxhdGlvbihmcmFnbWVudC5yZWxhdGlvblRvUmlnaHRGcmFnbWVudCkpCi0gICAgICAgIG1hcmtF
bGVtZW50SWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBOb2RlOjpmbGFn
U3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoKSk7CisgICAgICAgIGFkZFN0eWxlUmVs
YXRpb25JZlJlc29sdmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVjdG9yQ2hl
Y2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyk7CiAKICAgICAv
LyBTZXR1cCB0aGUgY291bnRlciBhdCAxLgogICAgIExvY2FsUmVnaXN0ZXJXaXRoUHJlZmVyZW5j
ZSBlbGVtZW50Q291bnRlcihtX3JlZ2lzdGVyQWxsb2NhdG9yLCBKU0M6OkdQUkluZm86OmFyZ3Vt
ZW50R1BSMSk7CkBAIC0zNjM0LDcgKzM0ODksNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVFbGVtCiAKICAgICAgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBub0NhY2hlZENo
aWxkSW5kZXhDYXNlczsKICAgICAgICAgZ2VuZXJhdGVXYWxrVG9QcmV2aW91c0FkamFjZW50RWxl
bWVudChub01vcmVTaWJsaW5nc0Nhc2VzLCBwcmV2aW91c1NpYmxpbmcpOwotICAgICAgICBtYXJr
RWxlbWVudElmUmVzb2x2aW5nU3R5bGUocHJldmlvdXNTaWJsaW5nLCBOb2RlOjpmbGFnQWZmZWN0
c05leHRTaWJsaW5nRWxlbWVudFN0eWxlKCkpOworICAgICAgICBhZGRTdHlsZVJlbGF0aW9uSWZS
ZXNvbHZpbmdTdHlsZShwcmV2aW91c1NpYmxpbmcsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxh
dGlvbjo6QWZmZWN0c05leHRTaWJsaW5nKTsKICAgICAgICAgbm9DYWNoZWRDaGlsZEluZGV4Q2Fz
ZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Olplcm8sIEFzc2Vt
Ymxlcjo6QWRkcmVzcyhwcmV2aW91c1NpYmxpbmcsIE5vZGU6Om5vZGVGbGFnc01lbW9yeU9mZnNl
dCgpKSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoTm9kZTo6ZmxhZ0hhc1JhcmVEYXRhKCkpKSk7
CiAgICAgICAgIHsKICAgICAgICAgICAgIExvY2FsUmVnaXN0ZXIgZWxlbWVudFJhcmVEYXRhKG1f
cmVnaXN0ZXJBbGxvY2F0b3IpOwpAQCAtMzY1MCwyNSArMzUwNSwxMyBAQCB2b2lkIFNlbGVjdG9y
Q29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAKICAgICAgICAgQXNzZW1ibGVyOjpMYWJlbCBs
b29wU3RhcnQgPSBtX2Fzc2VtYmxlci5sYWJlbCgpOwogICAgICAgICBnZW5lcmF0ZVdhbGtUb1By
ZXZpb3VzQWRqYWNlbnRFbGVtZW50KG5vTW9yZVNpYmxpbmdzQ2FzZXMsIHByZXZpb3VzU2libGlu
Zyk7Ci0gICAgICAgIG1hcmtFbGVtZW50SWZSZXNvbHZpbmdTdHlsZShwcmV2aW91c1NpYmxpbmcs
IE5vZGU6OmZsYWdBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKSk7CisgICAgICAgIGFk
ZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKHByZXZpb3VzU2libGluZywgU2VsZWN0b3JD
aGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RzTmV4dFNpYmxpbmcpOwogICAgICAgICBtX2Fz
c2VtYmxlci5hZGQzMihBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgZWxlbWVudENvdW50ZXIp
OwogICAgICAgICBtX2Fzc2VtYmxlci5qdW1wKCkubGlua1RvKGxvb3BTdGFydCwgJm1fYXNzZW1i
bGVyKTsKICAgICAgICAgbm9Nb3JlU2libGluZ3NDYXNlcy5saW5rKCZtX2Fzc2VtYmxlcik7CiAg
ICAgfQogCi0gICAgLy8gVHJlZSBtYXJraW5nIHdoZW4gZG9pbmcgc3R5bGUgcmVzb2x1dGlvbi4K
LSAgICBpZiAobV9zZWxlY3RvckNvbnRleHQgIT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVj
dG9yKSB7Ci0gICAgICAgIExvY2FsUmVnaXN0ZXIgY2hlY2tpbmdDb250ZXh0KG1fcmVnaXN0ZXJB
bGxvY2F0b3IpOwotICAgICAgICBBc3NlbWJsZXI6Okp1bXAgbm90UmVzb2x2aW5nU3R5bGUgPSBq
dW1wSWZOb3RSZXNvbHZpbmdTdHlsZShjaGVja2luZ0NvbnRleHQpOwotCi0gICAgICAgIEFzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50QWRkcmVzcyA9IGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXI7
Ci0gICAgICAgIEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbkNhbGwobV9hc3NlbWJsZXIsIG1fcmVnaXN0
ZXJBbGxvY2F0b3IsIG1fc3RhY2tBbGxvY2F0b3IsIG1fZnVuY3Rpb25DYWxscyk7Ci0gICAgICAg
IGZ1bmN0aW9uQ2FsbC5zZXRGdW5jdGlvbkFkZHJlc3Moc2V0RWxlbWVudENoaWxkSW5kZXgpOwot
ICAgICAgICBmdW5jdGlvbkNhbGwuc2V0VHdvQXJndW1lbnRzKGVsZW1lbnRBZGRyZXNzLCBlbGVt
ZW50Q291bnRlcik7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5jYWxsKCk7Ci0KLSAgICAgICAgbm90
UmVzb2x2aW5nU3R5bGUubGluaygmbV9hc3NlbWJsZXIpOwotICAgIH0KKyAgICBhZGRTdHlsZVJl
bGF0aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTZWxlY3RvckNo
ZWNrZXI6OlN0eWxlUmVsYXRpb246Ok50aENoaWxkSW5kZXgsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJ
RChlbGVtZW50Q291bnRlcikpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBzbG90IDogdmFsaWRT
dWJzZXRGaWx0ZXJzKQogICAgICAgICBnZW5lcmF0ZU50aEZpbHRlclRlc3QoZmFpbHVyZUNhc2Vz
LCBlbGVtZW50Q291bnRlciwgc2xvdC5maXJzdCwgc2xvdC5zZWNvbmQpOwpAQCAtMzY5NSw3ICsz
NTM4LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoIWlzQWRqYWNlbnRSZWxhdGlvbihmcmFnbWVudC5yZWxhdGlv
blRvUmlnaHRGcmFnbWVudCkpCi0gICAgICAgIG1hcmtFbGVtZW50SWZSZXNvbHZpbmdTdHlsZShl
bGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBOb2RlOjpmbGFnU3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91
c1NpYmxpbmcoKSk7CisgICAgICAgIGFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKGVs
ZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZm
ZWN0ZWRCeVByZXZpb3VzU2libGluZyk7CiAKICAgICBmb3IgKGNvbnN0IE50aENoaWxkT2ZTZWxl
Y3RvckluZm8qIG50aENoaWxkT2ZTZWxlY3RvckluZm8gOiB2YWxpZFN1YnNldEZpbHRlcnMpIHsK
ICAgICAgICAgLy8gU2V0dXAgdGhlIGNvdW50ZXIgYXQgMS4KQEAgLTM3MTIsNyArMzU1NSw3IEBA
IHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICAgICAgICAgIEFz
c2VtYmxlcjo6TGFiZWwgbG9vcFN0YXJ0ID0gbV9hc3NlbWJsZXIubGFiZWwoKTsKIAogICAgICAg
ICAgICAgZ2VuZXJhdGVXYWxrVG9QcmV2aW91c0FkamFjZW50RWxlbWVudChub01vcmVTaWJsaW5n
c0Nhc2VzLCBwcmV2aW91c1NpYmxpbmcpOwotICAgICAgICAgICAgbWFya0VsZW1lbnRJZlJlc29s
dmluZ1N0eWxlKHByZXZpb3VzU2libGluZywgTm9kZTo6ZmxhZ0FmZmVjdHNOZXh0U2libGluZ0Vs
ZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0
eWxlKHByZXZpb3VzU2libGluZywgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZl
Y3RzTmV4dFNpYmxpbmcpOwogCiAgICAgICAgICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IGxvY2Fs
RmFpbHVyZUNhc2VzOwogICAgICAgICAgICAgZ2VuZXJhdGVFbGVtZW50TWF0Y2hlc1NlbGVjdG9y
TGlzdChsb2NhbEZhaWx1cmVDYXNlcywgcHJldmlvdXNTaWJsaW5nLCBudGhDaGlsZE9mU2VsZWN0
b3JJbmZvLT5zZWxlY3Rvckxpc3QpOwpAQCAtMzcyNywxMSArMzU3MCw2IEBAIHZvaWQgU2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIHNl
dENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKEVsZW1lbnQqIGVsZW1l
bnQpCi17Ci0gICAgZWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlv
bmFsUnVsZXMoKTsKLX0KLQogdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxl
bWVudElzTnRoTGFzdENoaWxkKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29u
c3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCiB7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxp
bnQsIGludD4sIDMyPiB2YWxpZFN1YnNldEZpbHRlcnM7CkBAIC0zNzQwLDIwICszNTc4LDcgQEAg
dm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogICAgICAgICBMb2NhbFJl
Z2lzdGVyIHBhcmVudEVsZW1lbnQobV9yZWdpc3RlckFsbG9jYXRvcik7CiAgICAgICAgIGdlbmVy
YXRlV2Fsa1RvUGFyZW50RWxlbWVudChmYWlsdXJlQ2FzZXMsIHBhcmVudEVsZW1lbnQpOwogCi0g
ICAgICAgIGlmIChtX3NlbGVjdG9yQ29udGV4dCAhPSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2Vs
ZWN0b3IpIHsKLSAgICAgICAgICAgIEFzc2VtYmxlcjo6SnVtcCBza2lwTWFya2luZzsKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2NhbFJlZ2lzdGVyIGNoZWNraW5nQ29udGV4dCht
X3JlZ2lzdGVyQWxsb2NhdG9yKTsKLSAgICAgICAgICAgICAgICBza2lwTWFya2luZyA9IGp1bXBJ
Zk5vdFJlc29sdmluZ1N0eWxlKGNoZWNraW5nQ29udGV4dCk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbkNhbGwobV9hc3NlbWJsZXIsIG1fcmVnaXN0
ZXJBbGxvY2F0b3IsIG1fc3RhY2tBbGxvY2F0b3IsIG1fZnVuY3Rpb25DYWxscyk7Ci0gICAgICAg
ICAgICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRyZXNzKHNldENoaWxkcmVuQWZmZWN0ZWRC
eUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsKLSAgICAgICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRP
bmVBcmd1bWVudChwYXJlbnRFbGVtZW50KTsKLSAgICAgICAgICAgIGZ1bmN0aW9uQ2FsbC5jYWxs
KCk7Ci0KLSAgICAgICAgICAgIHNraXBNYXJraW5nLmxpbmsoJm1fYXNzZW1ibGVyKTsKLSAgICAg
ICAgfQorICAgICAgICBhZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShwYXJlbnRFbGVt
ZW50LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUJh
Y2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsKIAogICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1f
YXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Olplcm8sIEFzc2VtYmxlcjo6QWRkcmVz
cyhwYXJlbnRFbGVtZW50LCBOb2RlOjpub2RlRmxhZ3NNZW1vcnlPZmZzZXQoKSksIEFzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKE5vZGU6OmZsYWdJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkKCkpKSk7
CiAKQEAgLTM3ODgsMTMgKzM2MTMsNiBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVFbGVtCiAgICAgICAgIGdlbmVyYXRlTnRoRmlsdGVyVGVzdChmYWlsdXJlQ2FzZXMsIGVs
ZW1lbnRDb3VudGVyLCBzbG90LmZpcnN0LCBzbG90LnNlY29uZCk7CiB9CiAKLXN0YXRpYyB2b2lk
IHNldFBhcmVudEFmZmVjdGVkQnlMYXN0Q2hpbGRPZihFbGVtZW50KiBwYXJlbnRFbGVtZW50KQot
ewotICAgIEFTU0VSVChwYXJlbnRFbGVtZW50KTsKLSAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGls
ZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKLSAg
ICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxS
dWxlcygpOwotfQotCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50
SXNOdGhMYXN0Q2hpbGRPZihBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0
IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQogewogICAgIFZlY3Rvcjxjb25zdCBOdGhDaGls
ZE9mU2VsZWN0b3JJbmZvKj4gdmFsaWRTdWJzZXRGaWx0ZXJzOwpAQCAtMzgwMywyMCArMzYyMSw3
IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICAgICAgTG9j
YWxSZWdpc3RlciBwYXJlbnRFbGVtZW50KG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwogICAgICAgICBn
ZW5lcmF0ZVdhbGtUb1BhcmVudEVsZW1lbnQoZmFpbHVyZUNhc2VzLCBwYXJlbnRFbGVtZW50KTsK
IAotICAgICAgICBpZiAobV9zZWxlY3RvckNvbnRleHQgIT0gU2VsZWN0b3JDb250ZXh0OjpRdWVy
eVNlbGVjdG9yKSB7Ci0gICAgICAgICAgICBBc3NlbWJsZXI6Okp1bXAgc2tpcE1hcmtpbmc7Ci0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9jYWxSZWdpc3RlciBjaGVja2luZ0NvbnRl
eHQobV9yZWdpc3RlckFsbG9jYXRvcik7Ci0gICAgICAgICAgICAgICAgc2tpcE1hcmtpbmcgPSBq
dW1wSWZOb3RSZXNvbHZpbmdTdHlsZShjaGVja2luZ0NvbnRleHQpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3Jl
Z2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOwotICAg
ICAgICAgICAgZnVuY3Rpb25DYWxsLnNldEZ1bmN0aW9uQWRkcmVzcyhzZXRQYXJlbnRBZmZlY3Rl
ZEJ5TGFzdENoaWxkT2YpOwotICAgICAgICAgICAgZnVuY3Rpb25DYWxsLnNldE9uZUFyZ3VtZW50
KHBhcmVudEVsZW1lbnQpOwotICAgICAgICAgICAgZnVuY3Rpb25DYWxsLmNhbGwoKTsKLQotICAg
ICAgICAgICAgc2tpcE1hcmtpbmcubGluaygmbV9hc3NlbWJsZXIpOwotICAgICAgICB9CisgICAg
ICAgIGFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKHBhcmVudEVsZW1lbnQsIFNlbGVj
dG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5UHJvcGVydHlCYXNl
ZEJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsKIAogICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5k
KG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Olplcm8sIEFzc2VtYmxlcjo6QWRk
cmVzcyhwYXJlbnRFbGVtZW50LCBOb2RlOjpub2RlRmxhZ3NNZW1vcnlPZmZzZXQoKSksIEFzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKE5vZGU6OmZsYWdJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkKCkp
KSk7CiAKQEAgLTQwMDMsNyArMzgwOCwxMCBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6
Z2VuZXJhdGVNYXJrCiAgICAgUHNldWRvSWQgZHluYW1pY1BzZXVkbyA9IENTU1NlbGVjdG9yOjpw
c2V1ZG9JZChmcmFnbWVudC5wc2V1ZG9FbGVtZW50U2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBl
KCkpOwogICAgIGlmIChkeW5hbWljUHNldWRvIDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQpIHsK
ICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChicmFuY2hPblJlc29sdmluZ01vZGVXaXRoQ2hl
Y2tpbmdDb250ZXh0KEFzc2VtYmxlcjo6Tm90RXF1YWwsIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6
UmVzb2x2aW5nU3R5bGUsIGNoZWNraW5nQ29udGV4dCkpOwotICAgICAgICBhZGRGbGFnc1RvRWxl
bWVudFN0eWxlRnJvbUNvbnRleHQoY2hlY2tpbmdDb250ZXh0LCBSZW5kZXJTdHlsZTo6Tm9uSW5o
ZXJpdGVkRmxhZ3M6OmZsYWdQc2V1ZG9TdHlsZShkeW5hbWljUHNldWRvKSk7CisKKyAgICAgICAg
QXNzZW1ibGVyOjpBZGRyZXNzIGZsYWdBZGRyZXNzKGNoZWNraW5nQ29udGV4dCwgT0JKRUNUX09G
RlNFVE9GKFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0LCBwc2V1ZG9JRFNldCkpOwor
ICAgICAgICBQc2V1ZG9JZFNldCBwc2V1ZG9JZFNldCB7IGR5bmFtaWNQc2V1ZG8gfTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuc3RvcmUzMihBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihwc2V1ZG9JZFNl
dC5kYXRhKCkpLCBmbGFnQWRkcmVzcyk7CiAgICAgfQogCiAgICAgLy8gV2UgaGF2ZSBhIHBzZXVk
b0VsZW1lbnRTZWxlY3Rvciwgd2UgYXJlIG5vdCBpbiBDb2xsZWN0aW5nUnVsZXNJZ25vcmluZ1Zp
cnR1YWxQc2V1ZG9FbGVtZW50cyBzbwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9y
UXVlcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5
LmNwcAkocmV2aXNpb24gMTk1MTMwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVl
cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgaW5saW5lIGJvb2wgU2Vs
ZWN0b3JEYXRhTGlzdDo6c2VsZWN0b3JNYQogICAgIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdD
b250ZXh0IHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVl
cnlpbmdSdWxlcyk7CiAgICAgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQuc2NvcGUgPSByb290Tm9k
ZS5pc0RvY3VtZW50Tm9kZSgpID8gbnVsbHB0ciA6ICZyb290Tm9kZTsKICAgICB1bnNpZ25lZCBp
Z25vcmVkU3BlY2lmaWNpdHk7Ci0gICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlci5tYXRjaChzZWxl
Y3RvckRhdGEuc2VsZWN0b3IsICZlbGVtZW50LCBzZWxlY3RvckNoZWNraW5nQ29udGV4dCwgaWdu
b3JlZFNwZWNpZmljaXR5KTsKKyAgICByZXR1cm4gc2VsZWN0b3JDaGVja2VyLm1hdGNoKCpzZWxl
Y3RvckRhdGEuc2VsZWN0b3IsIGVsZW1lbnQsIHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0LCBpZ25v
cmVkU3BlY2lmaWNpdHkpOwogfQogCiBpbmxpbmUgRWxlbWVudCogU2VsZWN0b3JEYXRhTGlzdDo6
c2VsZWN0b3JDbG9zZXN0KGNvbnN0IFNlbGVjdG9yRGF0YSYgc2VsZWN0b3JEYXRhLCBFbGVtZW50
JiBlbGVtZW50LCBjb25zdCBDb250YWluZXJOb2RlJiByb290Tm9kZSkgY29uc3QKQEAgLTEyNiwx
MSArMTI2LDEwIEBAIGlubGluZSBFbGVtZW50KiBTZWxlY3RvckRhdGFMaXN0OjpzZWxlY3QKICAg
ICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKGVsZW1lbnQuZG9jdW1lbnQoKSk7CiAg
ICAgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2luZ0NvbnRl
eHQoU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpRdWVyeWluZ1J1bGVzKTsKICAgICBzZWxlY3RvckNo
ZWNraW5nQ29udGV4dC5zY29wZSA9IHJvb3ROb2RlLmlzRG9jdW1lbnROb2RlKCkgPyBudWxscHRy
IDogJnJvb3ROb2RlOwotICAgIEVsZW1lbnQqIGN1cnJlbnROb2RlID0gJmVsZW1lbnQ7CiAgICAg
dW5zaWduZWQgaWdub3JlZFNwZWNpZmljaXR5OwotICAgIGlmICghc2VsZWN0b3JDaGVja2VyLm1h
dGNoKHNlbGVjdG9yRGF0YS5zZWxlY3RvciwgY3VycmVudE5vZGUsIHNlbGVjdG9yQ2hlY2tpbmdD
b250ZXh0LCBpZ25vcmVkU3BlY2lmaWNpdHkpKQorICAgIGlmICghc2VsZWN0b3JDaGVja2VyLm1h
dGNoKCpzZWxlY3RvckRhdGEuc2VsZWN0b3IsIGVsZW1lbnQsIHNlbGVjdG9yQ2hlY2tpbmdDb250
ZXh0LCBpZ25vcmVkU3BlY2lmaWNpdHkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gY3VycmVudE5vZGU7CisgICAgcmV0dXJuICZlbGVtZW50OwogfQogCiBib29sIFNlbGVj
dG9yRGF0YUxpc3Q6Om1hdGNoZXMoRWxlbWVudCYgdGFyZ2V0RWxlbWVudCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAkocmV2
aXNpb24gMTk1MTMwKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0Fn
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1MCw3ICsxMDUwLDcgQEAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlYwogICAgICAgICBpbnQgaW5kZXggPSAwOwogICAg
ICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHNlbGVjdG9yTGlzdC5maXJz
dCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc2VsZWN0b3Ip
KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBpZ25vcmVkU3BlY2lmaWNpdHk7Ci0gICAgICAgICAg
ICBib29sIG1hdGNoZWQgPSBzZWxlY3RvckNoZWNrZXIubWF0Y2goc2VsZWN0b3IsIGVsZW1lbnQs
IGNvbnRleHQsIGlnbm9yZWRTcGVjaWZpY2l0eSk7CisgICAgICAgICAgICBib29sIG1hdGNoZWQg
PSBzZWxlY3RvckNoZWNrZXIubWF0Y2goKnNlbGVjdG9yLCAqZWxlbWVudCwgY29udGV4dCwgaWdu
b3JlZFNwZWNpZmljaXR5KTsKICAgICAgICAgICAgIGlmIChtYXRjaGVkKQogICAgICAgICAgICAg
ICAgIG1hdGNoaW5nU2VsZWN0b3JzLT5hZGRJdGVtKGluZGV4KTsKICAgICAgICAgICAgICsraW5k
ZXg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxl
U2hlZXQuY3BwCShyZXZpc2lvbiAxOTUxMzApCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2Miw3ICs4NjIsNyBA
QCBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTCiAgICAgICAgIFNlbGVj
dG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZWxlbWVudC0+ZG9jdW1lbnQoKSk7CiAKICAgICAg
ICAgdW5zaWduZWQgc3BlY2lmaWNpdHk7Ci0gICAgICAgIGJvb2wgb2theSA9IHNlbGVjdG9yQ2hl
Y2tlci5tYXRjaCgmc2VsZWN0b3IsIGVsZW1lbnQsIGNvbnRleHQsIHNwZWNpZmljaXR5KTsKKyAg
ICAgICAgYm9vbCBva2F5ID0gc2VsZWN0b3JDaGVja2VyLm1hdGNoKHNlbGVjdG9yLCAqZWxlbWVu
dCwgY29udGV4dCwgc3BlY2lmaWNpdHkpOwogICAgICAgICBpZiAoIW9rYXkpCiAgICAgICAgICAg
ICBzcGVjaWZpY2l0eSA9IHNlbGVjdG9yLnN0YXRpY1NwZWNpZmljaXR5KG9rYXkpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269221</attachid>
            <date>2016-01-18 07:48:23 -0800</date>
            <delta_ts>2016-01-18 07:55:07 -0800</delta_ts>
            <desc>patch</desc>
            <filename>selector-checker-const-10.patch</filename>
            <type>text/plain</type>
            <size>108648</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBAQAorMjAxNi0wMS0xOCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgU2VsZWN0b3IgY2hlY2tlciBz
aG91bGQgbm90IG11dGF0ZSBkb2N1bWVudCBhbmQgc3R5bGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzIwNQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNlbGVjdG9yIGNoZWNrZXIgY3VycmVudGx5IHdy
aXRlcyBhZmZlY3RlZC1ieSBiaXRzIGFuZCBzaW1pbGFyIGRpcmVjdGx5IHRvIHRoZSBkb2N1bWVu
dCBhbmQgc3R5bGUgZHVyaW5nIHNlbGVjdG9yCisgICAgICAgIG1hdGNoaW5nLiBUaGlzIGlzIGNv
bmZ1c2luZywgY29tcGxpY2F0ZWQgYW5kIHdyb25nLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2hh
bmdlcyBTZWxlY3RvckNoZWNrZXIgYW5kIFNlbGVjdG9yQ29tcGlsZXIgdG8gY29sbGVjdCBzdHls
ZSByZWxhdGF0aW9uc2hpcCBtZXRhZGF0YSB0byBhIHNlcGFyYXRlCisgICAgICAgIGRhdGEgc3Ry
dWN0dXJlIChjdXJyZW50bHkgcGFydCBvZiBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4
dCkgaW5zdGVhZCBvZiBjaGFuZ2luZyB0aGUgZG9jdW1lbnQgYW5kIHN0eWxlCisgICAgICAgIGRp
cmVjdGx5LiBUaGUgbXV0YXRpb25zIGFyZSBwZXJmb3JtZWQgbGF0ZXIgb3V0c2lkZSBzZWxlY3Rv
ciBjaGVja2VyLgorCisgICAgICAgICogY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxlTWF0Y2hlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6Y29tbWl0U3R5bGVSZWxhdGlvbnMp
OgorCisgICAgICAgICAgICBBcHBseSB0aGUgcmVsYXRpb25zaGlwIGJpdCB0byBlbGVtZW50cyBh
bmQgc3R5bGUuCisKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSdWxlQ29sbGVjdG9yOjpjb2xs
ZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAqIGNzcy9FbGVtZW50UnVsZUNvbGxl
Y3Rvci5oOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JDaGVja2VyOjpMb2NhbENvbnRleHQ6OkxvY2FsQ29udGV4dCk6CisKKyAg
ICAgICAgICAgIExvY2FsQ29udGV4dCBpcyBub3cgYSBzZXBhcmF0ZSBkYXRhIHN0cnVjdHVyZS4K
KworICAgICAgICAoV2ViQ29yZTo6YWRkU3R5bGVSZWxhdGlvbik6CisKKyAgICAgICAgICAgIEhl
bHBlciBmb3IgcmVjb3JkaW5nIG5ldyBzdHlsZSByZWxhdGlvbnMuIFRoaXMgaXMgdXNlZCB3aGVy
ZSBjb2RlIG11dGF0ZWQgZWxlbWVudHMgb3Igc3R5bGUgZGlyZWN0bHkgYmVmb3JlLgorCisgICAg
ICAgIChXZWJDb3JlOjppc0ZpcnN0Q2hpbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Omlz
TGFzdENoaWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjppc0ZpcnN0T2ZUeXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzTGFzdE9mVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpjb3VudEVs
ZW1lbnRzQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvdW50RWxlbWVudHNPZlR5cGVCZWZv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNrZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjptYXRjaCk6CisgICAgICAgIChX
ZWJDb3JlOjpoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Omxv
Y2FsQ29udGV4dEZvclBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6
Om1hdGNoUmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlVmFsdWVNYXRj
aGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmFueUF0dHJpYnV0ZU1hdGNoZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Y2FuTWF0Y2hIb3Zlck9yQWN0aXZlSW5RdWlya3NNb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OnRhZ01hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpj
aGVja09uZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoU2VsZWN0
b3JMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTY3JvbGxi
YXJQc2V1ZG9DbGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OkNoZWNr
aW5nQ29udGV4dFdpdGhTdGF0dXM6OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KTogRGVsZXRlZC4K
KyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dDo6Q2hlY2tpbmdDb250ZXh0KToKKyAgICAgICAg
KiBjc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6
aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OmlzTWVkaWFEb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjppc0NoZWNrZWQpOgorICAgICAgICAoV2ViQ29yZTo6aXNJblJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzT3V0T2ZSYW5nZSk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrUmVnaW9uU2VsZWN0b3IpOgorICAgICAgICAq
IGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9u
SWZSZXNvbHZpbmdTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpT
ZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbik6CisKKyAgICAg
ICAgICAgIEhlbHBlcnMgZm9yIGdlbmVyYXRpbmcgY29kZSBmb3IgcmVjb3JkaW5nIG5ldyBzdHls
ZSByZWxhdGlvbnMuIFRoaXMgaXMgdXNlZCB3aGVyZSBjb2RlIG11dGF0ZWQgZWxlbWVudHMgb3Ig
c3R5bGUgZGlyZWN0bHkgYmVmb3JlLgorCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBp
bGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlU2VsZWN0b3JDaGVja2VyRXhjbHVk
aW5nUHNldWRvRWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZURpcmVjdEFkamFjZW50VHJlZVdhbGtlcik6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0
b3I6OmdlbmVyYXRlSW5kaXJlY3RBZGphY2VudFRyZWVXYWxrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0b3JDb21waWxlcjo6YWRkU3R5bGVSZWxhdGlvbkVsZW1lbnRGdW5jdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6
Omp1bXBJZk5vUHJldmlvdXNBZGphY2VudEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjptb2R1bG9Jc1plcm8pOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjps
aW5rRmFpbHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRNYXRjaGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQ29u
dGV4dEZ1bmN0aW9uQ2FsbFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxl
cjo6ZWxlbWVudElzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6
OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNBY3RpdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6anVtcElmRWxlbWVudElzTm90RW1wdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9y
OjpnZW5lcmF0ZUVsZW1lbnRJc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29t
cGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNGaXJzdENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OmVsZW1lbnRJc0hvdmVyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZUVsZW1lbnRJc0hvdmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc0luTGFu
Z3VhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2Rl
R2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc0xhc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVu
dElzT25seUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6Om1ha2VD
b250ZXh0U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRlc3RJc1BsYWNlaG9sZGVyU2hvd24pOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6aXNQbGFjZWhvbGRlclNob3duKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVFbGVtZW50SGFzUGxhY2Vob2xkZXJTaG93bik6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVu
dElzTGluayk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpudGhGaWx0ZXJJ
c0Fsd2F5c1NhdGlzaWZpZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc050aENoaWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVFbGVtZW50SXNOdGhDaGlsZE9mKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29t
cGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNOdGhMYXN0Q2hp
bGQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc050aExhc3RDaGlsZE9mKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVNYXJr
UHNldWRvU3R5bGVGb3JQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6YWRkRmxhZ3NUb0VsZW1lbnRTdHlsZUZy
b21Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6
OnNldE5vZGVGbGFnKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGls
ZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6bWFya0VsZW1lbnRJZlJlc29sdmluZ1N0eWxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OnNldEZpcnN0Q2hp
bGRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpl
bGVtZW50SXNBY3RpdmVGb3JTdHlsZVJlc29sdXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JDb21waWxlcjo6c2V0RWxlbWVudFN0eWxlSXNBZmZlY3RlZEJ5RW1wdHkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6c2V0RWxlbWVu
dFN0eWxlRnJvbUNvbnRleHRJc0FmZmVjdGVkQnlFbXB0eUFuZFVwZGF0ZVJlbmRlclN0eWxlSWZO
ZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6
ZWxlbWVudElzSG92ZXJlZEZvclN0eWxlUmVzb2x1dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpzZXRMYXN0Q2hpbGRTdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpzZXRPbmx5Q2hpbGRTdGF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjptYWtlRWxlbWVudFN0
eWxlVW5pcXVlSWZOZWNlc3NhcnlBbmRUZXN0SXNQbGFjZWhvbGRlclNob3duKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OnNldEVsZW1lbnRDaGlsZEluZGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OnNldENoaWxk
cmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OnNldFBhcmVudEFmZmVjdGVkQnlMYXN0Q2hpbGRP
Zik6IERlbGV0ZWQuCisgICAgICAgICogZG9tL1NlbGVjdG9yUXVlcnkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6c2VsZWN0b3JNYXRjaGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OnNlbGVjdG9yQ2xvc2VzdCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckRhdGFMaXN0OjptYXRjaGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6
OmJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVsZUxpc3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yU2Vs
ZWN0b3JIZWxwZXIpOgorCiAyMDE2LTAxLTE4ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdl
YmtpdC5vcmc+CiAKICAgICAgICAgRml4IHRoZSAtLW1pbmltYWwgYnVpbGQgZHVlIHRvIG1pc3Np
bmcgVk0uaCBpbmNsdWRlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xs
ZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNv
bGxlY3Rvci5jcHAJKHJldmlzaW9uIDE5NTEzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVt
ZW50UnVsZUNvbGxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNp
bmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJOb2RlUmVuZGVy
U3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKICNpbmNsdWRlICJTVkdFbGVtZW50
LmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JDb21waWxlci5oIgpAQCAtMzI4LDExICszMjksMTEgQEAg
aW5saW5lIGJvb2wgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OnJ1bGVNYQogI2VuZGlmIC8vIEVOQUJM
RShDU1NfU0VMRUNUT1JfSklUKQogCiAgICAgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRl
eHQgY29udGV4dChtX21vZGUpOwotICAgIGNvbnRleHQuZWxlbWVudFN0eWxlID0gbV9zdHlsZTsK
ICAgICBjb250ZXh0LnBzZXVkb0lkID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQ7CiAg
ICAgY29udGV4dC5zY3JvbGxiYXIgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5zY3JvbGxiYXI7CiAg
ICAgY29udGV4dC5zY3JvbGxiYXJQYXJ0ID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3Quc2Nyb2xsYmFy
UGFydDsKIAorICAgIGJvb2wgc2VsZWN0b3JNYXRjaGVzOwogI2lmIEVOQUJMRShDU1NfU0VMRUNU
T1JfSklUKQogICAgIGlmIChjb21waWxlZFNlbGVjdG9yQ2hlY2tlcikgewogICAgICAgICBBU1NF
UlQocnVsZURhdGEuY29tcGlsYXRpb25TdGF0dXMoKSA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3Rh
dHVzOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KTsKQEAgLTM0MiwxMyArMzQz
LDkzIEBAIGlubGluZSBib29sIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxlTWEKICNpZiBDU1Nf
U0VMRUNUT1JfSklUX1BST0ZJTElORwogICAgICAgICBydWxlRGF0YS5jb21waWxlZFNlbGVjdG9y
VXNlZCgpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBzZWxlY3RvckNoZWNrZXIoJm1fZWxlbWVu
dCwgJmNvbnRleHQsICZzcGVjaWZpY2l0eSk7Ci0gICAgfQorICAgICAgICBzZWxlY3Rvck1hdGNo
ZXMgPSBzZWxlY3RvckNoZWNrZXIoJm1fZWxlbWVudCwgJmNvbnRleHQsICZzcGVjaWZpY2l0eSk7
CisgICAgfSBlbHNlCiAjZW5kaWYgLy8gRU5BQkxFKENTU19TRUxFQ1RPUl9KSVQpCisgICAgewor
ICAgICAgICAvLyBTbG93IHBhdGguCisgICAgICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNo
ZWNrZXIobV9lbGVtZW50LmRvY3VtZW50KCkpOworICAgICAgICBzZWxlY3Rvck1hdGNoZXMgPSBz
ZWxlY3RvckNoZWNrZXIubWF0Y2goKnJ1bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCwgY29u
dGV4dCwgc3BlY2lmaWNpdHkpOworICAgIH0KKworICAgIGNvbW1pdFN0eWxlUmVsYXRpb25zKGNv
bnRleHQuc3R5bGVSZWxhdGlvbnMpOworCisgICAgaWYgKGNvbnRleHQucHNldWRvSURTZXQpCisg
ICAgICAgIG1fc3R5bGUtPnNldEhhc1BzZXVkb1N0eWxlcyhjb250ZXh0LnBzZXVkb0lEU2V0KTsK
KworICAgIHJldHVybiBzZWxlY3Rvck1hdGNoZXM7Cit9CiAKLSAgICAvLyBTbG93IHBhdGguCi0g
ICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihtX2VsZW1lbnQuZG9jdW1lbnQoKSk7
Ci0gICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlci5tYXRjaChydWxlRGF0YS5zZWxlY3RvcigpLCAm
bV9lbGVtZW50LCBjb250ZXh0LCBzcGVjaWZpY2l0eSk7CisvLyBGSVhNRTogUnVsZSBjb2xsZWN0
b3Igc2hvdWxkIG5vdCBiZSBkb2luZyBtdXRhdGlvbnMuIE1vdmUgdGhpcyBzb21ld2hlcmUgZWxz
ZS4KK3ZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OmNvbW1pdFN0eWxlUmVsYXRpb25zKGNvbnN0
IFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbnMmIHN0eWxlUmVsYXRpb25zKQoreworICAg
IGZvciAoYXV0byYgcmVsYXRpb24gOiBzdHlsZVJlbGF0aW9ucykgeworICAgICAgICBzd2l0Y2gg
KHJlbGF0aW9uLnR5cGUpIHsKKyAgICAgICAgY2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVs
YXRpb246OkFmZmVjdGVkQnlBY3RpdmU6CisgICAgICAgICAgICBpZiAoJnJlbGF0aW9uLmVsZW1l
bnQgPT0gJm1fZWxlbWVudCkKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRBZmZlY3RlZEJ5
QWN0aXZlKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVsYXRpb24uZWxl
bWVudC5zZXRDaGlsZHJlbkFmZmVjdGVkQnlBY3RpdmUoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeURy
YWc6CisgICAgICAgICAgICBpZiAoJnJlbGF0aW9uLmVsZW1lbnQgPT0gJm1fZWxlbWVudCkKKyAg
ICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRBZmZlY3RlZEJ5RHJhZygpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQuc2V0Q2hpbGRyZW5BZmZlY3Rl
ZEJ5RHJhZygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2VsZWN0b3JDaGVj
a2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5RW1wdHk6CisgICAgICAgICAgICByZWxhdGlv
bi5lbGVtZW50LnNldFN0eWxlQWZmZWN0ZWRCeUVtcHR5KCk7CisgICAgICAgICAgICBpZiAoJnJl
bGF0aW9uLmVsZW1lbnQgPT0gJm1fZWxlbWVudCkKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRFbXB0eVN0YXRlKHJlbGF0aW9uLnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeUhvdmVyOgor
ICAgICAgICAgICAgaWYgKCZyZWxhdGlvbi5lbGVtZW50ID09ICZtX2VsZW1lbnQpCisgICAgICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0QWZmZWN0ZWRCeUhvdmVyKCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgcmVsYXRpb24uZWxlbWVudC5zZXRDaGlsZHJlbkFmZmVjdGVkQnlI
b3ZlcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2VsZWN0b3JDaGVja2Vy
OjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nOgorICAgICAgICAgICAg
cmVsYXRpb24uZWxlbWVudC5zZXRTdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJl
bGF0aW9uOjpBZmZlY3RzTmV4dFNpYmxpbmc6CisgICAgICAgICAgICByZWxhdGlvbi5lbGVtZW50
LnNldEFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFm
ZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlczoKKyAgICAgICAgICAgIHJlbGF0aW9uLmVs
ZW1lbnQuc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxh
dGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzOgorICAgICAgICAgICAgcmVs
YXRpb24uZWxlbWVudC5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxh
dGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5UHJvcGVydHlCYXNlZEJhY2t3YXJkUG9zaXRpb25hbFJ1
bGVzOgorICAgICAgICAgICAgcmVsYXRpb24uZWxlbWVudC5zZXRDaGlsZHJlbkFmZmVjdGVkQnlC
YWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOworICAgICAgICAgICAgcmVsYXRpb24uZWxlbWVudC5z
ZXRDaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dhcmRQb3NpdGlvbmFsUnVsZXMo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5
bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXM6CisgICAgICAgICAg
ICByZWxhdGlvbi5lbGVtZW50LnNldENoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxl
UmVsYXRpb246OkZpcnN0Q2hpbGQ6CisgICAgICAgICAgICBpZiAoJnJlbGF0aW9uLmVsZW1lbnQg
PT0gJm1fZWxlbWVudCkKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRGaXJzdENoaWxkU3Rh
dGUoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGF1dG8qIHN0eWxlID0gcmVsYXRpb24uZWxlbWVu
dC5yZW5kZXJTdHlsZSgpKQorICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRGaXJzdENoaWxkU3Rh
dGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6
U3R5bGVSZWxhdGlvbjo6TGFzdENoaWxkOgorICAgICAgICAgICAgaWYgKCZyZWxhdGlvbi5lbGVt
ZW50ID09ICZtX2VsZW1lbnQpCisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGFzdENoaWxk
U3RhdGUoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGF1dG8qIHN0eWxlID0gcmVsYXRpb24uZWxl
bWVudC5yZW5kZXJTdHlsZSgpKQorICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRMYXN0Q2hpbGRT
dGF0ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2VsZWN0b3JDaGVja2Vy
OjpTdHlsZVJlbGF0aW9uOjpOdGhDaGlsZEluZGV4OgorICAgICAgICAgICAgcmVsYXRpb24uZWxl
bWVudC5zZXRDaGlsZEluZGV4KHJlbGF0aW9uLnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6VW5pcXVlOgorICAg
ICAgICAgICAgaWYgKCZyZWxhdGlvbi5lbGVtZW50ID09ICZtX2VsZW1lbnQpCisgICAgICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICBlbHNlIGlmIChhdXRvKiBz
dHlsZSA9IHJlbGF0aW9uLmVsZW1lbnQucmVuZGVyU3R5bGUoKSkKKyAgICAgICAgICAgICAgICBz
dHlsZS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
IH0KIAogdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JM
aXN0KGNvbnN0IFJ1bGVTZXQ6OlJ1bGVEYXRhVmVjdG9yKiBydWxlcywgY29uc3QgTWF0Y2hSZXF1
ZXN0JiBtYXRjaFJlcXVlc3QsIFN0eWxlUmVzb2x2ZXI6OlJ1bGVSYW5nZSYgcnVsZVJhbmdlKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgJKHJldmlzaW9u
IDE5NTEzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGFkZE1h
dGNoZWRSdWxlKGNvbnN0IE1hdGNoZWRSdWxlJik7CiAKKyAgICB2b2lkIGNvbW1pdFN0eWxlUmVs
YXRpb25zKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbnMmKTsKKwogICAgIEVs
ZW1lbnQmIG1fZWxlbWVudDsKICAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKICAgICBjb25zdCBE
b2N1bWVudFJ1bGVTZXRzJiBtX3J1bGVTZXRzOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1NlbGVj
dG9yQ2hlY2tlci5jcHAJKHJldmlzaW9uIDE5NTEzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9T
ZWxlY3RvckNoZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDIwMDQtMjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgTmljaG9sYXMgU2hhbmtzICh3ZWJraXRAbmlja3No
YW5rcy5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdl
YmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQpAQCAt
NDYsMTAgKzQ2LDggQEAKICNpbmNsdWRlICJIVE1MUHJvZ3Jlc3NFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTFN0eWxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlv
bi5oIgotI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNp
bmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNs
dWRlICJTZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9v
dC5oIgogI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKQEAgLTYzLDI5ICs2MSwzNiBAQCBlbnVt
IGNsYXNzIFZpc2l0ZWRNYXRjaFR5cGUgOiB1bnNpZ25lZCBjCiAgICAgRGlzYWJsZWQsIEVuYWJs
ZWQKIH07CiAKLXN0cnVjdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0
dXMgOiBwdWJsaWMgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQgewotICAgIENoZWNr
aW5nQ29udGV4dFdpdGhTdGF0dXMoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRl
eHQmIGNoZWNraW5nQ29udGV4dCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50
KiBlbGVtZW50KQotICAgICAgICA6IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0KGNo
ZWNraW5nQ29udGV4dCkKLSAgICAgICAgLCBzZWxlY3RvcihzZWxlY3RvcikKLSAgICAgICAgLCBl
bGVtZW50KGVsZW1lbnQpCi0gICAgICAgICwgdmlzaXRlZE1hdGNoVHlwZShyZXNvbHZpbmdNb2Rl
ID09IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdSdWxlcyA/IFZpc2l0ZWRNYXRjaFR5
cGU6OkRpc2FibGVkIDogVmlzaXRlZE1hdGNoVHlwZTo6RW5hYmxlZCkKLSAgICAgICAgLCBmaXJz
dFNlbGVjdG9yT2ZUaGVGcmFnbWVudChzZWxlY3RvcikKLSAgICAgICAgLCBpbkZ1bmN0aW9uYWxQ
c2V1ZG9DbGFzcyhmYWxzZSkKLSAgICAgICAgLCBwc2V1ZG9FbGVtZW50RWZmZWN0aXZlKHRydWUp
Ci0gICAgICAgICwgaGFzU2Nyb2xsYmFyUHNldWRvKGZhbHNlKQotICAgICAgICAsIGhhc1NlbGVj
dGlvblBzZXVkbyhmYWxzZSkKK3N0cnVjdCBTZWxlY3RvckNoZWNrZXI6OkxvY2FsQ29udGV4dCB7
CisgICAgTG9jYWxDb250ZXh0KGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgY29uc3QgRWxl
bWVudCYgZWxlbWVudCwgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlLCBQc2V1ZG9J
ZCBwc2V1ZG9JZCkKKyAgICAgICAgOiBzZWxlY3Rvcigmc2VsZWN0b3IpCisgICAgICAgICwgZWxl
bWVudCgmZWxlbWVudCkKKyAgICAgICAgLCB2aXNpdGVkTWF0Y2hUeXBlKHZpc2l0ZWRNYXRjaFR5
cGUpCisgICAgICAgICwgZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQoJnNlbGVjdG9yKQorICAg
ICAgICAsIHBzZXVkb0lkKHBzZXVkb0lkKQogICAgIHsgfQogCiAgICAgY29uc3QgQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yOwotICAgIEVsZW1lbnQqIGVsZW1lbnQ7CisgICAgY29uc3QgRWxlbWVudCog
ZWxlbWVudDsKICAgICBWaXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGU7CiAgICAgY29u
c3QgQ1NTU2VsZWN0b3IqIGZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50OwotICAgIGJvb2wgaW5G
dW5jdGlvbmFsUHNldWRvQ2xhc3M7Ci0gICAgYm9vbCBwc2V1ZG9FbGVtZW50RWZmZWN0aXZlOwot
ICAgIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvOwotICAgIGJvb2wgaGFzU2VsZWN0aW9uUHNldWRv
OworICAgIFBzZXVkb0lkIHBzZXVkb0lkOworICAgIGJvb2wgaXNNYXRjaEVsZW1lbnQgeyB0cnVl
IH07CisgICAgYm9vbCBpbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyB7IGZhbHNlIH07CisgICAgYm9v
bCBwc2V1ZG9FbGVtZW50RWZmZWN0aXZlIHsgdHJ1ZSB9OworICAgIGJvb2wgaGFzU2Nyb2xsYmFy
UHNldWRvIHsgZmFsc2UgfTsKKyAgICBib29sIGhhc1NlbGVjdGlvblBzZXVkbyB7IGZhbHNlIH07
CisKIH07CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRTdHlsZVJlbGF0aW9uKFNlbGVjdG9yQ2hl
Y2tlcjo6Q2hlY2tpbmdDb250ZXh0JiBjaGVja2luZ0NvbnRleHQsIGNvbnN0IEVsZW1lbnQmIGVs
ZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6VHlwZSB0eXBlLCB1bnNpZ25l
ZCB2YWx1ZSA9IDEpCit7CisgICAgQVNTRVJUKHZhbHVlID09IDEgfHwgdHlwZSA9PSBTZWxlY3Rv
ckNoZWNrZXI6OlN0eWxlUmVsYXRpb246Ok50aENoaWxkSW5kZXggfHwgdHlwZSA9PSBTZWxlY3Rv
ckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlFbXB0eSk7CisgICAgaWYgKGNoZWNr
aW5nQ29udGV4dC5yZXNvbHZpbmdNb2RlICE9IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UmVzb2x2
aW5nU3R5bGUpCisgICAgICAgIHJldHVybjsKKyAgICBjaGVja2luZ0NvbnRleHQuc3R5bGVSZWxh
dGlvbnMuYXBwZW5kKHsgY29uc3RfY2FzdDxFbGVtZW50Jj4oZWxlbWVudCksIHR5cGUsIHZhbHVl
IH0pOworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNGaXJzdENoaWxkRWxlbWVudChjb25zdCBF
bGVtZW50JiBlbGVtZW50KQogewogICAgIHJldHVybiAhRWxlbWVudFRyYXZlcnNhbDo6cHJldmlv
dXNTaWJsaW5nKGVsZW1lbnQpOwpAQCAtOTYsMTEgKzEwMSwxMSBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgaXNMYXN0Q2hpbGRFbGVtZW50KGNvCiAgICAgcmV0dXJuICFFbGVtZW50VHJhdmVyc2FsOjpu
ZXh0U2libGluZyhlbGVtZW50KTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGlzRmlyc3RPZlR5
cGUoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSwgYm9vbCBpc1Jl
c29sdmluZ1N0eWxlKQorc3RhdGljIGlubGluZSBib29sIGlzRmlyc3RPZlR5cGUoU2VsZWN0b3JD
aGVja2VyOjpDaGVja2luZ0NvbnRleHQmIGNoZWNraW5nQ29udGV4dCwgY29uc3QgRWxlbWVudCYg
ZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkKIHsKLSAgICBmb3IgKEVsZW1lbnQq
IHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoZWxlbWVudCk7IHNp
Ymxpbmc7IHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoKnNpYmxp
bmcpKSB7Ci0gICAgICAgIGlmIChpc1Jlc29sdmluZ1N0eWxlKQotICAgICAgICAgICAgc2libGlu
Zy0+c2V0QWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlKCk7CisgICAgZm9yIChjb25zdCBF
bGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKGVsZW1l
bnQpOyBzaWJsaW5nOyBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5n
KCpzaWJsaW5nKSkgeworICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwg
KnNpYmxpbmcsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJs
aW5nKTsKKwogICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMTYsMTIgKzEyMSwxMiBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNMYXN0T2ZUeXBlKGNvbnN0IEVsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgaW50IGNvdW50RWxlbWVudHNCZWZvcmUoRWxlbWVudCYgZWxlbWVudCwgYm9v
bCBpc1Jlc29sdmluZ1N0eWxlKQorc3RhdGljIGlubGluZSBpbnQgY291bnRFbGVtZW50c0JlZm9y
ZShTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCYgY2hlY2tpbmdDb250ZXh0LCBjb25z
dCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGludCBjb3VudCA9IDA7Ci0gICAgZm9yIChFbGVt
ZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKGVsZW1lbnQp
OyBzaWJsaW5nOyBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKCpz
aWJsaW5nKSkgewotICAgICAgICBpZiAoaXNSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgICAgIHNp
YmxpbmctPnNldEFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpOworICAgIGZvciAoY29u
c3QgRWxlbWVudCogc2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZyhl
bGVtZW50KTsgc2libGluZzsgc2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2li
bGluZygqc2libGluZykpIHsKKworICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29u
dGV4dCwgKnNpYmxpbmcsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0c05l
eHRTaWJsaW5nKTsKIAogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHNpYmxpbmctPmNoaWxkSW5k
ZXgoKTsKICAgICAgICAgaWYgKGluZGV4KSB7CkBAIC0xMzMsMTIgKzEzOCwxMSBAQCBzdGF0aWMg
aW5saW5lIGludCBjb3VudEVsZW1lbnRzQmVmb3JlKEVsCiAgICAgcmV0dXJuIGNvdW50OwogfQog
Ci1zdGF0aWMgaW5saW5lIGludCBjb3VudEVsZW1lbnRzT2ZUeXBlQmVmb3JlKEVsZW1lbnQmIGVs
ZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUsIGJvb2wgaXNSZXNvbHZpbmdTdHlsZSkK
K3N0YXRpYyBpbmxpbmUgaW50IGNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUoU2VsZWN0b3JDaGVj
a2VyOjpDaGVja2luZ0NvbnRleHQmIGNoZWNraW5nQ29udGV4dCwgY29uc3QgRWxlbWVudCYgZWxl
bWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkKIHsKICAgICBpbnQgY291bnQgPSAwOwot
ICAgIGZvciAoRWxlbWVudCogc2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2li
bGluZyhlbGVtZW50KTsgc2libGluZzsgc2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZp
b3VzU2libGluZygqc2libGluZykpIHsKLSAgICAgICAgaWYgKGlzUmVzb2x2aW5nU3R5bGUpCi0g
ICAgICAgICAgICBzaWJsaW5nLT5zZXRBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKTsK
KyAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2
aW91c1NpYmxpbmcoZWxlbWVudCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2Fs
OjpwcmV2aW91c1NpYmxpbmcoKnNpYmxpbmcpKSB7CisgICAgICAgIGFkZFN0eWxlUmVsYXRpb24o
Y2hlY2tpbmdDb250ZXh0LCAqc2libGluZywgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9u
OjpBZmZlY3RzTmV4dFNpYmxpbmcpOwogCiAgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1l
KHR5cGUpKQogICAgICAgICAgICAgKytjb3VudDsKQEAgLTE3MCwyNiArMTc0LDI2IEBAIFNlbGVj
dG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2VyKERvY3VtZW4KIHsKIH0KIAotYm9vbCBTZWxlY3Rv
ckNoZWNrZXI6Om1hdGNoKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgQ2hlY2tpbmdDb250ZXh0JiBwcm92aWRlZENvbnRleHQsIHVuc2lnbmVkJiBz
cGVjaWZpY2l0eSkgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjptYXRjaChjb25zdCBDU1NT
ZWxlY3RvciYgc2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIENoZWNraW5nQ29udGV4
dCYgY2hlY2tpbmdDb250ZXh0LCB1bnNpZ25lZCYgc3BlY2lmaWNpdHkpIGNvbnN0CiB7CiAgICAg
c3BlY2lmaWNpdHkgPSAwOwogCi0gICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBjb250ZXh0
KHByb3ZpZGVkQ29udGV4dCwgc2VsZWN0b3IsIGVsZW1lbnQpOworICAgIExvY2FsQ29udGV4dCBj
b250ZXh0KHNlbGVjdG9yLCBlbGVtZW50LCBjaGVja2luZ0NvbnRleHQucmVzb2x2aW5nTW9kZSA9
PSBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMgPyBWaXNpdGVkTWF0Y2hUeXBl
OjpEaXNhYmxlZCA6IFZpc2l0ZWRNYXRjaFR5cGU6OkVuYWJsZWQsIGNoZWNraW5nQ29udGV4dC5w
c2V1ZG9JZCk7CiAgICAgUHNldWRvSWRTZXQgcHNldWRvSWRTZXQ7Ci0gICAgTWF0Y2hSZXN1bHQg
cmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShjb250ZXh0LCBwc2V1ZG9JZFNldCwgc3BlY2lmaWNp
dHkpOworICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkoY2hlY2tpbmdD
b250ZXh0LCBjb250ZXh0LCBwc2V1ZG9JZFNldCwgc3BlY2lmaWNpdHkpOwogICAgIGlmIChyZXN1
bHQubWF0Y2ggIT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChjb250ZXh0LnBzZXVkb0lkICE9IE5PUFNFVURPICYmICFwc2V1ZG9JZFNldC5o
YXMoY29udGV4dC5wc2V1ZG9JZCkpCisgICAgaWYgKGNoZWNraW5nQ29udGV4dC5wc2V1ZG9JZCAh
PSBOT1BTRVVETyAmJiAhcHNldWRvSWRTZXQuaGFzKGNoZWNraW5nQ29udGV4dC5wc2V1ZG9JZCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChjb250ZXh0LnBzZXVkb0lkID09IE5P
UFNFVURPICYmIHBzZXVkb0lkU2V0KSB7CisgICAgaWYgKGNoZWNraW5nQ29udGV4dC5wc2V1ZG9J
ZCA9PSBOT1BTRVVETyAmJiBwc2V1ZG9JZFNldCkgewogICAgICAgICBQc2V1ZG9JZFNldCBwdWJs
aWNQc2V1ZG9JZFNldCA9IHBzZXVkb0lkU2V0ICYgUHNldWRvSWRTZXQ6OmZyb21NYXNrKFBVQkxJ
Q19QU0VVRE9JRF9NQVNLKTsKLSAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBN
b2RlOjpSZXNvbHZpbmdTdHlsZSAmJiBwdWJsaWNQc2V1ZG9JZFNldCkKLSAgICAgICAgICAgIGNv
bnRleHQuZWxlbWVudFN0eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZXMocHVibGljUHNldWRvSWRTZXQp
OworICAgICAgICBpZiAoY2hlY2tpbmdDb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVz
b2x2aW5nU3R5bGUgJiYgcHVibGljUHNldWRvSWRTZXQpCisgICAgICAgICAgICBjaGVja2luZ0Nv
bnRleHQucHNldWRvSURTZXQgPSBwdWJsaWNQc2V1ZG9JZFNldDsKIAogICAgICAgICAvLyBXaGVu
IGlnbm9yaW5nIHZpcnR1YWwgcHNldWRvIGVsZW1lbnRzLCB0aGUgY29udGV4dCdzIHBzZXVkbyBz
aG91bGQgYWxzbyBiZSBOT1BTRVVETyBidXQgdGhhdCBkb2VzCiAgICAgICAgIC8vIG5vdCBjYXVz
ZSBhIGZhaWx1cmUuCi0gICAgICAgIHJldHVybiBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9k
ZTo6Q29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRvRWxlbWVudHMgfHwgcmVzdWx0
Lm1hdGNoVHlwZSA9PSBNYXRjaFR5cGU6OkVsZW1lbnQ7CisgICAgICAgIHJldHVybiBjaGVja2lu
Z0NvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpDb2xsZWN0aW5nUnVsZXNJZ25vcmluZ1Zp
cnR1YWxQc2V1ZG9FbGVtZW50cyB8fCByZXN1bHQubWF0Y2hUeXBlID09IE1hdGNoVHlwZTo6RWxl
bWVudDsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yMDUsMTMgKzIwOSwxNCBAQCBp
bmxpbmUgc3RhdGljIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvRWxlCiAgICAgcmV0dXJuIGR5bmFt
aWNQc2V1ZG9JZFNldC5oYXMoUkVTSVpFUik7CiB9CiAKLXN0YXRpYyBTZWxlY3RvckNoZWNrZXI6
OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNvbnN0
IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkKK3N0
YXRpYyBTZWxlY3RvckNoZWNrZXI6OkxvY2FsQ29udGV4dCBsb2NhbENvbnRleHRGb3JQYXJlbnQo
Y29uc3QgU2VsZWN0b3JDaGVja2VyOjpMb2NhbENvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgU2Vs
ZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIHVwZGF0ZWRDb250ZXh0KGNv
bnRleHQpOworICAgIFNlbGVjdG9yQ2hlY2tlcjo6TG9jYWxDb250ZXh0IHVwZGF0ZWRDb250ZXh0
KGNvbnRleHQpOwogICAgIC8vIERpc2FibGUgOnZpc2l0ZWQgbWF0Y2hpbmcgd2hlbiB3ZSBzZWUg
dGhlIGZpcnN0IGxpbmsuCiAgICAgaWYgKGNvbnRleHQuZWxlbWVudC0+aXNMaW5rKCkpCiAgICAg
ICAgIHVwZGF0ZWRDb250ZXh0LnZpc2l0ZWRNYXRjaFR5cGUgPSBWaXNpdGVkTWF0Y2hUeXBlOjpE
aXNhYmxlZDsKICAgICB1cGRhdGVkQ29udGV4dC5lbGVtZW50ID0gY29udGV4dC5lbGVtZW50LT5w
YXJlbnRFbGVtZW50KCk7CisgICAgdXBkYXRlZENvbnRleHQuaXNNYXRjaEVsZW1lbnQgPSBmYWxz
ZTsKICAgICByZXR1cm4gdXBkYXRlZENvbnRleHQ7CiB9CiAKQEAgLTIyMSwxMiArMjI2LDEyIEBA
IHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dFcKIC8vICogU2VsZWN0b3JG
YWlsc0xvY2FsbHkgICAgIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciB0aGUgZWxlbWVudCBlCiAv
LyAqIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBh
bmQgYW55IHNpYmxpbmcgb2YgZQogLy8gKiBTZWxlY3RvckZhaWxzQ29tcGxldGVseSAgLSB0aGUg
c2VsZWN0b3IgZmFpbHMgZm9yIGUgYW5kIGFueSBzaWJsaW5nIG9yIGFuY2VzdG9yIG9mIGUKLVNl
bGVjdG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQgU2VsZWN0b3JDaGVja2VyOjptYXRjaFJlY3Vyc2l2
ZWx5KGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQsIFBzZXVkb0lkU2V0
JiBkeW5hbWljUHNldWRvSWRTZXQsIHVuc2lnbmVkJiBzcGVjaWZpY2l0eSkgY29uc3QKK1NlbGVj
dG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQgU2VsZWN0b3JDaGVja2VyOjptYXRjaFJlY3Vyc2l2ZWx5
KENoZWNraW5nQ29udGV4dCYgY2hlY2tpbmdDb250ZXh0LCBjb25zdCBMb2NhbENvbnRleHQmIGNv
bnRleHQsIFBzZXVkb0lkU2V0JiBkeW5hbWljUHNldWRvSWRTZXQsIHVuc2lnbmVkJiBzcGVjaWZp
Y2l0eSkgY29uc3QKIHsKICAgICBNYXRjaFR5cGUgbWF0Y2hUeXBlID0gTWF0Y2hUeXBlOjpFbGVt
ZW50OwogCiAgICAgLy8gVGhlIGZpcnN0IHNlbGVjdG9yIGhhcyB0byBtYXRjaC4KLSAgICBpZiAo
IWNoZWNrT25lKGNvbnRleHQsIGR5bmFtaWNQc2V1ZG9JZFNldCwgbWF0Y2hUeXBlLCBzcGVjaWZp
Y2l0eSkpCisgICAgaWYgKCFjaGVja09uZShjaGVja2luZ0NvbnRleHQsIGNvbnRleHQsIGR5bmFt
aWNQc2V1ZG9JZFNldCwgbWF0Y2hUeXBlLCBzcGVjaWZpY2l0eSkpCiAgICAgICAgIHJldHVybiBN
YXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFpbHNMb2NhbGx5KTsKIAogICAgIGlm
IChjb250ZXh0LnNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50
KSB7CkBAIC0yNDcsNyArMjUyLDcgQEAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdCBTZWxl
Y3RvckNoZQogICAgICAgICAgICAgaWYgKCFjb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0
b3JGYWlsc0NvbXBsZXRlbHkpOwogCi0gICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdN
b2RlID09IE1vZGU6OlF1ZXJ5aW5nUnVsZXMpCisgICAgICAgICAgICBpZiAoY2hlY2tpbmdDb250
ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UXVlcnlpbmdSdWxlcykKICAgICAgICAgICAgICAg
ICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVs
eSk7CiAKICAgICAgICAgICAgIFBzZXVkb0lkIHBzZXVkb0lkID0gQ1NTU2VsZWN0b3I6OnBzZXVk
b0lkKGNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkpOwpAQCAtMjY1LDcgKzI3
MCw3IEBAIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQgU2VsZWN0b3JDaGUKICAgICBpZiAo
IWhpc3RvcnlTZWxlY3RvcikKICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjptYXRjaGVzKG1h
dGNoVHlwZSk7CiAKLSAgICBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIG5leHRDb250ZXh0KGNv
bnRleHQpOworICAgIExvY2FsQ29udGV4dCBuZXh0Q29udGV4dChjb250ZXh0KTsKICAgICBuZXh0
Q29udGV4dC5zZWxlY3RvciA9IGhpc3RvcnlTZWxlY3RvcjsKIAogICAgIGlmIChyZWxhdGlvbiAh
PSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpIHsKQEAgLTI4MCwxNyArMjg1LDE3IEBAIFNlbGVj
dG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQgU2VsZWN0b3JDaGUKICAgICAgICAgbmV4dENvbnRleHQu
cHNldWRvSWQgPSBOT1BTRVVETzsKICAgICAgICAgLy8gVmlydHVhbCBwc2V1ZG8gZWxlbWVudCBp
cyBvbmx5IGVmZmVjdGl2ZSBpbiB0aGUgcmlnaHRtb3N0IGZyYWdtZW50LgogICAgICAgICBuZXh0
Q29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZlID0gZmFsc2U7CisgICAgICAgIG5leHRDb250
ZXh0LmlzTWF0Y2hFbGVtZW50ID0gZmFsc2U7CiAgICAgfQogCiAgICAgc3dpdGNoIChyZWxhdGlv
bikgewogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQ6Ci0gICAgICAgIG5leHRDb250
ZXh0ID0gY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KG5leHRDb250ZXh0KTsKKyAgICAgICAgbmV4
dENvbnRleHQgPSBsb2NhbENvbnRleHRGb3JQYXJlbnQobmV4dENvbnRleHQpOwogICAgICAgICBu
ZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVj
dG9yOwotICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSBudWxscHRyOwotICAgICAg
ICBmb3IgKDsgbmV4dENvbnRleHQuZWxlbWVudDsgbmV4dENvbnRleHQgPSBjaGVja2luZ0NvbnRl
eHRGb3JQYXJlbnQobmV4dENvbnRleHQpKSB7CisgICAgICAgIGZvciAoOyBuZXh0Q29udGV4dC5l
bGVtZW50OyBuZXh0Q29udGV4dCA9IGxvY2FsQ29udGV4dEZvclBhcmVudChuZXh0Q29udGV4dCkp
IHsKICAgICAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CiAgICAgICAg
ICAgICB1bnNpZ25lZCBkZXNjZW5kYW50c1NwZWNpZmljaXR5ID0gMDsKLSAgICAgICAgICAgIE1h
dGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5
bmFtaWNQc2V1ZG8sIGRlc2NlbmRhbnRzU3BlY2lmaWNpdHkpOworICAgICAgICAgICAgTWF0Y2hS
ZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShjaGVja2luZ0NvbnRleHQsIG5leHRDb250
ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBkZXNjZW5kYW50c1NwZWNpZmljaXR5KTsKICAgICAg
ICAgICAgIEFTU0VSVCghbmV4dENvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZSAmJiAhaWdu
b3JlRHluYW1pY1BzZXVkbyk7CiAKICAgICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2ggPT0gTWF0
Y2g6OlNlbGVjdG9yTWF0Y2hlcykKQEAgLTMwMywxNCArMzA4LDEzIEBAIFNlbGVjdG9yQ2hlY2tl
cjo6TWF0Y2hSZXN1bHQgU2VsZWN0b3JDaGUKIAogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxk
OgogICAgICAgICB7Ci0gICAgICAgICAgICBuZXh0Q29udGV4dCA9IGNoZWNraW5nQ29udGV4dEZv
clBhcmVudChuZXh0Q29udGV4dCk7CisgICAgICAgICAgICBuZXh0Q29udGV4dCA9IGxvY2FsQ29u
dGV4dEZvclBhcmVudChuZXh0Q29udGV4dCk7CiAgICAgICAgICAgICBpZiAoIW5leHRDb250ZXh0
LmVsZW1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRj
aDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwogICAgICAgICAgICAgbmV4dENvbnRleHQuZmly
c3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBuZXh0Q29udGV4dC5zZWxlY3RvcjsKLSAgICAgICAg
ICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7CiAgICAgICAgICAgICBQc2V1
ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvOwogICAgICAgICAgICAgdW5zaWduZWQgY2hpbGRT
cGVjaWZpY2l0eSA9IDA7Ci0gICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJl
Y3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBjaGlsZFNwZWNpZmlj
aXR5KTsKKyAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHko
Y2hlY2tpbmdDb250ZXh0LCBuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywgY2hpbGRT
cGVjaWZpY2l0eSk7CiAgICAgICAgICAgICBBU1NFUlQoIW5leHRDb250ZXh0LnBzZXVkb0VsZW1l
bnRFZmZlY3RpdmUgJiYgIWlnbm9yZUR5bmFtaWNQc2V1ZG8pOwogCiAgICAgICAgICAgICBpZiAo
cmVzdWx0Lm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMpCkBAIC0zMjMsMjAgKzMyNywx
OSBAQCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0IFNlbGVjdG9yQ2hlCiAKICAgICBjYXNl
IENTU1NlbGVjdG9yOjpEaXJlY3RBZGphY2VudDoKICAgICAgICAgewotICAgICAgICAgICAgaWYg
KGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LmVsZW1lbnQtPnNldFN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJs
aW5nKCk7CisgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKmNv
bnRleHQuZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyk7
CiAKICAgICAgICAgICAgIEVsZW1lbnQqIHByZXZpb3VzRWxlbWVudCA9IGNvbnRleHQuZWxlbWVu
dC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOwogICAgICAgICAgICAgaWYgKCFwcmV2aW91c0Vs
ZW1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6
U2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzKTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29s
dmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpCi0gICAgICAgICAgICAgICAgcHJldmlv
dXNFbGVtZW50LT5zZXRBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKTsKKworICAgICAg
ICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpwcmV2aW91c0VsZW1lbnQs
IFN0eWxlUmVsYXRpb246OkFmZmVjdHNOZXh0U2libGluZyk7CisKICAgICAgICAgICAgIG5leHRD
b250ZXh0LmVsZW1lbnQgPSBwcmV2aW91c0VsZW1lbnQ7CiAgICAgICAgICAgICBuZXh0Q29udGV4
dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwotICAg
ICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsKICAgICAgICAgICAg
IFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CiAgICAgICAgICAgICB1bnNpZ25lZCBh
ZGphY2VudFNwZWNpZmljaXR5ID0gMDsKLSAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9
IG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIGFkamFj
ZW50U3BlY2lmaWNpdHkpOworICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hS
ZWN1cnNpdmVseShjaGVja2luZ0NvbnRleHQsIG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNl
dWRvLCBhZGphY2VudFNwZWNpZmljaXR5KTsKICAgICAgICAgICAgIEFTU0VSVCghbmV4dENvbnRl
eHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZSAmJiAhaWdub3JlRHluYW1pY1BzZXVkbyk7CiAKICAg
ICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykKQEAg
LTM0NSwxOCArMzQ4LDE2IEBAIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQgU2VsZWN0b3JD
aGUKICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6dXBkYXRlV2l0aE1hdGNoVHlwZShy
ZXN1bHQsIG1hdGNoVHlwZSk7CiAgICAgICAgIH0KICAgICBjYXNlIENTU1NlbGVjdG9yOjpJbmRp
cmVjdEFkamFjZW50OgotICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6
OlJlc29sdmluZ1N0eWxlKQotICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LT5zZXRTdHlsZUlz
QWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpOworICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNo
ZWNraW5nQ29udGV4dCwgKmNvbnRleHQuZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRC
eVByZXZpb3VzU2libGluZyk7CisKICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9IGNvbnRl
eHQuZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOwogICAgICAgICBuZXh0Q29udGV4
dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwotICAg
ICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSBudWxscHRyOwogICAgICAgICBmb3IgKDsg
bmV4dENvbnRleHQuZWxlbWVudDsgbmV4dENvbnRleHQuZWxlbWVudCA9IG5leHRDb250ZXh0LmVs
ZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgewotICAgICAgICAgICAgaWYgKGNvbnRl
eHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgICAgICAg
ICBuZXh0Q29udGV4dC5lbGVtZW50LT5zZXRBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUo
KTsKKyAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqbmV4dENv
bnRleHQuZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5nKTsKIAogICAg
ICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHluYW1pY1BzZXVkbzsKICAgICAgICAgICAgIHVu
c2lnbmVkIGluZGlyZWN0QWRqYWNlbnRTcGVjaWZpY2l0eSA9IDA7Ci0gICAgICAgICAgICBNYXRj
aFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5h
bWljUHNldWRvLCBpbmRpcmVjdEFkamFjZW50U3BlY2lmaWNpdHkpOworICAgICAgICAgICAgTWF0
Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShjaGVja2luZ0NvbnRleHQsIG5leHRD
b250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBpbmRpcmVjdEFkamFjZW50U3BlY2lmaWNpdHkp
OwogICAgICAgICAgICAgQVNTRVJUKCFuZXh0Q29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZl
ICYmICFpZ25vcmVEeW5hbWljUHNldWRvKTsKIAogICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXRj
aCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzKQpAQCAtMzc0LDEzICszNzUsMTMgQEAgU2VsZWN0
b3JDaGVja2VyOjpNYXRjaFJlc3VsdCBTZWxlY3RvckNoZQogICAgICAgICAgICAgLy8gdG8gZm9s
bG93IHRoZSBwc2V1ZG8gZWxlbWVudHMuCiAgICAgICAgICAgICBuZXh0Q29udGV4dC5oYXNTY3Jv
bGxiYXJQc2V1ZG8gPSBoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGR5bmFtaWNQc2V1ZG9JZFNl
dCk7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5oYXNTZWxlY3Rpb25Qc2V1ZG8gPSBkeW5hbWlj
UHNldWRvSWRTZXQuaGFzKFNFTEVDVElPTik7Ci0gICAgICAgICAgICBpZiAoKGNvbnRleHQuZWxl
bWVudFN0eWxlIHx8IGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpDb2xsZWN0aW5nUnVs
ZXMpICYmIGR5bmFtaWNQc2V1ZG9JZFNldAorICAgICAgICAgICAgaWYgKChjb250ZXh0LmlzTWF0
Y2hFbGVtZW50IHx8IGNoZWNraW5nQ29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OkNvbGxl
Y3RpbmdSdWxlcykgJiYgZHluYW1pY1BzZXVkb0lkU2V0CiAgICAgICAgICAgICAgICAgJiYgIW5l
eHRDb250ZXh0Lmhhc1NlbGVjdGlvblBzZXVkbwogICAgICAgICAgICAgICAgICYmICEobmV4dENv
bnRleHQuaGFzU2Nyb2xsYmFyUHNldWRvICYmIG5leHRDb250ZXh0LnNlbGVjdG9yLT5tYXRjaCgp
ID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE1h
dGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwogCiAgICAg
ICAgICAgICB1bnNpZ25lZCBzdWJzZWxlY3RvclNwZWNpZmljaXR5ID0gMDsKLSAgICAgICAgICAg
IE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGR5bmFt
aWNQc2V1ZG9JZFNldCwgc3Vic2VsZWN0b3JTcGVjaWZpY2l0eSk7CisgICAgICAgICAgICBNYXRj
aFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KGNoZWNraW5nQ29udGV4dCwgbmV4dENv
bnRleHQsIGR5bmFtaWNQc2V1ZG9JZFNldCwgc3Vic2VsZWN0b3JTcGVjaWZpY2l0eSk7CiAKICAg
ICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykKICAg
ICAgICAgICAgICAgICBzcGVjaWZpY2l0eSA9IENTU1NlbGVjdG9yOjphZGRTcGVjaWZpY2l0aWVz
KHNwZWNpZmljaXR5LCBzdWJzZWxlY3RvclNwZWNpZmljaXR5KTsKQEAgLTM5NCwxMCArMzk1LDkg
QEAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdCBTZWxlY3RvckNoZQogICAgICAgICAgICAg
ICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21wbGV0
ZWx5KTsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnQgPSBzaGFkb3dIb3N0Tm9kZTsK
ICAgICAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4
dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUg
PSBudWxscHRyOwogICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHluYW1pY1BzZXVkbzsK
ICAgICAgICAgICAgIHVuc2lnbmVkIHNoYWRvd0Rlc2NlbmRhbnRTcGVjaWZpY2l0eSA9IDA7Ci0g
ICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250
ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBzaGFkb3dEZXNjZW5kYW50U3BlY2lmaWNpdHkpOwor
ICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShjaGVja2lu
Z0NvbnRleHQsIG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBzaGFkb3dEZXNjZW5k
YW50U3BlY2lmaWNpdHkpOwogCiAgICAgICAgICAgICBpZiAocmVzdWx0Lm1hdGNoID09IE1hdGNo
OjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgICAgICAgICAgc3BlY2lmaWNpdHkgPSBDU1NTZWxl
Y3Rvcjo6YWRkU3BlY2lmaWNpdGllcyhzcGVjaWZpY2l0eSwgc2hhZG93RGVzY2VuZGFudFNwZWNp
ZmljaXR5KTsKQEAgLTUwNCw3ICs1MDQsNyBAQCBzdGF0aWMgYm9vbCBhdHRyaWJ1dGVWYWx1ZU1h
dGNoZXMoY29uc3QgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGFueUF0dHJp
YnV0ZU1hdGNoZXMoRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBzZWxlY3RvckF0dHIsIGJvb2wgY2FzZVNlbnNpdGl2ZSkK
K3N0YXRpYyBib29sIGFueUF0dHJpYnV0ZU1hdGNoZXMoY29uc3QgRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBRdWFsaWZpZWROYW1lJiBzZWxlY3Rv
ckF0dHIsIGJvb2wgY2FzZVNlbnNpdGl2ZSkKIHsKICAgICBBU1NFUlQoZWxlbWVudC0+aGFzQXR0
cmlidXRlc1dpdGhvdXRVcGRhdGUoKSk7CiAgICAgZm9yIChjb25zdCBBdHRyaWJ1dGUmIGF0dHJp
YnV0ZSA6IGVsZW1lbnQtPmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CkBAIC01MTgsNyArNTE4LDcg
QEAgc3RhdGljIGJvb2wgYW55QXR0cmlidXRlTWF0Y2hlcyhFbGVtZW50KgogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotc3RhdGljIGJvb2wgY2FuTWF0Y2hIb3Zlck9yQWN0aXZlSW5RdWlya3NNb2Rl
KGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4
dCkKK3N0YXRpYyBib29sIGNhbk1hdGNoSG92ZXJPckFjdGl2ZUluUXVpcmtzTW9kZShjb25zdCBT
ZWxlY3RvckNoZWNrZXI6OkxvY2FsQ29udGV4dCYgY29udGV4dCkKIHsKICAgICAvLyBGb3IgcXVp
cmtzIG1vZGUsIGZvbGxvdyB0aGlzOiBodHRwOi8vcXVpcmtzLnNwZWMud2hhdHdnLm9yZy8jdGhl
LTphY3RpdmUtYW5kLTpob3Zlci1xdWlyawogICAgIC8vIEluIHF1aXJrcyBtb2RlLCBhIGNvbXBv
dW5kIHNlbGVjdG9yICdzZWxlY3RvcicgdGhhdCBtYXRjaGVzIHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBtdXN0IG5vdCBtYXRjaCBlbGVtZW50cyB0aGF0IHdvdWxkIG5vdCBhbHNvIG1hdGNoIHRo
ZSAnOmFueS1saW5rJyBzZWxlY3Rvci4KQEAgLTU4OCw5ICs1ODgsOSBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgdGFnTWF0Y2hlcyhjb25zdCBFbGVtCiAgICAgcmV0dXJuIG5hbWVzcGFjZVVSSSA9PSBz
dGFyQXRvbSB8fCBuYW1lc3BhY2VVUkkgPT0gZWxlbWVudC5uYW1lc3BhY2VVUkkoKTsKIH0KIAot
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhT
dGF0dXMmIGNvbnRleHQsIFBzZXVkb0lkU2V0JiBkeW5hbWljUHNldWRvSWRTZXQsIE1hdGNoVHlw
ZSYgbWF0Y2hUeXBlLCB1bnNpZ25lZCYgc3BlY2lmaWNpdHkpIGNvbnN0Citib29sIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tPbmUoQ2hlY2tpbmdDb250ZXh0JiBjaGVja2luZ0NvbnRleHQsIGNvbnN0
IExvY2FsQ29udGV4dCYgY29udGV4dCwgUHNldWRvSWRTZXQmIGR5bmFtaWNQc2V1ZG9JZFNldCwg
TWF0Y2hUeXBlJiBtYXRjaFR5cGUsIHVuc2lnbmVkJiBzcGVjaWZpY2l0eSkgY29uc3QKIHsKLSAg
ICBFbGVtZW50KiBjb25zdCAmIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQ7CisgICAgY29uc3Qg
RWxlbWVudCogZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDsKICAgICBjb25zdCBDU1NTZWxlY3Rv
ciogY29uc3QgJiBzZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0b3I7CiAgICAgQVNTRVJUKGVsZW1l
bnQpOwogICAgIEFTU0VSVChzZWxlY3Rvcik7CkBAIC02MjYsNyArNjI2LDcgQEAgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZQogICAgICAgICAgICAgY29uc3QgQ1NTU2Vs
ZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCk7CiAKICAg
ICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHN1YnNlbGVjdG9yID0gc2VsZWN0b3JM
aXN0LT5maXJzdCgpOyBzdWJzZWxlY3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6
Om5leHQoc3Vic2VsZWN0b3IpKSB7Ci0gICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0
aFN0YXR1cyBzdWJjb250ZXh0KGNvbnRleHQpOworICAgICAgICAgICAgICAgIExvY2FsQ29udGV4
dCBzdWJjb250ZXh0KGNvbnRleHQpOwogICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuaW5GdW5j
dGlvbmFsUHNldWRvQ2xhc3MgPSB0cnVlOwogICAgICAgICAgICAgICAgIHN1YmNvbnRleHQucHNl
dWRvRWxlbWVudEVmZmVjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHN1YmNvbnRleHQu
c2VsZWN0b3IgPSBzdWJzZWxlY3RvcjsKQEAgLTYzNCw3ICs2MzQsNyBAQCBib29sIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlCiAgICAgICAgICAgICAgICAgUHNldWRvSWRTZXQg
aWdub3JlRHluYW1pY1BzZXVkbzsKIAogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlnbm9yZWRT
cGVjaWZpY2l0eTsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJjb250
ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBpZ25vcmVkU3BlY2lmaWNpdHkpLm1hdGNoID09IE1h
dGNoOjpTZWxlY3Rvck1hdGNoZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNp
dmVseShjaGVja2luZ0NvbnRleHQsIHN1YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIGln
bm9yZWRTcGVjaWZpY2l0eSkubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykgewogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoIWlnbm9yZUR5bmFtaWNQc2V1ZG8pOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjQzLDcgKzY0
Myw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGUKICAgICAgICAg
fSBlbHNlIGlmIChjb250ZXh0Lmhhc1Njcm9sbGJhclBzZXVkbykgewogICAgICAgICAgICAgLy8g
Q1NTIHNjcm9sbGJhcnMgbWF0Y2ggYSBzcGVjaWZpYyBzdWJzZXQgb2YgcHNldWRvIGNsYXNzZXMs
IGFuZCB0aGV5IGhhdmUgc3BlY2lhbGl6ZWQgcnVsZXMgZm9yIGVhY2gKICAgICAgICAgICAgIC8v
IChzaW5jZSB0aGVyZSBhcmUgbm8gZWxlbWVudHMgaW52b2x2ZWQgZXhjZXB0IHdpdGggd2luZG93
LWluYWN0aXZlKS4KLSAgICAgICAgICAgIHJldHVybiBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNz
KGNvbnRleHQsIHNlbGVjdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBjaGVja1Njcm9sbGJhclBz
ZXVkb0NsYXNzKGNoZWNraW5nQ29udGV4dCwgKmNvbnRleHQuZWxlbWVudCwgc2VsZWN0b3IpOwog
ICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIGVsZW1lbnQgcHNldWRvIGNsYXNzIGNoZWNr
aW5nLgpAQCAtNjY3LDUzICs2NjcsNDEgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25l
KGNvbnN0IENoZQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29s
dmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZWxlbWVudC0+c2V0U3R5bGVBZmZlY3RlZEJ5RW1wdHkoKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQuZWxlbWVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dC5lbGVtZW50U3R5bGUtPnNldEVtcHR5U3RhdGUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpjb250
ZXh0LmVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlFbXB0eSwgcmVzdWx0KTsKKwog
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRmlyc3RDaGlsZDoKICAgICAgICAgICAgIC8vIGZp
cnN0LWNoaWxkIG1hdGNoZXMgdGhlIGZpcnN0IGNoaWxkIHRoYXQgaXMgYW4gZWxlbWVudAotICAg
ICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVt
ZW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGlzRmlyc3RDaGlsZEVsZW1l
bnQoKmVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUg
PT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0
eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50
RWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgY2hpbGRTdHlsZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNoaWxkU3R5bGUtPnNldEZpcnN0Q2hpbGRTdGF0ZSgpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgaWYgKGNvbnN0
IEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICBib29sIGlzRmlyc3RDaGlsZCA9IGlzRmlyc3RDaGlsZEVsZW1lbnQoKmVs
ZW1lbnQpOworICAgICAgICAgICAgICAgIGlmIChpc0ZpcnN0Q2hpbGQpCisgICAgICAgICAgICAg
ICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqZWxlbWVudCwgU3R5bGVS
ZWxhdGlvbjo6Rmlyc3RDaGlsZCk7CisgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihj
aGVja2luZ0NvbnRleHQsICpwYXJlbnRFbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFm
ZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMpOworICAgICAgICAgICAgICAgIHJldHVybiBpc0ZpcnN0
Q2hpbGQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NGaXJzdE9mVHlwZToKICAgICAgICAgICAgIC8vIGZpcnN0
LW9mLXR5cGUgbWF0Y2hlcyB0aGUgZmlyc3QgZWxlbWVudCBvZiBpdHMgdHlwZQogICAgICAgICAg
ICAgaWYgKGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGlmIChj
b250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpCi0gICAgICAgICAg
ICAgICAgICAgIGVsZW1lbnQtPnNldFN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCk7
Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gaXNGaXJzdE9mVHlwZSgqZWxlbWVudCwgZWxlbWVu
dC0+dGFnUU5hbWUoKSwgY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0
eWxlKTsKKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwg
KmVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcpOworICAg
ICAgICAgICAgICAgIHJldHVybiBpc0ZpcnN0T2ZUeXBlKGNoZWNraW5nQ29udGV4dCwgKmVsZW1l
bnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGFzdENoaWxkOgogICAg
ICAgICAgICAgLy8gbGFzdC1jaGlsZCBtYXRjaGVzIHRoZSBsYXN0IGNoaWxkIHRoYXQgaXMgYW4g
ZWxlbWVudAotICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50
LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IHBhcmVu
dEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSAmJiBpc0xhc3RDaGlsZEVsZW1l
bnQoKmVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUg
PT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0
eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50
RWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMoKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiBjaGlsZFN0eWxlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgY2hpbGRTdHlsZS0+c2V0TGFzdENoaWxkU3RhdGUoKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIGlmIChjb25zdCBF
bGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAg
ICAgICAgICAgICAgYm9vbCBpc0xhc3RDaGlsZCA9IHBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQ
YXJzaW5nQ2hpbGRyZW4oKSAmJiBpc0xhc3RDaGlsZEVsZW1lbnQoKmVsZW1lbnQpOworICAgICAg
ICAgICAgICAgIGlmIChpc0xhc3RDaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVS
ZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICplbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpMYXN0Q2hp
bGQpOworICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAq
cGFyZW50RWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxk
UnVsZXMpOworICAgICAgICAgICAgICAgIHJldHVybiBpc0xhc3RDaGlsZDsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc0xhc3RPZlR5cGU6CiAgICAgICAgICAgICAvLyBsYXN0LW9mLXR5cGUgbWF0Y2hlcyB0aGUg
bGFzdCBlbGVtZW50IG9mIGl0cyB0eXBlCiAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50
RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpCi0gICAgICAg
ICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJk
UG9zaXRpb25hbFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVj
a2luZ0NvbnRleHQsICpwYXJlbnRFbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVj
dGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyk7CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJl
bnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICByZXR1cm4gaXNMYXN0T2ZUeXBlKCpl
bGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKTsKQEAgLTcyMywyOCArNzExLDIzIEBAIGJvb2wg
U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGUKICAgICAgICAgICAgIGlmIChFbGVt
ZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAg
ICAgICAgICAgYm9vbCBmaXJzdENoaWxkID0gaXNGaXJzdENoaWxkRWxlbWVudCgqZWxlbWVudCk7
CiAgICAgICAgICAgICAgICAgYm9vbCBvbmx5Q2hpbGQgPSBmaXJzdENoaWxkICYmIHBhcmVudEVs
ZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSAmJiBpc0xhc3RDaGlsZEVsZW1lbnQo
KmVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0g
TW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUq
IGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0eWxl
IDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxl
bWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1
bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkICYmIGNoaWxkU3R5bGUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFN0eWxlLT5zZXRGaXJzdENoaWxkU3RhdGUo
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9ubHlDaGlsZCAmJiBjaGlsZFN0eWxlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgY2hpbGRTdHlsZS0+c2V0TGFzdENoaWxkU3RhdGUoKTsKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2lu
Z0NvbnRleHQsICpwYXJlbnRFbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVk
QnlGaXJzdENoaWxkUnVsZXMpOworICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hl
Y2tpbmdDb250ZXh0LCAqcGFyZW50RWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZl
Y3RlZEJ5TGFzdENoaWxkUnVsZXMpOworICAgICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkKQor
ICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKmVs
ZW1lbnQsIFN0eWxlUmVsYXRpb246OkZpcnN0Q2hpbGQpOworICAgICAgICAgICAgICAgIGlmIChv
bmx5Q2hpbGQpCisgICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdD
b250ZXh0LCAqZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6TGFzdENoaWxkKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gb25seUNoaWxkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzT25seU9mVHlwZToKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIHNlbGVjdG9yIGlzIHZlcnkgc2xvdy4KICAgICAgICAgICAg
IGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNv
bHZpbmdTdHlsZSkgewotICAgICAgICAgICAgICAgICAgICBlbGVtZW50LT5zZXRTdHlsZUlzQWZm
ZWN0ZWRCeVByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVt
ZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5n
Q29udGV4dCwgKmVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxp
bmcpOworICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAq
cGFyZW50RWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQ
b3NpdGlvbmFsUnVsZXMpOwogICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNG
aW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGlzRmlyc3RPZlR5cGUoKmVsZW1lbnQsIGVsZW1l
bnQtPnRhZ1FOYW1lKCksIGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdT
dHlsZSkgJiYgaXNMYXN0T2ZUeXBlKCplbGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaXNGaXJzdE9mVHlwZShjaGVja2luZ0NvbnRleHQsICplbGVt
ZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKSAmJiBpc0xhc3RPZlR5cGUoKmVsZW1lbnQsIGVsZW1l
bnQtPnRhZ1FOYW1lKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTWF0Y2hlczoKQEAgLTc1NCwxNCArNzM3
LDE0IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGUKIAogICAgICAg
ICAgICAgICAgIE1hdGNoVHlwZSBsb2NhbE1hdGNoVHlwZSA9IE1hdGNoVHlwZTo6VmlydHVhbFBz
ZXVkb0VsZW1lbnRPbmx5OwogICAgICAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3Iq
IHN1YnNlbGVjdG9yID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJzZWxl
Y3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vic2VsZWN0b3IpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgc3ViY29udGV4
dChjb250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgTG9jYWxDb250ZXh0IHN1YmNvbnRleHQo
Y29udGV4dCk7CiAgICAgICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuaW5GdW5jdGlvbmFsUHNl
dWRvQ2xhc3MgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LnBzZXVkb0Vs
ZW1lbnRFZmZlY3RpdmUgPSBjb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmU7CiAgICAgICAg
ICAgICAgICAgICAgIHN1YmNvbnRleHQuc2VsZWN0b3IgPSBzdWJzZWxlY3RvcjsKICAgICAgICAg
ICAgICAgICAgICAgc3ViY29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IHN1YnNl
bGVjdG9yOwogICAgICAgICAgICAgICAgICAgICBQc2V1ZG9JZFNldCBsb2NhbER5bmFtaWNQc2V1
ZG9JZFNldDsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9jYWxTcGVjaWZpY2l0eSA9
IDA7Ci0gICAgICAgICAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJz
aXZlbHkoc3ViY29udGV4dCwgbG9jYWxEeW5hbWljUHNldWRvSWRTZXQsIGxvY2FsU3BlY2lmaWNp
dHkpOworICAgICAgICAgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vy
c2l2ZWx5KGNoZWNraW5nQ29udGV4dCwgc3ViY29udGV4dCwgbG9jYWxEeW5hbWljUHNldWRvSWRT
ZXQsIGxvY2FsU3BlY2lmaWNpdHkpOwogICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm1h
dGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IG1heFNwZWNpZmljaXR5ID0gc3RkOjptYXgobWF4U3BlY2lmaWNpdHksIGxvY2FsU3BlY2lmaWNp
dHkpOwogCkBAIC03ODAsMTAgKzc2Myw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09u
ZShjb25zdCBDaGUKICAgICAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3NQbGFjZWhvbGRlclNob3duOgogICAgICAgICAgICAgaWYgKGlzPEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChSZW5kZXJTdHlsZSogc3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNv
bnRleHQuZWxlbWVudFN0eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0eWxlLT5zZXRVbmlxdWUoKTsKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICplbGVtZW50LCBT
dHlsZVJlbGF0aW9uOjpVbmlxdWUpOwogICAgICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpLmlzUGxhY2Vob2xkZXJWaXNpYmxl
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03OTMsMjkg
Kzc3MywyNiBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlCiAgICAg
ICAgICAgICBpZiAoZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGNvbnN0IENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0ID0gc2VsZWN0b3ItPnNlbGVj
dG9yTGlzdCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNlbGVjdG9yTGlzdFNw
ZWNpZmljaXR5OwotICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hTZWxlY3Rvckxpc3QoY29u
dGV4dCwgKmVsZW1lbnQsICpzZWxlY3Rvckxpc3QsIHNlbGVjdG9yTGlzdFNwZWNpZmljaXR5KSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoU2VsZWN0b3JMaXN0KGNoZWNraW5nQ29udGV4
dCwgY29udGV4dCwgKmVsZW1lbnQsICpzZWxlY3Rvckxpc3QsIHNlbGVjdG9yTGlzdFNwZWNpZmlj
aXR5KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljaXR5ID0gQ1NTU2VsZWN0b3I6
OmFkZFNwZWNpZmljaXRpZXMoc3BlY2lmaWNpdHksIHNlbGVjdG9yTGlzdFNwZWNpZmljaXR5KTsK
ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpCi0gICAgICAgICAgICAgICAg
ICAgIGVsZW1lbnQtPnNldFN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCk7CisgICAg
ICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICplbGVtZW50LCBT
dHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsKIAogICAgICAgICAgICAg
ICAgIGludCBjb3VudCA9IDE7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0IENTU1NlbGVjdG9y
TGlzdCogc2VsZWN0b3JMaXN0ID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGZvciAoRWxlbWVudCogc2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnBy
ZXZpb3VzU2libGluZygqZWxlbWVudCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBFbGVtZW50VHJhdmVy
c2FsOjpwcmV2aW91c1NpYmxpbmcoKnNpYmxpbmcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmctPnNldEFmZmVjdHNOZXh0U2libGluZ0Vs
ZW1lbnRTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihj
aGVja2luZ0NvbnRleHQsICpzaWJsaW5nLCBTdHlsZVJlbGF0aW9uOjpBZmZlY3RzTmV4dFNpYmxp
bmcpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZ25vcmVkU3BlY2lmaWNp
dHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hTZWxlY3Rvckxpc3QoY29udGV4
dCwgKnNpYmxpbmcsICpzZWxlY3Rvckxpc3QsIGlnbm9yZWRTcGVjaWZpY2l0eSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobWF0Y2hTZWxlY3Rvckxpc3QoY2hlY2tpbmdDb250ZXh0LCBj
b250ZXh0LCAqc2libGluZywgKnNlbGVjdG9yTGlzdCwgaWdub3JlZFNwZWNpZmljaXR5KSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICArK2NvdW50OwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY291bnQgKz0g
Y291bnRFbGVtZW50c0JlZm9yZSgqZWxlbWVudCwgY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1v
ZGU6OlJlc29sdmluZ1N0eWxlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVz
b2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW1lbnQtPnNldENoaWxkSW5kZXgoY291bnQpOworICAgICAgICAgICAgICAgICAgICBj
b3VudCArPSBjb3VudEVsZW1lbnRzQmVmb3JlKGNoZWNraW5nQ29udGV4dCwgKmVsZW1lbnQpOwor
ICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKmVs
ZW1lbnQsIFN0eWxlUmVsYXRpb246Ok50aENoaWxkSW5kZXgsIGNvdW50KTsKICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3ItPm1hdGNoTnRoKGNvdW50KSkK
QEAgLTgyNywxMCArODA0LDkgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0
IENoZQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBpZiAoZWxlbWVudC0+
cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5n
TW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVu
dC0+c2V0U3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAg
ICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKmVsZW1lbnQsIFN0eWxlUmVsYXRp
b246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcpOwogCi0gICAgICAgICAgICAgICAgaW50IGNv
dW50ID0gMSArIGNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUoKmVsZW1lbnQsIGVsZW1lbnQtPnRh
Z1FOYW1lKCksIGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSk7
CisgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMSArIGNvdW50RWxlbWVudHNPZlR5cGVCZWZv
cmUoY2hlY2tpbmdDb250ZXh0LCAqZWxlbWVudCwgZWxlbWVudC0+dGFnUU5hbWUoKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaE50aChjb3VudCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpAQCAtODQxLDE3ICs4MTcsMTQgQEAg
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZQogICAgICAgICAgICAgaWYg
KEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoY29uc3QgQ1NTU2VsZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QgPSBz
ZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
c2VsZWN0b3JMaXN0U3BlY2lmaWNpdHk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFNl
bGVjdG9yTGlzdChjb250ZXh0LCAqZWxlbWVudCwgKnNlbGVjdG9yTGlzdCwgc2VsZWN0b3JMaXN0
U3BlY2lmaWNpdHkpKQorICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hTZWxlY3Rvckxpc3Qo
Y2hlY2tpbmdDb250ZXh0LCBjb250ZXh0LCAqZWxlbWVudCwgKnNlbGVjdG9yTGlzdCwgc2VsZWN0
b3JMaXN0U3BlY2lmaWNpdHkpKQogICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNpdHkg
PSBDU1NTZWxlY3Rvcjo6YWRkU3BlY2lmaWNpdGllcyhzcGVjaWZpY2l0eSwgc2VsZWN0b3JMaXN0
U3BlY2lmaWNpdHkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQu
cmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyZW50RWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5UHJvcGVydHlCYXNl
ZEJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJl
bnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250
ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpCi0gICAgICAgICAgICAg
ICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRp
b25hbFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tp
bmdDb250ZXh0LCAqcGFyZW50RWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3Rl
ZEJ5UHJvcGVydHlCYXNlZEJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0Nv
bnRleHQsICpwYXJlbnRFbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlC
YWNrd2FyZFBvc2l0aW9uYWxSdWxlcyk7CiAKICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVs
ZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtODYwLDcgKzgzMyw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpj
aGVja09uZShjb25zdCBDaGUKICAgICAgICAgICAgICAgICBpZiAoY29uc3QgQ1NTU2VsZWN0b3JM
aXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgZm9yIChFbGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4
dFNpYmxpbmcoKmVsZW1lbnQpOyBzaWJsaW5nOyBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6
bmV4dFNpYmxpbmcoKnNpYmxpbmcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpZ25vcmVkU3BlY2lmaWNpdHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hT
ZWxlY3Rvckxpc3QoY29udGV4dCwgKnNpYmxpbmcsICpzZWxlY3Rvckxpc3QsIGlnbm9yZWRTcGVj
aWZpY2l0eSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hTZWxlY3Rvckxpc3Qo
Y2hlY2tpbmdDb250ZXh0LCBjb250ZXh0LCAqc2libGluZywgKnNlbGVjdG9yTGlzdCwgaWdub3Jl
ZFNwZWNpZmljaXR5KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2NvdW50OwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlCkBAIC04NzQsOCArODQ3
LDggQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZQogICAgICAgICAg
ICAgaWYgKCFzZWxlY3Rvci0+cGFyc2VOdGgoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxl
bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBN
b2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC0+
c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAgICAgICAg
ICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQs
IFN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVz
KTsKKwogICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNp
bmdDaGlsZHJlbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTg5
MCwxNCArODYzLDE0IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGUK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
c0FueToKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDaGVja2luZ0NvbnRleHRXaXRo
U3RhdHVzIHN1YkNvbnRleHQoY29udGV4dCk7CisgICAgICAgICAgICAgICAgTG9jYWxDb250ZXh0
IHN1YkNvbnRleHQoY29udGV4dCk7CiAgICAgICAgICAgICAgICAgc3ViQ29udGV4dC5pbkZ1bmN0
aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7CiAgICAgICAgICAgICAgICAgc3ViQ29udGV4dC5wc2V1
ZG9FbGVtZW50RWZmZWN0aXZlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgZm9yIChzdWJDb250
ZXh0LnNlbGVjdG9yID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJDb250
ZXh0LnNlbGVjdG9yOyBzdWJDb250ZXh0LnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0
KHN1YkNvbnRleHQuc2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgICAgIHN1YkNvbnRleHQu
Zmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBzdWJDb250ZXh0LnNlbGVjdG9yOwogICAgICAg
ICAgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvOwogICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbmdvcmVkU3BlY2lmaWNpdHkgPSAwOwotICAgICAgICAgICAg
ICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNl
dWRvLCBpbmdvcmVkU3BlY2lmaWNpdHkpLm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMp
CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KGNoZWNraW5nQ29udGV4
dCwgc3ViQ29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywgaW5nb3JlZFNwZWNpZmljaXR5KS5t
YXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzKQogICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtOTE2LDEy
ICs4ODksOCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmlz
TGluaygpICYmIGNvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9PSBWaXNpdGVkTWF0Y2hUeXBlOjpF
bmFibGVkOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0RyYWc6Ci0gICAg
ICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxl
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudFN0eWxlKQotICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeURyYWcoKTsKLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQtPnNldENoaWxk
cmVuQWZmZWN0ZWRCeURyYWcoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFkZFN0eWxl
UmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0
ZWRCeURyYWcpOworCiAgICAgICAgICAgICBpZiAoZWxlbWVudC0+cmVuZGVyZXIoKSAmJiBlbGVt
ZW50LT5yZW5kZXJlcigpLT5pc0RyYWdnaW5nKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICBicmVhazsKQEAgLTkyOSwyNSArODk4LDE3IEBAIGJvb2wgU2VsZWN0
b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGUKICAgICAgICAgICAgIHJldHVybiBtYXRjaGVz
Rm9jdXNQc2V1ZG9DbGFzcyhlbGVtZW50KTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3NIb3ZlcjoKICAgICAgICAgICAgIGlmIChtX3N0cmljdFBhcnNpbmcgfHwgZWxlbWVu
dC0+aXNMaW5rKCkgfHwgY2FuTWF0Y2hIb3Zlck9yQWN0aXZlSW5RdWlya3NNb2RlKGNvbnRleHQp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpS
ZXNvbHZpbmdTdHlsZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5lbGVtZW50
U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+c2V0
QWZmZWN0ZWRCeUhvdmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUhvdmVyKCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LT5ob3ZlcmVkKCkgfHwg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKCplbGVtZW50LCBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3ZlcikpCisgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxh
dGlvbihjaGVja2luZ0NvbnRleHQsICplbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5
SG92ZXIpOworCisgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhvdmVyZWQoKSB8fCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoY29uc3RfY2FzdDxFbGVtZW50
Jj4oKmVsZW1lbnQpLCBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3ZlcikpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQWN0aXZlOgogICAgICAgICAg
ICAgaWYgKG1fc3RyaWN0UGFyc2luZyB8fCBlbGVtZW50LT5pc0xpbmsoKSB8fCBjYW5NYXRjaEhv
dmVyT3JBY3RpdmVJblF1aXJrc01vZGUoY29udGV4dCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnRTdHlsZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5QWN0aXZlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQtPnNl
dENoaWxkcmVuQWZmZWN0ZWRCeUFjdGl2ZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBpZiAoZWxlbWVudC0+YWN0aXZlKCkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojpmb3JjZVBzZXVkb1N0YXRlKCplbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBY3Rp
dmUpKQorICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAq
ZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeUFjdGl2ZSk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoZWxlbWVudC0+YWN0aXZlKCkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpm
b3JjZVBzZXVkb1N0YXRlKGNvbnN0X2Nhc3Q8RWxlbWVudCY+KCplbGVtZW50KSwgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzQWN0aXZlKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwMDcsNyArOTY4LDcgQEAg
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZQogCiAgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzU2NvcGU6CiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgTm9kZSogY29udGV4dHVhbFJlZmVyZW5jZU5vZGUgPSAhY29udGV4dC5zY29w
ZSA/IGVsZW1lbnQtPmRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCkgOiBjb250ZXh0LnNjb3Bl
OworICAgICAgICAgICAgICAgIGNvbnN0IE5vZGUqIGNvbnRleHR1YWxSZWZlcmVuY2VOb2RlID0g
IWNoZWNraW5nQ29udGV4dC5zY29wZSA/IGVsZW1lbnQtPmRvY3VtZW50KCkuZG9jdW1lbnRFbGVt
ZW50KCkgOiBjaGVja2luZ0NvbnRleHQuc2NvcGU7CiAgICAgICAgICAgICAgICAgaWYgKGVsZW1l
bnQgPT0gY29udGV4dHVhbFJlZmVyZW5jZU5vZGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA1MCw3ICsxMDExLDcgQEAgYm9v
bCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZQogICAgIH0KICNpZiBFTkFCTEUo
VklERU9fVFJBQ0spCiAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQ
c2V1ZG9FbGVtZW50ICYmIHNlbGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpID09IENTU1NlbGVj
dG9yOjpQc2V1ZG9FbGVtZW50Q3VlKSB7Ci0gICAgICAgIENoZWNraW5nQ29udGV4dFdpdGhTdGF0
dXMgc3ViQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgTG9jYWxDb250ZXh0IHN1YkNvbnRleHQo
Y29udGV4dCk7CiAKICAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGNvbnN0ICYgc2VsZWN0b3Ig
PSBjb250ZXh0LnNlbGVjdG9yOwogICAgICAgICBmb3IgKHN1YkNvbnRleHQuc2VsZWN0b3IgPSBz
ZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1YkNvbnRleHQuc2VsZWN0b3I7IHN1
YkNvbnRleHQuc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3ViQ29udGV4dC5zZWxl
Y3RvcikpIHsKQEAgLTEwNTksNyArMTAyMCw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVj
a09uZShjb25zdCBDaGUKICAgICAgICAgICAgIHN1YkNvbnRleHQucHNldWRvRWxlbWVudEVmZmVj
dGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlZER5bmFtaWNQc2V1
ZG87CiAgICAgICAgICAgICB1bnNpZ25lZCBpZ25vcmVkU3BlY2lmaWNpdHkgPSAwOwotICAgICAg
ICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViQ29udGV4dCwgaWdub3JlZER5bmFtaWNQc2V1
ZG8sIGlnbm9yZWRTcGVjaWZpY2l0eSkubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykK
KyAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KGNoZWNraW5nQ29udGV4dCwgc3ViQ29u
dGV4dCwgaWdub3JlZER5bmFtaWNQc2V1ZG8sIGlnbm9yZWRTcGVjaWZpY2l0eSkubWF0Y2ggPT0g
TWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDY5LDEzICsxMDMwLDEzIEBAIGJv
b2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGUKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoU2VsZWN0b3JMaXN0KGNvbnN0IENoZWNr
aW5nQ29udGV4dFdpdGhTdGF0dXMmIGJhc2VDb250ZXh0LCBFbGVtZW50JiBlbGVtZW50LCBjb25z
dCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlzdCwgdW5zaWduZWQmIHNwZWNpZmljaXR5KSBj
b25zdAorYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoU2VsZWN0b3JMaXN0KENoZWNraW5nQ29u
dGV4dCYgY2hlY2tpbmdDb250ZXh0LCBjb25zdCBMb2NhbENvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0LCB1
bnNpZ25lZCYgc3BlY2lmaWNpdHkpIGNvbnN0CiB7CiAgICAgc3BlY2lmaWNpdHkgPSAwOwogICAg
IGJvb2wgaGFzTWF0Y2hlZEFueXRoaW5nID0gZmFsc2U7CiAKICAgICBmb3IgKGNvbnN0IENTU1Nl
bGVjdG9yKiBzdWJzZWxlY3RvciA9IHNlbGVjdG9yTGlzdC5maXJzdCgpOyBzdWJzZWxlY3Rvcjsg
c3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vic2VsZWN0b3IpKSB7Ci0gICAg
ICAgIENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgc3ViY29udGV4dChiYXNlQ29udGV4dCk7Cisg
ICAgICAgIExvY2FsQ29udGV4dCBzdWJjb250ZXh0KGNvbnRleHQpOwogICAgICAgICBzdWJjb250
ZXh0LmVsZW1lbnQgPSAmZWxlbWVudDsKICAgICAgICAgc3ViY29udGV4dC5zZWxlY3RvciA9IHN1
YnNlbGVjdG9yOwogICAgICAgICBzdWJjb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzID0g
dHJ1ZTsKQEAgLTEwODMsNyArMTA0NCw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjptYXRjaFNl
bGVjdG9yTGlzdCgKICAgICAgICAgc3ViY29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVu
dCA9IHN1YnNlbGVjdG9yOwogICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRv
OwogICAgICAgICB1bnNpZ25lZCBsb2NhbFNwZWNpZmljaXR5ID0gMDsKLSAgICAgICAgaWYgKG1h
dGNoUmVjdXJzaXZlbHkoc3ViY29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywgbG9jYWxTcGVj
aWZpY2l0eSkubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykgeworICAgICAgICBpZiAo
bWF0Y2hSZWN1cnNpdmVseShjaGVja2luZ0NvbnRleHQsIHN1YmNvbnRleHQsIGlnbm9yZUR5bmFt
aWNQc2V1ZG8sIGxvY2FsU3BlY2lmaWNpdHkpLm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNo
ZXMpIHsKICAgICAgICAgICAgIEFTU0VSVCghaWdub3JlRHluYW1pY1BzZXVkbyk7CiAKICAgICAg
ICAgICAgIGhhc01hdGNoZWRBbnl0aGluZyA9IHRydWU7CkBAIC0xMDkzLDQxICsxMDU0LDQxIEBA
IGJvb2wgU2VsZWN0b3JDaGVja2VyOjptYXRjaFNlbGVjdG9yTGlzdCgKICAgICByZXR1cm4gaGFz
TWF0Y2hlZEFueXRoaW5nOwogfQogCi1ib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTY3JvbGxi
YXJQc2V1ZG9DbGFzcyhjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBj
b25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpIGNvbnN0Citib29sIFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhjb25zdCBDaGVja2luZ0NvbnRleHQmIGNoZWNraW5n
Q29udGV4dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yKSBjb25zdAogewogICAgIEFTU0VSVChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3MpOwogCiAgICAgc3dpdGNoIChzZWxlY3Rvci0+cHNldWRvQ2xhc3NUeXBl
KCkpIHsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1dpbmRvd0luYWN0aXZlOgot
ICAgICAgICByZXR1cm4gaXNXaW5kb3dJbmFjdGl2ZShjb250ZXh0LmVsZW1lbnQpOworICAgICAg
ICByZXR1cm4gaXNXaW5kb3dJbmFjdGl2ZSgmZWxlbWVudCk7CiAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3NFbmFibGVkOgotICAgICAgICByZXR1cm4gc2Nyb2xsYmFyTWF0Y2hlc0Vu
YWJsZWRQc2V1ZG9DbGFzcyhjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNo
ZXNFbmFibGVkUHNldWRvQ2xhc3MoY2hlY2tpbmdDb250ZXh0KTsKICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzc0Rpc2FibGVkOgotICAgICAgICByZXR1cm4gc2Nyb2xsYmFyTWF0Y2hl
c0Rpc2FibGVkUHNldWRvQ2xhc3MoY29udGV4dCk7CisgICAgICAgIHJldHVybiBzY3JvbGxiYXJN
YXRjaGVzRGlzYWJsZWRQc2V1ZG9DbGFzcyhjaGVja2luZ0NvbnRleHQpOwogICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzSG92ZXI6Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXJNYXRj
aGVzSG92ZXJQc2V1ZG9DbGFzcyhjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1h
dGNoZXNIb3ZlclBzZXVkb0NsYXNzKGNoZWNraW5nQ29udGV4dCk7CiAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NBY3RpdmU6Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXJNYXRjaGVz
QWN0aXZlUHNldWRvQ2xhc3MoY29udGV4dCk7CisgICAgICAgIHJldHVybiBzY3JvbGxiYXJNYXRj
aGVzQWN0aXZlUHNldWRvQ2xhc3MoY2hlY2tpbmdDb250ZXh0KTsKICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzc0hvcml6b250YWw6Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXJNYXRj
aGVzSG9yaXpvbnRhbFBzZXVkb0NsYXNzKGNvbnRleHQpOworICAgICAgICByZXR1cm4gc2Nyb2xs
YmFyTWF0Y2hlc0hvcml6b250YWxQc2V1ZG9DbGFzcyhjaGVja2luZ0NvbnRleHQpOwogICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVmVydGljYWw6Ci0gICAgICAgIHJldHVybiBzY3Jv
bGxiYXJNYXRjaGVzVmVydGljYWxQc2V1ZG9DbGFzcyhjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
IHNjcm9sbGJhck1hdGNoZXNWZXJ0aWNhbFBzZXVkb0NsYXNzKGNoZWNraW5nQ29udGV4dCk7CiAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NEZWNyZW1lbnQ6Ci0gICAgICAgIHJldHVy
biBzY3JvbGxiYXJNYXRjaGVzRGVjcmVtZW50UHNldWRvQ2xhc3MoY29udGV4dCk7CisgICAgICAg
IHJldHVybiBzY3JvbGxiYXJNYXRjaGVzRGVjcmVtZW50UHNldWRvQ2xhc3MoY2hlY2tpbmdDb250
ZXh0KTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0luY3JlbWVudDoKLSAgICAg
ICAgcmV0dXJuIHNjcm9sbGJhck1hdGNoZXNJbmNyZW1lbnRQc2V1ZG9DbGFzcyhjb250ZXh0KTsK
KyAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNoZXNJbmNyZW1lbnRQc2V1ZG9DbGFzcyhjaGVj
a2luZ0NvbnRleHQpOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzU3RhcnQ6Ci0g
ICAgICAgIHJldHVybiBzY3JvbGxiYXJNYXRjaGVzU3RhcnRQc2V1ZG9DbGFzcyhjb250ZXh0KTsK
KyAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNoZXNTdGFydFBzZXVkb0NsYXNzKGNoZWNraW5n
Q29udGV4dCk7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NFbmQ6Ci0gICAgICAg
IHJldHVybiBzY3JvbGxiYXJNYXRjaGVzRW5kUHNldWRvQ2xhc3MoY29udGV4dCk7CisgICAgICAg
IHJldHVybiBzY3JvbGxiYXJNYXRjaGVzRW5kUHNldWRvQ2xhc3MoY2hlY2tpbmdDb250ZXh0KTsK
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0RvdWJsZUJ1dHRvbjoKLSAgICAgICAg
cmV0dXJuIHNjcm9sbGJhck1hdGNoZXNEb3VibGVCdXR0b25Qc2V1ZG9DbGFzcyhjb250ZXh0KTsK
KyAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNoZXNEb3VibGVCdXR0b25Qc2V1ZG9DbGFzcyhj
aGVja2luZ0NvbnRleHQpOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzU2luZ2xl
QnV0dG9uOgotICAgICAgICByZXR1cm4gc2Nyb2xsYmFyTWF0Y2hlc1NpbmdsZUJ1dHRvblBzZXVk
b0NsYXNzKGNvbnRleHQpOworICAgICAgICByZXR1cm4gc2Nyb2xsYmFyTWF0Y2hlc1NpbmdsZUJ1
dHRvblBzZXVkb0NsYXNzKGNoZWNraW5nQ29udGV4dCk7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NOb0J1dHRvbjoKLSAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNoZXNOb0J1
dHRvblBzZXVkb0NsYXNzKGNvbnRleHQpOworICAgICAgICByZXR1cm4gc2Nyb2xsYmFyTWF0Y2hl
c05vQnV0dG9uUHNldWRvQ2xhc3MoY2hlY2tpbmdDb250ZXh0KTsKICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzc0Nvcm5lclByZXNlbnQ6Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXJN
YXRjaGVzQ29ybmVyUHJlc2VudFBzZXVkb0NsYXNzKGNvbnRleHQpOworICAgICAgICByZXR1cm4g
c2Nyb2xsYmFyTWF0Y2hlc0Nvcm5lclByZXNlbnRQc2V1ZG9DbGFzcyhjaGVja2luZ0NvbnRleHQp
OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCShyZXZpc2lvbiAxOTUxMzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3
b2xmLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xhcyBTaGFua3MgKHdl
YmtpdEBuaWNrc2hhbmtzLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5
YWtvdiA8YXBAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNo
IE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8pCkBAIC03NiwyNyArNzYsNDYgQEAgcHVibGljOgogCiAgICAgU2VsZWN0b3JDaGVja2Vy
KERvY3VtZW50Jik7CiAKKyAgICBzdHJ1Y3QgU3R5bGVSZWxhdGlvbiB7CisgICAgICAgIGVudW0g
VHlwZSB7CisgICAgICAgICAgICBBZmZlY3RlZEJ5QWN0aXZlLAorICAgICAgICAgICAgQWZmZWN0
ZWRCeURyYWcsCisgICAgICAgICAgICBBZmZlY3RlZEJ5RW1wdHksCisgICAgICAgICAgICBBZmZl
Y3RlZEJ5SG92ZXIsCisgICAgICAgICAgICBBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nLAorICAg
ICAgICAgICAgQWZmZWN0c05leHRTaWJsaW5nLAorICAgICAgICAgICAgQ2hpbGRyZW5BZmZlY3Rl
ZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMsCisgICAgICAgICAgICBDaGlsZHJlbkFmZmVjdGVk
QnlGaXJzdENoaWxkUnVsZXMsCisgICAgICAgICAgICBDaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0
eUJhc2VkQmFja3dhcmRQb3NpdGlvbmFsUnVsZXMsCisgICAgICAgICAgICBDaGlsZHJlbkFmZmVj
dGVkQnlMYXN0Q2hpbGRSdWxlcywKKyAgICAgICAgICAgIEZpcnN0Q2hpbGQsCisgICAgICAgICAg
ICBMYXN0Q2hpbGQsCisgICAgICAgICAgICBOdGhDaGlsZEluZGV4LAorICAgICAgICAgICAgVW5p
cXVlLAorICAgICAgICB9OworICAgICAgICBFbGVtZW50JiBlbGVtZW50OworICAgICAgICBUeXBl
IHR5cGU7CisgICAgICAgIHVuc2lnbmVkIHZhbHVlOworICAgIH07CisgICAgdXNpbmcgU3R5bGVS
ZWxhdGlvbnMgPSBWZWN0b3I8U3R5bGVSZWxhdGlvbiwgOD47CisKICAgICBzdHJ1Y3QgQ2hlY2tp
bmdDb250ZXh0IHsKICAgICAgICAgQ2hlY2tpbmdDb250ZXh0KFNlbGVjdG9yQ2hlY2tlcjo6TW9k
ZSByZXNvbHZpbmdNb2RlKQogICAgICAgICAgICAgOiByZXNvbHZpbmdNb2RlKHJlc29sdmluZ01v
ZGUpCi0gICAgICAgICAgICAsIGVsZW1lbnRTdHlsZShudWxscHRyKQotICAgICAgICAgICAgLCBw
c2V1ZG9JZChOT1BTRVVETykKLSAgICAgICAgICAgICwgc2Nyb2xsYmFyKG51bGxwdHIpCi0gICAg
ICAgICAgICAsIHNjcm9sbGJhclBhcnQoTm9QYXJ0KQotICAgICAgICAgICAgLCBzY29wZShudWxs
cHRyKQogICAgICAgICB7IH0KIAotICAgICAgICBTZWxlY3RvckNoZWNrZXI6Ok1vZGUgcmVzb2x2
aW5nTW9kZTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZTsKLSAgICAgICAgUHNl
dWRvSWQgcHNldWRvSWQ7Ci0gICAgICAgIFJlbmRlclNjcm9sbGJhciogc2Nyb2xsYmFyOwotICAg
ICAgICBTY3JvbGxiYXJQYXJ0IHNjcm9sbGJhclBhcnQ7Ci0gICAgICAgIGNvbnN0IENvbnRhaW5l
ck5vZGUqIHNjb3BlOworICAgICAgICBjb25zdCBTZWxlY3RvckNoZWNrZXI6Ok1vZGUgcmVzb2x2
aW5nTW9kZTsKKyAgICAgICAgUHNldWRvSWQgcHNldWRvSWQgeyBOT1BTRVVETyB9OworICAgICAg
ICBSZW5kZXJTY3JvbGxiYXIqIHNjcm9sbGJhciB7IG51bGxwdHIgfTsKKyAgICAgICAgU2Nyb2xs
YmFyUGFydCBzY3JvbGxiYXJQYXJ0IHsgTm9QYXJ0IH07CisgICAgICAgIGNvbnN0IENvbnRhaW5l
ck5vZGUqIHNjb3BlIHsgbnVsbHB0ciB9OworCisgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBi
ZSBuaWNlciB0byBoYXZlIGEgc2VwYXJhdGUgb2JqZWN0IGZvciByZXR1cm4gdmFsdWVzLiBUaGlz
IHJlcXVpcmVzIHNvbWUgbW9yZSB3b3JrIGluIHRoZSBzZWxlY3RvciBjb21waWxlci4KKyAgICAg
ICAgU3R5bGVSZWxhdGlvbnMgc3R5bGVSZWxhdGlvbnM7CisgICAgICAgIFBzZXVkb0lkU2V0IHBz
ZXVkb0lEU2V0OwogICAgIH07CiAKLSAgICBzdHJ1Y3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1
czsKLQotICAgIGJvb2wgbWF0Y2goY29uc3QgQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgY29uc3Qg
Q2hlY2tpbmdDb250ZXh0JiwgdW5zaWduZWQmIHNwZWNpZmljaXR5KSBjb25zdDsKKyAgICBib29s
IG1hdGNoKGNvbnN0IENTU1NlbGVjdG9yJiwgY29uc3QgRWxlbWVudCYsIENoZWNraW5nQ29udGV4
dCYsIHVuc2lnbmVkJiBzcGVjaWZpY2l0eSkgY29uc3Q7CiAKICAgICBzdGF0aWMgYm9vbCBpc0Nv
bW1vblBzZXVkb0NsYXNzU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqKTsKICAgICBzdGF0aWMg
Ym9vbCBtYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhjb25zdCBFbGVtZW50Kik7CkBAIC0xMDUsMTIg
KzEyNCwxNCBAQCBwdWJsaWM6CiAgICAgZW51bSBMaW5rTWF0Y2hNYXNrIHsgTWF0Y2hEZWZhdWx0
ID0gMCwgTWF0Y2hMaW5rID0gMSwgTWF0Y2hWaXNpdGVkID0gMiwgTWF0Y2hBbGwgPSBNYXRjaExp
bmsgfCBNYXRjaFZpc2l0ZWQgfTsKICAgICBzdGF0aWMgdW5zaWduZWQgZGV0ZXJtaW5lTGlua01h
dGNoVHlwZShjb25zdCBDU1NTZWxlY3RvciopOwogCisgICAgc3RydWN0IExvY2FsQ29udGV4dDsK
KyAgICAKIHByaXZhdGU6Ci0gICAgTWF0Y2hSZXN1bHQgbWF0Y2hSZWN1cnNpdmVseShjb25zdCBD
aGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiwgUHNldWRvSWRTZXQmLCB1bnNpZ25lZCYgc3BlY2lm
aWNpdHkpIGNvbnN0OwotICAgIGJvb2wgY2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0
aFN0YXR1cyYsIFBzZXVkb0lkU2V0JiwgTWF0Y2hUeXBlJiwgdW5zaWduZWQmIHNwZWNpZmljaXR5
KSBjb25zdDsKLSAgICBib29sIG1hdGNoU2VsZWN0b3JMaXN0KGNvbnN0IENoZWNraW5nQ29udGV4
dFdpdGhTdGF0dXMmLCBFbGVtZW50JiwgY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiwgdW5zaWduZWQm
IHNwZWNpZmljaXR5KSBjb25zdDsKKyAgICBNYXRjaFJlc3VsdCBtYXRjaFJlY3Vyc2l2ZWx5KENo
ZWNraW5nQ29udGV4dCYsIGNvbnN0IExvY2FsQ29udGV4dCYsIFBzZXVkb0lkU2V0JiwgdW5zaWdu
ZWQmIHNwZWNpZmljaXR5KSBjb25zdDsKKyAgICBib29sIGNoZWNrT25lKENoZWNraW5nQ29udGV4
dCYsIGNvbnN0IExvY2FsQ29udGV4dCYsIFBzZXVkb0lkU2V0JiwgTWF0Y2hUeXBlJiwgdW5zaWdu
ZWQmIHNwZWNpZmljaXR5KSBjb25zdDsKKyAgICBib29sIG1hdGNoU2VsZWN0b3JMaXN0KENoZWNr
aW5nQ29udGV4dCYsIGNvbnN0IExvY2FsQ29udGV4dCYsIGNvbnN0IEVsZW1lbnQmLCBjb25zdCBD
U1NTZWxlY3Rvckxpc3QmLCB1bnNpZ25lZCYgc3BlY2lmaWNpdHkpIGNvbnN0OwogCi0gICAgYm9v
bCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0
dXMmLCBjb25zdCBDU1NTZWxlY3RvciopIGNvbnN0OworICAgIGJvb2wgY2hlY2tTY3JvbGxiYXJQ
c2V1ZG9DbGFzcyhjb25zdCBDaGVja2luZ0NvbnRleHQmLCBjb25zdCBFbGVtZW50JiwgY29uc3Qg
Q1NTU2VsZWN0b3IqKSBjb25zdDsKIAogICAgIGJvb2wgbV9zdHJpY3RQYXJzaW5nOwogICAgIGJv
b2wgbV9kb2N1bWVudElzSFRNTDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNo
ZWNrZXJUZXN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTk1MTMwKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNjMsMTIgKzYzLDEyIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBpc0VuYWJsZWQoY29uc3Qg
RWxlbWUKICAgICAgICAgJiYgIWVsZW1lbnQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIGJvb2wgaXNNZWRpYURvY3VtZW50KEVsZW1lbnQqIGVsZW1lbnQpCitB
TFdBWVNfSU5MSU5FIGJvb2wgaXNNZWRpYURvY3VtZW50KGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQp
CiB7CiAgICAgcmV0dXJuIGVsZW1lbnQtPmRvY3VtZW50KCkuaXNNZWRpYURvY3VtZW50KCk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBpc0NoZWNrZWQoRWxlbWVudCYgZWxlbWVudCkKK0FMV0FZ
U19JTkxJTkUgYm9vbCBpc0NoZWNrZWQoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICAv
LyBFdmVuIHRob3VnaCBXaW5JRSBhbGxvd3MgY2hlY2tlZCBhbmQgaW5kZXRlcm1pbmF0ZSB0byBj
by1leGlzdCwgdGhlIENTUyBzZWxlY3RvciBzcGVjIHNheXMgdGhhdAogICAgIC8vIHlvdSBjYW4n
dCBiZSBib3RoIGNoZWNrZWQgYW5kIGluZGV0ZXJtaW5hdGUuIFdlIHdpbGwgYmVoYXZlIGxpa2Ug
V2luSUUgYmVoaW5kIHRoZSBzY2VuZXMgYW5kIGp1c3QKQEAgLTc4LDE3ICs3OCwxNyBAQCBBTFdB
WVNfSU5MSU5FIGJvb2wgaXNDaGVja2VkKEVsZW1lbnQmIGVsCiAgICAgICAgIHJldHVybiBpbnB1
dEVsZW1lbnQuc2hvdWxkQXBwZWFyQ2hlY2tlZCgpICYmICFpbnB1dEVsZW1lbnQuc2hvdWxkQXBw
ZWFySW5kZXRlcm1pbmF0ZSgpOwogICAgIH0KICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+
KGVsZW1lbnQpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KGVs
ZW1lbnQpLnNlbGVjdGVkKCk7CisgICAgICAgIHJldHVybiBjb25zdF9jYXN0PEhUTUxPcHRpb25F
bGVtZW50Jj4oZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQpKS5zZWxlY3RlZCgp
OwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgaXNJblJhbmdl
KEVsZW1lbnQqIGVsZW1lbnQpCitBTFdBWVNfSU5MSU5FIGJvb2wgaXNJblJhbmdlKGNvbnN0IEVs
ZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgcmV0dXJuIGVsZW1lbnQtPmlzSW5SYW5nZSgpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIGJvb2wgaXNPdXRPZlJhbmdlKEVsZW1lbnQqIGVsZW1lbnQpCitBTFdB
WVNfSU5MSU5FIGJvb2wgaXNPdXRPZlJhbmdlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAg
ICAgcmV0dXJuIGVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5oCShyZXZpc2lvbiAxOTUxMzApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MTAsNyArNjEwLDcgQEAgaW5saW5l
IGJvb2wgY2hlY2tSZWdpb25TZWxlY3Rvcihjb25zdCBDUwogICAgIGZvciAoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHMgPSByZWdpb25TZWxlY3RvcjsgczsgcyA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChz
KSkgewogICAgICAgICBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCBzZWxlY3RvckNo
ZWNraW5nQ29udGV4dChTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMpOwogICAg
ICAgICB1bnNpZ25lZCBpZ25vcmVkU3BlY2lmaWNpdHk7Ci0gICAgICAgIGlmIChzZWxlY3RvckNo
ZWNrZXIubWF0Y2gocywgcmVnaW9uRWxlbWVudCwgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQsIGln
bm9yZWRTcGVjaWZpY2l0eSkpCisgICAgICAgIGlmIChzZWxlY3RvckNoZWNrZXIubWF0Y2goKnMs
ICpyZWdpb25FbGVtZW50LCBzZWxlY3RvckNoZWNraW5nQ29udGV4dCwgaWdub3JlZFNwZWNpZmlj
aXR5KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCShyZXZp
c2lvbiAxOTUxMzApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKQEAgLTI5MSwxNCArMjkxLDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZW5lcmF0
ZUVsZW1lbnRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNl
cywgSlNDOjpGdW5jdGlvblB0cik7CiAgICAgdm9pZCBnZW5lcmF0ZUNvbnRleHRGdW5jdGlvbkNh
bGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgSlNDOjpGdW5jdGlvblB0
cik7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc0FjdGl2ZShBc3NlbWJsZXI6Okp1bXBMaXN0
JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsKLSAgICB2b2lkIGdlbmVy
YXRlRWxlbWVudElzRW1wdHkoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25z
dCBTZWxlY3RvckZyYWdtZW50Jik7Ci0gICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc0ZpcnN0Q2hp
bGQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdt
ZW50Jik7CisgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc0VtcHR5KEFzc2VtYmxlcjo6SnVtcExp
c3QmIGZhaWx1cmVDYXNlcyk7CisgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc0ZpcnN0Q2hpbGQo
QXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzKTsKICAgICB2b2lkIGdlbmVyYXRlRWxl
bWVudElzSG92ZXJlZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNl
bGVjdG9yRnJhZ21lbnQmKTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudElzSW5MYW5ndWFnZShB
c3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQm
KTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudElzSW5MYW5ndWFnZShBc3NlbWJsZXI6Okp1bXBM
aXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+Kik7Ci0gICAgdm9p
ZCBnZW5lcmF0ZUVsZW1lbnRJc0xhc3RDaGlsZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJl
Q2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsKLSAgICB2b2lkIGdlbmVyYXRlRWxlbWVu
dElzT25seUNoaWxkKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2Vs
ZWN0b3JGcmFnbWVudCYpOwotICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50SGFzUGxhY2Vob2xkZXJT
aG93bihBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJh
Z21lbnQmKTsKKyAgICB2b2lkIGdlbmVyYXRlRWxlbWVudElzTGFzdENoaWxkKEFzc2VtYmxlcjo6
SnVtcExpc3QmIGZhaWx1cmVDYXNlcyk7CisgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc09ubHlD
aGlsZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMpOworICAgIHZvaWQgZ2VuZXJh
dGVFbGVtZW50SGFzUGxhY2Vob2xkZXJTaG93bihBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJl
Q2FzZXMpOwogICAgIHZvaWQgZ2VuZXJhdGVTeW5jaHJvbml6ZVN0eWxlQXR0cmlidXRlKEFzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50RGF0YUFycmF5U2l6ZUFuZEZsYWdzKTsKICAgICB2b2lk
IGdlbmVyYXRlU3luY2hyb25pemVBbGxBbmltYXRlZFNWR0F0dHJpYnV0ZShBc3NlbWJsZXI6OlJl
Z2lzdGVySUQgZWxlbWVudERhdGFBcnJheVNpemVBbmRGbGFncyk7CiAgICAgdm9pZCBnZW5lcmF0
ZUVsZW1lbnRBdHRyaWJ1dGVzTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNh
c2VzLCBjb25zdCBMb2NhbFJlZ2lzdGVyJiBlbGVtZW50RGF0YUFkZHJlc3MsIGNvbnN0IFNlbGVj
dG9yRnJhZ21lbnQmKTsKQEAgLTMyMyw3ICszMjMsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2Vu
ZXJhdGVFbGVtZW50SXNUYXJnZXQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzKTsK
IAogICAgIC8vIEhlbHBlcnMuCi0gICAgdm9pZCBhZGRGbGFnc1RvRWxlbWVudFN0eWxlRnJvbUNv
bnRleHQoQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCwgaW50NjRfdCk7Cisg
ICAgdm9pZCBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKEFzc2VtYmxl
cjo6UmVnaXN0ZXJJRCBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OlR5
cGUsIE9wdGlvbmFsPEFzc2VtYmxlcjo6UmVnaXN0ZXJJRD4gdmFsdWUgPSB7IH0pOworICAgIHZv
aWQgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uKEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2lu
Z0NvbnRleHQsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6
OlN0eWxlUmVsYXRpb246OlR5cGUsIE9wdGlvbmFsPEFzc2VtYmxlcjo6UmVnaXN0ZXJJRD4gdmFs
dWUgPSB7IH0pOwogICAgIEFzc2VtYmxlcjo6SnVtcCBicmFuY2hPblJlc29sdmluZ01vZGVXaXRo
Q2hlY2tpbmdDb250ZXh0KEFzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU2VsZWN0b3JD
aGVja2VyOjpNb2RlLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0KTsKICAg
ICBBc3NlbWJsZXI6Okp1bXAgYnJhbmNoT25SZXNvbHZpbmdNb2RlKEFzc2VtYmxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbiwgU2VsZWN0b3JDaGVja2VyOjpNb2RlLCBBc3NlbWJsZXI6OlJlZ2lzdGVy
SUQgY2hlY2tpbmdDb250ZXh0KTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudElzRmlyc3RMaW5r
KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdpc3RlcklE
IGVsZW1lbnQpOwpAQCAtMzMyLDcgKzMzMyw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZW5lcmF0
ZU50aEZpbHRlclRlc3QoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgY291bnRlciwgaW50IGEsIGludCBiKTsKICAgICB2b2lkIGdlbmVyYXRl
UmVxdWVzdGVkUHNldWRvRWxlbWVudEVxdWFsc1RvU2VsZWN0b3JQc2V1ZG9FbGVtZW50KEFzc2Vt
Ymxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYsIEFz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQpOwogICAgIHZvaWQgZ2VuZXJhdGVT
cGVjaWFsRmFpbHVyZUluUXVpcmtzTW9kZUZvckFjdGl2ZUFuZEhvdmVySWZOZWVkZWQoQXNzZW1i
bGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50Jik7Ci0g
ICAgdm9pZCBtYXJrRWxlbWVudElmUmVzb2x2aW5nU3R5bGUoQXNzZW1ibGVyOjpSZWdpc3RlcklE
LCBpbnQzMl90KTsKICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IGp1bXBJZk5vUHJldmlvdXNBZGph
Y2VudEVsZW1lbnQoKTsKICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IGp1bXBJZk5vTmV4dEFkamFj
ZW50RWxlbWVudCgpOwogICAgIEFzc2VtYmxlcjo6SnVtcCBqdW1wSWZOb3RSZXNvbHZpbmdTdHls
ZShBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0UmVnaXN0ZXIpOwpAQCAtMTg5
MSw3ICsxODkxLDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlU2VsZQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHNob3VsZE1hcmtTdHls
ZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyhmcmFnbWVudCkpCi0gICAgICAgICAgICBtYXJr
RWxlbWVudElmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgTm9kZTo6Zmxh
Z1N0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCkpOworICAgICAgICAgICAgZ2VuZXJh
dGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVy
LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxp
bmcpOwogICAgICAgICBnZW5lcmF0ZUJhY2t0cmFja2luZ1RhaWxzSWZOZWVkZWQoZmFpbHVyZUNh
c2VzLCBmcmFnbWVudCk7CiAgICAgfQogCkBAIC0yMTM1LDcgKzIxMzUsNyBAQCB2b2lkIFNlbGVj
dG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVXYWxrCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVEaXJlY3RBZGphY2VudFRyZWVXYWxrZXIoQXNzZW1ibGVyOjpKdW1wTGlzdCYg
ZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCkKIHsKICAgICBn
ZW5lcmF0ZVdhbGtUb1ByZXZpb3VzQWRqYWNlbnQoZmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7Ci0g
ICAgbWFya0VsZW1lbnRJZlJlc29sdmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIE5v
ZGU6OmZsYWdBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKSk7CisgICAgZ2VuZXJhdGVB
ZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBT
ZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVjdHNOZXh0U2libGluZyk7CiAKICAg
ICBBc3NlbWJsZXI6Okp1bXBMaXN0IG1hdGNoaW5nVGFnTmFtZUZhaWx1cmVDYXNlczsKICAgICBB
c3NlbWJsZXI6Okp1bXBMaXN0IG1hdGNoaW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2FzZXM7CkBAIC0y
MTYwLDcgKzIxNjAsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVJbmRp
CiAgICAgICAgIG1fYmFja3RyYWNraW5nTGV2ZWxzLmxhc3QoKS5pbmRpcmVjdEFkamFjZW50VHJl
ZVdhbGtlckJhY2t0cmFja2luZ1BvaW50ID0gbV9hc3NlbWJsZXIubGFiZWwoKTsKIAogICAgIGdl
bmVyYXRlV2Fsa1RvUHJldmlvdXNBZGphY2VudChmYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKLSAg
ICBtYXJrRWxlbWVudElmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgTm9k
ZTo6ZmxhZ0FmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpKTsKKyAgICBnZW5lcmF0ZUFk
ZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNl
bGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5nKTsKIAogICAg
IGlmIChmcmFnbWVudC5iYWNrdHJhY2tpbmdGbGFncyAmIEJhY2t0cmFja2luZ0ZsYWc6OkluZGly
ZWN0QWRqYWNlbnRFbnRyeVBvaW50KQogICAgICAgICBtX2JhY2t0cmFja2luZ0xldmVscy5sYXN0
KCkuaW5kaXJlY3RBZGphY2VudEVudHJ5UG9pbnQgPSBtX2Fzc2VtYmxlci5sYWJlbCgpOwpAQCAt
MjE3MCwzNSArMjE3MCw1MSBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVJ
bmRpCiAgICAgbG9jYWxGYWlsdXJlQ2FzZXMubGlua1RvKGxvb3BTdGFydCwgJm1fYXNzZW1ibGVy
KTsKIH0KIAordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQWRkU3R5bGVSZWxh
dGlvbklmUmVzb2x2aW5nU3R5bGUoQXNzZW1ibGVyOjpSZWdpc3RlcklEIGVsZW1lbnQsIFNlbGVj
dG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6VHlwZSByZWxhdGlvblR5cGUsIE9wdGlvbmFsPEFz
c2VtYmxlcjo6UmVnaXN0ZXJJRD4gdmFsdWUpCit7CisgICAgaWYgKG1fc2VsZWN0b3JDb250ZXh0
ID09IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3RvcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgTG9jYWxSZWdpc3RlciBjaGVja2luZ0NvbnRleHQobV9yZWdpc3RlckFsbG9jYXRvcik7Cisg
ICAgQXNzZW1ibGVyOjpKdW1wIG5vdFJlc29sdmluZ1N0eWxlID0ganVtcElmTm90UmVzb2x2aW5n
U3R5bGUoY2hlY2tpbmdDb250ZXh0KTsKKworICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbihj
aGVja2luZ0NvbnRleHQsIGVsZW1lbnQsIHJlbGF0aW9uVHlwZSwgdmFsdWUpOworCisgICAgbm90
UmVzb2x2aW5nU3R5bGUubGluaygmbV9hc3NlbWJsZXIpOworfQogCi12b2lkIFNlbGVjdG9yQ29k
ZUdlbmVyYXRvcjo6YWRkRmxhZ3NUb0VsZW1lbnRTdHlsZUZyb21Db250ZXh0KEFzc2VtYmxlcjo6
UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQsIGludDY0X3QgbmV3RmxhZykKK3N0YXRpYyB2b2lk
IGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbkVsZW1lbnRGdW5jdGlvbihTZWxlY3RvckNoZWNrZXI6
OkNoZWNraW5nQ29udGV4dCogY2hlY2tpbmdDb250ZXh0LCBFbGVtZW50KiBlbGVtZW50KQorewor
ICAgIGNoZWNraW5nQ29udGV4dC0+c3R5bGVSZWxhdGlvbnMuYXBwZW5kKHsgKmVsZW1lbnQsIFNl
bGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeUFjdGl2ZSwgMSB9KTsKK30K
Kwordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbihB
c3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0LCBBc3NlbWJsZXI6OlJlZ2lzdGVy
SUQgZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpUeXBlIHJlbGF0aW9u
VHlwZSwgT3B0aW9uYWw8QXNzZW1ibGVyOjpSZWdpc3RlcklEPiB2YWx1ZSkKIHsKICAgICBBU1NF
UlQobV9zZWxlY3RvckNvbnRleHQgIT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yKTsK
IAotICAgIExvY2FsUmVnaXN0ZXIgY2hpbGRTdHlsZShtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKLSAg
ICBtX2Fzc2VtYmxlci5sb2FkUHRyKEFzc2VtYmxlcjo6QWRkcmVzcyhjaGVja2luZ0NvbnRleHQs
IE9CSkVDVF9PRkZTRVRPRihTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCwgZWxlbWVu
dFN0eWxlKSksIGNoaWxkU3R5bGUpOworICAgIC8vIEZJWE1FOiBBcHBlbmQgdG8gdmVjdG9yIHdp
dGhvdXQgYSBmdW5jdGlvbiBjYWxsIGF0IGxlYXN0IHdoZW4gdGhlcmUgaXMgc3VmZmljaWVudCBj
YXBhY2l0eS4KKyAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3Jl
Z2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOworICAg
IGZ1bmN0aW9uQ2FsbC5zZXRGdW5jdGlvbkFkZHJlc3MoZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9u
RWxlbWVudEZ1bmN0aW9uKTsKKyAgICBmdW5jdGlvbkNhbGwuc2V0VHdvQXJndW1lbnRzKGNoZWNr
aW5nQ29udGV4dCwgZWxlbWVudCk7CisgICAgZnVuY3Rpb25DYWxsLmNhbGwoKTsKIAotICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgbG9vayBpbnRvIGRvaW5nIHNvbWV0aGluZyBzbWFydCBpbiBNYWNy
b0Fzc2VtYmxlciBpbnN0ZWFkLgotICAgIEFzc2VtYmxlcjo6QWRkcmVzcyBmbGFnQWRkcmVzcyhj
aGlsZFN0eWxlLCBSZW5kZXJTdHlsZTo6bm9uaW5oZXJpdGVkRmxhZ3NNZW1vcnlPZmZzZXQoKSAr
IFJlbmRlclN0eWxlOjpOb25Jbmhlcml0ZWRGbGFnczo6ZmxhZ3NNZW1vcnlPZmZzZXQoKSk7Ci0j
aWYgQ1BVKEFSTV9USFVNQjIpCi0gICAgaW50MzJfdCBmbGFnTG93Qml0cyA9IG5ld0ZsYWcgJiAw
eGZmZmZmZmZmOwotICAgIGludDMyX3QgZmxhZ0hpZ2hCaXRzID0gbmV3RmxhZyA+PiAzMjsKLSAg
ICBpZiAoZmxhZ0xvd0JpdHMpCi0gICAgICAgIG1fYXNzZW1ibGVyLm9yMzIoQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoZmxhZ0xvd0JpdHMpLCBmbGFnQWRkcmVzcyk7Ci0gICAgaWYgKGZsYWdIaWdo
Qml0cykgewotICAgICAgICBBc3NlbWJsZXI6OkFkZHJlc3MgZmxhZ0hpZ2hBZGRyZXNzID0gZmxh
Z0FkZHJlc3Mud2l0aE9mZnNldCg0KTsKLSAgICAgICAgbV9hc3NlbWJsZXIub3IzMihBc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihmbGFnSGlnaEJpdHMpLCBmbGFnSGlnaEFkZHJlc3MpOwotICAgIH0K
LSNlbGlmIENQVShYODZfNjQpIHx8IENQVShBUk02NCkKLSAgICBMb2NhbFJlZ2lzdGVyIGZsYWdz
KG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwotICAgIG1fYXNzZW1ibGVyLmxvYWQ2NChmbGFnQWRkcmVz
cywgZmxhZ3MpOwotICAgIExvY2FsUmVnaXN0ZXIgaXNGaXJzdENoaWxkU3RhdGVGbGFnSW1tZWRp
YXRlKG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwotICAgIG1fYXNzZW1ibGVyLm1vdmUoQXNzZW1ibGVy
OjpUcnVzdGVkSW1tNjQobmV3RmxhZyksIGlzRmlyc3RDaGlsZFN0YXRlRmxhZ0ltbWVkaWF0ZSk7
Ci0gICAgbV9hc3NlbWJsZXIub3I2NChpc0ZpcnN0Q2hpbGRTdGF0ZUZsYWdJbW1lZGlhdGUsIGZs
YWdzKTsKLSAgICBtX2Fzc2VtYmxlci5zdG9yZTY0KGZsYWdzLCBmbGFnQWRkcmVzcyk7Ci0jZWxz
ZQotI2Vycm9yIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6YWRkRmxhZ3NUb0VsZW1lbnRTdHlsZUZy
b21Db250ZXh0IG5vdCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuCi0jZW5kaWYK
KyAgICBBc3NlbWJsZXI6OkFkZHJlc3MgdmVjdG9yQWRkcmVzcyhjaGVja2luZ0NvbnRleHQsIE9C
SkVDVF9PRkZTRVRPRihTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCwgc3R5bGVSZWxh
dGlvbnMpKTsKKyAgICBhdXRvIGRhdGFBZGRyZXNzID0gdmVjdG9yQWRkcmVzcy53aXRoT2Zmc2V0
KFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbnM6OmRhdGFNZW1vcnlPZmZzZXQoKSk7Cisg
ICAgYXV0byBzaXplQWRkcmVzcyA9IHZlY3RvckFkZHJlc3Mud2l0aE9mZnNldChTZWxlY3RvckNo
ZWNrZXI6OlN0eWxlUmVsYXRpb25zOjpzaXplTWVtb3J5T2Zmc2V0KCkpOworCisgICAgTG9jYWxS
ZWdpc3RlciByZWxhdGlvblBvaW50ZXIobV9yZWdpc3RlckFsbG9jYXRvcik7CisgICAgbV9hc3Nl
bWJsZXIubG9hZDMyKHNpemVBZGRyZXNzLCByZWxhdGlvblBvaW50ZXIpOworICAgIG1fYXNzZW1i
bGVyLnN1YjMyKEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZWxhdGlvblBvaW50ZXIpOwor
ICAgIG1fYXNzZW1ibGVyLm11bDMyKEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihTZWxl
Y3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb24pKSwgcmVsYXRpb25Qb2ludGVyLCByZWxhdGlvblBv
aW50ZXIpOworICAgIG1fYXNzZW1ibGVyLmFkZFB0cihkYXRhQWRkcmVzcywgcmVsYXRpb25Qb2lu
dGVyKTsKKworICAgIEFzc2VtYmxlcjo6QWRkcmVzcyB0eXBlQWRkcmVzcyhyZWxhdGlvblBvaW50
ZXIsIE9CSkVDVF9PRkZTRVRPRihTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb24sIHR5cGUp
KTsKKyAgICBtX2Fzc2VtYmxlci5zdG9yZTMyKEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHJlbGF0
aW9uVHlwZSksIHR5cGVBZGRyZXNzKTsKKworICAgIGlmICh2YWx1ZSkgeworICAgICAgICBBc3Nl
bWJsZXI6OkFkZHJlc3MgdmFsdWVBZGRyZXNzKHJlbGF0aW9uUG9pbnRlciwgT0JKRUNUX09GRlNF
VE9GKFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbiwgdmFsdWUpKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIuc3RvcmUzMigqdmFsdWUsIHZhbHVlQWRkcmVzcyk7CisgICAgfQogfQogCiBBc3Nl
bWJsZXI6Okp1bXBMaXN0IFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6anVtcElmTm9QcmV2aW91c0Fk
amFjZW50RWxlbWVudCgpCkBAIC0yNDIwLDI3ICsyNDM2LDYgQEAgdm9pZCBTZWxlY3RvckNvZGVH
ZW5lcmF0b3I6Om1vZHVsb0lzWmVybwogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQobW9kdWxvKEFz
c2VtYmxlcjo6Tm9uWmVybywgaW5wdXREaXZpZGVuZCwgZGl2aXNvcikpOwogfQogCi1zdGF0aWMg
dm9pZCBzZXROb2RlRmxhZyhBc3NlbWJsZXImIGFzc2VtYmxlciwgQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIGVsZW1lbnRBZGRyZXNzLCBpbnQzMl90IGZsYWcpCi17Ci0gICAgYXNzZW1ibGVyLm9yMzIo
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZmxhZyksIEFzc2VtYmxlcjo6QWRkcmVzcyhlbGVtZW50
QWRkcmVzcywgTm9kZTo6bm9kZUZsYWdzTWVtb3J5T2Zmc2V0KCkpKTsKLX0KLQotdm9pZCBTZWxl
Y3RvckNvZGVHZW5lcmF0b3I6Om1hcmtFbGVtZW50SWZSZXNvbHZpbmdTdHlsZShBc3NlbWJsZXI6
OlJlZ2lzdGVySUQgZWxlbWVudCwgaW50MzJfdCBub2RlRmxhZykKLXsKLSAgICBpZiAobV9zZWxl
Y3RvckNvbnRleHQgPT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IHNraXBNYXJraW5nOwotICAgIHsKLSAg
ICAgICAgTG9jYWxSZWdpc3RlciBjaGVja2luZ0NvbnRleHQobV9yZWdpc3RlckFsbG9jYXRvcik7
Ci0gICAgICAgIHNraXBNYXJraW5nLmFwcGVuZChqdW1wSWZOb3RSZXNvbHZpbmdTdHlsZShjaGVj
a2luZ0NvbnRleHQpKTsKLSAgICB9Ci0KLSAgICBzZXROb2RlRmxhZyhtX2Fzc2VtYmxlciwgZWxl
bWVudCwgbm9kZUZsYWcpOwotCi0gICAgc2tpcE1hcmtpbmcubGluaygmbV9hc3NlbWJsZXIpOwot
fQotCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6bGlua0ZhaWx1cmVzKEFzc2VtYmxlcjo6
SnVtcExpc3QmIGdsb2JhbEZhaWx1cmVDYXNlcywgQmFja3RyYWNraW5nQWN0aW9uIGJhY2t0cmFj
a2luZ0FjdGlvbiwgQXNzZW1ibGVyOjpKdW1wTGlzdCYgbG9jYWxGYWlsdXJlQ2FzZXMpCiB7CiAg
ICAgc3dpdGNoIChiYWNrdHJhY2tpbmdBY3Rpb24pIHsKQEAgLTI1NDcsMTcgKzI1NDIsMTcgQEAg
dm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogICAgIGlmIChmcmFnbWVu
dC5wc2V1ZG9DbGFzc2VzLmNvbnRhaW5zKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0FjdGl2ZSkp
CiAgICAgICAgIGdlbmVyYXRlRWxlbWVudElzQWN0aXZlKG1hdGNoaW5nUG9zdFRhZ05hbWVGYWls
dXJlQ2FzZXMsIGZyYWdtZW50KTsKICAgICBpZiAoZnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5jb250
YWlucyhDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NFbXB0eSkpCi0gICAgICAgIGdlbmVyYXRlRWxl
bWVudElzRW1wdHkobWF0Y2hpbmdQb3N0VGFnTmFtZUZhaWx1cmVDYXNlcywgZnJhZ21lbnQpOwor
ICAgICAgICBnZW5lcmF0ZUVsZW1lbnRJc0VtcHR5KG1hdGNoaW5nUG9zdFRhZ05hbWVGYWlsdXJl
Q2FzZXMpOwogICAgIGlmIChmcmFnbWVudC5wc2V1ZG9DbGFzc2VzLmNvbnRhaW5zKENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzc0hvdmVyKSkKICAgICAgICAgZ2VuZXJhdGVFbGVtZW50SXNIb3ZlcmVk
KG1hdGNoaW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKICAgICBpZiAoZnJh
Z21lbnQucHNldWRvQ2xhc3Nlcy5jb250YWlucyhDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NPbmx5
Q2hpbGQpKQotICAgICAgICBnZW5lcmF0ZUVsZW1lbnRJc09ubHlDaGlsZChtYXRjaGluZ1Bvc3RU
YWdOYW1lRmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7CisgICAgICAgIGdlbmVyYXRlRWxlbWVudElz
T25seUNoaWxkKG1hdGNoaW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2FzZXMpOwogICAgIGlmIChmcmFn
bWVudC5wc2V1ZG9DbGFzc2VzLmNvbnRhaW5zKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1BsYWNl
aG9sZGVyU2hvd24pKQotICAgICAgICBnZW5lcmF0ZUVsZW1lbnRIYXNQbGFjZWhvbGRlclNob3du
KG1hdGNoaW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKKyAgICAgICAgZ2Vu
ZXJhdGVFbGVtZW50SGFzUGxhY2Vob2xkZXJTaG93bihtYXRjaGluZ1Bvc3RUYWdOYW1lRmFpbHVy
ZUNhc2VzKTsKICAgICBpZiAoZnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5jb250YWlucyhDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NGaXJzdENoaWxkKSkKLSAgICAgICAgZ2VuZXJhdGVFbGVtZW50SXNG
aXJzdENoaWxkKG1hdGNoaW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKKyAg
ICAgICAgZ2VuZXJhdGVFbGVtZW50SXNGaXJzdENoaWxkKG1hdGNoaW5nUG9zdFRhZ05hbWVGYWls
dXJlQ2FzZXMpOwogICAgIGlmIChmcmFnbWVudC5wc2V1ZG9DbGFzc2VzLmNvbnRhaW5zKENTU1Nl
bGVjdG9yOjpQc2V1ZG9DbGFzc0xhc3RDaGlsZCkpCi0gICAgICAgIGdlbmVyYXRlRWxlbWVudElz
TGFzdENoaWxkKG1hdGNoaW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKKyAg
ICAgICAgZ2VuZXJhdGVFbGVtZW50SXNMYXN0Q2hpbGQobWF0Y2hpbmdQb3N0VGFnTmFtZUZhaWx1
cmVDYXNlcyk7CiAgICAgaWYgKCFmcmFnbWVudC5udGhDaGlsZEZpbHRlcnMuaXNFbXB0eSgpKQog
ICAgICAgICBnZW5lcmF0ZUVsZW1lbnRJc050aENoaWxkKG1hdGNoaW5nUG9zdFRhZ05hbWVGYWls
dXJlQ2FzZXMsIGZyYWdtZW50KTsKICAgICBpZiAoIWZyYWdtZW50Lm50aExhc3RDaGlsZEZpbHRl
cnMuaXNFbXB0eSgpKQpAQCAtMzA1Miw1NSArMzA0NywyMSBAQCB2b2lkIFNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6Z2VuZXJhdGVDb250CiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChmdW5jdGlvbkNh
bGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVyblZhbHVlKEFzc2VtYmxlcjo6WmVybykpOwog
fQogCi1zdGF0aWMgdm9pZCBzZXRGaXJzdENoaWxkU3RhdGUoRWxlbWVudCogZWxlbWVudCkKLXsK
LSAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKSkKLSAg
ICAgICAgc3R5bGUtPnNldEZpcnN0Q2hpbGRTdGF0ZSgpOwotfQotCiBzdGF0aWMgYm9vbCBlbGVt
ZW50SXNBY3RpdmUoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICByZXR1cm4gZWxlbWVudC0+YWN0
aXZlKCkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKCplbGVt
ZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBY3RpdmUpOwogfQogCi1zdGF0aWMgYm9vbCBl
bGVtZW50SXNBY3RpdmVGb3JTdHlsZVJlc29sdXRpb24oRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQqIGNoZWNraW5nQ29udGV4dCkKLXsKLSAg
ICBpZiAoY2hlY2tpbmdDb250ZXh0LT5yZXNvbHZpbmdNb2RlID09IFNlbGVjdG9yQ2hlY2tlcjo6
TW9kZTo6UmVzb2x2aW5nU3R5bGUpCi0gICAgICAgIGVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0
ZWRCeUFjdGl2ZSgpOwotICAgIHJldHVybiBlbGVtZW50LT5hY3RpdmUoKSB8fCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoKmVsZW1lbnQsIENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc0FjdGl2ZSk7Ci19Ci0KIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZUVsZW1lbnRJc0FjdGl2ZShBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNv
bnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQogewogICAgIGdlbmVyYXRlU3BlY2lhbEZh
aWx1cmVJblF1aXJrc01vZGVGb3JBY3RpdmVBbmRIb3ZlcklmTmVlZGVkKGZhaWx1cmVDYXNlcywg
ZnJhZ21lbnQpOwotICAgIGlmIChtX3NlbGVjdG9yQ29udGV4dCA9PSBTZWxlY3RvckNvbnRleHQ6
OlF1ZXJ5U2VsZWN0b3IpIHsKLSAgICAgICAgRnVuY3Rpb25DYWxsIGZ1bmN0aW9uQ2FsbChtX2Fz
c2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9zdGFja0FsbG9jYXRvciwgbV9mdW5jdGlv
bkNhbGxzKTsKLSAgICAgICAgZnVuY3Rpb25DYWxsLnNldEZ1bmN0aW9uQWRkcmVzcyhlbGVtZW50
SXNBY3RpdmUpOwotICAgICAgICBmdW5jdGlvbkNhbGwuc2V0T25lQXJndW1lbnQoZWxlbWVudEFk
ZHJlc3NSZWdpc3Rlcik7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoZnVuY3Rpb25DYWxs
LmNhbGxBbmRCcmFuY2hPbkJvb2xlYW5SZXR1cm5WYWx1ZShBc3NlbWJsZXI6Olplcm8pKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGlmIChmcmFnbWVudE1hdGNoZXNUaGVSaWdodG1v
c3RFbGVtZW50KG1fc2VsZWN0b3JDb250ZXh0LCBmcmFnbWVudCkpIHsKLSAgICAgICAgTG9jYWxS
ZWdpc3RlciBjaGVja2luZ0NvbnRleHQobV9yZWdpc3RlckFsbG9jYXRvcik7Ci0gICAgICAgIEFz
c2VtYmxlcjo6SnVtcCBub3RSZXNvbHZpbmdTdHlsZSA9IGp1bXBJZk5vdFJlc29sdmluZ1N0eWxl
KGNoZWNraW5nQ29udGV4dCk7Ci0gICAgICAgIGFkZEZsYWdzVG9FbGVtZW50U3R5bGVGcm9tQ29u
dGV4dChjaGVja2luZ0NvbnRleHQsIFJlbmRlclN0eWxlOjpOb25Jbmhlcml0ZWRGbGFnczo6Zmxh
Z0lzYWZmZWN0ZWRCeUFjdGl2ZSgpKTsKLSAgICAgICAgbm90UmVzb2x2aW5nU3R5bGUubGluaygm
bV9hc3NlbWJsZXIpOworICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5
bGUoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9u
OjpBZmZlY3RlZEJ5QWN0aXZlKTsKIAotICAgICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxs
KG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1
bmN0aW9uQ2FsbHMpOwotICAgICAgICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRyZXNzKGVs
ZW1lbnRJc0FjdGl2ZSk7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRPbmVBcmd1bWVudChlbGVt
ZW50QWRkcmVzc1JlZ2lzdGVyKTsKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChmdW5jdGlv
bkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVyblZhbHVlKEFzc2VtYmxlcjo6WmVybykp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0Nv
bnRleHQgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlUmVnaXN0ZXJXaXRoUHJlZmVyZW5j
ZShKU0M6OkdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIGxvYWRDaGVja2luZ0NvbnRl
eHQoY2hlY2tpbmdDb250ZXh0KTsKLSAgICAgICAgbV9yZWdpc3RlckFsbG9jYXRvci5kZWFsbG9j
YXRlUmVnaXN0ZXIoY2hlY2tpbmdDb250ZXh0KTsKLQotICAgICAgICBGdW5jdGlvbkNhbGwgZnVu
Y3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2Nh
dG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOwotICAgICAgICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25B
ZGRyZXNzKGVsZW1lbnRJc0FjdGl2ZUZvclN0eWxlUmVzb2x1dGlvbik7Ci0gICAgICAgIGZ1bmN0
aW9uQ2FsbC5zZXRUd29Bcmd1bWVudHMoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgY2hlY2tpbmdD
b250ZXh0KTsKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChmdW5jdGlvbkNhbGwuY2FsbEFu
ZEJyYW5jaE9uQm9vbGVhblJldHVyblZhbHVlKEFzc2VtYmxlcjo6WmVybykpOwotICAgIH0KKyAg
ICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2Nh
dG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOworICAgIGZ1bmN0aW9uQ2Fs
bC5zZXRGdW5jdGlvbkFkZHJlc3MoZWxlbWVudElzQWN0aXZlKTsKKyAgICBmdW5jdGlvbkNhbGwu
c2V0T25lQXJndW1lbnQoZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7CisgICAgZmFpbHVyZUNhc2Vz
LmFwcGVuZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVyblZhbHVlKEFz
c2VtYmxlcjo6WmVybykpOwogfQogCiBzdGF0aWMgdm9pZCBqdW1wSWZFbGVtZW50SXNOb3RFbXB0
eShBc3NlbWJsZXImIGFzc2VtYmxlciwgUmVnaXN0ZXJBbGxvY2F0b3ImIHJlZ2lzdGVyQWxsb2Nh
dG9yLCBBc3NlbWJsZXI6Okp1bXBMaXN0JiBub3RFbXB0eUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lz
dGVySUQgZWxlbWVudCkKQEAgLTMxMjksMTggKzMwOTAsNyBAQCBzdGF0aWMgdm9pZCBqdW1wSWZF
bGVtZW50SXNOb3RFbXB0eShBc3NlCiAgICAgbm9Nb3JlQ2hpbGRyZW4ubGluaygmYXNzZW1ibGVy
KTsKIH0KIAotc3RhdGljIHZvaWQgc2V0RWxlbWVudFN0eWxlSXNBZmZlY3RlZEJ5RW1wdHkoRWxl
bWVudCogZWxlbWVudCkKLXsKLSAgICBlbGVtZW50LT5zZXRTdHlsZUFmZmVjdGVkQnlFbXB0eSgp
OwotfQotCi1zdGF0aWMgdm9pZCBzZXRFbGVtZW50U3R5bGVGcm9tQ29udGV4dElzQWZmZWN0ZWRC
eUVtcHR5QW5kVXBkYXRlUmVuZGVyU3R5bGVJZk5lY2Vzc2FyeShTZWxlY3RvckNoZWNrZXI6OkNo
ZWNraW5nQ29udGV4dCogY29udGV4dCwgYm9vbCBpc0VtcHR5KQotewotICAgIEFTU0VSVChjb250
ZXh0LT5lbGVtZW50U3R5bGUpOwotICAgIGNvbnRleHQtPmVsZW1lbnRTdHlsZS0+c2V0RW1wdHlT
dGF0ZShpc0VtcHR5KTsKLX0KLQotdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRl
RWxlbWVudElzRW1wdHkoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBT
ZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCkKK3ZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZUVsZW1lbnRJc0VtcHR5KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcykK
IHsKICAgICBpZiAobV9zZWxlY3RvckNvbnRleHQgPT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNl
bGVjdG9yKSB7CiAgICAgICAgIGp1bXBJZkVsZW1lbnRJc05vdEVtcHR5KG1fYXNzZW1ibGVyLCBt
X3JlZ2lzdGVyQWxsb2NhdG9yLCBmYWlsdXJlQ2FzZXMsIGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIp
OwpAQCAtMzE1NSwzOCArMzEwNSwxMiBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVFbGVtCiAgICAgbV9hc3NlbWJsZXIubW92ZShBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigx
KSwgaXNFbXB0eVJlc3VsdHMpOwogICAgIG5vdEVtcHR5LmxpbmsoJm1fYXNzZW1ibGVyKTsKIAot
ICAgIEFzc2VtYmxlcjo6SnVtcCBza2lwTWFya2luZzsKLSAgICBpZiAoZnJhZ21lbnRNYXRjaGVz
VGhlUmlnaHRtb3N0RWxlbWVudChtX3NlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnQpKSB7Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIExvY2FsUmVnaXN0ZXIgY2hlY2tpbmdDb250ZXh0KG1fcmVnaXN0
ZXJBbGxvY2F0b3IpOwotICAgICAgICAgICAgc2tpcE1hcmtpbmcgPSBqdW1wSWZOb3RSZXNvbHZp
bmdTdHlsZShjaGVja2luZ0NvbnRleHQpOwotCi0gICAgICAgICAgICBGdW5jdGlvbkNhbGwgZnVu
Y3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2Nh
dG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOwotICAgICAgICAgICAgZnVuY3Rpb25DYWxsLnNldEZ1bmN0
aW9uQWRkcmVzcyhzZXRFbGVtZW50U3R5bGVGcm9tQ29udGV4dElzQWZmZWN0ZWRCeUVtcHR5QW5k
VXBkYXRlUmVuZGVyU3R5bGVJZk5lY2Vzc2FyeSk7Ci0gICAgICAgICAgICBmdW5jdGlvbkNhbGwu
c2V0VHdvQXJndW1lbnRzKGNoZWNraW5nQ29udGV4dCwgaXNFbXB0eVJlc3VsdHMpOwotICAgICAg
ICAgICAgZnVuY3Rpb25DYWxsLmNhbGwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEZ1bmN0aW9u
Q2FsbCBmdW5jdGlvbkNhbGwobV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJBbGxvY2F0b3IsIG1fc3Rh
Y2tBbGxvY2F0b3IsIG1fZnVuY3Rpb25DYWxscyk7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRG
dW5jdGlvbkFkZHJlc3Moc2V0RWxlbWVudFN0eWxlSXNBZmZlY3RlZEJ5RW1wdHkpOwotICAgICAg
ICBmdW5jdGlvbkNhbGwuc2V0T25lQXJndW1lbnQoZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7Ci0g
ICAgICAgIGZ1bmN0aW9uQ2FsbC5jYWxsKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgewotICAg
ICAgICAgICAgTG9jYWxSZWdpc3RlciBjaGVja2luZ0NvbnRleHQobV9yZWdpc3RlckFsbG9jYXRv
cik7Ci0gICAgICAgICAgICBza2lwTWFya2luZyA9IGp1bXBJZk5vdFJlc29sdmluZ1N0eWxlKGNo
ZWNraW5nQ29udGV4dCk7Ci0gICAgICAgIH0KLSAgICAgICAgRnVuY3Rpb25DYWxsIGZ1bmN0aW9u
Q2FsbChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9zdGFja0FsbG9jYXRvciwg
bV9mdW5jdGlvbkNhbGxzKTsKLSAgICAgICAgZnVuY3Rpb25DYWxsLnNldEZ1bmN0aW9uQWRkcmVz
cyhzZXRFbGVtZW50U3R5bGVJc0FmZmVjdGVkQnlFbXB0eSk7Ci0gICAgICAgIGZ1bmN0aW9uQ2Fs
bC5zZXRPbmVBcmd1bWVudChlbGVtZW50QWRkcmVzc1JlZ2lzdGVyKTsKLSAgICAgICAgZnVuY3Rp
b25DYWxsLmNhbGwoKTsKLSAgICB9Ci0gICAgc2tpcE1hcmtpbmcubGluaygmbV9hc3NlbWJsZXIp
OworICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFk
ZHJlc3NSZWdpc3RlciwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5
RW1wdHksIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRChpc0VtcHR5UmVzdWx0cykpOwogCiAgICAgZmFp
bHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2hUZXN0MzIoQXNzZW1ibGVyOjpaZXJv
LCBpc0VtcHR5UmVzdWx0cykpOwogfQogCi12b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVFbGVtZW50SXNGaXJzdENoaWxkKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNl
cywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCit2b2lkIFNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNGaXJzdENoaWxkKEFzc2VtYmxlcjo6SnVtcExpc3Qm
IGZhaWx1cmVDYXNlcykKIHsKICAgICBpZiAobV9zZWxlY3RvckNvbnRleHQgPT0gU2VsZWN0b3JD
b250ZXh0OjpRdWVyeVNlbGVjdG9yKSB7CiAgICAgICAgIEFzc2VtYmxlcjo6SnVtcExpc3Qgc3Vj
Y2Vzc0Nhc2UgPSBqdW1wSWZOb1ByZXZpb3VzQWRqYWNlbnRFbGVtZW50KCk7CkBAIC0zMjE2LDIy
ICszMTQwLDE0IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAg
ICBMb2NhbFJlZ2lzdGVyIGNoZWNraW5nQ29udGV4dChtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKICAg
ICBBc3NlbWJsZXI6Okp1bXAgbm90UmVzb2x2aW5nU3R5bGUgPSBqdW1wSWZOb3RSZXNvbHZpbmdT
dHlsZShjaGVja2luZ0NvbnRleHQpOwogCi0gICAgc2V0Tm9kZUZsYWcobV9hc3NlbWJsZXIsIHBh
cmVudEVsZW1lbnQsIE5vZGU6OmZsYWdDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXNG
bGFnKCkpOworICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIHBh
cmVudEVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZl
Y3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKTsKICAgICBtX3JlZ2lzdGVyQWxsb2NhdG9yLmRlYWxsb2Nh
dGVSZWdpc3RlcihwYXJlbnRFbGVtZW50KTsKIAogICAgIC8vIFRoZSBwYXJlbnQgbWFya2luZyBp
cyB1bmNvbmRpdGlvbmFsLiBJZiB0aGUgbWF0Y2hpbmcgaXMgbm90IGEgc3VjY2Vzcywgd2UgY2Fu
IG5vdyBmYWlsLgogICAgIC8vIE90aGVyd2lzZSB3ZSBuZWVkIHRvIGFwcGx5IHNldEZpcnN0Q2hp
bGRTdGF0ZSgpIG9uIHRoZSBSZW5kZXJTdHlsZS4KICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1f
YXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Ok5vblplcm8sIGlzRmlyc3RDaGlsZFJl
Z2lzdGVyKSk7CiAKLSAgICBpZiAoZnJhZ21lbnRNYXRjaGVzVGhlUmlnaHRtb3N0RWxlbWVudCht
X3NlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnQpKQotICAgICAgICBhZGRGbGFnc1RvRWxlbWVudFN0
eWxlRnJvbUNvbnRleHQoY2hlY2tpbmdDb250ZXh0LCBSZW5kZXJTdHlsZTo6Tm9uSW5oZXJpdGVk
RmxhZ3M6OnNldEZpcnN0Q2hpbGRTdGF0ZUZsYWdzKCkpOwotICAgIGVsc2UgewotICAgICAgICBG
dW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9y
LCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOwotICAgICAgICBmdW5jdGlvbkNh
bGwuc2V0RnVuY3Rpb25BZGRyZXNzKHNldEZpcnN0Q2hpbGRTdGF0ZSk7Ci0gICAgICAgIEFzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50QWRkcmVzcyA9IGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXI7
Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRPbmVBcmd1bWVudChlbGVtZW50QWRkcmVzcyk7Ci0g
ICAgICAgIGZ1bmN0aW9uQ2FsbC5jYWxsKCk7Ci0gICAgfQorICAgIGdlbmVyYXRlQWRkU3R5bGVS
ZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVjdG9y
Q2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6Rmlyc3RDaGlsZCk7CiAKICAgICBub3RSZXNvbHZpbmdT
dHlsZS5saW5rKCZtX2Fzc2VtYmxlcik7CiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2Vt
Ymxlci5icmFuY2hUZXN0MzIoQXNzZW1ibGVyOjpOb25aZXJvLCBpc0ZpcnN0Q2hpbGRSZWdpc3Rl
cikpOwpAQCAtMzI0Miw0NCArMzE1OCwxNiBAQCBzdGF0aWMgYm9vbCBlbGVtZW50SXNIb3ZlcmVk
KEVsZW1lbnQqIGVsCiAgICAgcmV0dXJuIGVsZW1lbnQtPmhvdmVyZWQoKSB8fCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoKmVsZW1lbnQsIENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc0hvdmVyKTsKIH0KIAotc3RhdGljIGJvb2wgZWxlbWVudElzSG92ZXJlZEZvclN0
eWxlUmVzb2x1dGlvbihFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNo
ZWNraW5nQ29udGV4dCogY2hlY2tpbmdDb250ZXh0KQotewotICAgIGlmIChjaGVja2luZ0NvbnRl
eHQtPnJlc29sdmluZ01vZGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZpbmdTdHls
ZSkKLSAgICAgICAgZWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5SG92ZXIoKTsKLSAgICBy
ZXR1cm4gZWxlbWVudC0+aG92ZXJlZCgpIHx8IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9y
Y2VQc2V1ZG9TdGF0ZSgqZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSG92ZXIpOwot
fQotCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNIb3ZlcmVk
KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVu
dCYgZnJhZ21lbnQpCiB7CiAgICAgZ2VuZXJhdGVTcGVjaWFsRmFpbHVyZUluUXVpcmtzTW9kZUZv
ckFjdGl2ZUFuZEhvdmVySWZOZWVkZWQoZmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7Ci0gICAgaWYg
KG1fc2VsZWN0b3JDb250ZXh0ID09IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3Rvcikgewot
ICAgICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVy
QWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOwotICAgICAgICBm
dW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRyZXNzKGVsZW1lbnRJc0hvdmVyZWQpOwotICAgICAg
ICBmdW5jdGlvbkNhbGwuc2V0T25lQXJndW1lbnQoZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7Ci0g
ICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoZnVuY3Rpb25DYWxsLmNhbGxBbmRCcmFuY2hPbkJv
b2xlYW5SZXR1cm5WYWx1ZShBc3NlbWJsZXI6Olplcm8pKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KIAotICAgIGlmIChmcmFnbWVudE1hdGNoZXNUaGVSaWdodG1vc3RFbGVtZW50KG1fc2VsZWN0
b3JDb250ZXh0LCBmcmFnbWVudCkpIHsKLSAgICAgICAgTG9jYWxSZWdpc3RlcldpdGhQcmVmZXJl
bmNlIGNoZWNraW5nQ29udGV4dChtX3JlZ2lzdGVyQWxsb2NhdG9yLCBKU0M6OkdQUkluZm86OmFy
Z3VtZW50R1BSMSk7Ci0gICAgICAgIEFzc2VtYmxlcjo6SnVtcCBub3RSZXNvbHZpbmdTdHlsZSA9
IGp1bXBJZk5vdFJlc29sdmluZ1N0eWxlKGNoZWNraW5nQ29udGV4dCk7Ci0gICAgICAgIGFkZEZs
YWdzVG9FbGVtZW50U3R5bGVGcm9tQ29udGV4dChjaGVja2luZ0NvbnRleHQsIFJlbmRlclN0eWxl
OjpOb25Jbmhlcml0ZWRGbGFnczo6ZmxhZ0lzYWZmZWN0ZWRCeUhvdmVyKCkpOwotICAgICAgICBu
b3RSZXNvbHZpbmdTdHlsZS5saW5rKCZtX2Fzc2VtYmxlcik7CisgICAgZ2VuZXJhdGVBZGRTdHls
ZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTZWxlY3Rv
ckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlIb3Zlcik7CiAKLSAgICAgICAgRnVu
Y3Rpb25DYWxsIGZ1bmN0aW9uQ2FsbChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwg
bV9zdGFja0FsbG9jYXRvciwgbV9mdW5jdGlvbkNhbGxzKTsKLSAgICAgICAgZnVuY3Rpb25DYWxs
LnNldEZ1bmN0aW9uQWRkcmVzcyhlbGVtZW50SXNIb3ZlcmVkKTsKLSAgICAgICAgZnVuY3Rpb25D
YWxsLnNldE9uZUFyZ3VtZW50KGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIpOwotICAgICAgICBmYWls
dXJlQ2FzZXMuYXBwZW5kKGZ1bmN0aW9uQ2FsbC5jYWxsQW5kQnJhbmNoT25Cb29sZWFuUmV0dXJu
VmFsdWUoQXNzZW1ibGVyOjpaZXJvKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQXNzZW1ibGVy
OjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCA9IG1fcmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2Nh
dGVSZWdpc3RlcldpdGhQcmVmZXJlbmNlKEpTQzo6R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAg
ICAgICAgbG9hZENoZWNraW5nQ29udGV4dChjaGVja2luZ0NvbnRleHQpOwotICAgICAgICBtX3Jl
Z2lzdGVyQWxsb2NhdG9yLmRlYWxsb2NhdGVSZWdpc3RlcihjaGVja2luZ0NvbnRleHQpOwotCi0g
ICAgICAgIEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbkNhbGwobV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJB
bGxvY2F0b3IsIG1fc3RhY2tBbGxvY2F0b3IsIG1fZnVuY3Rpb25DYWxscyk7Ci0gICAgICAgIGZ1
bmN0aW9uQ2FsbC5zZXRGdW5jdGlvbkFkZHJlc3MoZWxlbWVudElzSG92ZXJlZEZvclN0eWxlUmVz
b2x1dGlvbik7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRUd29Bcmd1bWVudHMoZWxlbWVudEFk
ZHJlc3NSZWdpc3RlciwgY2hlY2tpbmdDb250ZXh0KTsKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFw
cGVuZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVyblZhbHVlKEFzc2Vt
Ymxlcjo6WmVybykpOwotICAgIH0KKyAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNz
ZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9u
Q2FsbHMpOworICAgIGZ1bmN0aW9uQ2FsbC5zZXRGdW5jdGlvbkFkZHJlc3MoZWxlbWVudElzSG92
ZXJlZCk7CisgICAgZnVuY3Rpb25DYWxsLnNldE9uZUFyZ3VtZW50KGVsZW1lbnRBZGRyZXNzUmVn
aXN0ZXIpOworICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoZnVuY3Rpb25DYWxsLmNhbGxBbmRCcmFu
Y2hPbkJvb2xlYW5SZXR1cm5WYWx1ZShBc3NlbWJsZXI6Olplcm8pKTsKIH0KIAogdm9pZCBTZWxl
Y3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudElzSW5MYW5ndWFnZShBc3NlbWJsZXI6
Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50
KQpAQCAtMzMwMCwxMyArMzE4OCw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZUVsZW0KICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGZ1bmN0aW9uQ2FsbC5jYWxsQW5kQnJh
bmNoT25Cb29sZWFuUmV0dXJuVmFsdWUoQXNzZW1ibGVyOjpaZXJvKSk7CiB9CiAKLXN0YXRpYyB2
b2lkIHNldExhc3RDaGlsZFN0YXRlKEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKFJlbmRl
clN0eWxlKiBzdHlsZSA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkpCi0gICAgICAgIHN0eWxlLT5z
ZXRMYXN0Q2hpbGRTdGF0ZSgpOwotfQotCi12b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVFbGVtZW50SXNMYXN0Q2hpbGQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2Vz
LCBjb25zdCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCkKK3ZvaWQgU2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc0xhc3RDaGlsZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBm
YWlsdXJlQ2FzZXMpCiB7CiAgICAgaWYgKG1fc2VsZWN0b3JDb250ZXh0ID09IFNlbGVjdG9yQ29u
dGV4dDo6UXVlcnlTZWxlY3RvcikgewogICAgICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IHN1Y2Nl
c3NDYXNlID0ganVtcElmTm9OZXh0QWRqYWNlbnRFbGVtZW50KCk7CkBAIC0zMzQyLDM2ICszMjI0
LDIwIEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICBMb2Nh
bFJlZ2lzdGVyIGNoZWNraW5nQ29udGV4dChtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKICAgICBBc3Nl
bWJsZXI6Okp1bXAgbm90UmVzb2x2aW5nU3R5bGUgPSBqdW1wSWZOb3RSZXNvbHZpbmdTdHlsZShj
aGVja2luZ0NvbnRleHQpOwogCi0gICAgc2V0Tm9kZUZsYWcobV9hc3NlbWJsZXIsIHBhcmVudEVs
ZW1lbnQsIE5vZGU6OmZsYWdDaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlc0ZsYWcoKSk7
CisgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgcGFyZW50RWxl
bWVudCwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlM
YXN0Q2hpbGRSdWxlcyk7CiAgICAgbV9yZWdpc3RlckFsbG9jYXRvci5kZWFsbG9jYXRlUmVnaXN0
ZXIocGFyZW50RWxlbWVudCk7CiAKICAgICAvLyBUaGUgcGFyZW50IG1hcmtpbmcgaXMgdW5jb25k
aXRpb25hbC4gSWYgdGhlIG1hdGNoaW5nIGlzIG5vdCBhIHN1Y2Nlc3MsIHdlIGNhbiBub3cgZmFp
bC4KICAgICAvLyBPdGhlcndpc2Ugd2UgbmVlZCB0byBhcHBseSBzZXRMYXN0Q2hpbGRTdGF0ZSgp
IG9uIHRoZSBSZW5kZXJTdHlsZS4KICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVy
LmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Ok5vblplcm8sIGlzTGFzdENoaWxkUmVnaXN0ZXIpKTsK
IAotICAgIGlmIChmcmFnbWVudE1hdGNoZXNUaGVSaWdodG1vc3RFbGVtZW50KG1fc2VsZWN0b3JD
b250ZXh0LCBmcmFnbWVudCkpCi0gICAgICAgIGFkZEZsYWdzVG9FbGVtZW50U3R5bGVGcm9tQ29u
dGV4dChjaGVja2luZ0NvbnRleHQsIFJlbmRlclN0eWxlOjpOb25Jbmhlcml0ZWRGbGFnczo6c2V0
TGFzdENoaWxkU3RhdGVGbGFncygpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgRnVuY3Rpb25DYWxs
IGZ1bmN0aW9uQ2FsbChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9zdGFja0Fs
bG9jYXRvciwgbV9mdW5jdGlvbkNhbGxzKTsKLSAgICAgICAgZnVuY3Rpb25DYWxsLnNldEZ1bmN0
aW9uQWRkcmVzcyhzZXRMYXN0Q2hpbGRTdGF0ZSk7Ci0gICAgICAgIEFzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBlbGVtZW50QWRkcmVzcyA9IGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXI7Ci0gICAgICAgIGZ1
bmN0aW9uQ2FsbC5zZXRPbmVBcmd1bWVudChlbGVtZW50QWRkcmVzcyk7Ci0gICAgICAgIGZ1bmN0
aW9uQ2FsbC5jYWxsKCk7Ci0gICAgfQorICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbihjaGVj
a2luZ0NvbnRleHQsIGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5
bGVSZWxhdGlvbjo6TGFzdENoaWxkKTsKIAogICAgIG5vdFJlc29sdmluZ1N0eWxlLmxpbmsoJm1f
YXNzZW1ibGVyKTsKICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRl
c3QzMihBc3NlbWJsZXI6Ok5vblplcm8sIGlzTGFzdENoaWxkUmVnaXN0ZXIpKTsKIH0KIAotc3Rh
dGljIHZvaWQgc2V0T25seUNoaWxkU3RhdGUoRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBpZiAo
UmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKSkgewotICAgICAgICBz
dHlsZS0+c2V0Rmlyc3RDaGlsZFN0YXRlKCk7Ci0gICAgICAgIHN0eWxlLT5zZXRMYXN0Q2hpbGRT
dGF0ZSgpOwotICAgIH0KLX0KLQotdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRl
RWxlbWVudElzT25seUNoaWxkKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29u
c3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCit2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVFbGVtZW50SXNPbmx5Q2hpbGQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVy
ZUNhc2VzKQogewogICAgIC8vIElzIE9ubHkgY2hpbGQgaXMgcHJldHR5IG11Y2ggYSBjb21iaW5h
dGlvbiBvZiBpc0ZpcnN0Q2hpbGQgKyBpc0xhc3RDaGlsZC4gVGhlIG1haW4gZGlmZmVyZW5jZSBp
cyB0aGF0IHRyZWUgbWFya2luZyBpcyBjb21iaW5lZC4KICAgICBpZiAobV9zZWxlY3RvckNvbnRl
eHQgPT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yKSB7CkBAIC0zNDE3LDQ0ICszMjgz
LDI3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICBMb2Nh
bFJlZ2lzdGVyIGNoZWNraW5nQ29udGV4dChtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKICAgICBBc3Nl
bWJsZXI6Okp1bXAgbm90UmVzb2x2aW5nU3R5bGUgPSBqdW1wSWZOb3RSZXNvbHZpbmdTdHlsZShj
aGVja2luZ0NvbnRleHQpOwogCi0gICAgc2V0Tm9kZUZsYWcobV9hc3NlbWJsZXIsIHBhcmVudEVs
ZW1lbnQsIE5vZGU6OmZsYWdDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXNGbGFnKCkg
fCBOb2RlOjpmbGFnQ2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXNGbGFnKCkpOworICAg
IGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIHBhcmVudEVsZW1lbnQs
IFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RD
aGlsZFJ1bGVzKTsKKyAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0
LCBwYXJlbnRFbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkNoaWxkcmVu
QWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKTsKKwogICAgIG1fcmVnaXN0ZXJBbGxvY2F0b3IuZGVh
bGxvY2F0ZVJlZ2lzdGVyKHBhcmVudEVsZW1lbnQpOwogCiAgICAgLy8gVGhlIHBhcmVudCBtYXJr
aW5nIGlzIHVuY29uZGl0aW9uYWwuIElmIHRoZSBtYXRjaGluZyBpcyBub3QgYSBzdWNjZXNzLCB3
ZSBjYW4gbm93IGZhaWwuCiAgICAgLy8gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gYXBwbHkgc2V0TGFz
dENoaWxkU3RhdGUoKSBvbiB0aGUgUmVuZGVyU3R5bGUuCiAgICAgZmFpbHVyZUNhc2VzLmFwcGVu
ZChtX2Fzc2VtYmxlci5icmFuY2hUZXN0MzIoQXNzZW1ibGVyOjpOb25aZXJvLCBpc09ubHlDaGls
ZFJlZ2lzdGVyKSk7CiAKLSAgICBpZiAoZnJhZ21lbnRNYXRjaGVzVGhlUmlnaHRtb3N0RWxlbWVu
dChtX3NlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnQpKQotICAgICAgICBhZGRGbGFnc1RvRWxlbWVu
dFN0eWxlRnJvbUNvbnRleHQoY2hlY2tpbmdDb250ZXh0LCBSZW5kZXJTdHlsZTo6Tm9uSW5oZXJp
dGVkRmxhZ3M6OnNldEZpcnN0Q2hpbGRTdGF0ZUZsYWdzKCkgfCBSZW5kZXJTdHlsZTo6Tm9uSW5o
ZXJpdGVkRmxhZ3M6OnNldExhc3RDaGlsZFN0YXRlRmxhZ3MoKSk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbkNhbGwobV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJBbGxv
Y2F0b3IsIG1fc3RhY2tBbGxvY2F0b3IsIG1fZnVuY3Rpb25DYWxscyk7Ci0gICAgICAgIGZ1bmN0
aW9uQ2FsbC5zZXRGdW5jdGlvbkFkZHJlc3Moc2V0T25seUNoaWxkU3RhdGUpOwotICAgICAgICBB
c3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVudEFkZHJlc3MgPSBlbGVtZW50QWRkcmVzc1JlZ2lz
dGVyOwotICAgICAgICBmdW5jdGlvbkNhbGwuc2V0T25lQXJndW1lbnQoZWxlbWVudEFkZHJlc3Mp
OwotICAgICAgICBmdW5jdGlvbkNhbGwuY2FsbCgpOwotICAgIH0KKyAgICBnZW5lcmF0ZUFkZFN0
eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTZWxl
Y3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkZpcnN0Q2hpbGQpOworICAgIGdlbmVyYXRlQWRk
U3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNl
bGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6TGFzdENoaWxkKTsKIAogICAgIG5vdFJlc29s
dmluZ1N0eWxlLmxpbmsoJm1fYXNzZW1ibGVyKTsKICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1f
YXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Ok5vblplcm8sIGlzT25seUNoaWxkUmVn
aXN0ZXIpKTsKIH0KIAotc3RhdGljIGJvb2wgbWFrZUNvbnRleHRTdHlsZVVuaXF1ZUlmTmVjZXNz
YXJ5QW5kVGVzdElzUGxhY2Vob2xkZXJTaG93bihFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTZWxl
Y3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCogY2hlY2tpbmdDb250ZXh0KQorc3RhdGljIGJv
b2wgbWFrZUNvbnRleHRTdHlsZVVuaXF1ZUlmTmVjZXNzYXJ5QW5kVGVzdElzUGxhY2Vob2xkZXJT
aG93bihFbGVtZW50KiBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCog
Y2hlY2tpbmdDb250ZXh0KQogewogICAgIGlmIChpczxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dD4oKmVsZW1lbnQpKSB7CiAgICAgICAgIGlmIChjaGVja2luZ0NvbnRleHQtPnJlc29sdmluZ01v
ZGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgICAg
IGNoZWNraW5nQ29udGV4dC0+ZWxlbWVudFN0eWxlLT5zZXRVbmlxdWUoKTsKLSAgICAgICAgcmV0
dXJuIGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkuaXNQbGFj
ZWhvbGRlclZpc2libGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMg
Ym9vbCBtYWtlRWxlbWVudFN0eWxlVW5pcXVlSWZOZWNlc3NhcnlBbmRUZXN0SXNQbGFjZWhvbGRl
clNob3duKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdD
b250ZXh0KiBjaGVja2luZ0NvbnRleHQpCi17Ci0gICAgaWYgKGlzPEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50PigqZWxlbWVudCkpIHsKLSAgICAgICAgaWYgKGNoZWNraW5nQ29udGV4dC0+cmVz
b2x2aW5nTW9kZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlJlc29sdmluZ1N0eWxlKSB7Ci0g
ICAgICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC0+cmVuZGVyU3R5bGUo
KSkKLSAgICAgICAgICAgICAgICBzdHlsZS0+c2V0VW5pcXVlKCk7Ci0gICAgICAgIH0KKyAgICAg
ICAgICAgIGNoZWNraW5nQ29udGV4dC0+c3R5bGVSZWxhdGlvbnMuYXBwZW5kKHsgKmVsZW1lbnQs
IFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6VW5pcXVlLCAxIH0pOwogICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KS5pc1Bs
YWNlaG9sZGVyVmlzaWJsZSgpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNDY1LDcg
KzMzMTQsNyBAQCBzdGF0aWMgYm9vbCBpc1BsYWNlaG9sZGVyU2hvd24oRWxlbWVudCogCiAgICAg
cmV0dXJuIGlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNh
c3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KS5pc1BsYWNlaG9sZGVyVmlz
aWJsZSgpOwogfQogCi12b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50
SGFzUGxhY2Vob2xkZXJTaG93bihBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNv
bnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0
b3I6OmdlbmVyYXRlRWxlbWVudEhhc1BsYWNlaG9sZGVyU2hvd24oQXNzZW1ibGVyOjpKdW1wTGlz
dCYgZmFpbHVyZUNhc2VzKQogewogICAgIGlmIChtX3NlbGVjdG9yQ29udGV4dCA9PSBTZWxlY3Rv
ckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpIHsKICAgICAgICAgRnVuY3Rpb25DYWxsIGZ1bmN0aW9u
Q2FsbChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9zdGFja0FsbG9jYXRvciwg
bV9mdW5jdGlvbkNhbGxzKTsKQEAgLTM0ODAsMTAgKzMzMjksNyBAQCB2b2lkIFNlbGVjdG9yQ29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAgICAgbV9yZWdpc3RlckFsbG9jYXRvci5kZWFsbG9j
YXRlUmVnaXN0ZXIoY2hlY2tpbmdDb250ZXh0KTsKIAogICAgIEZ1bmN0aW9uQ2FsbCBmdW5jdGlv
bkNhbGwobV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJBbGxvY2F0b3IsIG1fc3RhY2tBbGxvY2F0b3Is
IG1fZnVuY3Rpb25DYWxscyk7Ci0gICAgaWYgKGZyYWdtZW50TWF0Y2hlc1RoZVJpZ2h0bW9zdEVs
ZW1lbnQobV9zZWxlY3RvckNvbnRleHQsIGZyYWdtZW50KSkKLSAgICAgICAgZnVuY3Rpb25DYWxs
LnNldEZ1bmN0aW9uQWRkcmVzcyhtYWtlQ29udGV4dFN0eWxlVW5pcXVlSWZOZWNlc3NhcnlBbmRU
ZXN0SXNQbGFjZWhvbGRlclNob3duKTsKLSAgICBlbHNlCi0gICAgICAgIGZ1bmN0aW9uQ2FsbC5z
ZXRGdW5jdGlvbkFkZHJlc3MobWFrZUVsZW1lbnRTdHlsZVVuaXF1ZUlmTmVjZXNzYXJ5QW5kVGVz
dElzUGxhY2Vob2xkZXJTaG93bik7CisgICAgZnVuY3Rpb25DYWxsLnNldEZ1bmN0aW9uQWRkcmVz
cyhtYWtlQ29udGV4dFN0eWxlVW5pcXVlSWZOZWNlc3NhcnlBbmRUZXN0SXNQbGFjZWhvbGRlclNo
b3duKTsKICAgICBmdW5jdGlvbkNhbGwuc2V0VHdvQXJndW1lbnRzKGVsZW1lbnRBZGRyZXNzUmVn
aXN0ZXIsIGNoZWNraW5nQ29udGV4dCk7CiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChmdW5jdGlv
bkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVyblZhbHVlKEFzc2VtYmxlcjo6WmVybykp
OwogfQpAQCAtMzU4NSwxMSArMzQzMSw2IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZUVsZW0KICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRl
c3QzMihBc3NlbWJsZXI6Olplcm8sIEFzc2VtYmxlcjo6QWRkcmVzcyhlbGVtZW50QWRkcmVzc1Jl
Z2lzdGVyLCBOb2RlOjpub2RlRmxhZ3NNZW1vcnlPZmZzZXQoKSksIEFzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKE5vZGU6OmZsYWdJc0xpbmsoKSkpKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0RWxlbWVu
dENoaWxkSW5kZXgoRWxlbWVudCogZWxlbWVudCwgaW50IGluZGV4KQotewotICAgIGVsZW1lbnQt
PnNldENoaWxkSW5kZXgoaW5kZXgpOwotfQotCiBzdGF0aWMgYm9vbCBudGhGaWx0ZXJJc0Fsd2F5
c1NhdGlzaWZpZWQoaW50IGEsIGludCBiKQogewogICAgIC8vIEFueXRoaW5nIG1vZHVsbyAxIGlz
IHplcm8uIFVubGVzcyBiIHJlc3RyaWN0cyB0aGUgcmFuZ2UsIHRoaXMgZG9lcyBub3QgZmlsdGVy
IGFueXRoaW5nIG91dC4KQEAgLTM2MTYsNyArMzQ1Nyw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFpc0FkamFj
ZW50UmVsYXRpb24oZnJhZ21lbnQucmVsYXRpb25Ub1JpZ2h0RnJhZ21lbnQpKQotICAgICAgICBt
YXJrRWxlbWVudElmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgTm9kZTo6
ZmxhZ1N0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCkpOworICAgICAgICBnZW5lcmF0
ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIs
IFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2libGlu
Zyk7CiAKICAgICAvLyBTZXR1cCB0aGUgY291bnRlciBhdCAxLgogICAgIExvY2FsUmVnaXN0ZXJX
aXRoUHJlZmVyZW5jZSBlbGVtZW50Q291bnRlcihtX3JlZ2lzdGVyQWxsb2NhdG9yLCBKU0M6OkdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7CkBAIC0zNjM0LDcgKzM0NzUsNyBAQCB2b2lkIFNlbGVjdG9y
Q29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAKICAgICAgICAgQXNzZW1ibGVyOjpKdW1wTGlz
dCBub0NhY2hlZENoaWxkSW5kZXhDYXNlczsKICAgICAgICAgZ2VuZXJhdGVXYWxrVG9QcmV2aW91
c0FkamFjZW50RWxlbWVudChub01vcmVTaWJsaW5nc0Nhc2VzLCBwcmV2aW91c1NpYmxpbmcpOwot
ICAgICAgICBtYXJrRWxlbWVudElmUmVzb2x2aW5nU3R5bGUocHJldmlvdXNTaWJsaW5nLCBOb2Rl
OjpmbGFnQWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlKCkpOworICAgICAgICBnZW5lcmF0
ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKHByZXZpb3VzU2libGluZywgU2VsZWN0
b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RzTmV4dFNpYmxpbmcpOwogICAgICAgICBu
b0NhY2hlZENoaWxkSW5kZXhDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNoVGVzdDMyKEFz
c2VtYmxlcjo6WmVybywgQXNzZW1ibGVyOjpBZGRyZXNzKHByZXZpb3VzU2libGluZywgTm9kZTo6
bm9kZUZsYWdzTWVtb3J5T2Zmc2V0KCkpLCBBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihOb2RlOjpm
bGFnSGFzUmFyZURhdGEoKSkpKTsKICAgICAgICAgewogICAgICAgICAgICAgTG9jYWxSZWdpc3Rl
ciBlbGVtZW50UmFyZURhdGEobV9yZWdpc3RlckFsbG9jYXRvcik7CkBAIC0zNjUwLDI1ICszNDkx
LDEzIEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KIAogICAgICAg
ICBBc3NlbWJsZXI6OkxhYmVsIGxvb3BTdGFydCA9IG1fYXNzZW1ibGVyLmxhYmVsKCk7CiAgICAg
ICAgIGdlbmVyYXRlV2Fsa1RvUHJldmlvdXNBZGphY2VudEVsZW1lbnQobm9Nb3JlU2libGluZ3ND
YXNlcywgcHJldmlvdXNTaWJsaW5nKTsKLSAgICAgICAgbWFya0VsZW1lbnRJZlJlc29sdmluZ1N0
eWxlKHByZXZpb3VzU2libGluZywgTm9kZTo6ZmxhZ0FmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRT
dHlsZSgpKTsKKyAgICAgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHls
ZShwcmV2aW91c1NpYmxpbmcsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0
c05leHRTaWJsaW5nKTsKICAgICAgICAgbV9hc3NlbWJsZXIuYWRkMzIoQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMSksIGVsZW1lbnRDb3VudGVyKTsKICAgICAgICAgbV9hc3NlbWJsZXIuanVtcCgp
LmxpbmtUbyhsb29wU3RhcnQsICZtX2Fzc2VtYmxlcik7CiAgICAgICAgIG5vTW9yZVNpYmxpbmdz
Q2FzZXMubGluaygmbV9hc3NlbWJsZXIpOwogICAgIH0KIAotICAgIC8vIFRyZWUgbWFya2luZyB3
aGVuIGRvaW5nIHN0eWxlIHJlc29sdXRpb24uCi0gICAgaWYgKG1fc2VsZWN0b3JDb250ZXh0ICE9
IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3RvcikgewotICAgICAgICBMb2NhbFJlZ2lzdGVy
IGNoZWNraW5nQ29udGV4dChtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKLSAgICAgICAgQXNzZW1ibGVy
OjpKdW1wIG5vdFJlc29sdmluZ1N0eWxlID0ganVtcElmTm90UmVzb2x2aW5nU3R5bGUoY2hlY2tp
bmdDb250ZXh0KTsKLQotICAgICAgICBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVudEFkZHJl
c3MgPSBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyOwotICAgICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rp
b25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9y
LCBtX2Z1bmN0aW9uQ2FsbHMpOwotICAgICAgICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRy
ZXNzKHNldEVsZW1lbnRDaGlsZEluZGV4KTsKLSAgICAgICAgZnVuY3Rpb25DYWxsLnNldFR3b0Fy
Z3VtZW50cyhlbGVtZW50QWRkcmVzcywgZWxlbWVudENvdW50ZXIpOwotICAgICAgICBmdW5jdGlv
bkNhbGwuY2FsbCgpOwotCi0gICAgICAgIG5vdFJlc29sdmluZ1N0eWxlLmxpbmsoJm1fYXNzZW1i
bGVyKTsKLSAgICB9CisgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHls
ZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246
Ok50aENoaWxkSW5kZXgsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRChlbGVtZW50Q291bnRlcikpOwog
CiAgICAgZm9yIChjb25zdCBhdXRvJiBzbG90IDogdmFsaWRTdWJzZXRGaWx0ZXJzKQogICAgICAg
ICBnZW5lcmF0ZU50aEZpbHRlclRlc3QoZmFpbHVyZUNhc2VzLCBlbGVtZW50Q291bnRlciwgc2xv
dC5maXJzdCwgc2xvdC5zZWNvbmQpOwpAQCAtMzY5NSw3ICszNTI0LDcgQEAgdm9pZCBTZWxlY3Rv
ckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
IWlzQWRqYWNlbnRSZWxhdGlvbihmcmFnbWVudC5yZWxhdGlvblRvUmlnaHRGcmFnbWVudCkpCi0g
ICAgICAgIG1hcmtFbGVtZW50SWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVy
LCBOb2RlOjpmbGFnU3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoKSk7CisgICAgICAg
IGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NS
ZWdpc3RlciwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlv
dXNTaWJsaW5nKTsKIAogICAgIGZvciAoY29uc3QgTnRoQ2hpbGRPZlNlbGVjdG9ySW5mbyogbnRo
Q2hpbGRPZlNlbGVjdG9ySW5mbyA6IHZhbGlkU3Vic2V0RmlsdGVycykgewogICAgICAgICAvLyBT
ZXR1cCB0aGUgY291bnRlciBhdCAxLgpAQCAtMzcxMiw3ICszNTQxLDcgQEAgdm9pZCBTZWxlY3Rv
ckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogICAgICAgICAgICAgQXNzZW1ibGVyOjpMYWJl
bCBsb29wU3RhcnQgPSBtX2Fzc2VtYmxlci5sYWJlbCgpOwogCiAgICAgICAgICAgICBnZW5lcmF0
ZVdhbGtUb1ByZXZpb3VzQWRqYWNlbnRFbGVtZW50KG5vTW9yZVNpYmxpbmdzQ2FzZXMsIHByZXZp
b3VzU2libGluZyk7Ci0gICAgICAgICAgICBtYXJrRWxlbWVudElmUmVzb2x2aW5nU3R5bGUocHJl
dmlvdXNTaWJsaW5nLCBOb2RlOjpmbGFnQWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlKCkp
OworICAgICAgICAgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShw
cmV2aW91c1NpYmxpbmcsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0c05l
eHRTaWJsaW5nKTsKIAogICAgICAgICAgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBsb2NhbEZhaWx1
cmVDYXNlczsKICAgICAgICAgICAgIGdlbmVyYXRlRWxlbWVudE1hdGNoZXNTZWxlY3Rvckxpc3Qo
bG9jYWxGYWlsdXJlQ2FzZXMsIHByZXZpb3VzU2libGluZywgbnRoQ2hpbGRPZlNlbGVjdG9ySW5m
by0+c2VsZWN0b3JMaXN0KTsKQEAgLTM3MjcsMTEgKzM1NTYsNiBAQCB2b2lkIFNlbGVjdG9yQ29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBzZXRDaGls
ZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyhFbGVtZW50KiBlbGVtZW50KQot
ewotICAgIGVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1
bGVzKCk7Ci19Ci0KIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJ
c050aExhc3RDaGlsZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNl
bGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQogewogICAgIFZlY3RvcjxzdGQ6OnBhaXI8aW50LCBp
bnQ+LCAzMj4gdmFsaWRTdWJzZXRGaWx0ZXJzOwpAQCAtMzc0MCwyMCArMzU2NCw3IEBAIHZvaWQg
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICAgICAgTG9jYWxSZWdpc3Rl
ciBwYXJlbnRFbGVtZW50KG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwogICAgICAgICBnZW5lcmF0ZVdh
bGtUb1BhcmVudEVsZW1lbnQoZmFpbHVyZUNhc2VzLCBwYXJlbnRFbGVtZW50KTsKIAotICAgICAg
ICBpZiAobV9zZWxlY3RvckNvbnRleHQgIT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9y
KSB7Ci0gICAgICAgICAgICBBc3NlbWJsZXI6Okp1bXAgc2tpcE1hcmtpbmc7Ci0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgTG9jYWxSZWdpc3RlciBjaGVja2luZ0NvbnRleHQobV9yZWdp
c3RlckFsbG9jYXRvcik7Ci0gICAgICAgICAgICAgICAgc2tpcE1hcmtpbmcgPSBqdW1wSWZOb3RS
ZXNvbHZpbmdTdHlsZShjaGVja2luZ0NvbnRleHQpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxs
b2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOwotICAgICAgICAgICAg
ZnVuY3Rpb25DYWxsLnNldEZ1bmN0aW9uQWRkcmVzcyhzZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNr
d2FyZFBvc2l0aW9uYWxSdWxlcyk7Ci0gICAgICAgICAgICBmdW5jdGlvbkNhbGwuc2V0T25lQXJn
dW1lbnQocGFyZW50RWxlbWVudCk7Ci0gICAgICAgICAgICBmdW5jdGlvbkNhbGwuY2FsbCgpOwot
Ci0gICAgICAgICAgICBza2lwTWFya2luZy5saW5rKCZtX2Fzc2VtYmxlcik7Ci0gICAgICAgIH0K
KyAgICAgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShwYXJlbnRF
bGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRC
eUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsKIAogICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5k
KG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Olplcm8sIEFzc2VtYmxlcjo6QWRk
cmVzcyhwYXJlbnRFbGVtZW50LCBOb2RlOjpub2RlRmxhZ3NNZW1vcnlPZmZzZXQoKSksIEFzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKE5vZGU6OmZsYWdJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkKCkp
KSk7CiAKQEAgLTM3ODgsMTMgKzM1OTksNiBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6
Z2VuZXJhdGVFbGVtCiAgICAgICAgIGdlbmVyYXRlTnRoRmlsdGVyVGVzdChmYWlsdXJlQ2FzZXMs
IGVsZW1lbnRDb3VudGVyLCBzbG90LmZpcnN0LCBzbG90LnNlY29uZCk7CiB9CiAKLXN0YXRpYyB2
b2lkIHNldFBhcmVudEFmZmVjdGVkQnlMYXN0Q2hpbGRPZihFbGVtZW50KiBwYXJlbnRFbGVtZW50
KQotewotICAgIEFTU0VSVChwYXJlbnRFbGVtZW50KTsKLSAgICBwYXJlbnRFbGVtZW50LT5zZXRD
aGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsK
LSAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9u
YWxSdWxlcygpOwotfQotCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVt
ZW50SXNOdGhMYXN0Q2hpbGRPZihBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNv
bnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQogewogICAgIFZlY3Rvcjxjb25zdCBOdGhD
aGlsZE9mU2VsZWN0b3JJbmZvKj4gdmFsaWRTdWJzZXRGaWx0ZXJzOwpAQCAtMzgwMywyMCArMzYw
Nyw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICAgICAg
TG9jYWxSZWdpc3RlciBwYXJlbnRFbGVtZW50KG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwogICAgICAg
ICBnZW5lcmF0ZVdhbGtUb1BhcmVudEVsZW1lbnQoZmFpbHVyZUNhc2VzLCBwYXJlbnRFbGVtZW50
KTsKIAotICAgICAgICBpZiAobV9zZWxlY3RvckNvbnRleHQgIT0gU2VsZWN0b3JDb250ZXh0OjpR
dWVyeVNlbGVjdG9yKSB7Ci0gICAgICAgICAgICBBc3NlbWJsZXI6Okp1bXAgc2tpcE1hcmtpbmc7
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9jYWxSZWdpc3RlciBjaGVja2luZ0Nv
bnRleHQobV9yZWdpc3RlckFsbG9jYXRvcik7Ci0gICAgICAgICAgICAgICAgc2tpcE1hcmtpbmcg
PSBqdW1wSWZOb3RSZXNvbHZpbmdTdHlsZShjaGVja2luZ0NvbnRleHQpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBt
X3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOwot
ICAgICAgICAgICAgZnVuY3Rpb25DYWxsLnNldEZ1bmN0aW9uQWRkcmVzcyhzZXRQYXJlbnRBZmZl
Y3RlZEJ5TGFzdENoaWxkT2YpOwotICAgICAgICAgICAgZnVuY3Rpb25DYWxsLnNldE9uZUFyZ3Vt
ZW50KHBhcmVudEVsZW1lbnQpOwotICAgICAgICAgICAgZnVuY3Rpb25DYWxsLmNhbGwoKTsKLQot
ICAgICAgICAgICAgc2tpcE1hcmtpbmcubGluaygmbV9hc3NlbWJsZXIpOwotICAgICAgICB9Cisg
ICAgICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUocGFyZW50RWxl
bWVudCwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlQ
cm9wZXJ0eUJhc2VkQmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOwogCiAgICAgICAgIGZhaWx1cmVD
YXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6WmVybywgQXNz
ZW1ibGVyOjpBZGRyZXNzKHBhcmVudEVsZW1lbnQsIE5vZGU6Om5vZGVGbGFnc01lbW9yeU9mZnNl
dCgpKSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoTm9kZTo6ZmxhZ0lzUGFyc2luZ0NoaWxkcmVu
RmluaXNoZWQoKSkpKTsKIApAQCAtNDAwMyw3ICszNzk0LDEwIEBAIHZvaWQgU2VsZWN0b3JDb2Rl
R2VuZXJhdG9yOjpnZW5lcmF0ZU1hcmsKICAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvID0gQ1NT
U2VsZWN0b3I6OnBzZXVkb0lkKGZyYWdtZW50LnBzZXVkb0VsZW1lbnRTZWxlY3Rvci0+cHNldWRv
RWxlbWVudFR5cGUoKSk7CiAgICAgaWYgKGR5bmFtaWNQc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9Q
U0VVRE9JRCkgewogICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGJyYW5jaE9uUmVzb2x2aW5n
TW9kZVdpdGhDaGVja2luZ0NvbnRleHQoQXNzZW1ibGVyOjpOb3RFcXVhbCwgU2VsZWN0b3JDaGVj
a2VyOjpNb2RlOjpSZXNvbHZpbmdTdHlsZSwgY2hlY2tpbmdDb250ZXh0KSk7Ci0gICAgICAgIGFk
ZEZsYWdzVG9FbGVtZW50U3R5bGVGcm9tQ29udGV4dChjaGVja2luZ0NvbnRleHQsIFJlbmRlclN0
eWxlOjpOb25Jbmhlcml0ZWRGbGFnczo6ZmxhZ1BzZXVkb1N0eWxlKGR5bmFtaWNQc2V1ZG8pKTsK
KworICAgICAgICBBc3NlbWJsZXI6OkFkZHJlc3MgZmxhZ0FkZHJlc3MoY2hlY2tpbmdDb250ZXh0
LCBPQkpFQ1RfT0ZGU0VUT0YoU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQsIHBzZXVk
b0lEU2V0KSk7CisgICAgICAgIFBzZXVkb0lkU2V0IHBzZXVkb0lkU2V0IHsgZHluYW1pY1BzZXVk
byB9OworICAgICAgICBtX2Fzc2VtYmxlci5zdG9yZTMyKEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KHBzZXVkb0lkU2V0LmRhdGEoKSksIGZsYWdBZGRyZXNzKTsKICAgICB9CiAKICAgICAvLyBXZSBo
YXZlIGEgcHNldWRvRWxlbWVudFNlbGVjdG9yLCB3ZSBhcmUgbm90IGluIENvbGxlY3RpbmdSdWxl
c0lnbm9yaW5nVmlydHVhbFBzZXVkb0VsZW1lbnRzIHNvCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vU2VsZWN0b3JRdWVyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Nl
bGVjdG9yUXVlcnkuY3BwCShyZXZpc2lvbiAxOTUxMzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
U2VsZWN0b3JRdWVyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCBpbmxp
bmUgYm9vbCBTZWxlY3RvckRhdGFMaXN0OjpzZWxlY3Rvck1hCiAgICAgU2VsZWN0b3JDaGVja2Vy
OjpDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQoU2VsZWN0b3JDaGVja2Vy
OjpNb2RlOjpRdWVyeWluZ1J1bGVzKTsKICAgICBzZWxlY3RvckNoZWNraW5nQ29udGV4dC5zY29w
ZSA9IHJvb3ROb2RlLmlzRG9jdW1lbnROb2RlKCkgPyBudWxscHRyIDogJnJvb3ROb2RlOwogICAg
IHVuc2lnbmVkIGlnbm9yZWRTcGVjaWZpY2l0eTsKLSAgICByZXR1cm4gc2VsZWN0b3JDaGVja2Vy
Lm1hdGNoKHNlbGVjdG9yRGF0YS5zZWxlY3RvciwgJmVsZW1lbnQsIHNlbGVjdG9yQ2hlY2tpbmdD
b250ZXh0LCBpZ25vcmVkU3BlY2lmaWNpdHkpOworICAgIHJldHVybiBzZWxlY3RvckNoZWNrZXIu
bWF0Y2goKnNlbGVjdG9yRGF0YS5zZWxlY3RvciwgZWxlbWVudCwgc2VsZWN0b3JDaGVja2luZ0Nv
bnRleHQsIGlnbm9yZWRTcGVjaWZpY2l0eSk7CiB9CiAKIGlubGluZSBFbGVtZW50KiBTZWxlY3Rv
ckRhdGFMaXN0OjpzZWxlY3RvckNsb3Nlc3QoY29uc3QgU2VsZWN0b3JEYXRhJiBzZWxlY3RvckRh
dGEsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IENvbnRhaW5lck5vZGUmIHJvb3ROb2RlKSBjb25z
dApAQCAtMTI2LDExICsxMjYsMTAgQEAgaW5saW5lIEVsZW1lbnQqIFNlbGVjdG9yRGF0YUxpc3Q6
OnNlbGVjdAogICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZWxlbWVudC5kb2N1
bWVudCgpKTsKICAgICBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCBzZWxlY3RvckNo
ZWNraW5nQ29udGV4dChTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMpOwogICAg
IHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0LnNjb3BlID0gcm9vdE5vZGUuaXNEb2N1bWVudE5vZGUo
KSA/IG51bGxwdHIgOiAmcm9vdE5vZGU7Ci0gICAgRWxlbWVudCogY3VycmVudE5vZGUgPSAmZWxl
bWVudDsKICAgICB1bnNpZ25lZCBpZ25vcmVkU3BlY2lmaWNpdHk7Ci0gICAgaWYgKCFzZWxlY3Rv
ckNoZWNrZXIubWF0Y2goc2VsZWN0b3JEYXRhLnNlbGVjdG9yLCBjdXJyZW50Tm9kZSwgc2VsZWN0
b3JDaGVja2luZ0NvbnRleHQsIGlnbm9yZWRTcGVjaWZpY2l0eSkpCisgICAgaWYgKCFzZWxlY3Rv
ckNoZWNrZXIubWF0Y2goKnNlbGVjdG9yRGF0YS5zZWxlY3RvciwgZWxlbWVudCwgc2VsZWN0b3JD
aGVja2luZ0NvbnRleHQsIGlnbm9yZWRTcGVjaWZpY2l0eSkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBjdXJyZW50Tm9kZTsKKyAgICByZXR1cm4gJmVsZW1lbnQ7CiB9CiAK
IGJvb2wgU2VsZWN0b3JEYXRhTGlzdDo6bWF0Y2hlcyhFbGVtZW50JiB0YXJnZXRFbGVtZW50KSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwCShyZXZpc2lvbiAxOTUxMzApCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ1NTQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUwLDcgKzEwNTAsNyBAQCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjCiAgICAgICAgIGludCBpbmRl
eCA9IDA7CiAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0
b3JMaXN0LmZpcnN0KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4
dChzZWxlY3RvcikpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGlnbm9yZWRTcGVjaWZpY2l0eTsK
LSAgICAgICAgICAgIGJvb2wgbWF0Y2hlZCA9IHNlbGVjdG9yQ2hlY2tlci5tYXRjaChzZWxlY3Rv
ciwgZWxlbWVudCwgY29udGV4dCwgaWdub3JlZFNwZWNpZmljaXR5KTsKKyAgICAgICAgICAgIGJv
b2wgbWF0Y2hlZCA9IHNlbGVjdG9yQ2hlY2tlci5tYXRjaCgqc2VsZWN0b3IsICplbGVtZW50LCBj
b250ZXh0LCBpZ25vcmVkU3BlY2lmaWNpdHkpOwogICAgICAgICAgICAgaWYgKG1hdGNoZWQpCiAg
ICAgICAgICAgICAgICAgbWF0Y2hpbmdTZWxlY3RvcnMtPmFkZEl0ZW0oaW5kZXgpOwogICAgICAg
ICAgICAgKytpbmRleDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
dHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDE5NTEzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYy
LDcgKzg2Miw3IEBAIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1MKICAg
ICAgICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihlbGVtZW50LT5kb2N1bWVudCgp
KTsKIAogICAgICAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eTsKLSAgICAgICAgYm9vbCBva2F5ID0g
c2VsZWN0b3JDaGVja2VyLm1hdGNoKCZzZWxlY3RvciwgZWxlbWVudCwgY29udGV4dCwgc3BlY2lm
aWNpdHkpOworICAgICAgICBib29sIG9rYXkgPSBzZWxlY3RvckNoZWNrZXIubWF0Y2goc2VsZWN0
b3IsICplbGVtZW50LCBjb250ZXh0LCBzcGVjaWZpY2l0eSk7CiAgICAgICAgIGlmICghb2theSkK
ICAgICAgICAgICAgIHNwZWNpZmljaXR5ID0gc2VsZWN0b3Iuc3RhdGljU3BlY2lmaWNpdHkob2th
eSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269223</attachid>
            <date>2016-01-18 07:55:07 -0800</date>
            <delta_ts>2016-01-18 15:18:23 -0800</delta_ts>
            <desc>patch</desc>
            <filename>selector-checker-const-11.patch</filename>
            <type>text/plain</type>
            <size>108618</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBAQAorMjAxNi0wMS0xOCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgU2VsZWN0b3IgY2hlY2tlciBz
aG91bGQgbm90IG11dGF0ZSBkb2N1bWVudCBhbmQgc3R5bGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzIwNQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNlbGVjdG9yIGNoZWNrZXIgY3VycmVudGx5IHdy
aXRlcyBhZmZlY3RlZC1ieSBiaXRzIGFuZCBzaW1pbGFyIGRpcmVjdGx5IHRvIHRoZSBkb2N1bWVu
dCBhbmQgc3R5bGUgZHVyaW5nIHNlbGVjdG9yCisgICAgICAgIG1hdGNoaW5nLiBUaGlzIGlzIGNv
bmZ1c2luZywgY29tcGxpY2F0ZWQgYW5kIHdyb25nLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2hh
bmdlcyBTZWxlY3RvckNoZWNrZXIgYW5kIFNlbGVjdG9yQ29tcGlsZXIgdG8gY29sbGVjdCBzdHls
ZSByZWxhdGF0aW9uc2hpcCBtZXRhZGF0YSB0byBhIHNlcGFyYXRlCisgICAgICAgIGRhdGEgc3Ry
dWN0dXJlIChjdXJyZW50bHkgcGFydCBvZiBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4
dCkgaW5zdGVhZCBvZiBjaGFuZ2luZyB0aGUgZG9jdW1lbnQgYW5kIHN0eWxlCisgICAgICAgIGRp
cmVjdGx5LiBUaGUgbXV0YXRpb25zIGFyZSBwZXJmb3JtZWQgbGF0ZXIgb3V0c2lkZSBzZWxlY3Rv
ciBjaGVja2VyLgorCisgICAgICAgICogY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxlTWF0Y2hlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6Y29tbWl0U3R5bGVSZWxhdGlvbnMp
OgorCisgICAgICAgICAgICBBcHBseSB0aGUgcmVsYXRpb25zaGlwIGJpdCB0byBlbGVtZW50cyBh
bmQgc3R5bGUuCisKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSdWxlQ29sbGVjdG9yOjpjb2xs
ZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAqIGNzcy9FbGVtZW50UnVsZUNvbGxl
Y3Rvci5oOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JDaGVja2VyOjpMb2NhbENvbnRleHQ6OkxvY2FsQ29udGV4dCk6CisKKyAg
ICAgICAgICAgIExvY2FsQ29udGV4dCBpcyBub3cgYSBzZXBhcmF0ZSBkYXRhIHN0cnVjdHVyZS4K
KworICAgICAgICAoV2ViQ29yZTo6YWRkU3R5bGVSZWxhdGlvbik6CisKKyAgICAgICAgICAgIEhl
bHBlciBmb3IgcmVjb3JkaW5nIG5ldyBzdHlsZSByZWxhdGlvbnMuIFRoaXMgaXMgdXNlZCB3aGVy
ZSBjb2RlIG11dGF0ZWQgZWxlbWVudHMgb3Igc3R5bGUgZGlyZWN0bHkgYmVmb3JlLgorCisgICAg
ICAgIChXZWJDb3JlOjppc0ZpcnN0Q2hpbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Omlz
TGFzdENoaWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjppc0ZpcnN0T2ZUeXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzTGFzdE9mVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpjb3VudEVs
ZW1lbnRzQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvdW50RWxlbWVudHNPZlR5cGVCZWZv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNrZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjptYXRjaCk6CisgICAgICAgIChX
ZWJDb3JlOjpoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Omxv
Y2FsQ29udGV4dEZvclBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6
Om1hdGNoUmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlVmFsdWVNYXRj
aGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmFueUF0dHJpYnV0ZU1hdGNoZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Y2FuTWF0Y2hIb3Zlck9yQWN0aXZlSW5RdWlya3NNb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OnRhZ01hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpj
aGVja09uZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoU2VsZWN0
b3JMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTY3JvbGxi
YXJQc2V1ZG9DbGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OkNoZWNr
aW5nQ29udGV4dFdpdGhTdGF0dXM6OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KTogRGVsZXRlZC4K
KyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dDo6Q2hlY2tpbmdDb250ZXh0KToKKyAgICAgICAg
KiBjc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6
aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OmlzTWVkaWFEb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjppc0NoZWNrZWQpOgorICAgICAgICAoV2ViQ29yZTo6aXNJblJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzT3V0T2ZSYW5nZSk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrUmVnaW9uU2VsZWN0b3IpOgorICAgICAgICAq
IGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9u
SWZSZXNvbHZpbmdTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpT
ZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbik6CisKKyAgICAg
ICAgICAgIEhlbHBlcnMgZm9yIGdlbmVyYXRpbmcgY29kZSBmb3IgcmVjb3JkaW5nIG5ldyBzdHls
ZSByZWxhdGlvbnMuIFRoaXMgaXMgdXNlZCB3aGVyZSBjb2RlIG11dGF0ZWQgZWxlbWVudHMgb3Ig
c3R5bGUgZGlyZWN0bHkgYmVmb3JlLgorCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBp
bGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlU2VsZWN0b3JDaGVja2VyRXhjbHVk
aW5nUHNldWRvRWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZURpcmVjdEFkamFjZW50VHJlZVdhbGtlcik6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0
b3I6OmdlbmVyYXRlSW5kaXJlY3RBZGphY2VudFRyZWVXYWxrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0b3JDb21waWxlcjo6YWRkU3R5bGVSZWxhdGlvbkVsZW1lbnRGdW5jdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6
Omp1bXBJZk5vUHJldmlvdXNBZGphY2VudEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjptb2R1bG9Jc1plcm8pOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjps
aW5rRmFpbHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRNYXRjaGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQ29u
dGV4dEZ1bmN0aW9uQ2FsbFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxl
cjo6ZWxlbWVudElzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6
OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNBY3RpdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6anVtcElmRWxlbWVudElzTm90RW1wdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9y
OjpnZW5lcmF0ZUVsZW1lbnRJc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29t
cGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNGaXJzdENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OmVsZW1lbnRJc0hvdmVyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZUVsZW1lbnRJc0hvdmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc0luTGFu
Z3VhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2Rl
R2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc0xhc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVu
dElzT25seUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6Om1ha2VD
b250ZXh0U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRlc3RJc1BsYWNlaG9sZGVyU2hvd24pOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6aXNQbGFjZWhvbGRlclNob3duKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVFbGVtZW50SGFzUGxhY2Vob2xkZXJTaG93bik6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVu
dElzTGluayk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpudGhGaWx0ZXJJ
c0Fsd2F5c1NhdGlzaWZpZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc050aENoaWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVFbGVtZW50SXNOdGhDaGlsZE9mKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29t
cGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNOdGhMYXN0Q2hp
bGQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc050aExhc3RDaGlsZE9mKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVNYXJr
UHNldWRvU3R5bGVGb3JQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6YWRkRmxhZ3NUb0VsZW1lbnRTdHlsZUZy
b21Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6
OnNldE5vZGVGbGFnKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGls
ZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6bWFya0VsZW1lbnRJZlJlc29sdmluZ1N0eWxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OnNldEZpcnN0Q2hp
bGRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpl
bGVtZW50SXNBY3RpdmVGb3JTdHlsZVJlc29sdXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JDb21waWxlcjo6c2V0RWxlbWVudFN0eWxlSXNBZmZlY3RlZEJ5RW1wdHkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6c2V0RWxlbWVu
dFN0eWxlRnJvbUNvbnRleHRJc0FmZmVjdGVkQnlFbXB0eUFuZFVwZGF0ZVJlbmRlclN0eWxlSWZO
ZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6
ZWxlbWVudElzSG92ZXJlZEZvclN0eWxlUmVzb2x1dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpzZXRMYXN0Q2hpbGRTdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpzZXRPbmx5Q2hpbGRTdGF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjptYWtlRWxlbWVudFN0
eWxlVW5pcXVlSWZOZWNlc3NhcnlBbmRUZXN0SXNQbGFjZWhvbGRlclNob3duKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OnNldEVsZW1lbnRDaGlsZEluZGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OnNldENoaWxk
cmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OnNldFBhcmVudEFmZmVjdGVkQnlMYXN0Q2hpbGRP
Zik6IERlbGV0ZWQuCisgICAgICAgICogZG9tL1NlbGVjdG9yUXVlcnkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6c2VsZWN0b3JNYXRjaGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OnNlbGVjdG9yQ2xvc2VzdCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckRhdGFMaXN0OjptYXRjaGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6
OmJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVsZUxpc3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yU2Vs
ZWN0b3JIZWxwZXIpOgorCiAyMDE2LTAxLTE4ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdl
YmtpdC5vcmc+CiAKICAgICAgICAgRml4IHRoZSAtLW1pbmltYWwgYnVpbGQgZHVlIHRvIG1pc3Np
bmcgVk0uaCBpbmNsdWRlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xs
ZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNv
bGxlY3Rvci5jcHAJKHJldmlzaW9uIDE5NTEzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVt
ZW50UnVsZUNvbGxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNp
bmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJOb2RlUmVuZGVy
U3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKICNpbmNsdWRlICJTVkdFbGVtZW50
LmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JDb21waWxlci5oIgpAQCAtMzI4LDExICszMjksMTEgQEAg
aW5saW5lIGJvb2wgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OnJ1bGVNYQogI2VuZGlmIC8vIEVOQUJM
RShDU1NfU0VMRUNUT1JfSklUKQogCiAgICAgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRl
eHQgY29udGV4dChtX21vZGUpOwotICAgIGNvbnRleHQuZWxlbWVudFN0eWxlID0gbV9zdHlsZTsK
ICAgICBjb250ZXh0LnBzZXVkb0lkID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQ7CiAg
ICAgY29udGV4dC5zY3JvbGxiYXIgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5zY3JvbGxiYXI7CiAg
ICAgY29udGV4dC5zY3JvbGxiYXJQYXJ0ID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3Quc2Nyb2xsYmFy
UGFydDsKIAorICAgIGJvb2wgc2VsZWN0b3JNYXRjaGVzOwogI2lmIEVOQUJMRShDU1NfU0VMRUNU
T1JfSklUKQogICAgIGlmIChjb21waWxlZFNlbGVjdG9yQ2hlY2tlcikgewogICAgICAgICBBU1NF
UlQocnVsZURhdGEuY29tcGlsYXRpb25TdGF0dXMoKSA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3Rh
dHVzOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KTsKQEAgLTM0MiwxMyArMzQz
LDkzIEBAIGlubGluZSBib29sIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxlTWEKICNpZiBDU1Nf
U0VMRUNUT1JfSklUX1BST0ZJTElORwogICAgICAgICBydWxlRGF0YS5jb21waWxlZFNlbGVjdG9y
VXNlZCgpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBzZWxlY3RvckNoZWNrZXIoJm1fZWxlbWVu
dCwgJmNvbnRleHQsICZzcGVjaWZpY2l0eSk7Ci0gICAgfQorICAgICAgICBzZWxlY3Rvck1hdGNo
ZXMgPSBzZWxlY3RvckNoZWNrZXIoJm1fZWxlbWVudCwgJmNvbnRleHQsICZzcGVjaWZpY2l0eSk7
CisgICAgfSBlbHNlCiAjZW5kaWYgLy8gRU5BQkxFKENTU19TRUxFQ1RPUl9KSVQpCisgICAgewor
ICAgICAgICAvLyBTbG93IHBhdGguCisgICAgICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNo
ZWNrZXIobV9lbGVtZW50LmRvY3VtZW50KCkpOworICAgICAgICBzZWxlY3Rvck1hdGNoZXMgPSBz
ZWxlY3RvckNoZWNrZXIubWF0Y2goKnJ1bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCwgY29u
dGV4dCwgc3BlY2lmaWNpdHkpOworICAgIH0KKworICAgIGNvbW1pdFN0eWxlUmVsYXRpb25zKGNv
bnRleHQuc3R5bGVSZWxhdGlvbnMpOworCisgICAgaWYgKGNvbnRleHQucHNldWRvSURTZXQpCisg
ICAgICAgIG1fc3R5bGUtPnNldEhhc1BzZXVkb1N0eWxlcyhjb250ZXh0LnBzZXVkb0lEU2V0KTsK
KworICAgIHJldHVybiBzZWxlY3Rvck1hdGNoZXM7Cit9CiAKLSAgICAvLyBTbG93IHBhdGguCi0g
ICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihtX2VsZW1lbnQuZG9jdW1lbnQoKSk7
Ci0gICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlci5tYXRjaChydWxlRGF0YS5zZWxlY3RvcigpLCAm
bV9lbGVtZW50LCBjb250ZXh0LCBzcGVjaWZpY2l0eSk7CisvLyBGSVhNRTogUnVsZSBjb2xsZWN0
b3Igc2hvdWxkIG5vdCBiZSBkb2luZyBtdXRhdGlvbnMuIE1vdmUgdGhpcyBzb21ld2hlcmUgZWxz
ZS4KK3ZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OmNvbW1pdFN0eWxlUmVsYXRpb25zKGNvbnN0
IFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbnMmIHN0eWxlUmVsYXRpb25zKQoreworICAg
IGZvciAoYXV0byYgcmVsYXRpb24gOiBzdHlsZVJlbGF0aW9ucykgeworICAgICAgICBzd2l0Y2gg
KHJlbGF0aW9uLnR5cGUpIHsKKyAgICAgICAgY2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVs
YXRpb246OkFmZmVjdGVkQnlBY3RpdmU6CisgICAgICAgICAgICBpZiAoJnJlbGF0aW9uLmVsZW1l
bnQgPT0gJm1fZWxlbWVudCkKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRBZmZlY3RlZEJ5
QWN0aXZlKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVsYXRpb24uZWxl
bWVudC5zZXRDaGlsZHJlbkFmZmVjdGVkQnlBY3RpdmUoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeURy
YWc6CisgICAgICAgICAgICBpZiAoJnJlbGF0aW9uLmVsZW1lbnQgPT0gJm1fZWxlbWVudCkKKyAg
ICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRBZmZlY3RlZEJ5RHJhZygpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQuc2V0Q2hpbGRyZW5BZmZlY3Rl
ZEJ5RHJhZygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2VsZWN0b3JDaGVj
a2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5RW1wdHk6CisgICAgICAgICAgICByZWxhdGlv
bi5lbGVtZW50LnNldFN0eWxlQWZmZWN0ZWRCeUVtcHR5KCk7CisgICAgICAgICAgICBpZiAoJnJl
bGF0aW9uLmVsZW1lbnQgPT0gJm1fZWxlbWVudCkKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRFbXB0eVN0YXRlKHJlbGF0aW9uLnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeUhvdmVyOgor
ICAgICAgICAgICAgaWYgKCZyZWxhdGlvbi5lbGVtZW50ID09ICZtX2VsZW1lbnQpCisgICAgICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0QWZmZWN0ZWRCeUhvdmVyKCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgcmVsYXRpb24uZWxlbWVudC5zZXRDaGlsZHJlbkFmZmVjdGVkQnlI
b3ZlcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2VsZWN0b3JDaGVja2Vy
OjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nOgorICAgICAgICAgICAg
cmVsYXRpb24uZWxlbWVudC5zZXRTdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJl
bGF0aW9uOjpBZmZlY3RzTmV4dFNpYmxpbmc6CisgICAgICAgICAgICByZWxhdGlvbi5lbGVtZW50
LnNldEFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFm
ZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlczoKKyAgICAgICAgICAgIHJlbGF0aW9uLmVs
ZW1lbnQuc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxh
dGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzOgorICAgICAgICAgICAgcmVs
YXRpb24uZWxlbWVudC5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxh
dGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5UHJvcGVydHlCYXNlZEJhY2t3YXJkUG9zaXRpb25hbFJ1
bGVzOgorICAgICAgICAgICAgcmVsYXRpb24uZWxlbWVudC5zZXRDaGlsZHJlbkFmZmVjdGVkQnlC
YWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOworICAgICAgICAgICAgcmVsYXRpb24uZWxlbWVudC5z
ZXRDaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dhcmRQb3NpdGlvbmFsUnVsZXMo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5
bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXM6CisgICAgICAgICAg
ICByZWxhdGlvbi5lbGVtZW50LnNldENoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxl
UmVsYXRpb246OkZpcnN0Q2hpbGQ6CisgICAgICAgICAgICBpZiAoJnJlbGF0aW9uLmVsZW1lbnQg
PT0gJm1fZWxlbWVudCkKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRGaXJzdENoaWxkU3Rh
dGUoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGF1dG8qIHN0eWxlID0gcmVsYXRpb24uZWxlbWVu
dC5yZW5kZXJTdHlsZSgpKQorICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRGaXJzdENoaWxkU3Rh
dGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6
U3R5bGVSZWxhdGlvbjo6TGFzdENoaWxkOgorICAgICAgICAgICAgaWYgKCZyZWxhdGlvbi5lbGVt
ZW50ID09ICZtX2VsZW1lbnQpCisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGFzdENoaWxk
U3RhdGUoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGF1dG8qIHN0eWxlID0gcmVsYXRpb24uZWxl
bWVudC5yZW5kZXJTdHlsZSgpKQorICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRMYXN0Q2hpbGRT
dGF0ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2VsZWN0b3JDaGVja2Vy
OjpTdHlsZVJlbGF0aW9uOjpOdGhDaGlsZEluZGV4OgorICAgICAgICAgICAgcmVsYXRpb24uZWxl
bWVudC5zZXRDaGlsZEluZGV4KHJlbGF0aW9uLnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6VW5pcXVlOgorICAg
ICAgICAgICAgaWYgKCZyZWxhdGlvbi5lbGVtZW50ID09ICZtX2VsZW1lbnQpCisgICAgICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICBlbHNlIGlmIChhdXRvKiBz
dHlsZSA9IHJlbGF0aW9uLmVsZW1lbnQucmVuZGVyU3R5bGUoKSkKKyAgICAgICAgICAgICAgICBz
dHlsZS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
IH0KIAogdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JM
aXN0KGNvbnN0IFJ1bGVTZXQ6OlJ1bGVEYXRhVmVjdG9yKiBydWxlcywgY29uc3QgTWF0Y2hSZXF1
ZXN0JiBtYXRjaFJlcXVlc3QsIFN0eWxlUmVzb2x2ZXI6OlJ1bGVSYW5nZSYgcnVsZVJhbmdlKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgJKHJldmlzaW9u
IDE5NTEzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGFkZE1h
dGNoZWRSdWxlKGNvbnN0IE1hdGNoZWRSdWxlJik7CiAKKyAgICB2b2lkIGNvbW1pdFN0eWxlUmVs
YXRpb25zKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbnMmKTsKKwogICAgIEVs
ZW1lbnQmIG1fZWxlbWVudDsKICAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKICAgICBjb25zdCBE
b2N1bWVudFJ1bGVTZXRzJiBtX3J1bGVTZXRzOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1NlbGVj
dG9yQ2hlY2tlci5jcHAJKHJldmlzaW9uIDE5NTEzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9T
ZWxlY3RvckNoZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDIwMDQtMjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgTmljaG9sYXMgU2hhbmtzICh3ZWJraXRAbmlja3No
YW5rcy5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdl
YmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQpAQCAt
NDYsMTAgKzQ2LDggQEAKICNpbmNsdWRlICJIVE1MUHJvZ3Jlc3NFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTFN0eWxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlv
bi5oIgotI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNp
bmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNs
dWRlICJTZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9v
dC5oIgogI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKQEAgLTYzLDI5ICs2MSwzNiBAQCBlbnVt
IGNsYXNzIFZpc2l0ZWRNYXRjaFR5cGUgOiB1bnNpZ25lZCBjCiAgICAgRGlzYWJsZWQsIEVuYWJs
ZWQKIH07CiAKLXN0cnVjdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0
dXMgOiBwdWJsaWMgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQgewotICAgIENoZWNr
aW5nQ29udGV4dFdpdGhTdGF0dXMoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRl
eHQmIGNoZWNraW5nQ29udGV4dCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50
KiBlbGVtZW50KQotICAgICAgICA6IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0KGNo
ZWNraW5nQ29udGV4dCkKLSAgICAgICAgLCBzZWxlY3RvcihzZWxlY3RvcikKLSAgICAgICAgLCBl
bGVtZW50KGVsZW1lbnQpCi0gICAgICAgICwgdmlzaXRlZE1hdGNoVHlwZShyZXNvbHZpbmdNb2Rl
ID09IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdSdWxlcyA/IFZpc2l0ZWRNYXRjaFR5
cGU6OkRpc2FibGVkIDogVmlzaXRlZE1hdGNoVHlwZTo6RW5hYmxlZCkKLSAgICAgICAgLCBmaXJz
dFNlbGVjdG9yT2ZUaGVGcmFnbWVudChzZWxlY3RvcikKLSAgICAgICAgLCBpbkZ1bmN0aW9uYWxQ
c2V1ZG9DbGFzcyhmYWxzZSkKLSAgICAgICAgLCBwc2V1ZG9FbGVtZW50RWZmZWN0aXZlKHRydWUp
Ci0gICAgICAgICwgaGFzU2Nyb2xsYmFyUHNldWRvKGZhbHNlKQotICAgICAgICAsIGhhc1NlbGVj
dGlvblBzZXVkbyhmYWxzZSkKK3N0cnVjdCBTZWxlY3RvckNoZWNrZXI6OkxvY2FsQ29udGV4dCB7
CisgICAgTG9jYWxDb250ZXh0KGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgY29uc3QgRWxl
bWVudCYgZWxlbWVudCwgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlLCBQc2V1ZG9J
ZCBwc2V1ZG9JZCkKKyAgICAgICAgOiBzZWxlY3Rvcigmc2VsZWN0b3IpCisgICAgICAgICwgZWxl
bWVudCgmZWxlbWVudCkKKyAgICAgICAgLCB2aXNpdGVkTWF0Y2hUeXBlKHZpc2l0ZWRNYXRjaFR5
cGUpCisgICAgICAgICwgZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQoJnNlbGVjdG9yKQorICAg
ICAgICAsIHBzZXVkb0lkKHBzZXVkb0lkKQogICAgIHsgfQogCiAgICAgY29uc3QgQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yOwotICAgIEVsZW1lbnQqIGVsZW1lbnQ7CisgICAgY29uc3QgRWxlbWVudCog
ZWxlbWVudDsKICAgICBWaXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGU7CiAgICAgY29u
c3QgQ1NTU2VsZWN0b3IqIGZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50OwotICAgIGJvb2wgaW5G
dW5jdGlvbmFsUHNldWRvQ2xhc3M7Ci0gICAgYm9vbCBwc2V1ZG9FbGVtZW50RWZmZWN0aXZlOwot
ICAgIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvOwotICAgIGJvb2wgaGFzU2VsZWN0aW9uUHNldWRv
OworICAgIFBzZXVkb0lkIHBzZXVkb0lkOworICAgIGJvb2wgaXNNYXRjaEVsZW1lbnQgeyB0cnVl
IH07CisgICAgYm9vbCBpbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyB7IGZhbHNlIH07CisgICAgYm9v
bCBwc2V1ZG9FbGVtZW50RWZmZWN0aXZlIHsgdHJ1ZSB9OworICAgIGJvb2wgaGFzU2Nyb2xsYmFy
UHNldWRvIHsgZmFsc2UgfTsKKyAgICBib29sIGhhc1NlbGVjdGlvblBzZXVkbyB7IGZhbHNlIH07
CisKIH07CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRTdHlsZVJlbGF0aW9uKFNlbGVjdG9yQ2hl
Y2tlcjo6Q2hlY2tpbmdDb250ZXh0JiBjaGVja2luZ0NvbnRleHQsIGNvbnN0IEVsZW1lbnQmIGVs
ZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6VHlwZSB0eXBlLCB1bnNpZ25l
ZCB2YWx1ZSA9IDEpCit7CisgICAgQVNTRVJUKHZhbHVlID09IDEgfHwgdHlwZSA9PSBTZWxlY3Rv
ckNoZWNrZXI6OlN0eWxlUmVsYXRpb246Ok50aENoaWxkSW5kZXggfHwgdHlwZSA9PSBTZWxlY3Rv
ckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlFbXB0eSk7CisgICAgaWYgKGNoZWNr
aW5nQ29udGV4dC5yZXNvbHZpbmdNb2RlICE9IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UmVzb2x2
aW5nU3R5bGUpCisgICAgICAgIHJldHVybjsKKyAgICBjaGVja2luZ0NvbnRleHQuc3R5bGVSZWxh
dGlvbnMuYXBwZW5kKHsgY29uc3RfY2FzdDxFbGVtZW50Jj4oZWxlbWVudCksIHR5cGUsIHZhbHVl
IH0pOworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNGaXJzdENoaWxkRWxlbWVudChjb25zdCBF
bGVtZW50JiBlbGVtZW50KQogewogICAgIHJldHVybiAhRWxlbWVudFRyYXZlcnNhbDo6cHJldmlv
dXNTaWJsaW5nKGVsZW1lbnQpOwpAQCAtOTYsMTEgKzEwMSwxMSBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgaXNMYXN0Q2hpbGRFbGVtZW50KGNvCiAgICAgcmV0dXJuICFFbGVtZW50VHJhdmVyc2FsOjpu
ZXh0U2libGluZyhlbGVtZW50KTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGlzRmlyc3RPZlR5
cGUoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSwgYm9vbCBpc1Jl
c29sdmluZ1N0eWxlKQorc3RhdGljIGlubGluZSBib29sIGlzRmlyc3RPZlR5cGUoU2VsZWN0b3JD
aGVja2VyOjpDaGVja2luZ0NvbnRleHQmIGNoZWNraW5nQ29udGV4dCwgY29uc3QgRWxlbWVudCYg
ZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkKIHsKLSAgICBmb3IgKEVsZW1lbnQq
IHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoZWxlbWVudCk7IHNp
Ymxpbmc7IHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoKnNpYmxp
bmcpKSB7Ci0gICAgICAgIGlmIChpc1Jlc29sdmluZ1N0eWxlKQotICAgICAgICAgICAgc2libGlu
Zy0+c2V0QWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlKCk7CisgICAgZm9yIChjb25zdCBF
bGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKGVsZW1l
bnQpOyBzaWJsaW5nOyBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5n
KCpzaWJsaW5nKSkgeworICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwg
KnNpYmxpbmcsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJs
aW5nKTsKKwogICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMTYsMTIgKzEyMSwxMiBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNMYXN0T2ZUeXBlKGNvbnN0IEVsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgaW50IGNvdW50RWxlbWVudHNCZWZvcmUoRWxlbWVudCYgZWxlbWVudCwgYm9v
bCBpc1Jlc29sdmluZ1N0eWxlKQorc3RhdGljIGlubGluZSBpbnQgY291bnRFbGVtZW50c0JlZm9y
ZShTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCYgY2hlY2tpbmdDb250ZXh0LCBjb25z
dCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGludCBjb3VudCA9IDA7Ci0gICAgZm9yIChFbGVt
ZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKGVsZW1lbnQp
OyBzaWJsaW5nOyBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKCpz
aWJsaW5nKSkgewotICAgICAgICBpZiAoaXNSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgICAgIHNp
YmxpbmctPnNldEFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpOworICAgIGZvciAoY29u
c3QgRWxlbWVudCogc2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZyhl
bGVtZW50KTsgc2libGluZzsgc2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2li
bGluZygqc2libGluZykpIHsKKworICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29u
dGV4dCwgKnNpYmxpbmcsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0c05l
eHRTaWJsaW5nKTsKIAogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHNpYmxpbmctPmNoaWxkSW5k
ZXgoKTsKICAgICAgICAgaWYgKGluZGV4KSB7CkBAIC0xMzMsMTIgKzEzOCwxMSBAQCBzdGF0aWMg
aW5saW5lIGludCBjb3VudEVsZW1lbnRzQmVmb3JlKEVsCiAgICAgcmV0dXJuIGNvdW50OwogfQog
Ci1zdGF0aWMgaW5saW5lIGludCBjb3VudEVsZW1lbnRzT2ZUeXBlQmVmb3JlKEVsZW1lbnQmIGVs
ZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUsIGJvb2wgaXNSZXNvbHZpbmdTdHlsZSkK
K3N0YXRpYyBpbmxpbmUgaW50IGNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUoU2VsZWN0b3JDaGVj
a2VyOjpDaGVja2luZ0NvbnRleHQmIGNoZWNraW5nQ29udGV4dCwgY29uc3QgRWxlbWVudCYgZWxl
bWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkKIHsKICAgICBpbnQgY291bnQgPSAwOwot
ICAgIGZvciAoRWxlbWVudCogc2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2li
bGluZyhlbGVtZW50KTsgc2libGluZzsgc2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZp
b3VzU2libGluZygqc2libGluZykpIHsKLSAgICAgICAgaWYgKGlzUmVzb2x2aW5nU3R5bGUpCi0g
ICAgICAgICAgICBzaWJsaW5nLT5zZXRBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKTsK
KyAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2
aW91c1NpYmxpbmcoZWxlbWVudCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2Fs
OjpwcmV2aW91c1NpYmxpbmcoKnNpYmxpbmcpKSB7CisgICAgICAgIGFkZFN0eWxlUmVsYXRpb24o
Y2hlY2tpbmdDb250ZXh0LCAqc2libGluZywgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9u
OjpBZmZlY3RzTmV4dFNpYmxpbmcpOwogCiAgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1l
KHR5cGUpKQogICAgICAgICAgICAgKytjb3VudDsKQEAgLTE3MCwyNiArMTc0LDI2IEBAIFNlbGVj
dG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2VyKERvY3VtZW4KIHsKIH0KIAotYm9vbCBTZWxlY3Rv
ckNoZWNrZXI6Om1hdGNoKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgQ2hlY2tpbmdDb250ZXh0JiBwcm92aWRlZENvbnRleHQsIHVuc2lnbmVkJiBz
cGVjaWZpY2l0eSkgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjptYXRjaChjb25zdCBDU1NT
ZWxlY3RvciYgc2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIENoZWNraW5nQ29udGV4
dCYgY2hlY2tpbmdDb250ZXh0LCB1bnNpZ25lZCYgc3BlY2lmaWNpdHkpIGNvbnN0CiB7CiAgICAg
c3BlY2lmaWNpdHkgPSAwOwogCi0gICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBjb250ZXh0
KHByb3ZpZGVkQ29udGV4dCwgc2VsZWN0b3IsIGVsZW1lbnQpOworICAgIExvY2FsQ29udGV4dCBj
b250ZXh0KHNlbGVjdG9yLCBlbGVtZW50LCBjaGVja2luZ0NvbnRleHQucmVzb2x2aW5nTW9kZSA9
PSBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMgPyBWaXNpdGVkTWF0Y2hUeXBl
OjpEaXNhYmxlZCA6IFZpc2l0ZWRNYXRjaFR5cGU6OkVuYWJsZWQsIGNoZWNraW5nQ29udGV4dC5w
c2V1ZG9JZCk7CiAgICAgUHNldWRvSWRTZXQgcHNldWRvSWRTZXQ7Ci0gICAgTWF0Y2hSZXN1bHQg
cmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShjb250ZXh0LCBwc2V1ZG9JZFNldCwgc3BlY2lmaWNp
dHkpOworICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkoY2hlY2tpbmdD
b250ZXh0LCBjb250ZXh0LCBwc2V1ZG9JZFNldCwgc3BlY2lmaWNpdHkpOwogICAgIGlmIChyZXN1
bHQubWF0Y2ggIT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChjb250ZXh0LnBzZXVkb0lkICE9IE5PUFNFVURPICYmICFwc2V1ZG9JZFNldC5o
YXMoY29udGV4dC5wc2V1ZG9JZCkpCisgICAgaWYgKGNoZWNraW5nQ29udGV4dC5wc2V1ZG9JZCAh
PSBOT1BTRVVETyAmJiAhcHNldWRvSWRTZXQuaGFzKGNoZWNraW5nQ29udGV4dC5wc2V1ZG9JZCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChjb250ZXh0LnBzZXVkb0lkID09IE5P
UFNFVURPICYmIHBzZXVkb0lkU2V0KSB7CisgICAgaWYgKGNoZWNraW5nQ29udGV4dC5wc2V1ZG9J
ZCA9PSBOT1BTRVVETyAmJiBwc2V1ZG9JZFNldCkgewogICAgICAgICBQc2V1ZG9JZFNldCBwdWJs
aWNQc2V1ZG9JZFNldCA9IHBzZXVkb0lkU2V0ICYgUHNldWRvSWRTZXQ6OmZyb21NYXNrKFBVQkxJ
Q19QU0VVRE9JRF9NQVNLKTsKLSAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBN
b2RlOjpSZXNvbHZpbmdTdHlsZSAmJiBwdWJsaWNQc2V1ZG9JZFNldCkKLSAgICAgICAgICAgIGNv
bnRleHQuZWxlbWVudFN0eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZXMocHVibGljUHNldWRvSWRTZXQp
OworICAgICAgICBpZiAoY2hlY2tpbmdDb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVz
b2x2aW5nU3R5bGUgJiYgcHVibGljUHNldWRvSWRTZXQpCisgICAgICAgICAgICBjaGVja2luZ0Nv
bnRleHQucHNldWRvSURTZXQgPSBwdWJsaWNQc2V1ZG9JZFNldDsKIAogICAgICAgICAvLyBXaGVu
IGlnbm9yaW5nIHZpcnR1YWwgcHNldWRvIGVsZW1lbnRzLCB0aGUgY29udGV4dCdzIHBzZXVkbyBz
aG91bGQgYWxzbyBiZSBOT1BTRVVETyBidXQgdGhhdCBkb2VzCiAgICAgICAgIC8vIG5vdCBjYXVz
ZSBhIGZhaWx1cmUuCi0gICAgICAgIHJldHVybiBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9k
ZTo6Q29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRvRWxlbWVudHMgfHwgcmVzdWx0
Lm1hdGNoVHlwZSA9PSBNYXRjaFR5cGU6OkVsZW1lbnQ7CisgICAgICAgIHJldHVybiBjaGVja2lu
Z0NvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpDb2xsZWN0aW5nUnVsZXNJZ25vcmluZ1Zp
cnR1YWxQc2V1ZG9FbGVtZW50cyB8fCByZXN1bHQubWF0Y2hUeXBlID09IE1hdGNoVHlwZTo6RWxl
bWVudDsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yMDUsMTMgKzIwOSwxNCBAQCBp
bmxpbmUgc3RhdGljIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvRWxlCiAgICAgcmV0dXJuIGR5bmFt
aWNQc2V1ZG9JZFNldC5oYXMoUkVTSVpFUik7CiB9CiAKLXN0YXRpYyBTZWxlY3RvckNoZWNrZXI6
OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNvbnN0
IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkKK3N0
YXRpYyBTZWxlY3RvckNoZWNrZXI6OkxvY2FsQ29udGV4dCBsb2NhbENvbnRleHRGb3JQYXJlbnQo
Y29uc3QgU2VsZWN0b3JDaGVja2VyOjpMb2NhbENvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgU2Vs
ZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIHVwZGF0ZWRDb250ZXh0KGNv
bnRleHQpOworICAgIFNlbGVjdG9yQ2hlY2tlcjo6TG9jYWxDb250ZXh0IHVwZGF0ZWRDb250ZXh0
KGNvbnRleHQpOwogICAgIC8vIERpc2FibGUgOnZpc2l0ZWQgbWF0Y2hpbmcgd2hlbiB3ZSBzZWUg
dGhlIGZpcnN0IGxpbmsuCiAgICAgaWYgKGNvbnRleHQuZWxlbWVudC0+aXNMaW5rKCkpCiAgICAg
ICAgIHVwZGF0ZWRDb250ZXh0LnZpc2l0ZWRNYXRjaFR5cGUgPSBWaXNpdGVkTWF0Y2hUeXBlOjpE
aXNhYmxlZDsKICAgICB1cGRhdGVkQ29udGV4dC5lbGVtZW50ID0gY29udGV4dC5lbGVtZW50LT5w
YXJlbnRFbGVtZW50KCk7CisgICAgdXBkYXRlZENvbnRleHQuaXNNYXRjaEVsZW1lbnQgPSBmYWxz
ZTsKICAgICByZXR1cm4gdXBkYXRlZENvbnRleHQ7CiB9CiAKQEAgLTIyMSwxMiArMjI2LDEyIEBA
IHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dFcKIC8vICogU2VsZWN0b3JG
YWlsc0xvY2FsbHkgICAgIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciB0aGUgZWxlbWVudCBlCiAv
LyAqIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBh
bmQgYW55IHNpYmxpbmcgb2YgZQogLy8gKiBTZWxlY3RvckZhaWxzQ29tcGxldGVseSAgLSB0aGUg
c2VsZWN0b3IgZmFpbHMgZm9yIGUgYW5kIGFueSBzaWJsaW5nIG9yIGFuY2VzdG9yIG9mIGUKLVNl
bGVjdG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQgU2VsZWN0b3JDaGVja2VyOjptYXRjaFJlY3Vyc2l2
ZWx5KGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQsIFBzZXVkb0lkU2V0
JiBkeW5hbWljUHNldWRvSWRTZXQsIHVuc2lnbmVkJiBzcGVjaWZpY2l0eSkgY29uc3QKK1NlbGVj
dG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQgU2VsZWN0b3JDaGVja2VyOjptYXRjaFJlY3Vyc2l2ZWx5
KENoZWNraW5nQ29udGV4dCYgY2hlY2tpbmdDb250ZXh0LCBjb25zdCBMb2NhbENvbnRleHQmIGNv
bnRleHQsIFBzZXVkb0lkU2V0JiBkeW5hbWljUHNldWRvSWRTZXQsIHVuc2lnbmVkJiBzcGVjaWZp
Y2l0eSkgY29uc3QKIHsKICAgICBNYXRjaFR5cGUgbWF0Y2hUeXBlID0gTWF0Y2hUeXBlOjpFbGVt
ZW50OwogCiAgICAgLy8gVGhlIGZpcnN0IHNlbGVjdG9yIGhhcyB0byBtYXRjaC4KLSAgICBpZiAo
IWNoZWNrT25lKGNvbnRleHQsIGR5bmFtaWNQc2V1ZG9JZFNldCwgbWF0Y2hUeXBlLCBzcGVjaWZp
Y2l0eSkpCisgICAgaWYgKCFjaGVja09uZShjaGVja2luZ0NvbnRleHQsIGNvbnRleHQsIGR5bmFt
aWNQc2V1ZG9JZFNldCwgbWF0Y2hUeXBlLCBzcGVjaWZpY2l0eSkpCiAgICAgICAgIHJldHVybiBN
YXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFpbHNMb2NhbGx5KTsKIAogICAgIGlm
IChjb250ZXh0LnNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50
KSB7CkBAIC0yNDcsNyArMjUyLDcgQEAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdCBTZWxl
Y3RvckNoZQogICAgICAgICAgICAgaWYgKCFjb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0
b3JGYWlsc0NvbXBsZXRlbHkpOwogCi0gICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdN
b2RlID09IE1vZGU6OlF1ZXJ5aW5nUnVsZXMpCisgICAgICAgICAgICBpZiAoY2hlY2tpbmdDb250
ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UXVlcnlpbmdSdWxlcykKICAgICAgICAgICAgICAg
ICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVs
eSk7CiAKICAgICAgICAgICAgIFBzZXVkb0lkIHBzZXVkb0lkID0gQ1NTU2VsZWN0b3I6OnBzZXVk
b0lkKGNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkpOwpAQCAtMjY1LDcgKzI3
MCw3IEBAIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQgU2VsZWN0b3JDaGUKICAgICBpZiAo
IWhpc3RvcnlTZWxlY3RvcikKICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjptYXRjaGVzKG1h
dGNoVHlwZSk7CiAKLSAgICBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIG5leHRDb250ZXh0KGNv
bnRleHQpOworICAgIExvY2FsQ29udGV4dCBuZXh0Q29udGV4dChjb250ZXh0KTsKICAgICBuZXh0
Q29udGV4dC5zZWxlY3RvciA9IGhpc3RvcnlTZWxlY3RvcjsKIAogICAgIGlmIChyZWxhdGlvbiAh
PSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpIHsKQEAgLTI4MCwxNyArMjg1LDE3IEBAIFNlbGVj
dG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQgU2VsZWN0b3JDaGUKICAgICAgICAgbmV4dENvbnRleHQu
cHNldWRvSWQgPSBOT1BTRVVETzsKICAgICAgICAgLy8gVmlydHVhbCBwc2V1ZG8gZWxlbWVudCBp
cyBvbmx5IGVmZmVjdGl2ZSBpbiB0aGUgcmlnaHRtb3N0IGZyYWdtZW50LgogICAgICAgICBuZXh0
Q29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZlID0gZmFsc2U7CisgICAgICAgIG5leHRDb250
ZXh0LmlzTWF0Y2hFbGVtZW50ID0gZmFsc2U7CiAgICAgfQogCiAgICAgc3dpdGNoIChyZWxhdGlv
bikgewogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQ6Ci0gICAgICAgIG5leHRDb250
ZXh0ID0gY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KG5leHRDb250ZXh0KTsKKyAgICAgICAgbmV4
dENvbnRleHQgPSBsb2NhbENvbnRleHRGb3JQYXJlbnQobmV4dENvbnRleHQpOwogICAgICAgICBu
ZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVj
dG9yOwotICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSBudWxscHRyOwotICAgICAg
ICBmb3IgKDsgbmV4dENvbnRleHQuZWxlbWVudDsgbmV4dENvbnRleHQgPSBjaGVja2luZ0NvbnRl
eHRGb3JQYXJlbnQobmV4dENvbnRleHQpKSB7CisgICAgICAgIGZvciAoOyBuZXh0Q29udGV4dC5l
bGVtZW50OyBuZXh0Q29udGV4dCA9IGxvY2FsQ29udGV4dEZvclBhcmVudChuZXh0Q29udGV4dCkp
IHsKICAgICAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CiAgICAgICAg
ICAgICB1bnNpZ25lZCBkZXNjZW5kYW50c1NwZWNpZmljaXR5ID0gMDsKLSAgICAgICAgICAgIE1h
dGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5
bmFtaWNQc2V1ZG8sIGRlc2NlbmRhbnRzU3BlY2lmaWNpdHkpOworICAgICAgICAgICAgTWF0Y2hS
ZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShjaGVja2luZ0NvbnRleHQsIG5leHRDb250
ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBkZXNjZW5kYW50c1NwZWNpZmljaXR5KTsKICAgICAg
ICAgICAgIEFTU0VSVCghbmV4dENvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZSAmJiAhaWdu
b3JlRHluYW1pY1BzZXVkbyk7CiAKICAgICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2ggPT0gTWF0
Y2g6OlNlbGVjdG9yTWF0Y2hlcykKQEAgLTMwMywxNCArMzA4LDEzIEBAIFNlbGVjdG9yQ2hlY2tl
cjo6TWF0Y2hSZXN1bHQgU2VsZWN0b3JDaGUKIAogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxk
OgogICAgICAgICB7Ci0gICAgICAgICAgICBuZXh0Q29udGV4dCA9IGNoZWNraW5nQ29udGV4dEZv
clBhcmVudChuZXh0Q29udGV4dCk7CisgICAgICAgICAgICBuZXh0Q29udGV4dCA9IGxvY2FsQ29u
dGV4dEZvclBhcmVudChuZXh0Q29udGV4dCk7CiAgICAgICAgICAgICBpZiAoIW5leHRDb250ZXh0
LmVsZW1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRj
aDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwogICAgICAgICAgICAgbmV4dENvbnRleHQuZmly
c3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBuZXh0Q29udGV4dC5zZWxlY3RvcjsKLSAgICAgICAg
ICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7CiAgICAgICAgICAgICBQc2V1
ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvOwogICAgICAgICAgICAgdW5zaWduZWQgY2hpbGRT
cGVjaWZpY2l0eSA9IDA7Ci0gICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJl
Y3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBjaGlsZFNwZWNpZmlj
aXR5KTsKKyAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHko
Y2hlY2tpbmdDb250ZXh0LCBuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywgY2hpbGRT
cGVjaWZpY2l0eSk7CiAgICAgICAgICAgICBBU1NFUlQoIW5leHRDb250ZXh0LnBzZXVkb0VsZW1l
bnRFZmZlY3RpdmUgJiYgIWlnbm9yZUR5bmFtaWNQc2V1ZG8pOwogCiAgICAgICAgICAgICBpZiAo
cmVzdWx0Lm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMpCkBAIC0zMjMsMjAgKzMyNywx
OSBAQCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0IFNlbGVjdG9yQ2hlCiAKICAgICBjYXNl
IENTU1NlbGVjdG9yOjpEaXJlY3RBZGphY2VudDoKICAgICAgICAgewotICAgICAgICAgICAgaWYg
KGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LmVsZW1lbnQtPnNldFN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJs
aW5nKCk7CisgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKmNv
bnRleHQuZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyk7
CiAKICAgICAgICAgICAgIEVsZW1lbnQqIHByZXZpb3VzRWxlbWVudCA9IGNvbnRleHQuZWxlbWVu
dC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOwogICAgICAgICAgICAgaWYgKCFwcmV2aW91c0Vs
ZW1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6
U2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzKTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29s
dmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpCi0gICAgICAgICAgICAgICAgcHJldmlv
dXNFbGVtZW50LT5zZXRBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKTsKKworICAgICAg
ICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpwcmV2aW91c0VsZW1lbnQs
IFN0eWxlUmVsYXRpb246OkFmZmVjdHNOZXh0U2libGluZyk7CisKICAgICAgICAgICAgIG5leHRD
b250ZXh0LmVsZW1lbnQgPSBwcmV2aW91c0VsZW1lbnQ7CiAgICAgICAgICAgICBuZXh0Q29udGV4
dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwotICAg
ICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsKICAgICAgICAgICAg
IFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CiAgICAgICAgICAgICB1bnNpZ25lZCBh
ZGphY2VudFNwZWNpZmljaXR5ID0gMDsKLSAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9
IG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIGFkamFj
ZW50U3BlY2lmaWNpdHkpOworICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hS
ZWN1cnNpdmVseShjaGVja2luZ0NvbnRleHQsIG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNl
dWRvLCBhZGphY2VudFNwZWNpZmljaXR5KTsKICAgICAgICAgICAgIEFTU0VSVCghbmV4dENvbnRl
eHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZSAmJiAhaWdub3JlRHluYW1pY1BzZXVkbyk7CiAKICAg
ICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykKQEAg
LTM0NSwxOCArMzQ4LDE2IEBAIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQgU2VsZWN0b3JD
aGUKICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6dXBkYXRlV2l0aE1hdGNoVHlwZShy
ZXN1bHQsIG1hdGNoVHlwZSk7CiAgICAgICAgIH0KICAgICBjYXNlIENTU1NlbGVjdG9yOjpJbmRp
cmVjdEFkamFjZW50OgotICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6
OlJlc29sdmluZ1N0eWxlKQotICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LT5zZXRTdHlsZUlz
QWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpOworICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNo
ZWNraW5nQ29udGV4dCwgKmNvbnRleHQuZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRC
eVByZXZpb3VzU2libGluZyk7CisKICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9IGNvbnRl
eHQuZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOwogICAgICAgICBuZXh0Q29udGV4
dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwotICAg
ICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSBudWxscHRyOwogICAgICAgICBmb3IgKDsg
bmV4dENvbnRleHQuZWxlbWVudDsgbmV4dENvbnRleHQuZWxlbWVudCA9IG5leHRDb250ZXh0LmVs
ZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgewotICAgICAgICAgICAgaWYgKGNvbnRl
eHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgICAgICAg
ICBuZXh0Q29udGV4dC5lbGVtZW50LT5zZXRBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUo
KTsKKyAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqbmV4dENv
bnRleHQuZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5nKTsKIAogICAg
ICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHluYW1pY1BzZXVkbzsKICAgICAgICAgICAgIHVu
c2lnbmVkIGluZGlyZWN0QWRqYWNlbnRTcGVjaWZpY2l0eSA9IDA7Ci0gICAgICAgICAgICBNYXRj
aFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5h
bWljUHNldWRvLCBpbmRpcmVjdEFkamFjZW50U3BlY2lmaWNpdHkpOworICAgICAgICAgICAgTWF0
Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShjaGVja2luZ0NvbnRleHQsIG5leHRD
b250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBpbmRpcmVjdEFkamFjZW50U3BlY2lmaWNpdHkp
OwogICAgICAgICAgICAgQVNTRVJUKCFuZXh0Q29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZl
ICYmICFpZ25vcmVEeW5hbWljUHNldWRvKTsKIAogICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXRj
aCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzKQpAQCAtMzc0LDEzICszNzUsMTMgQEAgU2VsZWN0
b3JDaGVja2VyOjpNYXRjaFJlc3VsdCBTZWxlY3RvckNoZQogICAgICAgICAgICAgLy8gdG8gZm9s
bG93IHRoZSBwc2V1ZG8gZWxlbWVudHMuCiAgICAgICAgICAgICBuZXh0Q29udGV4dC5oYXNTY3Jv
bGxiYXJQc2V1ZG8gPSBoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGR5bmFtaWNQc2V1ZG9JZFNl
dCk7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5oYXNTZWxlY3Rpb25Qc2V1ZG8gPSBkeW5hbWlj
UHNldWRvSWRTZXQuaGFzKFNFTEVDVElPTik7Ci0gICAgICAgICAgICBpZiAoKGNvbnRleHQuZWxl
bWVudFN0eWxlIHx8IGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpDb2xsZWN0aW5nUnVs
ZXMpICYmIGR5bmFtaWNQc2V1ZG9JZFNldAorICAgICAgICAgICAgaWYgKChjb250ZXh0LmlzTWF0
Y2hFbGVtZW50IHx8IGNoZWNraW5nQ29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OkNvbGxl
Y3RpbmdSdWxlcykgJiYgZHluYW1pY1BzZXVkb0lkU2V0CiAgICAgICAgICAgICAgICAgJiYgIW5l
eHRDb250ZXh0Lmhhc1NlbGVjdGlvblBzZXVkbwogICAgICAgICAgICAgICAgICYmICEobmV4dENv
bnRleHQuaGFzU2Nyb2xsYmFyUHNldWRvICYmIG5leHRDb250ZXh0LnNlbGVjdG9yLT5tYXRjaCgp
ID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE1h
dGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwogCiAgICAg
ICAgICAgICB1bnNpZ25lZCBzdWJzZWxlY3RvclNwZWNpZmljaXR5ID0gMDsKLSAgICAgICAgICAg
IE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGR5bmFt
aWNQc2V1ZG9JZFNldCwgc3Vic2VsZWN0b3JTcGVjaWZpY2l0eSk7CisgICAgICAgICAgICBNYXRj
aFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KGNoZWNraW5nQ29udGV4dCwgbmV4dENv
bnRleHQsIGR5bmFtaWNQc2V1ZG9JZFNldCwgc3Vic2VsZWN0b3JTcGVjaWZpY2l0eSk7CiAKICAg
ICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykKICAg
ICAgICAgICAgICAgICBzcGVjaWZpY2l0eSA9IENTU1NlbGVjdG9yOjphZGRTcGVjaWZpY2l0aWVz
KHNwZWNpZmljaXR5LCBzdWJzZWxlY3RvclNwZWNpZmljaXR5KTsKQEAgLTM5NCwxMCArMzk1LDkg
QEAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdCBTZWxlY3RvckNoZQogICAgICAgICAgICAg
ICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21wbGV0
ZWx5KTsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnQgPSBzaGFkb3dIb3N0Tm9kZTsK
ICAgICAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4
dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUg
PSBudWxscHRyOwogICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHluYW1pY1BzZXVkbzsK
ICAgICAgICAgICAgIHVuc2lnbmVkIHNoYWRvd0Rlc2NlbmRhbnRTcGVjaWZpY2l0eSA9IDA7Ci0g
ICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250
ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBzaGFkb3dEZXNjZW5kYW50U3BlY2lmaWNpdHkpOwor
ICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShjaGVja2lu
Z0NvbnRleHQsIG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBzaGFkb3dEZXNjZW5k
YW50U3BlY2lmaWNpdHkpOwogCiAgICAgICAgICAgICBpZiAocmVzdWx0Lm1hdGNoID09IE1hdGNo
OjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgICAgICAgICAgc3BlY2lmaWNpdHkgPSBDU1NTZWxl
Y3Rvcjo6YWRkU3BlY2lmaWNpdGllcyhzcGVjaWZpY2l0eSwgc2hhZG93RGVzY2VuZGFudFNwZWNp
ZmljaXR5KTsKQEAgLTUwNCw3ICs1MDQsNyBAQCBzdGF0aWMgYm9vbCBhdHRyaWJ1dGVWYWx1ZU1h
dGNoZXMoY29uc3QgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGFueUF0dHJp
YnV0ZU1hdGNoZXMoRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBzZWxlY3RvckF0dHIsIGJvb2wgY2FzZVNlbnNpdGl2ZSkK
K3N0YXRpYyBib29sIGFueUF0dHJpYnV0ZU1hdGNoZXMoY29uc3QgRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBRdWFsaWZpZWROYW1lJiBzZWxlY3Rv
ckF0dHIsIGJvb2wgY2FzZVNlbnNpdGl2ZSkKIHsKICAgICBBU1NFUlQoZWxlbWVudC0+aGFzQXR0
cmlidXRlc1dpdGhvdXRVcGRhdGUoKSk7CiAgICAgZm9yIChjb25zdCBBdHRyaWJ1dGUmIGF0dHJp
YnV0ZSA6IGVsZW1lbnQtPmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CkBAIC01MTgsNyArNTE4LDcg
QEAgc3RhdGljIGJvb2wgYW55QXR0cmlidXRlTWF0Y2hlcyhFbGVtZW50KgogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotc3RhdGljIGJvb2wgY2FuTWF0Y2hIb3Zlck9yQWN0aXZlSW5RdWlya3NNb2Rl
KGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4
dCkKK3N0YXRpYyBib29sIGNhbk1hdGNoSG92ZXJPckFjdGl2ZUluUXVpcmtzTW9kZShjb25zdCBT
ZWxlY3RvckNoZWNrZXI6OkxvY2FsQ29udGV4dCYgY29udGV4dCkKIHsKICAgICAvLyBGb3IgcXVp
cmtzIG1vZGUsIGZvbGxvdyB0aGlzOiBodHRwOi8vcXVpcmtzLnNwZWMud2hhdHdnLm9yZy8jdGhl
LTphY3RpdmUtYW5kLTpob3Zlci1xdWlyawogICAgIC8vIEluIHF1aXJrcyBtb2RlLCBhIGNvbXBv
dW5kIHNlbGVjdG9yICdzZWxlY3RvcicgdGhhdCBtYXRjaGVzIHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBtdXN0IG5vdCBtYXRjaCBlbGVtZW50cyB0aGF0IHdvdWxkIG5vdCBhbHNvIG1hdGNoIHRo
ZSAnOmFueS1saW5rJyBzZWxlY3Rvci4KQEAgLTU4OCw5ICs1ODgsOSBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgdGFnTWF0Y2hlcyhjb25zdCBFbGVtCiAgICAgcmV0dXJuIG5hbWVzcGFjZVVSSSA9PSBz
dGFyQXRvbSB8fCBuYW1lc3BhY2VVUkkgPT0gZWxlbWVudC5uYW1lc3BhY2VVUkkoKTsKIH0KIAot
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhT
dGF0dXMmIGNvbnRleHQsIFBzZXVkb0lkU2V0JiBkeW5hbWljUHNldWRvSWRTZXQsIE1hdGNoVHlw
ZSYgbWF0Y2hUeXBlLCB1bnNpZ25lZCYgc3BlY2lmaWNpdHkpIGNvbnN0Citib29sIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tPbmUoQ2hlY2tpbmdDb250ZXh0JiBjaGVja2luZ0NvbnRleHQsIGNvbnN0
IExvY2FsQ29udGV4dCYgY29udGV4dCwgUHNldWRvSWRTZXQmIGR5bmFtaWNQc2V1ZG9JZFNldCwg
TWF0Y2hUeXBlJiBtYXRjaFR5cGUsIHVuc2lnbmVkJiBzcGVjaWZpY2l0eSkgY29uc3QKIHsKLSAg
ICBFbGVtZW50KiBjb25zdCAmIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQ7CisgICAgY29uc3Qg
RWxlbWVudCogZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDsKICAgICBjb25zdCBDU1NTZWxlY3Rv
ciogY29uc3QgJiBzZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0b3I7CiAgICAgQVNTRVJUKGVsZW1l
bnQpOwogICAgIEFTU0VSVChzZWxlY3Rvcik7CkBAIC02MjYsNyArNjI2LDcgQEAgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZQogICAgICAgICAgICAgY29uc3QgQ1NTU2Vs
ZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCk7CiAKICAg
ICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHN1YnNlbGVjdG9yID0gc2VsZWN0b3JM
aXN0LT5maXJzdCgpOyBzdWJzZWxlY3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6
Om5leHQoc3Vic2VsZWN0b3IpKSB7Ci0gICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0
aFN0YXR1cyBzdWJjb250ZXh0KGNvbnRleHQpOworICAgICAgICAgICAgICAgIExvY2FsQ29udGV4
dCBzdWJjb250ZXh0KGNvbnRleHQpOwogICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuaW5GdW5j
dGlvbmFsUHNldWRvQ2xhc3MgPSB0cnVlOwogICAgICAgICAgICAgICAgIHN1YmNvbnRleHQucHNl
dWRvRWxlbWVudEVmZmVjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHN1YmNvbnRleHQu
c2VsZWN0b3IgPSBzdWJzZWxlY3RvcjsKQEAgLTYzNCw3ICs2MzQsNyBAQCBib29sIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlCiAgICAgICAgICAgICAgICAgUHNldWRvSWRTZXQg
aWdub3JlRHluYW1pY1BzZXVkbzsKIAogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlnbm9yZWRT
cGVjaWZpY2l0eTsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJjb250
ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBpZ25vcmVkU3BlY2lmaWNpdHkpLm1hdGNoID09IE1h
dGNoOjpTZWxlY3Rvck1hdGNoZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNp
dmVseShjaGVja2luZ0NvbnRleHQsIHN1YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIGln
bm9yZWRTcGVjaWZpY2l0eSkubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykgewogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoIWlnbm9yZUR5bmFtaWNQc2V1ZG8pOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjQzLDcgKzY0
Myw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGUKICAgICAgICAg
fSBlbHNlIGlmIChjb250ZXh0Lmhhc1Njcm9sbGJhclBzZXVkbykgewogICAgICAgICAgICAgLy8g
Q1NTIHNjcm9sbGJhcnMgbWF0Y2ggYSBzcGVjaWZpYyBzdWJzZXQgb2YgcHNldWRvIGNsYXNzZXMs
IGFuZCB0aGV5IGhhdmUgc3BlY2lhbGl6ZWQgcnVsZXMgZm9yIGVhY2gKICAgICAgICAgICAgIC8v
IChzaW5jZSB0aGVyZSBhcmUgbm8gZWxlbWVudHMgaW52b2x2ZWQgZXhjZXB0IHdpdGggd2luZG93
LWluYWN0aXZlKS4KLSAgICAgICAgICAgIHJldHVybiBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNz
KGNvbnRleHQsIHNlbGVjdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBjaGVja1Njcm9sbGJhclBz
ZXVkb0NsYXNzKGNoZWNraW5nQ29udGV4dCwgKmNvbnRleHQuZWxlbWVudCwgc2VsZWN0b3IpOwog
ICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIGVsZW1lbnQgcHNldWRvIGNsYXNzIGNoZWNr
aW5nLgpAQCAtNjY3LDUzICs2NjcsNDEgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25l
KGNvbnN0IENoZQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29s
dmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZWxlbWVudC0+c2V0U3R5bGVBZmZlY3RlZEJ5RW1wdHkoKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQuZWxlbWVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dC5lbGVtZW50U3R5bGUtPnNldEVtcHR5U3RhdGUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpjb250
ZXh0LmVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlFbXB0eSwgcmVzdWx0KTsKKwog
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRmlyc3RDaGlsZDoKICAgICAgICAgICAgIC8vIGZp
cnN0LWNoaWxkIG1hdGNoZXMgdGhlIGZpcnN0IGNoaWxkIHRoYXQgaXMgYW4gZWxlbWVudAotICAg
ICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVt
ZW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGlzRmlyc3RDaGlsZEVsZW1l
bnQoKmVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUg
PT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0
eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50
RWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgY2hpbGRTdHlsZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNoaWxkU3R5bGUtPnNldEZpcnN0Q2hpbGRTdGF0ZSgpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgaWYgKGNvbnN0
IEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICBib29sIGlzRmlyc3RDaGlsZCA9IGlzRmlyc3RDaGlsZEVsZW1lbnQoKmVs
ZW1lbnQpOworICAgICAgICAgICAgICAgIGlmIChpc0ZpcnN0Q2hpbGQpCisgICAgICAgICAgICAg
ICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqZWxlbWVudCwgU3R5bGVS
ZWxhdGlvbjo6Rmlyc3RDaGlsZCk7CisgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihj
aGVja2luZ0NvbnRleHQsICpwYXJlbnRFbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFm
ZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMpOworICAgICAgICAgICAgICAgIHJldHVybiBpc0ZpcnN0
Q2hpbGQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NGaXJzdE9mVHlwZToKICAgICAgICAgICAgIC8vIGZpcnN0
LW9mLXR5cGUgbWF0Y2hlcyB0aGUgZmlyc3QgZWxlbWVudCBvZiBpdHMgdHlwZQogICAgICAgICAg
ICAgaWYgKGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGlmIChj
b250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpCi0gICAgICAgICAg
ICAgICAgICAgIGVsZW1lbnQtPnNldFN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCk7
Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gaXNGaXJzdE9mVHlwZSgqZWxlbWVudCwgZWxlbWVu
dC0+dGFnUU5hbWUoKSwgY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0
eWxlKTsKKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwg
KmVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcpOworICAg
ICAgICAgICAgICAgIHJldHVybiBpc0ZpcnN0T2ZUeXBlKGNoZWNraW5nQ29udGV4dCwgKmVsZW1l
bnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGFzdENoaWxkOgogICAg
ICAgICAgICAgLy8gbGFzdC1jaGlsZCBtYXRjaGVzIHRoZSBsYXN0IGNoaWxkIHRoYXQgaXMgYW4g
ZWxlbWVudAotICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50
LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IHBhcmVu
dEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSAmJiBpc0xhc3RDaGlsZEVsZW1l
bnQoKmVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUg
PT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0
eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50
RWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMoKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiBjaGlsZFN0eWxlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgY2hpbGRTdHlsZS0+c2V0TGFzdENoaWxkU3RhdGUoKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIGlmIChjb25zdCBF
bGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAg
ICAgICAgICAgICAgYm9vbCBpc0xhc3RDaGlsZCA9IHBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQ
YXJzaW5nQ2hpbGRyZW4oKSAmJiBpc0xhc3RDaGlsZEVsZW1lbnQoKmVsZW1lbnQpOworICAgICAg
ICAgICAgICAgIGlmIChpc0xhc3RDaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVS
ZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICplbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpMYXN0Q2hp
bGQpOworICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAq
cGFyZW50RWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxk
UnVsZXMpOworICAgICAgICAgICAgICAgIHJldHVybiBpc0xhc3RDaGlsZDsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc0xhc3RPZlR5cGU6CiAgICAgICAgICAgICAvLyBsYXN0LW9mLXR5cGUgbWF0Y2hlcyB0aGUg
bGFzdCBlbGVtZW50IG9mIGl0cyB0eXBlCiAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50
RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpCi0gICAgICAg
ICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJk
UG9zaXRpb25hbFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVj
a2luZ0NvbnRleHQsICpwYXJlbnRFbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVj
dGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyk7CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJl
bnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICByZXR1cm4gaXNMYXN0T2ZUeXBlKCpl
bGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKTsKQEAgLTcyMywyOCArNzExLDIzIEBAIGJvb2wg
U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGUKICAgICAgICAgICAgIGlmIChFbGVt
ZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAg
ICAgICAgICAgYm9vbCBmaXJzdENoaWxkID0gaXNGaXJzdENoaWxkRWxlbWVudCgqZWxlbWVudCk7
CiAgICAgICAgICAgICAgICAgYm9vbCBvbmx5Q2hpbGQgPSBmaXJzdENoaWxkICYmIHBhcmVudEVs
ZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSAmJiBpc0xhc3RDaGlsZEVsZW1lbnQo
KmVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0g
TW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUq
IGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0eWxl
IDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxl
bWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1
bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkICYmIGNoaWxkU3R5bGUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFN0eWxlLT5zZXRGaXJzdENoaWxkU3RhdGUo
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9ubHlDaGlsZCAmJiBjaGlsZFN0eWxlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgY2hpbGRTdHlsZS0+c2V0TGFzdENoaWxkU3RhdGUoKTsKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2lu
Z0NvbnRleHQsICpwYXJlbnRFbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVk
QnlGaXJzdENoaWxkUnVsZXMpOworICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hl
Y2tpbmdDb250ZXh0LCAqcGFyZW50RWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZl
Y3RlZEJ5TGFzdENoaWxkUnVsZXMpOworICAgICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkKQor
ICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKmVs
ZW1lbnQsIFN0eWxlUmVsYXRpb246OkZpcnN0Q2hpbGQpOworICAgICAgICAgICAgICAgIGlmIChv
bmx5Q2hpbGQpCisgICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdD
b250ZXh0LCAqZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6TGFzdENoaWxkKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gb25seUNoaWxkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzT25seU9mVHlwZToKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIHNlbGVjdG9yIGlzIHZlcnkgc2xvdy4KICAgICAgICAgICAg
IGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNv
bHZpbmdTdHlsZSkgewotICAgICAgICAgICAgICAgICAgICBlbGVtZW50LT5zZXRTdHlsZUlzQWZm
ZWN0ZWRCeVByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVt
ZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5n
Q29udGV4dCwgKmVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxp
bmcpOworICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAq
cGFyZW50RWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQ
b3NpdGlvbmFsUnVsZXMpOwogICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNG
aW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGlzRmlyc3RPZlR5cGUoKmVsZW1lbnQsIGVsZW1l
bnQtPnRhZ1FOYW1lKCksIGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdT
dHlsZSkgJiYgaXNMYXN0T2ZUeXBlKCplbGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaXNGaXJzdE9mVHlwZShjaGVja2luZ0NvbnRleHQsICplbGVt
ZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKSAmJiBpc0xhc3RPZlR5cGUoKmVsZW1lbnQsIGVsZW1l
bnQtPnRhZ1FOYW1lKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTWF0Y2hlczoKQEAgLTc1NCwxNCArNzM3
LDE0IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGUKIAogICAgICAg
ICAgICAgICAgIE1hdGNoVHlwZSBsb2NhbE1hdGNoVHlwZSA9IE1hdGNoVHlwZTo6VmlydHVhbFBz
ZXVkb0VsZW1lbnRPbmx5OwogICAgICAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3Iq
IHN1YnNlbGVjdG9yID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJzZWxl
Y3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vic2VsZWN0b3IpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgc3ViY29udGV4
dChjb250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgTG9jYWxDb250ZXh0IHN1YmNvbnRleHQo
Y29udGV4dCk7CiAgICAgICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuaW5GdW5jdGlvbmFsUHNl
dWRvQ2xhc3MgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LnBzZXVkb0Vs
ZW1lbnRFZmZlY3RpdmUgPSBjb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmU7CiAgICAgICAg
ICAgICAgICAgICAgIHN1YmNvbnRleHQuc2VsZWN0b3IgPSBzdWJzZWxlY3RvcjsKICAgICAgICAg
ICAgICAgICAgICAgc3ViY29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IHN1YnNl
bGVjdG9yOwogICAgICAgICAgICAgICAgICAgICBQc2V1ZG9JZFNldCBsb2NhbER5bmFtaWNQc2V1
ZG9JZFNldDsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9jYWxTcGVjaWZpY2l0eSA9
IDA7Ci0gICAgICAgICAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJz
aXZlbHkoc3ViY29udGV4dCwgbG9jYWxEeW5hbWljUHNldWRvSWRTZXQsIGxvY2FsU3BlY2lmaWNp
dHkpOworICAgICAgICAgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vy
c2l2ZWx5KGNoZWNraW5nQ29udGV4dCwgc3ViY29udGV4dCwgbG9jYWxEeW5hbWljUHNldWRvSWRT
ZXQsIGxvY2FsU3BlY2lmaWNpdHkpOwogICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm1h
dGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IG1heFNwZWNpZmljaXR5ID0gc3RkOjptYXgobWF4U3BlY2lmaWNpdHksIGxvY2FsU3BlY2lmaWNp
dHkpOwogCkBAIC03ODAsMTAgKzc2Myw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09u
ZShjb25zdCBDaGUKICAgICAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3NQbGFjZWhvbGRlclNob3duOgogICAgICAgICAgICAgaWYgKGlzPEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChSZW5kZXJTdHlsZSogc3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNv
bnRleHQuZWxlbWVudFN0eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0eWxlLT5zZXRVbmlxdWUoKTsKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICplbGVtZW50LCBT
dHlsZVJlbGF0aW9uOjpVbmlxdWUpOwogICAgICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpLmlzUGxhY2Vob2xkZXJWaXNpYmxl
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03OTMsMjkg
Kzc3MywyNiBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlCiAgICAg
ICAgICAgICBpZiAoZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGNvbnN0IENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0ID0gc2VsZWN0b3ItPnNlbGVj
dG9yTGlzdCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNlbGVjdG9yTGlzdFNw
ZWNpZmljaXR5OwotICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hTZWxlY3Rvckxpc3QoY29u
dGV4dCwgKmVsZW1lbnQsICpzZWxlY3Rvckxpc3QsIHNlbGVjdG9yTGlzdFNwZWNpZmljaXR5KSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoU2VsZWN0b3JMaXN0KGNoZWNraW5nQ29udGV4
dCwgY29udGV4dCwgKmVsZW1lbnQsICpzZWxlY3Rvckxpc3QsIHNlbGVjdG9yTGlzdFNwZWNpZmlj
aXR5KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljaXR5ID0gQ1NTU2VsZWN0b3I6
OmFkZFNwZWNpZmljaXRpZXMoc3BlY2lmaWNpdHksIHNlbGVjdG9yTGlzdFNwZWNpZmljaXR5KTsK
ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpCi0gICAgICAgICAgICAgICAg
ICAgIGVsZW1lbnQtPnNldFN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCk7CisgICAg
ICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICplbGVtZW50LCBT
dHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsKIAogICAgICAgICAgICAg
ICAgIGludCBjb3VudCA9IDE7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0IENTU1NlbGVjdG9y
TGlzdCogc2VsZWN0b3JMaXN0ID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGZvciAoRWxlbWVudCogc2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnBy
ZXZpb3VzU2libGluZygqZWxlbWVudCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBFbGVtZW50VHJhdmVy
c2FsOjpwcmV2aW91c1NpYmxpbmcoKnNpYmxpbmcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmctPnNldEFmZmVjdHNOZXh0U2libGluZ0Vs
ZW1lbnRTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihj
aGVja2luZ0NvbnRleHQsICpzaWJsaW5nLCBTdHlsZVJlbGF0aW9uOjpBZmZlY3RzTmV4dFNpYmxp
bmcpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZ25vcmVkU3BlY2lmaWNp
dHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hTZWxlY3Rvckxpc3QoY29udGV4
dCwgKnNpYmxpbmcsICpzZWxlY3Rvckxpc3QsIGlnbm9yZWRTcGVjaWZpY2l0eSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobWF0Y2hTZWxlY3Rvckxpc3QoY2hlY2tpbmdDb250ZXh0LCBj
b250ZXh0LCAqc2libGluZywgKnNlbGVjdG9yTGlzdCwgaWdub3JlZFNwZWNpZmljaXR5KSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICArK2NvdW50OwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY291bnQgKz0g
Y291bnRFbGVtZW50c0JlZm9yZSgqZWxlbWVudCwgY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1v
ZGU6OlJlc29sdmluZ1N0eWxlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVz
b2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW1lbnQtPnNldENoaWxkSW5kZXgoY291bnQpOworICAgICAgICAgICAgICAgICAgICBj
b3VudCArPSBjb3VudEVsZW1lbnRzQmVmb3JlKGNoZWNraW5nQ29udGV4dCwgKmVsZW1lbnQpOwor
ICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKmVs
ZW1lbnQsIFN0eWxlUmVsYXRpb246Ok50aENoaWxkSW5kZXgsIGNvdW50KTsKICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3ItPm1hdGNoTnRoKGNvdW50KSkK
QEAgLTgyNywxMCArODA0LDkgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0
IENoZQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBpZiAoZWxlbWVudC0+
cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5n
TW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVu
dC0+c2V0U3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAg
ICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKmVsZW1lbnQsIFN0eWxlUmVsYXRp
b246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcpOwogCi0gICAgICAgICAgICAgICAgaW50IGNv
dW50ID0gMSArIGNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUoKmVsZW1lbnQsIGVsZW1lbnQtPnRh
Z1FOYW1lKCksIGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSk7
CisgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMSArIGNvdW50RWxlbWVudHNPZlR5cGVCZWZv
cmUoY2hlY2tpbmdDb250ZXh0LCAqZWxlbWVudCwgZWxlbWVudC0+dGFnUU5hbWUoKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaE50aChjb3VudCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpAQCAtODQxLDE3ICs4MTcsMTQgQEAg
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZQogICAgICAgICAgICAgaWYg
KEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoY29uc3QgQ1NTU2VsZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QgPSBz
ZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
c2VsZWN0b3JMaXN0U3BlY2lmaWNpdHk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFNl
bGVjdG9yTGlzdChjb250ZXh0LCAqZWxlbWVudCwgKnNlbGVjdG9yTGlzdCwgc2VsZWN0b3JMaXN0
U3BlY2lmaWNpdHkpKQorICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hTZWxlY3Rvckxpc3Qo
Y2hlY2tpbmdDb250ZXh0LCBjb250ZXh0LCAqZWxlbWVudCwgKnNlbGVjdG9yTGlzdCwgc2VsZWN0
b3JMaXN0U3BlY2lmaWNpdHkpKQogICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNpdHkg
PSBDU1NTZWxlY3Rvcjo6YWRkU3BlY2lmaWNpdGllcyhzcGVjaWZpY2l0eSwgc2VsZWN0b3JMaXN0
U3BlY2lmaWNpdHkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQu
cmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyZW50RWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5UHJvcGVydHlCYXNl
ZEJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJl
bnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250
ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpCi0gICAgICAgICAgICAg
ICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRp
b25hbFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tp
bmdDb250ZXh0LCAqcGFyZW50RWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3Rl
ZEJ5UHJvcGVydHlCYXNlZEJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0Nv
bnRleHQsICpwYXJlbnRFbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlC
YWNrd2FyZFBvc2l0aW9uYWxSdWxlcyk7CiAKICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVs
ZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtODYwLDcgKzgzMyw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpj
aGVja09uZShjb25zdCBDaGUKICAgICAgICAgICAgICAgICBpZiAoY29uc3QgQ1NTU2VsZWN0b3JM
aXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgZm9yIChFbGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4
dFNpYmxpbmcoKmVsZW1lbnQpOyBzaWJsaW5nOyBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6
bmV4dFNpYmxpbmcoKnNpYmxpbmcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpZ25vcmVkU3BlY2lmaWNpdHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hT
ZWxlY3Rvckxpc3QoY29udGV4dCwgKnNpYmxpbmcsICpzZWxlY3Rvckxpc3QsIGlnbm9yZWRTcGVj
aWZpY2l0eSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hTZWxlY3Rvckxpc3Qo
Y2hlY2tpbmdDb250ZXh0LCBjb250ZXh0LCAqc2libGluZywgKnNlbGVjdG9yTGlzdCwgaWdub3Jl
ZFNwZWNpZmljaXR5KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2NvdW50OwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlCkBAIC04NzQsOCArODQ3
LDggQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZQogICAgICAgICAg
ICAgaWYgKCFzZWxlY3Rvci0+cGFyc2VOdGgoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxl
bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBN
b2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC0+
c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAgICAgICAg
ICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQs
IFN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVz
KTsKKwogICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNp
bmdDaGlsZHJlbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTg5
MCwxNCArODYzLDE0IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGUK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
c0FueToKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDaGVja2luZ0NvbnRleHRXaXRo
U3RhdHVzIHN1YkNvbnRleHQoY29udGV4dCk7CisgICAgICAgICAgICAgICAgTG9jYWxDb250ZXh0
IHN1YkNvbnRleHQoY29udGV4dCk7CiAgICAgICAgICAgICAgICAgc3ViQ29udGV4dC5pbkZ1bmN0
aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7CiAgICAgICAgICAgICAgICAgc3ViQ29udGV4dC5wc2V1
ZG9FbGVtZW50RWZmZWN0aXZlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgZm9yIChzdWJDb250
ZXh0LnNlbGVjdG9yID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJDb250
ZXh0LnNlbGVjdG9yOyBzdWJDb250ZXh0LnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0
KHN1YkNvbnRleHQuc2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgICAgIHN1YkNvbnRleHQu
Zmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBzdWJDb250ZXh0LnNlbGVjdG9yOwogICAgICAg
ICAgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvOwogICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbmdvcmVkU3BlY2lmaWNpdHkgPSAwOwotICAgICAgICAgICAg
ICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNl
dWRvLCBpbmdvcmVkU3BlY2lmaWNpdHkpLm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMp
CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KGNoZWNraW5nQ29udGV4
dCwgc3ViQ29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywgaW5nb3JlZFNwZWNpZmljaXR5KS5t
YXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzKQogICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtOTE2LDEy
ICs4ODksOCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmlz
TGluaygpICYmIGNvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9PSBWaXNpdGVkTWF0Y2hUeXBlOjpF
bmFibGVkOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0RyYWc6Ci0gICAg
ICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxl
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudFN0eWxlKQotICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeURyYWcoKTsKLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQtPnNldENoaWxk
cmVuQWZmZWN0ZWRCeURyYWcoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFkZFN0eWxl
UmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0
ZWRCeURyYWcpOworCiAgICAgICAgICAgICBpZiAoZWxlbWVudC0+cmVuZGVyZXIoKSAmJiBlbGVt
ZW50LT5yZW5kZXJlcigpLT5pc0RyYWdnaW5nKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICBicmVhazsKQEAgLTkyOSwyNSArODk4LDE3IEBAIGJvb2wgU2VsZWN0
b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGUKICAgICAgICAgICAgIHJldHVybiBtYXRjaGVz
Rm9jdXNQc2V1ZG9DbGFzcyhlbGVtZW50KTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3NIb3ZlcjoKICAgICAgICAgICAgIGlmIChtX3N0cmljdFBhcnNpbmcgfHwgZWxlbWVu
dC0+aXNMaW5rKCkgfHwgY2FuTWF0Y2hIb3Zlck9yQWN0aXZlSW5RdWlya3NNb2RlKGNvbnRleHQp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpS
ZXNvbHZpbmdTdHlsZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5lbGVtZW50
U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+c2V0
QWZmZWN0ZWRCeUhvdmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUhvdmVyKCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LT5ob3ZlcmVkKCkgfHwg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKCplbGVtZW50LCBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3ZlcikpCisgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxh
dGlvbihjaGVja2luZ0NvbnRleHQsICplbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5
SG92ZXIpOworCisgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhvdmVyZWQoKSB8fCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoY29uc3RfY2FzdDxFbGVtZW50
Jj4oKmVsZW1lbnQpLCBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3ZlcikpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQWN0aXZlOgogICAgICAgICAg
ICAgaWYgKG1fc3RyaWN0UGFyc2luZyB8fCBlbGVtZW50LT5pc0xpbmsoKSB8fCBjYW5NYXRjaEhv
dmVyT3JBY3RpdmVJblF1aXJrc01vZGUoY29udGV4dCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnRTdHlsZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5QWN0aXZlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQtPnNl
dENoaWxkcmVuQWZmZWN0ZWRCeUFjdGl2ZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBpZiAoZWxlbWVudC0+YWN0aXZlKCkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojpmb3JjZVBzZXVkb1N0YXRlKCplbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBY3Rp
dmUpKQorICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAq
ZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeUFjdGl2ZSk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoZWxlbWVudC0+YWN0aXZlKCkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpm
b3JjZVBzZXVkb1N0YXRlKGNvbnN0X2Nhc3Q8RWxlbWVudCY+KCplbGVtZW50KSwgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzQWN0aXZlKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwMDcsNyArOTY4LDcgQEAg
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZQogCiAgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzU2NvcGU6CiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgTm9kZSogY29udGV4dHVhbFJlZmVyZW5jZU5vZGUgPSAhY29udGV4dC5zY29w
ZSA/IGVsZW1lbnQtPmRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCkgOiBjb250ZXh0LnNjb3Bl
OworICAgICAgICAgICAgICAgIGNvbnN0IE5vZGUqIGNvbnRleHR1YWxSZWZlcmVuY2VOb2RlID0g
IWNoZWNraW5nQ29udGV4dC5zY29wZSA/IGVsZW1lbnQtPmRvY3VtZW50KCkuZG9jdW1lbnRFbGVt
ZW50KCkgOiBjaGVja2luZ0NvbnRleHQuc2NvcGU7CiAgICAgICAgICAgICAgICAgaWYgKGVsZW1l
bnQgPT0gY29udGV4dHVhbFJlZmVyZW5jZU5vZGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA1MCw3ICsxMDExLDcgQEAgYm9v
bCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZQogICAgIH0KICNpZiBFTkFCTEUo
VklERU9fVFJBQ0spCiAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQ
c2V1ZG9FbGVtZW50ICYmIHNlbGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpID09IENTU1NlbGVj
dG9yOjpQc2V1ZG9FbGVtZW50Q3VlKSB7Ci0gICAgICAgIENoZWNraW5nQ29udGV4dFdpdGhTdGF0
dXMgc3ViQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgTG9jYWxDb250ZXh0IHN1YkNvbnRleHQo
Y29udGV4dCk7CiAKICAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGNvbnN0ICYgc2VsZWN0b3Ig
PSBjb250ZXh0LnNlbGVjdG9yOwogICAgICAgICBmb3IgKHN1YkNvbnRleHQuc2VsZWN0b3IgPSBz
ZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1YkNvbnRleHQuc2VsZWN0b3I7IHN1
YkNvbnRleHQuc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3ViQ29udGV4dC5zZWxl
Y3RvcikpIHsKQEAgLTEwNTksNyArMTAyMCw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVj
a09uZShjb25zdCBDaGUKICAgICAgICAgICAgIHN1YkNvbnRleHQucHNldWRvRWxlbWVudEVmZmVj
dGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlZER5bmFtaWNQc2V1
ZG87CiAgICAgICAgICAgICB1bnNpZ25lZCBpZ25vcmVkU3BlY2lmaWNpdHkgPSAwOwotICAgICAg
ICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViQ29udGV4dCwgaWdub3JlZER5bmFtaWNQc2V1
ZG8sIGlnbm9yZWRTcGVjaWZpY2l0eSkubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykK
KyAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KGNoZWNraW5nQ29udGV4dCwgc3ViQ29u
dGV4dCwgaWdub3JlZER5bmFtaWNQc2V1ZG8sIGlnbm9yZWRTcGVjaWZpY2l0eSkubWF0Y2ggPT0g
TWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDY5LDEzICsxMDMwLDEzIEBAIGJv
b2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGUKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoU2VsZWN0b3JMaXN0KGNvbnN0IENoZWNr
aW5nQ29udGV4dFdpdGhTdGF0dXMmIGJhc2VDb250ZXh0LCBFbGVtZW50JiBlbGVtZW50LCBjb25z
dCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlzdCwgdW5zaWduZWQmIHNwZWNpZmljaXR5KSBj
b25zdAorYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoU2VsZWN0b3JMaXN0KENoZWNraW5nQ29u
dGV4dCYgY2hlY2tpbmdDb250ZXh0LCBjb25zdCBMb2NhbENvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0LCB1
bnNpZ25lZCYgc3BlY2lmaWNpdHkpIGNvbnN0CiB7CiAgICAgc3BlY2lmaWNpdHkgPSAwOwogICAg
IGJvb2wgaGFzTWF0Y2hlZEFueXRoaW5nID0gZmFsc2U7CiAKICAgICBmb3IgKGNvbnN0IENTU1Nl
bGVjdG9yKiBzdWJzZWxlY3RvciA9IHNlbGVjdG9yTGlzdC5maXJzdCgpOyBzdWJzZWxlY3Rvcjsg
c3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vic2VsZWN0b3IpKSB7Ci0gICAg
ICAgIENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgc3ViY29udGV4dChiYXNlQ29udGV4dCk7Cisg
ICAgICAgIExvY2FsQ29udGV4dCBzdWJjb250ZXh0KGNvbnRleHQpOwogICAgICAgICBzdWJjb250
ZXh0LmVsZW1lbnQgPSAmZWxlbWVudDsKICAgICAgICAgc3ViY29udGV4dC5zZWxlY3RvciA9IHN1
YnNlbGVjdG9yOwogICAgICAgICBzdWJjb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzID0g
dHJ1ZTsKQEAgLTEwODMsNyArMTA0NCw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjptYXRjaFNl
bGVjdG9yTGlzdCgKICAgICAgICAgc3ViY29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVu
dCA9IHN1YnNlbGVjdG9yOwogICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRv
OwogICAgICAgICB1bnNpZ25lZCBsb2NhbFNwZWNpZmljaXR5ID0gMDsKLSAgICAgICAgaWYgKG1h
dGNoUmVjdXJzaXZlbHkoc3ViY29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywgbG9jYWxTcGVj
aWZpY2l0eSkubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykgeworICAgICAgICBpZiAo
bWF0Y2hSZWN1cnNpdmVseShjaGVja2luZ0NvbnRleHQsIHN1YmNvbnRleHQsIGlnbm9yZUR5bmFt
aWNQc2V1ZG8sIGxvY2FsU3BlY2lmaWNpdHkpLm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNo
ZXMpIHsKICAgICAgICAgICAgIEFTU0VSVCghaWdub3JlRHluYW1pY1BzZXVkbyk7CiAKICAgICAg
ICAgICAgIGhhc01hdGNoZWRBbnl0aGluZyA9IHRydWU7CkBAIC0xMDkzLDQxICsxMDU0LDQxIEBA
IGJvb2wgU2VsZWN0b3JDaGVja2VyOjptYXRjaFNlbGVjdG9yTGlzdCgKICAgICByZXR1cm4gaGFz
TWF0Y2hlZEFueXRoaW5nOwogfQogCi1ib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTY3JvbGxi
YXJQc2V1ZG9DbGFzcyhjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBj
b25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpIGNvbnN0Citib29sIFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhjb25zdCBDaGVja2luZ0NvbnRleHQmIGNoZWNraW5n
Q29udGV4dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yKSBjb25zdAogewogICAgIEFTU0VSVChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3MpOwogCiAgICAgc3dpdGNoIChzZWxlY3Rvci0+cHNldWRvQ2xhc3NUeXBl
KCkpIHsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1dpbmRvd0luYWN0aXZlOgot
ICAgICAgICByZXR1cm4gaXNXaW5kb3dJbmFjdGl2ZShjb250ZXh0LmVsZW1lbnQpOworICAgICAg
ICByZXR1cm4gaXNXaW5kb3dJbmFjdGl2ZSgmZWxlbWVudCk7CiAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3NFbmFibGVkOgotICAgICAgICByZXR1cm4gc2Nyb2xsYmFyTWF0Y2hlc0Vu
YWJsZWRQc2V1ZG9DbGFzcyhjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNo
ZXNFbmFibGVkUHNldWRvQ2xhc3MoY2hlY2tpbmdDb250ZXh0KTsKICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzc0Rpc2FibGVkOgotICAgICAgICByZXR1cm4gc2Nyb2xsYmFyTWF0Y2hl
c0Rpc2FibGVkUHNldWRvQ2xhc3MoY29udGV4dCk7CisgICAgICAgIHJldHVybiBzY3JvbGxiYXJN
YXRjaGVzRGlzYWJsZWRQc2V1ZG9DbGFzcyhjaGVja2luZ0NvbnRleHQpOwogICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzSG92ZXI6Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXJNYXRj
aGVzSG92ZXJQc2V1ZG9DbGFzcyhjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1h
dGNoZXNIb3ZlclBzZXVkb0NsYXNzKGNoZWNraW5nQ29udGV4dCk7CiAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NBY3RpdmU6Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXJNYXRjaGVz
QWN0aXZlUHNldWRvQ2xhc3MoY29udGV4dCk7CisgICAgICAgIHJldHVybiBzY3JvbGxiYXJNYXRj
aGVzQWN0aXZlUHNldWRvQ2xhc3MoY2hlY2tpbmdDb250ZXh0KTsKICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzc0hvcml6b250YWw6Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXJNYXRj
aGVzSG9yaXpvbnRhbFBzZXVkb0NsYXNzKGNvbnRleHQpOworICAgICAgICByZXR1cm4gc2Nyb2xs
YmFyTWF0Y2hlc0hvcml6b250YWxQc2V1ZG9DbGFzcyhjaGVja2luZ0NvbnRleHQpOwogICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVmVydGljYWw6Ci0gICAgICAgIHJldHVybiBzY3Jv
bGxiYXJNYXRjaGVzVmVydGljYWxQc2V1ZG9DbGFzcyhjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
IHNjcm9sbGJhck1hdGNoZXNWZXJ0aWNhbFBzZXVkb0NsYXNzKGNoZWNraW5nQ29udGV4dCk7CiAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NEZWNyZW1lbnQ6Ci0gICAgICAgIHJldHVy
biBzY3JvbGxiYXJNYXRjaGVzRGVjcmVtZW50UHNldWRvQ2xhc3MoY29udGV4dCk7CisgICAgICAg
IHJldHVybiBzY3JvbGxiYXJNYXRjaGVzRGVjcmVtZW50UHNldWRvQ2xhc3MoY2hlY2tpbmdDb250
ZXh0KTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0luY3JlbWVudDoKLSAgICAg
ICAgcmV0dXJuIHNjcm9sbGJhck1hdGNoZXNJbmNyZW1lbnRQc2V1ZG9DbGFzcyhjb250ZXh0KTsK
KyAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNoZXNJbmNyZW1lbnRQc2V1ZG9DbGFzcyhjaGVj
a2luZ0NvbnRleHQpOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzU3RhcnQ6Ci0g
ICAgICAgIHJldHVybiBzY3JvbGxiYXJNYXRjaGVzU3RhcnRQc2V1ZG9DbGFzcyhjb250ZXh0KTsK
KyAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNoZXNTdGFydFBzZXVkb0NsYXNzKGNoZWNraW5n
Q29udGV4dCk7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NFbmQ6Ci0gICAgICAg
IHJldHVybiBzY3JvbGxiYXJNYXRjaGVzRW5kUHNldWRvQ2xhc3MoY29udGV4dCk7CisgICAgICAg
IHJldHVybiBzY3JvbGxiYXJNYXRjaGVzRW5kUHNldWRvQ2xhc3MoY2hlY2tpbmdDb250ZXh0KTsK
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0RvdWJsZUJ1dHRvbjoKLSAgICAgICAg
cmV0dXJuIHNjcm9sbGJhck1hdGNoZXNEb3VibGVCdXR0b25Qc2V1ZG9DbGFzcyhjb250ZXh0KTsK
KyAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNoZXNEb3VibGVCdXR0b25Qc2V1ZG9DbGFzcyhj
aGVja2luZ0NvbnRleHQpOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzU2luZ2xl
QnV0dG9uOgotICAgICAgICByZXR1cm4gc2Nyb2xsYmFyTWF0Y2hlc1NpbmdsZUJ1dHRvblBzZXVk
b0NsYXNzKGNvbnRleHQpOworICAgICAgICByZXR1cm4gc2Nyb2xsYmFyTWF0Y2hlc1NpbmdsZUJ1
dHRvblBzZXVkb0NsYXNzKGNoZWNraW5nQ29udGV4dCk7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NOb0J1dHRvbjoKLSAgICAgICAgcmV0dXJuIHNjcm9sbGJhck1hdGNoZXNOb0J1
dHRvblBzZXVkb0NsYXNzKGNvbnRleHQpOworICAgICAgICByZXR1cm4gc2Nyb2xsYmFyTWF0Y2hl
c05vQnV0dG9uUHNldWRvQ2xhc3MoY2hlY2tpbmdDb250ZXh0KTsKICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzc0Nvcm5lclByZXNlbnQ6Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXJN
YXRjaGVzQ29ybmVyUHJlc2VudFBzZXVkb0NsYXNzKGNvbnRleHQpOworICAgICAgICByZXR1cm4g
c2Nyb2xsYmFyTWF0Y2hlc0Nvcm5lclByZXNlbnRQc2V1ZG9DbGFzcyhjaGVja2luZ0NvbnRleHQp
OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCShyZXZpc2lvbiAxOTUxMzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3
b2xmLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xhcyBTaGFua3MgKHdl
YmtpdEBuaWNrc2hhbmtzLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5
YWtvdiA8YXBAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNo
IE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8pCkBAIC03NiwyNyArNzYsNDYgQEAgcHVibGljOgogCiAgICAgU2VsZWN0b3JDaGVja2Vy
KERvY3VtZW50Jik7CiAKKyAgICBzdHJ1Y3QgU3R5bGVSZWxhdGlvbiB7CisgICAgICAgIGVudW0g
VHlwZSB7CisgICAgICAgICAgICBBZmZlY3RlZEJ5QWN0aXZlLAorICAgICAgICAgICAgQWZmZWN0
ZWRCeURyYWcsCisgICAgICAgICAgICBBZmZlY3RlZEJ5RW1wdHksCisgICAgICAgICAgICBBZmZl
Y3RlZEJ5SG92ZXIsCisgICAgICAgICAgICBBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nLAorICAg
ICAgICAgICAgQWZmZWN0c05leHRTaWJsaW5nLAorICAgICAgICAgICAgQ2hpbGRyZW5BZmZlY3Rl
ZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMsCisgICAgICAgICAgICBDaGlsZHJlbkFmZmVjdGVk
QnlGaXJzdENoaWxkUnVsZXMsCisgICAgICAgICAgICBDaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0
eUJhc2VkQmFja3dhcmRQb3NpdGlvbmFsUnVsZXMsCisgICAgICAgICAgICBDaGlsZHJlbkFmZmVj
dGVkQnlMYXN0Q2hpbGRSdWxlcywKKyAgICAgICAgICAgIEZpcnN0Q2hpbGQsCisgICAgICAgICAg
ICBMYXN0Q2hpbGQsCisgICAgICAgICAgICBOdGhDaGlsZEluZGV4LAorICAgICAgICAgICAgVW5p
cXVlLAorICAgICAgICB9OworICAgICAgICBFbGVtZW50JiBlbGVtZW50OworICAgICAgICBUeXBl
IHR5cGU7CisgICAgICAgIHVuc2lnbmVkIHZhbHVlOworICAgIH07CisgICAgdXNpbmcgU3R5bGVS
ZWxhdGlvbnMgPSBWZWN0b3I8U3R5bGVSZWxhdGlvbiwgOD47CisKICAgICBzdHJ1Y3QgQ2hlY2tp
bmdDb250ZXh0IHsKICAgICAgICAgQ2hlY2tpbmdDb250ZXh0KFNlbGVjdG9yQ2hlY2tlcjo6TW9k
ZSByZXNvbHZpbmdNb2RlKQogICAgICAgICAgICAgOiByZXNvbHZpbmdNb2RlKHJlc29sdmluZ01v
ZGUpCi0gICAgICAgICAgICAsIGVsZW1lbnRTdHlsZShudWxscHRyKQotICAgICAgICAgICAgLCBw
c2V1ZG9JZChOT1BTRVVETykKLSAgICAgICAgICAgICwgc2Nyb2xsYmFyKG51bGxwdHIpCi0gICAg
ICAgICAgICAsIHNjcm9sbGJhclBhcnQoTm9QYXJ0KQotICAgICAgICAgICAgLCBzY29wZShudWxs
cHRyKQogICAgICAgICB7IH0KIAotICAgICAgICBTZWxlY3RvckNoZWNrZXI6Ok1vZGUgcmVzb2x2
aW5nTW9kZTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZTsKLSAgICAgICAgUHNl
dWRvSWQgcHNldWRvSWQ7Ci0gICAgICAgIFJlbmRlclNjcm9sbGJhciogc2Nyb2xsYmFyOwotICAg
ICAgICBTY3JvbGxiYXJQYXJ0IHNjcm9sbGJhclBhcnQ7Ci0gICAgICAgIGNvbnN0IENvbnRhaW5l
ck5vZGUqIHNjb3BlOworICAgICAgICBjb25zdCBTZWxlY3RvckNoZWNrZXI6Ok1vZGUgcmVzb2x2
aW5nTW9kZTsKKyAgICAgICAgUHNldWRvSWQgcHNldWRvSWQgeyBOT1BTRVVETyB9OworICAgICAg
ICBSZW5kZXJTY3JvbGxiYXIqIHNjcm9sbGJhciB7IG51bGxwdHIgfTsKKyAgICAgICAgU2Nyb2xs
YmFyUGFydCBzY3JvbGxiYXJQYXJ0IHsgTm9QYXJ0IH07CisgICAgICAgIGNvbnN0IENvbnRhaW5l
ck5vZGUqIHNjb3BlIHsgbnVsbHB0ciB9OworCisgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBi
ZSBuaWNlciB0byBoYXZlIGEgc2VwYXJhdGUgb2JqZWN0IGZvciByZXR1cm4gdmFsdWVzLiBUaGlz
IHJlcXVpcmVzIHNvbWUgbW9yZSB3b3JrIGluIHRoZSBzZWxlY3RvciBjb21waWxlci4KKyAgICAg
ICAgU3R5bGVSZWxhdGlvbnMgc3R5bGVSZWxhdGlvbnM7CisgICAgICAgIFBzZXVkb0lkU2V0IHBz
ZXVkb0lEU2V0OwogICAgIH07CiAKLSAgICBzdHJ1Y3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1
czsKLQotICAgIGJvb2wgbWF0Y2goY29uc3QgQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgY29uc3Qg
Q2hlY2tpbmdDb250ZXh0JiwgdW5zaWduZWQmIHNwZWNpZmljaXR5KSBjb25zdDsKKyAgICBib29s
IG1hdGNoKGNvbnN0IENTU1NlbGVjdG9yJiwgY29uc3QgRWxlbWVudCYsIENoZWNraW5nQ29udGV4
dCYsIHVuc2lnbmVkJiBzcGVjaWZpY2l0eSkgY29uc3Q7CiAKICAgICBzdGF0aWMgYm9vbCBpc0Nv
bW1vblBzZXVkb0NsYXNzU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqKTsKICAgICBzdGF0aWMg
Ym9vbCBtYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhjb25zdCBFbGVtZW50Kik7CkBAIC0xMDUsMTIg
KzEyNCwxNCBAQCBwdWJsaWM6CiAgICAgZW51bSBMaW5rTWF0Y2hNYXNrIHsgTWF0Y2hEZWZhdWx0
ID0gMCwgTWF0Y2hMaW5rID0gMSwgTWF0Y2hWaXNpdGVkID0gMiwgTWF0Y2hBbGwgPSBNYXRjaExp
bmsgfCBNYXRjaFZpc2l0ZWQgfTsKICAgICBzdGF0aWMgdW5zaWduZWQgZGV0ZXJtaW5lTGlua01h
dGNoVHlwZShjb25zdCBDU1NTZWxlY3RvciopOwogCisgICAgc3RydWN0IExvY2FsQ29udGV4dDsK
KyAgICAKIHByaXZhdGU6Ci0gICAgTWF0Y2hSZXN1bHQgbWF0Y2hSZWN1cnNpdmVseShjb25zdCBD
aGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiwgUHNldWRvSWRTZXQmLCB1bnNpZ25lZCYgc3BlY2lm
aWNpdHkpIGNvbnN0OwotICAgIGJvb2wgY2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0
aFN0YXR1cyYsIFBzZXVkb0lkU2V0JiwgTWF0Y2hUeXBlJiwgdW5zaWduZWQmIHNwZWNpZmljaXR5
KSBjb25zdDsKLSAgICBib29sIG1hdGNoU2VsZWN0b3JMaXN0KGNvbnN0IENoZWNraW5nQ29udGV4
dFdpdGhTdGF0dXMmLCBFbGVtZW50JiwgY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiwgdW5zaWduZWQm
IHNwZWNpZmljaXR5KSBjb25zdDsKKyAgICBNYXRjaFJlc3VsdCBtYXRjaFJlY3Vyc2l2ZWx5KENo
ZWNraW5nQ29udGV4dCYsIGNvbnN0IExvY2FsQ29udGV4dCYsIFBzZXVkb0lkU2V0JiwgdW5zaWdu
ZWQmIHNwZWNpZmljaXR5KSBjb25zdDsKKyAgICBib29sIGNoZWNrT25lKENoZWNraW5nQ29udGV4
dCYsIGNvbnN0IExvY2FsQ29udGV4dCYsIFBzZXVkb0lkU2V0JiwgTWF0Y2hUeXBlJiwgdW5zaWdu
ZWQmIHNwZWNpZmljaXR5KSBjb25zdDsKKyAgICBib29sIG1hdGNoU2VsZWN0b3JMaXN0KENoZWNr
aW5nQ29udGV4dCYsIGNvbnN0IExvY2FsQ29udGV4dCYsIGNvbnN0IEVsZW1lbnQmLCBjb25zdCBD
U1NTZWxlY3Rvckxpc3QmLCB1bnNpZ25lZCYgc3BlY2lmaWNpdHkpIGNvbnN0OwogCi0gICAgYm9v
bCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0
dXMmLCBjb25zdCBDU1NTZWxlY3RvciopIGNvbnN0OworICAgIGJvb2wgY2hlY2tTY3JvbGxiYXJQ
c2V1ZG9DbGFzcyhjb25zdCBDaGVja2luZ0NvbnRleHQmLCBjb25zdCBFbGVtZW50JiwgY29uc3Qg
Q1NTU2VsZWN0b3IqKSBjb25zdDsKIAogICAgIGJvb2wgbV9zdHJpY3RQYXJzaW5nOwogICAgIGJv
b2wgbV9kb2N1bWVudElzSFRNTDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNo
ZWNrZXJUZXN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTk1MTMwKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNjMsMTIgKzYzLDEyIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBpc0VuYWJsZWQoY29uc3Qg
RWxlbWUKICAgICAgICAgJiYgIWVsZW1lbnQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIGJvb2wgaXNNZWRpYURvY3VtZW50KEVsZW1lbnQqIGVsZW1lbnQpCitB
TFdBWVNfSU5MSU5FIGJvb2wgaXNNZWRpYURvY3VtZW50KGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQp
CiB7CiAgICAgcmV0dXJuIGVsZW1lbnQtPmRvY3VtZW50KCkuaXNNZWRpYURvY3VtZW50KCk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBpc0NoZWNrZWQoRWxlbWVudCYgZWxlbWVudCkKK0FMV0FZ
U19JTkxJTkUgYm9vbCBpc0NoZWNrZWQoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICAv
LyBFdmVuIHRob3VnaCBXaW5JRSBhbGxvd3MgY2hlY2tlZCBhbmQgaW5kZXRlcm1pbmF0ZSB0byBj
by1leGlzdCwgdGhlIENTUyBzZWxlY3RvciBzcGVjIHNheXMgdGhhdAogICAgIC8vIHlvdSBjYW4n
dCBiZSBib3RoIGNoZWNrZWQgYW5kIGluZGV0ZXJtaW5hdGUuIFdlIHdpbGwgYmVoYXZlIGxpa2Ug
V2luSUUgYmVoaW5kIHRoZSBzY2VuZXMgYW5kIGp1c3QKQEAgLTc4LDE3ICs3OCwxNyBAQCBBTFdB
WVNfSU5MSU5FIGJvb2wgaXNDaGVja2VkKEVsZW1lbnQmIGVsCiAgICAgICAgIHJldHVybiBpbnB1
dEVsZW1lbnQuc2hvdWxkQXBwZWFyQ2hlY2tlZCgpICYmICFpbnB1dEVsZW1lbnQuc2hvdWxkQXBw
ZWFySW5kZXRlcm1pbmF0ZSgpOwogICAgIH0KICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+
KGVsZW1lbnQpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KGVs
ZW1lbnQpLnNlbGVjdGVkKCk7CisgICAgICAgIHJldHVybiBjb25zdF9jYXN0PEhUTUxPcHRpb25F
bGVtZW50Jj4oZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQpKS5zZWxlY3RlZCgp
OwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgaXNJblJhbmdl
KEVsZW1lbnQqIGVsZW1lbnQpCitBTFdBWVNfSU5MSU5FIGJvb2wgaXNJblJhbmdlKGNvbnN0IEVs
ZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgcmV0dXJuIGVsZW1lbnQtPmlzSW5SYW5nZSgpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIGJvb2wgaXNPdXRPZlJhbmdlKEVsZW1lbnQqIGVsZW1lbnQpCitBTFdB
WVNfSU5MSU5FIGJvb2wgaXNPdXRPZlJhbmdlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAg
ICAgcmV0dXJuIGVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5oCShyZXZpc2lvbiAxOTUxMzApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MTAsNyArNjEwLDcgQEAgaW5saW5l
IGJvb2wgY2hlY2tSZWdpb25TZWxlY3Rvcihjb25zdCBDUwogICAgIGZvciAoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHMgPSByZWdpb25TZWxlY3RvcjsgczsgcyA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChz
KSkgewogICAgICAgICBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCBzZWxlY3RvckNo
ZWNraW5nQ29udGV4dChTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMpOwogICAg
ICAgICB1bnNpZ25lZCBpZ25vcmVkU3BlY2lmaWNpdHk7Ci0gICAgICAgIGlmIChzZWxlY3RvckNo
ZWNrZXIubWF0Y2gocywgcmVnaW9uRWxlbWVudCwgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQsIGln
bm9yZWRTcGVjaWZpY2l0eSkpCisgICAgICAgIGlmIChzZWxlY3RvckNoZWNrZXIubWF0Y2goKnMs
ICpyZWdpb25FbGVtZW50LCBzZWxlY3RvckNoZWNraW5nQ29udGV4dCwgaWdub3JlZFNwZWNpZmlj
aXR5KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCShyZXZp
c2lvbiAxOTUxMzApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKQEAgLTI5MSwxNCArMjkxLDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZW5lcmF0
ZUVsZW1lbnRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNl
cywgSlNDOjpGdW5jdGlvblB0cik7CiAgICAgdm9pZCBnZW5lcmF0ZUNvbnRleHRGdW5jdGlvbkNh
bGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgSlNDOjpGdW5jdGlvblB0
cik7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc0FjdGl2ZShBc3NlbWJsZXI6Okp1bXBMaXN0
JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsKLSAgICB2b2lkIGdlbmVy
YXRlRWxlbWVudElzRW1wdHkoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25z
dCBTZWxlY3RvckZyYWdtZW50Jik7Ci0gICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc0ZpcnN0Q2hp
bGQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdt
ZW50Jik7CisgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc0VtcHR5KEFzc2VtYmxlcjo6SnVtcExp
c3QmIGZhaWx1cmVDYXNlcyk7CisgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc0ZpcnN0Q2hpbGQo
QXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzKTsKICAgICB2b2lkIGdlbmVyYXRlRWxl
bWVudElzSG92ZXJlZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNl
bGVjdG9yRnJhZ21lbnQmKTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudElzSW5MYW5ndWFnZShB
c3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQm
KTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudElzSW5MYW5ndWFnZShBc3NlbWJsZXI6Okp1bXBM
aXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+Kik7Ci0gICAgdm9p
ZCBnZW5lcmF0ZUVsZW1lbnRJc0xhc3RDaGlsZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJl
Q2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsKLSAgICB2b2lkIGdlbmVyYXRlRWxlbWVu
dElzT25seUNoaWxkKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2Vs
ZWN0b3JGcmFnbWVudCYpOwotICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50SGFzUGxhY2Vob2xkZXJT
aG93bihBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJh
Z21lbnQmKTsKKyAgICB2b2lkIGdlbmVyYXRlRWxlbWVudElzTGFzdENoaWxkKEFzc2VtYmxlcjo6
SnVtcExpc3QmIGZhaWx1cmVDYXNlcyk7CisgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc09ubHlD
aGlsZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMpOworICAgIHZvaWQgZ2VuZXJh
dGVFbGVtZW50SGFzUGxhY2Vob2xkZXJTaG93bihBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJl
Q2FzZXMpOwogICAgIHZvaWQgZ2VuZXJhdGVTeW5jaHJvbml6ZVN0eWxlQXR0cmlidXRlKEFzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50RGF0YUFycmF5U2l6ZUFuZEZsYWdzKTsKICAgICB2b2lk
IGdlbmVyYXRlU3luY2hyb25pemVBbGxBbmltYXRlZFNWR0F0dHJpYnV0ZShBc3NlbWJsZXI6OlJl
Z2lzdGVySUQgZWxlbWVudERhdGFBcnJheVNpemVBbmRGbGFncyk7CiAgICAgdm9pZCBnZW5lcmF0
ZUVsZW1lbnRBdHRyaWJ1dGVzTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNh
c2VzLCBjb25zdCBMb2NhbFJlZ2lzdGVyJiBlbGVtZW50RGF0YUFkZHJlc3MsIGNvbnN0IFNlbGVj
dG9yRnJhZ21lbnQmKTsKQEAgLTMyMyw3ICszMjMsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2Vu
ZXJhdGVFbGVtZW50SXNUYXJnZXQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzKTsK
IAogICAgIC8vIEhlbHBlcnMuCi0gICAgdm9pZCBhZGRGbGFnc1RvRWxlbWVudFN0eWxlRnJvbUNv
bnRleHQoQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCwgaW50NjRfdCk7Cisg
ICAgdm9pZCBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKEFzc2VtYmxl
cjo6UmVnaXN0ZXJJRCBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OlR5
cGUsIE9wdGlvbmFsPEFzc2VtYmxlcjo6UmVnaXN0ZXJJRD4gdmFsdWUgPSB7IH0pOworICAgIHZv
aWQgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uKEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2lu
Z0NvbnRleHQsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6
OlN0eWxlUmVsYXRpb246OlR5cGUsIE9wdGlvbmFsPEFzc2VtYmxlcjo6UmVnaXN0ZXJJRD4gdmFs
dWUgPSB7IH0pOwogICAgIEFzc2VtYmxlcjo6SnVtcCBicmFuY2hPblJlc29sdmluZ01vZGVXaXRo
Q2hlY2tpbmdDb250ZXh0KEFzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU2VsZWN0b3JD
aGVja2VyOjpNb2RlLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0KTsKICAg
ICBBc3NlbWJsZXI6Okp1bXAgYnJhbmNoT25SZXNvbHZpbmdNb2RlKEFzc2VtYmxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbiwgU2VsZWN0b3JDaGVja2VyOjpNb2RlLCBBc3NlbWJsZXI6OlJlZ2lzdGVy
SUQgY2hlY2tpbmdDb250ZXh0KTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudElzRmlyc3RMaW5r
KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdpc3RlcklE
IGVsZW1lbnQpOwpAQCAtMzMyLDcgKzMzMyw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZW5lcmF0
ZU50aEZpbHRlclRlc3QoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgY291bnRlciwgaW50IGEsIGludCBiKTsKICAgICB2b2lkIGdlbmVyYXRl
UmVxdWVzdGVkUHNldWRvRWxlbWVudEVxdWFsc1RvU2VsZWN0b3JQc2V1ZG9FbGVtZW50KEFzc2Vt
Ymxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYsIEFz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQpOwogICAgIHZvaWQgZ2VuZXJhdGVT
cGVjaWFsRmFpbHVyZUluUXVpcmtzTW9kZUZvckFjdGl2ZUFuZEhvdmVySWZOZWVkZWQoQXNzZW1i
bGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50Jik7Ci0g
ICAgdm9pZCBtYXJrRWxlbWVudElmUmVzb2x2aW5nU3R5bGUoQXNzZW1ibGVyOjpSZWdpc3RlcklE
LCBpbnQzMl90KTsKICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IGp1bXBJZk5vUHJldmlvdXNBZGph
Y2VudEVsZW1lbnQoKTsKICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IGp1bXBJZk5vTmV4dEFkamFj
ZW50RWxlbWVudCgpOwogICAgIEFzc2VtYmxlcjo6SnVtcCBqdW1wSWZOb3RSZXNvbHZpbmdTdHls
ZShBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0UmVnaXN0ZXIpOwpAQCAtMTg5
MSw3ICsxODkxLDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlU2VsZQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHNob3VsZE1hcmtTdHls
ZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyhmcmFnbWVudCkpCi0gICAgICAgICAgICBtYXJr
RWxlbWVudElmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgTm9kZTo6Zmxh
Z1N0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCkpOworICAgICAgICAgICAgZ2VuZXJh
dGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVy
LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxp
bmcpOwogICAgICAgICBnZW5lcmF0ZUJhY2t0cmFja2luZ1RhaWxzSWZOZWVkZWQoZmFpbHVyZUNh
c2VzLCBmcmFnbWVudCk7CiAgICAgfQogCkBAIC0yMTM1LDcgKzIxMzUsNyBAQCB2b2lkIFNlbGVj
dG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVXYWxrCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVEaXJlY3RBZGphY2VudFRyZWVXYWxrZXIoQXNzZW1ibGVyOjpKdW1wTGlzdCYg
ZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCkKIHsKICAgICBn
ZW5lcmF0ZVdhbGtUb1ByZXZpb3VzQWRqYWNlbnQoZmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7Ci0g
ICAgbWFya0VsZW1lbnRJZlJlc29sdmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIE5v
ZGU6OmZsYWdBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKSk7CisgICAgZ2VuZXJhdGVB
ZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBT
ZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVjdHNOZXh0U2libGluZyk7CiAKICAg
ICBBc3NlbWJsZXI6Okp1bXBMaXN0IG1hdGNoaW5nVGFnTmFtZUZhaWx1cmVDYXNlczsKICAgICBB
c3NlbWJsZXI6Okp1bXBMaXN0IG1hdGNoaW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2FzZXM7CkBAIC0y
MTYwLDcgKzIxNjAsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVJbmRp
CiAgICAgICAgIG1fYmFja3RyYWNraW5nTGV2ZWxzLmxhc3QoKS5pbmRpcmVjdEFkamFjZW50VHJl
ZVdhbGtlckJhY2t0cmFja2luZ1BvaW50ID0gbV9hc3NlbWJsZXIubGFiZWwoKTsKIAogICAgIGdl
bmVyYXRlV2Fsa1RvUHJldmlvdXNBZGphY2VudChmYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKLSAg
ICBtYXJrRWxlbWVudElmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgTm9k
ZTo6ZmxhZ0FmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpKTsKKyAgICBnZW5lcmF0ZUFk
ZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNl
bGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5nKTsKIAogICAg
IGlmIChmcmFnbWVudC5iYWNrdHJhY2tpbmdGbGFncyAmIEJhY2t0cmFja2luZ0ZsYWc6OkluZGly
ZWN0QWRqYWNlbnRFbnRyeVBvaW50KQogICAgICAgICBtX2JhY2t0cmFja2luZ0xldmVscy5sYXN0
KCkuaW5kaXJlY3RBZGphY2VudEVudHJ5UG9pbnQgPSBtX2Fzc2VtYmxlci5sYWJlbCgpOwpAQCAt
MjE3MCwzNSArMjE3MCw1MSBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVJ
bmRpCiAgICAgbG9jYWxGYWlsdXJlQ2FzZXMubGlua1RvKGxvb3BTdGFydCwgJm1fYXNzZW1ibGVy
KTsKIH0KIAordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQWRkU3R5bGVSZWxh
dGlvbklmUmVzb2x2aW5nU3R5bGUoQXNzZW1ibGVyOjpSZWdpc3RlcklEIGVsZW1lbnQsIFNlbGVj
dG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6VHlwZSByZWxhdGlvblR5cGUsIE9wdGlvbmFsPEFz
c2VtYmxlcjo6UmVnaXN0ZXJJRD4gdmFsdWUpCit7CisgICAgaWYgKG1fc2VsZWN0b3JDb250ZXh0
ID09IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3RvcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgTG9jYWxSZWdpc3RlciBjaGVja2luZ0NvbnRleHQobV9yZWdpc3RlckFsbG9jYXRvcik7Cisg
ICAgQXNzZW1ibGVyOjpKdW1wIG5vdFJlc29sdmluZ1N0eWxlID0ganVtcElmTm90UmVzb2x2aW5n
U3R5bGUoY2hlY2tpbmdDb250ZXh0KTsKKworICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbihj
aGVja2luZ0NvbnRleHQsIGVsZW1lbnQsIHJlbGF0aW9uVHlwZSwgdmFsdWUpOworCisgICAgbm90
UmVzb2x2aW5nU3R5bGUubGluaygmbV9hc3NlbWJsZXIpOworfQogCi12b2lkIFNlbGVjdG9yQ29k
ZUdlbmVyYXRvcjo6YWRkRmxhZ3NUb0VsZW1lbnRTdHlsZUZyb21Db250ZXh0KEFzc2VtYmxlcjo6
UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQsIGludDY0X3QgbmV3RmxhZykKK3N0YXRpYyB2b2lk
IGFkZFN0eWxlUmVsYXRpb25GdW5jdGlvbihTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4
dCogY2hlY2tpbmdDb250ZXh0LCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIGNoZWNraW5nQ29u
dGV4dC0+c3R5bGVSZWxhdGlvbnMuYXBwZW5kKHsgKmVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6
U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeUFjdGl2ZSwgMSB9KTsKK30KKwordm9pZCBTZWxlY3Rv
ckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbihBc3NlbWJsZXI6OlJlZ2lz
dGVySUQgY2hlY2tpbmdDb250ZXh0LCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVudCwgU2Vs
ZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpUeXBlIHJlbGF0aW9uVHlwZSwgT3B0aW9uYWw8
QXNzZW1ibGVyOjpSZWdpc3RlcklEPiB2YWx1ZSkKIHsKICAgICBBU1NFUlQobV9zZWxlY3RvckNv
bnRleHQgIT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yKTsKIAotICAgIExvY2FsUmVn
aXN0ZXIgY2hpbGRTdHlsZShtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKLSAgICBtX2Fzc2VtYmxlci5s
b2FkUHRyKEFzc2VtYmxlcjo6QWRkcmVzcyhjaGVja2luZ0NvbnRleHQsIE9CSkVDVF9PRkZTRVRP
RihTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCwgZWxlbWVudFN0eWxlKSksIGNoaWxk
U3R5bGUpOworICAgIC8vIEZJWE1FOiBBcHBlbmQgdG8gdmVjdG9yIHdpdGhvdXQgYSBmdW5jdGlv
biBjYWxsIGF0IGxlYXN0IHdoZW4gdGhlcmUgaXMgc3VmZmljaWVudCBjYXBhY2l0eS4KKyAgICBG
dW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9y
LCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOworICAgIGZ1bmN0aW9uQ2FsbC5z
ZXRGdW5jdGlvbkFkZHJlc3MoYWRkU3R5bGVSZWxhdGlvbkZ1bmN0aW9uKTsKKyAgICBmdW5jdGlv
bkNhbGwuc2V0VHdvQXJndW1lbnRzKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCk7CisgICAgZnVu
Y3Rpb25DYWxsLmNhbGwoKTsKIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbG9vayBpbnRvIGRv
aW5nIHNvbWV0aGluZyBzbWFydCBpbiBNYWNyb0Fzc2VtYmxlciBpbnN0ZWFkLgotICAgIEFzc2Vt
Ymxlcjo6QWRkcmVzcyBmbGFnQWRkcmVzcyhjaGlsZFN0eWxlLCBSZW5kZXJTdHlsZTo6bm9uaW5o
ZXJpdGVkRmxhZ3NNZW1vcnlPZmZzZXQoKSArIFJlbmRlclN0eWxlOjpOb25Jbmhlcml0ZWRGbGFn
czo6ZmxhZ3NNZW1vcnlPZmZzZXQoKSk7Ci0jaWYgQ1BVKEFSTV9USFVNQjIpCi0gICAgaW50MzJf
dCBmbGFnTG93Qml0cyA9IG5ld0ZsYWcgJiAweGZmZmZmZmZmOwotICAgIGludDMyX3QgZmxhZ0hp
Z2hCaXRzID0gbmV3RmxhZyA+PiAzMjsKLSAgICBpZiAoZmxhZ0xvd0JpdHMpCi0gICAgICAgIG1f
YXNzZW1ibGVyLm9yMzIoQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZmxhZ0xvd0JpdHMpLCBmbGFn
QWRkcmVzcyk7Ci0gICAgaWYgKGZsYWdIaWdoQml0cykgewotICAgICAgICBBc3NlbWJsZXI6OkFk
ZHJlc3MgZmxhZ0hpZ2hBZGRyZXNzID0gZmxhZ0FkZHJlc3Mud2l0aE9mZnNldCg0KTsKLSAgICAg
ICAgbV9hc3NlbWJsZXIub3IzMihBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihmbGFnSGlnaEJpdHMp
LCBmbGFnSGlnaEFkZHJlc3MpOwotICAgIH0KLSNlbGlmIENQVShYODZfNjQpIHx8IENQVShBUk02
NCkKLSAgICBMb2NhbFJlZ2lzdGVyIGZsYWdzKG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwotICAgIG1f
YXNzZW1ibGVyLmxvYWQ2NChmbGFnQWRkcmVzcywgZmxhZ3MpOwotICAgIExvY2FsUmVnaXN0ZXIg
aXNGaXJzdENoaWxkU3RhdGVGbGFnSW1tZWRpYXRlKG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwotICAg
IG1fYXNzZW1ibGVyLm1vdmUoQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQobmV3RmxhZyksIGlzRmly
c3RDaGlsZFN0YXRlRmxhZ0ltbWVkaWF0ZSk7Ci0gICAgbV9hc3NlbWJsZXIub3I2NChpc0ZpcnN0
Q2hpbGRTdGF0ZUZsYWdJbW1lZGlhdGUsIGZsYWdzKTsKLSAgICBtX2Fzc2VtYmxlci5zdG9yZTY0
KGZsYWdzLCBmbGFnQWRkcmVzcyk7Ci0jZWxzZQotI2Vycm9yIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6YWRkRmxhZ3NUb0VsZW1lbnRTdHlsZUZyb21Db250ZXh0IG5vdCBpbXBsZW1lbnRlZCBmb3Ig
dGhpcyBhcmNoaXRlY3R1cmUuCi0jZW5kaWYKKyAgICBBc3NlbWJsZXI6OkFkZHJlc3MgdmVjdG9y
QWRkcmVzcyhjaGVja2luZ0NvbnRleHQsIE9CSkVDVF9PRkZTRVRPRihTZWxlY3RvckNoZWNrZXI6
OkNoZWNraW5nQ29udGV4dCwgc3R5bGVSZWxhdGlvbnMpKTsKKyAgICBhdXRvIGRhdGFBZGRyZXNz
ID0gdmVjdG9yQWRkcmVzcy53aXRoT2Zmc2V0KFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlv
bnM6OmRhdGFNZW1vcnlPZmZzZXQoKSk7CisgICAgYXV0byBzaXplQWRkcmVzcyA9IHZlY3RvckFk
ZHJlc3Mud2l0aE9mZnNldChTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb25zOjpzaXplTWVt
b3J5T2Zmc2V0KCkpOworCisgICAgTG9jYWxSZWdpc3RlciByZWxhdGlvblBvaW50ZXIobV9yZWdp
c3RlckFsbG9jYXRvcik7CisgICAgbV9hc3NlbWJsZXIubG9hZDMyKHNpemVBZGRyZXNzLCByZWxh
dGlvblBvaW50ZXIpOworICAgIG1fYXNzZW1ibGVyLnN1YjMyKEFzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKDEpLCByZWxhdGlvblBvaW50ZXIpOworICAgIG1fYXNzZW1ibGVyLm11bDMyKEFzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKHNpemVvZihTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb24pKSwg
cmVsYXRpb25Qb2ludGVyLCByZWxhdGlvblBvaW50ZXIpOworICAgIG1fYXNzZW1ibGVyLmFkZFB0
cihkYXRhQWRkcmVzcywgcmVsYXRpb25Qb2ludGVyKTsKKworICAgIEFzc2VtYmxlcjo6QWRkcmVz
cyB0eXBlQWRkcmVzcyhyZWxhdGlvblBvaW50ZXIsIE9CSkVDVF9PRkZTRVRPRihTZWxlY3RvckNo
ZWNrZXI6OlN0eWxlUmVsYXRpb24sIHR5cGUpKTsKKyAgICBtX2Fzc2VtYmxlci5zdG9yZTMyKEFz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKHJlbGF0aW9uVHlwZSksIHR5cGVBZGRyZXNzKTsKKworICAg
IGlmICh2YWx1ZSkgeworICAgICAgICBBc3NlbWJsZXI6OkFkZHJlc3MgdmFsdWVBZGRyZXNzKHJl
bGF0aW9uUG9pbnRlciwgT0JKRUNUX09GRlNFVE9GKFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxh
dGlvbiwgdmFsdWUpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RvcmUzMigqdmFsdWUsIHZhbHVl
QWRkcmVzcyk7CisgICAgfQogfQogCiBBc3NlbWJsZXI6Okp1bXBMaXN0IFNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6anVtcElmTm9QcmV2aW91c0FkamFjZW50RWxlbWVudCgpCkBAIC0yNDIwLDI3ICsy
NDM2LDYgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6Om1vZHVsb0lzWmVybwogICAgIGZh
aWx1cmVDYXNlcy5hcHBlbmQobW9kdWxvKEFzc2VtYmxlcjo6Tm9uWmVybywgaW5wdXREaXZpZGVu
ZCwgZGl2aXNvcikpOwogfQogCi1zdGF0aWMgdm9pZCBzZXROb2RlRmxhZyhBc3NlbWJsZXImIGFz
c2VtYmxlciwgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGVsZW1lbnRBZGRyZXNzLCBpbnQzMl90IGZs
YWcpCi17Ci0gICAgYXNzZW1ibGVyLm9yMzIoQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZmxhZyks
IEFzc2VtYmxlcjo6QWRkcmVzcyhlbGVtZW50QWRkcmVzcywgTm9kZTo6bm9kZUZsYWdzTWVtb3J5
T2Zmc2V0KCkpKTsKLX0KLQotdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6Om1hcmtFbGVtZW50
SWZSZXNvbHZpbmdTdHlsZShBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVudCwgaW50MzJfdCBu
b2RlRmxhZykKLXsKLSAgICBpZiAobV9zZWxlY3RvckNvbnRleHQgPT0gU2VsZWN0b3JDb250ZXh0
OjpRdWVyeVNlbGVjdG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBc3NlbWJsZXI6Okp1bXBM
aXN0IHNraXBNYXJraW5nOwotICAgIHsKLSAgICAgICAgTG9jYWxSZWdpc3RlciBjaGVja2luZ0Nv
bnRleHQobV9yZWdpc3RlckFsbG9jYXRvcik7Ci0gICAgICAgIHNraXBNYXJraW5nLmFwcGVuZChq
dW1wSWZOb3RSZXNvbHZpbmdTdHlsZShjaGVja2luZ0NvbnRleHQpKTsKLSAgICB9Ci0KLSAgICBz
ZXROb2RlRmxhZyhtX2Fzc2VtYmxlciwgZWxlbWVudCwgbm9kZUZsYWcpOwotCi0gICAgc2tpcE1h
cmtpbmcubGluaygmbV9hc3NlbWJsZXIpOwotfQotCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6bGlua0ZhaWx1cmVzKEFzc2VtYmxlcjo6SnVtcExpc3QmIGdsb2JhbEZhaWx1cmVDYXNlcywg
QmFja3RyYWNraW5nQWN0aW9uIGJhY2t0cmFja2luZ0FjdGlvbiwgQXNzZW1ibGVyOjpKdW1wTGlz
dCYgbG9jYWxGYWlsdXJlQ2FzZXMpCiB7CiAgICAgc3dpdGNoIChiYWNrdHJhY2tpbmdBY3Rpb24p
IHsKQEAgLTI1NDcsMTcgKzI1NDIsMTcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlRWxlbQogICAgIGlmIChmcmFnbWVudC5wc2V1ZG9DbGFzc2VzLmNvbnRhaW5zKENTU1Nl
bGVjdG9yOjpQc2V1ZG9DbGFzc0FjdGl2ZSkpCiAgICAgICAgIGdlbmVyYXRlRWxlbWVudElzQWN0
aXZlKG1hdGNoaW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKICAgICBpZiAo
ZnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5jb250YWlucyhDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NF
bXB0eSkpCi0gICAgICAgIGdlbmVyYXRlRWxlbWVudElzRW1wdHkobWF0Y2hpbmdQb3N0VGFnTmFt
ZUZhaWx1cmVDYXNlcywgZnJhZ21lbnQpOworICAgICAgICBnZW5lcmF0ZUVsZW1lbnRJc0VtcHR5
KG1hdGNoaW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2FzZXMpOwogICAgIGlmIChmcmFnbWVudC5wc2V1
ZG9DbGFzc2VzLmNvbnRhaW5zKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hvdmVyKSkKICAgICAg
ICAgZ2VuZXJhdGVFbGVtZW50SXNIb3ZlcmVkKG1hdGNoaW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2Fz
ZXMsIGZyYWdtZW50KTsKICAgICBpZiAoZnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5jb250YWlucyhD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NPbmx5Q2hpbGQpKQotICAgICAgICBnZW5lcmF0ZUVsZW1l
bnRJc09ubHlDaGlsZChtYXRjaGluZ1Bvc3RUYWdOYW1lRmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7
CisgICAgICAgIGdlbmVyYXRlRWxlbWVudElzT25seUNoaWxkKG1hdGNoaW5nUG9zdFRhZ05hbWVG
YWlsdXJlQ2FzZXMpOwogICAgIGlmIChmcmFnbWVudC5wc2V1ZG9DbGFzc2VzLmNvbnRhaW5zKENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1BsYWNlaG9sZGVyU2hvd24pKQotICAgICAgICBnZW5lcmF0
ZUVsZW1lbnRIYXNQbGFjZWhvbGRlclNob3duKG1hdGNoaW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2Fz
ZXMsIGZyYWdtZW50KTsKKyAgICAgICAgZ2VuZXJhdGVFbGVtZW50SGFzUGxhY2Vob2xkZXJTaG93
bihtYXRjaGluZ1Bvc3RUYWdOYW1lRmFpbHVyZUNhc2VzKTsKICAgICBpZiAoZnJhZ21lbnQucHNl
dWRvQ2xhc3Nlcy5jb250YWlucyhDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NGaXJzdENoaWxkKSkK
LSAgICAgICAgZ2VuZXJhdGVFbGVtZW50SXNGaXJzdENoaWxkKG1hdGNoaW5nUG9zdFRhZ05hbWVG
YWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKKyAgICAgICAgZ2VuZXJhdGVFbGVtZW50SXNGaXJzdENo
aWxkKG1hdGNoaW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2FzZXMpOwogICAgIGlmIChmcmFnbWVudC5w
c2V1ZG9DbGFzc2VzLmNvbnRhaW5zKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0xhc3RDaGlsZCkp
Ci0gICAgICAgIGdlbmVyYXRlRWxlbWVudElzTGFzdENoaWxkKG1hdGNoaW5nUG9zdFRhZ05hbWVG
YWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKKyAgICAgICAgZ2VuZXJhdGVFbGVtZW50SXNMYXN0Q2hp
bGQobWF0Y2hpbmdQb3N0VGFnTmFtZUZhaWx1cmVDYXNlcyk7CiAgICAgaWYgKCFmcmFnbWVudC5u
dGhDaGlsZEZpbHRlcnMuaXNFbXB0eSgpKQogICAgICAgICBnZW5lcmF0ZUVsZW1lbnRJc050aENo
aWxkKG1hdGNoaW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKICAgICBpZiAo
IWZyYWdtZW50Lm50aExhc3RDaGlsZEZpbHRlcnMuaXNFbXB0eSgpKQpAQCAtMzA1Miw1NSArMzA0
NywyMSBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVDb250CiAgICAgZmFp
bHVyZUNhc2VzLmFwcGVuZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVy
blZhbHVlKEFzc2VtYmxlcjo6WmVybykpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRGaXJzdENoaWxk
U3RhdGUoRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0g
ZWxlbWVudC0+cmVuZGVyU3R5bGUoKSkKLSAgICAgICAgc3R5bGUtPnNldEZpcnN0Q2hpbGRTdGF0
ZSgpOwotfQotCiBzdGF0aWMgYm9vbCBlbGVtZW50SXNBY3RpdmUoRWxlbWVudCogZWxlbWVudCkK
IHsKICAgICByZXR1cm4gZWxlbWVudC0+YWN0aXZlKCkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpmb3JjZVBzZXVkb1N0YXRlKCplbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NB
Y3RpdmUpOwogfQogCi1zdGF0aWMgYm9vbCBlbGVtZW50SXNBY3RpdmVGb3JTdHlsZVJlc29sdXRp
b24oRWxlbWVudCogZWxlbWVudCwgY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRl
eHQqIGNoZWNraW5nQ29udGV4dCkKLXsKLSAgICBpZiAoY2hlY2tpbmdDb250ZXh0LT5yZXNvbHZp
bmdNb2RlID09IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UmVzb2x2aW5nU3R5bGUpCi0gICAgICAg
IGVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUFjdGl2ZSgpOwotICAgIHJldHVybiBlbGVt
ZW50LT5hY3RpdmUoKSB8fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3Rh
dGUoKmVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0FjdGl2ZSk7Ci19Ci0KIHZvaWQg
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc0FjdGl2ZShBc3NlbWJsZXI6
Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50
KQogewogICAgIGdlbmVyYXRlU3BlY2lhbEZhaWx1cmVJblF1aXJrc01vZGVGb3JBY3RpdmVBbmRI
b3ZlcklmTmVlZGVkKGZhaWx1cmVDYXNlcywgZnJhZ21lbnQpOwotICAgIGlmIChtX3NlbGVjdG9y
Q29udGV4dCA9PSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpIHsKLSAgICAgICAgRnVu
Y3Rpb25DYWxsIGZ1bmN0aW9uQ2FsbChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwg
bV9zdGFja0FsbG9jYXRvciwgbV9mdW5jdGlvbkNhbGxzKTsKLSAgICAgICAgZnVuY3Rpb25DYWxs
LnNldEZ1bmN0aW9uQWRkcmVzcyhlbGVtZW50SXNBY3RpdmUpOwotICAgICAgICBmdW5jdGlvbkNh
bGwuc2V0T25lQXJndW1lbnQoZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7Ci0gICAgICAgIGZhaWx1
cmVDYXNlcy5hcHBlbmQoZnVuY3Rpb25DYWxsLmNhbGxBbmRCcmFuY2hPbkJvb2xlYW5SZXR1cm5W
YWx1ZShBc3NlbWJsZXI6Olplcm8pKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGlm
IChmcmFnbWVudE1hdGNoZXNUaGVSaWdodG1vc3RFbGVtZW50KG1fc2VsZWN0b3JDb250ZXh0LCBm
cmFnbWVudCkpIHsKLSAgICAgICAgTG9jYWxSZWdpc3RlciBjaGVja2luZ0NvbnRleHQobV9yZWdp
c3RlckFsbG9jYXRvcik7Ci0gICAgICAgIEFzc2VtYmxlcjo6SnVtcCBub3RSZXNvbHZpbmdTdHls
ZSA9IGp1bXBJZk5vdFJlc29sdmluZ1N0eWxlKGNoZWNraW5nQ29udGV4dCk7Ci0gICAgICAgIGFk
ZEZsYWdzVG9FbGVtZW50U3R5bGVGcm9tQ29udGV4dChjaGVja2luZ0NvbnRleHQsIFJlbmRlclN0
eWxlOjpOb25Jbmhlcml0ZWRGbGFnczo6ZmxhZ0lzYWZmZWN0ZWRCeUFjdGl2ZSgpKTsKLSAgICAg
ICAgbm90UmVzb2x2aW5nU3R5bGUubGluaygmbV9hc3NlbWJsZXIpOworICAgIGdlbmVyYXRlQWRk
U3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU2Vs
ZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5QWN0aXZlKTsKIAotICAgICAg
ICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2Nh
dG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOwotICAgICAgICBmdW5jdGlv
bkNhbGwuc2V0RnVuY3Rpb25BZGRyZXNzKGVsZW1lbnRJc0FjdGl2ZSk7Ci0gICAgICAgIGZ1bmN0
aW9uQ2FsbC5zZXRPbmVBcmd1bWVudChlbGVtZW50QWRkcmVzc1JlZ2lzdGVyKTsKLSAgICAgICAg
ZmFpbHVyZUNhc2VzLmFwcGVuZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJl
dHVyblZhbHVlKEFzc2VtYmxlcjo6WmVybykpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFs
bG9jYXRlUmVnaXN0ZXJXaXRoUHJlZmVyZW5jZShKU0M6OkdQUkluZm86OmFyZ3VtZW50R1BSMSk7
Ci0gICAgICAgIGxvYWRDaGVja2luZ0NvbnRleHQoY2hlY2tpbmdDb250ZXh0KTsKLSAgICAgICAg
bV9yZWdpc3RlckFsbG9jYXRvci5kZWFsbG9jYXRlUmVnaXN0ZXIoY2hlY2tpbmdDb250ZXh0KTsK
LQotICAgICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lz
dGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOwotICAgICAg
ICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRyZXNzKGVsZW1lbnRJc0FjdGl2ZUZvclN0eWxl
UmVzb2x1dGlvbik7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRUd29Bcmd1bWVudHMoZWxlbWVu
dEFkZHJlc3NSZWdpc3RlciwgY2hlY2tpbmdDb250ZXh0KTsKLSAgICAgICAgZmFpbHVyZUNhc2Vz
LmFwcGVuZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVyblZhbHVlKEFz
c2VtYmxlcjo6WmVybykpOwotICAgIH0KKyAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1f
YXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0
aW9uQ2FsbHMpOworICAgIGZ1bmN0aW9uQ2FsbC5zZXRGdW5jdGlvbkFkZHJlc3MoZWxlbWVudElz
QWN0aXZlKTsKKyAgICBmdW5jdGlvbkNhbGwuc2V0T25lQXJndW1lbnQoZWxlbWVudEFkZHJlc3NS
ZWdpc3Rlcik7CisgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJy
YW5jaE9uQm9vbGVhblJldHVyblZhbHVlKEFzc2VtYmxlcjo6WmVybykpOwogfQogCiBzdGF0aWMg
dm9pZCBqdW1wSWZFbGVtZW50SXNOb3RFbXB0eShBc3NlbWJsZXImIGFzc2VtYmxlciwgUmVnaXN0
ZXJBbGxvY2F0b3ImIHJlZ2lzdGVyQWxsb2NhdG9yLCBBc3NlbWJsZXI6Okp1bXBMaXN0JiBub3RF
bXB0eUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVudCkKQEAgLTMxMjksMTggKzMw
OTAsNyBAQCBzdGF0aWMgdm9pZCBqdW1wSWZFbGVtZW50SXNOb3RFbXB0eShBc3NlCiAgICAgbm9N
b3JlQ2hpbGRyZW4ubGluaygmYXNzZW1ibGVyKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0RWxlbWVu
dFN0eWxlSXNBZmZlY3RlZEJ5RW1wdHkoRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBlbGVtZW50
LT5zZXRTdHlsZUFmZmVjdGVkQnlFbXB0eSgpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRFbGVtZW50
U3R5bGVGcm9tQ29udGV4dElzQWZmZWN0ZWRCeUVtcHR5QW5kVXBkYXRlUmVuZGVyU3R5bGVJZk5l
Y2Vzc2FyeShTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCogY29udGV4dCwgYm9vbCBp
c0VtcHR5KQotewotICAgIEFTU0VSVChjb250ZXh0LT5lbGVtZW50U3R5bGUpOwotICAgIGNvbnRl
eHQtPmVsZW1lbnRTdHlsZS0+c2V0RW1wdHlTdGF0ZShpc0VtcHR5KTsKLX0KLQotdm9pZCBTZWxl
Y3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudElzRW1wdHkoQXNzZW1ibGVyOjpKdW1w
TGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCkKK3Zv
aWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc0VtcHR5KEFzc2VtYmxl
cjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcykKIHsKICAgICBpZiAobV9zZWxlY3RvckNvbnRleHQg
PT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yKSB7CiAgICAgICAgIGp1bXBJZkVsZW1l
bnRJc05vdEVtcHR5KG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBmYWlsdXJlQ2Fz
ZXMsIGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIpOwpAQCAtMzE1NSwzOCArMzEwNSwxMiBAQCB2b2lk
IFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAgICAgbV9hc3NlbWJsZXIubW92
ZShBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgaXNFbXB0eVJlc3VsdHMpOwogICAgIG5vdEVt
cHR5LmxpbmsoJm1fYXNzZW1ibGVyKTsKIAotICAgIEFzc2VtYmxlcjo6SnVtcCBza2lwTWFya2lu
ZzsKLSAgICBpZiAoZnJhZ21lbnRNYXRjaGVzVGhlUmlnaHRtb3N0RWxlbWVudChtX3NlbGVjdG9y
Q29udGV4dCwgZnJhZ21lbnQpKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIExvY2FsUmVnaXN0
ZXIgY2hlY2tpbmdDb250ZXh0KG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwotICAgICAgICAgICAgc2tp
cE1hcmtpbmcgPSBqdW1wSWZOb3RSZXNvbHZpbmdTdHlsZShjaGVja2luZ0NvbnRleHQpOwotCi0g
ICAgICAgICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lz
dGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOwotICAgICAg
ICAgICAgZnVuY3Rpb25DYWxsLnNldEZ1bmN0aW9uQWRkcmVzcyhzZXRFbGVtZW50U3R5bGVGcm9t
Q29udGV4dElzQWZmZWN0ZWRCeUVtcHR5QW5kVXBkYXRlUmVuZGVyU3R5bGVJZk5lY2Vzc2FyeSk7
Ci0gICAgICAgICAgICBmdW5jdGlvbkNhbGwuc2V0VHdvQXJndW1lbnRzKGNoZWNraW5nQ29udGV4
dCwgaXNFbXB0eVJlc3VsdHMpOwotICAgICAgICAgICAgZnVuY3Rpb25DYWxsLmNhbGwoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbkNhbGwobV9hc3NlbWJsZXIs
IG1fcmVnaXN0ZXJBbGxvY2F0b3IsIG1fc3RhY2tBbGxvY2F0b3IsIG1fZnVuY3Rpb25DYWxscyk7
Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRGdW5jdGlvbkFkZHJlc3Moc2V0RWxlbWVudFN0eWxl
SXNBZmZlY3RlZEJ5RW1wdHkpOwotICAgICAgICBmdW5jdGlvbkNhbGwuc2V0T25lQXJndW1lbnQo
ZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5jYWxsKCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgewotICAgICAgICAgICAgTG9jYWxSZWdpc3RlciBjaGVja2lu
Z0NvbnRleHQobV9yZWdpc3RlckFsbG9jYXRvcik7Ci0gICAgICAgICAgICBza2lwTWFya2luZyA9
IGp1bXBJZk5vdFJlc29sdmluZ1N0eWxlKGNoZWNraW5nQ29udGV4dCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgRnVuY3Rpb25DYWxsIGZ1bmN0aW9uQ2FsbChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFs
bG9jYXRvciwgbV9zdGFja0FsbG9jYXRvciwgbV9mdW5jdGlvbkNhbGxzKTsKLSAgICAgICAgZnVu
Y3Rpb25DYWxsLnNldEZ1bmN0aW9uQWRkcmVzcyhzZXRFbGVtZW50U3R5bGVJc0FmZmVjdGVkQnlF
bXB0eSk7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRPbmVBcmd1bWVudChlbGVtZW50QWRkcmVz
c1JlZ2lzdGVyKTsKLSAgICAgICAgZnVuY3Rpb25DYWxsLmNhbGwoKTsKLSAgICB9Ci0gICAgc2tp
cE1hcmtpbmcubGluaygmbV9hc3NlbWJsZXIpOworICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlv
bklmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU2VsZWN0b3JDaGVja2Vy
OjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5RW1wdHksIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRChp
c0VtcHR5UmVzdWx0cykpOwogCiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5i
cmFuY2hUZXN0MzIoQXNzZW1ibGVyOjpaZXJvLCBpc0VtcHR5UmVzdWx0cykpOwogfQogCi12b2lk
IFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNGaXJzdENoaWxkKEFzc2Vt
Ymxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJh
Z21lbnQpCit2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNGaXJz
dENoaWxkKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcykKIHsKICAgICBpZiAobV9z
ZWxlY3RvckNvbnRleHQgPT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yKSB7CiAgICAg
ICAgIEFzc2VtYmxlcjo6SnVtcExpc3Qgc3VjY2Vzc0Nhc2UgPSBqdW1wSWZOb1ByZXZpb3VzQWRq
YWNlbnRFbGVtZW50KCk7CkBAIC0zMjE2LDIyICszMTQwLDE0IEBAIHZvaWQgU2VsZWN0b3JDb2Rl
R2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICBMb2NhbFJlZ2lzdGVyIGNoZWNraW5nQ29udGV4
dChtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKICAgICBBc3NlbWJsZXI6Okp1bXAgbm90UmVzb2x2aW5n
U3R5bGUgPSBqdW1wSWZOb3RSZXNvbHZpbmdTdHlsZShjaGVja2luZ0NvbnRleHQpOwogCi0gICAg
c2V0Tm9kZUZsYWcobV9hc3NlbWJsZXIsIHBhcmVudEVsZW1lbnQsIE5vZGU6OmZsYWdDaGlsZHJl
bkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXNGbGFnKCkpOworICAgIGdlbmVyYXRlQWRkU3R5bGVS
ZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIHBhcmVudEVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6
U3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKTsKICAgICBt
X3JlZ2lzdGVyQWxsb2NhdG9yLmRlYWxsb2NhdGVSZWdpc3RlcihwYXJlbnRFbGVtZW50KTsKIAog
ICAgIC8vIFRoZSBwYXJlbnQgbWFya2luZyBpcyB1bmNvbmRpdGlvbmFsLiBJZiB0aGUgbWF0Y2hp
bmcgaXMgbm90IGEgc3VjY2Vzcywgd2UgY2FuIG5vdyBmYWlsLgogICAgIC8vIE90aGVyd2lzZSB3
ZSBuZWVkIHRvIGFwcGx5IHNldEZpcnN0Q2hpbGRTdGF0ZSgpIG9uIHRoZSBSZW5kZXJTdHlsZS4K
ICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJs
ZXI6Ok5vblplcm8sIGlzRmlyc3RDaGlsZFJlZ2lzdGVyKSk7CiAKLSAgICBpZiAoZnJhZ21lbnRN
YXRjaGVzVGhlUmlnaHRtb3N0RWxlbWVudChtX3NlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnQpKQot
ICAgICAgICBhZGRGbGFnc1RvRWxlbWVudFN0eWxlRnJvbUNvbnRleHQoY2hlY2tpbmdDb250ZXh0
LCBSZW5kZXJTdHlsZTo6Tm9uSW5oZXJpdGVkRmxhZ3M6OnNldEZpcnN0Q2hpbGRTdGF0ZUZsYWdz
KCkpOwotICAgIGVsc2UgewotICAgICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNz
ZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9u
Q2FsbHMpOwotICAgICAgICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRyZXNzKHNldEZpcnN0
Q2hpbGRTdGF0ZSk7Ci0gICAgICAgIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50QWRkcmVz
cyA9IGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXI7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRPbmVB
cmd1bWVudChlbGVtZW50QWRkcmVzcyk7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5jYWxsKCk7Ci0g
ICAgfQorICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1l
bnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6Rmlyc3RD
aGlsZCk7CiAKICAgICBub3RSZXNvbHZpbmdTdHlsZS5saW5rKCZtX2Fzc2VtYmxlcik7CiAgICAg
ZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2hUZXN0MzIoQXNzZW1ibGVyOjpO
b25aZXJvLCBpc0ZpcnN0Q2hpbGRSZWdpc3RlcikpOwpAQCAtMzI0Miw0NCArMzE1OCwxNiBAQCBz
dGF0aWMgYm9vbCBlbGVtZW50SXNIb3ZlcmVkKEVsZW1lbnQqIGVsCiAgICAgcmV0dXJuIGVsZW1l
bnQtPmhvdmVyZWQoKSB8fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3Rh
dGUoKmVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hvdmVyKTsKIH0KIAotc3RhdGlj
IGJvb2wgZWxlbWVudElzSG92ZXJlZEZvclN0eWxlUmVzb2x1dGlvbihFbGVtZW50KiBlbGVtZW50
LCBjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCogY2hlY2tpbmdDb250ZXh0
KQotewotICAgIGlmIChjaGVja2luZ0NvbnRleHQtPnJlc29sdmluZ01vZGUgPT0gU2VsZWN0b3JD
aGVja2VyOjpNb2RlOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgZWxlbWVudC0+c2V0Q2hpbGRy
ZW5BZmZlY3RlZEJ5SG92ZXIoKTsKLSAgICByZXR1cm4gZWxlbWVudC0+aG92ZXJlZCgpIHx8IElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZSgqZWxlbWVudCwgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0NsYXNzSG92ZXIpOwotfQotCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVFbGVtZW50SXNIb3ZlcmVkKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVD
YXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCiB7CiAgICAgZ2VuZXJhdGVT
cGVjaWFsRmFpbHVyZUluUXVpcmtzTW9kZUZvckFjdGl2ZUFuZEhvdmVySWZOZWVkZWQoZmFpbHVy
ZUNhc2VzLCBmcmFnbWVudCk7Ci0gICAgaWYgKG1fc2VsZWN0b3JDb250ZXh0ID09IFNlbGVjdG9y
Q29udGV4dDo6UXVlcnlTZWxlY3RvcikgewotICAgICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25D
YWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBt
X2Z1bmN0aW9uQ2FsbHMpOwotICAgICAgICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRyZXNz
KGVsZW1lbnRJc0hvdmVyZWQpOwotICAgICAgICBmdW5jdGlvbkNhbGwuc2V0T25lQXJndW1lbnQo
ZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoZnVu
Y3Rpb25DYWxsLmNhbGxBbmRCcmFuY2hPbkJvb2xlYW5SZXR1cm5WYWx1ZShBc3NlbWJsZXI6Olpl
cm8pKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGlmIChmcmFnbWVudE1hdGNoZXNU
aGVSaWdodG1vc3RFbGVtZW50KG1fc2VsZWN0b3JDb250ZXh0LCBmcmFnbWVudCkpIHsKLSAgICAg
ICAgTG9jYWxSZWdpc3RlcldpdGhQcmVmZXJlbmNlIGNoZWNraW5nQ29udGV4dChtX3JlZ2lzdGVy
QWxsb2NhdG9yLCBKU0M6OkdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIEFzc2VtYmxl
cjo6SnVtcCBub3RSZXNvbHZpbmdTdHlsZSA9IGp1bXBJZk5vdFJlc29sdmluZ1N0eWxlKGNoZWNr
aW5nQ29udGV4dCk7Ci0gICAgICAgIGFkZEZsYWdzVG9FbGVtZW50U3R5bGVGcm9tQ29udGV4dChj
aGVja2luZ0NvbnRleHQsIFJlbmRlclN0eWxlOjpOb25Jbmhlcml0ZWRGbGFnczo6ZmxhZ0lzYWZm
ZWN0ZWRCeUhvdmVyKCkpOwotICAgICAgICBub3RSZXNvbHZpbmdTdHlsZS5saW5rKCZtX2Fzc2Vt
Ymxlcik7CisgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVt
ZW50QWRkcmVzc1JlZ2lzdGVyLCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVj
dGVkQnlIb3Zlcik7CiAKLSAgICAgICAgRnVuY3Rpb25DYWxsIGZ1bmN0aW9uQ2FsbChtX2Fzc2Vt
YmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9zdGFja0FsbG9jYXRvciwgbV9mdW5jdGlvbkNh
bGxzKTsKLSAgICAgICAgZnVuY3Rpb25DYWxsLnNldEZ1bmN0aW9uQWRkcmVzcyhlbGVtZW50SXNI
b3ZlcmVkKTsKLSAgICAgICAgZnVuY3Rpb25DYWxsLnNldE9uZUFyZ3VtZW50KGVsZW1lbnRBZGRy
ZXNzUmVnaXN0ZXIpOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGZ1bmN0aW9uQ2FsbC5j
YWxsQW5kQnJhbmNoT25Cb29sZWFuUmV0dXJuVmFsdWUoQXNzZW1ibGVyOjpaZXJvKSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCA9
IG1fcmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVSZWdpc3RlcldpdGhQcmVmZXJlbmNlKEpTQzo6
R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgbG9hZENoZWNraW5nQ29udGV4dChjaGVj
a2luZ0NvbnRleHQpOwotICAgICAgICBtX3JlZ2lzdGVyQWxsb2NhdG9yLmRlYWxsb2NhdGVSZWdp
c3RlcihjaGVja2luZ0NvbnRleHQpOwotCi0gICAgICAgIEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbkNh
bGwobV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJBbGxvY2F0b3IsIG1fc3RhY2tBbGxvY2F0b3IsIG1f
ZnVuY3Rpb25DYWxscyk7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRGdW5jdGlvbkFkZHJlc3Mo
ZWxlbWVudElzSG92ZXJlZEZvclN0eWxlUmVzb2x1dGlvbik7Ci0gICAgICAgIGZ1bmN0aW9uQ2Fs
bC5zZXRUd29Bcmd1bWVudHMoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgY2hlY2tpbmdDb250ZXh0
KTsKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5j
aE9uQm9vbGVhblJldHVyblZhbHVlKEFzc2VtYmxlcjo6WmVybykpOwotICAgIH0KKyAgICBGdW5j
dGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBt
X3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOworICAgIGZ1bmN0aW9uQ2FsbC5zZXRG
dW5jdGlvbkFkZHJlc3MoZWxlbWVudElzSG92ZXJlZCk7CisgICAgZnVuY3Rpb25DYWxsLnNldE9u
ZUFyZ3VtZW50KGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIpOworICAgIGZhaWx1cmVDYXNlcy5hcHBl
bmQoZnVuY3Rpb25DYWxsLmNhbGxBbmRCcmFuY2hPbkJvb2xlYW5SZXR1cm5WYWx1ZShBc3NlbWJs
ZXI6Olplcm8pKTsKIH0KIAogdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxl
bWVudElzSW5MYW5ndWFnZShBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0
IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQpAQCAtMzMwMCwxMyArMzE4OCw3IEBAIHZvaWQg
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICBmYWlsdXJlQ2FzZXMuYXBw
ZW5kKGZ1bmN0aW9uQ2FsbC5jYWxsQW5kQnJhbmNoT25Cb29sZWFuUmV0dXJuVmFsdWUoQXNzZW1i
bGVyOjpaZXJvKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldExhc3RDaGlsZFN0YXRlKEVsZW1lbnQq
IGVsZW1lbnQpCi17Ci0gICAgaWYgKFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnQtPnJlbmRl
clN0eWxlKCkpCi0gICAgICAgIHN0eWxlLT5zZXRMYXN0Q2hpbGRTdGF0ZSgpOwotfQotCi12b2lk
IFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNMYXN0Q2hpbGQoQXNzZW1i
bGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50JiBmcmFn
bWVudCkKK3ZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc0xhc3RD
aGlsZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMpCiB7CiAgICAgaWYgKG1fc2Vs
ZWN0b3JDb250ZXh0ID09IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3RvcikgewogICAgICAg
ICBBc3NlbWJsZXI6Okp1bXBMaXN0IHN1Y2Nlc3NDYXNlID0ganVtcElmTm9OZXh0QWRqYWNlbnRF
bGVtZW50KCk7CkBAIC0zMzQyLDM2ICszMjI0LDIwIEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZUVsZW0KICAgICBMb2NhbFJlZ2lzdGVyIGNoZWNraW5nQ29udGV4dChtX3Jl
Z2lzdGVyQWxsb2NhdG9yKTsKICAgICBBc3NlbWJsZXI6Okp1bXAgbm90UmVzb2x2aW5nU3R5bGUg
PSBqdW1wSWZOb3RSZXNvbHZpbmdTdHlsZShjaGVja2luZ0NvbnRleHQpOwogCi0gICAgc2V0Tm9k
ZUZsYWcobV9hc3NlbWJsZXIsIHBhcmVudEVsZW1lbnQsIE5vZGU6OmZsYWdDaGlsZHJlbkFmZmVj
dGVkQnlMYXN0Q2hpbGRSdWxlc0ZsYWcoKSk7CisgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9u
KGNoZWNraW5nQ29udGV4dCwgcGFyZW50RWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJl
bGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcyk7CiAgICAgbV9yZWdpc3Rl
ckFsbG9jYXRvci5kZWFsbG9jYXRlUmVnaXN0ZXIocGFyZW50RWxlbWVudCk7CiAKICAgICAvLyBU
aGUgcGFyZW50IG1hcmtpbmcgaXMgdW5jb25kaXRpb25hbC4gSWYgdGhlIG1hdGNoaW5nIGlzIG5v
dCBhIHN1Y2Nlc3MsIHdlIGNhbiBub3cgZmFpbC4KICAgICAvLyBPdGhlcndpc2Ugd2UgbmVlZCB0
byBhcHBseSBzZXRMYXN0Q2hpbGRTdGF0ZSgpIG9uIHRoZSBSZW5kZXJTdHlsZS4KICAgICBmYWls
dXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Ok5vblpl
cm8sIGlzTGFzdENoaWxkUmVnaXN0ZXIpKTsKIAotICAgIGlmIChmcmFnbWVudE1hdGNoZXNUaGVS
aWdodG1vc3RFbGVtZW50KG1fc2VsZWN0b3JDb250ZXh0LCBmcmFnbWVudCkpCi0gICAgICAgIGFk
ZEZsYWdzVG9FbGVtZW50U3R5bGVGcm9tQ29udGV4dChjaGVja2luZ0NvbnRleHQsIFJlbmRlclN0
eWxlOjpOb25Jbmhlcml0ZWRGbGFnczo6c2V0TGFzdENoaWxkU3RhdGVGbGFncygpKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgRnVuY3Rpb25DYWxsIGZ1bmN0aW9uQ2FsbChtX2Fzc2VtYmxlciwgbV9y
ZWdpc3RlckFsbG9jYXRvciwgbV9zdGFja0FsbG9jYXRvciwgbV9mdW5jdGlvbkNhbGxzKTsKLSAg
ICAgICAgZnVuY3Rpb25DYWxsLnNldEZ1bmN0aW9uQWRkcmVzcyhzZXRMYXN0Q2hpbGRTdGF0ZSk7
Ci0gICAgICAgIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50QWRkcmVzcyA9IGVsZW1lbnRB
ZGRyZXNzUmVnaXN0ZXI7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRPbmVBcmd1bWVudChlbGVt
ZW50QWRkcmVzcyk7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5jYWxsKCk7Ci0gICAgfQorICAgIGdl
bmVyYXRlQWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1lbnRBZGRyZXNzUmVn
aXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6TGFzdENoaWxkKTsKIAogICAg
IG5vdFJlc29sdmluZ1N0eWxlLmxpbmsoJm1fYXNzZW1ibGVyKTsKICAgICBmYWlsdXJlQ2FzZXMu
YXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Ok5vblplcm8sIGlzTGFz
dENoaWxkUmVnaXN0ZXIpKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0T25seUNoaWxkU3RhdGUoRWxl
bWVudCogZWxlbWVudCkKLXsKLSAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC0+
cmVuZGVyU3R5bGUoKSkgewotICAgICAgICBzdHlsZS0+c2V0Rmlyc3RDaGlsZFN0YXRlKCk7Ci0g
ICAgICAgIHN0eWxlLT5zZXRMYXN0Q2hpbGRTdGF0ZSgpOwotICAgIH0KLX0KLQotdm9pZCBTZWxl
Y3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudElzT25seUNoaWxkKEFzc2VtYmxlcjo6
SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQp
Cit2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNPbmx5Q2hpbGQo
QXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzKQogewogICAgIC8vIElzIE9ubHkgY2hp
bGQgaXMgcHJldHR5IG11Y2ggYSBjb21iaW5hdGlvbiBvZiBpc0ZpcnN0Q2hpbGQgKyBpc0xhc3RD
aGlsZC4gVGhlIG1haW4gZGlmZmVyZW5jZSBpcyB0aGF0IHRyZWUgbWFya2luZyBpcyBjb21iaW5l
ZC4KICAgICBpZiAobV9zZWxlY3RvckNvbnRleHQgPT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNl
bGVjdG9yKSB7CkBAIC0zNDE3LDQ0ICszMjgzLDI3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZUVsZW0KICAgICBMb2NhbFJlZ2lzdGVyIGNoZWNraW5nQ29udGV4dChtX3Jl
Z2lzdGVyQWxsb2NhdG9yKTsKICAgICBBc3NlbWJsZXI6Okp1bXAgbm90UmVzb2x2aW5nU3R5bGUg
PSBqdW1wSWZOb3RSZXNvbHZpbmdTdHlsZShjaGVja2luZ0NvbnRleHQpOwogCi0gICAgc2V0Tm9k
ZUZsYWcobV9hc3NlbWJsZXIsIHBhcmVudEVsZW1lbnQsIE5vZGU6OmZsYWdDaGlsZHJlbkFmZmVj
dGVkQnlGaXJzdENoaWxkUnVsZXNGbGFnKCkgfCBOb2RlOjpmbGFnQ2hpbGRyZW5BZmZlY3RlZEJ5
TGFzdENoaWxkUnVsZXNGbGFnKCkpOworICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbihjaGVj
a2luZ0NvbnRleHQsIHBhcmVudEVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlv
bjo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKTsKKyAgICBnZW5lcmF0ZUFkZFN0
eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBwYXJlbnRFbGVtZW50LCBTZWxlY3RvckNoZWNr
ZXI6OlN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKTsKKwog
ICAgIG1fcmVnaXN0ZXJBbGxvY2F0b3IuZGVhbGxvY2F0ZVJlZ2lzdGVyKHBhcmVudEVsZW1lbnQp
OwogCiAgICAgLy8gVGhlIHBhcmVudCBtYXJraW5nIGlzIHVuY29uZGl0aW9uYWwuIElmIHRoZSBt
YXRjaGluZyBpcyBub3QgYSBzdWNjZXNzLCB3ZSBjYW4gbm93IGZhaWwuCiAgICAgLy8gT3RoZXJ3
aXNlIHdlIG5lZWQgdG8gYXBwbHkgc2V0TGFzdENoaWxkU3RhdGUoKSBvbiB0aGUgUmVuZGVyU3R5
bGUuCiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2hUZXN0MzIoQXNz
ZW1ibGVyOjpOb25aZXJvLCBpc09ubHlDaGlsZFJlZ2lzdGVyKSk7CiAKLSAgICBpZiAoZnJhZ21l
bnRNYXRjaGVzVGhlUmlnaHRtb3N0RWxlbWVudChtX3NlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnQp
KQotICAgICAgICBhZGRGbGFnc1RvRWxlbWVudFN0eWxlRnJvbUNvbnRleHQoY2hlY2tpbmdDb250
ZXh0LCBSZW5kZXJTdHlsZTo6Tm9uSW5oZXJpdGVkRmxhZ3M6OnNldEZpcnN0Q2hpbGRTdGF0ZUZs
YWdzKCkgfCBSZW5kZXJTdHlsZTo6Tm9uSW5oZXJpdGVkRmxhZ3M6OnNldExhc3RDaGlsZFN0YXRl
RmxhZ3MoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbkNhbGwo
bV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJBbGxvY2F0b3IsIG1fc3RhY2tBbGxvY2F0b3IsIG1fZnVu
Y3Rpb25DYWxscyk7Ci0gICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRGdW5jdGlvbkFkZHJlc3Moc2V0
T25seUNoaWxkU3RhdGUpOwotICAgICAgICBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVudEFk
ZHJlc3MgPSBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyOwotICAgICAgICBmdW5jdGlvbkNhbGwuc2V0
T25lQXJndW1lbnQoZWxlbWVudEFkZHJlc3MpOwotICAgICAgICBmdW5jdGlvbkNhbGwuY2FsbCgp
OwotICAgIH0KKyAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBl
bGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkZp
cnN0Q2hpbGQpOworICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQs
IGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6
TGFzdENoaWxkKTsKIAogICAgIG5vdFJlc29sdmluZ1N0eWxlLmxpbmsoJm1fYXNzZW1ibGVyKTsK
ICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJs
ZXI6Ok5vblplcm8sIGlzT25seUNoaWxkUmVnaXN0ZXIpKTsKIH0KIAotc3RhdGljIGJvb2wgbWFr
ZUNvbnRleHRTdHlsZVVuaXF1ZUlmTmVjZXNzYXJ5QW5kVGVzdElzUGxhY2Vob2xkZXJTaG93bihF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCog
Y2hlY2tpbmdDb250ZXh0KQorc3RhdGljIGJvb2wgbWFrZUNvbnRleHRTdHlsZVVuaXF1ZUlmTmVj
ZXNzYXJ5QW5kVGVzdElzUGxhY2Vob2xkZXJTaG93bihFbGVtZW50KiBlbGVtZW50LCBTZWxlY3Rv
ckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCogY2hlY2tpbmdDb250ZXh0KQogewogICAgIGlmIChp
czxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7CiAgICAgICAgIGlmIChj
aGVja2luZ0NvbnRleHQtPnJlc29sdmluZ01vZGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpS
ZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgICAgIGNoZWNraW5nQ29udGV4dC0+ZWxlbWVudFN0eWxl
LT5zZXRVbmlxdWUoKTsKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50PigqZWxlbWVudCkuaXNQbGFjZWhvbGRlclZpc2libGUoKTsKLSAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBtYWtlRWxlbWVudFN0eWxlVW5pcXVlSWZO
ZWNlc3NhcnlBbmRUZXN0SXNQbGFjZWhvbGRlclNob3duKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0KiBjaGVja2luZ0NvbnRleHQpCi17Ci0g
ICAgaWYgKGlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKLSAgICAg
ICAgaWYgKGNoZWNraW5nQ29udGV4dC0+cmVzb2x2aW5nTW9kZSA9PSBTZWxlY3RvckNoZWNrZXI6
Ok1vZGU6OlJlc29sdmluZ1N0eWxlKSB7Ci0gICAgICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0
eWxlID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKSkKLSAgICAgICAgICAgICAgICBzdHlsZS0+c2V0
VW5pcXVlKCk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGNoZWNraW5nQ29udGV4dC0+c3R5bGVS
ZWxhdGlvbnMuYXBwZW5kKHsgKmVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlv
bjo6VW5pcXVlLCAxIH0pOwogICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQ+KCplbGVtZW50KS5pc1BsYWNlaG9sZGVyVmlzaWJsZSgpOwogICAgIH0KICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0zNDY1LDcgKzMzMTQsNyBAQCBzdGF0aWMgYm9vbCBpc1BsYWNl
aG9sZGVyU2hvd24oRWxlbWVudCogCiAgICAgcmV0dXJuIGlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+
KCplbGVtZW50KS5pc1BsYWNlaG9sZGVyVmlzaWJsZSgpOwogfQogCi12b2lkIFNlbGVjdG9yQ29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SGFzUGxhY2Vob2xkZXJTaG93bihBc3NlbWJsZXI6
Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50
KQordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudEhhc1BsYWNlaG9s
ZGVyU2hvd24oQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzKQogewogICAgIGlmICht
X3NlbGVjdG9yQ29udGV4dCA9PSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpIHsKICAg
ICAgICAgRnVuY3Rpb25DYWxsIGZ1bmN0aW9uQ2FsbChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFs
bG9jYXRvciwgbV9zdGFja0FsbG9jYXRvciwgbV9mdW5jdGlvbkNhbGxzKTsKQEAgLTM0ODAsMTAg
KzMzMjksNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAgICAg
bV9yZWdpc3RlckFsbG9jYXRvci5kZWFsbG9jYXRlUmVnaXN0ZXIoY2hlY2tpbmdDb250ZXh0KTsK
IAogICAgIEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbkNhbGwobV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJB
bGxvY2F0b3IsIG1fc3RhY2tBbGxvY2F0b3IsIG1fZnVuY3Rpb25DYWxscyk7Ci0gICAgaWYgKGZy
YWdtZW50TWF0Y2hlc1RoZVJpZ2h0bW9zdEVsZW1lbnQobV9zZWxlY3RvckNvbnRleHQsIGZyYWdt
ZW50KSkKLSAgICAgICAgZnVuY3Rpb25DYWxsLnNldEZ1bmN0aW9uQWRkcmVzcyhtYWtlQ29udGV4
dFN0eWxlVW5pcXVlSWZOZWNlc3NhcnlBbmRUZXN0SXNQbGFjZWhvbGRlclNob3duKTsKLSAgICBl
bHNlCi0gICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRGdW5jdGlvbkFkZHJlc3MobWFrZUVsZW1lbnRT
dHlsZVVuaXF1ZUlmTmVjZXNzYXJ5QW5kVGVzdElzUGxhY2Vob2xkZXJTaG93bik7CisgICAgZnVu
Y3Rpb25DYWxsLnNldEZ1bmN0aW9uQWRkcmVzcyhtYWtlQ29udGV4dFN0eWxlVW5pcXVlSWZOZWNl
c3NhcnlBbmRUZXN0SXNQbGFjZWhvbGRlclNob3duKTsKICAgICBmdW5jdGlvbkNhbGwuc2V0VHdv
QXJndW1lbnRzKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIGNoZWNraW5nQ29udGV4dCk7CiAgICAg
ZmFpbHVyZUNhc2VzLmFwcGVuZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJl
dHVyblZhbHVlKEFzc2VtYmxlcjo6WmVybykpOwogfQpAQCAtMzU4NSwxMSArMzQzMSw2IEBAIHZv
aWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICBmYWlsdXJlQ2FzZXMu
YXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Olplcm8sIEFzc2VtYmxl
cjo6QWRkcmVzcyhlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBOb2RlOjpub2RlRmxhZ3NNZW1vcnlP
ZmZzZXQoKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5vZGU6OmZsYWdJc0xpbmsoKSkpKTsK
IH0KIAotc3RhdGljIHZvaWQgc2V0RWxlbWVudENoaWxkSW5kZXgoRWxlbWVudCogZWxlbWVudCwg
aW50IGluZGV4KQotewotICAgIGVsZW1lbnQtPnNldENoaWxkSW5kZXgoaW5kZXgpOwotfQotCiBz
dGF0aWMgYm9vbCBudGhGaWx0ZXJJc0Fsd2F5c1NhdGlzaWZpZWQoaW50IGEsIGludCBiKQogewog
ICAgIC8vIEFueXRoaW5nIG1vZHVsbyAxIGlzIHplcm8uIFVubGVzcyBiIHJlc3RyaWN0cyB0aGUg
cmFuZ2UsIHRoaXMgZG9lcyBub3QgZmlsdGVyIGFueXRoaW5nIG91dC4KQEAgLTM2MTYsNyArMzQ1
Nyw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKCFpc0FkamFjZW50UmVsYXRpb24oZnJhZ21lbnQucmVsYXRpb25U
b1JpZ2h0RnJhZ21lbnQpKQotICAgICAgICBtYXJrRWxlbWVudElmUmVzb2x2aW5nU3R5bGUoZWxl
bWVudEFkZHJlc3NSZWdpc3RlciwgTm9kZTo6ZmxhZ1N0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNT
aWJsaW5nKCkpOworICAgICAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0
eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlv
bjo6QWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyk7CiAKICAgICAvLyBTZXR1cCB0aGUgY291bnRl
ciBhdCAxLgogICAgIExvY2FsUmVnaXN0ZXJXaXRoUHJlZmVyZW5jZSBlbGVtZW50Q291bnRlciht
X3JlZ2lzdGVyQWxsb2NhdG9yLCBKU0M6OkdQUkluZm86OmFyZ3VtZW50R1BSMSk7CkBAIC0zNjM0
LDcgKzM0NzUsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAK
ICAgICAgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBub0NhY2hlZENoaWxkSW5kZXhDYXNlczsKICAg
ICAgICAgZ2VuZXJhdGVXYWxrVG9QcmV2aW91c0FkamFjZW50RWxlbWVudChub01vcmVTaWJsaW5n
c0Nhc2VzLCBwcmV2aW91c1NpYmxpbmcpOwotICAgICAgICBtYXJrRWxlbWVudElmUmVzb2x2aW5n
U3R5bGUocHJldmlvdXNTaWJsaW5nLCBOb2RlOjpmbGFnQWZmZWN0c05leHRTaWJsaW5nRWxlbWVu
dFN0eWxlKCkpOworICAgICAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0
eWxlKHByZXZpb3VzU2libGluZywgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZl
Y3RzTmV4dFNpYmxpbmcpOwogICAgICAgICBub0NhY2hlZENoaWxkSW5kZXhDYXNlcy5hcHBlbmQo
bV9hc3NlbWJsZXIuYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6WmVybywgQXNzZW1ibGVyOjpBZGRy
ZXNzKHByZXZpb3VzU2libGluZywgTm9kZTo6bm9kZUZsYWdzTWVtb3J5T2Zmc2V0KCkpLCBBc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihOb2RlOjpmbGFnSGFzUmFyZURhdGEoKSkpKTsKICAgICAgICAg
ewogICAgICAgICAgICAgTG9jYWxSZWdpc3RlciBlbGVtZW50UmFyZURhdGEobV9yZWdpc3RlckFs
bG9jYXRvcik7CkBAIC0zNjUwLDI1ICszNDkxLDEzIEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZUVsZW0KIAogICAgICAgICBBc3NlbWJsZXI6OkxhYmVsIGxvb3BTdGFydCA9
IG1fYXNzZW1ibGVyLmxhYmVsKCk7CiAgICAgICAgIGdlbmVyYXRlV2Fsa1RvUHJldmlvdXNBZGph
Y2VudEVsZW1lbnQobm9Nb3JlU2libGluZ3NDYXNlcywgcHJldmlvdXNTaWJsaW5nKTsKLSAgICAg
ICAgbWFya0VsZW1lbnRJZlJlc29sdmluZ1N0eWxlKHByZXZpb3VzU2libGluZywgTm9kZTo6Zmxh
Z0FmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgZ2VuZXJhdGVBZGRT
dHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShwcmV2aW91c1NpYmxpbmcsIFNlbGVjdG9yQ2hl
Y2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5nKTsKICAgICAgICAgbV9hc3Nl
bWJsZXIuYWRkMzIoQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIGVsZW1lbnRDb3VudGVyKTsK
ICAgICAgICAgbV9hc3NlbWJsZXIuanVtcCgpLmxpbmtUbyhsb29wU3RhcnQsICZtX2Fzc2VtYmxl
cik7CiAgICAgICAgIG5vTW9yZVNpYmxpbmdzQ2FzZXMubGluaygmbV9hc3NlbWJsZXIpOwogICAg
IH0KIAotICAgIC8vIFRyZWUgbWFya2luZyB3aGVuIGRvaW5nIHN0eWxlIHJlc29sdXRpb24uCi0g
ICAgaWYgKG1fc2VsZWN0b3JDb250ZXh0ICE9IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3Rv
cikgewotICAgICAgICBMb2NhbFJlZ2lzdGVyIGNoZWNraW5nQ29udGV4dChtX3JlZ2lzdGVyQWxs
b2NhdG9yKTsKLSAgICAgICAgQXNzZW1ibGVyOjpKdW1wIG5vdFJlc29sdmluZ1N0eWxlID0ganVt
cElmTm90UmVzb2x2aW5nU3R5bGUoY2hlY2tpbmdDb250ZXh0KTsKLQotICAgICAgICBBc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgZWxlbWVudEFkZHJlc3MgPSBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyOwot
ICAgICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVy
QWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOwotICAgICAgICBm
dW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRyZXNzKHNldEVsZW1lbnRDaGlsZEluZGV4KTsKLSAg
ICAgICAgZnVuY3Rpb25DYWxsLnNldFR3b0FyZ3VtZW50cyhlbGVtZW50QWRkcmVzcywgZWxlbWVu
dENvdW50ZXIpOwotICAgICAgICBmdW5jdGlvbkNhbGwuY2FsbCgpOwotCi0gICAgICAgIG5vdFJl
c29sdmluZ1N0eWxlLmxpbmsoJm1fYXNzZW1ibGVyKTsKLSAgICB9CisgICAgZ2VuZXJhdGVBZGRT
dHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTZWxl
Y3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246Ok50aENoaWxkSW5kZXgsIEFzc2VtYmxlcjo6UmVn
aXN0ZXJJRChlbGVtZW50Q291bnRlcikpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBzbG90IDog
dmFsaWRTdWJzZXRGaWx0ZXJzKQogICAgICAgICBnZW5lcmF0ZU50aEZpbHRlclRlc3QoZmFpbHVy
ZUNhc2VzLCBlbGVtZW50Q291bnRlciwgc2xvdC5maXJzdCwgc2xvdC5zZWNvbmQpOwpAQCAtMzY5
NSw3ICszNTI0LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWlzQWRqYWNlbnRSZWxhdGlvbihmcmFnbWVudC5y
ZWxhdGlvblRvUmlnaHRGcmFnbWVudCkpCi0gICAgICAgIG1hcmtFbGVtZW50SWZSZXNvbHZpbmdT
dHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBOb2RlOjpmbGFnU3R5bGVJc0FmZmVjdGVkQnlQ
cmV2aW91c1NpYmxpbmcoKSk7CisgICAgICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVz
b2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU2VsZWN0b3JDaGVja2VyOjpTdHls
ZVJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsKIAogICAgIGZvciAoY29uc3Qg
TnRoQ2hpbGRPZlNlbGVjdG9ySW5mbyogbnRoQ2hpbGRPZlNlbGVjdG9ySW5mbyA6IHZhbGlkU3Vi
c2V0RmlsdGVycykgewogICAgICAgICAvLyBTZXR1cCB0aGUgY291bnRlciBhdCAxLgpAQCAtMzcx
Miw3ICszNTQxLDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQog
ICAgICAgICAgICAgQXNzZW1ibGVyOjpMYWJlbCBsb29wU3RhcnQgPSBtX2Fzc2VtYmxlci5sYWJl
bCgpOwogCiAgICAgICAgICAgICBnZW5lcmF0ZVdhbGtUb1ByZXZpb3VzQWRqYWNlbnRFbGVtZW50
KG5vTW9yZVNpYmxpbmdzQ2FzZXMsIHByZXZpb3VzU2libGluZyk7Ci0gICAgICAgICAgICBtYXJr
RWxlbWVudElmUmVzb2x2aW5nU3R5bGUocHJldmlvdXNTaWJsaW5nLCBOb2RlOjpmbGFnQWZmZWN0
c05leHRTaWJsaW5nRWxlbWVudFN0eWxlKCkpOworICAgICAgICAgICAgZ2VuZXJhdGVBZGRTdHls
ZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShwcmV2aW91c1NpYmxpbmcsIFNlbGVjdG9yQ2hlY2tl
cjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5nKTsKIAogICAgICAgICAgICAgQXNz
ZW1ibGVyOjpKdW1wTGlzdCBsb2NhbEZhaWx1cmVDYXNlczsKICAgICAgICAgICAgIGdlbmVyYXRl
RWxlbWVudE1hdGNoZXNTZWxlY3Rvckxpc3QobG9jYWxGYWlsdXJlQ2FzZXMsIHByZXZpb3VzU2li
bGluZywgbnRoQ2hpbGRPZlNlbGVjdG9ySW5mby0+c2VsZWN0b3JMaXN0KTsKQEAgLTM3MjcsMTEg
KzM1NTYsNiBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAgICAg
fQogfQogCi1zdGF0aWMgdm9pZCBzZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9u
YWxSdWxlcyhFbGVtZW50KiBlbGVtZW50KQotewotICAgIGVsZW1lbnQtPnNldENoaWxkcmVuQWZm
ZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7Ci19Ci0KIHZvaWQgU2VsZWN0b3JDb2Rl
R2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc050aExhc3RDaGlsZChBc3NlbWJsZXI6Okp1bXBM
aXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQogewog
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8aW50LCBpbnQ+LCAzMj4gdmFsaWRTdWJzZXRGaWx0ZXJzOwpA
QCAtMzc0MCwyMCArMzU2NCw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0
ZUVsZW0KICAgICAgICAgTG9jYWxSZWdpc3RlciBwYXJlbnRFbGVtZW50KG1fcmVnaXN0ZXJBbGxv
Y2F0b3IpOwogICAgICAgICBnZW5lcmF0ZVdhbGtUb1BhcmVudEVsZW1lbnQoZmFpbHVyZUNhc2Vz
LCBwYXJlbnRFbGVtZW50KTsKIAotICAgICAgICBpZiAobV9zZWxlY3RvckNvbnRleHQgIT0gU2Vs
ZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yKSB7Ci0gICAgICAgICAgICBBc3NlbWJsZXI6Okp1
bXAgc2tpcE1hcmtpbmc7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9jYWxSZWdp
c3RlciBjaGVja2luZ0NvbnRleHQobV9yZWdpc3RlckFsbG9jYXRvcik7Ci0gICAgICAgICAgICAg
ICAgc2tpcE1hcmtpbmcgPSBqdW1wSWZOb3RSZXNvbHZpbmdTdHlsZShjaGVja2luZ0NvbnRleHQp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxs
KG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1
bmN0aW9uQ2FsbHMpOwotICAgICAgICAgICAgZnVuY3Rpb25DYWxsLnNldEZ1bmN0aW9uQWRkcmVz
cyhzZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyk7Ci0gICAgICAg
ICAgICBmdW5jdGlvbkNhbGwuc2V0T25lQXJndW1lbnQocGFyZW50RWxlbWVudCk7Ci0gICAgICAg
ICAgICBmdW5jdGlvbkNhbGwuY2FsbCgpOwotCi0gICAgICAgICAgICBza2lwTWFya2luZy5saW5r
KCZtX2Fzc2VtYmxlcik7Ci0gICAgICAgIH0KKyAgICAgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0
aW9uSWZSZXNvbHZpbmdTdHlsZShwYXJlbnRFbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxl
UmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsKIAog
ICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3Nl
bWJsZXI6Olplcm8sIEFzc2VtYmxlcjo6QWRkcmVzcyhwYXJlbnRFbGVtZW50LCBOb2RlOjpub2Rl
RmxhZ3NNZW1vcnlPZmZzZXQoKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5vZGU6OmZsYWdJ
c1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkKCkpKSk7CiAKQEAgLTM3ODgsMTMgKzM1OTksNiBAQCB2
b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAgICAgICAgIGdlbmVyYXRl
TnRoRmlsdGVyVGVzdChmYWlsdXJlQ2FzZXMsIGVsZW1lbnRDb3VudGVyLCBzbG90LmZpcnN0LCBz
bG90LnNlY29uZCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldFBhcmVudEFmZmVjdGVkQnlMYXN0Q2hp
bGRPZihFbGVtZW50KiBwYXJlbnRFbGVtZW50KQotewotICAgIEFTU0VSVChwYXJlbnRFbGVtZW50
KTsKLSAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2Vk
QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKLSAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJl
bkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOwotfQotCiB2b2lkIFNlbGVjdG9y
Q29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNOdGhMYXN0Q2hpbGRPZihBc3NlbWJsZXI6
Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50
KQogewogICAgIFZlY3Rvcjxjb25zdCBOdGhDaGlsZE9mU2VsZWN0b3JJbmZvKj4gdmFsaWRTdWJz
ZXRGaWx0ZXJzOwpAQCAtMzgwMywyMCArMzYwNyw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZUVsZW0KICAgICAgICAgTG9jYWxSZWdpc3RlciBwYXJlbnRFbGVtZW50KG1f
cmVnaXN0ZXJBbGxvY2F0b3IpOwogICAgICAgICBnZW5lcmF0ZVdhbGtUb1BhcmVudEVsZW1lbnQo
ZmFpbHVyZUNhc2VzLCBwYXJlbnRFbGVtZW50KTsKIAotICAgICAgICBpZiAobV9zZWxlY3RvckNv
bnRleHQgIT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yKSB7Ci0gICAgICAgICAgICBB
c3NlbWJsZXI6Okp1bXAgc2tpcE1hcmtpbmc7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgTG9jYWxSZWdpc3RlciBjaGVja2luZ0NvbnRleHQobV9yZWdpc3RlckFsbG9jYXRvcik7Ci0g
ICAgICAgICAgICAgICAgc2tpcE1hcmtpbmcgPSBqdW1wSWZOb3RSZXNvbHZpbmdTdHlsZShjaGVj
a2luZ0NvbnRleHQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBGdW5jdGlvbkNhbGwg
ZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxs
b2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOwotICAgICAgICAgICAgZnVuY3Rpb25DYWxsLnNldEZ1
bmN0aW9uQWRkcmVzcyhzZXRQYXJlbnRBZmZlY3RlZEJ5TGFzdENoaWxkT2YpOwotICAgICAgICAg
ICAgZnVuY3Rpb25DYWxsLnNldE9uZUFyZ3VtZW50KHBhcmVudEVsZW1lbnQpOwotICAgICAgICAg
ICAgZnVuY3Rpb25DYWxsLmNhbGwoKTsKLQotICAgICAgICAgICAgc2tpcE1hcmtpbmcubGluaygm
bV9hc3NlbWJsZXIpOwotICAgICAgICB9CisgICAgICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlv
bklmUmVzb2x2aW5nU3R5bGUocGFyZW50RWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJl
bGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dhcmRQb3NpdGlvbmFs
UnVsZXMpOwogCiAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNo
VGVzdDMyKEFzc2VtYmxlcjo6WmVybywgQXNzZW1ibGVyOjpBZGRyZXNzKHBhcmVudEVsZW1lbnQs
IE5vZGU6Om5vZGVGbGFnc01lbW9yeU9mZnNldCgpKSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
Tm9kZTo6ZmxhZ0lzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWQoKSkpKTsKIApAQCAtNDAwMyw3ICsz
Nzk0LDEwIEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZU1hcmsKICAgICBQ
c2V1ZG9JZCBkeW5hbWljUHNldWRvID0gQ1NTU2VsZWN0b3I6OnBzZXVkb0lkKGZyYWdtZW50LnBz
ZXVkb0VsZW1lbnRTZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSk7CiAgICAgaWYgKGR5bmFt
aWNQc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkgewogICAgICAgICBmYWlsdXJlQ2Fz
ZXMuYXBwZW5kKGJyYW5jaE9uUmVzb2x2aW5nTW9kZVdpdGhDaGVja2luZ0NvbnRleHQoQXNzZW1i
bGVyOjpOb3RFcXVhbCwgU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZpbmdTdHlsZSwgY2hl
Y2tpbmdDb250ZXh0KSk7Ci0gICAgICAgIGFkZEZsYWdzVG9FbGVtZW50U3R5bGVGcm9tQ29udGV4
dChjaGVja2luZ0NvbnRleHQsIFJlbmRlclN0eWxlOjpOb25Jbmhlcml0ZWRGbGFnczo6ZmxhZ1Bz
ZXVkb1N0eWxlKGR5bmFtaWNQc2V1ZG8pKTsKKworICAgICAgICBBc3NlbWJsZXI6OkFkZHJlc3Mg
ZmxhZ0FkZHJlc3MoY2hlY2tpbmdDb250ZXh0LCBPQkpFQ1RfT0ZGU0VUT0YoU2VsZWN0b3JDaGVj
a2VyOjpDaGVja2luZ0NvbnRleHQsIHBzZXVkb0lEU2V0KSk7CisgICAgICAgIFBzZXVkb0lkU2V0
IHBzZXVkb0lkU2V0IHsgZHluYW1pY1BzZXVkbyB9OworICAgICAgICBtX2Fzc2VtYmxlci5zdG9y
ZTMyKEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHBzZXVkb0lkU2V0LmRhdGEoKSksIGZsYWdBZGRy
ZXNzKTsKICAgICB9CiAKICAgICAvLyBXZSBoYXZlIGEgcHNldWRvRWxlbWVudFNlbGVjdG9yLCB3
ZSBhcmUgbm90IGluIENvbGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVkb0VsZW1lbnRz
IHNvCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCShyZXZpc2lvbiAxOTUx
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExOCw3ICsxMTgsNyBAQCBpbmxpbmUgYm9vbCBTZWxlY3RvckRhdGFMaXN0OjpzZWxl
Y3Rvck1hCiAgICAgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVj
a2luZ0NvbnRleHQoU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpRdWVyeWluZ1J1bGVzKTsKICAgICBz
ZWxlY3RvckNoZWNraW5nQ29udGV4dC5zY29wZSA9IHJvb3ROb2RlLmlzRG9jdW1lbnROb2RlKCkg
PyBudWxscHRyIDogJnJvb3ROb2RlOwogICAgIHVuc2lnbmVkIGlnbm9yZWRTcGVjaWZpY2l0eTsK
LSAgICByZXR1cm4gc2VsZWN0b3JDaGVja2VyLm1hdGNoKHNlbGVjdG9yRGF0YS5zZWxlY3Rvciwg
JmVsZW1lbnQsIHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0LCBpZ25vcmVkU3BlY2lmaWNpdHkpOwor
ICAgIHJldHVybiBzZWxlY3RvckNoZWNrZXIubWF0Y2goKnNlbGVjdG9yRGF0YS5zZWxlY3Rvciwg
ZWxlbWVudCwgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQsIGlnbm9yZWRTcGVjaWZpY2l0eSk7CiB9
CiAKIGlubGluZSBFbGVtZW50KiBTZWxlY3RvckRhdGFMaXN0OjpzZWxlY3RvckNsb3Nlc3QoY29u
c3QgU2VsZWN0b3JEYXRhJiBzZWxlY3RvckRhdGEsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IENv
bnRhaW5lck5vZGUmIHJvb3ROb2RlKSBjb25zdApAQCAtMTI2LDExICsxMjYsMTAgQEAgaW5saW5l
IEVsZW1lbnQqIFNlbGVjdG9yRGF0YUxpc3Q6OnNlbGVjdAogICAgIFNlbGVjdG9yQ2hlY2tlciBz
ZWxlY3RvckNoZWNrZXIoZWxlbWVudC5kb2N1bWVudCgpKTsKICAgICBTZWxlY3RvckNoZWNrZXI6
OkNoZWNraW5nQ29udGV4dCBzZWxlY3RvckNoZWNraW5nQ29udGV4dChTZWxlY3RvckNoZWNrZXI6
Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMpOwogICAgIHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0LnNjb3Bl
ID0gcm9vdE5vZGUuaXNEb2N1bWVudE5vZGUoKSA/IG51bGxwdHIgOiAmcm9vdE5vZGU7Ci0gICAg
RWxlbWVudCogY3VycmVudE5vZGUgPSAmZWxlbWVudDsKICAgICB1bnNpZ25lZCBpZ25vcmVkU3Bl
Y2lmaWNpdHk7Ci0gICAgaWYgKCFzZWxlY3RvckNoZWNrZXIubWF0Y2goc2VsZWN0b3JEYXRhLnNl
bGVjdG9yLCBjdXJyZW50Tm9kZSwgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQsIGlnbm9yZWRTcGVj
aWZpY2l0eSkpCisgICAgaWYgKCFzZWxlY3RvckNoZWNrZXIubWF0Y2goKnNlbGVjdG9yRGF0YS5z
ZWxlY3RvciwgZWxlbWVudCwgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQsIGlnbm9yZWRTcGVjaWZp
Y2l0eSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBjdXJyZW50Tm9kZTsK
KyAgICByZXR1cm4gJmVsZW1lbnQ7CiB9CiAKIGJvb2wgU2VsZWN0b3JEYXRhTGlzdDo6bWF0Y2hl
cyhFbGVtZW50JiB0YXJnZXRFbGVtZW50KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCShyZXZpc2lvbiAxOTUxMzApCisrKyBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDUwLDcgKzEwNTAsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8SW5zcGVjCiAgICAgICAgIGludCBpbmRleCA9IDA7CiAgICAgICAgIGZvciAoY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LmZpcnN0KCk7IHNlbGVjdG9yOyBzZWxl
Y3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpIHsKICAgICAgICAgICAgIHVu
c2lnbmVkIGlnbm9yZWRTcGVjaWZpY2l0eTsKLSAgICAgICAgICAgIGJvb2wgbWF0Y2hlZCA9IHNl
bGVjdG9yQ2hlY2tlci5tYXRjaChzZWxlY3RvciwgZWxlbWVudCwgY29udGV4dCwgaWdub3JlZFNw
ZWNpZmljaXR5KTsKKyAgICAgICAgICAgIGJvb2wgbWF0Y2hlZCA9IHNlbGVjdG9yQ2hlY2tlci5t
YXRjaCgqc2VsZWN0b3IsICplbGVtZW50LCBjb250ZXh0LCBpZ25vcmVkU3BlY2lmaWNpdHkpOwog
ICAgICAgICAgICAgaWYgKG1hdGNoZWQpCiAgICAgICAgICAgICAgICAgbWF0Y2hpbmdTZWxlY3Rv
cnMtPmFkZEl0ZW0oaW5kZXgpOwogICAgICAgICAgICAgKytpbmRleDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAJKHJldmlzaW9u
IDE5NTEzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYyLDcgKzg2Miw3IEBAIHN0YXRpYyBSZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1MKICAgICAgICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9y
Q2hlY2tlcihlbGVtZW50LT5kb2N1bWVudCgpKTsKIAogICAgICAgICB1bnNpZ25lZCBzcGVjaWZp
Y2l0eTsKLSAgICAgICAgYm9vbCBva2F5ID0gc2VsZWN0b3JDaGVja2VyLm1hdGNoKCZzZWxlY3Rv
ciwgZWxlbWVudCwgY29udGV4dCwgc3BlY2lmaWNpdHkpOworICAgICAgICBib29sIG9rYXkgPSBz
ZWxlY3RvckNoZWNrZXIubWF0Y2goc2VsZWN0b3IsICplbGVtZW50LCBjb250ZXh0LCBzcGVjaWZp
Y2l0eSk7CiAgICAgICAgIGlmICghb2theSkKICAgICAgICAgICAgIHNwZWNpZmljaXR5ID0gc2Vs
ZWN0b3Iuc3RhdGljU3BlY2lmaWNpdHkob2theSk7CiAK
</data>
<flag name="review"
          id="294155"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>