<?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>22030</bug_id>
          
          <creation_ts>2008-11-01 08:03:44 -0700</creation_ts>
          <short_desc>Make EventNames usable from multiple threads</short_desc>
          <delta_ts>2008-11-04 02:48:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>97370</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-01 08:03:44 -0700</bug_when>
    <thetext>Event names are used in classes that will be used in worker threads. It is probably impractical to attempt making atomic strings fully thread safe (usable from multiple threads at once), so each thread needs to have its own stringTable, and its own instance of global strings.

Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97377</commentid>
    <comment_count>1</comment_count>
      <attachid>24836</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-01 15:36:04 -0700</bug_when>
    <thetext>Created attachment 24836
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97378</commentid>
    <comment_count>2</comment_count>
      <attachid>24837</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-01 15:38:37 -0700</bug_when>
    <thetext>Created attachment 24837
proposed patch

Oops, sent before saving...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97462</commentid>
    <comment_count>3</comment_count>
      <attachid>24837</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-03 09:12:58 -0800</bug_when>
    <thetext>Comment on attachment 24837
proposed patch

Any uses in WebKit outside of the &quot;mac&quot; and &quot;win&quot; directories?

Typo &quot;Atimic&quot; in one place.

What performance impact does this change have?

Why is the EventNames constructor public? Why is &quot;int dummy&quot; a member of EventNames? Just to allow the initialization macro to work? I think both the constructor and the dummy member should be private.

&gt; : dummy (0)

There should be a space after the word &quot;dummy&quot; here?

&gt; // Initialization is not thread safe, so this function must be called from the main thread first.

Why not assert this?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97468</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-03 09:51:34 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 24837 [edit])
&gt; Any uses in WebKit outside of the &quot;mac&quot; and &quot;win&quot; directories?

No, grepping didn&apos;t find anything else.

&gt; What performance impact does this change have?

No change on PLT for me. Should I test anything else? I worried about a PLT regression, because this changed AtomicString construction and destruction, but event dispatching is probably not that hot - or is it?

&gt; Why is &quot;int dummy&quot; a member of EventNames? Just to allow the initialization macro
&gt; to work?

Yes, that&apos;s the reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97553</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-04 02:48:08 -0800</bug_when>
    <thetext>Committed revision 38094.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24836</attachid>
            <date>2008-11-01 15:36:04 -0700</date>
            <delta_ts>2008-11-01 15:38:37 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>AtomicString.txt</filename>
            <type>text/plain</type>
            <size>243713</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODA2NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzE2IEBACisyMDA4LTExLTAxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwMzAKKyAgICAgICAg
TWFrZSBFdmVudE5hbWVzIHVzYWJsZSBmcm9tIG11bHRpcGxlIHRocmVhZHMKKworICAgICAgICAq
IHBsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cmlu
Z1RhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY1N0cmluZzo6YWRkKToKKyAgICAgICAg
KFdlYkNvcmU6OkF0b21pY1N0cmluZzo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21p
Y1N0cmluZzo6ZmluZCk6CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNTdHJpbmc6OmluaXQpOgor
ICAgICAgICAqIHBsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmg6CisgICAgICAgIEF0aW1pYyBz
dHJpbmcgdGFibGUgaXMgbm93IHBlci10aHJlYWQuIEluZGl2aWR1YWwgc3RyaW5ncyBjYW5ub3Qg
YmUgc2hhcmVkIGJldHdlZW4gdGhyZWFkcywKKyAgICAgICAgc28gZ2xvYmFsIEF0b21pY1N0cmlu
ZyBjb25zdGFudHMgY2Fubm90IGJlIHVzZWQgZnJvbSB0aHJlYWRzIG90aGVyIHRoYW4gdGhlIG1h
aW4gb25lLgorCisgICAgICAgICogZG9tL0V2ZW50TmFtZXMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnROYW1lczo6RXZlbnROYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpldmVudE5hbWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TmFtZXM6OmluaXQpOgorICAgICAgICAqIGRvbS9F
dmVudE5hbWVzLmg6CisgICAgICAgIE1hZGUgRXZlbnROYW1lcyBhIFRocmVhZFNwZWNpZmljIHN0
cnVjdC4gSW5kaXZpZHVhbCBldmVudCBuYW1lcyBhcmUgbm93IGFjY2Vzc2VkIGFzCisgICAgICAg
IGV2ZW50TmFtZXMoKS5mb29FdmVudCwgbm90IEV2ZW50TmFtZXM6OmZvb0V2ZW50LiBUaGlzIG1h
a2VzIEV2ZW50TmFtZXMgdXNhYmxlIGZyb20gYWxsCisgICAgICAgIHRocmVhZHMuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmJhc2UuZXhwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93
QmFzZS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSk6CisgICAgICAgICog
ZG9tL0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJlZm9y
ZVRleHRJbnNlcnRlZEV2ZW50OjpCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCk6CisgICAgICAgICog
ZG9tL0JlZm9yZVVubG9hZEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJlZm9yZVVubG9h
ZEV2ZW50OjpCZWZvcmVVbmxvYWRFdmVudCk6CisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6ZGlzcGF0Y2hNb2RpZmllZEV2
ZW50KToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpkaXNwYXRjaENoaWxkSW5zZXJ0aW9uRXZlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmRpc3Bh
dGNoQ2hpbGRSZW1vdmFsRXZlbnRzKToKKyAgICAgICAgKiBkb20vRGVkaWNhdGVkV29ya2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZGljYXRlZFdvcmtlcjo6ZGlzcGF0Y2hFcnJvckV2ZW50
KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OmltcGxpY2l0Q2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldEZvY3Vz
ZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZGRMaXN0ZW5lclR5cGVJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlV2luZG93SW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFkZFdpbmRv
d0V2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlbW92ZVdpbmRv
d0V2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmZpbmlzaGVkUGFy
c2luZyk6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0Tm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudFRhcmdldE5vZGU6OmRpc3BhdGNoR2VuZXJpY0V2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldE5vZGU6OmRpc3BhdGNoV2luZG93RXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaFVJRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaFNpbXVsYXRlZENsaWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hNb3VzZUV2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hGb2N1c0V2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hCbHVyRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2RlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9kZTo6b24qKTogKG11bHRpcGxlIG1ldGhv
ZHMpCisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldE5vZGU6OnNldE9uKik6IChtdWx0aXBs
ZSBtZXRob2RzKQorICAgICAgICAqIGRvbS9LZXlib2FyZEV2ZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmV2ZW50VHlwZUZvcktleWJvYXJkRXZlbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OktleWJvYXJkRXZlbnQ6OmtleUNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5Ym9hcmRFdmVu
dDo6Y2hhckNvZGUpOgorICAgICAgICAqIGRvbS9NZXNzYWdlRXZlbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVzc2FnZUV2ZW50OjpNZXNzYWdlRXZlbnQpOgorICAgICAgICAqIGRvbS9NZXNz
YWdlUG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6ZGlzcGF0Y2hNZXNz
YWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6ZGlzcGF0Y2hDbG9zZUV2ZW50
KToKKyAgICAgICAgKiBkb20vTW91c2VFdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb3Vz
ZUV2ZW50Ojppc0RyYWdFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50Ojp0b0Vs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TW91c2VFdmVudDo6ZnJvbUVsZW1lbnQpOgorICAg
ICAgICAqIGRvbS9PdmVyZmxvd0V2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok92ZXJmbG93
RXZlbnQ6Ok92ZXJmbG93RXZlbnQpOgorICAgICAgICAqIGRvbS9UZXh0RXZlbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEV2ZW50OjpUZXh0RXZlbnQpOgorICAgICAgICAqIGRvbS9XZWJL
aXRBbmltYXRpb25FdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRBbmltYXRpb25F
dmVudDo6V2ViS2l0QW5pbWF0aW9uRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0QW5p
bWF0aW9uRXZlbnQ6On5XZWJLaXRBbmltYXRpb25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJLaXRBbmltYXRpb25FdmVudDo6aW5pdFdlYktpdEFuaW1hdGlvbkV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYktpdEFuaW1hdGlvbkV2ZW50OjphbmltYXRpb25OYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYktpdEFuaW1hdGlvbkV2ZW50OjplbGFwc2VkVGltZSk6CisgICAgICAgICog
ZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRU
cmFuc2l0aW9uRXZlbnQ6OldlYktpdFRyYW5zaXRpb25FdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJLaXRUcmFuc2l0aW9uRXZlbnQ6On5XZWJLaXRUcmFuc2l0aW9uRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViS2l0VHJhbnNpdGlvbkV2ZW50Ojppbml0V2ViS2l0VHJhbnNpdGlvbkV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdFRyYW5zaXRpb25FdmVudDo6cHJvcGVydHlO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdFRyYW5zaXRpb25FdmVudDo6ZWxhcHNlZFRp
bWUpOgorICAgICAgICAqIGRvbS9XaGVlbEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldo
ZWVsRXZlbnQ6OldoZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2hlZWxFdmVudDo6aW5p
dFdoZWVsRXZlbnQpOgorICAgICAgICAqIGRvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcDoKKyAg
ICAgICAgKiBkb20vWE1MVG9rZW5pemVyUXQuY3BwOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRl
QnV0dG9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUJ1dHRvbjo6ZGVmYXVsdEV2ZW50
SGFuZGxlcik6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5jcHA6CisgICAgICAgICog
ZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5ESFRNTEN1
dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkRIVE1MQ29weSk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmNhbkRIVE1MUGFzdGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojp0cnlESFRNTENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlESFRNTEN1dCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRyeURIVE1MUGFzdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6ZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnRzKToKKyAgICAgICAgKiBl
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
cGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQpOgorICAgICAgICAqIGVkaXRp
bmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25D
b250cm9sbGVyOjpzZXRGb2N1c2VkKToKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxCb2R5RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KiBodG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCdXR0
b25FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9IVE1M
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpvbkNoYW5nZSk6CisgICAg
ICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50OjpoYW5kbGVMb2NhbEV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9y
bUVsZW1lbnQ6OnByZXBhcmVTdWJtaXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVt
ZW50OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAg
ICAgICAgKiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEltYWdlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRN
TEltYWdlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUxvYWRlcjo6ZGlz
cGF0Y2hMb2FkRXZlbnQpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJl
cik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpwcmVEaXNwYXRjaEV2ZW50
SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpwb3N0RGlzcGF0
Y2hFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpv
blNlYXJjaCk6CisgICAgICAgICogaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxMYWJlbEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAg
ICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50Ojpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om1l
ZGlhUGxheWVyTmV0d29ya1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50OjpzZXRSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OnByb2dyZXNzRXZlbnRUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OnNlZWspOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
c2V0RGVmYXVsdFBsYXliYWNrUmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjpzZXRQbGF5YmFja1JhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpwYXVzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZXRWb2x1bWUpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpkb2N1bWVudFdpbGxCZWNvbWVJbmFjdGl2ZSk6CisgICAg
ICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
T2JqZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRN
TE9wdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50OjpkaXNwYXRjaExvYWRF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6ZGlzcGF0Y2hFcnJv
ckV2ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxpc3REZWZhdWx0RXZlbnRI
YW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVm
YXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvSFRNTFRva2VuaXplci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgICogbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzdG9w
TG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2FuQ2FjaGVQYWdlKToK
KyAgICAgICAgKiBsb2FkZXIvSW1hZ2VEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBsb2FkZXIvSW1hZ2VM
b2FkZXIuY3BwOgorICAgICAgICAqIGxvYWRlci9NZWRpYURvY3VtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhRG9jdW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAq
IGxvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxDaGVja2luZ0xpc3RlbmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxFcnJvckxpc3RlbmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxOb1VwZGF0ZUxpc3RlbmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxEb3dubG9hZGluZ0xp
c3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxQcm9n
cmVzc0xpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNh
bGxVcGRhdGVSZWFkeUxpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9u
Q2FjaGU6OmNhbGxDYWNoZWRMaXN0ZW5lcik6CisgICAgICAgICogcGFnZS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcDoKKyAgICAgICAgKiBwYWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bW91c2VCdXR0
b25MaXN0ZW5lcik6CisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpoYW5kbGVDb250ZXh0TWVu
dUV2ZW50KToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpET01XaW5kb3c6Om9uKik6IChtdWx0aXBsZSBtZXRob2RzKQorICAgICAgICAoV2ViQ29yZTo6
RE9NV2luZG93OjpzZXRPbiopOiAobXVsdGlwbGUgbWV0aG9kcykKKyAgICAgICAgKiBwYWdlL0V2
ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1v
dXNlUHJlc3NFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1v
dXNlRG91YmxlQ2xpY2tFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6Omhh
bmRsZU1vdXNlTW92ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFu
ZGxlTW91c2VSZWxlYXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp1
cGRhdGVEcmFnQW5kRHJvcCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNhbmNl
bERyYWdBbmREcm9wKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGVyZm9ybURy
YWdBbmREcm9wKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6dXBkYXRlTW91c2VF
dmVudFRhcmdldE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkaXNwYXRj
aE1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4
dE1lbnVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNhbk1vdXNlRG93
blN0YXJ0U2VsZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y2FuTW91c2VE
cmFnRXh0ZW5kU2VsZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGVmYXVs
dEtleWJvYXJkRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
ZHJhZ1NvdXJjZU1vdmVkVG8pOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkcmFn
U291cmNlRW5kZWRBdCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZURy
YWcpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVUZXh0SW5wdXRFdmVu
dCk6CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAqIHBhZ2Uv
RnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNlbmRSZXNpemVFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2VuZFNjcm9sbEV2ZW50KToKKyAgICAgICAgKiBwYWdl
L1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV0d29ya1N0YXRlQ2hhbmdlZCk6CisgICAg
ICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
QW5pbWF0aW9uQmFzZTo6YW5pbWF0aW9uVGltZXJDYWxsYmFja0ZpcmVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkFuaW1hdGlvbkJhc2U6OnByaW1lRXZlbnRUaW1lcnMpOgorICAgICAgICAqIHBhZ2Uv
YW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltcGxp
Y2l0QW5pbWF0aW9uOjpvbkFuaW1hdGlvbkVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbXBsaWNp
dEFuaW1hdGlvbjo6c2VuZFRyYW5zaXRpb25FdmVudCk6CisgICAgICAgICogcGFnZS9hbmltYXRp
b24vS2V5ZnJhbWVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmlt
YXRpb246Om9uQW5pbWF0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmlt
YXRpb246Om9uQW5pbWF0aW9uSXRlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1l
QW5pbWF0aW9uOjpvbkFuaW1hdGlvbkVuZCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUFu
aW1hdGlvbjo6c2VuZEFuaW1hdGlvbkV2ZW50KToKKyAgICAgICAgKiBwYWdlL2d0ay9FdmVudEhh
bmRsZXJHdGsuY3BwOgorICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzS2V5Ym9hcmRPcHRpb25UYWIpOgorICAgICAgICAqIHBhZ2UvbWFj
L0ZyYW1lTWFjLm1tOgorICAgICAgICAqIHBhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6aXNLZXlib2FyZE9wdGlvblRhYik6CisgICAgICAgICogcGx1Z2lucy9Q
bHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcDoK
KyAgICAgICAgKiBwbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHA6CisgICAgICAgICogcGx1Z2lu
cy93aW4vUGx1Z2luVmlld1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpo
YW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRs
ZU1vdXNlRXZlbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xQbGF5QnV0
dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFt
ZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFtZVNldDo6dXNlclJlc2l6ZSk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6dmFsdWVDaGFu
Z2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWVkaWE6OmZvcndhcmRFdmVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU2xpZGVyVGh1bWJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmZvcndhcmRFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6c2VsZWN0aW9uQ2hhbmdlZCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRDb250
cm9sSW5uZXJFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29udHJvbElubmVy
VGV4dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIpOgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VBcmVhOjpkaXNwYXRjaFN0b3JhZ2VFdmVudCk6Cisg
ICAgICAgICogc3RvcmFnZS9TZXNzaW9uU3RvcmFnZUFyZWEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2Vzc2lvblN0b3JhZ2VBcmVhOjpkaXNwYXRjaFN0b3JhZ2VFdmVudCk6CisgICAgICAgICog
c3ZnL1NWR0FFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBzdmcvU1ZHRG9jdW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnQ6OmRpc3BhdGNoWm9vbUV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0RvY3VtZW50OjpkaXNwYXRjaFNjcm9sbEV2ZW50KToKKyAgICAgICAgKiBzdmcv
U1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpoYXNMb2FkTGlzdGVuZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6c2VuZFNWR0xvYWRFdmVudElmUG9zc2libGUpOgorICAg
ICAgICAqIHN2Zy9TVkdFbGVtZW50SW5zdGFuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RWxlbWVudEluc3RhbmNlOjpvbiopOiAobXVsdGlwbGUgbWV0aG9kcykKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T24qKTogKG11bHRpcGxlIG1ldGhvZHMpCisgICAg
ICAgICogc3ZnL1NWR0ltYWdlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdl
TG9hZGVyOjpkaXNwYXRjaExvYWRFdmVudCk6CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOgorICAgICAgICAqIHN2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1NjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoRXJyb3JFdmVudCk6CisgICAgICAgICogeG1s
L1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpk
aXNwYXRjaFJlYWR5U3RhdGVDaGFuZ2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRw
UmVxdWVzdDo6ZGlzcGF0Y2hBYm9ydEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0OjpkaXNwYXRjaEVycm9yRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJl
cXVlc3Q6OmRpc3BhdGNoTG9hZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1
ZXN0OjpkaXNwYXRjaExvYWRTdGFydEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0OjpkaXNwYXRjaFByb2dyZXNzRXZlbnQpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVx
dWVzdFVwbG9hZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFVwbG9hZDo6
ZGlzcGF0Y2hBYm9ydEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0VXBs
b2FkOjpkaXNwYXRjaEVycm9yRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVl
c3RVcGxvYWQ6OmRpc3BhdGNoTG9hZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0VXBsb2FkOjpkaXNwYXRjaExvYWRTdGFydEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlhNTEh0dHBSZXF1ZXN0VXBsb2FkOjpkaXNwYXRjaFByb2dyZXNzRXZlbnQpOgorICAgICAgICAq
IHhtbC9YUGF0aFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6WFBh
dGhSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6On5YUGF0aFJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6aW52YWxpZGF0ZUl0ZXJhdG9yU3RhdGUp
OgorICAgICAgICBBY2Nlc3MgZXZlbnQgbmFtZXMgdmlhIGV2ZW50TmFtZXMoKSBmdW5jdGlvbi4K
KwogMjAwOC0xMS0wMSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZpc2lvbiAzODA2NCkK
KysrIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDE0ICsx
MjcsMTMgQEAgX19aMjZSZXBvcnRCbG9ja2VkT2JqQ0V4Y2VwdGlvblAxMU5TRXhjZQogX19aTjdX
ZWJDb3JlMTBDYWNoZWRQYWdlMTRkb2N1bWVudExvYWRlckV2CiBfX1pON1dlYkNvcmUxMENhY2hl
ZFBhZ2UyMmNhY2hlZFBhZ2VQbGF0Zm9ybURhdGFFdgogX19aTjdXZWJDb3JlMTBDYWNoZWRQYWdl
MjVzZXRDYWNoZWRQYWdlUGxhdGZvcm1EYXRhRVBOU18yMkNhY2hlZFBhZ2VQbGF0Zm9ybURhdGFF
Ci1fX1pON1dlYkNvcmUxMEV2ZW50TmFtZXMxMGNsaWNrRXZlbnRFCi1fX1pON1dlYkNvcmUxMEV2
ZW50TmFtZXMxMmtleWRvd25FdmVudEUKIF9fWk43V2ViQ29yZTEwTW91c2VFdmVudEMxRVJLTlNf
MTJBdG9taWNTdHJpbmdFYmJOM1dURjEwUGFzc1JlZlB0cklOU185RE9NV2luZG93RUVFaWlpaWli
YmJidE5TNV9JTlNfMTVFdmVudFRhcmdldE5vZGVFRUVOUzVfSU5TXzlDbGlwYm9hcmRFRUViCiBf
X1pON1dlYkNvcmUxMFNjcm9sbFZpZXcxN3NldFNjcm9sbGJhck1vZGVzRU5TXzEzU2Nyb2xsYmFy
TW9kZUVTMV8KIF9fWk43V2ViQ29yZTEwU2Nyb2xsVmlldzIwc2V0Q2FuSGF2ZVNjcm9sbGJhcnNF
YgogX19aTjdXZWJDb3JlMTBTdHJpbmdJbXBsN3JlcGxhY2VFdHQKIF9fWk43V2ViQ29yZTEwU3Ry
aW5nSW1wbEQxRXYKIF9fWk43V2ViQ29yZTEwU3RyaW5nSW1wbGN2UDhOU1N0cmluZ0V2CitfX1pO
N1dlYkNvcmUxMGV2ZW50TmFtZXNFdgogX19aTjdXZWJDb3JlMTFDb250ZXh0TWVudTIyc2V0UGxh
dGZvcm1EZXNjcmlwdGlvbkVQMTROU011dGFibGVBcnJheQogX19aTjdXZWJDb3JlMTFFZGl0Q29t
bWFuZDdyZWFwcGx5RXYKIF9fWk43V2ViQ29yZTExRWRpdENvbW1hbmQ3dW5hcHBseUV2CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lvbiAzODA2NCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkVs
ZW1lbnQuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtOTgsOCArOTcsNiBAQCBzdGF0aWMgdm9pZCBzZXRKU0RP
TVdpbmRvd0Jhc2VYU0xUUHJvY2VzCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFt
ZXNwYWNlIEV2ZW50TmFtZXM7Ci0KIHN0YXRpYyBpbnQgbGFzdFVzZWRUaW1lb3V0SWQ7CiAKIHN0
YXRpYyBpbnQgdGltZXJOZXN0aW5nTGV2ZWwgPSAwOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAK
ICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkV2ZW50LmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgpAQCAtNDEs
OCArNDAsNiBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwotCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxM
KEpTQWJzdHJhY3RFdmVudExpc3RlbmVyKQogCiB2b2lkIEpTQWJzdHJhY3RFdmVudExpc3RlbmVy
OjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQsIGJvb2wgaXNXaW5kb3dFdmVudCkKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMzgwNjQpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MCw3ICs1MCw2IEBACiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOjpFdmVudE5hbWVzOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTE4NCwxNSArMTgzLDE1IEBAIGJvb2wgU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1Vz
ZXJHZXMKICAgICBpZiAoRXZlbnQqIGV2ZW50ID0gbV93aW5kb3dTaGVsbC0+d2luZG93KCktPmN1
cnJlbnRFdmVudCgpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSA9IGV2ZW50
LT50eXBlKCk7CiAgICAgICAgIGlmICggLy8gbW91c2UgZXZlbnRzCi0gICAgICAgICAgICB0eXBl
ID09IGNsaWNrRXZlbnQgfHwgdHlwZSA9PSBtb3VzZWRvd25FdmVudCB8fAotICAgICAgICAgICAg
dHlwZSA9PSBtb3VzZXVwRXZlbnQgfHwgdHlwZSA9PSBkYmxjbGlja0V2ZW50IHx8CisgICAgICAg
ICAgICB0eXBlID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50IHx8IHR5cGUgPT0gZXZlbnROYW1l
cygpLm1vdXNlZG93bkV2ZW50IHx8CisgICAgICAgICAgICB0eXBlID09IGV2ZW50TmFtZXMoKS5t
b3VzZXVwRXZlbnQgfHwgdHlwZSA9PSBldmVudE5hbWVzKCkuZGJsY2xpY2tFdmVudCB8fAogICAg
ICAgICAgICAgLy8ga2V5Ym9hcmQgZXZlbnRzCi0gICAgICAgICAgICB0eXBlID09IGtleWRvd25F
dmVudCB8fCB0eXBlID09IGtleXByZXNzRXZlbnQgfHwKLSAgICAgICAgICAgIHR5cGUgPT0ga2V5
dXBFdmVudCB8fAorICAgICAgICAgICAgdHlwZSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50
IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQgfHwKKyAgICAgICAgICAgIHR5
cGUgPT0gZXZlbnROYW1lcygpLmtleXVwRXZlbnQgfHwKICAgICAgICAgICAgIC8vIG90aGVyIGFj
Y2VwdGVkIGV2ZW50cwotICAgICAgICAgICAgdHlwZSA9PSBzZWxlY3RFdmVudCB8fCB0eXBlID09
IGNoYW5nZUV2ZW50IHx8Ci0gICAgICAgICAgICB0eXBlID09IGZvY3VzRXZlbnQgfHwgdHlwZSA9
PSBibHVyRXZlbnQgfHwKLSAgICAgICAgICAgIHR5cGUgPT0gc3VibWl0RXZlbnQpCisgICAgICAg
ICAgICB0eXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudCB8fCB0eXBlID09IGV2ZW50TmFt
ZXMoKS5jaGFuZ2VFdmVudCB8fAorICAgICAgICAgICAgdHlwZSA9PSBldmVudE5hbWVzKCkuZm9j
dXNFdmVudCB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQgfHwKKyAgICAgICAgICAg
IHR5cGUgPT0gZXZlbnROYW1lcygpLnN1Ym1pdEV2ZW50KQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfSBlbHNlIHsgLy8gbm8gZXZlbnQKICAgICAgICAgaWYgKG1fc291cmNlVVJMICYm
IG1fc291cmNlVVJMLT5pc051bGwoKSAmJiAhbV9wcm9jZXNzaW5nVGltZXJDYWxsYmFjaykgewpJ
bmRleDogV2ViQ29yZS9kb20vQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmNwcAkocmV2aXNpb24gMzgw
NjQpCisrKyBXZWJDb3JlL2RvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDEwICszMCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcg
bmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0KIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50OjpCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudChjb25zdCBTdHJpbmcmIHRleHQpCi0gICAgOiBFdmVudCh3ZWJraXRC
ZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCwgZmFsc2UsIHRydWUpLCBtX3RleHQodGV4dCkKKyAgICA6
IEV2ZW50KGV2ZW50TmFtZXMoKS53ZWJraXRCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCwgZmFsc2Us
IHRydWUpLCBtX3RleHQodGV4dCkKIHsKIH0KIApJbmRleDogV2ViQ29yZS9kb20vQmVmb3JlVW5s
b2FkRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0JlZm9yZVVubG9hZEV2ZW50
LmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL2RvbS9CZWZvcmVVbmxvYWRFdmVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0KIEJlZm9yZVVubG9hZEV2ZW50OjpC
ZWZvcmVVbmxvYWRFdmVudCgpCi0gICAgOiBFdmVudChiZWZvcmV1bmxvYWRFdmVudCwgZmFsc2Us
IHRydWUpCisgICAgOiBFdmVudChldmVudE5hbWVzKCkuYmVmb3JldW5sb2FkRXZlbnQsIGZhbHNl
LCB0cnVlKQogewogfQogCkluZGV4OiBXZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAkocmV2aXNpb24gMzgwNjQp
CisrKyBXZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
OCArMzEsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBFdmVu
dE5hbWVzOwotCiBDaGFyYWN0ZXJEYXRhOjpDaGFyYWN0ZXJEYXRhKERvY3VtZW50ICpkb2MpCiAg
ICAgOiBFdmVudFRhcmdldE5vZGUoZG9jKQogICAgICwgbV9kYXRhKFN0cmluZ0ltcGw6OmVtcHR5
KCkpCkBAIC0yMDEsNyArMTk5LDcgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjpkaXNwYXRjaE1vZGlm
aWVkRXZlbgogICAgICAgICBwYXJlbnROb2RlKCktPmNoaWxkcmVuQ2hhbmdlZCgpOwogICAgIGlm
IChkb2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTUNIQVJBQ1RFUkRBVEFN
T0RJRklFRF9MSVNURU5FUikpIHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAg
ZGlzcGF0Y2hFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoRE9NQ2hhcmFjdGVyRGF0YU1vZGlm
aWVkRXZlbnQsIHRydWUsIGZhbHNlLCAwLCBwcmV2VmFsdWUsIG1fZGF0YSwgU3RyaW5nKCksIDAp
LCBlYyk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS5ET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWRFdmVudCwgdHJ1ZSwgZmFsc2UsIDAsIHBy
ZXZWYWx1ZSwgbV9kYXRhLCBTdHJpbmcoKSwgMCksIGVjKTsKICAgICB9CiAgICAgZGlzcGF0Y2hT
dWJ0cmVlTW9kaWZpZWRFdmVudCgpOwogfQpJbmRleDogV2ViQ29yZS9kb20vQ29udGFpbmVyTm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlz
aW9uIDM4MDY0KQorKysgV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDggKzQwLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1l
c3BhY2UgRXZlbnROYW1lczsKLQogc3RhdGljIHZvaWQgZGlzcGF0Y2hDaGlsZEluc2VydGlvbkV2
ZW50cyhOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOwogc3RhdGljIHZvaWQgZGlzcGF0Y2hDaGlsZFJl
bW92YWxFdmVudHMoTm9kZSosIEV4Y2VwdGlvbkNvZGUmKTsKIApAQCAtODgzLDcgKzg4MSw3IEBA
IHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMKICAgICAgICAgZG9jLT5o
YXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTU5PREVJTlNFUlRFRF9MSVNURU5FUikgJiYKICAg
ICAgICAgYy0+aXNFdmVudFRhcmdldE5vZGUoKSkgewogICAgICAgICBlYyA9IDA7Ci0gICAgICAg
IEV2ZW50VGFyZ2V0Tm9kZUNhc3QoYy5nZXQoKSktPmRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVu
dDo6Y3JlYXRlKERPTU5vZGVJbnNlcnRlZEV2ZW50LCB0cnVlLCBmYWxzZSwKKyAgICAgICAgRXZl
bnRUYXJnZXROb2RlQ2FzdChjLmdldCgpKS0+ZGlzcGF0Y2hFdmVudChNdXRhdGlvbkV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLkRPTU5vZGVJbnNlcnRlZEV2ZW50LCB0cnVlLCBmYWxzZSwKICAg
ICAgICAgICAgIGMtPnBhcmVudE5vZGUoKSwgU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwg
MCksIGVjKTsKICAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtODk2LDcg
Kzg5NCw3IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAKICAgICAgICAgICAgIGVjID0gMDsKLSAg
ICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QoYy5nZXQoKSktPmRpc3BhdGNoRXZlbnQoTXV0
YXRpb25FdmVudDo6Y3JlYXRlKERPTU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudEV2ZW50LCBmYWxz
ZSwgZmFsc2UsCisgICAgICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KGMuZ2V0KCkpLT5kaXNw
YXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NTm9kZUluc2Vy
dGVkSW50b0RvY3VtZW50RXZlbnQsIGZhbHNlLCBmYWxzZSwKICAgICAgICAgICAgICAgICAwLCBT
dHJpbmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCAwKSwgZWMpOwogICAgICAgICAgICAgaWYgKGVj
KQogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTkxNiw3ICs5MTQsNyBAQCBzdGF0aWMgdm9p
ZCBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhOCiAgICAgICAgIGRvYy0+aGFzTGlzdGVuZXJU
eXBlKERvY3VtZW50OjpET01OT0RFUkVNT1ZFRF9MSVNURU5FUikgJiYKICAgICAgICAgYy0+aXNF
dmVudFRhcmdldE5vZGUoKSkgewogICAgICAgICBlYyA9IDA7Ci0gICAgICAgIEV2ZW50VGFyZ2V0
Tm9kZUNhc3QoYy5nZXQoKSktPmRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKERP
TU5vZGVSZW1vdmVkRXZlbnQsIHRydWUsIGZhbHNlLAorICAgICAgICBFdmVudFRhcmdldE5vZGVD
YXN0KGMuZ2V0KCkpLT5kaXNwYXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuRE9NTm9kZVJlbW92ZWRFdmVudCwgdHJ1ZSwgZmFsc2UsCiAgICAgICAgICAgICBjLT5w
YXJlbnROb2RlKCksIFN0cmluZygpLCBTdHJpbmcoKSwgU3RyaW5nKCksIDApLCBlYyk7CiAgICAg
ICAgIGlmIChlYykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTkyOCw3ICs5MjYsNyBAQCBzdGF0
aWMgdm9pZCBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhOCiAgICAgICAgICAgICBpZiAoIWMt
PmlzRXZlbnRUYXJnZXROb2RlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICBlYyA9IDA7Ci0gICAgICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KGMuZ2V0KCkpLT5k
aXNwYXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShET01Ob2RlUmVtb3ZlZEZyb21Eb2N1
bWVudEV2ZW50LCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0
KGMuZ2V0KCkpLT5kaXNwYXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkuRE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1lbnRFdmVudCwgZmFsc2UsIGZhbHNlLAogICAgICAg
ICAgICAgICAgIDAsIFN0cmluZygpLCBTdHJpbmcoKSwgU3RyaW5nKCksIDApLCBlYyk7CiAgICAg
ICAgICAgICBpZiAoZWMpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9k
b20vRGVkaWNhdGVkV29ya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9EZWRpY2F0
ZWRXb3JrZXIuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvZG9tL0RlZGljYXRlZFdv
cmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIERlZGljYXRl
ZFdvcmtlcjo6bm90aWZ5RmluaXNoZWQoQ2FjCiB2b2lkIERlZGljYXRlZFdvcmtlcjo6ZGlzcGF0
Y2hFcnJvckV2ZW50KCkKIHsKICAgICBpZiAobV9vbkVycm9yTGlzdGVuZXIpIHsKLSAgICAgICAg
UmVmUHRyPEV2ZW50PiBldnQgPSBFdmVudDo6Y3JlYXRlKEV2ZW50TmFtZXM6OmVycm9yRXZlbnQs
IGZhbHNlLCB0cnVlKTsKKyAgICAgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgIC8vIERlZGlj
YXRlZFdvcmtlciBpcyBub3QgYW4gRXZlbnRUYXJnZXQsIHNvIHRhcmdldCBhbmQgY3VycmVudFRh
cmdldCByZW1haW4gbnVsbC4KICAgICAgICAgbV9vbkVycm9yTGlzdGVuZXItPmhhbmRsZUV2ZW50
KGV2dC5yZWxlYXNlKCkuZ2V0KCksIHRydWUpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlz
aW9uIDM4MDY0KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDcsNyArMTQ3LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogCiAvLyAjZGVmaW5lIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcgMQpA
QCAtMTU0Nyw3ICsxNTQ2LDcgQEAgdm9pZCBEb2N1bWVudDo6aW1wbGljaXRDbG9zZSgpCiAgICAg
ICAgIGYtPmFuaW1hdGlvbigpLT5yZXN1bWVBbmltYXRpb25zKHRoaXMpOwogCiAgICAgZGlzcGF0
Y2hJbWFnZUxvYWRFdmVudHNOb3coKTsKLSAgICB0aGlzLT5kaXNwYXRjaFdpbmRvd0V2ZW50KGxv
YWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICB0aGlzLT5kaXNwYXRjaFdpbmRvd0V2ZW50KGV2
ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgaWYgKGYpCiAgICAgICAg
IGYtPmxvYWRlcigpLT5oYW5kbGVkT25sb2FkRXZlbnRzKCk7CiAjaWZkZWYgSU5TVFJVTUVOVF9M
QVlPVVRfU0NIRURVTElORwpAQCAtMjQxNiw3ICsyNDE1LDcgQEAgYm9vbCBEb2N1bWVudDo6c2V0
Rm9jdXNlZE5vZGUoUGFzc1JlZlB0cgogICAgICAgICAvLyBEaXNwYXRjaCBhIGNoYW5nZSBldmVu
dCBmb3IgdGV4dCBmaWVsZHMgb3IgdGV4dGFyZWFzIHRoYXQgaGF2ZSBiZWVuIGVkaXRlZAogICAg
ICAgICBSZW5kZXJPYmplY3QqIHIgPSBzdGF0aWNfY2FzdDxSZW5kZXJPYmplY3QqPihvbGRGb2N1
c2VkTm9kZS5nZXQoKS0+cmVuZGVyZXIoKSk7CiAgICAgICAgIGlmIChyICYmIChyLT5pc1RleHRB
cmVhKCkgfHwgci0+aXNUZXh0RmllbGQoKSkgJiYgci0+aXNFZGl0ZWQoKSkgewotICAgICAgICAg
ICAgRXZlbnRUYXJnZXROb2RlQ2FzdChvbGRGb2N1c2VkTm9kZS5nZXQoKSktPmRpc3BhdGNoRXZl
bnRGb3JUeXBlKGNoYW5nZUV2ZW50LCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICBFdmVudFRh
cmdldE5vZGVDYXN0KG9sZEZvY3VzZWROb2RlLmdldCgpKS0+ZGlzcGF0Y2hFdmVudEZvclR5cGUo
ZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCB0cnVlLCBmYWxzZSk7CiAgICAgICAgICAgICBpZiAo
KHIgPSBzdGF0aWNfY2FzdDxSZW5kZXJPYmplY3QqPihvbGRGb2N1c2VkTm9kZS5nZXQoKS0+cmVu
ZGVyZXIoKSkpKQogICAgICAgICAgICAgICAgIHItPnNldEVkaXRlZChmYWxzZSk7CiAgICAgICAg
IH0KQEAgLTI0MjksNyArMjQyOCw3IEBAIGJvb2wgRG9jdW1lbnQ6OnNldEZvY3VzZWROb2RlKFBh
c3NSZWZQdHIKICAgICAgICAgICAgIGZvY3VzQ2hhbmdlQmxvY2tlZCA9IHRydWU7CiAgICAgICAg
ICAgICBuZXdGb2N1c2VkTm9kZSA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgRXZlbnRUYXJnZXRO
b2RlQ2FzdChvbGRGb2N1c2VkTm9kZS5nZXQoKSktPmRpc3BhdGNoVUlFdmVudChET01Gb2N1c091
dEV2ZW50KTsKKyAgICAgICAgRXZlbnRUYXJnZXROb2RlQ2FzdChvbGRGb2N1c2VkTm9kZS5nZXQo
KSktPmRpc3BhdGNoVUlFdmVudChldmVudE5hbWVzKCkuRE9NRm9jdXNPdXRFdmVudCk7CiAgICAg
ICAgIGlmIChtX2ZvY3VzZWROb2RlKSB7CiAgICAgICAgICAgICAvLyBoYW5kbGVyIHNoaWZ0ZWQg
Zm9jdXMKICAgICAgICAgICAgIGZvY3VzQ2hhbmdlQmxvY2tlZCA9IHRydWU7CkBAIC0yNDU5LDcg
KzI0NTgsNyBAQCBib29sIERvY3VtZW50OjpzZXRGb2N1c2VkTm9kZShQYXNzUmVmUHRyCiAgICAg
ICAgICAgICBmb2N1c0NoYW5nZUJsb2NrZWQgPSB0cnVlOwogICAgICAgICAgICAgZ290byBTZXRG
b2N1c2VkTm9kZURvbmU7CiAgICAgICAgIH0KLSAgICAgICAgRXZlbnRUYXJnZXROb2RlQ2FzdCht
X2ZvY3VzZWROb2RlLmdldCgpKS0+ZGlzcGF0Y2hVSUV2ZW50KERPTUZvY3VzSW5FdmVudCk7Cisg
ICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QobV9mb2N1c2VkTm9kZS5nZXQoKSktPmRpc3BhdGNo
VUlFdmVudChldmVudE5hbWVzKCkuRE9NRm9jdXNJbkV2ZW50KTsKICAgICAgICAgaWYgKG1fZm9j
dXNlZE5vZGUgIT0gbmV3Rm9jdXNlZE5vZGUpIHsgCiAgICAgICAgICAgICAvLyBoYW5kbGVyIHNo
aWZ0ZWQgZm9jdXMKICAgICAgICAgICAgIGZvY3VzQ2hhbmdlQmxvY2tlZCA9IHRydWU7CkBAIC0y
NjQ0LDI5ICsyNjQzLDI5IEBAIFBhc3NSZWZQdHI8RXZlbnQ+IERvY3VtZW50OjpjcmVhdGVFdmVu
dCgKIAogdm9pZCBEb2N1bWVudDo6YWRkTGlzdGVuZXJUeXBlSWZOZWVkZWQoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUpCiB7Ci0gICAgaWYgKGV2ZW50VHlwZSA9PSBET01TdWJ0cmVlTW9k
aWZpZWRFdmVudCkKKyAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5ET01TdWJ0cmVl
TW9kaWZpZWRFdmVudCkKICAgICAgICAgYWRkTGlzdGVuZXJUeXBlKERPTVNVQlRSRUVNT0RJRklF
RF9MSVNURU5FUik7Ci0gICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IERPTU5vZGVJbnNlcnRlZEV2
ZW50KQorICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuRE9NTm9kZUluc2Vy
dGVkRXZlbnQpCiAgICAgICAgIGFkZExpc3RlbmVyVHlwZShET01OT0RFSU5TRVJURURfTElTVEVO
RVIpOwotICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBET01Ob2RlUmVtb3ZlZEV2ZW50KQorICAg
IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuRE9NTm9kZVJlbW92ZWRFdmVudCkK
ICAgICAgICAgYWRkTGlzdGVuZXJUeXBlKERPTU5PREVSRU1PVkVEX0xJU1RFTkVSKTsKLSAgICBl
bHNlIGlmIChldmVudFR5cGUgPT0gRE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1lbnRFdmVudCkKKyAg
ICBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLkRPTU5vZGVSZW1vdmVkRnJvbURv
Y3VtZW50RXZlbnQpCiAgICAgICAgIGFkZExpc3RlbmVyVHlwZShET01OT0RFUkVNT1ZFREZST01E
T0NVTUVOVF9MSVNURU5FUik7Ci0gICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IERPTU5vZGVJbnNl
cnRlZEludG9Eb2N1bWVudEV2ZW50KQorICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkuRE9NTm9kZUluc2VydGVkSW50b0RvY3VtZW50RXZlbnQpCiAgICAgICAgIGFkZExpc3Rl
bmVyVHlwZShET01OT0RFSU5TRVJURURJTlRPRE9DVU1FTlRfTElTVEVORVIpOwotICAgIGVsc2Ug
aWYgKGV2ZW50VHlwZSA9PSBET01BdHRyTW9kaWZpZWRFdmVudCkKKyAgICBlbHNlIGlmIChldmVu
dFR5cGUgPT0gZXZlbnROYW1lcygpLkRPTUF0dHJNb2RpZmllZEV2ZW50KQogICAgICAgICBhZGRM
aXN0ZW5lclR5cGUoRE9NQVRUUk1PRElGSUVEX0xJU1RFTkVSKTsKLSAgICBlbHNlIGlmIChldmVu
dFR5cGUgPT0gRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkRXZlbnQpCisgICAgZWxzZSBpZiAoZXZl
bnRUeXBlID09IGV2ZW50TmFtZXMoKS5ET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWRFdmVudCkKICAg
ICAgICAgYWRkTGlzdGVuZXJUeXBlKERPTUNIQVJBQ1RFUkRBVEFNT0RJRklFRF9MSVNURU5FUik7
Ci0gICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IG92ZXJmbG93Y2hhbmdlZEV2ZW50KQorICAgIGVs
c2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkub3ZlcmZsb3djaGFuZ2VkRXZlbnQpCiAg
ICAgICAgIGFkZExpc3RlbmVyVHlwZShPVkVSRkxPV0NIQU5HRURfTElTVEVORVIpOwotICAgIGVs
c2UgaWYgKGV2ZW50VHlwZSA9PSB3ZWJraXRBbmltYXRpb25TdGFydEV2ZW50KQorICAgIGVsc2Ug
aWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9uU3RhcnRFdmVudCkK
ICAgICAgICAgYWRkTGlzdGVuZXJUeXBlKEFOSU1BVElPTlNUQVJUX0xJU1RFTkVSKTsKLSAgICBl
bHNlIGlmIChldmVudFR5cGUgPT0gd2Via2l0QW5pbWF0aW9uRW5kRXZlbnQpCisgICAgZWxzZSBp
ZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25FbmRFdmVudCkKICAg
ICAgICAgYWRkTGlzdGVuZXJUeXBlKEFOSU1BVElPTkVORF9MSVNURU5FUik7Ci0gICAgZWxzZSBp
ZiAoZXZlbnRUeXBlID09IHdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2ZW50KQorICAgIGVsc2Ug
aWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uRXZl
bnQpCiAgICAgICAgIGFkZExpc3RlbmVyVHlwZShBTklNQVRJT05JVEVSQVRJT05fTElTVEVORVIp
OwotICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSB3ZWJraXRUcmFuc2l0aW9uRW5kRXZlbnQpCisg
ICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53ZWJraXRUcmFuc2l0aW9uRW5k
RXZlbnQpCiAgICAgICAgIGFkZExpc3RlbmVyVHlwZShUUkFOU0lUSU9ORU5EX0xJU1RFTkVSKTsK
IH0KIApAQCAtMjcxMiw5ICsyNzExLDkgQEAgdm9pZCBEb2N1bWVudDo6cmVtb3ZlV2luZG93SW5s
aW5lRXZlbnRMaQogICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDo6aXRlcmF0b3IgaXQg
PSBtX3dpbmRvd0V2ZW50TGlzdGVuZXJzLmJlZ2luKCk7CiAgICAgZm9yICg7IGl0ICE9IG1fd2lu
ZG93RXZlbnRMaXN0ZW5lcnMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgaWYgKCgqaXQpLT5ldmVu
dFR5cGUoKSA9PSBldmVudFR5cGUgJiYgKCppdCktPmxpc3RlbmVyKCktPmlzSW5saW5lKCkpIHsK
LSAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gdW5sb2FkRXZlbnQpCisgICAgICAgICAgICBp
ZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCkKICAgICAgICAgICAgICAg
ICByZW1vdmVQZW5kaW5nRnJhbWVVbmxvYWRFdmVudENvdW50KCk7Ci0gICAgICAgICAgICBlbHNl
IGlmIChldmVudFR5cGUgPT0gYmVmb3JldW5sb2FkRXZlbnQpCisgICAgICAgICAgICBlbHNlIGlm
IChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmJlZm9yZXVubG9hZEV2ZW50KQogICAgICAgICAg
ICAgICAgIHJlbW92ZVBlbmRpbmdGcmFtZUJlZm9yZVVubG9hZEV2ZW50Q291bnQoKTsKICAgICAg
ICAgICAgIG1fd2luZG93RXZlbnRMaXN0ZW5lcnMucmVtb3ZlKGl0KTsKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTI3MjQsOSArMjcyMyw5IEBAIHZvaWQgRG9jdW1lbnQ6OnJlbW92ZVdpbmRvd0lu
bGluZUV2ZW50TGkKIAogdm9pZCBEb2N1bWVudDo6YWRkV2luZG93RXZlbnRMaXN0ZW5lcihjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0
ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQogewotICAgIGlmIChldmVudFR5cGUgPT0gdW5sb2FkRXZl
bnQpCisgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkudW5sb2FkRXZlbnQpCiAgICAg
ICAgIGFkZFBlbmRpbmdGcmFtZVVubG9hZEV2ZW50Q291bnQoKTsKLSAgICBlbHNlIGlmIChldmVu
dFR5cGUgPT0gYmVmb3JldW5sb2FkRXZlbnQpCisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2
ZW50TmFtZXMoKS5iZWZvcmV1bmxvYWRFdmVudCkKICAgICAgICAgYWRkUGVuZGluZ0ZyYW1lQmVm
b3JlVW5sb2FkRXZlbnRDb3VudCgpOwogICAgIC8vIFJlbW92ZSBleGlzdGluZyBpZGVudGljYWwg
bGlzdGVuZXIgc2V0IHdpdGggaWRlbnRpY2FsIGFyZ3VtZW50cy4KICAgICAvLyBUaGUgRE9NIDIg
c3BlYyBzYXlzIHRoYXQgImR1cGxpY2F0ZSBpbnN0YW5jZXMgYXJlIGRpc2NhcmRlZCIgaW4gdGhp
cyBjYXNlLgpAQCAtMjc0MCw5ICsyNzM5LDkgQEAgdm9pZCBEb2N1bWVudDo6cmVtb3ZlV2luZG93
RXZlbnRMaXN0ZW5lcgogICAgIGZvciAoOyBpdCAhPSBtX3dpbmRvd0V2ZW50TGlzdGVuZXJzLmVu
ZCgpOyArK2l0KSB7CiAgICAgICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiByID0gKippdDsK
ICAgICAgICAgaWYgKHIuZXZlbnRUeXBlKCkgPT0gZXZlbnRUeXBlICYmIHIubGlzdGVuZXIoKSA9
PSBsaXN0ZW5lciAmJiByLnVzZUNhcHR1cmUoKSA9PSB1c2VDYXB0dXJlKSB7Ci0gICAgICAgICAg
ICBpZiAoZXZlbnRUeXBlID09IHVubG9hZEV2ZW50KQorICAgICAgICAgICAgaWYgKGV2ZW50VHlw
ZSA9PSBldmVudE5hbWVzKCkudW5sb2FkRXZlbnQpCiAgICAgICAgICAgICAgICAgcmVtb3ZlUGVu
ZGluZ0ZyYW1lVW5sb2FkRXZlbnRDb3VudCgpOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnRU
eXBlID09IGJlZm9yZXVubG9hZEV2ZW50KQorICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnRUeXBl
ID09IGV2ZW50TmFtZXMoKS5iZWZvcmV1bmxvYWRFdmVudCkKICAgICAgICAgICAgICAgICByZW1v
dmVQZW5kaW5nRnJhbWVCZWZvcmVVbmxvYWRFdmVudENvdW50KCk7CiAgICAgICAgICAgICBtX3dp
bmRvd0V2ZW50TGlzdGVuZXJzLnJlbW92ZShpdCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0z
ODExLDcgKzM4MTAsNyBAQCB2b2lkIERvY3VtZW50OjpmaW5pc2hlZFBhcnNpbmcoKQogICAgIHNl
dFBhcnNpbmcoZmFsc2UpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZGlzcGF0
Y2hFdmVudChFdmVudDo6Y3JlYXRlKERPTUNvbnRlbnRMb2FkZWRFdmVudCwgdHJ1ZSwgZmFsc2Up
LCBlYyk7CisgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01D
b250ZW50TG9hZGVkRXZlbnQsIHRydWUsIGZhbHNlKSwgZWMpOwogCiAgICAgaWYgKEZyYW1lKiBm
ID0gZnJhbWUoKSkKICAgICAgICAgZi0+bG9hZGVyKCktPmZpbmlzaGVkUGFyc2luZygpOwpJbmRl
eDogV2ViQ29yZS9kb20vRXZlbnROYW1lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
RXZlbnROYW1lcy5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9kb20vRXZlbnROYW1l
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDMwICsyMiw1MCBAQAogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAKLSNpZmRlZiBTS0lQX1NUQVRJQ19DT05TVFJVQ1RPUlNfT05fR0NDCi0jZGVmaW5l
IERPTV9FVkVOVF9OQU1FU19ISURFX0dMT0JBTFMgMQorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIK
KworI2lmIEVOQUJMRShXT1JLRVJTKQorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgor
dXNpbmcgbmFtZXNwYWNlIFdURjsKICNlbmRpZgogCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgot
I2luY2x1ZGUgIlN0YXRpY0NvbnN0cnVjdG9ycy5oIgorbmFtZXNwYWNlIFdlYkNvcmUgewogCi1u
YW1lc3BhY2UgV2ViQ29yZSB7IG5hbWVzcGFjZSBFdmVudE5hbWVzIHsKKyNpZiBFTkFCTEUoV09S
S0VSUykKK3N0YXRpYyBUaHJlYWRTcGVjaWZpYzxFdmVudE5hbWVzPiogc3RhdGljRXZlbnROYW1l
czsKKyNlbHNlCitzdGF0aWMgRXZlbnROYW1lcyogc3RhdGljRXZlbnROYW1lczsKKyNlbmRpZgog
Ci0jZGVmaW5lIERFRklORV9FVkVOVF9HTE9CQUwobmFtZSkgXAotICAgIERFRklORV9HTE9CQUwo
QXRvbWljU3RyaW5nLCBuYW1lIyNFdmVudCwgI25hbWUpCi1ET01fRVZFTlRfTkFNRVNfRk9SX0VB
Q0goREVGSU5FX0VWRU5UX0dMT0JBTCkKKyNkZWZpbmUgSU5JVElBTElaRV9FVkVOVF9OQU1FKG5h
bWUpIFwKKyAgICAsIG5hbWUjI0V2ZW50KCNuYW1lKQorRXZlbnROYW1lczo6RXZlbnROYW1lcygp
CisgICAgOiBkdW1teSAoMCkKK0RPTV9FVkVOVF9OQU1FU19GT1JfRUFDSChJTklUSUFMSVpFX0VW
RU5UX05BTUUpCit7Cit9CiAKLXZvaWQgaW5pdCgpCitFdmVudE5hbWVzJiBldmVudE5hbWVzKCkK
IHsKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZDsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7
Ci0gICAgICAgIC8vIFVzZSBwbGFjZW1lbnQgbmV3IHRvIGluaXRpYWxpemUgdGhlIGdsb2JhbHMu
Ci0gICAgICAgIAorI2lmIEVOQUJMRShXT1JLRVJTKQorICAgIHJldHVybiAqKnN0YXRpY0V2ZW50
TmFtZXM7CisjZWxzZQorICAgIHJldHVybiAqc3RhdGljRXZlbnROYW1lczsKKyNlbmRpZgorfQor
Cit2b2lkIEV2ZW50TmFtZXM6OmluaXQoKQoreworICAgIC8vIEluaXRpYWxpemF0aW9uIGlzIG5v
dCB0aHJlYWQgc2FmZSwgc28gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBt
YWluIHRocmVhZCBmaXJzdC4KKyAgICBpZiAoIXN0YXRpY0V2ZW50TmFtZXMpIHsKICAgICAgICAg
QXRvbWljU3RyaW5nOjppbml0KCk7Ci0gICAgICAgICNkZWZpbmUgSU5JVElBTElaRV9HTE9CQUwo
bmFtZSkgbmV3ICgodm9pZCopJm5hbWUjI0V2ZW50KSBBdG9taWNTdHJpbmcoI25hbWUpOwotICAg
ICAgICBET01fRVZFTlRfTkFNRVNfRk9SX0VBQ0goSU5JVElBTElaRV9HTE9CQUwpCi0gICAgICAg
IGluaXRpYWxpemVkID0gdHJ1ZTsKKworI2lmIEVOQUJMRShXT1JLRVJTKQorICAgICAgICBzdGF0
aWNFdmVudE5hbWVzID0gbmV3IFRocmVhZFNwZWNpZmljPEV2ZW50TmFtZXM+OworI2Vsc2UKKyAg
ICAgICAgc3RhdGljRXZlbnROYW1lcyA9IG5ldyBFdmVudE5hbWVzOworI2VuZGlmCiAgICAgfQog
fQogCi19IH0KK30KSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9k
b20vRXZlbnROYW1lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAKICNpbmNs
dWRlICJBdG9taWNTdHJpbmcuaCIKIAotbmFtZXNwYWNlIFdlYkNvcmUgeyBuYW1lc3BhY2UgRXZl
bnROYW1lcyB7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNkZWZpbmUgRE9NX0VWRU5UX05BTUVT
X0ZPUl9FQUNIKG1hY3JvKSBcCiAgICAgXApAQCAtMTI3LDE0ICsxMjcsMTkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgeyBuYW1lc3BhY2UgRXZlbnROYW1lcwogICAgIFwKIC8vIGVuZCBvZiBET01fRVZF
TlRfTkFNRVNfRk9SX0VBQ0gKIAotI2lmbmRlZiBET01fRVZFTlRfTkFNRVNfSElERV9HTE9CQUxT
Ci0gICAgI2RlZmluZSBET01fRVZFTlRfTkFNRVNfREVDTEFSRShuYW1lKSBleHRlcm4gY29uc3Qg
QXRvbWljU3RyaW5nIG5hbWUjI0V2ZW50OwotICAgIERPTV9FVkVOVF9OQU1FU19GT1JfRUFDSChE
T01fRVZFTlRfTkFNRVNfREVDTEFSRSkKLSAgICAjdW5kZWYgRE9NX0VWRU5UX05BTUVTX0RFQ0xB
UkUKLSNlbmRpZgorICAgIHN0cnVjdCBFdmVudE5hbWVzIHsKKyAgICAgICAgc3RhdGljIHZvaWQg
aW5pdCgpOworCisgICAgICAgIEV2ZW50TmFtZXMoKTsKKworICAgICAgICBpbnQgZHVtbXk7Cisg
ICAgICAgICNkZWZpbmUgRE9NX0VWRU5UX05BTUVTX0RFQ0xBUkUobmFtZSkgQXRvbWljU3RyaW5n
IG5hbWUjI0V2ZW50OworICAgICAgICBET01fRVZFTlRfTkFNRVNfRk9SX0VBQ0goRE9NX0VWRU5U
X05BTUVTX0RFQ0xBUkUpCisgICAgICAgICN1bmRlZiBET01fRVZFTlRfTkFNRVNfREVDTEFSRQor
ICAgIH07CiAKLSAgICB2b2lkIGluaXQoKTsKKyAgICBFdmVudE5hbWVzJiBldmVudE5hbWVzKCk7
CiAKLX0gfQorfQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnRUYXJnZXROb2RlLmNwcAkocmV2aXNp
b24gMzgwNjQpCisrKyBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Nyw4ICs1Nyw2IEBACiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotCi11
c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKICAgICAKIHN0YXRpYyBIYXNoU2V0PEV2ZW50VGFy
Z2V0Tm9kZSo+KiBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcyA9IDA7IAogCkBAIC0y
OTksNyArMjk3LDcgQEAgYm9vbCBFdmVudFRhcmdldE5vZGU6OmRpc3BhdGNoR2VuZXJpY0V2ZQog
CiAgICAgLy8gSGFuZGxlIHdpbmRvdyBldmVudHMgZm9yIGNhcHR1cmUgcGhhc2UsIGV4Y2VwdCBs
b2FkIGV2ZW50cywgdGhpcyBxdWlyayBpcyBuZWVkZWQKICAgICAvLyBiZWNhdXNlIE1vemlsbGEg
dXNlZCB0byBuZXZlciBwcm9wYWdhdGUgbG9hZCBldmVudHMgdG8gdGhlIHdpbmRvdyBvYmplY3QK
LSAgICBpZiAoZXZ0LT50eXBlKCkgIT0gbG9hZEV2ZW50ICYmIGl0LmN1cnJlbnQoKS0+aXNEb2N1
bWVudE5vZGUoKSAmJiAhZXZ0LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKKyAgICBpZiAoZXZ0LT50
eXBlKCkgIT0gZXZlbnROYW1lcygpLmxvYWRFdmVudCAmJiBpdC5jdXJyZW50KCktPmlzRG9jdW1l
bnROb2RlKCkgJiYgIWV2dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCiAgICAgICAgIHN0YXRpY19j
YXN0PERvY3VtZW50Kj4oaXQuY3VycmVudCgpKS0+aGFuZGxlV2luZG93RXZlbnQoZXZ0LmdldCgp
LCB0cnVlKTsKIAogICAgIEV2ZW50VGFyZ2V0Tm9kZSogZXZlbnRUYXJnZXROb2RlID0gMDsKQEAg
LTM1NCw3ICszNTIsNyBAQCBib29sIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hHZW5lcmljRXZl
CiAKICAgICAgICAgLy8gSGFuZGxlIHdpbmRvdyBldmVudHMgZm9yIGJ1YmJsaW5nIHBoYXNlLCBl
eGNlcHQgbG9hZCBldmVudHMsIHRoaXMgcXVpcmsgaXMgbmVlZGVkCiAgICAgICAgIC8vIGJlY2F1
c2UgTW96aWxsYSB1c2VkIHRvIG5ldmVyIHByb3BhZ2F0ZSBsb2FkIGV2ZW50cyBhdCBhbGwKLSAg
ICAgICAgaWYgKGV2dC0+dHlwZSgpICE9IGxvYWRFdmVudCAmJiBpdC5jdXJyZW50KCktPmlzRG9j
dW1lbnROb2RlKCkgJiYgIWV2dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgJiYgIWV2dC0+Y2FuY2Vs
QnViYmxlKCkpIHsKKyAgICAgICAgaWYgKGV2dC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5sb2Fk
RXZlbnQgJiYgaXQuY3VycmVudCgpLT5pc0RvY3VtZW50Tm9kZSgpICYmICFldnQtPnByb3BhZ2F0
aW9uU3RvcHBlZCgpICYmICFldnQtPmNhbmNlbEJ1YmJsZSgpKSB7CiAgICAgICAgICAgICBldnQt
PnNldEN1cnJlbnRUYXJnZXQoRXZlbnRUYXJnZXROb2RlQ2FzdChpdC5jdXJyZW50KCkpKTsKICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PERvY3VtZW50Kj4oaXQuY3VycmVudCgpKS0+aGFuZGxlV2lu
ZG93RXZlbnQoZXZ0LmdldCgpLCBmYWxzZSk7CiAgICAgICAgIH0gCkBAIC0zOTgsNyArMzk2LDcg
QEAgYm9vbCBFdmVudFRhcmdldE5vZGU6OmRpc3BhdGNoU3VidHJlZU1vZAogICAgIGlmICghZG9j
dW1lbnQoKS0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01TVUJUUkVFTU9ESUZJRURfTElT
VEVORVIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKERPTVN1YnRy
ZWVNb2RpZmllZEV2ZW50LCB0cnVlLCBmYWxzZSwgMCwgU3RyaW5nKCksIFN0cmluZygpLCBTdHJp
bmcoKSwgMCksIGVjKTsKKyAgICByZXR1cm4gZGlzcGF0Y2hFdmVudChNdXRhdGlvbkV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLkRPTVN1YnRyZWVNb2RpZmllZEV2ZW50LCB0cnVlLCBmYWxzZSwg
MCwgU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgMCksIGVjKTsKIH0KIAogdm9pZCBFdmVu
dFRhcmdldE5vZGU6OmRpc3BhdGNoV2luZG93RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZSkKQEAg
LTQxNyw3ICs0MTUsNyBAQCB2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hXaW5kb3dFdmVu
CiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2MgPSBkb2N1bWVudCgpOwogICAgIGRpc3BhdGNoV2lu
ZG93RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJs
ZUFyZykpOwogICAgIAotICAgIGlmIChldmVudFR5cGUgPT0gbG9hZEV2ZW50KSB7CisgICAgaWYg
KGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubG9hZEV2ZW50KSB7CiAgICAgICAgIC8vIEZvciBv
bmxvYWQgZXZlbnRzLCBzZW5kIGEgc2VwYXJhdGUgbG9hZCBldmVudCB0byB0aGUgZW5jbG9zaW5n
IGZyYW1lIG9ubHkuCiAgICAgICAgIC8vIFRoaXMgaXMgYSBET00gZXh0ZW5zaW9uIGFuZCBpcyBp
bmRlcGVuZGVudCBvZiBidWJibGluZy9jYXB0dXJpbmcgcnVsZXMgb2YKICAgICAgICAgLy8gdGhl
IERPTS4KQEAgLTQzNCw5ICs0MzIsOSBAQCB2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hX
aW5kb3dFdmVuCiBib29sIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hVSUV2ZW50KGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlLCBpbnQgZGV0YWlsLCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRl
cmx5aW5nRXZlbnQpCiB7CiAgICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwot
ICAgIEFTU0VSVChldmVudFR5cGUgPT0gRE9NRm9jdXNJbkV2ZW50IHx8IGV2ZW50VHlwZSA9PSBE
T01Gb2N1c091dEV2ZW50IHx8IGV2ZW50VHlwZSA9PSBET01BY3RpdmF0ZUV2ZW50KTsKKyAgICBB
U1NFUlQoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5ET01Gb2N1c0luRXZlbnQgfHwgZXZlbnRU
eXBlID09IGV2ZW50TmFtZXMoKS5ET01Gb2N1c091dEV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVu
dE5hbWVzKCkuRE9NQWN0aXZhdGVFdmVudCk7CiAgICAgCi0gICAgYm9vbCBjYW5jZWxhYmxlID0g
ZXZlbnRUeXBlID09IERPTUFjdGl2YXRlRXZlbnQ7CisgICAgYm9vbCBjYW5jZWxhYmxlID0gZXZl
bnRUeXBlID09IGV2ZW50TmFtZXMoKS5ET01BY3RpdmF0ZUV2ZW50OwogICAgIAogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwogICAgIFJlZlB0cjxVSUV2ZW50PiBldnQgPSBVSUV2ZW50OjpjcmVh
dGUoZXZlbnRUeXBlLCB0cnVlLCBjYW5jZWxhYmxlLCBkb2N1bWVudCgpLT5kZWZhdWx0Vmlldygp
LCBkZXRhaWwpOwpAQCAtNTEyLDE0ICs1MTAsMTQgQEAgdm9pZCBFdmVudFRhcmdldE5vZGU6OmRp
c3BhdGNoU2ltdWxhdGVkQwogICAgIAogICAgIC8vIHNlbmQgbW91c2Vkb3duIGFuZCBtb3VzZXVw
IGJlZm9yZSB0aGUgY2xpY2ssIGlmIHJlcXVlc3RlZAogICAgIGlmIChzZW5kTW91c2VFdmVudHMp
Ci0gICAgICAgIGRpc3BhdGNoU2ltdWxhdGVkTW91c2VFdmVudChtb3VzZWRvd25FdmVudCwgZXZl
bnQuZ2V0KCkpOworICAgICAgICBkaXNwYXRjaFNpbXVsYXRlZE1vdXNlRXZlbnQoZXZlbnROYW1l
cygpLm1vdXNlZG93bkV2ZW50LCBldmVudC5nZXQoKSk7CiAgICAgc2V0QWN0aXZlKHRydWUsIHNo
b3dQcmVzc2VkTG9vayk7CiAgICAgaWYgKHNlbmRNb3VzZUV2ZW50cykKLSAgICAgICAgZGlzcGF0
Y2hTaW11bGF0ZWRNb3VzZUV2ZW50KG1vdXNldXBFdmVudCwgZXZlbnQuZ2V0KCkpOworICAgICAg
ICBkaXNwYXRjaFNpbXVsYXRlZE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCwg
ZXZlbnQuZ2V0KCkpOwogICAgIHNldEFjdGl2ZShmYWxzZSk7CiAKICAgICAvLyBhbHdheXMgc2Vu
ZCBjbGljawotICAgIGRpc3BhdGNoU2ltdWxhdGVkTW91c2VFdmVudChjbGlja0V2ZW50LCBldmVu
dCk7CisgICAgZGlzcGF0Y2hTaW11bGF0ZWRNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5jbGlja0V2
ZW50LCBldmVudCk7CiAgICAgCiAgICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3Mt
PnJlbW92ZSh0aGlzKTsKIH0KQEAgLTU0MSw3ICs1MzksNyBAQCBib29sIEV2ZW50VGFyZ2V0Tm9k
ZTo6ZGlzcGF0Y2hNb3VzZUV2ZW50CiAgICAgLy8gc28gdGhlIHBvaW50ZXIgd2lsbCBiZSBnb29k
IGZvciB0aGUgdHdvIHN1YnNlcXVlbnQgb25lcy4KICAgICBSZWZQdHI8Tm9kZT4gcHJvdGVjdCh0
aGlzKTsKICAgICAKLSAgICBib29sIGNhbmNlbGFibGUgPSBldmVudFR5cGUgIT0gbW91c2Vtb3Zl
RXZlbnQ7CisgICAgYm9vbCBjYW5jZWxhYmxlID0gZXZlbnRUeXBlICE9IGV2ZW50TmFtZXMoKS5t
b3VzZW1vdmVFdmVudDsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAKQEAg
LTU3Niw4ICs1NzQsOCBAQCBib29sIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hNb3VzZUV2ZW50
CiAgICAgLy8gU3BlY2lhbCBjYXNlOiBJZiBpdCdzIGEgZG91YmxlIGNsaWNrIGV2ZW50LCB3ZSBh
bHNvIHNlbmQgdGhlIGRibGNsaWNrIGV2ZW50LiBUaGlzIGlzIG5vdCBwYXJ0CiAgICAgLy8gb2Yg
dGhlIERPTSBzcGVjcywgYnV0IGlzIHVzZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb25k
YmxjbGljaz0iIiBhdHRyaWJ1dGUuICBUaGlzIGlzIHRyZWF0ZWQKICAgICAvLyBhcyBhIHNlcGFy
YXRlIGV2ZW50IGluIG90aGVyIERPTS1jb21wbGlhbnQgYnJvd3NlcnMgbGlrZSBGaXJlZm94LCBh
bmQgc28gd2UgZG8gdGhlIHNhbWUuCi0gICAgaWYgKGV2ZW50VHlwZSA9PSBjbGlja0V2ZW50ICYm
IGRldGFpbCA9PSAyKSB7Ci0gICAgICAgIFJlZlB0cjxFdmVudD4gZG91YmxlQ2xpY2tFdmVudCA9
IE1vdXNlRXZlbnQ6OmNyZWF0ZShkYmxjbGlja0V2ZW50LAorICAgIGlmIChldmVudFR5cGUgPT0g
ZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgJiYgZGV0YWlsID09IDIpIHsKKyAgICAgICAgUmVmUHRy
PEV2ZW50PiBkb3VibGVDbGlja0V2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5kYmxjbGlja0V2ZW50LAogICAgICAgICAgICAgdHJ1ZSwgY2FuY2VsYWJsZSwgZG9jdW1lbnQo
KS0+ZGVmYXVsdFZpZXcoKSwKICAgICAgICAgICAgIGRldGFpbCwgc2NyZWVuWCwgc2NyZWVuWSwg
cGFnZVgsIHBhZ2VZLAogICAgICAgICAgICAgY3RybEtleSwgYWx0S2V5LCBzaGlmdEtleSwgbWV0
YUtleSwgYnV0dG9uLApAQCAtNjQyLDEyICs2NDAsMTIgQEAgYm9vbCBFdmVudFRhcmdldE5vZGU6
OmRpc3BhdGNoV2ViS2l0VHJhbgogCiB2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hGb2N1
c0V2ZW50KCkKIHsKLSAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShmb2N1c0V2ZW50LCBmYWxzZSwg
ZmFsc2UpOworICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50
LCBmYWxzZSwgZmFsc2UpOwogfQogCiB2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hCbHVy
RXZlbnQoKQogewotICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGJsdXJFdmVudCwgZmFsc2UsIGZh
bHNlKTsKKyAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVzKCkuYmx1ckV2ZW50LCBm
YWxzZSwgZmFsc2UpOwogfQogCiBib29sIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hFdmVudEZv
clR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBi
b29sIGNhbmNlbGFibGVBcmcpCkBAIC03MzAsMTggKzcyOCwxOCBAQCB2b2lkIEV2ZW50VGFyZ2V0
Tm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxlCiAgICAgaWYgKGV2ZW50LT50YXJnZXQoKSAhPSB0aGlz
KQogICAgICAgICByZXR1cm47CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUgPSBl
dmVudC0+dHlwZSgpOwotICAgIGlmIChldmVudFR5cGUgPT0ga2V5ZG93bkV2ZW50IHx8IGV2ZW50
VHlwZSA9PSBrZXlwcmVzc0V2ZW50KSB7CisgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVz
KCkua2V5ZG93bkV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVu
dCkgewogICAgICAgICBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQogICAgICAgICAgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgICAgICAgICAg
ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5kZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIoc3RhdGlj
X2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50KSk7Ci0gICAgfSBlbHNlIGlmIChldmVudFR5cGUg
PT0gY2xpY2tFdmVudCkgeworICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMo
KS5jbGlja0V2ZW50KSB7CiAgICAgICAgIGludCBkZXRhaWwgPSBldmVudC0+aXNVSUV2ZW50KCkg
PyBzdGF0aWNfY2FzdDxVSUV2ZW50Kj4oZXZlbnQpLT5kZXRhaWwoKSA6IDA7Ci0gICAgICAgIGRp
c3BhdGNoVUlFdmVudChET01BY3RpdmF0ZUV2ZW50LCBkZXRhaWwsIGV2ZW50KTsKLSAgICB9IGVs
c2UgaWYgKGV2ZW50VHlwZSA9PSBjb250ZXh0bWVudUV2ZW50KSB7CisgICAgICAgIGRpc3BhdGNo
VUlFdmVudChldmVudE5hbWVzKCkuRE9NQWN0aXZhdGVFdmVudCwgZGV0YWlsLCBldmVudCk7Cisg
ICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmNvbnRleHRtZW51RXZlbnQp
IHsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAg
ICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCiAgICAgICAgICAgICAgICAg
cGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmhhbmRsZUNvbnRleHRNZW51RXZlbnQoZXZl
bnQpOwotICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IHRleHRJbnB1dEV2ZW50KSB7CisgICAg
fSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnRleHRJbnB1dEV2ZW50KSB7CiAg
ICAgICAgIGlmIChldmVudC0+aXNUZXh0RXZlbnQoKSkKICAgICAgICAgICAgIGlmIChGcmFtZSog
ZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+ZGVmYXVsdFRleHRJbnB1dEV2ZW50SGFuZGxlcihzdGF0aWNfY2FzdDxUZXh0
RXZlbnQqPihldmVudCkpOwpAQCAtNzUwLDQwMiArNzQ4LDQwMiBAQCB2b2lkIEV2ZW50VGFyZ2V0
Tm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxlCiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9k
ZTo6b25hYm9ydCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JU
eXBlKGFib3J0RXZlbnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShl
dmVudE5hbWVzKCkuYWJvcnRFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRP
bmFib3J0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBz
ZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShhYm9ydEV2ZW50LCBldmVudExpc3RlbmVyKTsK
KyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuYWJvcnRFdmVu
dCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6
b25ibHVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUo
Ymx1ckV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRO
YW1lcygpLmJsdXJFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmJsdXIo
UGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGJsdXJFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmJsdXJFdmVudCwgZXZlbnRM
aXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25jaGFuZ2Uo
KSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShjaGFuZ2VF
dmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5jaGFuZ2VFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmNoYW5nZShQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoY2hhbmdlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25jbGlj
aygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNsaWNr
RXZlbnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVz
KCkuY2xpY2tFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmNsaWNrKFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZShjbGlja0V2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJ
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgZXZlbnRM
aXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25jb250ZXh0
bWVudSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNv
bnRleHRtZW51RXZlbnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShl
dmVudE5hbWVzKCkuY29udGV4dG1lbnVFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2Rl
OjpzZXRPbmNvbnRleHRtZW51KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5l
cikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShjb250ZXh0bWVudUV2ZW50
LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVu
dE5hbWVzKCkuY29udGV4dG1lbnVFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlz
dGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25kYmxjbGljaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGRibGNsaWNrRXZlbnQpOworICAgIHJldHVybiBp
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZGJsY2xpY2tFdmVudCk7CiB9
CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmRibGNsaWNrKFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9y
VHlwZShkYmxjbGlja0V2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZGJsY2xpY2tFdmVudCwgZXZlbnRMaXN0ZW5lcik7
CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25lcnJvcigpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGVycm9yRXZlbnQpOworICAg
IHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZXJyb3JFdmVu
dCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmVycm9yKFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZShlcnJvckV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9
CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25mb2N1cygpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGZvY3VzRXZlbnQpOworICAgIHJl
dHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZm9jdXNFdmVudCk7
CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmZvY3VzKFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9y
VHlwZShmb2N1c0V2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZShldmVudE5hbWVzKCkuZm9jdXNFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAK
IEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25pbnB1dCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGlucHV0RXZlbnQpOworICAgIHJldHVy
biBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuaW5wdXRFdmVudCk7CiB9
CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmlucHV0KFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZShpbnB1dEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZShldmVudE5hbWVzKCkuaW5wdXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2
ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25rZXlkb3duKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoa2V5ZG93bkV2ZW50KTsKKyAgICByZXR1
cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmtleWRvd25FdmVudCk7
CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmtleWRvd24oUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlKGtleWRvd25FdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmtleWRvd25FdmVudCwgZXZlbnRMaXN0ZW5lcik7
CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25rZXlwcmVzcygpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGtleXByZXNzRXZlbnQp
OworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkua2V5
cHJlc3NFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmtleXByZXNzKFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZShrZXlwcmVzc0V2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBz
ZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCwg
ZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25r
ZXl1cCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGtl
eXVwRXZlbnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5h
bWVzKCkua2V5dXBFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmtleXVw
KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxp
bmVFdmVudExpc3RlbmVyRm9yVHlwZShrZXl1cEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBz
ZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkua2V5dXBFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25sb2Fk
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUobG9hZEV2
ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygp
LmxvYWRFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmxvYWQoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlKGxvYWRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZXZlbnRMaXN0ZW5l
cik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25tb3VzZWRvd24oKSBj
b25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShtb3VzZWRvd25F
dmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5tb3VzZWRvd25FdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbm1vdXNl
ZG93bihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUobW91c2Vkb3duRXZlbnQsIGV2ZW50TGlzdGVuZXIp
OworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5tb3VzZWRv
d25FdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0
Tm9kZTo6b25tb3VzZW1vdmUoKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZShtb3VzZW1vdmVFdmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRU
YXJnZXROb2RlOjpzZXRPbm1vdXNlbW92ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50
TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUobW91c2Vtb3Zl
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBl
KGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50
TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25tb3VzZW91dCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNlb3V0RXZlbnQpOworICAgIHJldHVy
biBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCk7
CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbm1vdXNlb3V0KFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZShtb3VzZW91dEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCwgZXZlbnRMaXN0ZW5l
cik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25tb3VzZW92ZXIoKSBj
b25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShtb3VzZW92ZXJF
dmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5tb3VzZW92ZXJFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbm1vdXNl
b3ZlcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUobW91c2VvdmVyRXZlbnQsIGV2ZW50TGlzdGVuZXIp
OworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5tb3VzZW92
ZXJFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0
Tm9kZTo6b25tb3VzZXVwKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGUobW91c2V1cEV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGUoZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXRO
b2RlOjpzZXRPbm1vdXNldXAoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNldXBFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1l
cygpLm1vdXNldXBFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2
ZW50VGFyZ2V0Tm9kZTo6b25tb3VzZXdoZWVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUobW91c2V3aGVlbEV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCk7CiB9CiAK
IHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbm1vdXNld2hlZWwoUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JU
eXBlKG1vdXNld2hlZWxFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCwgZXZlbnRMaXN0ZW5l
cik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25iZWZvcmVjdXQoKSBj
b25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShiZWZvcmVjdXRF
dmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5iZWZvcmVjdXRFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmJlZm9y
ZWN1dChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoYmVmb3JlY3V0RXZlbnQsIGV2ZW50TGlzdGVuZXIp
OworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5iZWZvcmVj
dXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0
Tm9kZTo6b25jdXQoKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9y
VHlwZShjdXRFdmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2
ZW50TmFtZXMoKS5jdXRFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmN1
dChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoY3V0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5jdXRFdmVudCwgZXZlbnRM
aXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25iZWZvcmVj
b3B5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoYmVm
b3JlY29weUV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZl
bnROYW1lcygpLmJlZm9yZWNvcHlFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpz
ZXRPbmJlZm9yZWNvcHkoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQog
ewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGJlZm9yZWNvcHlFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1l
cygpLmJlZm9yZWNvcHlFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIq
IEV2ZW50VGFyZ2V0Tm9kZTo6b25jb3B5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGUoY29weUV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmNvcHlFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJn
ZXROb2RlOjpzZXRPbmNvcHkoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNvcHlFdmVudCwgZXZlbnRM
aXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygp
LmNvcHlFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFy
Z2V0Tm9kZTo6b25iZWZvcmVwYXN0ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlKGJlZm9yZXBhc3RlRXZlbnQpOworICAgIHJldHVybiBpbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuYmVmb3JlcGFzdGVFdmVudCk7CiB9CiAKIHZv
aWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmJlZm9yZXBhc3RlKFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZShiZWZvcmVwYXN0ZUV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuYmVmb3JlcGFzdGVFdmVudCwgZXZlbnRMaXN0ZW5l
cik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25wYXN0ZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHBhc3RlRXZlbnQpOwor
ICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkucGFzdGVF
dmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbnBhc3RlKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZShwYXN0ZUV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkucGFzdGVFdmVudCwgZXZlbnRMaXN0ZW5lcik7
CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25kcmFnZW50ZXIoKSBjb25z
dAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShkcmFnZW50ZXJFdmVu
dCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5k
cmFnZW50ZXJFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmRyYWdlbnRl
cihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZHJhZ2VudGVyRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwor
ICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnZW50ZXJF
dmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9k
ZTo6b25kcmFnb3ZlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlKGRyYWdvdmVyRXZlbnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9y
VHlwZShldmVudE5hbWVzKCkuZHJhZ292ZXJFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXRO
b2RlOjpzZXRPbmRyYWdvdmVyKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5l
cikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShkcmFnb3ZlckV2ZW50LCBl
dmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5h
bWVzKCkuZHJhZ292ZXJFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIq
IEV2ZW50VGFyZ2V0Tm9kZTo6b25kcmFnbGVhdmUoKSBjb25zdAogewotICAgIHJldHVybiBpbmxp
bmVFdmVudExpc3RlbmVyRm9yVHlwZShkcmFnbGVhdmVFdmVudCk7CisgICAgcmV0dXJuIGlubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnbGVhdmVFdmVudCk7CiB9CiAK
IHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmRyYWdsZWF2ZShQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5
cGUoZHJhZ2xlYXZlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnbGVhdmVFdmVudCwgZXZlbnRMaXN0ZW5lcik7
CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25kcm9wKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZHJvcEV2ZW50KTsKKyAgICBy
ZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmRyb3BFdmVudCk7
CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmRyb3AoUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JU
eXBlKGRyb3BFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGUoZXZlbnROYW1lcygpLmRyb3BFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2
ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25kcmFnc3RhcnQoKSBjb25zdAogewotICAg
IHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShkcmFnc3RhcnRFdmVudCk7CisgICAg
cmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnc3RhcnRF
dmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmRyYWdzdGFydChQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGUoZHJhZ3N0YXJ0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnc3RhcnRFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25kcmFn
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZHJhZ0V2
ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygp
LmRyYWdFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmRyYWcoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlKGRyYWdFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmRyYWdFdmVudCwgZXZlbnRMaXN0ZW5l
cik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25kcmFnZW5kKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZHJhZ2VuZEV2ZW50
KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmRy
YWdlbmRFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmRyYWdlbmQoUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlKGRyYWdlbmRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmRyYWdlbmRFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25yZXNl
dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHJlc2V0
RXZlbnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVz
KCkucmVzZXRFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbnJlc2V0KFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZShyZXNldEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJ
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkucmVzZXRFdmVudCwgZXZlbnRM
aXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25yZXNpemUo
KSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShyZXNpemVF
dmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5yZXNpemVFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbnJlc2l6ZShQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUocmVzaXplRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25zY3Jv
bGwoKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShzY3Jv
bGxFdmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFt
ZXMoKS5zY3JvbGxFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbnNjcm9s
bChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoc2Nyb2xsRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAg
IHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudCwg
ZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25z
ZWFyY2goKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShz
ZWFyY2hFdmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50
TmFtZXMoKS5zZWFyY2hFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbnNl
YXJjaChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoc2VhcmNoRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwor
ICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5zZWFyY2hFdmVu
dCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6
b25zZWxlY3QoKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZShzZWxlY3RFdmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2
ZW50TmFtZXMoKS5zZWxlY3RFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRP
bnNlbGVjdChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAg
c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoc2VsZWN0RXZlbnQsIGV2ZW50TGlzdGVuZXIp
OworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5zZWxlY3RF
dmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9k
ZTo6b25zZWxlY3RzdGFydCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlKHNlbGVjdHN0YXJ0RXZlbnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZShldmVudE5hbWVzKCkuc2VsZWN0c3RhcnRFdmVudCk7CiB9CiAKIHZvaWQgRXZl
bnRUYXJnZXROb2RlOjpzZXRPbnNlbGVjdHN0YXJ0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
ZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShzZWxl
Y3RzdGFydEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZShldmVudE5hbWVzKCkuc2VsZWN0c3RhcnRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9
CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25zdWJtaXQoKSBjb25zdAogewot
ICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShzdWJtaXRFdmVudCk7CisgICAg
cmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5zdWJtaXRFdmVu
dCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbnN1Ym1pdChQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGUoc3VibWl0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5zdWJtaXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7
CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b251bmxvYWQoKSBjb25zdAog
ewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZSh1bmxvYWRFdmVudCk7Cisg
ICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS51bmxvYWRF
dmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbnVubG9hZChQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGUodW5sb2FkRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCwgZXZlbnRMaXN0ZW5l
cik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL0tleWJv
YXJkRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3Bw
CShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMywyMyArMzMsMjEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11
c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKLQogc3RhdGljIGlubGluZSBjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZUZvcktleWJvYXJkRXZlbnRUeXBlKFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dDo6VHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIFBsYXRm
b3JtS2V5Ym9hcmRFdmVudDo6S2V5VXA6Ci0gICAgICAgICAgICByZXR1cm4ga2V5dXBFdmVudDsK
KyAgICAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkua2V5dXBFdmVudDsKICAgICAgICAgY2Fz
ZSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlJhd0tleURvd246Ci0gICAgICAgICAgICByZXR1cm4g
a2V5ZG93bkV2ZW50OworICAgICAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5rZXlkb3duRXZl
bnQ7CiAgICAgICAgIGNhc2UgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpDaGFyOgotICAgICAgICAg
ICAgcmV0dXJuIGtleXByZXNzRXZlbnQ7CisgICAgICAgICAgICByZXR1cm4gZXZlbnROYW1lcygp
LmtleXByZXNzRXZlbnQ7CiAgICAgICAgIGNhc2UgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpLZXlE
b3duOgogICAgICAgICAgICAgLy8gVGhlIGNhbGxlciBzaG91bGQgZGlzYW1iaWd1YXRlIHRoZSBj
b21iaW5lZCBldmVudCBpbnRvIFJhd0tleURvd24gb3IgQ2hhciBldmVudHMuCiAgICAgICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGtl
eWRvd25FdmVudDsKKyAgICByZXR1cm4gZXZlbnROYW1lcygpLmtleWRvd25FdmVudDsKIH0KIAog
S2V5Ym9hcmRFdmVudDo6S2V5Ym9hcmRFdmVudCgpCkBAIC0xMjMsNyArMTIxLDcgQEAgaW50IEtl
eWJvYXJkRXZlbnQ6OmtleUNvZGUoKSBjb25zdAogICAgIC8vIFdlIG1hdGNoIElFLgogICAgIGlm
ICghbV9rZXlFdmVudCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHR5cGUoKSA9PSBrZXlk
b3duRXZlbnQgfHwgdHlwZSgpID09IGtleXVwRXZlbnQpCisgICAgaWYgKHR5cGUoKSA9PSBldmVu
dE5hbWVzKCkua2V5ZG93bkV2ZW50IHx8IHR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5dXBFdmVu
dCkKICAgICAgICAgcmV0dXJuIG1fa2V5RXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpOwog
ICAgIHJldHVybiBjaGFyQ29kZSgpOwogfQpAQCAtMTM3LDcgKzEzNSw3IEBAIGludCBLZXlib2Fy
ZEV2ZW50OjpjaGFyQ29kZSgpIGNvbnN0CiAgICAgaWYgKHZpZXcoKSkKICAgICAgICAgYmFja3dh
cmRDb21wYXRpYmlsaXR5TW9kZSA9IHZpZXcoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPm5l
ZWRzS2V5Ym9hcmRFdmVudERpc2FtYmlndWF0aW9uUXVpcmtzKCk7CiAKLSAgICBpZiAoIW1fa2V5
RXZlbnQgfHwgKHR5cGUoKSAhPSBrZXlwcmVzc0V2ZW50ICYmICFiYWNrd2FyZENvbXBhdGliaWxp
dHlNb2RlKSkKKyAgICBpZiAoIW1fa2V5RXZlbnQgfHwgKHR5cGUoKSAhPSBldmVudE5hbWVzKCku
a2V5cHJlc3NFdmVudCAmJiAhYmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSkpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIFN0cmluZyB0ZXh0ID0gbV9rZXlFdmVudC0+dGV4dCgpOwogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KHRleHQuY2hhcmFjdGVyU3RhcnRpbmdBdCgwKSk7CkluZGV4OiBX
ZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01l
c3NhZ2VFdmVudC5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9kb20vTWVzc2FnZUV2
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTQgKzMzLDEyIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0KIE1lc3NhZ2VFdmVudDo6
TWVzc2FnZUV2ZW50KCkKIHsKIH0KIAogTWVzc2FnZUV2ZW50OjpNZXNzYWdlRXZlbnQoY29uc3Qg
U3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBsYXN0RXZl
bnRJZCwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHNvdXJjZSwgUGFzc1JlZlB0cjxNZXNzYWdlUG9y
dD4gbWVzc2FnZVBvcnQpCi0gICAgOiBFdmVudChtZXNzYWdlRXZlbnQsIGZhbHNlLCB0cnVlKQor
ICAgIDogRXZlbnQoZXZlbnROYW1lcygpLm1lc3NhZ2VFdmVudCwgZmFsc2UsIHRydWUpCiAgICAg
LCBtX2RhdGEoZGF0YSkKICAgICAsIG1fb3JpZ2luKG9yaWdpbikKICAgICAsIG1fbGFzdEV2ZW50
SWQobGFzdEV2ZW50SWQpCkluZGV4OiBXZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysr
IFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwLDcgKzIx
MCw3IEBAIHZvaWQgTWVzc2FnZVBvcnQ6OmRpc3BhdGNoTWVzc2FnZXMoKQogICAgIFJlZlB0cjxF
dmVudD4gZXZ0OwogICAgIHdoaWxlIChtX21lc3NhZ2VRdWV1ZS50cnlHZXRNZXNzYWdlKGV2dCkp
IHsKIAotICAgICAgICBBU1NFUlQoZXZ0LT50eXBlKCkgPT0gRXZlbnROYW1lczo6bWVzc2FnZUV2
ZW50KTsKKyAgICAgICAgQVNTRVJUKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tZXNzYWdl
RXZlbnQpOwogCiAgICAgICAgIGlmIChtX29uTWVzc2FnZUxpc3RlbmVyKSB7CiAgICAgICAgICAg
ICBldnQtPnNldFRhcmdldCh0aGlzKTsKQEAgLTIzOCw3ICsyMzgsNyBAQCB2b2lkIE1lc3NhZ2VQ
b3J0OjpkaXNwYXRjaENsb3NlRXZlbnQoKQogICAgIEFTU0VSVChtX3BlbmRpbmdDbG9zZUV2ZW50
KTsKICAgICBtX3BlbmRpbmdDbG9zZUV2ZW50ID0gZmFsc2U7CiAKLSAgICBSZWZQdHI8RXZlbnQ+
IGV2dCA9IEV2ZW50OjpjcmVhdGUoRXZlbnROYW1lczo6Y2xvc2VFdmVudCwgZmFsc2UsIHRydWUp
OworICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2xv
c2VFdmVudCwgZmFsc2UsIHRydWUpOwogICAgIGlmIChtX29uQ2xvc2VMaXN0ZW5lcikgewogICAg
ICAgICBldnQtPnNldFRhcmdldCh0aGlzKTsKICAgICAgICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0
KHRoaXMpOwpJbmRleDogV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9k
b20vTW91c2VFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKLQogTW91c2VF
dmVudDo6TW91c2VFdmVudCgpCiAgICAgOiBtX2J1dHRvbigwKQogICAgICwgbV9idXR0b25Eb3du
KGZhbHNlKQpAQCAtODcsOCArODUsOCBAQCBib29sIE1vdXNlRXZlbnQ6OmlzTW91c2VFdmVudCgp
IGNvbnN0CiBib29sIE1vdXNlRXZlbnQ6OmlzRHJhZ0V2ZW50KCkgY29uc3QKIHsKICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHQgPSB0eXBlKCk7Ci0gICAgcmV0dXJuIHQgPT0gZHJhZ2VudGVyRXZl
bnQgfHwgdCA9PSBkcmFnb3ZlckV2ZW50IHx8IHQgPT0gZHJhZ2xlYXZlRXZlbnQgfHwgdCA9PSBk
cm9wRXZlbnQKLSAgICAgICAgICAgICAgIHx8IHQgPT0gZHJhZ3N0YXJ0RXZlbnR8fCB0ID09IGRy
YWdFdmVudCB8fCB0ID09IGRyYWdlbmRFdmVudDsKKyAgICByZXR1cm4gdCA9PSBldmVudE5hbWVz
KCkuZHJhZ2VudGVyRXZlbnQgfHwgdCA9PSBldmVudE5hbWVzKCkuZHJhZ292ZXJFdmVudCB8fCB0
ID09IGV2ZW50TmFtZXMoKS5kcmFnbGVhdmVFdmVudCB8fCB0ID09IGV2ZW50TmFtZXMoKS5kcm9w
RXZlbnQKKyAgICAgICAgICAgICAgIHx8IHQgPT0gZXZlbnROYW1lcygpLmRyYWdzdGFydEV2ZW50
fHwgdCA9PSBldmVudE5hbWVzKCkuZHJhZ0V2ZW50IHx8IHQgPT0gZXZlbnROYW1lcygpLmRyYWdl
bmRFdmVudDsKIH0KIAogaW50IE1vdXNlRXZlbnQ6OndoaWNoKCkgY29uc3QKQEAgLTEwMiw3ICsx
MDAsNyBAQCBpbnQgTW91c2VFdmVudDo6d2hpY2goKSBjb25zdAogTm9kZSogTW91c2VFdmVudDo6
dG9FbGVtZW50KCkgY29uc3QKIHsKICAgICAvLyBNU0lFIGV4dGVuc2lvbiAtICJ0aGUgb2JqZWN0
IHRvd2FyZCB3aGljaCB0aGUgdXNlciBpcyBtb3ZpbmcgdGhlIG1vdXNlIHBvaW50ZXIiCi0gICAg
aWYgKHR5cGUoKSA9PSBtb3VzZW91dEV2ZW50KSAKKyAgICBpZiAodHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZW91dEV2ZW50KSAKICAgICAgICAgcmV0dXJuIHJlbGF0ZWRUYXJnZXQoKTsKICAg
ICAKICAgICByZXR1cm4gdGFyZ2V0KCkgPyB0YXJnZXQoKS0+dG9Ob2RlKCkgOiAwOwpAQCAtMTEx
LDcgKzEwOSw3IEBAIE5vZGUqIE1vdXNlRXZlbnQ6OnRvRWxlbWVudCgpIGNvbnN0CiBOb2RlKiBN
b3VzZUV2ZW50Ojpmcm9tRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgLy8gTVNJRSBleHRlbnNpb24g
LSAib2JqZWN0IGZyb20gd2hpY2ggYWN0aXZhdGlvbiBvciB0aGUgbW91c2UgcG9pbnRlciBpcyBl
eGl0aW5nIGR1cmluZyB0aGUgZXZlbnQiIChodWg/KQotICAgIGlmICh0eXBlKCkgIT0gbW91c2Vv
dXRFdmVudCkKKyAgICBpZiAodHlwZSgpICE9IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KQog
ICAgICAgICByZXR1cm4gcmVsYXRlZFRhcmdldCgpOwogICAgIAogICAgIHJldHVybiB0YXJnZXQo
KSA/IHRhcmdldCgpLT50b05vZGUoKSA6IDA7CkluZGV4OiBXZWJDb3JlL2RvbS9PdmVyZmxvd0V2
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9PdmVyZmxvd0V2ZW50LmNwcAkocmV2
aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL2RvbS9PdmVyZmxvd0V2ZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksMTEgKzI5LDkgQEAKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKLSAgICAKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwotICAgIAor
ICAgICAgICAKIE92ZXJmbG93RXZlbnQ6Ok92ZXJmbG93RXZlbnQoKQotICAgIDogRXZlbnQob3Zl
cmZsb3djaGFuZ2VkRXZlbnQsIGZhbHNlLCBmYWxzZSkKKyAgICA6IEV2ZW50KGV2ZW50TmFtZXMo
KS5vdmVyZmxvd2NoYW5nZWRFdmVudCwgZmFsc2UsIGZhbHNlKQogICAgICwgbV9vcmllbnQoVkVS
VElDQUwpCiAgICAgLCBtX2hvcml6b250YWxPdmVyZmxvdyhmYWxzZSkKICAgICAsIG1fdmVydGlj
YWxPdmVyZmxvdyhmYWxzZSkKQEAgLTQxLDcgKzM5LDcgQEAgT3ZlcmZsb3dFdmVudDo6T3ZlcmZs
b3dFdmVudCgpCiB9CiAKIE92ZXJmbG93RXZlbnQ6Ok92ZXJmbG93RXZlbnQoYm9vbCBob3Jpem9u
dGFsT3ZlcmZsb3dDaGFuZ2VkLCBib29sIGhvcml6b250YWxPdmVyZmxvdywgYm9vbCB2ZXJ0aWNh
bE92ZXJmbG93Q2hhbmdlZCwgYm9vbCB2ZXJ0aWNhbE92ZXJmbG93KQotICAgIDogRXZlbnQob3Zl
cmZsb3djaGFuZ2VkRXZlbnQsIGZhbHNlLCBmYWxzZSkKKyAgICA6IEV2ZW50KGV2ZW50TmFtZXMo
KS5vdmVyZmxvd2NoYW5nZWRFdmVudCwgZmFsc2UsIGZhbHNlKQogICAgICwgbV9ob3Jpem9udGFs
T3ZlcmZsb3coaG9yaXpvbnRhbE92ZXJmbG93KQogICAgICwgbV92ZXJ0aWNhbE92ZXJmbG93KHZl
cnRpY2FsT3ZlcmZsb3cpCiB7CkluZGV4OiBXZWJDb3JlL2RvbS9UZXh0RXZlbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL1RleHRFdmVudC5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysg
V2ViQ29yZS9kb20vVGV4dEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsNiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwot
CiBUZXh0RXZlbnQ6OlRleHRFdmVudCgpCiAgICAgOiBtX2lzTGluZUJyZWFrKGZhbHNlKQogICAg
ICwgbV9pc0JhY2tUYWIoZmFsc2UpCkBAIC00MCw3ICszOCw3IEBAIFRleHRFdmVudDo6VGV4dEV2
ZW50KCkKIH0KIAogVGV4dEV2ZW50OjpUZXh0RXZlbnQoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+
IHZpZXcsIGNvbnN0IFN0cmluZyYgZGF0YSkKLSAgICA6IFVJRXZlbnQodGV4dElucHV0RXZlbnQs
IHRydWUsIHRydWUsIHZpZXcsIDApCisgICAgOiBVSUV2ZW50KGV2ZW50TmFtZXMoKS50ZXh0SW5w
dXRFdmVudCwgdHJ1ZSwgdHJ1ZSwgdmlldywgMCkKICAgICAsIG1fZGF0YShkYXRhKQogICAgICwg
bV9pc0xpbmVCcmVhayhmYWxzZSkKICAgICAsIG1faXNCYWNrVGFiKGZhbHNlKQpJbmRleDogV2Vi
Q29yZS9kb20vV2ViS2l0QW5pbWF0aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL1dlYktpdEFuaW1hdGlvbkV2ZW50LmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3Jl
L2RvbS9XZWJLaXRBbmltYXRpb25FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDQ3ICsy
OSw0NSBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewot
ICAgIAotICAgIHVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwotICAgIAotICAgIFdlYktpdEFu
aW1hdGlvbkV2ZW50OjpXZWJLaXRBbmltYXRpb25FdmVudCgpCisKK1dlYktpdEFuaW1hdGlvbkV2
ZW50OjpXZWJLaXRBbmltYXRpb25FdmVudCgpCiAgICAgOiBtX2VsYXBzZWRUaW1lKDAuMCkKLSAg
ICB7Ci0gICAgfQotICAgIAotICAgIFdlYktpdEFuaW1hdGlvbkV2ZW50OjpXZWJLaXRBbmltYXRp
b25FdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9u
TmFtZSwgZG91YmxlIGVsYXBzZWRUaW1lKQoreworfQorCitXZWJLaXRBbmltYXRpb25FdmVudDo6
V2ViS2l0QW5pbWF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJp
bmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBlbGFwc2VkVGltZSkKICAgICA6IEV2ZW50KHR5cGUs
IHRydWUsIHRydWUpCiAgICAgLCBtX2FuaW1hdGlvbk5hbWUoYW5pbWF0aW9uTmFtZSkKICAgICAs
IG1fZWxhcHNlZFRpbWUoZWxhcHNlZFRpbWUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBXZWJL
aXRBbmltYXRpb25FdmVudDo6fldlYktpdEFuaW1hdGlvbkV2ZW50KCkKLSAgICB7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgV2ViS2l0QW5pbWF0aW9uRXZlbnQ6OmluaXRXZWJLaXRBbmltYXRpb25F
dmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIC8qY2FuQnViYmxlQXJnKi8sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgLypjYW5jZWxhYmxlQXJnKi8sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
YW5pbWF0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZG91YmxlIGVsYXBzZWRUaW1lKQotICAgIHsKLSAgICAgICAgaWYgKGRpc3BhdGNoZWQoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGluaXRFdmVudCh0eXBlLCBm
YWxzZSwgdHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBtX2FuaW1hdGlvbk5hbWUgPSBhbmltYXRp
b25OYW1lOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBTdHJpbmcmIFdlYktpdEFuaW1hdGlvbkV2
ZW50OjphbmltYXRpb25OYW1lKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FuaW1h
dGlvbk5hbWU7Ci0gICAgfQoreworfQorCitXZWJLaXRBbmltYXRpb25FdmVudDo6fldlYktpdEFu
aW1hdGlvbkV2ZW50KCkKK3sKK30KKwordm9pZCBXZWJLaXRBbmltYXRpb25FdmVudDo6aW5pdFdl
YktpdEFuaW1hdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAvKmNhbkJ1YmJsZUFyZyovLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgLypjYW5jZWxhYmxlQXJn
Ki8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRvdWJsZSBlbGFwc2VkVGltZSkKK3sKKyAgICBpZiAoZGlzcGF0Y2hlZCgpKQorICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgZG91YmxlIFdlYktpdEFuaW1hdGlvbkV2ZW50OjplbGFwc2VkVGlt
ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9lbGFwc2VkVGltZTsKLSAgICB9Cisg
ICAgaW5pdEV2ZW50KHR5cGUsIGZhbHNlLCB0cnVlKTsKICAgICAKKyAgICBtX2FuaW1hdGlvbk5h
bWUgPSBhbmltYXRpb25OYW1lOworfQorCitjb25zdCBTdHJpbmcmIFdlYktpdEFuaW1hdGlvbkV2
ZW50OjphbmltYXRpb25OYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hbmltYXRpb25OYW1l
OworfQorCitkb3VibGUgV2ViS2l0QW5pbWF0aW9uRXZlbnQ6OmVsYXBzZWRUaW1lKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9lbGFwc2VkVGltZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9kb20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAzODA2
NCkKKysrIFdlYkNvcmUvZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDQ4ICsyOSw0NiBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewotICAgIAotICAgIHVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwotICAg
IAotICAgIFdlYktpdFRyYW5zaXRpb25FdmVudDo6V2ViS2l0VHJhbnNpdGlvbkV2ZW50KCkKKyAg
ICAgICAgCitXZWJLaXRUcmFuc2l0aW9uRXZlbnQ6OldlYktpdFRyYW5zaXRpb25FdmVudCgpCiAg
ICAgOiBtX3Byb3BlcnR5TmFtZSgpCiAgICAgLCBtX2VsYXBzZWRUaW1lKDAuMCkKLSAgICB7Ci0g
ICAgfQotICAgIAotICAgIFdlYktpdFRyYW5zaXRpb25FdmVudDo6V2ViS2l0VHJhbnNpdGlvbkV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUs
IGRvdWJsZSBlbGFwc2VkVGltZSkKK3sKK30KKworV2ViS2l0VHJhbnNpdGlvbkV2ZW50OjpXZWJL
aXRUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IHByb3BlcnR5TmFtZSwgZG91YmxlIGVsYXBzZWRUaW1lKQogICAgIDogRXZlbnQodHlwZSwgdHJ1
ZSwgdHJ1ZSkKICAgICAsIG1fcHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSkKICAgICAsIG1fZWxh
cHNlZFRpbWUoZWxhcHNlZFRpbWUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBXZWJLaXRUcmFu
c2l0aW9uRXZlbnQ6On5XZWJLaXRUcmFuc2l0aW9uRXZlbnQoKQotICAgIHsKLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBXZWJLaXRUcmFuc2l0aW9uRXZlbnQ6OmluaXRXZWJLaXRUcmFuc2l0aW9uRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCAKK3sKK30KKworV2ViS2l0VHJhbnNpdGlvbkV2
ZW50Ojp+V2ViS2l0VHJhbnNpdGlvbkV2ZW50KCkKK3sKK30KKwordm9pZCBXZWJLaXRUcmFuc2l0
aW9uRXZlbnQ6OmluaXRXZWJLaXRUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0
eXBlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAv
KmNhbkJ1YmJsZUFyZyovLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIC8qY2FuY2VsYWJsZUFyZyovLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGVsYXBzZWRUaW1lKQotICAg
IHsKLSAgICAgICAgaWYgKGRpc3BhdGNoZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgCi0gICAgICAgIGluaXRFdmVudCh0eXBlLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgICAgIAotICAg
ICAgICBtX3Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKLSAgICB9Ci0gICAgCi0gICAgY29u
c3QgU3RyaW5nJiBXZWJLaXRUcmFuc2l0aW9uRXZlbnQ6OnByb3BlcnR5TmFtZSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eU5hbWU7Ci0gICAgfQoreworICAgIGlmIChk
aXNwYXRjaGVkKCkpCisgICAgICAgIHJldHVybjsKICAgICAKLSAgICBkb3VibGUgV2ViS2l0VHJh
bnNpdGlvbkV2ZW50OjplbGFwc2VkVGltZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9lbGFwc2VkVGltZTsKLSAgICB9CisgICAgaW5pdEV2ZW50KHR5cGUsIGZhbHNlLCB0cnVlKTsK
ICAgICAKKyAgICBtX3Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKK30KKworY29uc3QgU3Ry
aW5nJiBXZWJLaXRUcmFuc2l0aW9uRXZlbnQ6OnByb3BlcnR5TmFtZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcHJvcGVydHlOYW1lOworfQorCitkb3VibGUgV2ViS2l0VHJhbnNpdGlvbkV2ZW50
OjplbGFwc2VkVGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZWxhcHNlZFRpbWU7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL1doZWVsRXZlbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1doZWVsRXZlbnQuY3BwCShyZXZpc2lvbiAzODA2
NCkKKysrIFdlYkNvcmUvZG9tL1doZWVsRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4
ICsyOCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50
TmFtZXM7Ci0KIFdoZWVsRXZlbnQ6OldoZWVsRXZlbnQoKQogICAgIDogbV93aGVlbERlbHRhWCgw
KQogICAgICwgbV93aGVlbERlbHRhWSgwKQpAQCAtMzksNyArMzcsNyBAQCBXaGVlbEV2ZW50OjpX
aGVlbEV2ZW50KCkKIFdoZWVsRXZlbnQ6OldoZWVsRXZlbnQoZmxvYXQgd2hlZWxEZWx0YVgsIGZs
b2F0IHdoZWVsRGVsdGFZLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywKICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHNjcmVlblgsIGludCBzY3JlZW5ZLCBpbnQgcGFnZVgsIGludCBw
YWdlWSwKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwg
Ym9vbCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5KQotICAgIDogTW91c2VSZWxhdGVkRXZlbnQobW91
c2V3aGVlbEV2ZW50LAorICAgIDogTW91c2VSZWxhdGVkRXZlbnQoZXZlbnROYW1lcygpLm1vdXNl
d2hlZWxFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIHRydWUsIHZpZXcsIDAs
IHNjcmVlblgsIHNjcmVlblksIHBhZ2VYLCBwYWdlWSwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjdHJsS2V5LCBhbHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5KQogICAgICwgbV93aGVlbERlbHRh
WChscm91bmRmKHdoZWVsRGVsdGFYKSAqIDEyMCkKQEAgLTU5LDcgKzU3LDcgQEAgdm9pZCBXaGVl
bEV2ZW50Ojppbml0V2hlZWxFdmVudChpbnQgd2hlZQogICAgIGlmIChkaXNwYXRjaGVkKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBpbml0VUlFdmVudChtb3VzZXdoZWVsRXZlbnQsIHRy
dWUsIHRydWUsIHZpZXcsIDApOworICAgIGluaXRVSUV2ZW50KGV2ZW50TmFtZXMoKS5tb3VzZXdo
ZWVsRXZlbnQsIHRydWUsIHRydWUsIHZpZXcsIDApOwogICAgIAogICAgIG1fc2NyZWVuWCA9IHNj
cmVlblg7CiAgICAgbV9zY3JlZW5ZID0gc2NyZWVuWTsKSW5kZXg6IFdlYkNvcmUvZG9tL1hNTFRv
a2VuaXplckxpYnhtbDIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1hNTFRva2VuaXpl
ckxpYnhtbDIuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvZG9tL1hNTFRva2VuaXpl
ckxpYnhtbDIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnRUeXBlLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTY0
LDggKzYzLDYgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKLQogY2xhc3MgUGVuZGluZ0NhbGxiYWNrcyB7
CiBwdWJsaWM6CiAgICAgUGVuZGluZ0NhbGxiYWNrcygpCkluZGV4OiBXZWJDb3JlL2RvbS9YTUxU
b2tlbml6ZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyUXQu
Y3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplclF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5oIgot
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC01OCw4ICs1Nyw2IEBAIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNw
YWNlIEV2ZW50TmFtZXM7Ci0KICNpZiBRVF9WRVJTSU9OID49IDB4MDQwNDAwCiBjbGFzcyBFbnRp
dHlSZXNvbHZlciA6IHB1YmxpYyBRWG1sU3RyZWFtRW50aXR5UmVzb2x2ZXIKIHsKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9EZWxldGVCdXR0b24uY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvZWRpdGlu
Zy9EZWxldGVCdXR0b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0KIERlbGV0
ZUJ1dHRvbjo6RGVsZXRlQnV0dG9uKERvY3VtZW50KiBkb2N1bWVudCkKICAgICA6IEhUTUxJbWFn
ZUVsZW1lbnQoZG9jdW1lbnQpCiB7CkBAIC00NSw3ICs0Myw3IEBAIERlbGV0ZUJ1dHRvbjo6RGVs
ZXRlQnV0dG9uKERvY3VtZW50KiBkb2MKIHZvaWQgRGVsZXRlQnV0dG9uOjpkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7
Ci0gICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGNsaWNrRXZlbnQpIHsKKyAgICAgICAgaWYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKICAgICAgICAgICAg
IGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5kZWxldGVCdXR0b25Db250cm9sbGVyKCkt
PmRlbGV0ZVRhcmdldCgpOwogICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAkocmV2aXNpb24gMzgwNjQp
CisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw4ICs0MSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2
ZW50TmFtZXM7Ci0KIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZChEb2N1bWVudCogZG9jdW1lbnQp
IAogICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fcGFyZW50KDApCkluZGV4OiBX
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiAvLyBXaGVuIGFuIGV2ZW50IGhhbmRsZXIgaGFzIG1v
dmVkIHRoZSBzZWxlY3Rpb24gb3V0c2lkZSBvZiBhIHRleHQgY29udHJvbApAQCAtMTI5LDE3ICsx
MjgsMTcgQEAgYm9vbCBFZGl0b3I6OmNhbkVkaXRSaWNobHkoKSBjb25zdAogCiBib29sIEVkaXRv
cjo6Y2FuREhUTUxDdXQoKQogewotICAgIHJldHVybiAhbV9mcmFtZS0+c2VsZWN0aW9uKCktPmlz
SW5QYXNzd29yZEZpZWxkKCkgJiYgIWRpc3BhdGNoQ1BQRXZlbnQoYmVmb3JlY3V0RXZlbnQsIENs
aXBib2FyZE51bWIpOworICAgIHJldHVybiAhbV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzSW5QYXNz
d29yZEZpZWxkKCkgJiYgIWRpc3BhdGNoQ1BQRXZlbnQoZXZlbnROYW1lcygpLmJlZm9yZWN1dEV2
ZW50LCBDbGlwYm9hcmROdW1iKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ29weSgpCiB7
Ci0gICAgcmV0dXJuICFtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNJblBhc3N3b3JkRmllbGQoKSAm
JiAhZGlzcGF0Y2hDUFBFdmVudChiZWZvcmVjb3B5RXZlbnQsIENsaXBib2FyZE51bWIpOworICAg
IHJldHVybiAhbV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzSW5QYXNzd29yZEZpZWxkKCkgJiYgIWRp
c3BhdGNoQ1BQRXZlbnQoZXZlbnROYW1lcygpLmJlZm9yZWNvcHlFdmVudCwgQ2xpcGJvYXJkTnVt
Yik7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5ESFRNTFBhc3RlKCkKIHsKLSAgICByZXR1cm4gIWRp
c3BhdGNoQ1BQRXZlbnQoYmVmb3JlcGFzdGVFdmVudCwgQ2xpcGJvYXJkTnVtYik7CisgICAgcmV0
dXJuICFkaXNwYXRjaENQUEV2ZW50KGV2ZW50TmFtZXMoKS5iZWZvcmVwYXN0ZUV2ZW50LCBDbGlw
Ym9hcmROdW1iKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkN1dCgpIGNvbnN0CkBAIC0zNTcsNyAr
MzU2LDcgQEAgYm9vbCBFZGl0b3I6OnRyeURIVE1MQ29weSgpCiAgICAgLy8gYWxzbyBkb25lIGZv
ciBzZWN1cml0eSwgYXMgaXQgZXJhc2VzIGRhdGEgZnJvbSB0aGUgbGFzdCBjb3B5L3Bhc3RlLgog
ICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPmNsZWFyKCk7CiAKLSAgICByZXR1
cm4gIWRpc3BhdGNoQ1BQRXZlbnQoY29weUV2ZW50LCBDbGlwYm9hcmRXcml0YWJsZSk7CisgICAg
cmV0dXJuICFkaXNwYXRjaENQUEV2ZW50KGV2ZW50TmFtZXMoKS5jb3B5RXZlbnQsIENsaXBib2Fy
ZFdyaXRhYmxlKTsKIH0KIAogYm9vbCBFZGl0b3I6OnRyeURIVE1MQ3V0KCkKQEAgLTM2OSwxMiAr
MzY4LDEyIEBAIGJvb2wgRWRpdG9yOjp0cnlESFRNTEN1dCgpCiAgICAgLy8gYWxzbyBkb25lIGZv
ciBzZWN1cml0eSwgYXMgaXQgZXJhc2VzIGRhdGEgZnJvbSB0aGUgbGFzdCBjb3B5L3Bhc3RlLgog
ICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPmNsZWFyKCk7CiAKLSAgICByZXR1
cm4gIWRpc3BhdGNoQ1BQRXZlbnQoY3V0RXZlbnQsIENsaXBib2FyZFdyaXRhYmxlKTsKKyAgICBy
ZXR1cm4gIWRpc3BhdGNoQ1BQRXZlbnQoZXZlbnROYW1lcygpLmN1dEV2ZW50LCBDbGlwYm9hcmRX
cml0YWJsZSk7CiB9CiAKIGJvb2wgRWRpdG9yOjp0cnlESFRNTFBhc3RlKCkKIHsKLSAgICByZXR1
cm4gIWRpc3BhdGNoQ1BQRXZlbnQocGFzdGVFdmVudCwgQ2xpcGJvYXJkUmVhZGFibGUpOworICAg
IHJldHVybiAhZGlzcGF0Y2hDUFBFdmVudChldmVudE5hbWVzKCkucGFzdGVFdmVudCwgQ2xpcGJv
YXJkUmVhZGFibGUpOwogfQogCiB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCkKQEAgLTc0OCw5ICs3NDcsOSBAQCBzdGF0aWMgdm9p
ZCBkaXNwYXRjaEVkaXRhYmxlQ29udGVudENoYW5nCiAgICAgRWxlbWVudCogZW5kUm9vdCA9IGNv
bW1hbmQuZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWM7
CiAgICAgaWYgKHN0YXJ0Um9vdCkKLSAgICAgICAgc3RhcnRSb290LT5kaXNwYXRjaEV2ZW50KEV2
ZW50OjpjcmVhdGUod2Via2l0RWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50LCBmYWxzZSwgZmFs
c2UpLCBlYyk7CisgICAgICAgIHN0YXJ0Um9vdC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS53ZWJraXRFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQsIGZhbHNlLCBm
YWxzZSksIGVjKTsKICAgICBpZiAoZW5kUm9vdCAmJiBlbmRSb290ICE9IHN0YXJ0Um9vdCkKLSAg
ICAgICAgZW5kUm9vdC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKHdlYmtpdEVkaXRhYmxl
Q29udGVudENoYW5nZWRFdmVudCwgZmFsc2UsIGZhbHNlKSwgZWMpOworICAgICAgICBlbmRSb290
LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdEVkaXRhYmxl
Q29udGVudENoYW5nZWRFdmVudCwgZmFsc2UsIGZhbHNlKSwgZWMpOwogfQogCiB2b2lkIEVkaXRv
cjo6YXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gY21kKQpJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiAzODA2
NCkKKysrIFdlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDcgKzUxLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2lu
ZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIGVu
dW0gRUZyYWdtZW50VHlwZSB7IEVtcHR5RnJhZ21lbnQsIFNpbmdsZVRleHROb2RlRnJhZ21lbnQs
IFRyZWVGcmFnbWVudCB9OwpAQCAtMTIzLDcgKzEyMiw3IEBAIFJlcGxhY2VtZW50RnJhZ21lbnQ6
OlJlcGxhY2VtZW50RnJhZ21lbnQKICAgICAKICAgICBOb2RlKiBzaGFkb3dBbmNlc3Rvck5vZGUg
PSBlZGl0YWJsZVJvb3QtPnNoYWRvd0FuY2VzdG9yTm9kZSgpOwogICAgIAotICAgIGlmICghZWRp
dGFibGVSb290LT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZSh3ZWJraXRCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudCkgJiYKKyAgICBpZiAoIWVkaXRhYmxlUm9vdC0+aW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGUoZXZlbnROYW1lcygpLndlYmtpdEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KSAmJgog
ICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZXNlIGNoZWNrcyBvbmNlIHRleHRhcmVhcyBhbmQg
dGV4dGZpZWxkcyBhY3R1YWxseSByZWdpc3RlciBhbiBldmVudCBoYW5kbGVyLgogICAgICAgICAh
KHNoYWRvd0FuY2VzdG9yTm9kZSAmJiBzaGFkb3dBbmNlc3Rvck5vZGUtPnJlbmRlcmVyKCkgJiYg
c2hhZG93QW5jZXN0b3JOb2RlLT5yZW5kZXJlcigpLT5pc1RleHRGaWVsZCgpKSAmJgogICAgICAg
ICAhKHNoYWRvd0FuY2VzdG9yTm9kZSAmJiBzaGFkb3dBbmNlc3Rvck5vZGUtPnJlbmRlcmVyKCkg
JiYgc2hhZG93QW5jZXN0b3JOb2RlLT5yZW5kZXJlcigpLT5pc1RleHRBcmVhKCkpICYmCkluZGV4
OiBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAzODA2NCkK
KysrIFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcsNyArNTcsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVz
cGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogY29uc3QgaW50
IE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uID0gSU5UX01JTjsKQEAgLTExNDgsNyAr
MTE0Nyw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0Rm9jdXNlZChib28KICAgICBm
b2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKTsKIAogICAgIGlmIChEb2N1bWVudCogZG9jID0g
bV9mcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgZG9jLT5kaXNwYXRjaFdpbmRvd0V2ZW50KGZs
YWcgPyBmb2N1c0V2ZW50IDogYmx1ckV2ZW50LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBkb2Mt
PmRpc3BhdGNoV2luZG93RXZlbnQoZmxhZyA/IGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50IDogZXZl
bnROYW1lcygpLmJsdXJFdmVudCwgZmFsc2UsIGZhbHNlKTsKIH0KIAogYm9vbCBTZWxlY3Rpb25D
b250cm9sbGVyOjppc0ZvY3VzZWRBbmRBY3RpdmUoKSBjb25zdApJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxBbmNob3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEFu
Y2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQW5j
aG9yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDYgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLXVzaW5nIG5hbWVzcGFj
ZSBFdmVudE5hbWVzOwogCiBIVE1MQW5jaG9yRWxlbWVudDo6SFRNTEFuY2hvckVsZW1lbnQoRG9j
dW1lbnQqIGRvYykKICAgICA6IEhUTUxFbGVtZW50KGFUYWcsIGRvYykKQEAgLTEzMiwxMyArMTMx
LDEzIEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmQKICAgICAvLyBS
ZWFjdCBvbiBjbGlja3MgYW5kIG9uIGtleXByZXNzZXMuCiAgICAgLy8gRG9uJ3QgbWFrZSB0aGlz
IEtFWVVQX0VWRU5UIGFnYWluLCBpdCBtYWtlcyBraHRtbCBmb2xsb3cgbGlua3MgaXQgc2hvdWxk
bid0LAogICAgIC8vIHdoZW4gcHJlc3NpbmcgRW50ZXIgaW4gdGhlIGNvbWJvLgotICAgIGlmIChp
c0xpbmsoKSAmJiAoZXZ0LT50eXBlKCkgPT0gY2xpY2tFdmVudCB8fCAoZXZ0LT50eXBlKCkgPT0g
a2V5ZG93bkV2ZW50ICYmIGZvY3VzZWQoKSkpKSB7CisgICAgaWYgKGlzTGluaygpICYmIChldnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCB8fCAoZXZ0LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmtleWRvd25FdmVudCAmJiBmb2N1c2VkKCkpKSkgewogICAgICAgICBNb3VzZUV2
ZW50KiBlID0gMDsKLSAgICAgICAgaWYgKGV2dC0+dHlwZSgpID09IGNsaWNrRXZlbnQgJiYgZXZ0
LT5pc01vdXNlRXZlbnQoKSkKKyAgICAgICAgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5jbGlja0V2ZW50ICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkpCiAgICAgICAgICAgICBlID0gc3Rh
dGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCk7CiAKICAgICAgICAgS2V5Ym9hcmRFdmVudCogayA9
IDA7Ci0gICAgICAgIGlmIChldnQtPnR5cGUoKSA9PSBrZXlkb3duRXZlbnQgJiYgZXZ0LT5pc0tl
eWJvYXJkRXZlbnQoKSkKKyAgICAgICAgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5r
ZXlkb3duRXZlbnQgJiYgZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSkKICAgICAgICAgICAgIGsgPSBz
dGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0KTsKIAogICAgICAgICBpZiAoZSAmJiBlLT5i
dXR0b24oKSA9PSBSaWdodEJ1dHRvbikgewpAQCAtMjI0LDEyICsyMjMsMTIgQEAgdm9pZCBIVE1M
QW5jaG9yRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZAogICAgIH0gZWxzZSBpZiAoaXNMaW5rKCkg
JiYgaXNDb250ZW50RWRpdGFibGUoKSkgewogICAgICAgICAvLyBUaGlzIGtlZXBzIHRyYWNrIG9m
IHRoZSBlZGl0YWJsZSBibG9jayB0aGF0IHRoZSBzZWxlY3Rpb24gd2FzIGluIChpZiBpdCB3YXMg
aW4gb25lKSBqdXN0IGJlZm9yZSB0aGUgbGluayB3YXMgY2xpY2tlZAogICAgICAgICAvLyBmb3Ig
dGhlIExpdmVXaGVuTm90Rm9jdXNlZCBlZGl0YWJsZSBsaW5rIGJlaGF2aW9yCi0gICAgICAgIGlm
IChldnQtPnR5cGUoKSA9PSBtb3VzZWRvd25FdmVudCAmJiBldnQtPmlzTW91c2VFdmVudCgpICYm
IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpLT5idXR0b24oKSAhPSBSaWdodEJ1dHRvbiAm
JiBkb2N1bWVudCgpLT5mcmFtZSgpICYmIGRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigp
KSB7CisgICAgICAgIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZl
bnQgJiYgZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0
KS0+YnV0dG9uKCkgIT0gUmlnaHRCdXR0b24gJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiBkb2N1
bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKSkgewogICAgICAgICAgICAgTW91c2VFdmVudCog
ZSA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpOwogCiAgICAgICAgICAgICBtX3Jvb3RF
ZGl0YWJsZUVsZW1lbnRGb3JTZWxlY3Rpb25Pbk1vdXNlRG93biA9IGRvY3VtZW50KCktPmZyYW1l
KCktPnNlbGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgICAgICAgICBtX3dh
c1NoaWZ0S2V5RG93bk9uTW91c2VEb3duID0gZSAmJiBlLT5zaGlmdEtleSgpOwotICAgICAgICB9
IGVsc2UgaWYgKGV2dC0+dHlwZSgpID09IG1vdXNlb3ZlckV2ZW50KSB7CisgICAgICAgIH0gZWxz
ZSBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7CiAgICAg
ICAgICAgICAvLyBUaGVzZSBhcmUgY2xlYXJlZCBvbiBtb3VzZW92ZXIgYW5kIG5vdCBtb3VzZW91
dCBiZWNhdXNlIHRoZWlyIHZhbHVlcyBhcmUgbmVlZGVkIGZvciBkcmFnIGV2ZW50cywgYnV0IHRo
ZXNlIGhhcHBlbgogICAgICAgICAgICAgLy8gYWZ0ZXIgbW91c2Ugb3V0IGV2ZW50cy4KICAgICAg
ICAgICAgIG1fcm9vdEVkaXRhYmxlRWxlbWVudEZvclNlbGVjdGlvbk9uTW91c2VEb3duID0gMDsK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7
CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBIVE1MQm9keUVsZW1lbnQ6OkhUTUxCb2R5
RWxlbWVudChEb2N1bWVudCogZG9jKQpAQCAtMTMxLDI0ICsxMzAsMjQgQEAgdm9pZCBIVE1MQm9k
eUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidQogICAgICAgICBpZiAoYXR0YWNoZWQoKSkKICAg
ICAgICAgICAgIGRvY3VtZW50KCktPnJlY2FsY1N0eWxlKEZvcmNlKTsKICAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBvbmxvYWRBdHRyKQotICAgICAgICBkb2N1bWVudCgpLT5zZXRXaW5k
b3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShsb2FkRXZlbnQsIGF0dHIp
OworICAgICAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkubG9hZEV2ZW50LCBhdHRyKTsKICAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gb25iZWZvcmV1bmxvYWRBdHRyKQotICAgICAgICBkb2N1bWVudCgp
LT5zZXRXaW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShiZWZvcmV1
bmxvYWRFdmVudCwgYXR0cik7CisgICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0lubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5iZWZvcmV1bmxvYWRF
dmVudCwgYXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9udW5sb2FkQXR0cikK
LSAgICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVB
bmRBdHRyaWJ1dGUodW5sb2FkRXZlbnQsIGF0dHIpOworICAgICAgICBkb2N1bWVudCgpLT5zZXRX
aW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCku
dW5sb2FkRXZlbnQsIGF0dHIpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmJsdXJB
dHRyKQotICAgICAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9y
VHlwZUFuZEF0dHJpYnV0ZShibHVyRXZlbnQsIGF0dHIpOworICAgICAgICBkb2N1bWVudCgpLT5z
ZXRXaW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVz
KCkuYmx1ckV2ZW50LCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25mb2N1
c0F0dHIpCi0gICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0lubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlQW5kQXR0cmlidXRlKGZvY3VzRXZlbnQsIGF0dHIpOworICAgICAgICBkb2N1bWVudCgp
LT5zZXRXaW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5h
bWVzKCkuZm9jdXNFdmVudCwgYXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
cmVzaXplQXR0cikKLSAgICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93SW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUocmVzaXplRXZlbnQsIGF0dHIpOworICAgICAgICBkb2N1
bWVudCgpLT5zZXRXaW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShl
dmVudE5hbWVzKCkucmVzaXplRXZlbnQsIGF0dHIpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBvbnNjcm9sbEF0dHIpCi0gICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0lubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKHNjcm9sbEV2ZW50LCBhdHRyKTsKKyAgICAg
ICAgZG9jdW1lbnQoKS0+c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRy
aWJ1dGUoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50LCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gb25zdG9yYWdlQXR0cikgewogICAgICAgICAvLyBUaGUgSFRNTDUgc3BlYyBj
dXJyZW50bHkgc3BlY2lmaWVzIHRoYXQgc3RvcmFnZSBldmVudHMgYXJlIGZpcmVkIG9ubHkgYXQg
dGhlIGJvZHkgZWxlbWVudCBvZgogICAgICAgICAvLyBhbiBIVE1MRG9jdW1lbnQsIHdoaWNoIGlz
IHdoeSB0aGUgb25zdG9yYWdlIGF0dHJpYnV0ZSBkaWZmZXJzIGZyb20gdGhlIG9uZXMgYmVmb3Jl
IGl0LgogICAgICAgICAvLyBUaGUgc3BlYyBtaWdodCBjaGFuZ2Ugb24gdGhpcywgYW5kIHRoZW4g
c28gc2hvdWxkIHdlIQotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0
dHJpYnV0ZShzdG9yYWdlRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBhdHRyKTsK
ICAgICB9IGVsc2UKICAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODA2
NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDcgKzM1LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3Bh
Y2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEhUTUxCdXR0b25F
bGVtZW50OjpIVE1MQnV0dG9uRWxlbWVudChEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQq
IGZvcm0pCkBAIC04OCwxNiArODcsMTYgQEAgdm9pZCBIVE1MQnV0dG9uRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaQogICAgICAgICAvLyBEb24ndCBtYXAgJ2FsaWduJyBhdHRyaWJ1dGUuICBUaGlz
IG1hdGNoZXMgd2hhdCBGaXJlZm94IGFuZCBJRSBkbywgYnV0IG5vdCBPcGVyYS4KICAgICAgICAg
Ly8gU2VlIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDcxCiAgICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25mb2N1c0F0dHIpIHsKLSAgICAgICAgc2V0SW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZm9jdXNFdmVudCwgYXR0cik7Cisg
ICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFt
ZXMoKS5mb2N1c0V2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBv
bmJsdXJBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0
cmlidXRlKGJsdXJFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQsIGF0dHIpOwogICAgIH0g
ZWxzZQogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKIH0KIAogdm9pZCBIVE1MQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCogZXZ0KQogewotICAgIGlmIChldnQtPnR5cGUoKSA9PSBET01BY3RpdmF0ZUV2ZW50
ICYmICFkaXNhYmxlZCgpKSB7CisgICAgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5E
T01BY3RpdmF0ZUV2ZW50ICYmICFkaXNhYmxlZCgpKSB7CiAgICAgICAgIGlmIChmb3JtKCkgJiYg
bV90eXBlID09IFNVQk1JVCkgewogICAgICAgICAgICAgbV9hY3RpdmVTdWJtaXQgPSB0cnVlOwog
ICAgICAgICAgICAgZm9ybSgpLT5wcmVwYXJlU3VibWl0KGV2dCk7CkBAIC0xMDgsMTIgKzEwNywx
MiBAQCB2b2lkIEhUTUxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kCiAgICAgfQogCiAg
ICAgaWYgKGV2dC0+aXNLZXlib2FyZEV2ZW50KCkpIHsKLSAgICAgICAgaWYgKGV2dC0+dHlwZSgp
ID09IGtleWRvd25FdmVudCAmJiBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0KS0+a2V5
SWRlbnRpZmllcigpID09ICJVKzAwMjAiKSB7CisgICAgICAgIGlmIChldnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihl
dnQpLT5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAyMCIpIHsKICAgICAgICAgICAgIHNldEFjdGl2
ZSh0cnVlLCB0cnVlKTsKICAgICAgICAgICAgIC8vIE5vIHNldERlZmF1bHRIYW5kbGVkKCkgLSBJ
RSBkaXNwYXRjaGVzIGEga2V5cHJlc3MgaW4gdGhpcyBjYXNlLgogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChldnQtPnR5cGUoKSA9PSBrZXlwcmVzc0V2ZW50KSB7
CisgICAgICAgIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkg
ewogICAgICAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0KS0+
Y2hhckNvZGUoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgJ1xyJzoKICAgICAgICAgICAgICAg
ICAgICAgZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhldnQpOwpAQCAtMTI3LDcgKzEyNiw3IEBAIHZv
aWQgSFRNTEJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmQKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGV2dC0+dHlw
ZSgpID09IGtleXVwRXZlbnQgJiYgc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2dCktPmtl
eUlkZW50aWZpZXIoKSA9PSAiVSswMDIwIikgeworICAgICAgICBpZiAoZXZ0LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmtleXVwRXZlbnQgJiYgc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2
dCktPmtleUlkZW50aWZpZXIoKSA9PSAiVSswMDIwIikgewogICAgICAgICAgICAgaWYgKGFjdGl2
ZSgpKQogICAgICAgICAgICAgICAgIGRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soZXZ0KTsKICAgICAg
ICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAko
cmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw3ICs0Niw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcg
bmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiB1c2lu
ZyBzdGQ6Om1pbjsKQEAgLTE1OCw3NSArMTU3LDc1IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE0KICAgICB9CiAvLyBzdGFuZGFyZCBldmVudHMKICAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gb25jbGlja0F0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoY2xpY2tFdmVudCwgYXR0cik7CisgICAgICAgIHNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5jbGlj
a0V2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmNvbnRleHRt
ZW51QXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJp
YnV0ZShjb250ZXh0bWVudUV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmNvbnRleHRtZW51RXZlbnQsIGF0
dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZGJsY2xpY2tBdHRyKSB7Ci0g
ICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGRibGNsaWNr
RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0
dHJpYnV0ZShldmVudE5hbWVzKCkuZGJsY2xpY2tFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gb25tb3VzZWRvd25BdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKG1vdXNlZG93bkV2ZW50LCBhdHRyKTsKKyAg
ICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1l
cygpLm1vdXNlZG93bkV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBvbm1vdXNlbW92ZUF0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5
cGVBbmRBdHRyaWJ1dGUobW91c2Vtb3ZlRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZl
bnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ubW91c2VvdXRBdHRy
KSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKG1v
dXNlb3V0RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCwgYXR0cik7CiAgICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25tb3VzZW92ZXJBdHRyKSB7Ci0gICAgICAgIHNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKG1vdXNlb3ZlckV2ZW50LCBhdHRy
KTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZl
bnROYW1lcygpLm1vdXNlb3ZlckV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBvbm1vdXNldXBBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlQW5kQXR0cmlidXRlKG1vdXNldXBFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZl
bnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ubW91c2V3aGVlbEF0
dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUo
bW91c2V3aGVlbEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCwgYXR0cik7CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25mb2N1c0F0dHIpIHsKLSAgICAgICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZm9jdXNFdmVudCwgYXR0cik7
CisgICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50
TmFtZXMoKS5mb2N1c0V2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBvbmJsdXJBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5k
QXR0cmlidXRlKGJsdXJFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQsIGF0dHIpOwogICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ua2V5ZG93bkF0dHIpIHsKLSAgICAgICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoa2V5ZG93bkV2ZW50LCBhdHRy
KTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZl
bnROYW1lcygpLmtleWRvd25FdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gb25rZXlwcmVzc0F0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGVBbmRBdHRyaWJ1dGUoa2V5cHJlc3NFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2
ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmtleXVwQXR0cikg
ewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShrZXl1
cEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRB
dHRyaWJ1dGUoZXZlbnROYW1lcygpLmtleXVwRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IG9uc2Nyb2xsQXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShzY3JvbGxFdmVudCwgYXR0cik7CisgICAgICAgIHNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5zY3Jv
bGxFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25iZWZvcmVj
dXRBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmli
dXRlKGJlZm9yZWN1dEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmJlZm9yZWN1dEV2ZW50LCBhdHRyKTsK
ICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmN1dEF0dHIpIHsKLSAgICAgICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoY3V0RXZlbnQsIGF0dHIpOwor
ICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5h
bWVzKCkuY3V0RXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
YmVmb3JlY29weUF0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVB
bmRBdHRyaWJ1dGUoYmVmb3JlY29weUV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmJlZm9yZWNvcHlFdmVu
dCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25jb3B5QXR0cikgewot
ICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShjb3B5RXZl
bnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJp
YnV0ZShldmVudE5hbWVzKCkuY29weUV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBvbmJlZm9yZXBhc3RlQXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShiZWZvcmVwYXN0ZUV2ZW50LCBhdHRyKTsKKyAgICAg
ICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygp
LmJlZm9yZXBhc3RlRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IG9ucGFzdGVBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5k
QXR0cmlidXRlKHBhc3RlRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkucGFzdGVFdmVudCwgYXR0cik7CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25kcmFnZW50ZXJBdHRyKSB7Ci0gICAgICAg
IHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGRyYWdlbnRlckV2ZW50
LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1
dGUoZXZlbnROYW1lcygpLmRyYWdlbnRlckV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBvbmRyYWdvdmVyQXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShkcmFnb3ZlckV2ZW50LCBhdHRyKTsKKyAgICAgICAg
c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmRy
YWdvdmVyRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZHJh
Z2xlYXZlQXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0
dHJpYnV0ZShkcmFnbGVhdmVFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5kcmFnbGVhdmVFdmVudCwgYXR0
cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25kcm9wQXR0cikgewotICAgICAg
ICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShkcm9wRXZlbnQsIGF0
dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShl
dmVudE5hbWVzKCkuZHJvcEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBvbmRyYWdzdGFydEF0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGVBbmRBdHRyaWJ1dGUoZHJhZ3N0YXJ0RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxp
bmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuZHJhZ3N0YXJ0
RXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZHJhZ0F0dHIp
IHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZHJh
Z0V2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRB
dHRyaWJ1dGUoZXZlbnROYW1lcygpLmRyYWdFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gb25kcmFnZW5kQXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShkcmFnZW5kRXZlbnQsIGF0dHIpOworICAgICAgICBz
ZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuZHJh
Z2VuZEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnNlbGVj
dHN0YXJ0QXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0
dHJpYnV0ZShzZWxlY3RzdGFydEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLnNlbGVjdHN0YXJ0RXZlbnQs
IGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uc3VibWl0QXR0cikgewot
ICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShzdWJtaXRF
dmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0
cmlidXRlKGV2ZW50TmFtZXMoKS5zdWJtaXRFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gb25lcnJvckF0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXJyb3JFdmVudCwgYXR0cik7CisgICAgICAgIHNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5lcnJvckV2
ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbndlYmtpdGFuaW1h
dGlvbnN0YXJ0QXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFu
ZEF0dHJpYnV0ZSh3ZWJraXRBbmltYXRpb25TdGFydEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLndlYmtp
dEFuaW1hdGlvblN0YXJ0RXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IG9ud2Via2l0YW5pbWF0aW9uaXRlcmF0aW9uQXR0cikgewotICAgICAgICBzZXRJbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZSh3ZWJraXRBbmltYXRpb25JdGVyYXRpb25F
dmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0
cmlidXRlKGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVudCwgYXR0cik7
CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb253ZWJraXRhbmltYXRpb25lbmRBdHRy
KSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKHdl
YmtpdEFuaW1hdGlvbkVuZEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkVuZEV2
ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbndlYmtpdHRyYW5z
aXRpb25lbmRBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5k
QXR0cmlidXRlKHdlYmtpdFRyYW5zaXRpb25FbmRFdmVudCwgYXR0cik7CisgICAgICAgIHNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS53ZWJraXRU
cmFuc2l0aW9uRW5kRXZlbnQsIGF0dHIpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5
LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1l
czsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmKQpAQCAtMTYxLDcgKzE2MCw3IEBAIHZvaWQg
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0TmFtZShjb24KIAogdm9pZCBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpvbkNoYW5nZSgpCiB7Ci0gICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoY2hhbmdl
RXZlbnQsIHRydWUsIGZhbHNlKTsKKyAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVz
KCkuY2hhbmdlRXZlbnQsIHRydWUsIGZhbHNlKTsKIH0KIAogYm9vbCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpkaXNhYmxlZCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAko
cmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVz
aW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAog
c3RhdGljIGNvbnN0IGNoYXIgaGV4RGlnaXRzWzE3XSA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKQEAg
LTEyMyw3ICsxMjIsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVu
CiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqIGV2ZW50LCBi
b29sIHVzZUNhcHR1cmUpCiB7CiAgICAgRXZlbnRUYXJnZXROb2RlKiB0YXJnZXROb2RlID0gZXZl
bnQtPnRhcmdldCgpLT50b05vZGUoKTsKLSAgICBpZiAoIXVzZUNhcHR1cmUgJiYgdGFyZ2V0Tm9k
ZSAmJiB0YXJnZXROb2RlICE9IHRoaXMgJiYgKGV2ZW50LT50eXBlKCkgPT0gc3VibWl0RXZlbnQg
fHwgZXZlbnQtPnR5cGUoKSA9PSByZXNldEV2ZW50KSkgeworICAgIGlmICghdXNlQ2FwdHVyZSAm
JiB0YXJnZXROb2RlICYmIHRhcmdldE5vZGUgIT0gdGhpcyAmJiAoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkuc3VibWl0RXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
cmVzZXRFdmVudCkpIHsKICAgICAgICAgZXZlbnQtPnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMzYzLDcgKzM2Miw3IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50
OjpwcmVwYXJlU3VibWl0KEV2ZW4KICAgICBtX2luc3VibWl0ID0gdHJ1ZTsKICAgICBtX2RvaW5n
c3VibWl0ID0gZmFsc2U7CiAKLSAgICBpZiAoZGlzcGF0Y2hFdmVudEZvclR5cGUoc3VibWl0RXZl
bnQsIHRydWUsIHRydWUpICYmICFtX2RvaW5nc3VibWl0KQorICAgIGlmIChkaXNwYXRjaEV2ZW50
Rm9yVHlwZShldmVudE5hbWVzKCkuc3VibWl0RXZlbnQsIHRydWUsIHRydWUpICYmICFtX2RvaW5n
c3VibWl0KQogICAgICAgICBtX2RvaW5nc3VibWl0ID0gdHJ1ZTsKIAogICAgIG1faW5zdWJtaXQg
PSBmYWxzZTsKQEAgLTUxOCw3ICs1MTcsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVzZXQo
KQogCiAgICAgLy8gIyMjIERPTTIgbGFiZWxzIHRoaXMgZXZlbnQgYXMgbm90IGNhbmNlbGFibGUs
IGhvd2V2ZXIKICAgICAvLyBjb21tb24gYnJvd3NlcnMoIHNpY2shICkgYWxsb3cgaXQgYmUgY2Fu
Y2VsbGVkLgotICAgIGlmICggIWRpc3BhdGNoRXZlbnRGb3JUeXBlKHJlc2V0RXZlbnQsdHJ1ZSwg
dHJ1ZSkgKSB7CisgICAgaWYgKCAhZGlzcGF0Y2hFdmVudEZvclR5cGUoZXZlbnROYW1lcygpLnJl
c2V0RXZlbnQsdHJ1ZSwgdHJ1ZSkgKSB7CiAgICAgICAgIG1faW5yZXNldCA9IGZhbHNlOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtNTU1LDkgKzU1NCw5IEBAIHZvaWQgSFRNTEZvcm1FbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnUKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZG9jdW1l
bnQoKS0+dW5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlzKTsKICAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnN1Ym1pdEF0dHIpCi0gICAgICAgIHNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKHN1Ym1pdEV2ZW50LCBhdHRyKTsK
KyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnRO
YW1lcygpLnN1Ym1pdEV2ZW50LCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
b25yZXNldEF0dHIpCi0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0
cmlidXRlKHJlc2V0RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkucmVzZXRFdmVudCwgYXR0cik7CiAgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7CiAgICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmV3TmFtZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgICAgIGlmIChpbkRvY3VtZW50
KCkgJiYgZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TEZyYW1lRWxlbWVudEJhc2UuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpIVE1MRnJh
bWVFbGVtZW50QmFzZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9j
KQpAQCAtMTQxLDEwICsxNDAsMTAgQEAgdm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6cGFyc2VN
YXBwZWRBdAogICAgICAgICBpZiAoY29udGVudEZyYW1lKCkpCiAgICAgICAgICAgICBjb250ZW50
RnJhbWUoKS0+c2V0SW5WaWV3U291cmNlTW9kZSh2aWV3U291cmNlTW9kZSgpKTsKICAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmxvYWRBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGxvYWRFdmVudCwgYXR0cik7CisgICAgICAg
IHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5s
b2FkRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uYmVmb3Jl
dW5sb2FkQXR0cikgewogICAgICAgICAvLyBGSVhNRTogc2hvdWxkIDxmcmFtZT4gZWxlbWVudHMg
aGF2ZSBiZWZvcmV1bmxvYWQgaGFuZGxlcnM/Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlQW5kQXR0cmlidXRlKGJlZm9yZXVubG9hZEV2ZW50LCBhdHRyKTsKKyAgICAgICAg
c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmJl
Zm9yZXVubG9hZEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UKICAgICAgICAgSFRNTEZyYW1lT3du
ZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTEZyYW1lU2V0RWxlbWVudC5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9odG1s
L0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBIVE1MRnJhbWVTZXRFbGVtZW50OjpIVE1MRnJh
bWVTZXRFbGVtZW50KERvY3VtZW50ICpkb2MpCkBAIC0xMjcsMTEgKzEyNiwxMSBAQCB2b2lkIEhU
TUxGcmFtZVNldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0CiAgICAgICAgICAgICBtX2JvcmRlckNv
bG9yU2V0ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IG9ubG9hZEF0dHIpIHsKLSAgICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUobG9hZEV2ZW50LCBhdHRyKTsKKyAgICAgICAgZG9j
dW1lbnQoKS0+c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUo
ZXZlbnROYW1lcygpLmxvYWRFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gb25iZWZvcmV1bmxvYWRBdHRyKSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRv
d0lubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGJlZm9yZXVubG9hZEV2ZW50
LCBhdHRyKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmJlZm9yZXVubG9hZEV2ZW50LCBhdHRy
KTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnVubG9hZEF0dHIpIHsKLSAgICAg
ICAgZG9jdW1lbnQoKS0+c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRy
aWJ1dGUodW5sb2FkRXZlbnQsIGF0dHIpOworICAgICAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dJ
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkudW5sb2Fk
RXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZQogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKIAogSFRNTEltYWdlRWxlbWVudDo6SFRNTEltYWdlRWxlbWVudChE
b2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGYpCkBAIC0xMjIsOSArMTIxLDkgQEAgdm9p
ZCBIVE1MSW1hZ2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogICAgIH0gZWxzZSBpZiAoYXR0
ck5hbWUgPT0gaXNtYXBBdHRyKQogICAgICAgICBpc21hcCA9IHRydWU7CiAgICAgZWxzZSBpZiAo
YXR0ck5hbWUgPT0gb25hYm9ydEF0dHIpCi0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlQW5kQXR0cmlidXRlKGFib3J0RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuYWJvcnRFdmVudCwg
YXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gb25sb2FkQXR0cikKLSAgICAgICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUobG9hZEV2ZW50LCBhdHRyKTsK
KyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnRO
YW1lcygpLmxvYWRFdmVudCwgYXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gY29tcG9z
aXRlQXR0cikgewogICAgICAgICBpZiAoIXBhcnNlQ29tcG9zaXRlT3BlcmF0b3IoYXR0ci0+dmFs
dWUoKSwgbV9jb21wb3NpdGVPcGVyYXRvcikpCiAgICAgICAgICAgICBtX2NvbXBvc2l0ZU9wZXJh
dG9yID0gQ29tcG9zaXRlU291cmNlT3ZlcjsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VM
b2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3Bw
CShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0KIEhUTUxJbWFnZUxvYWRlcjo6SFRNTEltYWdl
TG9hZGVyKEVsZW1lbnQqIG5vZGUpCiAgICAgOiBJbWFnZUxvYWRlcihub2RlKQogewpAQCAtNDYs
NyArNDQsNyBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6ZGlzcGF0Y2hMb2FkRXZlbnQoCiB7CiAg
ICAgaWYgKCFoYXZlRmlyZWRMb2FkRXZlbnQoKSAmJiBpbWFnZSgpKSB7CiAgICAgICAgIHNldEhh
dmVGaXJlZExvYWRFdmVudCh0cnVlKTsKLSAgICAgICAgZWxlbWVudCgpLT5kaXNwYXRjaEV2ZW50
Rm9yVHlwZShpbWFnZSgpLT5lcnJvck9jY3VycmVkKCkgPyBlcnJvckV2ZW50IDogbG9hZEV2ZW50
LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBlbGVtZW50KCktPmRpc3BhdGNoRXZlbnRGb3JUeXBl
KGltYWdlKCktPmVycm9yT2NjdXJyZWQoKSA/IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50IDogZXZl
bnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKICAgICB9CiB9CiAKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw2IEBAIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNw
YWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBjb25zdCBpbnQg
bWF4U2F2ZWRSZXN1bHRzID0gMjU2OwpAQCAtNjY4LDIwICs2NjcsMjAgQEAgdm9pZCBIVE1MSW5w
dXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogICAgICAgICBpZiAocmVzcGVjdEhlaWdodEFu
ZFdpZHRoQXR0cnMoKSkKICAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NQcm9wZXJ0
eUhlaWdodCwgYXR0ci0+dmFsdWUoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
b25mb2N1c0F0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRB
dHRyaWJ1dGUoZm9jdXNFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50LCBhdHRyKTsKICAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmJsdXJBdHRyKSB7Ci0gICAgICAgIHNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGJsdXJFdmVudCwgYXR0cik7Cisg
ICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFt
ZXMoKS5ibHVyRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
c2VsZWN0QXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0
dHJpYnV0ZShzZWxlY3RFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudCwgYXR0cik7CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25jaGFuZ2VBdHRyKSB7Ci0gICAgICAgIHNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGNoYW5nZUV2ZW50LCBhdHRy
KTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZl
bnROYW1lcygpLmNoYW5nZUV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBvbmlucHV0QXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZUFuZEF0dHJpYnV0ZShpbnB1dEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmlucHV0RXZlbnQsIGF0dHIp
OwogICAgIH0KICAgICAvLyBTZWFyY2ggZmllbGQgYW5kIHNsaWRlciBhdHRyaWJ1dGVzIGFsbCBq
dXN0IGNhdXNlIHVwZGF0ZUZyb21FbGVtZW50IHRvIGJlIGNhbGxlZCB0aHJvdWdoIHN0eWxlCiAg
ICAgLy8gcmVjYWxjaW5nLgogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnNlYXJjaEF0
dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUo
c2VhcmNoRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuc2VhcmNoRXZlbnQsIGF0dHIpOwogICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IHJlc3VsdHNBdHRyKSB7CiAgICAgICAgIGludCBvbGRSZXN1
bHRzID0gbV9tYXhSZXN1bHRzOwogICAgICAgICBtX21heFJlc3VsdHMgPSAhYXR0ci0+aXNOdWxs
KCkgPyBtaW4oYXR0ci0+dmFsdWUoKS50b0ludCgpLCBtYXhTYXZlZFJlc3VsdHMpIDogLTE7CkBA
IC0xMDU4LDcgKzEwNTcsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRnJvbVJl
bmRlCiAgICAgc2V0VmFsdWVNYXRjaGVzUmVuZGVyZXIoKTsKIAogICAgIC8vIEZpcmUgdGhlICJp
bnB1dCIgRE9NIGV2ZW50LgotICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGlucHV0RXZlbnQsIHRy
dWUsIGZhbHNlKTsKKyAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVzKCkuaW5wdXRF
dmVudCwgdHJ1ZSwgZmFsc2UpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEZpbGVM
aXN0RnJvbVJlbmRlcmVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykKQEAgLTEwOTksNyAr
MTA5OCw3IEBAIHZvaWQqIEhUTUxJbnB1dEVsZW1lbnQ6OnByZURpc3BhdGNoRXZlbnQKICAgICAv
LyBUaGlzIHJlc3VsdCBnaXZlcyB1cyBlbm91Z2ggaW5mbyB0byBwZXJmb3JtIHRoZSAidW5kbyIg
aW4gcG9zdERpc3BhdGNoIG9mIHRoZSBhY3Rpb24gd2UgdGFrZSBoZXJlLgogICAgIHZvaWQqIHJl
c3VsdCA9IDA7IAogICAgIGlmICgoaW5wdXRUeXBlKCkgPT0gQ0hFQ0tCT1ggfHwgaW5wdXRUeXBl
KCkgPT0gUkFESU8pICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkKLSAgICAgICAgICAgICYmIGV2dC0+
dHlwZSgpID09IGNsaWNrRXZlbnQgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1
dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICAgICAgICAgICYmIGV2dC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpLT5i
dXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGlmIChpbnB1dFR5cGUoKSA9PSBDSEVD
S0JPWCkgewogICAgICAgICAgICAgLy8gQXMgYSB3YXkgdG8gc3RvcmUgdGhlIHN0YXRlLCB3ZSBy
ZXR1cm4gMCBpZiB3ZSB3ZXJlIHVuY2hlY2tlZCwgMSBpZiB3ZSB3ZXJlIGNoZWNrZWQsIGFuZCAy
IGZvcgogICAgICAgICAgICAgLy8gaW5kZXRlcm1pbmF0ZS4KQEAgLTExMzcsNyArMTEzNiw3IEBA
IHZvaWQqIEhUTUxJbnB1dEVsZW1lbnQ6OnByZURpc3BhdGNoRXZlbnQKIHZvaWQgSFRNTElucHV0
RWxlbWVudDo6cG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyKEV2ZW50ICpldnQsIHZvaWQqIGRhdGEp
CiB7CiAgICAgaWYgKChpbnB1dFR5cGUoKSA9PSBDSEVDS0JPWCB8fCBpbnB1dFR5cGUoKSA9PSBS
QURJTykgJiYgZXZ0LT5pc01vdXNlRXZlbnQoKQotICAgICAgICAgICAgJiYgZXZ0LT50eXBlKCkg
PT0gY2xpY2tFdmVudCAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KS0+YnV0dG9uKCkg
PT0gTGVmdEJ1dHRvbikgeworICAgICAgICAgICAgJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmNsaWNrRXZlbnQgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1dHRvbigp
ID09IExlZnRCdXR0b24pIHsKICAgICAgICAgaWYgKGlucHV0VHlwZSgpID09IENIRUNLQk9YKSB7
CiAgICAgICAgICAgICAvLyBSZXZlcnNlIHRoZSBjaGVja2luZyB3ZSBkaWQgaW4gcHJlRGlzcGF0
Y2guCiAgICAgICAgICAgICBpZiAoZXZ0LT5kZWZhdWx0UHJldmVudGVkKCkgfHwgZXZ0LT5kZWZh
dWx0SGFuZGxlZCgpKSB7CkBAIC0xMTcyLDEwICsxMTcxLDEwIEBAIHZvaWQgSFRNTElucHV0RWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGwKIHsKICAgICBib29sIGNsaWNrRGVmYXVsdEZvcm1CdXR0
b24gPSBmYWxzZTsKIAotICAgIGlmIChpc1RleHRGaWVsZCgpICYmIGV2dC0+dHlwZSgpID09IHRl
eHRJbnB1dEV2ZW50ICYmIGV2dC0+aXNUZXh0RXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxUZXh0RXZl
bnQqPihldnQpLT5kYXRhKCkgPT0gIlxuIikKKyAgICBpZiAoaXNUZXh0RmllbGQoKSAmJiBldnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkudGV4dElucHV0RXZlbnQgJiYgZXZ0LT5pc1RleHRFdmVu
dCgpICYmIHN0YXRpY19jYXN0PFRleHRFdmVudCo+KGV2dCktPmRhdGEoKSA9PSAiXG4iKQogICAg
ICAgICBjbGlja0RlZmF1bHRGb3JtQnV0dG9uID0gdHJ1ZTsKIAotICAgIGlmIChpbnB1dFR5cGUo
KSA9PSBJTUFHRSAmJiBldnQtPmlzTW91c2VFdmVudCgpICYmIGV2dC0+dHlwZSgpID09IGNsaWNr
RXZlbnQpIHsKKyAgICBpZiAoaW5wdXRUeXBlKCkgPT0gSU1BR0UgJiYgZXZ0LT5pc01vdXNlRXZl
bnQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewogICAgICAg
ICAvLyByZWNvcmQgdGhlIG1vdXNlIHBvc2l0aW9uIGZvciB3aGVuIHdlIGdldCB0aGUgRE9NQWN0
aXZhdGUgZXZlbnQKICAgICAgICAgTW91c2VFdmVudCogbWUgPSBzdGF0aWNfY2FzdDxNb3VzZUV2
ZW50Kj4oZXZ0KTsKICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGp1c3QgY2FsbCBvZmZzZXRY
KCkgYW5kIG9mZnNldFkoKSBvbiB0aGUgZXZlbnQsCkBAIC0xMTkyLDE0ICsxMTkxLDE0IEBAIHZv
aWQgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGwKICAgICAgICAgfQogICAgIH0K
IAotICAgIGlmIChpc1RleHRGaWVsZCgpICYmIGV2dC0+dHlwZSgpID09IGtleWRvd25FdmVudCAm
JiBldnQtPmlzS2V5Ym9hcmRFdmVudCgpICYmIGZvY3VzZWQoKSAmJiBkb2N1bWVudCgpLT5mcmFt
ZSgpCisgICAgaWYgKGlzVGV4dEZpZWxkKCkgJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmtleWRvd25FdmVudCAmJiBldnQtPmlzS2V5Ym9hcmRFdmVudCgpICYmIGZvY3VzZWQoKSAmJiBk
b2N1bWVudCgpLT5mcmFtZSgpCiAgICAgICAgICAgICAgICAgJiYgZG9jdW1lbnQoKS0+ZnJhbWUo
KS0+ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KHRoaXMsIHN0YXRpY19jYXN0PEtleWJvYXJk
RXZlbnQqPihldnQpKSkgewogICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoaW5wdXRUeXBlKCkgPT0gUkFESU8gJiYgZXZ0
LT5pc01vdXNlRXZlbnQoKQotICAgICAgICAgICAgJiYgZXZ0LT50eXBlKCkgPT0gY2xpY2tFdmVu
dCAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRv
bikgeworICAgICAgICAgICAgJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZl
bnQgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1dHRvbigpID09IExlZnRCdXR0
b24pIHsKICAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMTIxNSw3ICsxMjE0LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbAogICAgIC8vIGFjdHVhbGx5IHN1Ym1pdHRpbmcgdGhlIGZvcm0uIEZvciBy
ZXNldCBpbnB1dHMsIHRoZSBmb3JtIGlzIHJlc2V0LiBUaGVzZSBldmVudHMgYXJlIHNlbnQgd2hl
biB0aGUgdXNlciBjbGlja3MKICAgICAvLyBvbiB0aGUgZWxlbWVudCwgb3IgcHJlc3NlcyBlbnRl
ciB3aGlsZSBpdCBpcyB0aGUgYWN0aXZlIGVsZW1lbnQuIEphdmFTY3JpcHQgY29kZSB3aXNoaW5n
IHRvIGFjdGl2YXRlIHRoZSBlbGVtZW50CiAgICAgLy8gbXVzdCBkaXNwYXRjaCBhIERPTUFjdGl2
YXRlIGV2ZW50IC0gYSBjbGljayBldmVudCB3aWxsIG5vdCBkbyB0aGUgam9iLgotICAgIGlmIChl
dnQtPnR5cGUoKSA9PSBET01BY3RpdmF0ZUV2ZW50ICYmICFkaXNhYmxlZCgpKSB7CisgICAgaWYg
KGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ET01BY3RpdmF0ZUV2ZW50ICYmICFkaXNhYmxl
ZCgpKSB7CiAgICAgICAgIGlmIChpbnB1dFR5cGUoKSA9PSBJTUFHRSB8fCBpbnB1dFR5cGUoKSA9
PSBTVUJNSVQgfHwgaW5wdXRUeXBlKCkgPT0gUkVTRVQpIHsKICAgICAgICAgICAgIGlmICghZm9y
bSgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTEyMzksNyArMTIzOCw3IEBAIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGwKIAogICAgIC8vIFVzZSBrZXkgcHJl
c3MgZXZlbnQgaGVyZSBzaW5jZSBzZW5kaW5nIHNpbXVsYXRlZCBtb3VzZSBldmVudHMKICAgICAv
LyBvbiBrZXkgZG93biBibG9ja3MgdGhlIHByb3BlciBzZW5kaW5nIG9mIHRoZSBrZXkgcHJlc3Mg
ZXZlbnQuCi0gICAgaWYgKGV2dC0+dHlwZSgpID09IGtleXByZXNzRXZlbnQgJiYgZXZ0LT5pc0tl
eWJvYXJkRXZlbnQoKSkgeworICAgIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5
cHJlc3NFdmVudCAmJiBldnQtPmlzS2V5Ym9hcmRFdmVudCgpKSB7CiAgICAgICAgIGJvb2wgY2xp
Y2tFbGVtZW50ID0gZmFsc2U7CiAKICAgICAgICAgaW50IGNoYXJDb2RlID0gc3RhdGljX2Nhc3Q8
S2V5Ym9hcmRFdmVudCo+KGV2dCktPmNoYXJDb2RlKCk7CkBAIC0xMjkxLDcgKzEyOTAsNyBAQCB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBpZiAoZXZ0LT50eXBlKCkgPT0ga2V5ZG93bkV2ZW50ICYmIGV2dC0+aXNLZXlib2Fy
ZEV2ZW50KCkpIHsKKyAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25F
dmVudCAmJiBldnQtPmlzS2V5Ym9hcmRFdmVudCgpKSB7CiAgICAgICAgIFN0cmluZyBrZXkgPSBz
dGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0KS0+a2V5SWRlbnRpZmllcigpOwogCiAgICAg
ICAgIGlmIChrZXkgPT0gIlUrMDAyMCIpIHsKQEAgLTEzNDcsNyArMTM0Niw3IEBAIHZvaWQgSFRN
TElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGwKICAgICAgICAgfQogICAgIH0KIAotICAg
IGlmIChldnQtPnR5cGUoKSA9PSBrZXl1cEV2ZW50ICYmIGV2dC0+aXNLZXlib2FyZEV2ZW50KCkp
IHsKKyAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXVwRXZlbnQgJiYgZXZ0
LT5pc0tleWJvYXJkRXZlbnQoKSkgewogICAgICAgICBib29sIGNsaWNrRWxlbWVudCA9IGZhbHNl
OwogCiAgICAgICAgIFN0cmluZyBrZXkgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0
KS0+a2V5SWRlbnRpZmllcigpOwpAQCAtMTQyMiwxMiArMTQyMSwxMiBAQCB2b2lkIEhUTUxJbnB1
dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsCiAgICAgICAgIHRleHRFdmVudC0+c2V0VGV4dChj
b25zdHJhaW5WYWx1ZSh0ZXh0RXZlbnQtPnRleHQoKSwgbWF4TmV3TGVuKSk7CiAgICAgfQogCi0g
ICAgaWYgKGlzVGV4dEZpZWxkKCkgJiYgcmVuZGVyZXIoKSAmJiAoZXZ0LT5pc01vdXNlRXZlbnQo
KSB8fCBldnQtPmlzRHJhZ0V2ZW50KCkgfHwgZXZ0LT5pc1doZWVsRXZlbnQoKSB8fCBldnQtPnR5
cGUoKSA9PSBibHVyRXZlbnQgfHwgZXZ0LT50eXBlKCkgPT0gZm9jdXNFdmVudCkpCisgICAgaWYg
KGlzVGV4dEZpZWxkKCkgJiYgcmVuZGVyZXIoKSAmJiAoZXZ0LT5pc01vdXNlRXZlbnQoKSB8fCBl
dnQtPmlzRHJhZ0V2ZW50KCkgfHwgZXZ0LT5pc1doZWVsRXZlbnQoKSB8fCBldnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50IHx8IGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5m
b2N1c0V2ZW50KSkKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2wqPihyZW5k
ZXJlcigpKS0+Zm9yd2FyZEV2ZW50KGV2dCk7CiAKICAgICBpZiAoaW5wdXRUeXBlKCkgPT0gUkFO
R0UgJiYgcmVuZGVyZXIoKSkgewogICAgICAgICBSZW5kZXJTbGlkZXIqIHNsaWRlciA9IHN0YXRp
Y19jYXN0PFJlbmRlclNsaWRlcio+KHJlbmRlcmVyKCkpOwotICAgICAgICBpZiAoZXZ0LT5pc01v
dXNlRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBtb3VzZWRvd25FdmVudCAmJiBzdGF0aWNfY2Fz
dDxNb3VzZUV2ZW50Kj4oZXZ0KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgICAgICBp
ZiAoZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2Vkb3duRXZlbnQgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1dHRvbigpID09
IExlZnRCdXR0b24pIHsKICAgICAgICAgICAgIE1vdXNlRXZlbnQqIG1FdnQgPSBzdGF0aWNfY2Fz
dDxNb3VzZUV2ZW50Kj4oZXZ0KTsKICAgICAgICAgICAgIGlmICghc2xpZGVyLT5tb3VzZUV2ZW50
SXNJblRodW1iKG1FdnQpKSB7CiAgICAgICAgICAgICAgICAgSW50UG9pbnQgZXZlbnRPZmZzZXQo
bUV2dC0+b2Zmc2V0WCgpLCBtRXZ0LT5vZmZzZXRZKCkpOwpAQCAtMTYyNCw3ICsxNjIzLDcgQEAg
dm9pZCBIVE1MSW5wdXRFbGVtZW50OjpvblNlYXJjaCgpCiAgICAgQVNTRVJUKGlzU2VhcmNoRmll
bGQoKSk7CiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRl
eHRDb250cm9sKj4ocmVuZGVyZXIoKSktPnN0b3BTZWFyY2hFdmVudFRpbWVyKCk7Ci0gICAgZGlz
cGF0Y2hFdmVudEZvclR5cGUoc2VhcmNoRXZlbnQsIHRydWUsIGZhbHNlKTsKKyAgICBkaXNwYXRj
aEV2ZW50Rm9yVHlwZShldmVudE5hbWVzKCkuc2VhcmNoRXZlbnQsIHRydWUsIGZhbHNlKTsKIH0K
IAogU2VsZWN0aW9uIEhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvbigpIGNvbnN0CkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvaHRt
bC9IVE1MTGFiZWxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotdXNpbmcg
bmFtZXNwYWNlIEV2ZW50TmFtZXM7CiAKIEhUTUxMYWJlbEVsZW1lbnQ6OkhUTUxMYWJlbEVsZW1l
bnQoRG9jdW1lbnQgKmRvYykKICAgICA6IEhUTUxFbGVtZW50KGxhYmVsVGFnLCBkb2MpCkBAIC0x
MDMsNyArMTAyLDcgQEAgdm9pZCBIVE1MTGFiZWxFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbAog
ewogICAgIHN0YXRpYyBib29sIHByb2Nlc3NpbmdDbGljayA9IGZhbHNlOwogCi0gICAgaWYgKGV2
dC0+dHlwZSgpID09IGNsaWNrRXZlbnQgJiYgIXByb2Nlc3NpbmdDbGljaykgeworICAgIGlmIChl
dnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCAmJiAhcHJvY2Vzc2luZ0NsaWNr
KSB7CiAgICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gY29udHJvbCA9IGNvcnJlc3BvbmRpbmdD
b250cm9sKCk7CiAKICAgICAgICAgLy8gSWYgd2UgY2FuJ3QgZmluZCBhIGNvbnRyb2wgb3IgaWYg
dGhlIGNvbnRyb2wgcmVjZWl2ZWQgdGhlIGNsaWNrCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3Rk
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogSFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlh
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQpAQCAt
Mjg2LDcgKzI4NSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZChFeGNlcHRpb25Db2QK
ICAgICBpZiAobV9iZWd1bikgewogICAgICAgICBtX2JlZ3VuID0gZmFsc2U7CiAgICAgICAgIG1f
ZXJyb3IgPSBNZWRpYUVycm9yOjpjcmVhdGUoTWVkaWFFcnJvcjo6TUVESUFfRVJSX0FCT1JURUQp
OwotICAgICAgICBpbml0QW5kRGlzcGF0Y2hQcm9ncmVzc0V2ZW50KGFib3J0RXZlbnQpOworICAg
ICAgICBpbml0QW5kRGlzcGF0Y2hQcm9ncmVzc0V2ZW50KGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50
KTsKICAgICAgICAgaWYgKG1fbG9hZE5lc3RpbmdMZXZlbCA8IG1fdGVybWluYXRlTG9hZEJlbG93
TmVzdGluZ0xldmVsKQogICAgICAgICAgICAgZ290byBlbmQ7CiAgICAgfQpAQCAtMzEwLDcgKzMw
OSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZChFeGNlcHRpb25Db2QKICAgICAgICAg
ICAgIG1fcGxheWVyLT5zZWVrKDApOwogICAgICAgICB9CiAgICAgICAgIG1fY3VycmVudExvb3Ag
PSAwOwotICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShlbXB0aWVkRXZlbnQsIGZhbHNlLCB0
cnVlKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoZXZlbnROYW1lcygpLmVtcHRpZWRF
dmVudCwgZmFsc2UsIHRydWUpOwogICAgICAgICBpZiAobV9sb2FkTmVzdGluZ0xldmVsIDwgbV90
ZXJtaW5hdGVMb2FkQmVsb3dOZXN0aW5nTGV2ZWwpCiAgICAgICAgICAgICBnb3RvIGVuZDsKICAg
ICB9CkBAIC0zMzAsNyArMzI5LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpsb2FkKEV4Y2Vw
dGlvbkNvZAogICAgIAogICAgIC8vIDkKICAgICBtX2JlZ3VuID0gdHJ1ZTsgICAgICAgIAotICAg
IGRpc3BhdGNoUHJvZ3Jlc3NFdmVudChsb2Fkc3RhcnRFdmVudCwgZmFsc2UsIDAsIDApOworICAg
IGRpc3BhdGNoUHJvZ3Jlc3NFdmVudChldmVudE5hbWVzKCkubG9hZHN0YXJ0RXZlbnQsIGZhbHNl
LCAwLCAwKTsKICAgICBpZiAobV9sb2FkTmVzdGluZ0xldmVsIDwgbV90ZXJtaW5hdGVMb2FkQmVs
b3dOZXN0aW5nTGV2ZWwpCiAgICAgICAgIGdvdG8gZW5kOwogICAgIApAQCAtMzc2LDcgKzM3NSw3
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJOZXR3b3IKICAgICAgICAgbV9w
cm9ncmVzc0V2ZW50VGltZXIuc3RvcCgpOwogICAgICAgICBtX2J1ZmZlcmluZ1JhdGUgPSAwOwog
ICAgICAgICAKLSAgICAgICAgaW5pdEFuZERpc3BhdGNoUHJvZ3Jlc3NFdmVudChlcnJvckV2ZW50
KTsgCisgICAgICAgIGluaXRBbmREaXNwYXRjaFByb2dyZXNzRXZlbnQoZXZlbnROYW1lcygpLmVy
cm9yRXZlbnQpOyAKICAgICAgICAgaWYgKG1fbG9hZE5lc3RpbmdMZXZlbCA8IG1fdGVybWluYXRl
TG9hZEJlbG93TmVzdGluZ0xldmVsKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKQEAg
LTM4NSw3ICszODQsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyTmV0d29y
CiAgICAgICAgIGlmIChpc1ZpZGVvKCkpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MVmlk
ZW9FbGVtZW50Kj4odGhpcyktPnVwZGF0ZVBvc3RlckltYWdlKCk7CiAKLSAgICAgICAgZGlzcGF0
Y2hFdmVudEZvclR5cGUoZW1wdGllZEV2ZW50LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIGRpc3Bh
dGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5lbXB0aWVkRXZlbnQsIGZhbHNlLCB0cnVlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTM5NiwxMSArMzk1LDExIEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJOZXR3b3IKICAgICAgICAgbV9wbGF5ZXItPnNl
ZWsoZWZmZWN0aXZlU3RhcnQoKSk7CiAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTE9BREVEX01F
VEFEQVRBOwogICAgICAgICAKLSAgICAgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoZHVyYXRpb25j
aGFuZ2VFdmVudCwgZmFsc2UsIHRydWUpOworICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShl
dmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCwgZmFsc2UsIHRydWUpOwogICAgICAgICBp
ZiAobV9sb2FkTmVzdGluZ0xldmVsIDwgbV90ZXJtaW5hdGVMb2FkQmVsb3dOZXN0aW5nTGV2ZWwp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBkaXNwYXRjaEV2ZW50Rm9y
VHlwZShsb2FkZWRtZXRhZGF0YUV2ZW50LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIGRpc3BhdGNo
RXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5sb2FkZWRtZXRhZGF0YUV2ZW50LCBmYWxzZSwgdHJ1
ZSk7CiAgICAgICAgIGlmIChtX2xvYWROZXN0aW5nTGV2ZWwgPCBtX3Rlcm1pbmF0ZUxvYWRCZWxv
d05lc3RpbmdMZXZlbCkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00MjIsMTEgKzQy
MSwxMSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyTmV0d29yCiAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxSZW5kZXJWaWRlbyo+KHJlbmRlcmVyKCkpLT52aWRlb1NpemVDaGFu
Z2VkKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBl
KGxvYWRlZGZpcnN0ZnJhbWVFdmVudCwgZmFsc2UsIHRydWUpOworICAgICAgICBkaXNwYXRjaEV2
ZW50Rm9yVHlwZShldmVudE5hbWVzKCkubG9hZGVkZmlyc3RmcmFtZUV2ZW50LCBmYWxzZSwgdHJ1
ZSk7CiAgICAgICAgIGlmIChtX2xvYWROZXN0aW5nTGV2ZWwgPCBtX3Rlcm1pbmF0ZUxvYWRCZWxv
d05lc3RpbmdMZXZlbCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIGRp
c3BhdGNoRXZlbnRGb3JUeXBlKGNhbnNob3djdXJyZW50ZnJhbWVFdmVudCwgZmFsc2UsIHRydWUp
OworICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVzKCkuY2Fuc2hvd2N1cnJl
bnRmcmFtZUV2ZW50LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgIGlmIChtX2xvYWROZXN0aW5nTGV2
ZWwgPCBtX3Rlcm1pbmF0ZUxvYWRCZWxvd05lc3RpbmdMZXZlbCkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC00MzcsNyArNDM2LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRp
YVBsYXllck5ldHdvcgogICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IExPQURFRDsKICAgICAgICAg
bV9wcm9ncmVzc0V2ZW50VGltZXIuc3RvcCgpOwogICAgICAgICBtX2J1ZmZlcmluZ1JhdGUgPSAw
OwotICAgICAgICBpbml0QW5kRGlzcGF0Y2hQcm9ncmVzc0V2ZW50KGxvYWRFdmVudCk7IAorICAg
ICAgICBpbml0QW5kRGlzcGF0Y2hQcm9ncmVzc0V2ZW50KGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQp
OyAKICAgICB9CiB9CiAKQEAgLTQ2MywyNSArNDYyLDI1IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6c2V0UmVhZHlTdGF0ZShSZWEKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdGF0
ZSA9PSBEQVRBX1VOQVZBSUxBQkxFKSB7Ci0gICAgICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGRh
dGF1bmF2YWlsYWJsZUV2ZW50LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnRG
b3JUeXBlKGV2ZW50TmFtZXMoKS5kYXRhdW5hdmFpbGFibGVFdmVudCwgZmFsc2UsIHRydWUpOwog
ICAgICAgICBpZiAod2FzQWN0aXZlbHlQbGF5aW5nKSB7Ci0gICAgICAgICAgICBkaXNwYXRjaEV2
ZW50Rm9yVHlwZSh0aW1ldXBkYXRlRXZlbnQsIGZhbHNlLCB0cnVlKTsKLSAgICAgICAgICAgIGRp
c3BhdGNoRXZlbnRGb3JUeXBlKHdhaXRpbmdFdmVudCwgZmFsc2UsIHRydWUpOworICAgICAgICAg
ICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoZXZlbnROYW1lcygpLnRpbWV1cGRhdGVFdmVudCwgZmFs
c2UsIHRydWUpOworICAgICAgICAgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoZXZlbnROYW1lcygp
LndhaXRpbmdFdmVudCwgZmFsc2UsIHRydWUpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChz
dGF0ZSA9PSBDQU5fU0hPV19DVVJSRU5UX0ZSQU1FKSB7CiAgICAgICAgIGlmIChtX2xvYWRlZEZp
cnN0RnJhbWUpCi0gICAgICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShjYW5zaG93Y3VycmVu
dGZyYW1lRXZlbnQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIGRpc3BhdGNoRXZlbnRGb3JU
eXBlKGV2ZW50TmFtZXMoKS5jYW5zaG93Y3VycmVudGZyYW1lRXZlbnQsIGZhbHNlLCB0cnVlKTsK
ICAgICAgICAgaWYgKHdhc0FjdGl2ZWx5UGxheWluZykgewotICAgICAgICAgICAgZGlzcGF0Y2hF
dmVudEZvclR5cGUodGltZXVwZGF0ZUV2ZW50LCBmYWxzZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBk
aXNwYXRjaEV2ZW50Rm9yVHlwZSh3YWl0aW5nRXZlbnQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAg
ICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS50aW1ldXBkYXRlRXZlbnQsIGZh
bHNlLCB0cnVlKTsKKyAgICAgICAgICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMo
KS53YWl0aW5nRXZlbnQsIGZhbHNlLCB0cnVlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAo
c3RhdGUgPT0gQ0FOX1BMQVkpIHsKLSAgICAgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoY2FucGxh
eUV2ZW50LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50
TmFtZXMoKS5jYW5wbGF5RXZlbnQsIGZhbHNlLCB0cnVlKTsKICAgICB9IGVsc2UgaWYgKHN0YXRl
ID09IENBTl9QTEFZX1RIUk9VR0gpIHsKLSAgICAgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoY2Fu
cGxheXRocm91Z2hFdmVudCwgZmFsc2UsIHRydWUpOworICAgICAgICBkaXNwYXRjaEV2ZW50Rm9y
VHlwZShldmVudE5hbWVzKCkuY2FucGxheXRocm91Z2hFdmVudCwgZmFsc2UsIHRydWUpOwogICAg
ICAgICBpZiAobV9hdXRvcGxheWluZyAmJiBtX3BhdXNlZCAmJiBhdXRvcGxheSgpKSB7CiAgICAg
ICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOwotICAgICAgICAgICAgZGlzcGF0Y2hFdmVudEZvclR5
cGUocGxheUV2ZW50LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICBkaXNwYXRjaEV2ZW50Rm9y
VHlwZShldmVudE5hbWVzKCkucGxheUV2ZW50LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgdXBkYXRlUGxheVN0YXRlKCk7CkBAIC00OTksMTEgKzQ5OCwxMSBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OnByb2dyZXNzRXZlbnRUaW1lCiAgICAgaWYgKHByb2dyZXNzID09IG1f
cHJldmlvdXNQcm9ncmVzcykgewogICAgICAgICBpZiAodGltZWRlbHRhID4gMy4wICYmICFtX3Nl
bnRTdGFsbGVkRXZlbnQpIHsKICAgICAgICAgICAgIG1fYnVmZmVyaW5nUmF0ZSA9IDA7Ci0gICAg
ICAgICAgICBpbml0QW5kRGlzcGF0Y2hQcm9ncmVzc0V2ZW50KHN0YWxsZWRFdmVudCk7CisgICAg
ICAgICAgICBpbml0QW5kRGlzcGF0Y2hQcm9ncmVzc0V2ZW50KGV2ZW50TmFtZXMoKS5zdGFsbGVk
RXZlbnQpOwogICAgICAgICAgICAgbV9zZW50U3RhbGxlZEV2ZW50ID0gdHJ1ZTsKICAgICAgICAg
fQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGluaXRBbmREaXNwYXRjaFByb2dyZXNzRXZlbnQocHJv
Z3Jlc3NFdmVudCk7CisgICAgICAgIGluaXRBbmREaXNwYXRjaFByb2dyZXNzRXZlbnQoZXZlbnRO
YW1lcygpLnByb2dyZXNzRXZlbnQpOwogICAgICAgICBtX3ByZXZpb3VzUHJvZ3Jlc3MgPSBwcm9n
cmVzczsKICAgICAgICAgbV9wcmV2aW91c1Byb2dyZXNzVGltZSA9IHRpbWU7CiAgICAgICAgIG1f
c2VudFN0YWxsZWRFdmVudCA9IGZhbHNlOwpAQCAtNTQ5LDcgKzU0OCw3IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6c2VlayhmbG9hdCB0aW1lLCAKICAgICBtX3NlZWtpbmcgPSB0cnVlOwogICAg
IAogICAgIC8vIDkKLSAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZSh0aW1ldXBkYXRlRXZlbnQsIGZh
bHNlLCB0cnVlKTsKKyAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVzKCkudGltZXVw
ZGF0ZUV2ZW50LCBmYWxzZSwgdHJ1ZSk7CiAgICAgCiAgICAgLy8gMTAKICAgICAvLyBBcyBzb29u
IGFzIHRoZSB1c2VyIGFnZW50IGhhcyBlc3RhYmxpc2hlZCB3aGV0aGVyIG9yIG5vdCB0aGUgbWVk
aWEgZGF0YSBmb3IgdGhlIG5ldyBwbGF5YmFjayBwb3NpdGlvbiBpcyBhdmFpbGFibGUsIApAQCAt
NjA4LDcgKzYwNyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0RGVmYXVsdFBsYXliYWMK
ICAgICB9CiAgICAgaWYgKG1fZGVmYXVsdFBsYXliYWNrUmF0ZSAhPSByYXRlKSB7CiAgICAgICAg
IG1fZGVmYXVsdFBsYXliYWNrUmF0ZSA9IHJhdGU7Ci0gICAgICAgIGRpc3BhdGNoRXZlbnRBc3lu
YyhyYXRlY2hhbmdlRXZlbnQpOworICAgICAgICBkaXNwYXRjaEV2ZW50QXN5bmMoZXZlbnROYW1l
cygpLnJhdGVjaGFuZ2VFdmVudCk7CiAgICAgfQogfQogCkBAIC02MjUsNyArNjI0LDcgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRQbGF5YmFja1JhdGUoZgogICAgIH0KICAgICBpZiAobV9w
bGF5ZXIgJiYgbV9wbGF5ZXItPnJhdGUoKSAhPSByYXRlKSB7CiAgICAgICAgIG1fcGxheWVyLT5z
ZXRSYXRlKHJhdGUpOwotICAgICAgICBkaXNwYXRjaEV2ZW50QXN5bmMocmF0ZWNoYW5nZUV2ZW50
KTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudEFzeW5jKGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdlRXZl
bnQpOwogICAgIH0KIH0KIApAQCAtNjYyLDcgKzY2MSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6cGxheShFeGNlcHRpb25Db2QKICAgICAKICAgICBpZiAobV9wYXVzZWQpIHsKICAgICAgICAg
bV9wYXVzZWQgPSBmYWxzZTsKLSAgICAgICAgZGlzcGF0Y2hFdmVudEFzeW5jKHBsYXlFdmVudCk7
CisgICAgICAgIGRpc3BhdGNoRXZlbnRBc3luYyhldmVudE5hbWVzKCkucGxheUV2ZW50KTsKICAg
ICB9CiAKICAgICBtX2F1dG9wbGF5aW5nID0gZmFsc2U7CkBAIC02ODIsOCArNjgxLDggQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpwYXVzZShFeGNlcHRpb25DbwogCiAgICAgaWYgKCFtX3BhdXNl
ZCkgewogICAgICAgICBtX3BhdXNlZCA9IHRydWU7Ci0gICAgICAgIGRpc3BhdGNoRXZlbnRBc3lu
Yyh0aW1ldXBkYXRlRXZlbnQpOwotICAgICAgICBkaXNwYXRjaEV2ZW50QXN5bmMocGF1c2VFdmVu
dCk7CisgICAgICAgIGRpc3BhdGNoRXZlbnRBc3luYyhldmVudE5hbWVzKCkudGltZXVwZGF0ZUV2
ZW50KTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudEFzeW5jKGV2ZW50TmFtZXMoKS5wYXVzZUV2ZW50
KTsKICAgICB9CiAKICAgICBtX2F1dG9wbGF5aW5nID0gZmFsc2U7CkBAIC03ODcsNyArNzg2LDcg
QEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRWb2x1bWUoZmxvYXQgdgogICAgIGlmIChtX3Zv
bHVtZSAhPSB2b2wpIHsKICAgICAgICAgbV92b2x1bWUgPSB2b2w7CiAgICAgICAgIHVwZGF0ZVZv
bHVtZSgpOwotICAgICAgICBkaXNwYXRjaEV2ZW50QXN5bmModm9sdW1lY2hhbmdlRXZlbnQpOwor
ICAgICAgICBkaXNwYXRjaEV2ZW50QXN5bmMoZXZlbnROYW1lcygpLnZvbHVtZWNoYW5nZUV2ZW50
KTsKICAgICB9CiB9CiAKQEAgLTgwMSw3ICs4MDAsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OnNldE11dGVkKGJvb2wgbXV0CiAgICAgaWYgKG1fbXV0ZWQgIT0gbXV0ZWQpIHsKICAgICAgICAg
bV9tdXRlZCA9IG11dGVkOwogICAgICAgICB1cGRhdGVWb2x1bWUoKTsKLSAgICAgICAgZGlzcGF0
Y2hFdmVudEFzeW5jKHZvbHVtZWNoYW5nZUV2ZW50KTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudEFz
eW5jKGV2ZW50TmFtZXMoKS52b2x1bWVjaGFuZ2VFdmVudCk7CiAgICAgfQogfQogCkBAIC04OTAs
MTIgKzg4OSwxMiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyVGltZUNoCiAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAgIHNlZWsoZWZmZWN0aXZlTG9vcFN0YXJ0
KCksIGVjKTsKICAgICAgICAgbV9jdXJyZW50TG9vcCsrOwotICAgICAgICBkaXNwYXRjaEV2ZW50
Rm9yVHlwZSh0aW1ldXBkYXRlRXZlbnQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgZGlzcGF0Y2hF
dmVudEZvclR5cGUoZXZlbnROYW1lcygpLnRpbWV1cGRhdGVFdmVudCwgZmFsc2UsIHRydWUpOwog
ICAgIH0KICAgICAKICAgICBpZiAobV9jdXJyZW50TG9vcCA9PSBwbGF5Q291bnQoKSAtIDEgJiYg
Y3VycmVudFRpbWUoKSA+PSBlZmZlY3RpdmVFbmQoKSkgewotICAgICAgICBkaXNwYXRjaEV2ZW50
Rm9yVHlwZSh0aW1ldXBkYXRlRXZlbnQsIGZhbHNlLCB0cnVlKTsKLSAgICAgICAgZGlzcGF0Y2hF
dmVudEZvclR5cGUoZW5kZWRFdmVudCwgZmFsc2UsIHRydWUpOworICAgICAgICBkaXNwYXRjaEV2
ZW50Rm9yVHlwZShldmVudE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50LCBmYWxzZSwgdHJ1ZSk7Cisg
ICAgICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5lbmRlZEV2ZW50LCBmYWxz
ZSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgdXBkYXRlUGxheVN0YXRlKCk7CkBAIC0xMDE4LDExICsx
MDE3LDExIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZG9jdW1lbnRXaWxsQmVjb20KIAogICAg
ICAgICBtX2Vycm9yID0gTWVkaWFFcnJvcjo6Y3JlYXRlKE1lZGlhRXJyb3I6Ok1FRElBX0VSUl9B
Qk9SVEVEKTsKICAgICAgICAgbV9iZWd1biA9IGZhbHNlOwotICAgICAgICBpbml0QW5kRGlzcGF0
Y2hQcm9ncmVzc0V2ZW50KGFib3J0RXZlbnQpOworICAgICAgICBpbml0QW5kRGlzcGF0Y2hQcm9n
cmVzc0V2ZW50KGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KTsKICAgICAgICAgaWYgKG1fbmV0d29y
a1N0YXRlID49IExPQURJTkcpIHsKICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gRU1QVFk7
CiAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBEQVRBX1VOQVZBSUxBQkxFOwotICAgICAgICAg
ICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoZW1wdGllZEV2ZW50LCBmYWxzZSwgdHJ1ZSk7CisgICAg
ICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVzKCkuZW1wdGllZEV2ZW50LCBm
YWxzZSwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgbV9pbkFjdGl2ZURvY3VtZW50ID0g
ZmFsc2U7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDM4MDY0
KQorKysgV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNyArNDIsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFj
ZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogSFRNTE9iamVjdEVs
ZW1lbnQ6OkhUTUxPYmplY3RFbGVtZW50KERvY3VtZW50KiBkb2MsIGJvb2wgY3JlYXRlZEJ5UGFy
c2VyKSAKQEAgLTk0LDcgKzkzLDcgQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaQogICAgICAgICBpZiAocmVuZGVyZXIoKSkKICAgICAgICAgICBtX25lZWRXaWRnZXRV
cGRhdGUgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ubG9hZEF0dHIp
IHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUobG9h
ZEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRB
dHRyaWJ1dGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gbmFtZUF0dHIpIHsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBu
ZXdOYW1lID0gYXR0ci0+dmFsdWUoKTsKICAgICAgICAgaWYgKGlzRG9jTmFtZWRJdGVtKCkgJiYg
aW5Eb2N1bWVudCgpICYmIGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBA
CiAKICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
LSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCkBAIC00
MSw3ICs0MCw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7Ci11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIAogSFRNTE9wdGlvbkVsZW1lbnQ6
OkhUTUxPcHRpb25FbGVtZW50KERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZikKICAg
ICA6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQob3B0aW9uVGFnLCBkb2MsIGYpCkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MU2NyaXB0RWxlbWVudC5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9odG1s
L0hUTUxTY3JpcHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotdXNpbmcg
bmFtZXNwYWNlIEV2ZW50TmFtZXM7CiAKIEhUTUxTY3JpcHRFbGVtZW50OjpIVE1MU2NyaXB0RWxl
bWVudChEb2N1bWVudCogZG9jKQogICAgIDogSFRNTEVsZW1lbnQoc2NyaXB0VGFnLCBkb2MpCkBA
IC03MSw3ICs3MCw3IEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmkK
ICAgICBpZiAoYXR0ck5hbWUgPT0gc3JjQXR0cikKICAgICAgICAgaGFuZGxlU291cmNlQXR0cmli
dXRlKG1fZGF0YSwgYXR0ci0+dmFsdWUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gb25s
b2FkQXR0cikKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1
dGUobG9hZEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5
cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgYXR0cik7CiAgICAgZWxzZQog
ICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC0y
MTcsMTIgKzIxNiwxMiBAQCB2b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpkaXNwYXRjaExvYWRFdmVu
CiAgICAgQVNTRVJUKCFtX2RhdGEuaGF2ZUZpcmVkTG9hZEV2ZW50KCkpOwogICAgIG1fZGF0YS5z
ZXRIYXZlRmlyZWRMb2FkRXZlbnQodHJ1ZSk7CiAKLSAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShs
b2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoZXZlbnRO
YW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKIH0KIAogdm9pZCBIVE1MU2NyaXB0RWxl
bWVudDo6ZGlzcGF0Y2hFcnJvckV2ZW50KCkKIHsKLSAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShl
cnJvckV2ZW50LCB0cnVlLCBmYWxzZSk7CisgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoZXZlbnRO
YW1lcygpLmVycm9yRXZlbnQsIHRydWUsIGZhbHNlKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
U2VsZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDYgQEAgdXNpbmcg
bmFtZXNwYWNlIFVuaWNvZGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNw
YWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBzdGF0aWMgY29u
c3QgRE9NVGltZVN0YW1wIHR5cGVBaGVhZFRpbWVvdXQgPSAxMDAwOwpAQCAtMzc0LDExICszNzMs
MTEgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaQogICAgICAgICAv
LyBEb24ndCBtYXAgJ2FsaWduJyBhdHRyaWJ1dGUuICBUaGlzIG1hdGNoZXMgd2hhdCBGaXJlZm94
LCBPcGVyYSBhbmQgSUUgZG8uCiAgICAgICAgIC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjA3MgogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
Zm9jdXNBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0
cmlidXRlKGZvY3VzRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuZm9jdXNFdmVudCwgYXR0cik7CiAgICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25ibHVyQXR0cikgewotICAgICAgICBzZXRJbmxp
bmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShibHVyRXZlbnQsIGF0dHIpOworICAg
ICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVz
KCkuYmx1ckV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmNo
YW5nZUF0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRy
aWJ1dGUoY2hhbmdlRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsIGF0dHIpOwogICAg
IH0gZWxzZQogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTYwNyw3ICs2MDYsNyBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kCiAgICAgaWYgKGV2dC0+ZGVmYXVsdEhhbmRsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGV2dC0+dHlwZSgpID09IGtleXByZXNzRXZl
bnQgJiYgZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSkgeworICAgIGlmIChldnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCAmJiBldnQtPmlzS2V5Ym9hcmRFdmVudCgpKSB7CiAg
ICAgICAgIEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQgPSBzdGF0aWNfY2FzdDxLZXlib2Fy
ZEV2ZW50Kj4oZXZ0KTsKICAgICAKICAgICAgICAgaWYgKCFrZXlib2FyZEV2ZW50LT5jdHJsS2V5
KCkgJiYgIWtleWJvYXJkRXZlbnQtPmFsdEtleSgpICYmICFrZXlib2FyZEV2ZW50LT5tZXRhS2V5
KCkgJiYKQEAgLTYyNSw3ICs2MjQsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlz
dERlZmF1bHRFCiB7CiAgICAgUmVuZGVyTWVudUxpc3QqIG1lbnVMaXN0ID0gc3RhdGljX2Nhc3Q8
UmVuZGVyTWVudUxpc3QqPihyZW5kZXJlcigpKTsKIAotICAgIGlmIChldnQtPnR5cGUoKSA9PSBr
ZXlkb3duRXZlbnQpIHsKKyAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRv
d25FdmVudCkgewogICAgICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIWV2dC0+aXNLZXlib2FyZEV2
ZW50KCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIFN0cmluZyBrZXlJZGVudGlmaWVy
ID0gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2dCktPmtleUlkZW50aWZpZXIoKTsKQEAg
LTY2Nyw3ICs2NjYsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1bHRF
CiAKICAgICAvLyBVc2Uga2V5IHByZXNzIGV2ZW50IGhlcmUgc2luY2Ugc2VuZGluZyBzaW11bGF0
ZWQgbW91c2UgZXZlbnRzCiAgICAgLy8gb24ga2V5IGRvd24gYmxvY2tzIHRoZSBwcm9wZXIgc2Vu
ZGluZyBvZiB0aGUga2V5IHByZXNzIGV2ZW50LgotICAgIGlmIChldnQtPnR5cGUoKSA9PSBrZXlw
cmVzc0V2ZW50KSB7CisgICAgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVz
c0V2ZW50KSB7CiAgICAgICAgIGlmICghcmVuZGVyZXIoKSB8fCAhZXZ0LT5pc0tleWJvYXJkRXZl
bnQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaW50IGtleUNvZGUgPSBzdGF0aWNf
Y2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0KS0+a2V5Q29kZSgpOwpAQCAtNjk5LDcgKzY5OCw3IEBA
IHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVsdEUKICAgICAgICAgICAgIGV2
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9CiAKLSAgICBpZiAoZXZ0LT50eXBlKCkgPT0g
bW91c2Vkb3duRXZlbnQgJiYgZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3Vz
ZUV2ZW50Kj4oZXZ0KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgIGlmIChldnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZ0LT5pc01vdXNlRXZlbnQo
KSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRv
bikgewogICAgICAgICBmb2N1cygpOwogICAgICAgICBpZiAobWVudUxpc3QtPnBvcHVwSXNWaXNp
YmxlKCkpCiAgICAgICAgICAgICBtZW51TGlzdC0+aGlkZVBvcHVwKCk7CkBAIC03MTUsNyArNzE0
LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxpc3REZWZhdWx0RQogCiB2b2lkIEhU
TUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQog
ewotICAgIGlmIChldnQtPnR5cGUoKSA9PSBtb3VzZWRvd25FdmVudCAmJiBldnQtPmlzTW91c2VF
dmVudCgpICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpLT5idXR0b24oKSA9PSBMZWZ0
QnV0dG9uKSB7CisgICAgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25F
dmVudCAmJiBldnQtPmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihl
dnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGZvY3VzKCk7CiAgICAgICAg
IAogICAgICAgICBNb3VzZUV2ZW50KiBtRXZ0ID0gc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2
dCk7CkBAIC03NzUsMTAgKzc3NCwxMCBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94
RGVmYXVsdEV2CiAKICAgICAgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAg
ICAgfQotICAgIH0gZWxzZSBpZiAoZXZ0LT50eXBlKCkgPT0gbW91c2V1cEV2ZW50ICYmIGV2dC0+
aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1dHRvbigp
ID09IExlZnRCdXR0b24gJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmF1
dG9zY3JvbGxSZW5kZXJlcigpICE9IHJlbmRlcmVyKCkpCisgICAgfSBlbHNlIGlmIChldnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkg
JiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1dHRvbigpID09IExlZnRCdXR0b24g
JiYgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmF1dG9zY3JvbGxSZW5kZXJl
cigpICE9IHJlbmRlcmVyKCkpCiAgICAgICAgIC8vIFRoaXMgbWFrZXMgc3VyZSB3ZSBmaXJlIG9u
Q2hhbmdlIGZvciBhIHNpbmdsZSBjbGljay4gIEZvciBkcmFnIHNlbGVjdGlvbiwgb25DaGFuZ2Ug
d2lsbCBmaXJlIHdoZW4gdGhlIGF1dG9zY3JvbGwgdGltZXIgc3RvcHMuCiAgICAgICAgIGxpc3RC
b3hPbkNoYW5nZSgpOwotICAgIGVsc2UgaWYgKGV2dC0+dHlwZSgpID09IGtleWRvd25FdmVudCkg
eworICAgIGVsc2UgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQp
IHsKICAgICAgICAgaWYgKCFldnQtPmlzS2V5Ym9hcmRFdmVudCgpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBTdHJpbmcga2V5SWRlbnRpZmllciA9IHN0YXRpY19jYXN0PEtleWJvYXJk
RXZlbnQqPihldnQpLT5rZXlJZGVudGlmaWVyKCk7CkBAIC04MTksNyArODE4LDcgQEAgdm9pZCBI
VE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveERlZmF1bHRFdgogICAgICAgICAgICAgbGlzdEJveE9u
Q2hhbmdlKCk7CiAgICAgICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKGV2dC0+dHlwZSgpID09IGtleXByZXNzRXZlbnQpIHsKKyAgICB9
IGVsc2UgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7CiAg
ICAgICAgIGlmICghZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgaW50IGtleUNvZGUgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0KS0+
a2V5Q29kZSgpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkocmV2aXNp
b24gMzgwNjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDcgKzQxLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2lu
ZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHN0
YXRpYyBjb25zdCBpbnQgZGVmYXVsdFJvd3MgPSAyOwpAQCAtMTY4LDEzICsxNjcsMTMgQEAgdm9p
ZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpwYXJzZU1hcHBlZEF0dAogICAgICAgICAvLyBEb24ndCBt
YXAgJ2FsaWduJyBhdHRyaWJ1dGUuICBUaGlzIG1hdGNoZXMgd2hhdCBGaXJlZm94LCBPcGVyYSBh
bmQgSUUgZG8uCiAgICAgICAgIC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MDc1CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25mb2N1c0F0dHIp
Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGZvY3Vz
RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0
dHJpYnV0ZShldmVudE5hbWVzKCkuZm9jdXNFdmVudCwgYXR0cik7CiAgICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG9uYmx1ckF0dHIpCi0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlQW5kQXR0cmlidXRlKGJsdXJFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQsIGF0
dHIpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnNlbGVjdEF0dHIpCi0gICAgICAg
IHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKHNlbGVjdEV2ZW50LCBh
dHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUo
ZXZlbnROYW1lcygpLnNlbGVjdEV2ZW50LCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gb25jaGFuZ2VBdHRyKQotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZUFuZEF0dHJpYnV0ZShjaGFuZ2VFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgYXR0
cik7CiAgICAgZWxzZQogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTIzMyw3ICsyMzIsNyBAQCB2b2lkIEhU
TUxUZXh0QXJlYUVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwCiAKIHZvaWQgSFRNTFRleHRBcmVhRWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKHJlbmRl
cmVyKCkgJiYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSB8fCBldmVudC0+aXNEcmFnRXZlbnQoKSB8
fCBldmVudC0+aXNXaGVlbEV2ZW50KCkgfHwgZXZlbnQtPnR5cGUoKSA9PSBibHVyRXZlbnQpKQor
ICAgIGlmIChyZW5kZXJlcigpICYmIChldmVudC0+aXNNb3VzZUV2ZW50KCkgfHwgZXZlbnQtPmlz
RHJhZ0V2ZW50KCkgfHwgZXZlbnQtPmlzV2hlZWxFdmVudCgpIHx8IGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmJsdXJFdmVudCkpCiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRleHRD
b250cm9sKj4ocmVuZGVyZXIoKSktPmZvcndhcmRFdmVudChldmVudCk7CiAKICAgICBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9odG1s
L0hUTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBAIHVzaW5n
IG5hbWVzcGFjZSBXVEY7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7Ci11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIAogI2lmIE1PQklMRQogLy8g
VGhlIG1vYmlsZSBkZXZpY2UgbmVlZHMgdG8gYmUgcmVzcG9uc2l2ZSwgYXMgc3VjaCB0aGUgdG9r
ZW5pemVyIGNodW5rIHNpemUgaXMgcmVkdWNlZC4KQEAgLTIwMDYsMTEgKzIwMDUsMTEgQEAgdm9p
ZCBIVE1MVG9rZW5pemVyOjpub3RpZnlGaW5pc2hlZChDYWNoZQogI2VuZGlmCiAKICAgICAgICAg
aWYgKGVycm9yT2NjdXJyZWQpCi0gICAgICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KG4uZ2V0
KCkpLT5kaXNwYXRjaEV2ZW50Rm9yVHlwZShlcnJvckV2ZW50LCB0cnVlLCBmYWxzZSk7CisgICAg
ICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KG4uZ2V0KCkpLT5kaXNwYXRjaEV2ZW50Rm9yVHlw
ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgdHJ1ZSwgZmFsc2UpOwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudCo+KG4uZ2V0KCkp
LT5zaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkpCiAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9
IHNjcmlwdEV4ZWN1dGlvbihzY3JpcHRTb3VyY2UsIG1fc3RhdGUsIGNhY2hlZFNjcmlwdFVybCk7
Ci0gICAgICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KG4uZ2V0KCkpLT5kaXNwYXRjaEV2ZW50
Rm9yVHlwZShsb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICBFdmVudFRhcmdl
dE5vZGVDYXN0KG4uZ2V0KCkpLT5kaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVzKCkubG9h
ZEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGhlIHN0YXRl
IG9mIHBlbmRpbmdTY3JpcHRzLmlzRW1wdHkoKSBjYW4gY2hhbmdlIGluc2lkZSB0aGUgc2NyaXB0
RXhlY3V0aW9uKCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDM4MDY0KQor
KysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIs
NyArMTEyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIFNWR05hbWVz
OwogI2VuZGlmCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotdXNpbmcgbmFtZXNwYWNlIEV2
ZW50TmFtZXM7CiAKICNpZiBVU0UoTE9XX0JBTkRXSURUSF9ESVNQTEFZKQogY29uc3QgdW5zaWdu
ZWQgaW50IGNNYXhQZW5kaW5nU291cmNlTGVuZ3RoSW5Mb3dCYW5kd2lkdGhEaXNwbGF5ID0gMTI4
ICogMTAyNDsKQEAgLTU5Miw3ICs1OTEsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wTG9hZGlu
Zyhib29sIHNlbmRVCiAgICAgICAgICAgICAgICAgTm9kZSogY3VycmVudEZvY3VzZWROb2RlID0g
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsKICAgICAgICAgICAgICAgICBpZiAo
Y3VycmVudEZvY3VzZWROb2RlKQogICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9jdXNlZE5v
ZGUtPmFib3V0VG9VbmxvYWQoKTsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgp
LT5kaXNwYXRjaFdpbmRvd0V2ZW50KHVubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpOworICAgICAg
ICAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQoZXZlbnRO
YW1lcygpLnVubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgIGlmICht
X2ZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT51cGRhdGVSZW5kZXJpbmcoKTsKICAgICAgICAgICAgICAgICBtX3dhc1VubG9hZEV2ZW50
RW1pdHRlZCA9IHRydWU7CkBAIC0xOTExLDcgKzE5MTAsNyBAQCBib29sIEZyYW1lTG9hZGVyOjpj
YW5DYWNoZVBhZ2UoKQogICAgICAgICAmJiAhbV9jb250YWluc1BsdWdJbnMKICAgICAgICAgJiYg
IW1fVVJMLnByb3RvY29sSXMoImh0dHBzIikKICAgICAgICAgJiYgbV9mcmFtZS0+ZG9jdW1lbnQo
KQotICAgICAgICAmJiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aGFzV2luZG93RXZlbnRMaXN0ZW5l
cih1bmxvYWRFdmVudCkKKyAgICAgICAgJiYgIW1fZnJhbWUtPmRvY3VtZW50KCktPmhhc1dpbmRv
d0V2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KQogI2lmIEVOQUJMRShEQVRB
QkFTRSkKICAgICAgICAgJiYgIW1fZnJhbWUtPmRvY3VtZW50KCktPmhhc09wZW5EYXRhYmFzZXMo
KQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2xvYWRlci9JbWFnZURvY3VtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9JbWFnZURvY3VtZW50LmNwcAkocmV2aXNpb24gMzgwNjQp
CisrKyBXZWJDb3JlL2xvYWRlci9JbWFnZURvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNyArNDcsNiBAQCB1c2luZyBzdGQ6Om1pbjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11
c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAK
IGNsYXNzIEltYWdlRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKQEAgLTMz
OSw5ICszMzgsOSBAQCBib29sIEltYWdlRG9jdW1lbnQ6OnNob3VsZFNocmlua1RvRml0KCkgCiAK
IHZvaWQgSW1hZ2VFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQsIGJvb2wg
aXNXaW5kb3dFdmVudCkKIHsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSByZXNpemVFdmVudCkK
KyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkucmVzaXplRXZlbnQpCiAgICAg
ICAgIG1fZG9jLT53aW5kb3dTaXplQ2hhbmdlZCgpOwotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBl
KCkgPT0gY2xpY2tFdmVudCkgeworICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLmNsaWNrRXZlbnQpIHsKICAgICAgICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHN0
YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7CiAgICAgICAgIG1fZG9jLT5pbWFnZUNsaWNr
ZWQobW91c2VFdmVudC0+eCgpLCBtb3VzZUV2ZW50LT55KCkpOwogICAgIH0KSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9J
bWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9sb2FkZXIvSW1hZ2VM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMyArMjcsMTAgQEAKICNpbmNsdWRlICJE
b2NMb2FkZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIK
LSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKLQogSW1hZ2VM
b2FkZXI6OkltYWdlTG9hZGVyKEVsZW1lbnQqIGVsdCkKICAgICA6IG1fZWxlbWVudChlbHQpCiAg
ICAgLCBtX2ltYWdlKDApCkluZGV4OiBXZWJDb3JlL2xvYWRlci9NZWRpYURvY3VtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9NZWRpYURvY3VtZW50LmNwcAkocmV2aXNpb24g
MzgwNjQpCisrKyBXZWJDb3JlL2xvYWRlci9NZWRpYURvY3VtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDcsNyArNDcsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVz
cGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogY2xhc3MgTWVk
aWFUb2tlbml6ZXIgOiBwdWJsaWMgVG9rZW5pemVyIHsKQEAgLTE1MSwxMiArMTUwLDEyIEBAIHZv
aWQgTWVkaWFEb2N1bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcigKICAgICBpZiAodGFyZ2V0Tm9k
ZSAmJiB0YXJnZXROb2RlLT5oYXNUYWdOYW1lKHZpZGVvVGFnKSkgewogICAgICAgICBIVE1MVmlk
ZW9FbGVtZW50KiB2aWRlbyA9IHN0YXRpY19jYXN0PEhUTUxWaWRlb0VsZW1lbnQqPih0YXJnZXRO
b2RlKTsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgaWYgKGV2ZW50LT50eXBl
KCkgPT0gY2xpY2tFdmVudCkgeworICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkuY2xpY2tFdmVudCkgewogICAgICAgICAgICAgaWYgKCF2aWRlby0+Y2FuUGxheSgpKSB7
CiAgICAgICAgICAgICAgICAgdmlkZW8tPnBhdXNlKGVjKTsKICAgICAgICAgICAgICAgICBldmVu
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlm
IChldmVudC0+dHlwZSgpID09IGRibGNsaWNrRXZlbnQpIHsKKyAgICAgICAgfSBlbHNlIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5kYmxjbGlja0V2ZW50KSB7CiAgICAgICAgICAg
ICBpZiAodmlkZW8tPmNhblBsYXkoKSkgewogICAgICAgICAgICAgICAgIHZpZGVvLT5wbGF5KGVj
KTsKICAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCShyZXZp
c2lvbiAzODA2NCkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2Fj
aGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCw2IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0KIERPTUFwcGxpY2F0aW9uQ2Fj
aGU6OkRPTUFwcGxpY2F0aW9uQ2FjaGUoRnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFt
ZSkKIHsKQEAgLTI1MCwzNyArMjQ4LDM3IEBAIHZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2Fs
bExpc3RlbmVyKGMKIAogdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsQ2hlY2tpbmdMaXN0
ZW5lcigpCiB7Ci0gICAgY2FsbExpc3RlbmVyKGNoZWNraW5nRXZlbnQsIG1fb25DaGVja2luZ0xp
c3RlbmVyLmdldCgpKTsKKyAgICBjYWxsTGlzdGVuZXIoZXZlbnROYW1lcygpLmNoZWNraW5nRXZl
bnQsIG1fb25DaGVja2luZ0xpc3RlbmVyLmdldCgpKTsKIH0KIAogdm9pZCBET01BcHBsaWNhdGlv
bkNhY2hlOjpjYWxsRXJyb3JMaXN0ZW5lcigpCiB7Ci0gICAgY2FsbExpc3RlbmVyKGVycm9yRXZl
bnQsIG1fb25FcnJvckxpc3RlbmVyLmdldCgpKTsKKyAgICBjYWxsTGlzdGVuZXIoZXZlbnROYW1l
cygpLmVycm9yRXZlbnQsIG1fb25FcnJvckxpc3RlbmVyLmdldCgpKTsKIH0KIAogdm9pZCBET01B
cHBsaWNhdGlvbkNhY2hlOjpjYWxsTm9VcGRhdGVMaXN0ZW5lcigpCiB7Ci0gICAgY2FsbExpc3Rl
bmVyKG5vdXBkYXRlRXZlbnQsIG1fb25Ob1VwZGF0ZUxpc3RlbmVyLmdldCgpKTsKKyAgICBjYWxs
TGlzdGVuZXIoZXZlbnROYW1lcygpLm5vdXBkYXRlRXZlbnQsIG1fb25Ob1VwZGF0ZUxpc3RlbmVy
LmdldCgpKTsKIH0KIAogdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsRG93bmxvYWRpbmdM
aXN0ZW5lcigpCiB7Ci0gICAgY2FsbExpc3RlbmVyKGRvd25sb2FkaW5nRXZlbnQsIG1fb25Eb3du
bG9hZGluZ0xpc3RlbmVyLmdldCgpKTsKKyAgICBjYWxsTGlzdGVuZXIoZXZlbnROYW1lcygpLmRv
d25sb2FkaW5nRXZlbnQsIG1fb25Eb3dubG9hZGluZ0xpc3RlbmVyLmdldCgpKTsKIH0KIAogdm9p
ZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsUHJvZ3Jlc3NMaXN0ZW5lcigpCiB7Ci0gICAgY2Fs
bExpc3RlbmVyKHByb2dyZXNzRXZlbnQsIG1fb25Qcm9ncmVzc0xpc3RlbmVyLmdldCgpKTsKKyAg
ICBjYWxsTGlzdGVuZXIoZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQsIG1fb25Qcm9ncmVzc0xp
c3RlbmVyLmdldCgpKTsKIH0KIAogdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsVXBkYXRl
UmVhZHlMaXN0ZW5lcigpCiB7Ci0gICAgY2FsbExpc3RlbmVyKHVwZGF0ZXJlYWR5RXZlbnQsIG1f
b25VcGRhdGVSZWFkeUxpc3RlbmVyLmdldCgpKTsKKyAgICBjYWxsTGlzdGVuZXIoZXZlbnROYW1l
cygpLnVwZGF0ZXJlYWR5RXZlbnQsIG1fb25VcGRhdGVSZWFkeUxpc3RlbmVyLmdldCgpKTsKIH0K
IAogdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsQ2FjaGVkTGlzdGVuZXIoKQogewotICAg
IGNhbGxMaXN0ZW5lcihjYWNoZWRFdmVudCwgbV9vbkNhY2hlZExpc3RlbmVyLmdldCgpKTsKKyAg
ICBjYWxsTGlzdGVuZXIoZXZlbnROYW1lcygpLmNhY2hlZEV2ZW50LCBtX29uQ2FjaGVkTGlzdGVu
ZXIuZ2V0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Bh
Z2UvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0Fj
Y2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcGFnZS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAog
I2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJBWE9iamVj
dENhY2hlLmgiCiAjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKLSNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTU3LDcgKzU2LDYgQEAgdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1l
czsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFj
Y2Vzc2liaWxpdHlPYmplY3QoKQpJbmRleDogV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL3BhZ2UvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDYgQEAgdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3Bh
Y2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikKQEAgLTUwNSw3ICs1MDQsNyBAQCBFbGVtZW50KiBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Ojptb3VzCiAgICAgCiAgICAgLy8gRklYTUU6IERvIHRoZSBjb250aW51YXRpb24gc2Vh
cmNoIGxpa2UgYW5jaG9yRWxlbWVudCBkb2VzCiAgICAgZm9yIChFdmVudFRhcmdldE5vZGUqIGVs
dCA9IHN0YXRpY19jYXN0PEV2ZW50VGFyZ2V0Tm9kZSo+KG5vZGUpOyBlbHQ7IGVsdCA9IHN0YXRp
Y19jYXN0PEV2ZW50VGFyZ2V0Tm9kZSo+KGVsdC0+cGFyZW50Tm9kZSgpKSkgewotICAgICAgICBp
ZiAoZWx0LT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShjbGlja0V2ZW50KSB8fCBlbHQtPmlu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNlZG93bkV2ZW50KSB8fCBlbHQtPmlubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNldXBFdmVudCkpCisgICAgICAgIGlmIChlbHQtPmlubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB8fCBlbHQtPmlu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgfHwg
ZWx0LT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2V1cEV2ZW50
KSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZWx0KTsKICAgICB9
CiAgICAgCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAkocmV2aXNp
b24gMzgwNjQpCisrKyBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTgsOCArNTgsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVz
aW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwotCiBDb250ZXh0TWVudUNvbnRyb2xsZXI6OkNvbnRl
eHRNZW51Q29udHJvbGxlcihQYWdlKiBwYWdlLCBDb250ZXh0TWVudUNsaWVudCogY2xpZW50KQog
ICAgIDogbV9wYWdlKHBhZ2UpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCkBAIC04MSw3ICs3OSw3
IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjbGVhckNvbnRleHQKIAogdm9pZCBDb250
ZXh0TWVudUNvbnRyb2xsZXI6OmhhbmRsZUNvbnRleHRNZW51RXZlbnQoRXZlbnQqIGV2ZW50KQog
ewotICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09IGNvbnRleHRtZW51RXZlbnQpOworICAgIEFT
U0VSVChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jb250ZXh0bWVudUV2ZW50KTsKICAg
ICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIE1vdXNl
RXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOwpJbmRl
eDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDggKzc4LDYgQEAgdXNpbmcgc3RkOjptYXg7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0KIGNs
YXNzIFBvc3RNZXNzYWdlVGltZXIgOiBwdWJsaWMgVGltZXJCYXNlIHsKIHB1YmxpYzoKICAgICBQ
b3N0TWVzc2FnZVRpbWVyKERPTVdpbmRvdyogd2luZG93LCBQYXNzUmVmUHRyPE1lc3NhZ2VFdmVu
dD4gZXZlbnQsIFNlY3VyaXR5T3JpZ2luKiB0YXJnZXRPcmlnaW4pCkBAIC05NDEsMjkyICs5Mzks
MjkyIEBAIGlubGluZSBFdmVudExpc3RlbmVyKiBET01XaW5kb3c6OmlubGluZUUKIAogRXZlbnRM
aXN0ZW5lciogRE9NV2luZG93OjpvbmFib3J0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoYWJvcnRFdmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KTsKIH0KIAogdm9pZCBET01X
aW5kb3c6OnNldE9uYWJvcnQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGFib3J0RXZlbnQsIGV2ZW50
TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5hYm9ydEV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2lu
ZG93OjpvbmJsdXIoKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9y
VHlwZShibHVyRXZlbnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShl
dmVudE5hbWVzKCkuYmx1ckV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9uYmx1cihQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoYmx1ckV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJ
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuYmx1ckV2ZW50LCBldmVudExp
c3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbmNoYW5nZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNoYW5nZUV2ZW50KTsK
KyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmNoYW5n
ZUV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9uY2hhbmdlKFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZShjaGFuZ2VFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCBldmVudExpc3RlbmVyKTsK
IH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbmNsaWNrKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoY2xpY2tFdmVudCk7CisgICAgcmV0dXJu
IGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KTsKIH0K
IAogdm9pZCBET01XaW5kb3c6OnNldE9uY2xpY2soUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBl
dmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNsaWNr
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBl
KGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0
ZW5lciogRE9NV2luZG93OjpvbmRibGNsaWNrKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZGJsY2xpY2tFdmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kYmxjbGlja0V2ZW50KTsKIH0KIAogdm9p
ZCBET01XaW5kb3c6OnNldE9uZGJsY2xpY2soUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVu
dExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGRibGNsaWNr
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBl
KGV2ZW50TmFtZXMoKS5kYmxjbGlja0V2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRM
aXN0ZW5lciogRE9NV2luZG93OjpvbmVycm9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXJyb3JFdmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50KTsKIH0KIAogdm9pZCBET01X
aW5kb3c6OnNldE9uZXJyb3IoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGVycm9yRXZlbnQsIGV2ZW50
TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5lcnJvckV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2lu
ZG93OjpvbmZvY3VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGUoZm9jdXNFdmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBl
KGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9uZm9j
dXMoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGZvY3VzRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAg
IHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50LCBl
dmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbmtleWRvd24o
KSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShrZXlkb3du
RXZlbnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVz
KCkua2V5ZG93bkV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ua2V5ZG93bihQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGUoa2V5ZG93bkV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJ
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50LCBldmVu
dExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbmtleXByZXNzKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoa2V5cHJlc3NF
dmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5rZXlwcmVzc0V2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ua2V5cHJlc3MoUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlKGtleXByZXNzRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50LCBl
dmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbmtleXVwKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoa2V5dXBFdmVu
dCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5r
ZXl1cEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ua2V5dXAoUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlKGtleXVwRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50LCBldmVudExpc3RlbmVyKTsK
IH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbmxvYWQoKSBjb25zdAogewotICAgIHJl
dHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShsb2FkRXZlbnQpOworICAgIHJldHVybiBp
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubG9hZEV2ZW50KTsKIH0KIAog
dm9pZCBET01XaW5kb3c6OnNldE9ubG9hZChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50
TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUobG9hZEV2ZW50
LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVu
dE5hbWVzKCkubG9hZEV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciog
RE9NV2luZG93Ojpvbm1vdXNlZG93bigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlKG1vdXNlZG93bkV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KTsKIH0KIAogdm9pZCBE
T01XaW5kb3c6OnNldE9ubW91c2Vkb3duKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRM
aXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShtb3VzZWRvd25F
dmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUo
ZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRM
aXN0ZW5lciogRE9NV2luZG93Ojpvbm1vdXNlbW92ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNlbW92ZUV2ZW50KTsKKyAgICByZXR1cm4gaW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KTsKIH0K
IAogdm9pZCBET01XaW5kb3c6OnNldE9ubW91c2Vtb3ZlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZSht
b3VzZW1vdmVFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0K
IAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93Ojpvbm1vdXNlb3V0KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUobW91c2VvdXRFdmVudCk7CisgICAgcmV0
dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50
KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ubW91c2VvdXQoUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JU
eXBlKG1vdXNlb3V0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50LCBldmVudExpc3RlbmVyKTsK
IH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93Ojpvbm1vdXNlb3ZlcigpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNlb3ZlckV2ZW50KTsKKyAg
ICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNlb3Zl
ckV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ubW91c2VvdmVyKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZShtb3VzZW92ZXJFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50LCBldmVudExp
c3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93Ojpvbm1vdXNldXAoKSBjb25z
dAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShtb3VzZXVwRXZlbnQp
OworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91
c2V1cEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ubW91c2V1cChQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGUobW91c2V1cEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2V1cEV2ZW50LCBldmVudExpc3Rl
bmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93Ojpvbm1vdXNld2hlZWwoKSBjb25z
dAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShtb3VzZXdoZWVsRXZl
bnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCku
bW91c2V3aGVlbEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ubW91c2V3aGVlbChQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUobW91c2V3aGVlbEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAg
ICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2V3aGVlbEV2
ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbnJl
c2V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUocmVz
ZXRFdmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFt
ZXMoKS5yZXNldEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ucmVzZXQoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlKHJlc2V0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5yZXNldEV2ZW50LCBldmVudExpc3Rl
bmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbnJlc2l6ZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHJlc2l6ZUV2ZW50KTsKKyAg
ICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnJlc2l6ZUV2
ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ucmVzaXplKFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9y
VHlwZShyZXNpemVFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0K
IAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbnNjcm9sbCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHNjcm9sbEV2ZW50KTsKKyAgICByZXR1cm4g
aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50KTsKIH0K
IAogdm9pZCBET01XaW5kb3c6OnNldE9uc2Nyb2xsKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
ZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShzY3Jv
bGxFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5
cGUoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRM
aXN0ZW5lciogRE9NV2luZG93OjpvbnNlYXJjaCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHNlYXJjaEV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnNlYXJjaEV2ZW50KTsKIH0KIAogdm9pZCBE
T01XaW5kb3c6OnNldE9uc2VhcmNoKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0
ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShzZWFyY2hFdmVudCwg
ZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRO
YW1lcygpLnNlYXJjaEV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciog
RE9NV2luZG93OjpvbnNlbGVjdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlKHNlbGVjdEV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGUoZXZlbnROYW1lcygpLnNlbGVjdEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6
OnNldE9uc2VsZWN0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsK
LSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShzZWxlY3RFdmVudCwgZXZlbnRMaXN0
ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnNl
bGVjdEV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93
OjpvbnN1Ym1pdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JU
eXBlKHN1Ym1pdEV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUo
ZXZlbnROYW1lcygpLnN1Ym1pdEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9uc3Vi
bWl0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJ
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShzdWJtaXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7Cisg
ICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnN1Ym1pdEV2ZW50
LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbnVubG9h
ZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHVubG9h
ZEV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1l
cygpLnVubG9hZEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9udW5sb2FkKFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZSh1bmxvYWRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50LCBldmVudExp
c3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbmJlZm9yZXVubG9hZCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGJlZm9yZXVu
bG9hZEV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRO
YW1lcygpLmJlZm9yZXVubG9hZEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9uYmVm
b3JldW5sb2FkKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAg
ICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShiZWZvcmV1bmxvYWRFdmVudCwgZXZlbnRM
aXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygp
LmJlZm9yZXVubG9hZEV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciog
RE9NV2luZG93OjpvbndlYmtpdGFuaW1hdGlvbnN0YXJ0KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUod2Via2l0QW5pbWF0aW9uU3RhcnRFdmVudCk7Cisg
ICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS53ZWJraXRB
bmltYXRpb25TdGFydEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ud2Via2l0YW5p
bWF0aW9uc3RhcnQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewot
ICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHdlYmtpdEFuaW1hdGlvblN0YXJ0RXZl
bnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2
ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25TdGFydEV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0K
IAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbndlYmtpdGFuaW1hdGlvbml0ZXJhdGlvbigp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHdlYmtpdEFu
aW1hdGlvbkl0ZXJhdGlvbkV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGUoZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2ZW50KTsKIH0KIAog
dm9pZCBET01XaW5kb3c6OnNldE9ud2Via2l0YW5pbWF0aW9uaXRlcmF0aW9uKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZSh3ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVudCwgZXZlbnRMaXN0ZW5lcik7
CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLndlYmtpdEFu
aW1hdGlvbkl0ZXJhdGlvbkV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5l
ciogRE9NV2luZG93OjpvbndlYmtpdGFuaW1hdGlvbmVuZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHdlYmtpdEFuaW1hdGlvbkVuZEV2ZW50KTsKKyAg
ICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLndlYmtpdEFu
aW1hdGlvbkVuZEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ud2Via2l0YW5pbWF0
aW9uZW5kKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBz
ZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZSh3ZWJraXRBbmltYXRpb25FbmRFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1l
cygpLndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRM
aXN0ZW5lciogRE9NV2luZG93OjpvbndlYmtpdHRyYW5zaXRpb25lbmQoKSBjb25zdAogewotICAg
IHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZSh3ZWJraXRUcmFuc2l0aW9uRW5kRXZl
bnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCku
d2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ud2Vi
a2l0dHJhbnNpdGlvbmVuZChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIp
CiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUod2Via2l0VHJhbnNpdGlvbkVu
ZEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZShldmVudE5hbWVzKCkud2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50LCBldmVudExpc3RlbmVyKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJl
dmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDcgKzczLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBu
YW1lc3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIC8vIFRo
ZSBsaW5rIGRyYWcgaHlzdGVyZXNpcyBpcyBtdWNoIGxhcmdlciB0aGFuIHRoZSBvdGhlcnMgYmVj
YXVzZSB0aGVyZQpAQCAtMTA2Niw3ICsxMDY1LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRs
ZU1vdXNlUHJlc3NFdmVudAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29s
IHN3YWxsb3dFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChtb3VzZWRvd25FdmVudCwgbWV2LnRh
cmdldE5vZGUoKSwgdHJ1ZSwgbV9jbGlja0NvdW50LCBtb3VzZUV2ZW50LCB0cnVlKTsKKyAgICBi
b29sIHN3YWxsb3dFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkubW91c2Vk
b3duRXZlbnQsIG1ldi50YXJnZXROb2RlKCksIHRydWUsIG1fY2xpY2tDb3VudCwgbW91c2VFdmVu
dCwgdHJ1ZSk7CiAKICAgICAvLyBJZiB0aGUgaGl0IHRlc3Rpbmcgb3JpZ2luYWxseSBkZXRlcm1p
bmVkIHRoZSBldmVudCB3YXMgaW4gYSBzY3JvbGxiYXIsIHJlZmV0Y2ggdGhlIE1vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMKICAgICAvLyBpbiBjYXNlIHRoZSBzY3JvbGxiYXIgd2lkZ2V0IHdh
cyBkZXN0cm95ZWQgd2hlbiB0aGUgbW91c2UgZXZlbnQgd2FzIGhhbmRsZWQuCkBAIC0xMTIyLDEy
ICsxMTIxLDEyIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZURvdWJsZUNsaWMKICAg
ICB9CiAKICAgICBtX2NsaWNrQ291bnQgPSBtb3VzZUV2ZW50LmNsaWNrQ291bnQoKTsKLSAgICBi
b29sIHN3YWxsb3dNb3VzZVVwRXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQobW91c2V1cEV2ZW50
LCBtZXYudGFyZ2V0Tm9kZSgpLCB0cnVlLCBtX2NsaWNrQ291bnQsIG1vdXNlRXZlbnQsIGZhbHNl
KTsKKyAgICBib29sIHN3YWxsb3dNb3VzZVVwRXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQoZXZl
bnROYW1lcygpLm1vdXNldXBFdmVudCwgbWV2LnRhcmdldE5vZGUoKSwgdHJ1ZSwgbV9jbGlja0Nv
dW50LCBtb3VzZUV2ZW50LCBmYWxzZSk7CiAKICAgICBib29sIHN3YWxsb3dDbGlja0V2ZW50ID0g
ZmFsc2U7CiAgICAgLy8gRG9uJ3QgZXZlciBkaXNwYXRjaCBjbGljayBldmVudHMgZm9yIHJpZ2h0
IGNsaWNrcwogICAgIGlmIChtb3VzZUV2ZW50LmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uICYmIG1l
di50YXJnZXROb2RlKCkgPT0gbV9jbGlja05vZGUpCi0gICAgICAgIHN3YWxsb3dDbGlja0V2ZW50
ID0gZGlzcGF0Y2hNb3VzZUV2ZW50KGNsaWNrRXZlbnQsIG1ldi50YXJnZXROb2RlKCksIHRydWUs
IG1fY2xpY2tDb3VudCwgbW91c2VFdmVudCwgdHJ1ZSk7CisgICAgICAgIHN3YWxsb3dDbGlja0V2
ZW50ID0gZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBtZXYudGFy
Z2V0Tm9kZSgpLCB0cnVlLCBtX2NsaWNrQ291bnQsIG1vdXNlRXZlbnQsIHRydWUpOwogCiAgICAg
aWYgKG1fbGFzdFNjcm9sbGJhclVuZGVyTW91c2UpCiAgICAgICAgIHN3YWxsb3dNb3VzZVVwRXZl
bnQgPSBtX2xhc3RTY3JvbGxiYXJVbmRlck1vdXNlLT5tb3VzZVVwKCk7CkBAIC0xMTgwLDcgKzEx
NzksNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQoCiAjZW5kaWYK
IAogICAgIGlmIChtX2ZyYW1lU2V0QmVpbmdSZXNpemVkKQotICAgICAgICByZXR1cm4gZGlzcGF0
Y2hNb3VzZUV2ZW50KG1vdXNlbW92ZUV2ZW50LCBtX2ZyYW1lU2V0QmVpbmdSZXNpemVkLmdldCgp
LCBmYWxzZSwgMCwgbW91c2VFdmVudCwgZmFsc2UpOworICAgICAgICByZXR1cm4gZGlzcGF0Y2hN
b3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCwgbV9mcmFtZVNldEJlaW5nUmVz
aXplZC5nZXQoKSwgZmFsc2UsIDAsIG1vdXNlRXZlbnQsIGZhbHNlKTsKIAogICAgIC8vIFNlbmQg
ZXZlbnRzIHJpZ2h0IHRvIGEgc2Nyb2xsYmFyIGlmIHRoZSBtb3VzZSBpcyBwcmVzc2VkLgogICAg
IGlmIChtX2xhc3RTY3JvbGxiYXJVbmRlck1vdXNlICYmIG1fbW91c2VQcmVzc2VkKQpAQCAtMTI0
MSw3ICsxMjQwLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KAog
ICAgIGlmIChzd2FsbG93RXZlbnQpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIHN3
YWxsb3dFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChtb3VzZW1vdmVFdmVudCwgbWV2LnRhcmdl
dE5vZGUoKSwgZmFsc2UsIDAsIG1vdXNlRXZlbnQsIHRydWUpOworICAgIHN3YWxsb3dFdmVudCA9
IGRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQsIG1ldi50YXJn
ZXROb2RlKCksIGZhbHNlLCAwLCBtb3VzZUV2ZW50LCB0cnVlKTsKICAgICBpZiAoIXN3YWxsb3dF
dmVudCkKICAgICAgICAgc3dhbGxvd0V2ZW50ID0gaGFuZGxlTW91c2VEcmFnZ2VkRXZlbnQobWV2
KTsKIApAQCAtMTI3Myw3ICsxMjcyLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNl
UmVsZWFzZUV2ZQogI2VuZGlmCiAKICAgICBpZiAobV9mcmFtZVNldEJlaW5nUmVzaXplZCkKLSAg
ICAgICAgcmV0dXJuIGRpc3BhdGNoTW91c2VFdmVudChtb3VzZXVwRXZlbnQsIG1fZnJhbWVTZXRC
ZWluZ1Jlc2l6ZWQuZ2V0KCksIHRydWUsIG1fY2xpY2tDb3VudCwgbW91c2VFdmVudCwgZmFsc2Up
OworICAgICAgICByZXR1cm4gZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5tb3VzZXVw
RXZlbnQsIG1fZnJhbWVTZXRCZWluZ1Jlc2l6ZWQuZ2V0KCksIHRydWUsIG1fY2xpY2tDb3VudCwg
bW91c2VFdmVudCwgZmFsc2UpOwogCiAgICAgaWYgKG1fbGFzdFNjcm9sbGJhclVuZGVyTW91c2Up
IHsKICAgICAgICAgaW52YWxpZGF0ZUNsaWNrKCk7CkBAIC0xMjg3LDEyICsxMjg2LDEyIEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmUKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCi0gICAgYm9vbCBzd2FsbG93TW91c2VVcEV2ZW50ID0gZGlzcGF0Y2hNb3Vz
ZUV2ZW50KG1vdXNldXBFdmVudCwgbWV2LnRhcmdldE5vZGUoKSwgdHJ1ZSwgbV9jbGlja0NvdW50
LCBtb3VzZUV2ZW50LCBmYWxzZSk7CisgICAgYm9vbCBzd2FsbG93TW91c2VVcEV2ZW50ID0gZGlz
cGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQsIG1ldi50YXJnZXROb2Rl
KCksIHRydWUsIG1fY2xpY2tDb3VudCwgbW91c2VFdmVudCwgZmFsc2UpOwogCiAgICAgLy8gRG9u
J3QgZXZlciBkaXNwYXRjaCBjbGljayBldmVudHMgZm9yIHJpZ2h0IGNsaWNrcwogICAgIGJvb2wg
c3dhbGxvd0NsaWNrRXZlbnQgPSBmYWxzZTsKICAgICBpZiAobV9jbGlja0NvdW50ID4gMCAmJiBt
b3VzZUV2ZW50LmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uICYmIG1ldi50YXJnZXROb2RlKCkgPT0g
bV9jbGlja05vZGUpCi0gICAgICAgIHN3YWxsb3dDbGlja0V2ZW50ID0gZGlzcGF0Y2hNb3VzZUV2
ZW50KGNsaWNrRXZlbnQsIG1ldi50YXJnZXROb2RlKCksIHRydWUsIG1fY2xpY2tDb3VudCwgbW91
c2VFdmVudCwgdHJ1ZSk7CisgICAgICAgIHN3YWxsb3dDbGlja0V2ZW50ID0gZGlzcGF0Y2hNb3Vz
ZUV2ZW50KGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBtZXYudGFyZ2V0Tm9kZSgpLCB0cnVlLCBt
X2NsaWNrQ291bnQsIG1vdXNlRXZlbnQsIHRydWUpOwogCiAgICAgaWYgKG1fcmVzaXplTGF5ZXIp
IHsKICAgICAgICAgbV9yZXNpemVMYXllci0+c2V0SW5SZXNpemVNb2RlKGZhbHNlKTsKQEAgLTEz
NTAsNyArMTM0OSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChjb24K
ICAgICAgICAgICAgIGlmIChuZXdUYXJnZXQtPmhhc1RhZ05hbWUoZnJhbWVUYWcpIHx8IG5ld1Rh
cmdldC0+aGFzVGFnTmFtZShpZnJhbWVUYWcpKQogICAgICAgICAgICAgICAgIGFjY2VwdCA9IHN0
YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNlKj4obmV3VGFyZ2V0KS0+Y29udGVudEZyYW1l
KCktPmV2ZW50SGFuZGxlcigpLT51cGRhdGVEcmFnQW5kRHJvcChldmVudCwgY2xpcGJvYXJkKTsK
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhY2NlcHQgPSBkaXNwYXRjaERyYWdF
dmVudChkcmFnZW50ZXJFdmVudCwgbmV3VGFyZ2V0LCBldmVudCwgY2xpcGJvYXJkKTsKKyAgICAg
ICAgICAgICAgICBhY2NlcHQgPSBkaXNwYXRjaERyYWdFdmVudChldmVudE5hbWVzKCkuZHJhZ2Vu
dGVyRXZlbnQsIG5ld1RhcmdldCwgZXZlbnQsIGNsaXBib2FyZCk7CiAgICAgICAgIAogICAgICAg
ICBpZiAobV9kcmFnVGFyZ2V0KSB7CiAgICAgICAgICAgICBGcmFtZSogZnJhbWUgPSAobV9kcmFn
VGFyZ2V0LT5oYXNUYWdOYW1lKGZyYW1lVGFnKSB8fCBtX2RyYWdUYXJnZXQtPmhhc1RhZ05hbWUo
aWZyYW1lVGFnKSkgCkBAIC0xMzU4LDE0ICsxMzU3LDE0IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1
cGRhdGVEcmFnQW5kRHJvcChjb24KICAgICAgICAgICAgIGlmIChmcmFtZSkKICAgICAgICAgICAg
ICAgICBhY2NlcHQgPSBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnVwZGF0ZURyYWdBbmREcm9wKGV2
ZW50LCBjbGlwYm9hcmQpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRpc3Bh
dGNoRHJhZ0V2ZW50KGRyYWdsZWF2ZUV2ZW50LCBtX2RyYWdUYXJnZXQuZ2V0KCksIGV2ZW50LCBj
bGlwYm9hcmQpOworICAgICAgICAgICAgICAgIGRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50TmFtZXMo
KS5kcmFnbGVhdmVFdmVudCwgbV9kcmFnVGFyZ2V0LmdldCgpLCBldmVudCwgY2xpcGJvYXJkKTsK
ICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChuZXdUYXJnZXQpCiAgICAgICAg
ICAgICBpZiAobmV3VGFyZ2V0LT5oYXNUYWdOYW1lKGZyYW1lVGFnKSB8fCBuZXdUYXJnZXQtPmhh
c1RhZ05hbWUoaWZyYW1lVGFnKSkKICAgICAgICAgICAgICAgICBhY2NlcHQgPSBzdGF0aWNfY2Fz
dDxIVE1MRnJhbWVFbGVtZW50QmFzZSo+KG5ld1RhcmdldCktPmNvbnRlbnRGcmFtZSgpLT5ldmVu
dEhhbmRsZXIoKS0+dXBkYXRlRHJhZ0FuZERyb3AoZXZlbnQsIGNsaXBib2FyZCk7CiAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYWNjZXB0ID0gZGlzcGF0Y2hEcmFnRXZlbnQoZHJh
Z292ZXJFdmVudCwgbmV3VGFyZ2V0LCBldmVudCwgY2xpcGJvYXJkKTsKKyAgICAgICAgICAgICAg
ICBhY2NlcHQgPSBkaXNwYXRjaERyYWdFdmVudChldmVudE5hbWVzKCkuZHJhZ292ZXJFdmVudCwg
bmV3VGFyZ2V0LCBldmVudCwgY2xpcGJvYXJkKTsKICAgICB9CiAgICAgbV9kcmFnVGFyZ2V0ID0g
bmV3VGFyZ2V0OwogCkBAIC0xMzgwLDcgKzEzNzksNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6Y2Fu
Y2VsRHJhZ0FuZERyb3AoY29uCiAgICAgICAgIGlmIChmcmFtZSkKICAgICAgICAgICAgIGZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+Y2FuY2VsRHJhZ0FuZERyb3AoZXZlbnQsIGNsaXBib2FyZCk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRpc3BhdGNoRHJhZ0V2ZW50KGRyYWdsZWF2ZUV2ZW50
LCBtX2RyYWdUYXJnZXQuZ2V0KCksIGV2ZW50LCBjbGlwYm9hcmQpOworICAgICAgICAgICAgZGlz
cGF0Y2hEcmFnRXZlbnQoZXZlbnROYW1lcygpLmRyYWdsZWF2ZUV2ZW50LCBtX2RyYWdUYXJnZXQu
Z2V0KCksIGV2ZW50LCBjbGlwYm9hcmQpOwogICAgIH0KICAgICBjbGVhckRyYWdTdGF0ZSgpOwog
fQpAQCAtMTM5NCw3ICsxMzkzLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBlcmZvcm1EcmFnQW5k
RHJvcChjbwogICAgICAgICBpZiAoZnJhbWUpCiAgICAgICAgICAgICBhY2NlcHQgPSBmcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPnBlcmZvcm1EcmFnQW5kRHJvcChldmVudCwgY2xpcGJvYXJkKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgYWNjZXB0ID0gZGlzcGF0Y2hEcmFnRXZlbnQoZHJvcEV2
ZW50LCBtX2RyYWdUYXJnZXQuZ2V0KCksIGV2ZW50LCBjbGlwYm9hcmQpOworICAgICAgICAgICAg
YWNjZXB0ID0gZGlzcGF0Y2hEcmFnRXZlbnQoZXZlbnROYW1lcygpLmRyb3BFdmVudCwgbV9kcmFn
VGFyZ2V0LmdldCgpLCBldmVudCwgY2xpcGJvYXJkKTsKICAgICB9CiAgICAgY2xlYXJEcmFnU3Rh
dGUoKTsKICAgICByZXR1cm4gYWNjZXB0OwpAQCAtMTUwNSwxMCArMTUwNCwxMCBAQCB2b2lkIEV2
ZW50SGFuZGxlcjo6dXBkYXRlTW91c2VFdmVudFRhcmdlCiAgICAgICAgIGlmIChtX2xhc3ROb2Rl
VW5kZXJNb3VzZSAhPSBtX25vZGVVbmRlck1vdXNlKSB7CiAgICAgICAgICAgICAvLyBzZW5kIG1v
dXNlb3V0IGV2ZW50IHRvIHRoZSBvbGQgbm9kZQogICAgICAgICAgICAgaWYgKG1fbGFzdE5vZGVV
bmRlck1vdXNlKQotICAgICAgICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QobV9sYXN0Tm9k
ZVVuZGVyTW91c2UuZ2V0KCkpLT5kaXNwYXRjaE1vdXNlRXZlbnQobW91c2VFdmVudCwgbW91c2Vv
dXRFdmVudCwgMCwgbV9ub2RlVW5kZXJNb3VzZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgRXZl
bnRUYXJnZXROb2RlQ2FzdChtX2xhc3ROb2RlVW5kZXJNb3VzZS5nZXQoKSktPmRpc3BhdGNoTW91
c2VFdmVudChtb3VzZUV2ZW50LCBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCwgMCwgbV9ub2Rl
VW5kZXJNb3VzZS5nZXQoKSk7CiAgICAgICAgICAgICAvLyBzZW5kIG1vdXNlb3ZlciBldmVudCB0
byB0aGUgbmV3IG5vZGUKICAgICAgICAgICAgIGlmIChtX25vZGVVbmRlck1vdXNlKQotICAgICAg
ICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QobV9ub2RlVW5kZXJNb3VzZS5nZXQoKSktPmRp
c3BhdGNoTW91c2VFdmVudChtb3VzZUV2ZW50LCBtb3VzZW92ZXJFdmVudCwgMCwgbV9sYXN0Tm9k
ZVVuZGVyTW91c2UuZ2V0KCkpOworICAgICAgICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3Qo
bV9ub2RlVW5kZXJNb3VzZS5nZXQoKSktPmRpc3BhdGNoTW91c2VFdmVudChtb3VzZUV2ZW50LCBl
dmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQsIDAsIG1fbGFzdE5vZGVVbmRlck1vdXNlLmdldCgp
KTsKICAgICAgICAgfQogICAgICAgICBtX2xhc3ROb2RlVW5kZXJNb3VzZSA9IG1fbm9kZVVuZGVy
TW91c2U7CiAjaWYgRU5BQkxFKFNWRykKQEAgLTE1MjYsNyArMTUyNSw3IEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjpkaXNwYXRjaE1vdXNlRXZlbnQoY28KICAgICBpZiAobV9ub2RlVW5kZXJNb3VzZSkK
ICAgICAgICAgc3dhbGxvd0V2ZW50ID0gRXZlbnRUYXJnZXROb2RlQ2FzdChtX25vZGVVbmRlck1v
dXNlLmdldCgpKS0+ZGlzcGF0Y2hNb3VzZUV2ZW50KG1vdXNlRXZlbnQsIGV2ZW50VHlwZSwgY2xp
Y2tDb3VudCk7CiAgICAgCi0gICAgaWYgKCFzd2FsbG93RXZlbnQgJiYgZXZlbnRUeXBlID09IG1v
dXNlZG93bkV2ZW50KSB7CisgICAgaWYgKCFzd2FsbG93RXZlbnQgJiYgZXZlbnRUeXBlID09IGV2
ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgewogICAgICAgICAvLyBCbHVyIGN1cnJlbnQgZm9j
dXMgbm9kZSB3aGVuIGEgbGluay9idXR0b24gaXMgY2xpY2tlZDsgdGhpcwogICAgICAgICAvLyBp
cyBleHBlY3RlZCBieSBzb21lIHNpdGVzIHRoYXQgcmVseSBvbiBvbkNoYW5nZSBoYW5kbGVycyBy
dW5uaW5nCiAgICAgICAgIC8vIGZyb20gZm9ybSBmaWVsZHMgYmVmb3JlIHRoZSBidXR0b24gY2xp
Y2sgaXMgcHJvY2Vzc2VkLgpAQCAtMTY0MCw3ICsxNjM5LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6
OnNlbmRDb250ZXh0TWVudUV2ZW50KAogICAgIH0KICNlbmRpZgogCi0gICAgc3dhbGxvd0V2ZW50
ID0gZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnRleHRtZW51RXZlbnQsIG1ldi50YXJnZXROb2RlKCks
IHRydWUsIDAsIGV2ZW50LCB0cnVlKTsKKyAgICBzd2FsbG93RXZlbnQgPSBkaXNwYXRjaE1vdXNl
RXZlbnQoZXZlbnROYW1lcygpLmNvbnRleHRtZW51RXZlbnQsIG1ldi50YXJnZXROb2RlKCksIHRy
dWUsIDAsIGV2ZW50LCB0cnVlKTsKICAgICAKICAgICByZXR1cm4gc3dhbGxvd0V2ZW50OwogfQpA
QCAtMTY2Myw3ICsxNjYyLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmNhbk1vdXNlRG93blN0YXJ0
U2VsZQogICAgICAgICAgICAgCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBub2RlLT5y
ZW5kZXJlcigpOyBjdXJyOyBjdXJyID0gY3Vyci0+cGFyZW50KCkpICAgIAogICAgICAgICBpZiAo
Tm9kZSogbm9kZSA9IGN1cnItPmVsZW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBFdmVudFRh
cmdldE5vZGVDYXN0KG5vZGUpLT5kaXNwYXRjaEV2ZW50Rm9yVHlwZShzZWxlY3RzdGFydEV2ZW50
LCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiBFdmVudFRhcmdldE5vZGVDYXN0KG5v
ZGUpLT5kaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVzKCkuc2VsZWN0c3RhcnRFdmVudCwg
dHJ1ZSwgdHJ1ZSk7CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNjc1LDcgKzE2NzQs
NyBAQCBib29sIEV2ZW50SGFuZGxlcjo6Y2FuTW91c2VEcmFnRXh0ZW5kU2VsCiAgICAgICAgICAg
ICAKICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IG5vZGUtPnJlbmRlcmVyKCk7IGN1cnI7
IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkgICAgCiAgICAgICAgIGlmIChOb2RlKiBub2RlID0gY3Vy
ci0+ZWxlbWVudCgpKQotICAgICAgICAgICAgcmV0dXJuIEV2ZW50VGFyZ2V0Tm9kZUNhc3Qobm9k
ZSktPmRpc3BhdGNoRXZlbnRGb3JUeXBlKHNlbGVjdHN0YXJ0RXZlbnQsIHRydWUsIHRydWUpOwor
ICAgICAgICAgICAgcmV0dXJuIEV2ZW50VGFyZ2V0Tm9kZUNhc3Qobm9kZSktPmRpc3BhdGNoRXZl
bnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5zZWxlY3RzdGFydEV2ZW50LCB0cnVlLCB0cnVlKTsKICAg
ICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE4NjYsNyArMTg2NSw3IEBAIHZvaWQgRXZlbnRI
YW5kbGVyOjpoYW5kbGVLZXlib2FyZFNlbGVjdGkKICAgICAKIHZvaWQgRXZlbnRIYW5kbGVyOjpk
ZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0gICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBrZXlkb3duRXZlbnQpIHsKKyAgIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKICAgICAgICAgbV9mcmFtZS0+ZWRpdG9y
KCktPmhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQpOwogICAgICAgICBpZiAoZXZlbnQtPmRlZmF1
bHRIYW5kbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xODc3LDcgKzE4NzYsNyBAQCB2
b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdEtleWJvYXJkRXZlbnRICiAgICAgICAgaWYgKEFYT2Jq
ZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkKCkpCiAg
ICAgICAgICAgIGhhbmRsZUtleWJvYXJkU2VsZWN0aW9uTW92ZW1lbnQoZXZlbnQpOyAgICAgICAK
ICAgIH0KLSAgIGlmIChldmVudC0+dHlwZSgpID09IGtleXByZXNzRXZlbnQpIHsKKyAgIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7CiAgICAgICAgIG1f
ZnJhbWUtPmVkaXRvcigpLT5oYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50KTsKICAgICAgICAgaWYg
KGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTkyNCw3
ICsxOTIzLDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRyYWdTb3VyY2VNb3ZlZFRvKGNvbgogewog
ICAgIGlmIChkcmFnU3RhdGUoKS5tX2RyYWdTcmMgJiYgZHJhZ1N0YXRlKCkubV9kcmFnU3JjTWF5
QmVESFRNTCkKICAgICAgICAgLy8gZm9yIG5vdyB3ZSBkb24ndCBjYXJlIGlmIGV2ZW50IGhhbmRs
ZXIgY2FuY2VscyBkZWZhdWx0IGJlaGF2aW9yLCBzaW5jZSB0aGVyZSBpcyBub25lCi0gICAgICAg
IGRpc3BhdGNoRHJhZ1NyY0V2ZW50KGRyYWdFdmVudCwgZXZlbnQpOworICAgICAgICBkaXNwYXRj
aERyYWdTcmNFdmVudChldmVudE5hbWVzKCkuZHJhZ0V2ZW50LCBldmVudCk7CiB9CiAgICAgCiB2
b2lkIEV2ZW50SGFuZGxlcjo6ZHJhZ1NvdXJjZUVuZGVkQXQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JiBldmVudCwgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24pCkBAIC0xOTMyLDcgKzE5MzEsNyBA
QCB2b2lkIEV2ZW50SGFuZGxlcjo6ZHJhZ1NvdXJjZUVuZGVkQXQoY29uCiAgICAgaWYgKGRyYWdT
dGF0ZSgpLm1fZHJhZ1NyYyAmJiBkcmFnU3RhdGUoKS5tX2RyYWdTcmNNYXlCZURIVE1MKSB7CiAg
ICAgICAgIGRyYWdTdGF0ZSgpLm1fZHJhZ0NsaXBib2FyZC0+c2V0RGVzdGluYXRpb25PcGVyYXRp
b24ob3BlcmF0aW9uKTsKICAgICAgICAgLy8gZm9yIG5vdyB3ZSBkb24ndCBjYXJlIGlmIGV2ZW50
IGhhbmRsZXIgY2FuY2VscyBkZWZhdWx0IGJlaGF2aW9yLCBzaW5jZSB0aGVyZSBpcyBub25lCi0g
ICAgICAgIGRpc3BhdGNoRHJhZ1NyY0V2ZW50KGRyYWdlbmRFdmVudCwgZXZlbnQpOworICAgICAg
ICBkaXNwYXRjaERyYWdTcmNFdmVudChldmVudE5hbWVzKCkuZHJhZ2VuZEV2ZW50LCBldmVudCk7
CiAgICAgfQogICAgIGZyZWVDbGlwYm9hcmQoKTsKICAgICBkcmFnU3RhdGUoKS5tX2RyYWdTcmMg
PSAwOwpAQCAtMjAzNyw3ICsyMDM2LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZURyYWco
Y29uc3QgTW91cwogICAgICAgICAgICAgfQogICAgICAgICB9IAogICAgICAgICAKLSAgICAgICAg
bV9tb3VzZURvd25NYXlTdGFydERyYWcgPSBkaXNwYXRjaERyYWdTcmNFdmVudChkcmFnc3RhcnRF
dmVudCwgbV9tb3VzZURvd24pCisgICAgICAgIG1fbW91c2VEb3duTWF5U3RhcnREcmFnID0gZGlz
cGF0Y2hEcmFnU3JjRXZlbnQoZXZlbnROYW1lcygpLmRyYWdzdGFydEV2ZW50LCBtX21vdXNlRG93
bikKICAgICAgICAgICAgICYmICFtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNJblBhc3N3b3JkRmll
bGQoKTsKICAgICAgICAgCiAgICAgICAgIC8vIEludmFsaWRhdGUgY2xpcGJvYXJkIGhlcmUgYWdh
aW5zdCBhbnltb3JlIHBhc3RlYm9hcmQgd3JpdGluZyBmb3Igc2VjdXJpdHkuICBUaGUgZHJhZwpA
QCAtMjA2MCw3ICsyMDU5LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZURyYWcoY29uc3Qg
TW91cwogICAgICAgICBib29sIHN0YXJ0ZWREcmFnID0gZHJhZ0NvbnRyb2xsZXIgJiYgZHJhZ0Nv
bnRyb2xsZXItPnN0YXJ0RHJhZyhtX2ZyYW1lLCBkcmFnU3RhdGUoKS5tX2RyYWdDbGlwYm9hcmQu
Z2V0KCksIHNyY09wLCBldmVudC5ldmVudCgpLCBtX21vdXNlRG93blBvcywgZHJhZ1N0YXRlKCku
bV9kcmFnU3JjSXNESFRNTCk7CiAgICAgICAgIGlmICghc3RhcnRlZERyYWcgJiYgZHJhZ1N0YXRl
KCkubV9kcmFnU3JjTWF5QmVESFRNTCkgewogICAgICAgICAgICAgLy8gRHJhZyB3YXMgY2FubmVk
IGF0IHRoZSBsYXN0IG1pbnV0ZSAtIHdlIG93ZSBtX2RyYWdTcmMgYSBEUkFHRU5EIGV2ZW50Ci0g
ICAgICAgICAgICBkaXNwYXRjaERyYWdTcmNFdmVudChkcmFnZW5kRXZlbnQsIGV2ZW50LmV2ZW50
KCkpOworICAgICAgICAgICAgZGlzcGF0Y2hEcmFnU3JjRXZlbnQoZXZlbnROYW1lcygpLmRyYWdl
bmRFdmVudCwgZXZlbnQuZXZlbnQoKSk7CiAgICAgICAgICAgICBtX21vdXNlRG93bk1heVN0YXJ0
RHJhZyA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfSAKQEAgLTIwODUsNyArMjA4NCw3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVUZXh0SW5wdXRFdmVudCgKICAgICAvLyBQbGF0Zm9ybXMg
c2hvdWxkIGRpZmZlcmVudGlhdGUgcmVhbCBjb21tYW5kcyBsaWtlIHNlbGVjdEFsbCBmcm9tIHRl
eHQgaW5wdXQgaW4gZGlzZ3Vpc2UgKGxpa2UgaW5zZXJ0TmV3bGluZSksCiAgICAgLy8gYW5kIGF2
b2lkIGRpc3BhdGNoaW5nIHRleHQgaW5wdXQgZXZlbnRzIGZyb20ga2V5ZG93biBkZWZhdWx0IGhh
bmRsZXJzLgogICAgIGlmICh1bmRlcmx5aW5nRXZlbnQgJiYgdW5kZXJseWluZ0V2ZW50LT5pc0tl
eWJvYXJkRXZlbnQoKSkKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQq
Pih1bmRlcmx5aW5nRXZlbnQpLT50eXBlKCkgPT0ga2V5cHJlc3NFdmVudCk7CisgICAgICAgIEFT
U0VSVChzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4odW5kZXJseWluZ0V2ZW50KS0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KTsKICNlbmRpZgogICAgIEV2ZW50VGFyZ2V0
KiB0YXJnZXQ7CiAgICAgaWYgKHVuZGVybHlpbmdFdmVudCkKSW5kZXg6IFdlYkNvcmUvcGFnZS9G
b2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCi0jaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCkBAIC01MSw3ICs1MCw2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwogCiBGb2N1c0NvbnRyb2xsZXI6OkZvY3VzQ29udHJvbGxlcihQYWdl
KiBwYWdlKQpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDYgQEAgdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsK
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKICNpZm5kZWYgTkRFQlVHICAgIApAQCAtMTMx
NCw3ICsxMzEzLDcgQEAgdm9pZCBGcmFtZTo6Zm9yY2VMYXlvdXRXaXRoUGFnZVdpZHRoUmFuZwog
dm9pZCBGcmFtZTo6c2VuZFJlc2l6ZUV2ZW50KCkKIHsKICAgICBpZiAoRG9jdW1lbnQqIGRvYyA9
IGRvY3VtZW50KCkpCi0gICAgICAgIGRvYy0+ZGlzcGF0Y2hXaW5kb3dFdmVudChFdmVudE5hbWVz
OjpyZXNpemVFdmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgZG9jLT5kaXNwYXRjaFdpbmRv
d0V2ZW50KGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCwgZmFsc2UsIGZhbHNlKTsKIH0KIAogdm9p
ZCBGcmFtZTo6c2VuZFNjcm9sbEV2ZW50KCkKQEAgLTEzMjYsNyArMTMyNSw3IEBAIHZvaWQgRnJh
bWU6OnNlbmRTY3JvbGxFdmVudCgpCiAgICAgRG9jdW1lbnQqIGRvYyA9IGRvY3VtZW50KCk7CiAg
ICAgaWYgKCFkb2MpCiAgICAgICAgIHJldHVybjsKLSAgICBkb2MtPmRpc3BhdGNoRXZlbnRGb3JU
eXBlKHNjcm9sbEV2ZW50LCB0cnVlLCBmYWxzZSk7CisgICAgZG9jLT5kaXNwYXRjaEV2ZW50Rm9y
VHlwZShldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQsIHRydWUsIGZhbHNlKTsKIH0KIAogdm9pZCBG
cmFtZTo6Y2xlYXJUaW1lcnMoRnJhbWVWaWV3ICp2aWV3LCBEb2N1bWVudCAqZG9jdW1lbnQpCklu
ZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjcsOCArNjcsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5n
IG5hbWVzcGFjZSBFdmVudE5hbWVzOwotCiBzdGF0aWMgSGFzaFNldDxQYWdlKj4qIGFsbFBhZ2Vz
OwogCiAjaWZuZGVmIE5ERUJVRwpAQCAtODYsNyArODQsNyBAQCBzdGF0aWMgdm9pZCBuZXR3b3Jr
U3RhdGVDaGFuZ2VkKCkKICAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoZnJhbWUpOwogICAgIH0K
IAotICAgIEF0b21pY1N0cmluZyBldmVudE5hbWUgPSBuZXR3b3JrU3RhdGVOb3RpZmllcigpLm9u
TGluZSgpID8gb25saW5lRXZlbnQgOiBvZmZsaW5lRXZlbnQ7CisgICAgQXRvbWljU3RyaW5nIGV2
ZW50TmFtZSA9IG5ldHdvcmtTdGF0ZU5vdGlmaWVyKCkub25MaW5lKCkgPyBldmVudE5hbWVzKCku
b25saW5lRXZlbnQgOiBldmVudE5hbWVzKCkub2ZmbGluZUV2ZW50OwogICAgIAogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gZnJhbWVzW2ldLT5kb2N1bWVudCgpOwpJbmRleDogV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1NCw3
ICs1NTQsNyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBCiAgICAg
ICAgICAgICAgICAgLy8gU2V0IHRoZSBzdGFydCB0aW1lciB0byB0aGUgaW5pdGlhbCBkZWxheSAo
MCBpZiBubyBkZWxheSkKICAgICAgICAgICAgICAgICBtX3dhaXRlZEZvclJlc3BvbnNlID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgbV9hbmltU3RhdGUgPSBBbmltYXRpb25TdGF0ZVN0YXJ0V2Fp
dFRpbWVyOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uVGltZXJDYWxsYmFjay5zdGFydFRp
bWVyKG1fYW5pbWF0aW9uLT5kZWxheSgpLCBFdmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25TdGFy
dEV2ZW50LCBtX2FuaW1hdGlvbi0+ZGVsYXkoKSk7CisgICAgICAgICAgICAgICAgbV9hbmltYXRp
b25UaW1lckNhbGxiYWNrLnN0YXJ0VGltZXIobV9hbmltYXRpb24tPmRlbGF5KCksIGV2ZW50TmFt
ZXMoKS53ZWJraXRBbmltYXRpb25TdGFydEV2ZW50LCBtX2FuaW1hdGlvbi0+ZGVsYXkoKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBbmltYXRpb25T
dGF0ZVN0YXJ0V2FpdFRpbWVyOgpAQCAtNzE4LDExICs3MTgsMTEgQEAgdm9pZCBBbmltYXRpb25C
YXNlOjphbmltYXRpb25UaW1lckNhbGxiYQogICAgIEFTU0VSVChtX29iamVjdC0+ZG9jdW1lbnQo
KSAmJiAhbV9vYmplY3QtPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpOwogCiAgICAgLy8gRklY
TUU6IHVzZSBhbiBlbnVtCi0gICAgaWYgKGV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjp3ZWJraXRB
bmltYXRpb25TdGFydEV2ZW50KQorICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndl
YmtpdEFuaW1hdGlvblN0YXJ0RXZlbnQpCiAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmlt
YXRpb25TdGF0ZUlucHV0U3RhcnRUaW1lckZpcmVkLCBlbGFwc2VkVGltZSk7Ci0gICAgZWxzZSBp
ZiAoZXZlbnRUeXBlID09IEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2ZW50
KQorICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9u
SXRlcmF0aW9uRXZlbnQpCiAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0
ZUlucHV0TG9vcFRpbWVyRmlyZWQsIGVsYXBzZWRUaW1lKTsKLSAgICBlbHNlIGlmIChldmVudFR5
cGUgPT0gRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uRW5kRXZlbnQpIHsKKyAgICBlbHNlIGlm
IChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50KSB7CiAg
ICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0RW5kVGltZXJGaXJl
ZCwgZWxhcHNlZFRpbWUpOwogICAgICAgICAvLyB8dGhpc3wgbWF5IGJlIGRlbGV0ZWQgaGVyZQog
ICAgIH0KQEAgLTgwNCwxMSArODA0LDExIEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6cHJpbWVFdmVu
dFRpbWVycygpCiAgICAgICAgIC8vIFdlIGFyZSBub3QgYXQgdGhlIGVuZCB5ZXQsIHNlbmQgYSBs
b29wIGV2ZW50CiAgICAgICAgIEFTU0VSVChuZXh0SXRlcmF0aW9uVGltZSA+IDApOwogICAgICAg
ICBtX2FuaW1TdGF0ZSA9IEFuaW1hdGlvblN0YXRlTG9vcGluZzsKLSAgICAgICAgbV9hbmltYXRp
b25UaW1lckNhbGxiYWNrLnN0YXJ0VGltZXIoZHVyYXRpb25MZWZ0LCBFdmVudE5hbWVzOjp3ZWJr
aXRBbmltYXRpb25JdGVyYXRpb25FdmVudCwgbmV4dEl0ZXJhdGlvblRpbWUpOworICAgICAgICBt
X2FuaW1hdGlvblRpbWVyQ2FsbGJhY2suc3RhcnRUaW1lcihkdXJhdGlvbkxlZnQsIGV2ZW50TmFt
ZXMoKS53ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVudCwgbmV4dEl0ZXJhdGlvblRpbWUpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFdlIGFyZSBhdCB0aGUgZW5kLCBzZW5kIGFuIGVuZCBl
dmVudAogICAgICAgICBtX2FuaW1TdGF0ZSA9IEFuaW1hdGlvblN0YXRlRW5kaW5nOwotICAgICAg
ICBtX2FuaW1hdGlvblRpbWVyQ2FsbGJhY2suc3RhcnRUaW1lcihkdXJhdGlvbkxlZnQsIEV2ZW50
TmFtZXM6OndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50LCBuZXh0SXRlcmF0aW9uVGltZSk7CisgICAg
ICAgIG1fYW5pbWF0aW9uVGltZXJDYWxsYmFjay5zdGFydFRpbWVyKGR1cmF0aW9uTGVmdCwgZXZl
bnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50LCBuZXh0SXRlcmF0aW9uVGltZSk7CiAg
ICAgfQogfQogICAKSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmlt
YXRpb24uY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1w
bGljaXRBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQg
SW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXQKIAogdm9pZCBJbXBsaWNpdEFuaW1h
dGlvbjo6b25BbmltYXRpb25FbmQoZG91YmxlIGVsYXBzZWRUaW1lKQogewotICAgIGlmICghc2Vu
ZFRyYW5zaXRpb25FdmVudChFdmVudE5hbWVzOjp3ZWJraXRUcmFuc2l0aW9uRW5kRXZlbnQsIGVs
YXBzZWRUaW1lKSkgeworICAgIGlmICghc2VuZFRyYW5zaXRpb25FdmVudChldmVudE5hbWVzKCku
d2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50LCBlbGFwc2VkVGltZSkpIHsKICAgICAgICAgLy8gV2Ug
ZGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50LCB3aGljaCB3b3VsZCBjYWxsIGVuZEFuaW1hdGlvbigp
LCBzbyB3ZSdsbCBqdXN0IGNhbGwgaXQgaGVyZS4KICAgICAgICAgZW5kQW5pbWF0aW9uKHRydWUp
OwogICAgIH0KQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6b25Bbmlt
YXRpb25FbmQoZAogCiBib29sIEltcGxpY2l0QW5pbWF0aW9uOjpzZW5kVHJhbnNpdGlvbkV2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxhcHNlZFRpbWUpCiB7Ci0g
ICAgaWYgKGV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjp3ZWJraXRUcmFuc2l0aW9uRW5kRXZlbnQp
IHsKKyAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53ZWJraXRUcmFuc2l0aW9uRW5k
RXZlbnQpIHsKICAgICAgICAgRG9jdW1lbnQ6Okxpc3RlbmVyVHlwZSBsaXN0ZW5lclR5cGUgPSBE
b2N1bWVudDo6VFJBTlNJVElPTkVORF9MSVNURU5FUjsKIAogICAgICAgICBpZiAoc2hvdWxkU2Vu
ZEV2ZW50Rm9yTGlzdGVuZXIobGlzdGVuZXJUeXBlKSkgewpAQCAtMTE0LDcgKzExNCw3IEBAIGJv
b2wgSW1wbGljaXRBbmltYXRpb246OnNlbmRUcmFuc2l0aW9uRXYKICAgICAgICAgICAgIGVsZW1l
bnQtPmRpc3BhdGNoV2ViS2l0VHJhbnNpdGlvbkV2ZW50KGV2ZW50VHlwZSwgcHJvcGVydHlOYW1l
LCBlbGFwc2VkVGltZSk7CiAKICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsICh1
bmFuaW1hdGVkKSBzdHlsZQotICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBFdmVudE5hbWVz
Ojp3ZWJraXRBbmltYXRpb25FbmRFdmVudCAmJiBlbGVtZW50LT5yZW5kZXJlcigpKQorICAgICAg
ICAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9uRW5kRXZl
bnQgJiYgZWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICBzZXRDaGFuZ2VkKGVs
ZW1lbnQuZ2V0KCkpOwogCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRGlkIGRpc3BhdGNo
IGFuIGV2ZW50CkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0
aW9uLmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZy
YW1lQW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDE3ICsxNjIsMTcgQEAgYm9v
bCBLZXlmcmFtZUFuaW1hdGlvbjo6c2hvdWxkU2VuZEV2ZW50RgogCiB2b2lkIEtleWZyYW1lQW5p
bWF0aW9uOjpvbkFuaW1hdGlvblN0YXJ0KGRvdWJsZSBlbGFwc2VkVGltZSkKIHsKLSAgICBzZW5k
QW5pbWF0aW9uRXZlbnQoRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uU3RhcnRFdmVudCwgZWxh
cHNlZFRpbWUpOworICAgIHNlbmRBbmltYXRpb25FdmVudChldmVudE5hbWVzKCkud2Via2l0QW5p
bWF0aW9uU3RhcnRFdmVudCwgZWxhcHNlZFRpbWUpOwogfQogCiB2b2lkIEtleWZyYW1lQW5pbWF0
aW9uOjpvbkFuaW1hdGlvbkl0ZXJhdGlvbihkb3VibGUgZWxhcHNlZFRpbWUpCiB7Ci0gICAgc2Vu
ZEFuaW1hdGlvbkV2ZW50KEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2ZW50
LCBlbGFwc2VkVGltZSk7CisgICAgc2VuZEFuaW1hdGlvbkV2ZW50KGV2ZW50TmFtZXMoKS53ZWJr
aXRBbmltYXRpb25JdGVyYXRpb25FdmVudCwgZWxhcHNlZFRpbWUpOwogfQogCiB2b2lkIEtleWZy
YW1lQW5pbWF0aW9uOjpvbkFuaW1hdGlvbkVuZChkb3VibGUgZWxhcHNlZFRpbWUpCiB7Ci0gICAg
aWYgKCFzZW5kQW5pbWF0aW9uRXZlbnQoRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uRW5kRXZl
bnQsIGVsYXBzZWRUaW1lKSkgeworICAgIGlmICghc2VuZEFuaW1hdGlvbkV2ZW50KGV2ZW50TmFt
ZXMoKS53ZWJraXRBbmltYXRpb25FbmRFdmVudCwgZWxhcHNlZFRpbWUpKSB7CiAgICAgICAgIC8v
IFdlIGRpZG4ndCBkaXNwYXRjaCBhbiBldmVudCwgd2hpY2ggd291bGQgY2FsbCBlbmRBbmltYXRp
b24oKSwgc28gd2UnbGwganVzdCBjYWxsIGl0IGhlcmUuCiAgICAgICAgIGVuZEFuaW1hdGlvbih0
cnVlKTsKICAgICB9CkBAIC0xODEsMTIgKzE4MSwxMiBAQCB2b2lkIEtleWZyYW1lQW5pbWF0aW9u
OjpvbkFuaW1hdGlvbkVuZChkCiBib29sIEtleWZyYW1lQW5pbWF0aW9uOjpzZW5kQW5pbWF0aW9u
RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSkK
IHsKICAgICBEb2N1bWVudDo6TGlzdGVuZXJUeXBlIGxpc3RlbmVyVHlwZTsKLSAgICBpZiAoZXZl
bnRUeXBlID09IEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2ZW50KQorICAg
IGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2
ZW50KQogICAgICAgICBsaXN0ZW5lclR5cGUgPSBEb2N1bWVudDo6QU5JTUFUSU9OSVRFUkFUSU9O
X0xJU1RFTkVSOwotICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjp3ZWJraXRB
bmltYXRpb25FbmRFdmVudCkKKyAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygp
LndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50KQogICAgICAgICBsaXN0ZW5lclR5cGUgPSBEb2N1bWVu
dDo6QU5JTUFUSU9ORU5EX0xJU1RFTkVSOwogICAgIGVsc2UgewotICAgICAgICBBU1NFUlQoZXZl
bnRUeXBlID09IEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlvblN0YXJ0RXZlbnQpOworICAgICAg
ICBBU1NFUlQoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25TdGFydEV2
ZW50KTsKICAgICAgICAgbGlzdGVuZXJUeXBlID0gRG9jdW1lbnQ6OkFOSU1BVElPTlNUQVJUX0xJ
U1RFTkVSOwogICAgIH0KIApAQCAtMjA3LDcgKzIwNyw3IEBAIGJvb2wgS2V5ZnJhbWVBbmltYXRp
b246OnNlbmRBbmltYXRpb25FdmUKICAgICAgICAgZWxlbWVudC0+ZGlzcGF0Y2hXZWJLaXRBbmlt
YXRpb25FdmVudChldmVudFR5cGUsIG1fa2V5ZnJhbWVzLmFuaW1hdGlvbk5hbWUoKSwgZWxhcHNl
ZFRpbWUpOwogCiAgICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsICh1bmFuaW1hdGVkKSBz
dHlsZQotICAgICAgICBpZiAoZXZlbnRUeXBlID09IEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlv
bkVuZEV2ZW50ICYmIGVsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgICAgIGlmIChldmVudFR5cGUg
PT0gZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50ICYmIGVsZW1lbnQtPnJlbmRl
cmVyKCkpCiAgICAgICAgICAgICBzZXRDaGFuZ2VkKGVsZW1lbnQuZ2V0KCkpOwogCiAgICAgICAg
IHJldHVybiB0cnVlOyAvLyBEaWQgZGlzcGF0Y2ggYW4gZXZlbnQKSW5kZXg6IFdlYkNvcmUvcGFn
ZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvZ3Rr
L0V2ZW50SGFuZGxlckd0ay5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9wYWdlL2d0
ay9FdmVudEhhbmRsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAj
aW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAKICNpbmNsdWRlICJDbGlwYm9hcmRHdGsuaCIKLSNp
bmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUg
IkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC00Myw4ICs0Miw2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0K
IHVuc2lnbmVkIEV2ZW50SGFuZGxlcjo6c19hY2Nlc3NLZXlNb2RpZmllcnMgPSBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQ6OkFsdEtleTsKIAogY29uc3QgZG91YmxlIEV2ZW50SGFuZGxlcjo6VGV4dERy
YWdEZWxheSA9IDAuMDsKSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCShyZXZp
c2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw4ICs0NSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNp
bmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0KIHVuc2lnbmVkIEV2ZW50SGFuZGxlcjo6c19hY2Nl
c3NLZXlNb2RpZmllcnMgPSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkN0cmxLZXkgfCBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQ6OkFsdEtleTsKIAogY29uc3QgZG91YmxlIEV2ZW50SGFuZGxlcjo6VGV4
dERyYWdEZWxheSA9IDAuMTU7CkBAIC05Nyw3ICs5NSw3IEBAIFBhc3NSZWZQdHI8S2V5Ym9hcmRF
dmVudD4gRXZlbnRIYW5kbGVyOjoKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0tleWJvYXJkT3B0aW9u
VGFiKEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAgIHJldHVybiBldmVudAotICAgICAgICAm
JiAoZXZlbnQtPnR5cGUoKSA9PSBrZXlkb3duRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBrZXlw
cmVzc0V2ZW50KQorICAgICAgICAmJiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5
ZG93bkV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQp
CiAgICAgICAgICYmIGV2ZW50LT5hbHRLZXkoKQogICAgICAgICAmJiBldmVudC0+a2V5SWRlbnRp
ZmllcigpID09ICJVKzAwMDkiOyAgICAKIH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvRnJhbWVN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQkocmV2aXNp
b24gMzgwNjQpCisrKyBXZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw3ICszNSw2IEBACiAjaW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgogI2ltcG9ydCAi
RWRpdG9yQ2xpZW50LmgiCiAjaW1wb3J0ICJFdmVudC5oIgotI2ltcG9ydCAiRXZlbnROYW1lcy5o
IgogI2ltcG9ydCAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbXBvcnQgIkZyYW1lUHJpdmF0ZS5o
IgogI2ltcG9ydCAiRnJhbWVWaWV3LmgiCkBAIC03NSw3ICs3NCw2IEBAIHVzaW5nIEpTQzo6SlNM
b2NrOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVz
OwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogLy8gRWl0aGVyIGdldCBjYWNoZWQgcmVn
ZXhwIG9yIGJ1aWxkIG9uZSB0aGF0IG1hdGNoZXMgYW55IG9mIHRoZSBsYWJlbHMuCkluZGV4OiBX
ZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9xdC9FdmVudEhhbmRsZXJRdC5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9w
YWdlL3F0L0V2ZW50SGFuZGxlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsOCArNTYsNiBA
QCBRVF9FTkRfTkFNRVNQQUNFCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNw
YWNlIEV2ZW50TmFtZXM7Ci0KIHVuc2lnbmVkIEV2ZW50SGFuZGxlcjo6c19hY2Nlc3NLZXlNb2Rp
ZmllcnMgPSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkN0cmxLZXk7CiAKIGNvbnN0IGRvdWJsZSBF
dmVudEhhbmRsZXI6OlRleHREcmFnRGVsYXkgPSAwLjA7CkBAIC02NSw3ICs2Myw3IEBAIGNvbnN0
IGRvdWJsZSBFdmVudEhhbmRsZXI6OlRleHREcmFnRGVsYXkKIHN0YXRpYyBib29sIGlzS2V5Ym9h
cmRPcHRpb25UYWIoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgcmV0dXJuIGV2ZW50Ci0g
ICAgICAgICYmIChldmVudC0+dHlwZSgpID09IGtleWRvd25FdmVudCB8fCBldmVudC0+dHlwZSgp
ID09IGtleXByZXNzRXZlbnQpCisgICAgICAgICYmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5rZXlkb3duRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJl
c3NFdmVudCkKICAgICAgICAgJiYgZXZlbnQtPmFsdEtleSgpCiAgICAgICAgICYmIGV2ZW50LT5r
ZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAwOSI7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvQXRvbWljU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQv
QXRvbWljU3RyaW5nLmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvQXRvbWljU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsMTEgQEAKICNp
bmNsdWRlIDxranMvaWRlbnRpZmllci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKKyNp
ZiBFTkFCTEUoV09SS0VSUykKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KK3VzaW5n
IG5hbWVzcGFjZSBXVEY7CisjZW5kaWYKKwogI2lmIFVTRShKU0MpCiB1c2luZyBKU0M6OklkZW50
aWZpZXI7CiB1c2luZyBKU0M6OlVTdHJpbmc7CkBAIC0zOCw3ICs0MywyMCBAQCB1c2luZyBKU0M6
OlVTdHJpbmc7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIEhhc2hTZXQ8U3RyaW5n
SW1wbCo+KiBzdHJpbmdUYWJsZTsKKyNpZiBFTkFCTEUoV09SS0VSUykKK3N0YXRpYyBUaHJlYWRT
cGVjaWZpYzxIYXNoU2V0PFN0cmluZ0ltcGwqPiA+KiBzdGF0aWNTdHJpbmdUYWJsZTsKKyNlbHNl
CitzdGF0aWMgSGFzaFNldDxTdHJpbmdJbXBsKj4qIHN0YXRpY1N0cmluZ1RhYmxlOworI2VuZGlm
CisKK3N0YXRpYyBpbmxpbmUgSGFzaFNldDxTdHJpbmdJbXBsKj4qIHN0cmluZ1RhYmxlKCkKK3sK
KyNpZiBFTkFCTEUoV09SS0VSUykKKyAgICByZXR1cm4gKnN0YXRpY1N0cmluZ1RhYmxlOworI2Vs
c2UKKyAgICByZXR1cm4gc3RhdGljU3RyaW5nVGFibGU7CisjZW5kaWYKK30KIAogc3RydWN0IENT
dHJpbmdUcmFuc2xhdG9yIHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBjaGFyKiBj
KQpAQCAtODAsNyArOTgsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IEF0b21pY1N0cmluZzo6
YWRkCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICghKmMpCiAgICAgICAgIHJldHVybiBTdHJp
bmdJbXBsOjplbXB0eSgpOyAgICAKLSAgICBwYWlyPEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVy
YXRvciwgYm9vbD4gYWRkUmVzdWx0ID0gc3RyaW5nVGFibGUtPmFkZDxjb25zdCBjaGFyKiwgQ1N0
cmluZ1RyYW5zbGF0b3I+KGMpOworICAgIHBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJh
dG9yLCBib29sPiBhZGRSZXN1bHQgPSBzdHJpbmdUYWJsZSgpLT5hZGQ8Y29uc3QgY2hhciosIENT
dHJpbmdUcmFuc2xhdG9yPihjKTsKICAgICBpZiAoIWFkZFJlc3VsdC5zZWNvbmQpCiAgICAgICAg
IHJldHVybiAqYWRkUmVzdWx0LmZpcnN0OwogICAgIHJldHVybiBhZG9wdFJlZigqYWRkUmVzdWx0
LmZpcnN0KTsKQEAgLTE3Miw3ICsxOTAsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IEF0b21p
Y1N0cmluZzo6YWRkCiAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgpOwogICAgIAog
ICAgIFVDaGFyQnVmZmVyIGJ1ZiA9IHsgcywgbGVuZ3RoIH07IAotICAgIHBhaXI8SGFzaFNldDxT
dHJpbmdJbXBsKj46Oml0ZXJhdG9yLCBib29sPiBhZGRSZXN1bHQgPSBzdHJpbmdUYWJsZS0+YWRk
PFVDaGFyQnVmZmVyLCBVQ2hhckJ1ZmZlclRyYW5zbGF0b3I+KGJ1Zik7CisgICAgcGFpcjxIYXNo
U2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IGFkZFJlc3VsdCA9IHN0cmluZ1RhYmxl
KCktPmFkZDxVQ2hhckJ1ZmZlciwgVUNoYXJCdWZmZXJUcmFuc2xhdG9yPihidWYpOwogICAgIGlm
ICghYWRkUmVzdWx0LnNlY29uZCkKICAgICAgICAgcmV0dXJuICphZGRSZXN1bHQuZmlyc3Q7CiAg
ICAgcmV0dXJuIGFkb3B0UmVmKCphZGRSZXN1bHQuZmlyc3QpOwpAQCAtMTkxLDcgKzIwOSw3IEBA
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQKICAgICAgICAgcmV0dXJu
IFN0cmluZ0ltcGw6OmVtcHR5KCk7CiAKICAgICBVQ2hhckJ1ZmZlciBidWYgPSB7cywgbGVuZ3Ro
fTsgCi0gICAgcGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IGFkZFJl
c3VsdCA9IHN0cmluZ1RhYmxlLT5hZGQ8VUNoYXJCdWZmZXIsIFVDaGFyQnVmZmVyVHJhbnNsYXRv
cj4oYnVmKTsKKyAgICBwYWlyPEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVyYXRvciwgYm9vbD4g
YWRkUmVzdWx0ID0gc3RyaW5nVGFibGUoKS0+YWRkPFVDaGFyQnVmZmVyLCBVQ2hhckJ1ZmZlclRy
YW5zbGF0b3I+KGJ1Zik7CiAgICAgaWYgKCFhZGRSZXN1bHQuc2Vjb25kKQogICAgICAgICByZXR1
cm4gKmFkZFJlc3VsdC5maXJzdDsKICAgICByZXR1cm4gYWRvcHRSZWYoKmFkZFJlc3VsdC5maXJz
dCk7CkBAIC0yMDUsNyArMjIzLDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBBdG9taWNTdHJp
bmc6OmFkZAogICAgIGlmIChyLT5sZW5ndGgoKSA9PSAwKQogICAgICAgICByZXR1cm4gU3RyaW5n
SW1wbDo6ZW1wdHkoKTsKICAgICAKLSAgICBTdHJpbmdJbXBsKiByZXN1bHQgPSAqc3RyaW5nVGFi
bGUtPmFkZChyKS5maXJzdDsKKyAgICBTdHJpbmdJbXBsKiByZXN1bHQgPSAqc3RyaW5nVGFibGUo
KS0+YWRkKHIpLmZpcnN0OwogICAgIGlmIChyZXN1bHQgPT0gcikKICAgICAgICAgci0+bV9pblRh
YmxlID0gdHJ1ZTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjEzLDcgKzIzMSw3IEBAIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQKIAogdm9pZCBBdG9taWNTdHJpbmc6
OnJlbW92ZShTdHJpbmdJbXBsKiByKQogewotICAgIHN0cmluZ1RhYmxlLT5yZW1vdmUocik7Cisg
ICAgc3RyaW5nVGFibGUoKS0+cmVtb3ZlKHIpOwogfQogCiAjaWYgVVNFKEpTQykKQEAgLTIyOCw3
ICsyNDYsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IEF0b21pY1N0cmluZzo6YWRkCiAgICAg
ICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgpOwogCiAgICAgSGFzaEFuZENoYXJhY3RlcnMg
YnVmZmVyID0geyBzdHJpbmctPmNvbXB1dGVkSGFzaCgpLCBzdHJpbmctPmRhdGEoKSwgbGVuZ3Ro
IH07IAotICAgIHBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yLCBib29sPiBhZGRS
ZXN1bHQgPSBzdHJpbmdUYWJsZS0+YWRkPEhhc2hBbmRDaGFyYWN0ZXJzLCBIYXNoQW5kQ2hhcmFj
dGVyc1RyYW5zbGF0b3I+KGJ1ZmZlcik7CisgICAgcGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6
aXRlcmF0b3IsIGJvb2w+IGFkZFJlc3VsdCA9IHN0cmluZ1RhYmxlKCktPmFkZDxIYXNoQW5kQ2hh
cmFjdGVycywgSGFzaEFuZENoYXJhY3RlcnNUcmFuc2xhdG9yPihidWZmZXIpOwogICAgIGlmICgh
YWRkUmVzdWx0LnNlY29uZCkKICAgICAgICAgcmV0dXJuICphZGRSZXN1bHQuZmlyc3Q7CiAgICAg
cmV0dXJuIGFkb3B0UmVmKCphZGRSZXN1bHQuZmlyc3QpOwpAQCAtMjQ1LDcgKzI2Myw3IEBAIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQKICAgICAgICAgcmV0dXJuIFN0
cmluZ0ltcGw6OmVtcHR5KCk7CiAKICAgICBIYXNoQW5kQ2hhcmFjdGVycyBidWZmZXIgPSB7IHN0
cmluZy0+aGFzaCgpLCBzdHJpbmctPmRhdGEoKSwgbGVuZ3RoIH07IAotICAgIHBhaXI8SGFzaFNl
dDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yLCBib29sPiBhZGRSZXN1bHQgPSBzdHJpbmdUYWJsZS0+
YWRkPEhhc2hBbmRDaGFyYWN0ZXJzLCBIYXNoQW5kQ2hhcmFjdGVyc1RyYW5zbGF0b3I+KGJ1ZmZl
cik7CisgICAgcGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IGFkZFJl
c3VsdCA9IHN0cmluZ1RhYmxlKCktPmFkZDxIYXNoQW5kQ2hhcmFjdGVycywgSGFzaEFuZENoYXJh
Y3RlcnNUcmFuc2xhdG9yPihidWZmZXIpOwogICAgIGlmICghYWRkUmVzdWx0LnNlY29uZCkKICAg
ICAgICAgcmV0dXJuICphZGRSZXN1bHQuZmlyc3Q7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCphZGRS
ZXN1bHQuZmlyc3QpOwpAQCAtMjYzLDggKzI4MSw4IEBAIEF0b21pY1N0cmluZ0ltcGwqIEF0b21p
Y1N0cmluZzo6ZmluZChjb24KICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEF0b21pY1N0cmlu
Z0ltcGwqPihTdHJpbmdJbXBsOjplbXB0eSgpKTsKIAogICAgIEhhc2hBbmRDaGFyYWN0ZXJzIGJ1
ZmZlciA9IHsgc3RyaW5nLT5jb21wdXRlZEhhc2goKSwgc3RyaW5nLT5kYXRhKCksIGxlbmd0aCB9
OyAKLSAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBzdHJpbmdU
YWJsZS0+ZmluZDxIYXNoQW5kQ2hhcmFjdGVycywgSGFzaEFuZENoYXJhY3RlcnNUcmFuc2xhdG9y
PihidWZmZXIpOwotICAgIGlmIChpdGVyYXRvciA9PSBzdHJpbmdUYWJsZS0+ZW5kKCkpCisgICAg
SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ZXJhdG9yID0gc3RyaW5nVGFibGUoKS0+
ZmluZDxIYXNoQW5kQ2hhcmFjdGVycywgSGFzaEFuZENoYXJhY3RlcnNUcmFuc2xhdG9yPihidWZm
ZXIpOworICAgIGlmIChpdGVyYXRvciA9PSBzdHJpbmdUYWJsZSgpLT5lbmQoKSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEF0b21pY1N0cmluZ0ltcGwqPigqaXRl
cmF0b3IpOwogfQpAQCAtMjgyLDkgKzMwMCwxNCBAQCBERUZJTkVfR0xPQkFMKEF0b21pY1N0cmlu
Zywgc3RhckF0b20sICIqCiAKIHZvaWQgQXRvbWljU3RyaW5nOjppbml0KCkKIHsKKyAgICAvLyBJ
bml0aWFsaXphdGlvbiBpcyBub3QgdGhyZWFkIHNhZmUsIHNvIHRoaXMgZnVuY3Rpb24gbXVzdCBi
ZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQgZmlyc3QuCiAgICAgc3RhdGljIGJvb2wgaW5p
dGlhbGl6ZWQ7CiAgICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBzdHJpbmdUYWJsZSA9
IG5ldyBIYXNoU2V0PFN0cmluZ0ltcGwqPjsKKyNpZiBFTkFCTEUoV09SS0VSUykKKyAgICAgICAg
c3RhdGljU3RyaW5nVGFibGUgPSBuZXcgVGhyZWFkU3BlY2lmaWM8SGFzaFNldDxTdHJpbmdJbXBs
Kj4gPjsKKyNlbHNlCisgICAgICAgIHN0YXRpY1N0cmluZ1RhYmxlID0gbmV3IEhhc2hTZXQ8U3Ry
aW5nSW1wbCo+OworI2VuZGlmCiAKICAgICAgICAgLy8gVXNlIHBsYWNlbWVudCBuZXcgdG8gaW5p
dGlhbGl6ZSB0aGUgZ2xvYmFscy4KICAgICAgICAgbmV3ICgodm9pZCopJm51bGxBdG9tKSBBdG9t
aWNTdHJpbmc7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5oCShyZXZpc2lv
biAzODA2NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM0LDYgKzEzNCw3IEBAIGlubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNl
KGNvbnN0IGNoYXIKIGlubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IFN0cmluZyYg
YSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShhLmlt
cGwoKSwgYi5pbXBsKCkpOyB9CiAKIC8vIERlZmluZSBleHRlcm5hbCBnbG9iYWwgdmFyaWFibGVz
IGZvciB0aGUgY29tbW9ubHkgdXNlZCBhdG9taWMgc3RyaW5ncy4KKy8vIFRoZXNlIGFyZSBvbmx5
IHVzYWJsZSBmcm9tIHRoZSBtYWluIHRocmVhZC4KICNpZm5kZWYgQVRPTUlDU1RSSU5HX0hJREVf
R0xPQkFMUwogICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgbnVsbEF0b207CiAgICAgZXh0
ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBlbXB0eUF0b207CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMv
UGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcu
Y3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJh
bWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTc5LDcgKzc4LDYgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgRXZl
bnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHN0YXRpYyBpbnQgc19jYWxs
aW5nUGx1Z2luOwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZp
c2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUg
IkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1l
TG9hZFJlcXVlc3QuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKQEAgLTgxLDcgKzgwLDYgQEAg
dXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1l
c3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHZvaWQgUGx1
Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcGx1Z2lu
cy9xdC9QbHVnaW5WaWV3UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9xdC9Q
bHVnaW5WaWV3UXQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcGx1Z2lucy9xdC9Q
bHVnaW5WaWV3UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIu
aCIKICNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgi
CkBAIC03NCw3ICs3Myw2IEBAIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwogCiB2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgpIGNvbnN0Cklu
ZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHJldmlzaW9uIDM4MDY0KQor
KysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTIsNyArOTIsNiBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIAogY29uc3QgTFBDV1NUUiBrV2ViUGx1Z2luVmlld2Rvd0NsYXNzTmFtZSA9IEwiV2Vi
UGx1Z2luVmlldyI7CkBAIC0zOTcsMTAgKzM5NiwxMCBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRs
ZUtleWJvYXJkRXZlbnQoS2V5CiAKICAgICBucEV2ZW50LndQYXJhbSA9IGV2ZW50LT5rZXlDb2Rl
KCk7ICAgIAogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0ga2V5ZG93bkV2ZW50KSB7CisgICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgewogICAgICAg
ICBucEV2ZW50LmV2ZW50ID0gV01fS0VZRE9XTjsKICAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAw
OwotICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBrZXl1cEV2ZW50KSB7CisgICAgfSBl
bHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KSB7CiAgICAg
ICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9LRVlVUDsKICAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAw
eDgwMDA7CiAgICAgfQpAQCAtNDI3LDkgKzQyNiw5IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
TW91c2VFdmVudChNb3VzZUUKICAgICBpZiAoZXZlbnQtPnNoaWZ0S2V5KCkpCiAgICAgICAgIG5w
RXZlbnQud1BhcmFtIHw9IE1LX1NISUZUOwogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gbW91
c2Vtb3ZlRXZlbnQgfHwKLSAgICAgICAgZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW91dEV2ZW50IHx8
IAotICAgICAgICBldmVudC0+dHlwZSgpID09IG1vdXNlb3ZlckV2ZW50KSB7CisgICAgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50IHx8CisgICAgICAgIGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQgfHwgCisgICAgICAgIGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7CiAgICAgICAgIG5w
RXZlbnQuZXZlbnQgPSBXTV9NT1VTRU1PVkU7CiAgICAgICAgIGlmIChldmVudC0+YnV0dG9uRG93
bigpKQogICAgICAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKQEAgLTQ0NCw3ICs0
NDMsNyBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKGV2ZW50
LT50eXBlKCkgPT0gbW91c2Vkb3duRXZlbnQpIHsKKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgewogICAgICAgICAvLyBGb2N1cyB0aGUg
cGx1Z2luCiAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQog
ICAgICAgICAgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEZvY3VzZWRGcmFtZShtX3Bh
cmVudEZyYW1lKTsKQEAgLTQ2MCw3ICs0NTksNyBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1v
dXNlRXZlbnQoTW91c2VFCiAgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX1JCVVRU
T05ET1dOOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlm
IChldmVudC0+dHlwZSgpID09IG1vdXNldXBFdmVudCkgeworICAgIH0gZWxzZSBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KSB7CiAgICAgICAgIHN3aXRjaCAo
ZXZlbnQtPmJ1dHRvbigpKSB7CiAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAg
bnBFdmVudC5ldmVudCA9IFdNX0xCVVRUT05VUDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL01l
ZGlhQ29udHJvbEVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9N
ZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFt
ZXM7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiAvLyBGSVhNRTogVGhlc2UgY29uc3Rh
bnRzIG1heSBuZWVkIHRvIGJlIHR3ZWFrZWQgdG8gYmV0dGVyIG1hdGNoIHRoZSBzZWVraW5nIGlu
IHRoZSBRVCBwbHVnaW4KQEAgLTEwNCw3ICsxMDMsNyBAQCBNZWRpYUNvbnRyb2xNdXRlQnV0dG9u
RWxlbWVudDo6TWVkaWFDb250CiAKIHZvaWQgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewotICAgIGlmIChldmVudC0+dHlw
ZSgpID09IGNsaWNrRXZlbnQpIHsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkuY2xpY2tFdmVudCkgewogICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0TXV0ZWQoIW1fbWVk
aWFFbGVtZW50LT5tdXRlZCgpKTsKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CiAgICAgfQpAQCAtMTIwLDcgKzExOSw3IEBAIE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50
OjpNZWRpYUNvbnQKIAogdm9pZCBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0g
Y2xpY2tFdmVudCkgeworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlj
a0V2ZW50KSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAgIGlmIChtX21lZGlh
RWxlbWVudC0+Y2FuUGxheSgpKQogICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBsYXkoZWMp
OwpAQCAtMTQ0LDcgKzE0Myw3IEBAIE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50OjpNZWRp
YUNvbnQKIAogdm9pZCBNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gbW91c2Vk
b3duRXZlbnQpIHsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vk
b3duRXZlbnQpIHsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1l
KCkpIHsKICAgICAgICAgICAgIG1fY2FwdHVyaW5nID0gdHJ1ZTsKICAgICAgICAgICAgIGZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKHRoaXMpOwpAQCAt
MTUzLDcgKzE1Miw3IEBAIHZvaWQgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQ6OmRlZmEK
ICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBhdXNlKGVjKTsKICAgICAgICAgbV9zZWVrVGltZXIu
c3RhcnRSZXBlYXRpbmcoY1NlZWtSZXBlYXREZWxheSk7CiAgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOwotICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBtb3VzZXVwRXZl
bnQpIHsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
dXBFdmVudCkgewogICAgICAgICBpZiAobV9jYXB0dXJpbmcpCiAgICAgICAgICAgICBpZiAoRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewogICAgICAgICAgICAgICAgIG1fY2Fw
dHVyaW5nID0gZmFsc2U7CkBAIC0xOTksNyArMTk4LDcgQEAgdm9pZCBNZWRpYUNvbnRyb2xUaW1l
bGluZUVsZW1lbnQ6OmRlZmF1bAogICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIoZXZlbnQpOwogCiAgICAgZmxvYXQgdGltZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
dmFsdWUoKS50b0RvdWJsZSgpKTsKLSAgICBpZiAob2xkVGltZSAhPSB0aW1lIHx8IGV2ZW50LT50
eXBlKCkgPT0gaW5wdXRFdmVudCkgeworICAgIGlmIChvbGRUaW1lICE9IHRpbWUgfHwgZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkuaW5wdXRFdmVudCkgewogICAgICAgICBFeGNlcHRpb25D
b2RlIGVjOwogICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0Q3VycmVudFRpbWUodGltZSwgZWMp
OwogICAgIH0KQEAgLTIzNCw3ICsyMzMsNyBAQCBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9u
RWxlbWVudDo6TWVkCiAKIHZvaWQgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewotICAgIGlmIChldmVudC0+dHlw
ZSgpID09IGNsaWNrRXZlbnQpIHsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkuY2xpY2tFdmVudCkgewogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAg
ICB9CiAgICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsOCArNDEsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBF
dmVudE5hbWVzOwotCiBSZW5kZXJGcmFtZVNldDo6UmVuZGVyRnJhbWVTZXQoSFRNTEZyYW1lU2V0
RWxlbWVudCogZnJhbWVTZXQpCiAgICAgOiBSZW5kZXJDb250YWluZXIoZnJhbWVTZXQpCiAgICAg
LCBtX2lzUmVzaXppbmcoZmFsc2UpCkBAIC01NjUsNyArNTYzLDcgQEAgYm9vbCBSZW5kZXJGcmFt
ZVNldDo6dXNlclJlc2l6ZShNb3VzZUV2ZQogICAgIGlmICghbV9pc1Jlc2l6aW5nKSB7CiAgICAg
ICAgIGlmIChuZWVkc0xheW91dCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoZXZ0LT50eXBlKCkgPT0gbW91c2Vkb3duRXZlbnQgJiYgZXZ0LT5idXR0b24oKSA9PSBM
ZWZ0QnV0dG9uKSB7CisgICAgICAgIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2Vkb3duRXZlbnQgJiYgZXZ0LT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgICAg
ICBzdGFydFJlc2l6aW5nKG1fY29scywgZXZ0LT5wYWdlWCgpIC0geFBvcygpKTsKICAgICAgICAg
ICAgIHN0YXJ0UmVzaXppbmcobV9yb3dzLCBldnQtPnBhZ2VZKCkgLSB5UG9zKCkpOwogICAgICAg
ICAgICAgaWYgKG1fY29scy5tX3NwbGl0QmVpbmdSZXNpemVkICE9IG5vU3BsaXQgfHwgbV9yb3dz
Lm1fc3BsaXRCZWluZ1Jlc2l6ZWQgIT0gbm9TcGxpdCkgewpAQCAtNTc0LDEwICs1NzIsMTAgQEAg
Ym9vbCBSZW5kZXJGcmFtZVNldDo6dXNlclJlc2l6ZShNb3VzZUV2ZQogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGV2dC0+dHlwZSgpID09IG1vdXNl
bW92ZUV2ZW50IHx8IChldnQtPnR5cGUoKSA9PSBtb3VzZXVwRXZlbnQgJiYgZXZ0LT5idXR0b24o
KSA9PSBMZWZ0QnV0dG9uKSkgeworICAgICAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlbW92ZUV2ZW50IHx8IChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1
cEV2ZW50ICYmIGV2dC0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikpIHsKICAgICAgICAgICAgIGNv
bnRpbnVlUmVzaXppbmcobV9jb2xzLCBldnQtPnBhZ2VYKCkgLSB4UG9zKCkpOwogICAgICAgICAg
ICAgY29udGludWVSZXNpemluZyhtX3Jvd3MsIGV2dC0+cGFnZVkoKSAtIHlQb3MoKSk7Ci0gICAg
ICAgICAgICBpZiAoZXZ0LT50eXBlKCkgPT0gbW91c2V1cEV2ZW50ICYmIGV2dC0+YnV0dG9uKCkg
PT0gTGVmdEJ1dHRvbikgeworICAgICAgICAgICAgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZXVwRXZlbnQgJiYgZXZ0LT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAg
ICAgICAgICAgICAgc2V0SXNSZXNpemluZyhmYWxzZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShy
ZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODUsNyArODUsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKIAogY29uc3QgUmVuZGVyTGF5ZXI6OlNjcm9sbEFsaWdubWVudCBS
ZW5kZXJMYXllcjo6Z0FsaWduQ2VudGVySWZOZWVkZWQgPSB7IFJlbmRlckxheWVyOjpub1Njcm9s
bCwgUmVuZGVyTGF5ZXI6OmFsaWduQ2VudGVyLCBSZW5kZXJMYXllcjo6YWxpZ25Ub0Nsb3Nlc3RF
ZGdlIH07CkBAIC04MzksNyArODM4LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZz
ZXQoaW50IHgsIAogICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgRE9NIGV2ZW50LgogICAgIGlm
ICh2aWV3KSB7CiAgICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHZpZXctPmZyYW1l
VmlldygpKQotICAgICAgICAgICAgZnJhbWVWaWV3LT5zY2hlZHVsZUV2ZW50KEV2ZW50OjpjcmVh
dGUoc2Nyb2xsRXZlbnQsIGZhbHNlLCBmYWxzZSksIEV2ZW50VGFyZ2V0Tm9kZUNhc3QocmVuZGVy
ZXIoKS0+ZWxlbWVudCgpKSk7CisgICAgICAgICAgICBmcmFtZVZpZXctPnNjaGVkdWxlRXZlbnQo
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQsIGZhbHNlLCBmYWxzZSksIEV2
ZW50VGFyZ2V0Tm9kZUNhc3QocmVuZGVyZXIoKS0+ZWxlbWVudCgpKSk7CiAgICAgfQogfQogCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgs
NyArNTgsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
ICAKIGNvbnN0IGludCByb3dTcGFjaW5nID0gMTsKQEAgLTUyOCw3ICs1MjcsNyBAQCB2b2lkIFJl
bmRlckxpc3RCb3g6OnZhbHVlQ2hhbmdlZChTY3JvbGxiCiAgICAgICAgIG1faW5kZXhPZmZzZXQg
PSBuZXdPZmZzZXQ7CiAgICAgICAgIHJlcGFpbnQoKTsKICAgICAgICAgLy8gRmlyZSB0aGUgc2Ny
b2xsIERPTSBldmVudC4KLSAgICAgICAgRXZlbnRUYXJnZXROb2RlQ2FzdChub2RlKCkpLT5kaXNw
YXRjaEV2ZW50Rm9yVHlwZShzY3JvbGxFdmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgRXZl
bnRUYXJnZXROb2RlQ2FzdChub2RlKCkpLT5kaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVz
KCkuc2Nyb2xsRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWVkaWEuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1lZGlhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsNiBAQCB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBF
dmVudE5hbWVzOwotCiBzdGF0aWMgY29uc3QgZG91YmxlIGNUaW1lVXBkYXRlUmVwZWF0RGVsYXkg
PSAwLjI7CiBzdGF0aWMgY29uc3QgZG91YmxlIGNPcGFjaXR5QW5pbWF0aW9uUmVwZWF0RGVsYXkg
PSAwLjA1OwogLy8gRklYTUUgZ2V0IHRoaXMgZnJvbSBzdHlsZQpAQCAtMzc2LDExICszNzQsMTEg
QEAgdm9pZCBSZW5kZXJNZWRpYTo6Zm9yd2FyZEV2ZW50KEV2ZW50KiBldgogICAgICAgICBpZiAo
bV9mdWxsc2NyZWVuQnV0dG9uICYmIG1fZnVsbHNjcmVlbkJ1dHRvbi0+cmVuZGVyZXIoKSAmJiBt
X2Z1bGxzY3JlZW5CdXR0b24tPnJlbmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCku
Y29udGFpbnMocG9pbnQpKQogICAgICAgICAgICAgbV9mdWxsc2NyZWVuQnV0dG9uLT5kZWZhdWx0
RXZlbnRIYW5kbGVyKGV2ZW50KTsKICAgICAgICAgCi0gICAgICAgIGlmIChldmVudC0+dHlwZSgp
ID09IG1vdXNlb3ZlckV2ZW50KSB7CisgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkgewogICAgICAgICAgICAgbV9tb3VzZU92ZXIgPSB0cnVl
OwogICAgICAgICAgICAgdXBkYXRlQ29udHJvbFZpc2liaWxpdHkoKTsKICAgICAgICAgfQotICAg
ICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW91dEV2ZW50KSB7CisgICAgICAgIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KSB7CiAgICAgICAgICAg
ICAvLyBGSVhNRTogbW92aW5nIG92ZXIgc2Nyb2xsYmFyIHRodW1iIGdlbmVyYXRlcyBtb3VzZW91
dCBmb3IgdGhlIGFuY2VzdG9yIG1lZGlhIGVsZW1lbnQgZm9yIHNvbWUgcmVhc29uCiAgICAgICAg
ICAgICBtX21vdXNlT3ZlciA9IGFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkuY29udGFpbnMocG9p
bnQpOwogICAgICAgICAgICAgdXBkYXRlQ29udHJvbFZpc2liaWxpdHkoKTsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBACiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXZl
bnRIYW5kbGVyLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC02OSw3
ICs2OCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
CiAjaWZuZGVmIE5ERUJVRwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCShyZXZp
c2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAgdXNpbmcgc3RkOjptaW47CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogCiBjb25zdCBpbnQgZGVmYXVsdFRyYWNrTGVuZ3RoID0gMTI5OwpAQCAtNzIs
NyArNzEsNyBAQCBIVE1MU2xpZGVyVGh1bWJFbGVtZW50OjpIVE1MU2xpZGVyVGh1bWJFCiB2b2lk
IEhUTUxTbGlkZXJUaHVtYkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50
KQogewogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlID0gZXZlbnQtPnR5cGUoKTsK
LSAgICBpZiAoZXZlbnRUeXBlID09IG1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZl
bnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0
QnV0dG9uKSB7CisgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZl
bnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihl
dmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAgICAgTW91c2VFdmVudCogbW91
c2VFdmVudCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7CiAgICAgICAgIGlmIChk
b2N1bWVudCgpLT5mcmFtZSgpICYmIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+cGFyZW50KCkK
ICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxSZW5kZXJTbGlkZXIqPihyZW5kZXJlcigp
LT5wYXJlbnQoKSktPm1vdXNlRXZlbnRJc0luVGh1bWIobW91c2VFdmVudCkpIHsKQEAgLTg3LDcg
Kzg2LDcgQEAgdm9pZCBIVE1MU2xpZGVyVGh1bWJFbGVtZW50OjpkZWZhdWx0RXZlbgogICAgICAg
ICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBtb3VzZXVwRXZlbnQgJiYgZXZl
bnQtPmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPmJ1
dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVu
dE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNf
Y2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAg
ICAgIGlmIChtX2luRHJhZ01vZGUpIHsKICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBk
b2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIo
KS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKDApOyAgICAgIApAQCAtOTUsNyArOTQsNyBA
QCB2b2lkIEhUTUxTbGlkZXJUaHVtYkVsZW1lbnQ6OmRlZmF1bHRFdmVuCiAgICAgICAgICAgICBl
dmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IG1vdXNlbW92ZUV2ZW50ICYmIGV2ZW50LT5p
c01vdXNlRXZlbnQoKSkgeworICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMo
KS5tb3VzZW1vdmVFdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKICAgICAgICAgaWYg
KG1faW5EcmFnTW9kZSAmJiByZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnBhcmVudCgpKSB7CiAg
ICAgICAgICAgICAvLyBNb3ZlIHRoZSBzbGlkZXIKICAgICAgICAgICAgIE1vdXNlRXZlbnQqIG1v
dXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDcgKzU2LDYgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKIC8vIFZhbHVlIGNob3NlbiBieSBvYnNlcnZhdGlvbi4gIFRoaXMgY2FuIGJlIHR3ZWFrZWQu
CkBAIC04NDIsNyArODQxLDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y2FsY1ByZWZXaWR0
aHMoKQogCiB2b2lkIFJlbmRlclRleHRDb250cm9sOjpmb3J3YXJkRXZlbnQoRXZlbnQqIGV2dCkK
IHsKLSAgICBpZiAoZXZ0LT50eXBlKCkgPT0gYmx1ckV2ZW50KSB7CisgICAgaWYgKGV2dC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBp
bm5lclJlbmRlcmVyID0gbV9pbm5lclRleHQtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmIChpbm5l
clJlbmRlcmVyKSB7CiAgICAgICAgICAgICBSZW5kZXJMYXllciogaW5uZXJMYXllciA9IGlubmVy
UmVuZGVyZXItPmxheWVyKCk7CkBAIC04NTAsNyArODQ5LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29u
dHJvbDo6Zm9yd2FyZEV2ZW50KEV2ZQogICAgICAgICAgICAgICAgIGlubmVyTGF5ZXItPnNjcm9s
bFRvT2Zmc2V0KHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCA/IGlubmVyTGF5ZXItPnNjcm9s
bFdpZHRoKCkgOiAwLCAwKTsKICAgICAgICAgfQogICAgICAgICBjYXBzTG9ja1N0YXRlTWF5SGF2
ZUNoYW5nZWQoKTsKLSAgICB9IGVsc2UgaWYgKGV2dC0+dHlwZSgpID09IGZvY3VzRXZlbnQpCisg
ICAgfSBlbHNlIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZm9jdXNFdmVudCkKICAg
ICAgICAgY2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7CiAgICAgZWxzZSB7CiAgICAgICAg
IGlmIChldnQtPmlzTW91c2VFdmVudCgpICYmIG1fcmVzdWx0c0J1dHRvbiAmJiBzdGF0aWNfY2Fz
dDxNb3VzZUV2ZW50Kj4oZXZ0KS0+eCgpIDwgbV9pbm5lclRleHQtPnJlbmRlcmVyKCktPmFic29s
dXRlQm91bmRpbmdCb3hSZWN0KCkueCgpKQpAQCAtODcxLDcgKzg3MCw3IEBAIHZvaWQgUmVuZGVy
VGV4dENvbnRyb2w6OnNlbGVjdGlvbkNoYW5nZWQKICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudCo+KGVsZW1lbnQpLT5jYWNoZVNlbGVjdGlvbihzZWxlY3Rpb25TdGFydCgpLCBz
ZWxlY3Rpb25FbmQoKSk7CiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1l
KCkpCiAgICAgICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKSAmJiB1c2VyVHJp
Z2dlcmVkKQotICAgICAgICAgICAgZWxlbWVudC0+ZGlzcGF0Y2hFdmVudEZvclR5cGUoc2VsZWN0
RXZlbnQsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnRG
b3JUeXBlKGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudCwgdHJ1ZSwgZmFsc2UpOwogfQogCiB2b2lk
IFJlbmRlclRleHRDb250cm9sOjphdXRvc2Nyb2xsKCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcldpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
V2lkZ2V0LmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJX
aWRnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNs
dWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgpAQCAtNDEsOCArNDAs
NiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5n
IG5hbWVzcGFjZSBFdmVudE5hbWVzOwotCiBzdGF0aWMgSGFzaE1hcDxjb25zdCBXaWRnZXQqLCBS
ZW5kZXJXaWRnZXQqPiYgd2lkZ2V0UmVuZGVyZXJNYXAoKQogewogICAgIHN0YXRpYyBIYXNoTWFw
PGNvbnN0IFdpZGdldCosIFJlbmRlcldpZGdldCo+KiBzdGF0aWNXaWRnZXRSZW5kZXJlck1hcCA9
IG5ldyBIYXNoTWFwPGNvbnN0IFdpZGdldCosIFJlbmRlcldpZGdldCo+OwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCShyZXZpc2lvbiAz
ODA2NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKLQogY2xhc3MgUmVuZGVyVGV4dENvbnRyb2xJ
bm5lckJsb2NrIDogcHVibGljIFJlbmRlckJsb2NrIHsKIHB1YmxpYzoKICAgICBSZW5kZXJUZXh0
Q29udHJvbElubmVyQmxvY2soTm9kZSogbm9kZSkgOiBSZW5kZXJCbG9jayhub2RlKSB7IH0KQEAg
LTEwMCw3ICs5OCw3IEBAIHZvaWQgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpkZWZhdWwK
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc2hhZG93QW5j
ZXN0b3IpLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2dCk7CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudCo+KHNoYWRvd0FuY2Vz
dG9yKS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOwotICAgICAgICBpZiAoZXZ0LT50eXBlKCkg
PT0gd2Via2l0RWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50KQorICAgICAgICBpZiAoZXZ0LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLndlYmtpdEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudCkK
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRleHRDb250cm9sKj4oc2hhZG93QW5jZXN0
b3ItPnJlbmRlcmVyKCkpLT5zdWJ0cmVlSGFzQ2hhbmdlZCgpOwogICAgIH0KICAgICBpZiAoIWV2
dC0+ZGVmYXVsdEhhbmRsZWQoKSkKQEAgLTEyMSw3ICsxMTksNyBAQCB2b2lkIFNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvbkVsZW1lbnQ6OmRlCiB7CiAgICAgLy8gT24gbW91c2Vkb3duLCBicmluZyB1
cCBhIG1lbnUsIGlmIG5lZWRlZAogICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHNoYWRvd0FuY2VzdG9yTm9kZSgpKTsKLSAgICBpZiAo
ZXZ0LT50eXBlKCkgPT0gbW91c2Vkb3duRXZlbnQgJiYgZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBz
dGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewor
ICAgIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZ0
LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KS0+YnV0dG9u
KCkgPT0gTGVmdEJ1dHRvbikgewogICAgICAgICBpbnB1dC0+Zm9jdXMoKTsKICAgICAgICAgaW5w
dXQtPnNlbGVjdCgpOwogICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQtPnJlbmRlcmVyKCkgJiYg
c3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2wqPihpbnB1dC0+cmVuZGVyZXIoKSktPnBvcHVw
SXNWaXNpYmxlKCkpCkBAIC0xNDQsNyArMTQyLDcgQEAgdm9pZCBTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbkVsZW1lbnQ6OmRlZgogewogICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIHZpc2libGUsIG9u
IG1vdXNldXAsIGNsZWFyIHRoZSB2YWx1ZSwgYW5kIHNldCBzZWxlY3Rpb24KICAgICBIVE1MSW5w
dXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihzaGFkb3dB
bmNlc3Rvck5vZGUoKSk7Ci0gICAgaWYgKGV2dC0+dHlwZSgpID09IG1vdXNlZG93bkV2ZW50ICYm
IGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1
dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlZG93bkV2ZW50ICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8
TW91c2VFdmVudCo+KGV2dCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAgICAgaW5w
dXQtPmZvY3VzKCk7CiAgICAgICAgIGlucHV0LT5zZWxlY3QoKTsKICAgICAgICAgZXZ0LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOwpAQCAtMTUzLDcgKzE1MSw3IEBAIHZvaWQgU2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25FbGVtZW50OjpkZWYKICAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSh0aGlzKTsKICAgICAgICAgICAgICAgICBt
X2NhcHR1cmluZyA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChldnQtPnR5
cGUoKSA9PSBtb3VzZXVwRXZlbnQgJiYgZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2Fz
dDxNb3VzZUV2ZW50Kj4oZXZ0KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgIH0gZWxz
ZSBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCAmJiBldnQtPmlz
TW91c2VFdmVudCgpICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpLT5idXR0b24oKSA9
PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGlmIChtX2NhcHR1cmluZyAmJiByZW5kZXJlcigpICYm
IHJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKSB7CiAgICAgICAg
ICAgICBpZiAoaG92ZXJlZCgpKSB7CiAgICAgICAgICAgICAgICAgaW5wdXQtPnNldFZhbHVlKCIi
KTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5jcHAJKHJldmlzaW9uIDM4MDY0
KQorKysgV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpkaXNwYXRjaFN0b3Jh
Z2VFdgogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYW1lcy5zaXplKCk7ICsraSkg
ewogICAgICAgICBpZiAoSFRNTEVsZW1lbnQqIGJvZHkgPSBmcmFtZXNbaV0tPmRvY3VtZW50KCkt
PmJvZHkoKSkKLSAgICAgICAgICAgIGJvZHktPmRpc3BhdGNoU3RvcmFnZUV2ZW50KEV2ZW50TmFt
ZXM6OnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHNvdXJjZUZyYW1lKTsg
ICAgICAgIAorICAgICAgICAgICAgYm9keS0+ZGlzcGF0Y2hTdG9yYWdlRXZlbnQoZXZlbnROYW1l
cygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHNvdXJjZUZyYW1lKTsg
ICAgICAgIAogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdl
QXJlYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlQXJl
YS5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdl
QXJlYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBTZXNzaW9uU3Rv
cmFnZUFyZWE6OmRpc3BhdGNoU3RvcmFnZQogICAgICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZnJhbWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChIVE1MRWxlbWVudCog
Ym9keSA9IGZyYW1lc1tpXS0+ZG9jdW1lbnQoKS0+Ym9keSgpKQotICAgICAgICAgICAgYm9keS0+
ZGlzcGF0Y2hTdG9yYWdlRXZlbnQoRXZlbnROYW1lczo6c3RvcmFnZUV2ZW50LCBrZXksIG9sZFZh
bHVlLCBuZXdWYWx1ZSwgc291cmNlRnJhbWUpOyAgICAgICAgCisgICAgICAgICAgICBib2R5LT5k
aXNwYXRjaFN0b3JhZ2VFdmVudChldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBrZXksIG9sZFZh
bHVlLCBuZXdWYWx1ZSwgc291cmNlRnJhbWUpOyAgICAgICAgCiAgICAgfQogfQogCkluZGV4OiBX
ZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZH
QUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvc3ZnL1NWR0FFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwotCiBTVkdBRWxlbWVudDo6U1ZHQUVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKICAgICA6
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIFNWR1VS
SVJlZmVyZW5jZSgpCkBAIC0xMDgsMTMgKzEwNiwxMyBAQCBSZW5kZXJPYmplY3QqIFNWR0FFbGVt
ZW50OjpjcmVhdGVSZW5kZXJlCiAKIHZvaWQgU1ZHQUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqIGV2dCkKIHsKLSAgICBpZiAoaXNMaW5rKCkgJiYgKGV2dC0+dHlwZSgpID09IGNs
aWNrRXZlbnQgfHwgKGV2dC0+dHlwZSgpID09IGtleWRvd25FdmVudCAmJiBmb2N1c2VkKCkpKSkg
eworICAgIGlmIChpc0xpbmsoKSAmJiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNr
RXZlbnQgfHwgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgJiYgZm9j
dXNlZCgpKSkpIHsKICAgICAgICAgTW91c2VFdmVudCogZSA9IDA7Ci0gICAgICAgIGlmIChldnQt
PnR5cGUoKSA9PSBjbGlja0V2ZW50ICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkpCisgICAgICAgIGlm
IChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCAmJiBldnQtPmlzTW91c2VF
dmVudCgpKQogICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpOwog
ICAgICAgICAKICAgICAgICAgS2V5Ym9hcmRFdmVudCogayA9IDA7Ci0gICAgICAgIGlmIChldnQt
PnR5cGUoKSA9PSBrZXlkb3duRXZlbnQgJiYgZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAg
ICAgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgJiYgZXZ0LT5p
c0tleWJvYXJkRXZlbnQoKSkKICAgICAgICAgICAgIGsgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2
ZW50Kj4oZXZ0KTsKICAgICAgICAgCiAgICAgICAgIGlmIChlICYmIGUtPmJ1dHRvbigpID09IFJp
Z2h0QnV0dG9uKSB7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdEb2N1bWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdl
YkNvcmUvc3ZnL1NWR0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBA
QCB2b2lkIFNWR0RvY3VtZW50OjpkaXNwYXRjaFpvb21FdmVudChmbG9hCiB7CiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAgICAgUmVmUHRyPFNWR1pvb21FdmVudD4gZXZlbnQgPSBzdGF0aWNf
cG9pbnRlcl9jYXN0PFNWR1pvb21FdmVudD4oY3JlYXRlRXZlbnQoIlNWR1pvb21FdmVudHMiLCBl
YykpOwotICAgIGV2ZW50LT5pbml0RXZlbnQoRXZlbnROYW1lczo6em9vbUV2ZW50LCB0cnVlLCBm
YWxzZSk7CisgICAgZXZlbnQtPmluaXRFdmVudChldmVudE5hbWVzKCkuem9vbUV2ZW50LCB0cnVl
LCBmYWxzZSk7CiAgICAgZXZlbnQtPnNldFByZXZpb3VzU2NhbGUocHJldlNjYWxlKTsKICAgICBl
dmVudC0+c2V0TmV3U2NhbGUobmV3U2NhbGUpOwogICAgIHJvb3RFbGVtZW50KCktPmRpc3BhdGNo
RXZlbnQoZXZlbnQucmVsZWFzZSgpLCBlYyk7CkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgU1ZHRG9j
dW1lbnQ6OmRpc3BhdGNoU2Nyb2xsRXZlbnQoKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwogICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBjcmVhdGVFdmVudCgiU1ZHRXZlbnRzIiwgZWMp
OwotICAgIGV2ZW50LT5pbml0RXZlbnQoRXZlbnROYW1lczo6c2Nyb2xsRXZlbnQsIHRydWUsIGZh
bHNlKTsKKyAgICBldmVudC0+aW5pdEV2ZW50KGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudCwgdHJ1
ZSwgZmFsc2UpOwogICAgIHJvb3RFbGVtZW50KCktPmRpc3BhdGNoRXZlbnQoZXZlbnQucmVsZWFz
ZSgpLCBlYyk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdl
YkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw2IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci11c2lu
ZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIAogU1ZHRWxlbWVudDo6U1ZHRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU3R5bGVkRWxlbWVu
dCh0YWdOYW1lLCBkb2MpCkBAIC0xNDMsMjUgKzE0MiwyNSBAQCB2b2lkIFNWR0VsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hCiB7CiAgICAgLy8gc3RhbmRhcmQgZXZlbnRzCiAgICAgaWYg
KGF0dHItPm5hbWUoKSA9PSBvbmxvYWRBdHRyKQotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShsb2FkRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxp
bmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkubG9hZEV2ZW50
LCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25jbGlja0F0dHIpCi0gICAg
ICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGNsaWNrRXZlbnQs
IGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0
ZShldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgYXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IG9ubW91c2Vkb3duQXR0cikKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGVBbmRBdHRyaWJ1dGUobW91c2Vkb3duRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxp
bmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkubW91c2Vkb3du
RXZlbnQsIGF0dHIpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbm1vdXNlbW92ZUF0
dHIpCi0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKG1v
dXNlbW92ZUV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5
cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50LCBhdHRyKTsKICAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25tb3VzZW91dEF0dHIpCi0gICAgICAgIHNldElubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKG1vdXNlb3V0RXZlbnQsIGF0dHIpOwor
ICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5h
bWVzKCkubW91c2VvdXRFdmVudCwgYXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IG9ubW91c2VvdmVyQXR0cikKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVB
bmRBdHRyaWJ1dGUobW91c2VvdmVyRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQs
IGF0dHIpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbm1vdXNldXBBdHRyKQotICAg
ICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShtb3VzZXVwRXZl
bnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJp
YnV0ZShldmVudE5hbWVzKCkubW91c2V1cEV2ZW50LCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9uZm9jdXNpbkF0dHIpCi0gICAgICAgIHNldElubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKERPTUZvY3VzSW5FdmVudCwgYXR0cik7Cisg
ICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFt
ZXMoKS5ET01Gb2N1c0luRXZlbnQsIGF0dHIpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6b25mb2N1c291dEF0dHIpCi0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlQW5kQXR0cmlidXRlKERPTUZvY3VzT3V0RXZlbnQsIGF0dHIpOworICAgICAgICBz
ZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuRE9N
Rm9jdXNPdXRFdmVudCwgYXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpvbmFjdGl2YXRlQXR0cikKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5
cGVBbmRBdHRyaWJ1dGUoRE9NQWN0aXZhdGVFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5ET01BY3RpdmF0
ZUV2ZW50LCBhdHRyKTsKICAgICBlbHNlCiAgICAgICAgIFN0eWxlZEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOwogfQpAQCAtMTg1LDcgKzE4NCw3IEBAIHN0YXRpYyBib29sIGhh
c0xvYWRMaXN0ZW5lcihTVkdFbGVtZW50KiAKICAgICAgICAgaWYgKGxpc3QpIHsKICAgICAgICAg
ICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDo6SXRlcmF0b3IgZW5kID0gbGlzdC0+ZW5k
KCk7CiAgICAgICAgICAgICBmb3IgKFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDo6SXRlcmF0
b3IgaXQgPSBsaXN0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAg
aWYgKCgqaXQpLT5ldmVudFR5cGUoKSA9PSBsb2FkRXZlbnQgJiYKKyAgICAgICAgICAgICAgICBp
ZiAoKCppdCktPmV2ZW50VHlwZSgpID09IGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQgJiYKICAgICAg
ICAgICAgICAgICAgICAgKCppdCktPnVzZUNhcHR1cmUoKSA9PSB0cnVlIHx8IGN1cnJlbnROb2Rl
ID09IG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBA
IC0yMDMsNyArMjAyLDcgQEAgdm9pZCBTVkdFbGVtZW50OjpzZW5kU1ZHTG9hZEV2ZW50SWZQb3Nz
aQogICAgICAgICBpZiAoc2VuZFBhcmVudExvYWRFdmVudHMpCiAgICAgICAgICAgICBwYXJlbnQg
PSBjdXJyZW50VGFyZ2V0LT5wYXJlbnROb2RlKCk7IC8vIHNhdmUgdGhlIG5leHQgcGFyZW50IHRv
IGRpc3BhdGNoIHRvbyBpbmNhc2UgZGlzcGF0Y2hpbmcgdGhlIGV2ZW50IGNoYW5nZXMgdGhlIHRy
ZWUKICAgICAgICAgaWYgKGhhc0xvYWRMaXN0ZW5lcihjdXJyZW50VGFyZ2V0LmdldCgpKSkgewot
ICAgICAgICAgICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IEV2ZW50OjpjcmVhdGUobG9hZEV2ZW50
LCBmYWxzZSwgZmFsc2UpOworICAgICAgICAgICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAg
ICAgIGV2ZW50LT5zZXRUYXJnZXQoY3VycmVudFRhcmdldCk7CiAgICAgICAgICAgICBFeGNlcHRp
b25Db2RlIGlnbm9yZWQgPSAwOwogICAgICAgICAgICAgY3VycmVudFRhcmdldC0+ZGlzcGF0Y2hH
ZW5lcmljRXZlbnQoZXZlbnQucmVsZWFzZSgpLCBpZ25vcmVkKTsKSW5kZXg6IFdlYkNvcmUvc3Zn
L1NWR0VsZW1lbnRJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRWxl
bWVudEluc3RhbmNlLmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50SW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0KICNpZm5kZWYg
TkRFQlVHCiBzdGF0aWMgV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIgaW5zdGFuY2VDb3VudGVy
KCJXZWJDb3JlU1ZHRWxlbWVudEluc3RhbmNlIik7CiAjZW5kaWYKQEAgLTE3MSw0MDIgKzE2OSw0
MDIgQEAgYm9vbCBTVkdFbGVtZW50SW5zdGFuY2U6OmRpc3BhdGNoRXZlbnQoUAogCiBFdmVudExp
c3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uYWJvcnQoKSBjb25zdAogewotICAgIHJldHVy
biBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShhYm9y
dEV2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmFib3J0RXZlbnQpOwogfQogCiB2b2lkIFNWR0Vs
ZW1lbnRJbnN0YW5jZTo6c2V0T25hYm9ydChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50
TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGUoYWJvcnRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9u
ZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygp
LmFib3J0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVt
ZW50SW5zdGFuY2U6Om9uYmx1cigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdF
bGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGJsdXJFdmVudCk7CisgICAgcmV0
dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2
ZW50TmFtZXMoKS5ibHVyRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0
T25ibHVyKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBj
b3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShibHVy
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQsIGV2ZW50TGlz
dGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uY2hhbmdl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGUoY2hhbmdlRXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25kaW5n
RWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuY2hhbmdl
RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25jaGFuZ2UoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNvcnJlc3BvbmRpbmdF
bGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNoYW5nZUV2ZW50LCBldmVu
dExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwog
fQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uY2xpY2soKSBjb25zdAog
ewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZShjbGlja0V2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+
aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpOwogfQog
CiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25jbGljayhQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoY2xpY2tFdmVudCwgZXZlbnRMaXN0ZW5lcik7Cisg
ICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUo
ZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3Rl
bmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uY29udGV4dG1lbnUoKSBjb25zdAogewotICAgIHJl
dHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShj
b250ZXh0bWVudUV2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmNvbnRleHRtZW51RXZlbnQpOwog
fQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25jb250ZXh0bWVudShQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1l
bnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoY29udGV4dG1lbnVFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmNvbnRleHRtZW51RXZlbnQsIGV2ZW50TGlzdGVu
ZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uZGJsY2xpY2so
KSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZShkYmxjbGlja0V2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGlu
Z0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmRibGNs
aWNrRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25kYmxjbGljayhQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9u
ZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZGJsY2xpY2tFdmVu
dCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmRibGNsaWNrRXZlbnQsIGV2ZW50TGlz
dGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uZXJyb3Io
KSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZShlcnJvckV2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0Vs
ZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmVycm9yRXZl
bnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25lcnJvcihQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1l
bnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXJyb3JFdmVudCwgZXZlbnRMaXN0
ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBF
dmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uZm9jdXMoKSBjb25zdAogewotICAg
IHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZShmb2N1c0V2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmZvY3VzRXZlbnQpOwogfQogCiB2b2lk
IFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25mb2N1cyhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZm9jdXNFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29y
cmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRO
YW1lcygpLmZvY3VzRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBT
VkdFbGVtZW50SW5zdGFuY2U6Om9uaW5wdXQoKSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNw
b25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShpbnB1dEV2ZW50KTsK
KyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGUoZXZlbnROYW1lcygpLmlucHV0RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0
YW5jZTo6c2V0T25pbnB1dChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIp
CiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGUoaW5wdXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1l
bnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmlucHV0RXZl
bnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFu
Y2U6Om9ua2V5ZG93bigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50
KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGtleWRvd25FdmVudCk7CisgICAgcmV0dXJu
IGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50
TmFtZXMoKS5rZXlkb3duRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0
T25rZXlkb3duKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAg
ICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShr
ZXlkb3duRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCkt
PnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQs
IGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6
Om9ua2V5cHJlc3MoKSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgp
LT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShrZXlwcmVzc0V2ZW50KTsKKyAgICByZXR1cm4g
Y29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRO
YW1lcygpLmtleXByZXNzRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0
T25rZXlwcmVzcyhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0g
ICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUo
a2V5cHJlc3NFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQo
KS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmtleXByZXNzRXZl
bnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFu
Y2U6Om9ua2V5dXAoKSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgp
LT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShrZXl1cEV2ZW50KTsKKyAgICByZXR1cm4gY29y
cmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1l
cygpLmtleXVwRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25rZXl1
cChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVz
cG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoa2V5dXBFdmVu
dCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmtleXVwRXZlbnQsIGV2ZW50TGlzdGVu
ZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ubG9hZCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlKGxvYWRFdmVudCk7CisgICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50
KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQpOwog
fQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25sb2FkKFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5z
ZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShsb2FkRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwor
ICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBl
KGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3Rl
bmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ubW91c2Vkb3duKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUobW91
c2Vkb3duRXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpOwogfQogCiB2
b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25tb3VzZWRvd24oUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNlZG93bkV2ZW50LCBldmVudExpc3RlbmVy
KTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9y
VHlwZShldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBF
dmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ubW91c2Vtb3ZlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGUobW91c2Vtb3ZlRXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgp
LT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQp
OwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25tb3VzZW1vdmUoUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNvcnJlc3BvbmRpbmdFbGVt
ZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNlbW92ZUV2ZW50LCBldmVu
dExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQsIGV2ZW50TGlzdGVuZXIp
OwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ubW91c2VvdXQoKSBj
b25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZShtb3VzZW91dEV2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0Vs
ZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNlb3V0
RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25tb3VzZW91dChQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGlu
Z0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUobW91c2VvdXRFdmVudCwg
ZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQsIGV2ZW50TGlzdGVu
ZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ubW91c2VvdmVy
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGUobW91c2VvdmVyRXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25k
aW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91
c2VvdmVyRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25tb3VzZW92
ZXIoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNvcnJl
c3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNlb3Zl
ckV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJ
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQsIGV2
ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9u
bW91c2V1cCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNldXBFdmVudCk7CisgICAgcmV0dXJuIGNvcnJl
c3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5tb3VzZXVwRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25tb3Vz
ZXVwKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBjb3Jy
ZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShtb3VzZXVw
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQsIGV2ZW50
TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ubW91
c2V3aGVlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNld2hlZWxFdmVudCk7CisgICAgcmV0dXJuIGNv
cnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFt
ZXMoKS5tb3VzZXdoZWVsRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0
T25tb3VzZXdoZWVsKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsK
LSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZShtb3VzZXdoZWVsRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVt
ZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5tb3VzZXdo
ZWVsRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50
SW5zdGFuY2U6Om9uYmVmb3JlY3V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGlu
Z0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoYmVmb3JlY3V0RXZlbnQpOwor
ICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9y
VHlwZShldmVudE5hbWVzKCkuYmVmb3JlY3V0RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJ
bnN0YW5jZTo6c2V0T25iZWZvcmVjdXQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExp
c3RlbmVyKQogewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlKGJlZm9yZWN1dEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNw
b25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVz
KCkuYmVmb3JlY3V0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBT
VkdFbGVtZW50SW5zdGFuY2U6Om9uY3V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9u
ZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoY3V0RXZlbnQpOworICAg
IHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZShldmVudE5hbWVzKCkuY3V0RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6
c2V0T25jdXQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAg
IGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGN1
dEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJ
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuY3V0RXZlbnQsIGV2ZW50TGlz
dGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uYmVmb3Jl
Y29weSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGJlZm9yZWNvcHlFdmVudCk7CisgICAgcmV0dXJuIGNvcnJl
c3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5iZWZvcmVjb3B5RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25i
ZWZvcmVjb3B5KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAg
ICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShi
ZWZvcmVjb3B5RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50
KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5iZWZvcmVjb3B5
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5z
dGFuY2U6Om9uY29weSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50
KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNvcHlFdmVudCk7CisgICAgcmV0dXJuIGNv
cnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFt
ZXMoKS5jb3B5RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25jb3B5
KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBjb3JyZXNw
b25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShjb3B5RXZlbnQs
IGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5jb3B5RXZlbnQsIGV2ZW50TGlzdGVuZXIp
OwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uYmVmb3JlcGFzdGUo
KSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZShiZWZvcmVwYXN0ZUV2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9u
ZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmJl
Zm9yZXBhc3RlRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25iZWZv
cmVwYXN0ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAg
Y29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoYmVm
b3JlcGFzdGVFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQo
KS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmJlZm9yZXBhc3Rl
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5z
dGFuY2U6Om9ucGFzdGUoKSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVu
dCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShwYXN0ZUV2ZW50KTsKKyAgICByZXR1cm4g
Y29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRO
YW1lcygpLnBhc3RlRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25w
YXN0ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29y
cmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUocGFzdGVF
dmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnBhc3RlRXZlbnQsIGV2ZW50TGlz
dGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uZHJhZ2Vu
dGVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZHJhZ2VudGVyRXZlbnQpOworICAgIHJldHVybiBjb3JyZXNw
b25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCku
ZHJhZ2VudGVyRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25kcmFn
ZW50ZXIoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNv
cnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGRyYWdl
bnRlckV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5z
ZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZHJhZ2VudGVyRXZlbnQs
IGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6
Om9uZHJhZ292ZXIoKSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgp
LT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShkcmFnb3ZlckV2ZW50KTsKKyAgICByZXR1cm4g
Y29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRO
YW1lcygpLmRyYWdvdmVyRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0
T25kcmFnb3ZlcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0g
ICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUo
ZHJhZ292ZXJFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQo
KS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmRyYWdvdmVyRXZl
bnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFu
Y2U6Om9uZHJhZ2xlYXZlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1l
bnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZHJhZ2xlYXZlRXZlbnQpOworICAgIHJl
dHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShl
dmVudE5hbWVzKCkuZHJhZ2xlYXZlRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5j
ZTo6c2V0T25kcmFnbGVhdmUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KQogewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlKGRyYWdsZWF2ZUV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5n
RWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZHJh
Z2xlYXZlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVt
ZW50SW5zdGFuY2U6Om9uZHJvcCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdF
bGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGRyb3BFdmVudCk7CisgICAgcmV0
dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2
ZW50TmFtZXMoKS5kcm9wRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0
T25kcm9wKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBj
b3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShkcm9w
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcm9wRXZlbnQsIGV2ZW50TGlz
dGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uZHJhZ3N0
YXJ0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZHJhZ3N0YXJ0RXZlbnQpOworICAgIHJldHVybiBjb3JyZXNw
b25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCku
ZHJhZ3N0YXJ0RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25kcmFn
c3RhcnQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNv
cnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGRyYWdz
dGFydEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5z
ZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZHJhZ3N0YXJ0RXZlbnQs
IGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6
Om9uZHJhZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGRyYWdFdmVudCk7CisgICAgcmV0dXJuIGNvcnJlc3Bv
bmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5k
cmFnRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25kcmFnKFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBjb3JyZXNwb25kaW5n
RWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShkcmFnRXZlbnQsIGV2ZW50
TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQog
CiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uZHJhZ2VuZCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlKGRyYWdlbmRFdmVudCk7CisgICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCkt
PmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnZW5kRXZlbnQpOwog
fQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25kcmFnZW5kKFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgp
LT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShkcmFnZW5kRXZlbnQsIGV2ZW50TGlzdGVu
ZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnZW5kRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBF
dmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ucmVzZXQoKSBjb25zdAogewotICAg
IHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZShyZXNldEV2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnJlc2V0RXZlbnQpOwogfQogCiB2b2lk
IFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25yZXNldChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUocmVzZXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29y
cmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRO
YW1lcygpLnJlc2V0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBT
VkdFbGVtZW50SW5zdGFuY2U6Om9ucmVzaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVz
cG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUocmVzaXplRXZlbnQp
OworICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZShldmVudE5hbWVzKCkucmVzaXplRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJ
bnN0YW5jZTo6c2V0T25yZXNpemUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3Rl
bmVyKQogewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlKHJlc2l6ZUV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5n
RWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkucmVz
aXplRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50
SW5zdGFuY2U6Om9uc2Nyb2xsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0Vs
ZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoc2Nyb2xsRXZlbnQpOworICAgIHJl
dHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShl
dmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6
c2V0T25zY3JvbGwoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewot
ICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBl
KHNjcm9sbEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgp
LT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQs
IGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6
Om9uc2VhcmNoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+
aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoc2VhcmNoRXZlbnQpOworICAgIHJldHVybiBjb3Jy
ZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVz
KCkuc2VhcmNoRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25zZWFy
Y2goUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNvcnJl
c3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHNlYXJjaEV2
ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxp
bmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuc2VhcmNoRXZlbnQsIGV2ZW50TGlz
dGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uc2VsZWN0
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGUoc2VsZWN0RXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25kaW5n
RWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuc2VsZWN0
RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25zZWxlY3QoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNvcnJlc3BvbmRpbmdF
bGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHNlbGVjdEV2ZW50LCBldmVu
dExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuc2VsZWN0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwog
fQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uc2VsZWN0c3RhcnQoKSBj
b25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZShzZWxlY3RzdGFydEV2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGlu
Z0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnNlbGVj
dHN0YXJ0RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25zZWxlY3Rz
dGFydChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29y
cmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoc2VsZWN0
c3RhcnRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+
c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnNlbGVjdHN0YXJ0RXZl
bnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFu
Y2U6Om9uc3VibWl0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQo
KS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoc3VibWl0RXZlbnQpOworICAgIHJldHVybiBj
b3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5h
bWVzKCkuc3VibWl0RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25z
dWJtaXQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNv
cnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHN1Ym1p
dEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJ
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuc3VibWl0RXZlbnQsIGV2ZW50
TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9udW5s
b2FkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUodW5sb2FkRXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25k
aW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkudW5s
b2FkRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T251bmxvYWQoUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNvcnJlc3BvbmRp
bmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHVubG9hZEV2ZW50LCBl
dmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkudW5sb2FkRXZlbnQsIGV2ZW50TGlzdGVuZXIp
OwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdJbWFnZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvU1ZHSW1hZ2VMb2FkZXIuY3BwCShyZXZpc2lvbiAzODA2NCkKKysr
IFdlYkNvcmUvc3ZnL1NWR0ltYWdlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyAr
NDYsNyBAQCB2b2lkIFNWR0ltYWdlTG9hZGVyOjpkaXNwYXRjaExvYWRFdmVudCgpCiAgICAgICAg
IHNldEhhdmVGaXJlZExvYWRFdmVudCh0cnVlKTsKICAgICAgICAgCiAgICAgICAgIGlmIChpbWFn
ZSgpLT5lcnJvck9jY3VycmVkKCkpCi0gICAgICAgICAgICBlbGVtZW50KCktPmRpc3BhdGNoRXZl
bnRGb3JUeXBlKEV2ZW50TmFtZXM6OmVycm9yRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAg
ICAgICBlbGVtZW50KCktPmRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5lcnJvckV2
ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFNWR0ltYWdl
RWxlbWVudCogaW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4oZWxl
bWVudCgpKTsKICAgICAgICAgICAgIGlmIChpbWFnZUVsZW1lbnQtPmV4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWRCYXNlVmFsdWUoKSkKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAz
ODA2NCkKKysrIFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MSw3ICs1MSw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7Ci11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBT
VkdOYW1lczsKIAogU1ZHU1ZHRWxlbWVudDo6U1ZHU1ZHRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQpAQCAtMjIwLDEzICsyMTksMTMgQEAgdm9pZCBT
VkdTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZQogCiAgICAgICAgIC8vIE9ubHkgaGFu
ZGxlIGV2ZW50cyBpZiB3ZSdyZSB0aGUgb3V0ZXJtb3N0IDxzdmc+IGVsZW1lbnQKICAgICAgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBvbnVubG9hZEF0dHIpCi0gICAgICAgICAgICBkb2N1bWVudCgp
LT5zZXRXaW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZSh1bmxvYWRF
dmVudCwgYXR0cik7CisgICAgICAgICAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dJbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkudW5sb2FkRXZlbnQsIGF0
dHIpOwogICAgICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25yZXNpemVBdHRyKQotICAg
ICAgICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVB
bmRBdHRyaWJ1dGUocmVzaXplRXZlbnQsIGF0dHIpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+
c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1l
cygpLnJlc2l6ZUV2ZW50LCBhdHRyKTsKICAgICAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IG9uc2Nyb2xsQXR0cikKLSAgICAgICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0lubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKHNjcm9sbEV2ZW50LCBhdHRyKTsKKyAgICAg
ICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0lubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5k
QXR0cmlidXRlKGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudCwgYXR0cik7CiAgICAgICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6b256b29tQXR0cikKLSAgICAgICAgICAgIGRv
Y3VtZW50KCktPnNldFdpbmRvd0lubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRl
KHpvb21FdmVudCwgYXR0cik7CisgICAgICAgICAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dJbmxp
bmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuem9vbUV2ZW50
LCBhdHRyKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0TGlzdGVuZXIgPSBmYWxzZTsK
ICAKQEAgLTIzNSw5ICsyMzQsOSBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlCiAgICAgfQogCiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmFib3J0QXR0cikKLSAg
ICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRB
dHRyaWJ1dGUoYWJvcnRFdmVudCwgYXR0cik7CisgICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRv
d0lubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5hYm9y
dEV2ZW50LCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25lcnJvckF0dHIp
Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0lubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBl
QW5kQXR0cmlidXRlKGVycm9yRXZlbnQsIGF0dHIpOworICAgICAgICBkb2N1bWVudCgpLT5zZXRX
aW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCku
ZXJyb3JFdmVudCwgYXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp4QXR0cikKICAgICAgICAgc2V0WEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRo
LCBhdHRyLT52YWx1ZSgpKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp5QXR0cikKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODA2NCkK
KysrIFdlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDQsNyArMjA0LDcgQEAgdm9pZCBTVkdTY3JpcHRFbGVtZW50OjpkaXNwYXRjaExvYWRFdmVudAog
CiB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoRXJyb3JFdmVudCgpCiB7Ci0gICAgZGlz
cGF0Y2hFdmVudEZvclR5cGUoRXZlbnROYW1lczo6ZXJyb3JFdmVudCwgdHJ1ZSwgZmFsc2UpOwor
ICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCB0cnVlLCBm
YWxzZSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDM4MDY0
KQorKysgV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw4ICs1MSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2
ZW50TmFtZXM7Ci0KIHN0cnVjdCBQcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0gewogICAgIFByZWZs
aWdodFJlc3VsdENhY2hlSXRlbSh1bnNpZ25lZCBleHBpcnlEZWx0YSwgYm9vbCBjcmVkZW50aWFs
cywgSGFzaFNldDxTdHJpbmc+KiBtZXRob2RzLCBIYXNoU2V0PFN0cmluZywgQ2FzZUZvbGRpbmdI
YXNoPiogaGVhZGVycykKICAgICAgICAgOiBtX2Fic29sdXRlRXhwaXJ5VGltZShjdXJyZW50VGlt
ZSgpICsgZXhwaXJ5RGVsdGEpCkBAIC0xMjQ4LDcgKzEyNDYsNyBAQCB2b2lkIFhNTEh0dHBSZXF1
ZXN0Ojp1cGRhdGVBbmREaXNwYXRjaE9uCiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpc3BhdGNo
UmVhZHlTdGF0ZUNoYW5nZUV2ZW50KCkKIHsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2dCA9IEV2ZW50
OjpjcmVhdGUocmVhZHlzdGF0ZWNoYW5nZUV2ZW50LCBmYWxzZSwgZmFsc2UpOworICAgIFJlZlB0
cjxFdmVudD4gZXZ0ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucmVhZHlzdGF0ZWNoYW5n
ZUV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgIGlmIChtX29uUmVhZHlTdGF0ZUNoYW5nZUxpc3Rl
bmVyKSB7CiAgICAgICAgIGV2dC0+c2V0VGFyZ2V0KHRoaXMpOwogICAgICAgICBldnQtPnNldEN1
cnJlbnRUYXJnZXQodGhpcyk7CkBAIC0xMjc2LDI3ICsxMjc0LDI3IEBAIHZvaWQgWE1MSHR0cFJl
cXVlc3Q6OmRpc3BhdGNoWE1MSHR0cFJlcXUKIAogdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlzcGF0
Y2hBYm9ydEV2ZW50KCkKIHsKLSAgICBkaXNwYXRjaFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dChtX29uQWJvcnRMaXN0ZW5lci5nZXQoKSwgYWJvcnRFdmVudCwgZmFsc2UsIDAsIDApOworICAg
IGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KG1fb25BYm9ydExpc3RlbmVyLmdl
dCgpLCBldmVudE5hbWVzKCkuYWJvcnRFdmVudCwgZmFsc2UsIDAsIDApOwogfQogCiB2b2lkIFhN
TEh0dHBSZXF1ZXN0OjpkaXNwYXRjaEVycm9yRXZlbnQoKQogewotICAgIGRpc3BhdGNoWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50KG1fb25FcnJvckxpc3RlbmVyLmdldCgpLCBlcnJvckV2ZW50
LCBmYWxzZSwgMCwgMCk7CisgICAgZGlzcGF0Y2hYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQo
bV9vbkVycm9yTGlzdGVuZXIuZ2V0KCksIGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCBmYWxzZSwg
MCwgMCk7CiB9CiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpc3BhdGNoTG9hZEV2ZW50KCkKIHsK
LSAgICBkaXNwYXRjaFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudChtX29uTG9hZExpc3RlbmVy
LmdldCgpLCBsb2FkRXZlbnQsIGZhbHNlLCAwLCAwKTsKKyAgICBkaXNwYXRjaFhNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudChtX29uTG9hZExpc3RlbmVyLmdldCgpLCBldmVudE5hbWVzKCkubG9h
ZEV2ZW50LCBmYWxzZSwgMCwgMCk7CiB9CiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpc3BhdGNo
TG9hZFN0YXJ0RXZlbnQoKQogewotICAgIGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2
ZW50KG1fb25Mb2FkU3RhcnRMaXN0ZW5lci5nZXQoKSwgbG9hZHN0YXJ0RXZlbnQsIGZhbHNlLCAw
LCAwKTsKKyAgICBkaXNwYXRjaFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudChtX29uTG9hZFN0
YXJ0TGlzdGVuZXIuZ2V0KCksIGV2ZW50TmFtZXMoKS5sb2Fkc3RhcnRFdmVudCwgZmFsc2UsIDAs
IDApOwogfQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaXNwYXRjaFByb2dyZXNzRXZlbnQobG9u
ZyBsb25nIGV4cGVjdGVkTGVuZ3RoKQogewotICAgIGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50KG1fb25Qcm9ncmVzc0xpc3RlbmVyLmdldCgpLCBwcm9ncmVzc0V2ZW50LCBleHBl
Y3RlZExlbmd0aCAmJiBtX3JlY2VpdmVkTGVuZ3RoIDw9IGV4cGVjdGVkTGVuZ3RoLCAKKyAgICBk
aXNwYXRjaFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudChtX29uUHJvZ3Jlc3NMaXN0ZW5lci5n
ZXQoKSwgZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQsIGV4cGVjdGVkTGVuZ3RoICYmIG1fcmVj
ZWl2ZWRMZW5ndGggPD0gZXhwZWN0ZWRMZW5ndGgsIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3JlY2VpdmVkTGVuZ3RoKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGV4cGVjdGVkTGVuZ3RoKSk7CiB9CiAKSW5kZXg6IFdlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7
Ci0KIFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjpYTUxIdHRwUmVxdWVzdFVwbG9hZChYTUxIdHRwUmVx
dWVzdCogeG1sSHR0cFJlcXVlc3QpCiAgICAgOiBtX3htbEh0dHBSZXF1ZXN0KHhtbEh0dHBSZXF1
ZXN0KQogewpAQCAtMTIwLDI3ICsxMTgsMjcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdFVwbG9hZDo6
ZGlzcGF0Y2hYTUxIdAogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjpkaXNwYXRjaEFib3J0
RXZlbnQoKQogewotICAgIGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KG1fb25B
Ym9ydExpc3RlbmVyLmdldCgpLCBhYm9ydEV2ZW50LCBmYWxzZSwgMCwgMCk7CisgICAgZGlzcGF0
Y2hYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQobV9vbkFib3J0TGlzdGVuZXIuZ2V0KCksIGV2
ZW50TmFtZXMoKS5hYm9ydEV2ZW50LCBmYWxzZSwgMCwgMCk7CiB9CiAKIHZvaWQgWE1MSHR0cFJl
cXVlc3RVcGxvYWQ6OmRpc3BhdGNoRXJyb3JFdmVudCgpCiB7Ci0gICAgZGlzcGF0Y2hYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnQobV9vbkVycm9yTGlzdGVuZXIuZ2V0KCksIGVycm9yRXZlbnQs
IGZhbHNlLCAwLCAwKTsKKyAgICBkaXNwYXRjaFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudCht
X29uRXJyb3JMaXN0ZW5lci5nZXQoKSwgZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGZhbHNlLCAw
LCAwKTsKIH0KIAogdm9pZCBYTUxIdHRwUmVxdWVzdFVwbG9hZDo6ZGlzcGF0Y2hMb2FkRXZlbnQo
KQogewotICAgIGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KG1fb25Mb2FkTGlz
dGVuZXIuZ2V0KCksIGxvYWRFdmVudCwgZmFsc2UsIDAsIDApOworICAgIGRpc3BhdGNoWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50KG1fb25Mb2FkTGlzdGVuZXIuZ2V0KCksIGV2ZW50TmFtZXMo
KS5sb2FkRXZlbnQsIGZhbHNlLCAwLCAwKTsKIH0KIAogdm9pZCBYTUxIdHRwUmVxdWVzdFVwbG9h
ZDo6ZGlzcGF0Y2hMb2FkU3RhcnRFdmVudCgpCiB7Ci0gICAgZGlzcGF0Y2hYTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnQobV9vbkxvYWRTdGFydExpc3RlbmVyLmdldCgpLCBsb2Fkc3RhcnRFdmVu
dCwgZmFsc2UsIDAsIDApOworICAgIGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
KG1fb25Mb2FkU3RhcnRMaXN0ZW5lci5nZXQoKSwgZXZlbnROYW1lcygpLmxvYWRzdGFydEV2ZW50
LCBmYWxzZSwgMCwgMCk7CiB9CiAKIHZvaWQgWE1MSHR0cFJlcXVlc3RVcGxvYWQ6OmRpc3BhdGNo
UHJvZ3Jlc3NFdmVudChsb25nIGxvbmcgYnl0ZXNTZW50LCBsb25nIGxvbmcgdG90YWxCeXRlc1Rv
QmVTZW50KQogewotICAgIGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KG1fb25Q
cm9ncmVzc0xpc3RlbmVyLmdldCgpLCBwcm9ncmVzc0V2ZW50LCB0cnVlLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oYnl0ZXNTZW50KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvdGFsQnl0ZXNUb0Jl
U2VudCkpOworICAgIGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KG1fb25Qcm9n
cmVzc0xpc3RlbmVyLmdldCgpLCBldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCwgdHJ1ZSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGJ5dGVzU2VudCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0b3Rh
bEJ5dGVzVG9CZVNlbnQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS94bWwvWFBhdGhSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hQYXRo
UmVzdWx0LmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL3htbC9YUGF0aFJlc3VsdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgWFBhdGhSZXN1bHQ6OlhQYXRoUmVz
dWx0KEV2ZW50VGFyZ2V0Tm9kZQogICAgICwgbV9ldmVudFRhcmdldChldmVudFRhcmdldCkKIHsK
ICAgICBtX2V2ZW50TGlzdGVuZXIgPSBJbnZhbGlkYXRpbmdFdmVudExpc3RlbmVyOjpjcmVhdGUo
dGhpcyk7Ci0gICAgbV9ldmVudFRhcmdldC0+YWRkRXZlbnRMaXN0ZW5lcihFdmVudE5hbWVzOjpE
T01TdWJ0cmVlTW9kaWZpZWRFdmVudCwgbV9ldmVudExpc3RlbmVyLCBmYWxzZSk7CisgICAgbV9l
dmVudFRhcmdldC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuRE9NU3VidHJlZU1vZGlm
aWVkRXZlbnQsIG1fZXZlbnRMaXN0ZW5lciwgZmFsc2UpOwogICAgIHN3aXRjaCAobV92YWx1ZS50
eXBlKCkpIHsKICAgICAgICAgY2FzZSBWYWx1ZTo6Qm9vbGVhblZhbHVlOgogICAgICAgICAgICAg
bV9yZXN1bHRUeXBlID0gQk9PTEVBTl9UWVBFOwpAQCAtNzksNyArNzksNyBAQCBYUGF0aFJlc3Vs
dDo6WFBhdGhSZXN1bHQoRXZlbnRUYXJnZXROb2RlCiBYUGF0aFJlc3VsdDo6flhQYXRoUmVzdWx0
KCkKIHsKICAgICBpZiAobV9ldmVudFRhcmdldCkKLSAgICAgICAgbV9ldmVudFRhcmdldC0+cmVt
b3ZlRXZlbnRMaXN0ZW5lcihFdmVudE5hbWVzOjpET01TdWJ0cmVlTW9kaWZpZWRFdmVudCwgbV9l
dmVudExpc3RlbmVyLmdldCgpLCBmYWxzZSk7CisgICAgICAgIG1fZXZlbnRUYXJnZXQtPnJlbW92
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLkRPTVN1YnRyZWVNb2RpZmllZEV2ZW50LCBtX2V2
ZW50TGlzdGVuZXIuZ2V0KCksIGZhbHNlKTsKIH0KIAogdm9pZCBYUGF0aFJlc3VsdDo6Y29udmVy
dFRvKHVuc2lnbmVkIHNob3J0IHR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTgxLDcgKzE4
MSw3IEBAIHZvaWQgWFBhdGhSZXN1bHQ6OmludmFsaWRhdGVJdGVyYXRvclN0YXQKICAgICBBU1NF
UlQobV9ldmVudFRhcmdldCk7CiAgICAgQVNTRVJUKG1fZXZlbnRMaXN0ZW5lcik7CiAgICAgCi0g
ICAgbV9ldmVudFRhcmdldC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihFdmVudE5hbWVzOjpET01TdWJ0
cmVlTW9kaWZpZWRFdmVudCwgbV9ldmVudExpc3RlbmVyLmdldCgpLCBmYWxzZSk7CisgICAgbV9l
dmVudFRhcmdldC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuRE9NU3VidHJlZU1v
ZGlmaWVkRXZlbnQsIG1fZXZlbnRMaXN0ZW5lci5nZXQoKSwgZmFsc2UpOwogICAgIAogICAgIG1f
ZXZlbnRUYXJnZXQgPSAwOwogfQpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4MDY1KQorKysgV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAwOC0xMS0wMSAg
QWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyMDMwCisgICAgICAgIE1ha2UgRXZlbnROYW1lcyB1c2FibGUgZnJvbSBt
dWx0aXBsZSB0aHJlYWRzCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAg
ICAgICAqIFdlYlZpZXcvV2ViUERGVmlldy5tbToKKyAgICAgICAgKC1bV2ViUERGVmlldyBQREZW
aWV3V2lsbENsaWNrT25MaW5rOndpdGhVUkw6XSk6CisgICAgICAgIEFjY2VzcyBldmVudCBuYW1l
cyB2aWEgZXZlbnROYW1lcygpIGZ1bmN0aW9uLgorCiAyMDA4LTEwLTMxICBDYW1lcm9uIFp3YXJp
Y2ggIDx6d2FyaWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDM4MDY0KQorKysg
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3
ICs4Myw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL0VkaXRvckRlbGV0ZUFjdGlvbi5oPgogI2ltcG9y
dCA8V2ViQ29yZS9FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxlci5oPgot
I2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V4Y2VwdGlv
bkhhbmRsZXJzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RyYWdDb250cm9sbGVyLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERlZp
ZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERlZpZXcubW0JKHJl
dmlzaW9uIDM4MDY0KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERlZpZXcubW0JKHdvcmtp
bmcgY29weSkKQEAgLTU3LDcgKzU3LDYgQEAKICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiAK
IC8vIFJlZGVjbGFyYXRpb25zIG9mIFBERktpdCBub3RpZmljYXRpb25zLiBXZSBjYW4ndCB1c2Ug
dGhlIEFQSSBzaW5jZSB3ZSB1c2UgYSB3ZWFrIGxpbmsgdG8gdGhlIGZyYW1ld29yay4KICNkZWZp
bmUgX3dlYmtpdF9QREZWaWV3RGlzcGxheU1vZGVDaGFuZ2VkTm90aWZpY2F0aW9uIEAiUERGVmll
d0Rpc3BsYXlNb2RlQ2hhbmdlZCIKQEAgLTkzNSw3ICs5MzQsNyBAQCBzdGF0aWMgQk9PTCBfUERG
U2VsZWN0aW9uc0FyZUVxdWFsKFBERlNlCiAgICAgICAgIGNhc2UgTlNLZXlEb3duOiB7CiAgICAg
ICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQgcGUobnNFdmVudCk7CiAgICAgICAgICAgICBw
ZS5kaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpSYXdLZXlE
b3duKTsKLSAgICAgICAgICAgIGV2ZW50ID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKGtleWRvd25F
dmVudCwgdHJ1ZSwgdHJ1ZSwgMCwKKyAgICAgICAgICAgIGV2ZW50ID0gS2V5Ym9hcmRFdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQsIHRydWUsIHRydWUsIDAsCiAgICAgICAg
ICAgICAgICAgcGUua2V5SWRlbnRpZmllcigpLCBwZS53aW5kb3dzVmlydHVhbEtleUNvZGUoKSwK
ICAgICAgICAgICAgICAgICBwZS5jdHJsS2V5KCksIHBlLmFsdEtleSgpLCBwZS5zaGlmdEtleSgp
LCBwZS5tZXRhS2V5KCksIGZhbHNlKTsKICAgICAgICAgfQpAQCAtOTQzLDcgKzk0Miw3IEBAIHN0
YXRpYyBCT09MIF9QREZTZWxlY3Rpb25zQXJlRXF1YWwoUERGU2UKICAgICAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBpZiAoYnV0dG9uICE9IG5vQnV0dG9uKQotICAgICAgICBldmVudCA9IE1v
dXNlRXZlbnQ6OmNyZWF0ZShjbGlja0V2ZW50LCB0cnVlLCB0cnVlLCAwLCBbbnNFdmVudCBjbGlj
a0NvdW50XSwgMCwgMCwgMCwgMCwKKyAgICAgICAgZXZlbnQgPSBNb3VzZUV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIHRydWUsIHRydWUsIDAsIFtuc0V2ZW50IGNsaWNrQ291
bnRdLCAwLCAwLCAwLCAwLAogICAgICAgICAgICAgW25zRXZlbnQgbW9kaWZpZXJGbGFnc10gJiBO
U0NvbnRyb2xLZXlNYXNrLAogICAgICAgICAgICAgW25zRXZlbnQgbW9kaWZpZXJGbGFnc10gJiBO
U0FsdGVybmF0ZUtleU1hc2ssCiAgICAgICAgICAgICBbbnNFdmVudCBtb2RpZmllckZsYWdzXSAm
IE5TU2hpZnRLZXlNYXNrLApJbmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4MDY1KQorKysgV2ViS2l0L3dpbi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAwOC0xMS0wMSAgQWxl
eGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMDMwCisgICAgICAgIE1ha2UgRXZlbnROYW1lcyB1c2FibGUgZnJvbSBtdWx0
aXBsZSB0aHJlYWRzCisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDogKFdlYlZpZXc6OmludGVycHJl
dEtleUV2ZW50KTogQWNjZXNzIGV2ZW50IG5hbWVzIHZpYSBldmVudE5hbWVzKCkgZnVuY3Rpb24u
CisKIDIwMDgtMTAtMzEgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgpJbmRleDogV2ViS2l0L3dpbi9XZWJWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiAzODA2NCkK
KysrIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQs
NiBAQAogI2luY2x1ZGUgPHdpbmRvd3N4Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkV2ZW50TmFtZXM7CiB1c2luZyBKU0M6OkpTTG9jazsK
IHVzaW5nIHN0ZDo6bWluOwogdXNpbmcgc3RkOjptYXg7CkBAIC0xNDM2LDcgKzE0MzUsNyBAQCBz
dGF0aWMgY29uc3QgS2V5UHJlc3NFbnRyeSBrZXlQcmVzc0VudHJpCiAKIGNvbnN0IGNoYXIqIFdl
YlZpZXc6OmludGVycHJldEtleUV2ZW50KGNvbnN0IEtleWJvYXJkRXZlbnQqIGV2dCkKIHsKLSAg
ICBBU1NFUlQoZXZ0LT50eXBlKCkgPT0ga2V5ZG93bkV2ZW50IHx8IGV2dC0+dHlwZSgpID09IGtl
eXByZXNzRXZlbnQpOworICAgIEFTU0VSVChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5
ZG93bkV2ZW50IHx8IGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KTsK
IAogICAgIHN0YXRpYyBIYXNoTWFwPGludCwgY29uc3QgY2hhcio+KiBrZXlEb3duQ29tbWFuZHNN
YXAgPSAwOwogICAgIHN0YXRpYyBIYXNoTWFwPGludCwgY29uc3QgY2hhcio+KiBrZXlQcmVzc0Nv
bW1hbmRzTWFwID0gMDsKQEAgLTE0NjAsNyArMTQ1OSw3IEBAIGNvbnN0IGNoYXIqIFdlYlZpZXc6
OmludGVycHJldEtleUV2ZW50KGMKICAgICBpZiAoZXZ0LT5jdHJsS2V5KCkpCiAgICAgICAgIG1v
ZGlmaWVycyB8PSBDdHJsS2V5OwogCi0gICAgaWYgKGV2dC0+dHlwZSgpID09IGtleWRvd25FdmVu
dCkgeworICAgIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSB7
CiAgICAgICAgIGludCBtYXBLZXkgPSBtb2RpZmllcnMgPDwgMTYgfCBldnQtPmtleUNvZGUoKTsK
ICAgICAgICAgcmV0dXJuIG1hcEtleSA/IGtleURvd25Db21tYW5kc01hcC0+Z2V0KG1hcEtleSkg
OiAwOwogICAgIH0KSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CShyZXZpc2lvbiAzODA2
NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CSh3b3JraW5nIGNvcHkpCkBA
IC01NSw2ICs1NSw3IEBAIG15ICR4cGF0aFN1cHBvcnQgPSAxOwogbXkgJHhzbHRTdXBwb3J0ID0g
MTsKIG15ICRjb3ZlcmFnZVN1cHBvcnQgPSAwOwogbXkgJHZpZGVvU3VwcG9ydCA9IChpc09TWCgp
IHx8IGlzQ3lnd2luKCkpOyAjIEVuYWJsZSBieSBkZWZhdWx0IG9uIE9TWCBhbmQgV2luZG93cwor
bXkgJHdvcmtlcnNTdXBwb3J0ID0gMTsKIG15ICRzaG93SGVscCA9IDA7CiBteSAkY2xlYW4gPSAw
OwogbXkgJGJ1aWxkVW5pdmVyc2FsID0gMDsKQEAgLTg0LDYgKzg1LDcgQEAgVXNhZ2U6ICRwcm9n
cmFtTmFtZSBbb3B0aW9uc10gW29wdGlvbnMgdAogICAtLVtuby1deHBhdGggICAgICAgICAgICAg
ICAgICBUb2dnbGUgWFBhdGggc3VwcG9ydCAoZGVmYXVsdDogJHhwYXRoU3VwcG9ydCkKICAgLS1b
bm8tXXhzbHQgICAgICAgICAgICAgICAgICAgVG9nZ2xlIFhTTFQgc3VwcG9ydCAoZGVmYXVsdDog
JHhzbHRTdXBwb3J0KQogICAtLVtuby1ddmlkZW8gICAgICAgICAgICAgICAgICBUb2dnbGUgVmlk
ZW8gc3VwcG9ydCAoZGVmYXVsdDogJHZpZGVvU3VwcG9ydCkKKyAgLS1bbm8tXXdvcmtlcnMgICAg
ICAgICAgICAgICAgVG9nZ2xlIFdlYiBXb3JrZXJzIHN1cHBvcnQgKGRlZmF1bHQ6ICR3b3JrZXJz
U3VwcG9ydCkKICAgLS1bbm8tXWNvdmVyYWdlICAgICAgICAgICAgICAgVG9nZ2xlIGNvZGUgY292
ZXJhZ2Ugc3VwcG9ydCAoZGVmYXVsdDogJGNvdmVyYWdlU3VwcG9ydCkKIEVPRgogCkBAIC0xMDIs
NiArMTA0LDcgQEAgR2V0T3B0aW9ucygnZGF0YWJhc2UhJyA9PiBcJGRhdGFiYXNlU3VwcAogICAg
ICAgICAgICAneHBhdGghJyA9PiBcJHhwYXRoU3VwcG9ydCwKICAgICAgICAgICAgJ3hzbHQhJyA9
PiBcJHhzbHRTdXBwb3J0LAogICAgICAgICAgICAndmlkZW8hJyA9PiBcJHZpZGVvU3VwcG9ydCwK
KyAgICAgICAgICAgJ3dvcmtlcnMhJyA9PiBcJHdvcmtlcnNTdXBwb3J0LAogICAgICAgICAgICAn
Y292ZXJhZ2UhJyA9PiBcJGNvdmVyYWdlU3VwcG9ydCwKICAgICAgICAgICAgJ2hlbHAnID0+IFwk
c2hvd0hlbHAsCiAgICAgICAgICAgICd1bml2ZXJzYWwnID0+IFwkYnVpbGRVbml2ZXJzYWwsCkBA
IC0xNjYsNiArMTY5LDcgQEAgcHVzaCBAb3ZlcnJpZGVGZWF0dXJlRGVmaW5lc09wdGlvbiwgIkVO
QQogcHVzaCBAb3ZlcnJpZGVGZWF0dXJlRGVmaW5lc09wdGlvbiwgIkVOQUJMRV9TVkdfRk9SRUlH
Tl9PQkpFQ1QiIGlmICRzdmdGb3JlaWduT2JqZWN0U3VwcG9ydDsKIHB1c2ggQG92ZXJyaWRlRmVh
dHVyZURlZmluZXNPcHRpb24sICJFTkFCTEVfU1ZHX1VTRSIgaWYgJHN2Z1VzZVN1cHBvcnQ7CiBw
dXNoIEBvdmVycmlkZUZlYXR1cmVEZWZpbmVzT3B0aW9uLCAiRU5BQkxFX1ZJREVPIiBpZiAkdmlk
ZW9TdXBwb3J0OworcHVzaCBAb3ZlcnJpZGVGZWF0dXJlRGVmaW5lc09wdGlvbiwgIkVOQUJMRV9X
T1JLRVJTIiBpZiAkd29ya2Vyc1N1cHBvcnQ7CiBwdXNoIEBvdmVycmlkZUZlYXR1cmVEZWZpbmVz
T3B0aW9uLCAiRU5BQkxFX1hQQVRIIiBpZiAkeHBhdGhTdXBwb3J0OwogcHVzaCBAb3ZlcnJpZGVG
ZWF0dXJlRGVmaW5lc09wdGlvbiwgIkVOQUJMRV9YU0xUIiBpZiAkeHNsdFN1cHBvcnQ7CiBteSAk
b3ZlcnJpZGVGZWF0dXJlRGVmaW5lc1N0cmluZyA9ICJGRUFUVVJFX0RFRklORVM9IiAuIGpvaW4o
IiAiLCBAb3ZlcnJpZGVGZWF0dXJlRGVmaW5lc09wdGlvbik7CkBAIC0yMjYsNiArMjMwLDcgQEAg
aWYgKGlzR3RrKCkpIHsKICAgICBwdXNoIEBvcHRpb25zLCBhdXRvdG9vbHNGbGFnKCR4cGF0aFN1
cHBvcnQsICJ4cGF0aCIpOwogICAgIHB1c2ggQG9wdGlvbnMsIGF1dG90b29sc0ZsYWcoJHhzbHRT
dXBwb3J0LCAieHNsdCIpOwogICAgIHB1c2ggQG9wdGlvbnMsIGF1dG90b29sc0ZsYWcoJHZpZGVv
U3VwcG9ydCwgInZpZGVvIik7CisgICAgcHVzaCBAb3B0aW9ucywgYXV0b3Rvb2xzRmxhZygkd29y
a2Vyc1N1cHBvcnQsICJ3b3JrZXJzIik7CiAgICAgcHVzaCBAb3B0aW9ucywgYXV0b3Rvb2xzRmxh
ZygkY292ZXJhZ2VTdXBwb3J0LCAiY292ZXJhZ2UiKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24837</attachid>
            <date>2008-11-01 15:38:37 -0700</date>
            <delta_ts>2008-11-03 09:12:58 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>AtomicString.txt</filename>
            <type>text/plain</type>
            <size>241464</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODA2NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzE2IEBACisyMDA4LTExLTAxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwMzAKKyAgICAgICAg
TWFrZSBFdmVudE5hbWVzIHVzYWJsZSBmcm9tIG11bHRpcGxlIHRocmVhZHMKKworICAgICAgICAq
IHBsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cmlu
Z1RhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY1N0cmluZzo6YWRkKToKKyAgICAgICAg
KFdlYkNvcmU6OkF0b21pY1N0cmluZzo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21p
Y1N0cmluZzo6ZmluZCk6CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNTdHJpbmc6OmluaXQpOgor
ICAgICAgICAqIHBsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmg6CisgICAgICAgIEF0aW1pYyBz
dHJpbmcgdGFibGUgaXMgbm93IHBlci10aHJlYWQuIEluZGl2aWR1YWwgc3RyaW5ncyBjYW5ub3Qg
YmUgc2hhcmVkIGJldHdlZW4gdGhyZWFkcywKKyAgICAgICAgc28gZ2xvYmFsIEF0b21pY1N0cmlu
ZyBjb25zdGFudHMgY2Fubm90IGJlIHVzZWQgZnJvbSB0aHJlYWRzIG90aGVyIHRoYW4gdGhlIG1h
aW4gb25lLgorCisgICAgICAgICogZG9tL0V2ZW50TmFtZXMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnROYW1lczo6RXZlbnROYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpldmVudE5hbWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TmFtZXM6OmluaXQpOgorICAgICAgICAqIGRvbS9F
dmVudE5hbWVzLmg6CisgICAgICAgIE1hZGUgRXZlbnROYW1lcyBhIFRocmVhZFNwZWNpZmljIHN0
cnVjdC4gSW5kaXZpZHVhbCBldmVudCBuYW1lcyBhcmUgbm93IGFjY2Vzc2VkIGFzCisgICAgICAg
IGV2ZW50TmFtZXMoKS5mb29FdmVudCwgbm90IEV2ZW50TmFtZXM6OmZvb0V2ZW50LiBUaGlzIG1h
a2VzIEV2ZW50TmFtZXMgdXNhYmxlIGZyb20gYWxsCisgICAgICAgIHRocmVhZHMuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmJhc2UuZXhwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93
QmFzZS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSk6CisgICAgICAgICog
ZG9tL0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJlZm9y
ZVRleHRJbnNlcnRlZEV2ZW50OjpCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCk6CisgICAgICAgICog
ZG9tL0JlZm9yZVVubG9hZEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJlZm9yZVVubG9h
ZEV2ZW50OjpCZWZvcmVVbmxvYWRFdmVudCk6CisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6ZGlzcGF0Y2hNb2RpZmllZEV2
ZW50KToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpkaXNwYXRjaENoaWxkSW5zZXJ0aW9uRXZlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmRpc3Bh
dGNoQ2hpbGRSZW1vdmFsRXZlbnRzKToKKyAgICAgICAgKiBkb20vRGVkaWNhdGVkV29ya2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZGljYXRlZFdvcmtlcjo6ZGlzcGF0Y2hFcnJvckV2ZW50
KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OmltcGxpY2l0Q2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldEZvY3Vz
ZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZGRMaXN0ZW5lclR5cGVJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlV2luZG93SW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFkZFdpbmRv
d0V2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlbW92ZVdpbmRv
d0V2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmZpbmlzaGVkUGFy
c2luZyk6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0Tm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudFRhcmdldE5vZGU6OmRpc3BhdGNoR2VuZXJpY0V2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldE5vZGU6OmRpc3BhdGNoV2luZG93RXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaFVJRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaFNpbXVsYXRlZENsaWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hNb3VzZUV2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hGb2N1c0V2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hCbHVyRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2RlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9kZTo6b24qKTogKG11bHRpcGxlIG1ldGhv
ZHMpCisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldE5vZGU6OnNldE9uKik6IChtdWx0aXBs
ZSBtZXRob2RzKQorICAgICAgICAqIGRvbS9LZXlib2FyZEV2ZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmV2ZW50VHlwZUZvcktleWJvYXJkRXZlbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OktleWJvYXJkRXZlbnQ6OmtleUNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5Ym9hcmRFdmVu
dDo6Y2hhckNvZGUpOgorICAgICAgICAqIGRvbS9NZXNzYWdlRXZlbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVzc2FnZUV2ZW50OjpNZXNzYWdlRXZlbnQpOgorICAgICAgICAqIGRvbS9NZXNz
YWdlUG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6ZGlzcGF0Y2hNZXNz
YWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6ZGlzcGF0Y2hDbG9zZUV2ZW50
KToKKyAgICAgICAgKiBkb20vTW91c2VFdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb3Vz
ZUV2ZW50Ojppc0RyYWdFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50Ojp0b0Vs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TW91c2VFdmVudDo6ZnJvbUVsZW1lbnQpOgorICAg
ICAgICAqIGRvbS9PdmVyZmxvd0V2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok92ZXJmbG93
RXZlbnQ6Ok92ZXJmbG93RXZlbnQpOgorICAgICAgICAqIGRvbS9UZXh0RXZlbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEV2ZW50OjpUZXh0RXZlbnQpOgorICAgICAgICAqIGRvbS9XZWJL
aXRBbmltYXRpb25FdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRBbmltYXRpb25F
dmVudDo6V2ViS2l0QW5pbWF0aW9uRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0QW5p
bWF0aW9uRXZlbnQ6On5XZWJLaXRBbmltYXRpb25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJLaXRBbmltYXRpb25FdmVudDo6aW5pdFdlYktpdEFuaW1hdGlvbkV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYktpdEFuaW1hdGlvbkV2ZW50OjphbmltYXRpb25OYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYktpdEFuaW1hdGlvbkV2ZW50OjplbGFwc2VkVGltZSk6CisgICAgICAgICog
ZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRU
cmFuc2l0aW9uRXZlbnQ6OldlYktpdFRyYW5zaXRpb25FdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJLaXRUcmFuc2l0aW9uRXZlbnQ6On5XZWJLaXRUcmFuc2l0aW9uRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViS2l0VHJhbnNpdGlvbkV2ZW50Ojppbml0V2ViS2l0VHJhbnNpdGlvbkV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdFRyYW5zaXRpb25FdmVudDo6cHJvcGVydHlO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdFRyYW5zaXRpb25FdmVudDo6ZWxhcHNlZFRp
bWUpOgorICAgICAgICAqIGRvbS9XaGVlbEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldo
ZWVsRXZlbnQ6OldoZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2hlZWxFdmVudDo6aW5p
dFdoZWVsRXZlbnQpOgorICAgICAgICAqIGRvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcDoKKyAg
ICAgICAgKiBkb20vWE1MVG9rZW5pemVyUXQuY3BwOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRl
QnV0dG9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUJ1dHRvbjo6ZGVmYXVsdEV2ZW50
SGFuZGxlcik6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5jcHA6CisgICAgICAgICog
ZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5ESFRNTEN1
dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkRIVE1MQ29weSk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmNhbkRIVE1MUGFzdGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojp0cnlESFRNTENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlESFRNTEN1dCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRyeURIVE1MUGFzdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6ZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnRzKToKKyAgICAgICAgKiBl
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
cGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQpOgorICAgICAgICAqIGVkaXRp
bmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25D
b250cm9sbGVyOjpzZXRGb2N1c2VkKToKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxCb2R5RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KiBodG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCdXR0
b25FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9IVE1M
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpvbkNoYW5nZSk6CisgICAg
ICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50OjpoYW5kbGVMb2NhbEV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9y
bUVsZW1lbnQ6OnByZXBhcmVTdWJtaXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVt
ZW50OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAg
ICAgICAgKiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEltYWdlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRN
TEltYWdlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUxvYWRlcjo6ZGlz
cGF0Y2hMb2FkRXZlbnQpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJl
cik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpwcmVEaXNwYXRjaEV2ZW50
SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpwb3N0RGlzcGF0
Y2hFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpv
blNlYXJjaCk6CisgICAgICAgICogaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxMYWJlbEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAg
ICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50Ojpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om1l
ZGlhUGxheWVyTmV0d29ya1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50OjpzZXRSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OnByb2dyZXNzRXZlbnRUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OnNlZWspOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
c2V0RGVmYXVsdFBsYXliYWNrUmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjpzZXRQbGF5YmFja1JhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpwYXVzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZXRWb2x1bWUpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpkb2N1bWVudFdpbGxCZWNvbWVJbmFjdGl2ZSk6CisgICAg
ICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
T2JqZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRN
TE9wdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50OjpkaXNwYXRjaExvYWRF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6ZGlzcGF0Y2hFcnJv
ckV2ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxpc3REZWZhdWx0RXZlbnRI
YW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVm
YXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvSFRNTFRva2VuaXplci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgICogbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzdG9w
TG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2FuQ2FjaGVQYWdlKToK
KyAgICAgICAgKiBsb2FkZXIvSW1hZ2VEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBsb2FkZXIvSW1hZ2VM
b2FkZXIuY3BwOgorICAgICAgICAqIGxvYWRlci9NZWRpYURvY3VtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhRG9jdW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAq
IGxvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxDaGVja2luZ0xpc3RlbmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxFcnJvckxpc3RlbmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxOb1VwZGF0ZUxpc3RlbmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxEb3dubG9hZGluZ0xp
c3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxQcm9n
cmVzc0xpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNh
bGxVcGRhdGVSZWFkeUxpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9u
Q2FjaGU6OmNhbGxDYWNoZWRMaXN0ZW5lcik6CisgICAgICAgICogcGFnZS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcDoKKyAgICAgICAgKiBwYWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bW91c2VCdXR0
b25MaXN0ZW5lcik6CisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpoYW5kbGVDb250ZXh0TWVu
dUV2ZW50KToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpET01XaW5kb3c6Om9uKik6IChtdWx0aXBsZSBtZXRob2RzKQorICAgICAgICAoV2ViQ29yZTo6
RE9NV2luZG93OjpzZXRPbiopOiAobXVsdGlwbGUgbWV0aG9kcykKKyAgICAgICAgKiBwYWdlL0V2
ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1v
dXNlUHJlc3NFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1v
dXNlRG91YmxlQ2xpY2tFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6Omhh
bmRsZU1vdXNlTW92ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFu
ZGxlTW91c2VSZWxlYXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp1
cGRhdGVEcmFnQW5kRHJvcCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNhbmNl
bERyYWdBbmREcm9wKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGVyZm9ybURy
YWdBbmREcm9wKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6dXBkYXRlTW91c2VF
dmVudFRhcmdldE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkaXNwYXRj
aE1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4
dE1lbnVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNhbk1vdXNlRG93
blN0YXJ0U2VsZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y2FuTW91c2VE
cmFnRXh0ZW5kU2VsZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGVmYXVs
dEtleWJvYXJkRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
ZHJhZ1NvdXJjZU1vdmVkVG8pOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkcmFn
U291cmNlRW5kZWRBdCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZURy
YWcpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVUZXh0SW5wdXRFdmVu
dCk6CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAqIHBhZ2Uv
RnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNlbmRSZXNpemVFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2VuZFNjcm9sbEV2ZW50KToKKyAgICAgICAgKiBwYWdl
L1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV0d29ya1N0YXRlQ2hhbmdlZCk6CisgICAg
ICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
QW5pbWF0aW9uQmFzZTo6YW5pbWF0aW9uVGltZXJDYWxsYmFja0ZpcmVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkFuaW1hdGlvbkJhc2U6OnByaW1lRXZlbnRUaW1lcnMpOgorICAgICAgICAqIHBhZ2Uv
YW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltcGxp
Y2l0QW5pbWF0aW9uOjpvbkFuaW1hdGlvbkVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbXBsaWNp
dEFuaW1hdGlvbjo6c2VuZFRyYW5zaXRpb25FdmVudCk6CisgICAgICAgICogcGFnZS9hbmltYXRp
b24vS2V5ZnJhbWVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmlt
YXRpb246Om9uQW5pbWF0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmlt
YXRpb246Om9uQW5pbWF0aW9uSXRlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1l
QW5pbWF0aW9uOjpvbkFuaW1hdGlvbkVuZCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUFu
aW1hdGlvbjo6c2VuZEFuaW1hdGlvbkV2ZW50KToKKyAgICAgICAgKiBwYWdlL2d0ay9FdmVudEhh
bmRsZXJHdGsuY3BwOgorICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzS2V5Ym9hcmRPcHRpb25UYWIpOgorICAgICAgICAqIHBhZ2UvbWFj
L0ZyYW1lTWFjLm1tOgorICAgICAgICAqIHBhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6aXNLZXlib2FyZE9wdGlvblRhYik6CisgICAgICAgICogcGx1Z2lucy9Q
bHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcDoK
KyAgICAgICAgKiBwbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHA6CisgICAgICAgICogcGx1Z2lu
cy93aW4vUGx1Z2luVmlld1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpo
YW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRs
ZU1vdXNlRXZlbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xQbGF5QnV0
dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFt
ZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFtZVNldDo6dXNlclJlc2l6ZSk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6dmFsdWVDaGFu
Z2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWVkaWE6OmZvcndhcmRFdmVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU2xpZGVyVGh1bWJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmZvcndhcmRFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6c2VsZWN0aW9uQ2hhbmdlZCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRDb250
cm9sSW5uZXJFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29udHJvbElubmVy
VGV4dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIpOgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VBcmVhOjpkaXNwYXRjaFN0b3JhZ2VFdmVudCk6Cisg
ICAgICAgICogc3RvcmFnZS9TZXNzaW9uU3RvcmFnZUFyZWEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2Vzc2lvblN0b3JhZ2VBcmVhOjpkaXNwYXRjaFN0b3JhZ2VFdmVudCk6CisgICAgICAgICog
c3ZnL1NWR0FFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBzdmcvU1ZHRG9jdW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnQ6OmRpc3BhdGNoWm9vbUV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0RvY3VtZW50OjpkaXNwYXRjaFNjcm9sbEV2ZW50KToKKyAgICAgICAgKiBzdmcv
U1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpoYXNMb2FkTGlzdGVuZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6c2VuZFNWR0xvYWRFdmVudElmUG9zc2libGUpOgorICAg
ICAgICAqIHN2Zy9TVkdFbGVtZW50SW5zdGFuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RWxlbWVudEluc3RhbmNlOjpvbiopOiAobXVsdGlwbGUgbWV0aG9kcykKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T24qKTogKG11bHRpcGxlIG1ldGhvZHMpCisgICAg
ICAgICogc3ZnL1NWR0ltYWdlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdl
TG9hZGVyOjpkaXNwYXRjaExvYWRFdmVudCk6CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOgorICAgICAgICAqIHN2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1NjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoRXJyb3JFdmVudCk6CisgICAgICAgICogeG1s
L1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpk
aXNwYXRjaFJlYWR5U3RhdGVDaGFuZ2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRw
UmVxdWVzdDo6ZGlzcGF0Y2hBYm9ydEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0OjpkaXNwYXRjaEVycm9yRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJl
cXVlc3Q6OmRpc3BhdGNoTG9hZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1
ZXN0OjpkaXNwYXRjaExvYWRTdGFydEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0OjpkaXNwYXRjaFByb2dyZXNzRXZlbnQpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVx
dWVzdFVwbG9hZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFVwbG9hZDo6
ZGlzcGF0Y2hBYm9ydEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0VXBs
b2FkOjpkaXNwYXRjaEVycm9yRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVl
c3RVcGxvYWQ6OmRpc3BhdGNoTG9hZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0VXBsb2FkOjpkaXNwYXRjaExvYWRTdGFydEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlhNTEh0dHBSZXF1ZXN0VXBsb2FkOjpkaXNwYXRjaFByb2dyZXNzRXZlbnQpOgorICAgICAgICAq
IHhtbC9YUGF0aFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6WFBh
dGhSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6On5YUGF0aFJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6aW52YWxpZGF0ZUl0ZXJhdG9yU3RhdGUp
OgorICAgICAgICBBY2Nlc3MgZXZlbnQgbmFtZXMgdmlhIGV2ZW50TmFtZXMoKSBmdW5jdGlvbi4K
KwogMjAwOC0xMS0wMSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZpc2lvbiAzODA2NCkK
KysrIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDE0ICsx
MjcsMTMgQEAgX19aMjZSZXBvcnRCbG9ja2VkT2JqQ0V4Y2VwdGlvblAxMU5TRXhjZQogX19aTjdX
ZWJDb3JlMTBDYWNoZWRQYWdlMTRkb2N1bWVudExvYWRlckV2CiBfX1pON1dlYkNvcmUxMENhY2hl
ZFBhZ2UyMmNhY2hlZFBhZ2VQbGF0Zm9ybURhdGFFdgogX19aTjdXZWJDb3JlMTBDYWNoZWRQYWdl
MjVzZXRDYWNoZWRQYWdlUGxhdGZvcm1EYXRhRVBOU18yMkNhY2hlZFBhZ2VQbGF0Zm9ybURhdGFF
Ci1fX1pON1dlYkNvcmUxMEV2ZW50TmFtZXMxMGNsaWNrRXZlbnRFCi1fX1pON1dlYkNvcmUxMEV2
ZW50TmFtZXMxMmtleWRvd25FdmVudEUKIF9fWk43V2ViQ29yZTEwTW91c2VFdmVudEMxRVJLTlNf
MTJBdG9taWNTdHJpbmdFYmJOM1dURjEwUGFzc1JlZlB0cklOU185RE9NV2luZG93RUVFaWlpaWli
YmJidE5TNV9JTlNfMTVFdmVudFRhcmdldE5vZGVFRUVOUzVfSU5TXzlDbGlwYm9hcmRFRUViCiBf
X1pON1dlYkNvcmUxMFNjcm9sbFZpZXcxN3NldFNjcm9sbGJhck1vZGVzRU5TXzEzU2Nyb2xsYmFy
TW9kZUVTMV8KIF9fWk43V2ViQ29yZTEwU2Nyb2xsVmlldzIwc2V0Q2FuSGF2ZVNjcm9sbGJhcnNF
YgogX19aTjdXZWJDb3JlMTBTdHJpbmdJbXBsN3JlcGxhY2VFdHQKIF9fWk43V2ViQ29yZTEwU3Ry
aW5nSW1wbEQxRXYKIF9fWk43V2ViQ29yZTEwU3RyaW5nSW1wbGN2UDhOU1N0cmluZ0V2CitfX1pO
N1dlYkNvcmUxMGV2ZW50TmFtZXNFdgogX19aTjdXZWJDb3JlMTFDb250ZXh0TWVudTIyc2V0UGxh
dGZvcm1EZXNjcmlwdGlvbkVQMTROU011dGFibGVBcnJheQogX19aTjdXZWJDb3JlMTFFZGl0Q29t
bWFuZDdyZWFwcGx5RXYKIF9fWk43V2ViQ29yZTExRWRpdENvbW1hbmQ3dW5hcHBseUV2CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lvbiAzODA2NCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkVs
ZW1lbnQuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtOTgsOCArOTcsNiBAQCBzdGF0aWMgdm9pZCBzZXRKU0RP
TVdpbmRvd0Jhc2VYU0xUUHJvY2VzCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFt
ZXNwYWNlIEV2ZW50TmFtZXM7Ci0KIHN0YXRpYyBpbnQgbGFzdFVzZWRUaW1lb3V0SWQ7CiAKIHN0
YXRpYyBpbnQgdGltZXJOZXN0aW5nTGV2ZWwgPSAwOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAK
ICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkV2ZW50LmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgpAQCAtNDEs
OCArNDAsNiBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwotCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxM
KEpTQWJzdHJhY3RFdmVudExpc3RlbmVyKQogCiB2b2lkIEpTQWJzdHJhY3RFdmVudExpc3RlbmVy
OjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQsIGJvb2wgaXNXaW5kb3dFdmVudCkKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMzgwNjQpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MCw3ICs1MCw2IEBACiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOjpFdmVudE5hbWVzOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTE4NCwxNSArMTgzLDE1IEBAIGJvb2wgU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1Vz
ZXJHZXMKICAgICBpZiAoRXZlbnQqIGV2ZW50ID0gbV93aW5kb3dTaGVsbC0+d2luZG93KCktPmN1
cnJlbnRFdmVudCgpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSA9IGV2ZW50
LT50eXBlKCk7CiAgICAgICAgIGlmICggLy8gbW91c2UgZXZlbnRzCi0gICAgICAgICAgICB0eXBl
ID09IGNsaWNrRXZlbnQgfHwgdHlwZSA9PSBtb3VzZWRvd25FdmVudCB8fAotICAgICAgICAgICAg
dHlwZSA9PSBtb3VzZXVwRXZlbnQgfHwgdHlwZSA9PSBkYmxjbGlja0V2ZW50IHx8CisgICAgICAg
ICAgICB0eXBlID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50IHx8IHR5cGUgPT0gZXZlbnROYW1l
cygpLm1vdXNlZG93bkV2ZW50IHx8CisgICAgICAgICAgICB0eXBlID09IGV2ZW50TmFtZXMoKS5t
b3VzZXVwRXZlbnQgfHwgdHlwZSA9PSBldmVudE5hbWVzKCkuZGJsY2xpY2tFdmVudCB8fAogICAg
ICAgICAgICAgLy8ga2V5Ym9hcmQgZXZlbnRzCi0gICAgICAgICAgICB0eXBlID09IGtleWRvd25F
dmVudCB8fCB0eXBlID09IGtleXByZXNzRXZlbnQgfHwKLSAgICAgICAgICAgIHR5cGUgPT0ga2V5
dXBFdmVudCB8fAorICAgICAgICAgICAgdHlwZSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50
IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQgfHwKKyAgICAgICAgICAgIHR5
cGUgPT0gZXZlbnROYW1lcygpLmtleXVwRXZlbnQgfHwKICAgICAgICAgICAgIC8vIG90aGVyIGFj
Y2VwdGVkIGV2ZW50cwotICAgICAgICAgICAgdHlwZSA9PSBzZWxlY3RFdmVudCB8fCB0eXBlID09
IGNoYW5nZUV2ZW50IHx8Ci0gICAgICAgICAgICB0eXBlID09IGZvY3VzRXZlbnQgfHwgdHlwZSA9
PSBibHVyRXZlbnQgfHwKLSAgICAgICAgICAgIHR5cGUgPT0gc3VibWl0RXZlbnQpCisgICAgICAg
ICAgICB0eXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudCB8fCB0eXBlID09IGV2ZW50TmFt
ZXMoKS5jaGFuZ2VFdmVudCB8fAorICAgICAgICAgICAgdHlwZSA9PSBldmVudE5hbWVzKCkuZm9j
dXNFdmVudCB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQgfHwKKyAgICAgICAgICAg
IHR5cGUgPT0gZXZlbnROYW1lcygpLnN1Ym1pdEV2ZW50KQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfSBlbHNlIHsgLy8gbm8gZXZlbnQKICAgICAgICAgaWYgKG1fc291cmNlVVJMICYm
IG1fc291cmNlVVJMLT5pc051bGwoKSAmJiAhbV9wcm9jZXNzaW5nVGltZXJDYWxsYmFjaykgewpJ
bmRleDogV2ViQ29yZS9kb20vQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmNwcAkocmV2aXNpb24gMzgw
NjQpCisrKyBXZWJDb3JlL2RvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDEwICszMCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcg
bmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0KIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50OjpCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudChjb25zdCBTdHJpbmcmIHRleHQpCi0gICAgOiBFdmVudCh3ZWJraXRC
ZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCwgZmFsc2UsIHRydWUpLCBtX3RleHQodGV4dCkKKyAgICA6
IEV2ZW50KGV2ZW50TmFtZXMoKS53ZWJraXRCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCwgZmFsc2Us
IHRydWUpLCBtX3RleHQodGV4dCkKIHsKIH0KIApJbmRleDogV2ViQ29yZS9kb20vQmVmb3JlVW5s
b2FkRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0JlZm9yZVVubG9hZEV2ZW50
LmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL2RvbS9CZWZvcmVVbmxvYWRFdmVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0KIEJlZm9yZVVubG9hZEV2ZW50OjpC
ZWZvcmVVbmxvYWRFdmVudCgpCi0gICAgOiBFdmVudChiZWZvcmV1bmxvYWRFdmVudCwgZmFsc2Us
IHRydWUpCisgICAgOiBFdmVudChldmVudE5hbWVzKCkuYmVmb3JldW5sb2FkRXZlbnQsIGZhbHNl
LCB0cnVlKQogewogfQogCkluZGV4OiBXZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAkocmV2aXNpb24gMzgwNjQp
CisrKyBXZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
OCArMzEsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBFdmVu
dE5hbWVzOwotCiBDaGFyYWN0ZXJEYXRhOjpDaGFyYWN0ZXJEYXRhKERvY3VtZW50ICpkb2MpCiAg
ICAgOiBFdmVudFRhcmdldE5vZGUoZG9jKQogICAgICwgbV9kYXRhKFN0cmluZ0ltcGw6OmVtcHR5
KCkpCkBAIC0yMDEsNyArMTk5LDcgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjpkaXNwYXRjaE1vZGlm
aWVkRXZlbgogICAgICAgICBwYXJlbnROb2RlKCktPmNoaWxkcmVuQ2hhbmdlZCgpOwogICAgIGlm
IChkb2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTUNIQVJBQ1RFUkRBVEFN
T0RJRklFRF9MSVNURU5FUikpIHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAg
ZGlzcGF0Y2hFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoRE9NQ2hhcmFjdGVyRGF0YU1vZGlm
aWVkRXZlbnQsIHRydWUsIGZhbHNlLCAwLCBwcmV2VmFsdWUsIG1fZGF0YSwgU3RyaW5nKCksIDAp
LCBlYyk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS5ET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWRFdmVudCwgdHJ1ZSwgZmFsc2UsIDAsIHBy
ZXZWYWx1ZSwgbV9kYXRhLCBTdHJpbmcoKSwgMCksIGVjKTsKICAgICB9CiAgICAgZGlzcGF0Y2hT
dWJ0cmVlTW9kaWZpZWRFdmVudCgpOwogfQpJbmRleDogV2ViQ29yZS9kb20vQ29udGFpbmVyTm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlz
aW9uIDM4MDY0KQorKysgV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDggKzQwLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1l
c3BhY2UgRXZlbnROYW1lczsKLQogc3RhdGljIHZvaWQgZGlzcGF0Y2hDaGlsZEluc2VydGlvbkV2
ZW50cyhOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOwogc3RhdGljIHZvaWQgZGlzcGF0Y2hDaGlsZFJl
bW92YWxFdmVudHMoTm9kZSosIEV4Y2VwdGlvbkNvZGUmKTsKIApAQCAtODgzLDcgKzg4MSw3IEBA
IHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMKICAgICAgICAgZG9jLT5o
YXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTU5PREVJTlNFUlRFRF9MSVNURU5FUikgJiYKICAg
ICAgICAgYy0+aXNFdmVudFRhcmdldE5vZGUoKSkgewogICAgICAgICBlYyA9IDA7Ci0gICAgICAg
IEV2ZW50VGFyZ2V0Tm9kZUNhc3QoYy5nZXQoKSktPmRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVu
dDo6Y3JlYXRlKERPTU5vZGVJbnNlcnRlZEV2ZW50LCB0cnVlLCBmYWxzZSwKKyAgICAgICAgRXZl
bnRUYXJnZXROb2RlQ2FzdChjLmdldCgpKS0+ZGlzcGF0Y2hFdmVudChNdXRhdGlvbkV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLkRPTU5vZGVJbnNlcnRlZEV2ZW50LCB0cnVlLCBmYWxzZSwKICAg
ICAgICAgICAgIGMtPnBhcmVudE5vZGUoKSwgU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwg
MCksIGVjKTsKICAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtODk2LDcg
Kzg5NCw3IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAKICAgICAgICAgICAgIGVjID0gMDsKLSAg
ICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QoYy5nZXQoKSktPmRpc3BhdGNoRXZlbnQoTXV0
YXRpb25FdmVudDo6Y3JlYXRlKERPTU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudEV2ZW50LCBmYWxz
ZSwgZmFsc2UsCisgICAgICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KGMuZ2V0KCkpLT5kaXNw
YXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NTm9kZUluc2Vy
dGVkSW50b0RvY3VtZW50RXZlbnQsIGZhbHNlLCBmYWxzZSwKICAgICAgICAgICAgICAgICAwLCBT
dHJpbmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCAwKSwgZWMpOwogICAgICAgICAgICAgaWYgKGVj
KQogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTkxNiw3ICs5MTQsNyBAQCBzdGF0aWMgdm9p
ZCBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhOCiAgICAgICAgIGRvYy0+aGFzTGlzdGVuZXJU
eXBlKERvY3VtZW50OjpET01OT0RFUkVNT1ZFRF9MSVNURU5FUikgJiYKICAgICAgICAgYy0+aXNF
dmVudFRhcmdldE5vZGUoKSkgewogICAgICAgICBlYyA9IDA7Ci0gICAgICAgIEV2ZW50VGFyZ2V0
Tm9kZUNhc3QoYy5nZXQoKSktPmRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKERP
TU5vZGVSZW1vdmVkRXZlbnQsIHRydWUsIGZhbHNlLAorICAgICAgICBFdmVudFRhcmdldE5vZGVD
YXN0KGMuZ2V0KCkpLT5kaXNwYXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuRE9NTm9kZVJlbW92ZWRFdmVudCwgdHJ1ZSwgZmFsc2UsCiAgICAgICAgICAgICBjLT5w
YXJlbnROb2RlKCksIFN0cmluZygpLCBTdHJpbmcoKSwgU3RyaW5nKCksIDApLCBlYyk7CiAgICAg
ICAgIGlmIChlYykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTkyOCw3ICs5MjYsNyBAQCBzdGF0
aWMgdm9pZCBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhOCiAgICAgICAgICAgICBpZiAoIWMt
PmlzRXZlbnRUYXJnZXROb2RlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICBlYyA9IDA7Ci0gICAgICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KGMuZ2V0KCkpLT5k
aXNwYXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShET01Ob2RlUmVtb3ZlZEZyb21Eb2N1
bWVudEV2ZW50LCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0
KGMuZ2V0KCkpLT5kaXNwYXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkuRE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1lbnRFdmVudCwgZmFsc2UsIGZhbHNlLAogICAgICAg
ICAgICAgICAgIDAsIFN0cmluZygpLCBTdHJpbmcoKSwgU3RyaW5nKCksIDApLCBlYyk7CiAgICAg
ICAgICAgICBpZiAoZWMpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9k
b20vRGVkaWNhdGVkV29ya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9EZWRpY2F0
ZWRXb3JrZXIuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvZG9tL0RlZGljYXRlZFdv
cmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIERlZGljYXRl
ZFdvcmtlcjo6bm90aWZ5RmluaXNoZWQoQ2FjCiB2b2lkIERlZGljYXRlZFdvcmtlcjo6ZGlzcGF0
Y2hFcnJvckV2ZW50KCkKIHsKICAgICBpZiAobV9vbkVycm9yTGlzdGVuZXIpIHsKLSAgICAgICAg
UmVmUHRyPEV2ZW50PiBldnQgPSBFdmVudDo6Y3JlYXRlKEV2ZW50TmFtZXM6OmVycm9yRXZlbnQs
IGZhbHNlLCB0cnVlKTsKKyAgICAgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgIC8vIERlZGlj
YXRlZFdvcmtlciBpcyBub3QgYW4gRXZlbnRUYXJnZXQsIHNvIHRhcmdldCBhbmQgY3VycmVudFRh
cmdldCByZW1haW4gbnVsbC4KICAgICAgICAgbV9vbkVycm9yTGlzdGVuZXItPmhhbmRsZUV2ZW50
KGV2dC5yZWxlYXNlKCkuZ2V0KCksIHRydWUpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlz
aW9uIDM4MDY0KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDcsNyArMTQ3LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogCiAvLyAjZGVmaW5lIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcgMQpA
QCAtMTU0Nyw3ICsxNTQ2LDcgQEAgdm9pZCBEb2N1bWVudDo6aW1wbGljaXRDbG9zZSgpCiAgICAg
ICAgIGYtPmFuaW1hdGlvbigpLT5yZXN1bWVBbmltYXRpb25zKHRoaXMpOwogCiAgICAgZGlzcGF0
Y2hJbWFnZUxvYWRFdmVudHNOb3coKTsKLSAgICB0aGlzLT5kaXNwYXRjaFdpbmRvd0V2ZW50KGxv
YWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICB0aGlzLT5kaXNwYXRjaFdpbmRvd0V2ZW50KGV2
ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgaWYgKGYpCiAgICAgICAg
IGYtPmxvYWRlcigpLT5oYW5kbGVkT25sb2FkRXZlbnRzKCk7CiAjaWZkZWYgSU5TVFJVTUVOVF9M
QVlPVVRfU0NIRURVTElORwpAQCAtMjQxNiw3ICsyNDE1LDcgQEAgYm9vbCBEb2N1bWVudDo6c2V0
Rm9jdXNlZE5vZGUoUGFzc1JlZlB0cgogICAgICAgICAvLyBEaXNwYXRjaCBhIGNoYW5nZSBldmVu
dCBmb3IgdGV4dCBmaWVsZHMgb3IgdGV4dGFyZWFzIHRoYXQgaGF2ZSBiZWVuIGVkaXRlZAogICAg
ICAgICBSZW5kZXJPYmplY3QqIHIgPSBzdGF0aWNfY2FzdDxSZW5kZXJPYmplY3QqPihvbGRGb2N1
c2VkTm9kZS5nZXQoKS0+cmVuZGVyZXIoKSk7CiAgICAgICAgIGlmIChyICYmIChyLT5pc1RleHRB
cmVhKCkgfHwgci0+aXNUZXh0RmllbGQoKSkgJiYgci0+aXNFZGl0ZWQoKSkgewotICAgICAgICAg
ICAgRXZlbnRUYXJnZXROb2RlQ2FzdChvbGRGb2N1c2VkTm9kZS5nZXQoKSktPmRpc3BhdGNoRXZl
bnRGb3JUeXBlKGNoYW5nZUV2ZW50LCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICBFdmVudFRh
cmdldE5vZGVDYXN0KG9sZEZvY3VzZWROb2RlLmdldCgpKS0+ZGlzcGF0Y2hFdmVudEZvclR5cGUo
ZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCB0cnVlLCBmYWxzZSk7CiAgICAgICAgICAgICBpZiAo
KHIgPSBzdGF0aWNfY2FzdDxSZW5kZXJPYmplY3QqPihvbGRGb2N1c2VkTm9kZS5nZXQoKS0+cmVu
ZGVyZXIoKSkpKQogICAgICAgICAgICAgICAgIHItPnNldEVkaXRlZChmYWxzZSk7CiAgICAgICAg
IH0KQEAgLTI0MjksNyArMjQyOCw3IEBAIGJvb2wgRG9jdW1lbnQ6OnNldEZvY3VzZWROb2RlKFBh
c3NSZWZQdHIKICAgICAgICAgICAgIGZvY3VzQ2hhbmdlQmxvY2tlZCA9IHRydWU7CiAgICAgICAg
ICAgICBuZXdGb2N1c2VkTm9kZSA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgRXZlbnRUYXJnZXRO
b2RlQ2FzdChvbGRGb2N1c2VkTm9kZS5nZXQoKSktPmRpc3BhdGNoVUlFdmVudChET01Gb2N1c091
dEV2ZW50KTsKKyAgICAgICAgRXZlbnRUYXJnZXROb2RlQ2FzdChvbGRGb2N1c2VkTm9kZS5nZXQo
KSktPmRpc3BhdGNoVUlFdmVudChldmVudE5hbWVzKCkuRE9NRm9jdXNPdXRFdmVudCk7CiAgICAg
ICAgIGlmIChtX2ZvY3VzZWROb2RlKSB7CiAgICAgICAgICAgICAvLyBoYW5kbGVyIHNoaWZ0ZWQg
Zm9jdXMKICAgICAgICAgICAgIGZvY3VzQ2hhbmdlQmxvY2tlZCA9IHRydWU7CkBAIC0yNDU5LDcg
KzI0NTgsNyBAQCBib29sIERvY3VtZW50OjpzZXRGb2N1c2VkTm9kZShQYXNzUmVmUHRyCiAgICAg
ICAgICAgICBmb2N1c0NoYW5nZUJsb2NrZWQgPSB0cnVlOwogICAgICAgICAgICAgZ290byBTZXRG
b2N1c2VkTm9kZURvbmU7CiAgICAgICAgIH0KLSAgICAgICAgRXZlbnRUYXJnZXROb2RlQ2FzdCht
X2ZvY3VzZWROb2RlLmdldCgpKS0+ZGlzcGF0Y2hVSUV2ZW50KERPTUZvY3VzSW5FdmVudCk7Cisg
ICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QobV9mb2N1c2VkTm9kZS5nZXQoKSktPmRpc3BhdGNo
VUlFdmVudChldmVudE5hbWVzKCkuRE9NRm9jdXNJbkV2ZW50KTsKICAgICAgICAgaWYgKG1fZm9j
dXNlZE5vZGUgIT0gbmV3Rm9jdXNlZE5vZGUpIHsgCiAgICAgICAgICAgICAvLyBoYW5kbGVyIHNo
aWZ0ZWQgZm9jdXMKICAgICAgICAgICAgIGZvY3VzQ2hhbmdlQmxvY2tlZCA9IHRydWU7CkBAIC0y
NjQ0LDI5ICsyNjQzLDI5IEBAIFBhc3NSZWZQdHI8RXZlbnQ+IERvY3VtZW50OjpjcmVhdGVFdmVu
dCgKIAogdm9pZCBEb2N1bWVudDo6YWRkTGlzdGVuZXJUeXBlSWZOZWVkZWQoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUpCiB7Ci0gICAgaWYgKGV2ZW50VHlwZSA9PSBET01TdWJ0cmVlTW9k
aWZpZWRFdmVudCkKKyAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5ET01TdWJ0cmVl
TW9kaWZpZWRFdmVudCkKICAgICAgICAgYWRkTGlzdGVuZXJUeXBlKERPTVNVQlRSRUVNT0RJRklF
RF9MSVNURU5FUik7Ci0gICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IERPTU5vZGVJbnNlcnRlZEV2
ZW50KQorICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuRE9NTm9kZUluc2Vy
dGVkRXZlbnQpCiAgICAgICAgIGFkZExpc3RlbmVyVHlwZShET01OT0RFSU5TRVJURURfTElTVEVO
RVIpOwotICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBET01Ob2RlUmVtb3ZlZEV2ZW50KQorICAg
IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuRE9NTm9kZVJlbW92ZWRFdmVudCkK
ICAgICAgICAgYWRkTGlzdGVuZXJUeXBlKERPTU5PREVSRU1PVkVEX0xJU1RFTkVSKTsKLSAgICBl
bHNlIGlmIChldmVudFR5cGUgPT0gRE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1lbnRFdmVudCkKKyAg
ICBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLkRPTU5vZGVSZW1vdmVkRnJvbURv
Y3VtZW50RXZlbnQpCiAgICAgICAgIGFkZExpc3RlbmVyVHlwZShET01OT0RFUkVNT1ZFREZST01E
T0NVTUVOVF9MSVNURU5FUik7Ci0gICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IERPTU5vZGVJbnNl
cnRlZEludG9Eb2N1bWVudEV2ZW50KQorICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkuRE9NTm9kZUluc2VydGVkSW50b0RvY3VtZW50RXZlbnQpCiAgICAgICAgIGFkZExpc3Rl
bmVyVHlwZShET01OT0RFSU5TRVJURURJTlRPRE9DVU1FTlRfTElTVEVORVIpOwotICAgIGVsc2Ug
aWYgKGV2ZW50VHlwZSA9PSBET01BdHRyTW9kaWZpZWRFdmVudCkKKyAgICBlbHNlIGlmIChldmVu
dFR5cGUgPT0gZXZlbnROYW1lcygpLkRPTUF0dHJNb2RpZmllZEV2ZW50KQogICAgICAgICBhZGRM
aXN0ZW5lclR5cGUoRE9NQVRUUk1PRElGSUVEX0xJU1RFTkVSKTsKLSAgICBlbHNlIGlmIChldmVu
dFR5cGUgPT0gRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkRXZlbnQpCisgICAgZWxzZSBpZiAoZXZl
bnRUeXBlID09IGV2ZW50TmFtZXMoKS5ET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWRFdmVudCkKICAg
ICAgICAgYWRkTGlzdGVuZXJUeXBlKERPTUNIQVJBQ1RFUkRBVEFNT0RJRklFRF9MSVNURU5FUik7
Ci0gICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IG92ZXJmbG93Y2hhbmdlZEV2ZW50KQorICAgIGVs
c2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkub3ZlcmZsb3djaGFuZ2VkRXZlbnQpCiAg
ICAgICAgIGFkZExpc3RlbmVyVHlwZShPVkVSRkxPV0NIQU5HRURfTElTVEVORVIpOwotICAgIGVs
c2UgaWYgKGV2ZW50VHlwZSA9PSB3ZWJraXRBbmltYXRpb25TdGFydEV2ZW50KQorICAgIGVsc2Ug
aWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9uU3RhcnRFdmVudCkK
ICAgICAgICAgYWRkTGlzdGVuZXJUeXBlKEFOSU1BVElPTlNUQVJUX0xJU1RFTkVSKTsKLSAgICBl
bHNlIGlmIChldmVudFR5cGUgPT0gd2Via2l0QW5pbWF0aW9uRW5kRXZlbnQpCisgICAgZWxzZSBp
ZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25FbmRFdmVudCkKICAg
ICAgICAgYWRkTGlzdGVuZXJUeXBlKEFOSU1BVElPTkVORF9MSVNURU5FUik7Ci0gICAgZWxzZSBp
ZiAoZXZlbnRUeXBlID09IHdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2ZW50KQorICAgIGVsc2Ug
aWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uRXZl
bnQpCiAgICAgICAgIGFkZExpc3RlbmVyVHlwZShBTklNQVRJT05JVEVSQVRJT05fTElTVEVORVIp
OwotICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSB3ZWJraXRUcmFuc2l0aW9uRW5kRXZlbnQpCisg
ICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53ZWJraXRUcmFuc2l0aW9uRW5k
RXZlbnQpCiAgICAgICAgIGFkZExpc3RlbmVyVHlwZShUUkFOU0lUSU9ORU5EX0xJU1RFTkVSKTsK
IH0KIApAQCAtMjcxMiw5ICsyNzExLDkgQEAgdm9pZCBEb2N1bWVudDo6cmVtb3ZlV2luZG93SW5s
aW5lRXZlbnRMaQogICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDo6aXRlcmF0b3IgaXQg
PSBtX3dpbmRvd0V2ZW50TGlzdGVuZXJzLmJlZ2luKCk7CiAgICAgZm9yICg7IGl0ICE9IG1fd2lu
ZG93RXZlbnRMaXN0ZW5lcnMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgaWYgKCgqaXQpLT5ldmVu
dFR5cGUoKSA9PSBldmVudFR5cGUgJiYgKCppdCktPmxpc3RlbmVyKCktPmlzSW5saW5lKCkpIHsK
LSAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gdW5sb2FkRXZlbnQpCisgICAgICAgICAgICBp
ZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCkKICAgICAgICAgICAgICAg
ICByZW1vdmVQZW5kaW5nRnJhbWVVbmxvYWRFdmVudENvdW50KCk7Ci0gICAgICAgICAgICBlbHNl
IGlmIChldmVudFR5cGUgPT0gYmVmb3JldW5sb2FkRXZlbnQpCisgICAgICAgICAgICBlbHNlIGlm
IChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmJlZm9yZXVubG9hZEV2ZW50KQogICAgICAgICAg
ICAgICAgIHJlbW92ZVBlbmRpbmdGcmFtZUJlZm9yZVVubG9hZEV2ZW50Q291bnQoKTsKICAgICAg
ICAgICAgIG1fd2luZG93RXZlbnRMaXN0ZW5lcnMucmVtb3ZlKGl0KTsKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTI3MjQsOSArMjcyMyw5IEBAIHZvaWQgRG9jdW1lbnQ6OnJlbW92ZVdpbmRvd0lu
bGluZUV2ZW50TGkKIAogdm9pZCBEb2N1bWVudDo6YWRkV2luZG93RXZlbnRMaXN0ZW5lcihjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0
ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQogewotICAgIGlmIChldmVudFR5cGUgPT0gdW5sb2FkRXZl
bnQpCisgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkudW5sb2FkRXZlbnQpCiAgICAg
ICAgIGFkZFBlbmRpbmdGcmFtZVVubG9hZEV2ZW50Q291bnQoKTsKLSAgICBlbHNlIGlmIChldmVu
dFR5cGUgPT0gYmVmb3JldW5sb2FkRXZlbnQpCisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2
ZW50TmFtZXMoKS5iZWZvcmV1bmxvYWRFdmVudCkKICAgICAgICAgYWRkUGVuZGluZ0ZyYW1lQmVm
b3JlVW5sb2FkRXZlbnRDb3VudCgpOwogICAgIC8vIFJlbW92ZSBleGlzdGluZyBpZGVudGljYWwg
bGlzdGVuZXIgc2V0IHdpdGggaWRlbnRpY2FsIGFyZ3VtZW50cy4KICAgICAvLyBUaGUgRE9NIDIg
c3BlYyBzYXlzIHRoYXQgImR1cGxpY2F0ZSBpbnN0YW5jZXMgYXJlIGRpc2NhcmRlZCIgaW4gdGhp
cyBjYXNlLgpAQCAtMjc0MCw5ICsyNzM5LDkgQEAgdm9pZCBEb2N1bWVudDo6cmVtb3ZlV2luZG93
RXZlbnRMaXN0ZW5lcgogICAgIGZvciAoOyBpdCAhPSBtX3dpbmRvd0V2ZW50TGlzdGVuZXJzLmVu
ZCgpOyArK2l0KSB7CiAgICAgICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiByID0gKippdDsK
ICAgICAgICAgaWYgKHIuZXZlbnRUeXBlKCkgPT0gZXZlbnRUeXBlICYmIHIubGlzdGVuZXIoKSA9
PSBsaXN0ZW5lciAmJiByLnVzZUNhcHR1cmUoKSA9PSB1c2VDYXB0dXJlKSB7Ci0gICAgICAgICAg
ICBpZiAoZXZlbnRUeXBlID09IHVubG9hZEV2ZW50KQorICAgICAgICAgICAgaWYgKGV2ZW50VHlw
ZSA9PSBldmVudE5hbWVzKCkudW5sb2FkRXZlbnQpCiAgICAgICAgICAgICAgICAgcmVtb3ZlUGVu
ZGluZ0ZyYW1lVW5sb2FkRXZlbnRDb3VudCgpOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnRU
eXBlID09IGJlZm9yZXVubG9hZEV2ZW50KQorICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnRUeXBl
ID09IGV2ZW50TmFtZXMoKS5iZWZvcmV1bmxvYWRFdmVudCkKICAgICAgICAgICAgICAgICByZW1v
dmVQZW5kaW5nRnJhbWVCZWZvcmVVbmxvYWRFdmVudENvdW50KCk7CiAgICAgICAgICAgICBtX3dp
bmRvd0V2ZW50TGlzdGVuZXJzLnJlbW92ZShpdCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0z
ODExLDcgKzM4MTAsNyBAQCB2b2lkIERvY3VtZW50OjpmaW5pc2hlZFBhcnNpbmcoKQogICAgIHNl
dFBhcnNpbmcoZmFsc2UpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZGlzcGF0
Y2hFdmVudChFdmVudDo6Y3JlYXRlKERPTUNvbnRlbnRMb2FkZWRFdmVudCwgdHJ1ZSwgZmFsc2Up
LCBlYyk7CisgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01D
b250ZW50TG9hZGVkRXZlbnQsIHRydWUsIGZhbHNlKSwgZWMpOwogCiAgICAgaWYgKEZyYW1lKiBm
ID0gZnJhbWUoKSkKICAgICAgICAgZi0+bG9hZGVyKCktPmZpbmlzaGVkUGFyc2luZygpOwpJbmRl
eDogV2ViQ29yZS9kb20vRXZlbnROYW1lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
RXZlbnROYW1lcy5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9kb20vRXZlbnROYW1l
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDMwICsyMiw1MCBAQAogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAKLSNpZmRlZiBTS0lQX1NUQVRJQ19DT05TVFJVQ1RPUlNfT05fR0NDCi0jZGVmaW5l
IERPTV9FVkVOVF9OQU1FU19ISURFX0dMT0JBTFMgMQorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIK
KworI2lmIEVOQUJMRShXT1JLRVJTKQorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgor
dXNpbmcgbmFtZXNwYWNlIFdURjsKICNlbmRpZgogCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgot
I2luY2x1ZGUgIlN0YXRpY0NvbnN0cnVjdG9ycy5oIgorbmFtZXNwYWNlIFdlYkNvcmUgewogCi1u
YW1lc3BhY2UgV2ViQ29yZSB7IG5hbWVzcGFjZSBFdmVudE5hbWVzIHsKKyNpZiBFTkFCTEUoV09S
S0VSUykKK3N0YXRpYyBUaHJlYWRTcGVjaWZpYzxFdmVudE5hbWVzPiogc3RhdGljRXZlbnROYW1l
czsKKyNlbHNlCitzdGF0aWMgRXZlbnROYW1lcyogc3RhdGljRXZlbnROYW1lczsKKyNlbmRpZgog
Ci0jZGVmaW5lIERFRklORV9FVkVOVF9HTE9CQUwobmFtZSkgXAotICAgIERFRklORV9HTE9CQUwo
QXRvbWljU3RyaW5nLCBuYW1lIyNFdmVudCwgI25hbWUpCi1ET01fRVZFTlRfTkFNRVNfRk9SX0VB
Q0goREVGSU5FX0VWRU5UX0dMT0JBTCkKKyNkZWZpbmUgSU5JVElBTElaRV9FVkVOVF9OQU1FKG5h
bWUpIFwKKyAgICAsIG5hbWUjI0V2ZW50KCNuYW1lKQorRXZlbnROYW1lczo6RXZlbnROYW1lcygp
CisgICAgOiBkdW1teSAoMCkKK0RPTV9FVkVOVF9OQU1FU19GT1JfRUFDSChJTklUSUFMSVpFX0VW
RU5UX05BTUUpCit7Cit9CiAKLXZvaWQgaW5pdCgpCitFdmVudE5hbWVzJiBldmVudE5hbWVzKCkK
IHsKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZDsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7
Ci0gICAgICAgIC8vIFVzZSBwbGFjZW1lbnQgbmV3IHRvIGluaXRpYWxpemUgdGhlIGdsb2JhbHMu
Ci0gICAgICAgIAorI2lmIEVOQUJMRShXT1JLRVJTKQorICAgIHJldHVybiAqKnN0YXRpY0V2ZW50
TmFtZXM7CisjZWxzZQorICAgIHJldHVybiAqc3RhdGljRXZlbnROYW1lczsKKyNlbmRpZgorfQor
Cit2b2lkIEV2ZW50TmFtZXM6OmluaXQoKQoreworICAgIC8vIEluaXRpYWxpemF0aW9uIGlzIG5v
dCB0aHJlYWQgc2FmZSwgc28gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBt
YWluIHRocmVhZCBmaXJzdC4KKyAgICBpZiAoIXN0YXRpY0V2ZW50TmFtZXMpIHsKICAgICAgICAg
QXRvbWljU3RyaW5nOjppbml0KCk7Ci0gICAgICAgICNkZWZpbmUgSU5JVElBTElaRV9HTE9CQUwo
bmFtZSkgbmV3ICgodm9pZCopJm5hbWUjI0V2ZW50KSBBdG9taWNTdHJpbmcoI25hbWUpOwotICAg
ICAgICBET01fRVZFTlRfTkFNRVNfRk9SX0VBQ0goSU5JVElBTElaRV9HTE9CQUwpCi0gICAgICAg
IGluaXRpYWxpemVkID0gdHJ1ZTsKKworI2lmIEVOQUJMRShXT1JLRVJTKQorICAgICAgICBzdGF0
aWNFdmVudE5hbWVzID0gbmV3IFRocmVhZFNwZWNpZmljPEV2ZW50TmFtZXM+OworI2Vsc2UKKyAg
ICAgICAgc3RhdGljRXZlbnROYW1lcyA9IG5ldyBFdmVudE5hbWVzOworI2VuZGlmCiAgICAgfQog
fQogCi19IH0KK30KSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9k
b20vRXZlbnROYW1lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAKICNpbmNs
dWRlICJBdG9taWNTdHJpbmcuaCIKIAotbmFtZXNwYWNlIFdlYkNvcmUgeyBuYW1lc3BhY2UgRXZl
bnROYW1lcyB7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNkZWZpbmUgRE9NX0VWRU5UX05BTUVT
X0ZPUl9FQUNIKG1hY3JvKSBcCiAgICAgXApAQCAtMTI3LDE0ICsxMjcsMTkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgeyBuYW1lc3BhY2UgRXZlbnROYW1lcwogICAgIFwKIC8vIGVuZCBvZiBET01fRVZF
TlRfTkFNRVNfRk9SX0VBQ0gKIAotI2lmbmRlZiBET01fRVZFTlRfTkFNRVNfSElERV9HTE9CQUxT
Ci0gICAgI2RlZmluZSBET01fRVZFTlRfTkFNRVNfREVDTEFSRShuYW1lKSBleHRlcm4gY29uc3Qg
QXRvbWljU3RyaW5nIG5hbWUjI0V2ZW50OwotICAgIERPTV9FVkVOVF9OQU1FU19GT1JfRUFDSChE
T01fRVZFTlRfTkFNRVNfREVDTEFSRSkKLSAgICAjdW5kZWYgRE9NX0VWRU5UX05BTUVTX0RFQ0xB
UkUKLSNlbmRpZgorICAgIHN0cnVjdCBFdmVudE5hbWVzIHsKKyAgICAgICAgc3RhdGljIHZvaWQg
aW5pdCgpOworCisgICAgICAgIEV2ZW50TmFtZXMoKTsKKworICAgICAgICBpbnQgZHVtbXk7Cisg
ICAgICAgICNkZWZpbmUgRE9NX0VWRU5UX05BTUVTX0RFQ0xBUkUobmFtZSkgQXRvbWljU3RyaW5n
IG5hbWUjI0V2ZW50OworICAgICAgICBET01fRVZFTlRfTkFNRVNfRk9SX0VBQ0goRE9NX0VWRU5U
X05BTUVTX0RFQ0xBUkUpCisgICAgICAgICN1bmRlZiBET01fRVZFTlRfTkFNRVNfREVDTEFSRQor
ICAgIH07CiAKLSAgICB2b2lkIGluaXQoKTsKKyAgICBFdmVudE5hbWVzJiBldmVudE5hbWVzKCk7
CiAKLX0gfQorfQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnRUYXJnZXROb2RlLmNwcAkocmV2aXNp
b24gMzgwNjQpCisrKyBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Nyw4ICs1Nyw2IEBACiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotCi11
c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKICAgICAKIHN0YXRpYyBIYXNoU2V0PEV2ZW50VGFy
Z2V0Tm9kZSo+KiBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcyA9IDA7IAogCkBAIC0y
OTksNyArMjk3LDcgQEAgYm9vbCBFdmVudFRhcmdldE5vZGU6OmRpc3BhdGNoR2VuZXJpY0V2ZQog
CiAgICAgLy8gSGFuZGxlIHdpbmRvdyBldmVudHMgZm9yIGNhcHR1cmUgcGhhc2UsIGV4Y2VwdCBs
b2FkIGV2ZW50cywgdGhpcyBxdWlyayBpcyBuZWVkZWQKICAgICAvLyBiZWNhdXNlIE1vemlsbGEg
dXNlZCB0byBuZXZlciBwcm9wYWdhdGUgbG9hZCBldmVudHMgdG8gdGhlIHdpbmRvdyBvYmplY3QK
LSAgICBpZiAoZXZ0LT50eXBlKCkgIT0gbG9hZEV2ZW50ICYmIGl0LmN1cnJlbnQoKS0+aXNEb2N1
bWVudE5vZGUoKSAmJiAhZXZ0LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKKyAgICBpZiAoZXZ0LT50
eXBlKCkgIT0gZXZlbnROYW1lcygpLmxvYWRFdmVudCAmJiBpdC5jdXJyZW50KCktPmlzRG9jdW1l
bnROb2RlKCkgJiYgIWV2dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCiAgICAgICAgIHN0YXRpY19j
YXN0PERvY3VtZW50Kj4oaXQuY3VycmVudCgpKS0+aGFuZGxlV2luZG93RXZlbnQoZXZ0LmdldCgp
LCB0cnVlKTsKIAogICAgIEV2ZW50VGFyZ2V0Tm9kZSogZXZlbnRUYXJnZXROb2RlID0gMDsKQEAg
LTM1NCw3ICszNTIsNyBAQCBib29sIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hHZW5lcmljRXZl
CiAKICAgICAgICAgLy8gSGFuZGxlIHdpbmRvdyBldmVudHMgZm9yIGJ1YmJsaW5nIHBoYXNlLCBl
eGNlcHQgbG9hZCBldmVudHMsIHRoaXMgcXVpcmsgaXMgbmVlZGVkCiAgICAgICAgIC8vIGJlY2F1
c2UgTW96aWxsYSB1c2VkIHRvIG5ldmVyIHByb3BhZ2F0ZSBsb2FkIGV2ZW50cyBhdCBhbGwKLSAg
ICAgICAgaWYgKGV2dC0+dHlwZSgpICE9IGxvYWRFdmVudCAmJiBpdC5jdXJyZW50KCktPmlzRG9j
dW1lbnROb2RlKCkgJiYgIWV2dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgJiYgIWV2dC0+Y2FuY2Vs
QnViYmxlKCkpIHsKKyAgICAgICAgaWYgKGV2dC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5sb2Fk
RXZlbnQgJiYgaXQuY3VycmVudCgpLT5pc0RvY3VtZW50Tm9kZSgpICYmICFldnQtPnByb3BhZ2F0
aW9uU3RvcHBlZCgpICYmICFldnQtPmNhbmNlbEJ1YmJsZSgpKSB7CiAgICAgICAgICAgICBldnQt
PnNldEN1cnJlbnRUYXJnZXQoRXZlbnRUYXJnZXROb2RlQ2FzdChpdC5jdXJyZW50KCkpKTsKICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PERvY3VtZW50Kj4oaXQuY3VycmVudCgpKS0+aGFuZGxlV2lu
ZG93RXZlbnQoZXZ0LmdldCgpLCBmYWxzZSk7CiAgICAgICAgIH0gCkBAIC0zOTgsNyArMzk2LDcg
QEAgYm9vbCBFdmVudFRhcmdldE5vZGU6OmRpc3BhdGNoU3VidHJlZU1vZAogICAgIGlmICghZG9j
dW1lbnQoKS0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01TVUJUUkVFTU9ESUZJRURfTElT
VEVORVIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKERPTVN1YnRy
ZWVNb2RpZmllZEV2ZW50LCB0cnVlLCBmYWxzZSwgMCwgU3RyaW5nKCksIFN0cmluZygpLCBTdHJp
bmcoKSwgMCksIGVjKTsKKyAgICByZXR1cm4gZGlzcGF0Y2hFdmVudChNdXRhdGlvbkV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLkRPTVN1YnRyZWVNb2RpZmllZEV2ZW50LCB0cnVlLCBmYWxzZSwg
MCwgU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgMCksIGVjKTsKIH0KIAogdm9pZCBFdmVu
dFRhcmdldE5vZGU6OmRpc3BhdGNoV2luZG93RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZSkKQEAg
LTQxNyw3ICs0MTUsNyBAQCB2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hXaW5kb3dFdmVu
CiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2MgPSBkb2N1bWVudCgpOwogICAgIGRpc3BhdGNoV2lu
ZG93RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJs
ZUFyZykpOwogICAgIAotICAgIGlmIChldmVudFR5cGUgPT0gbG9hZEV2ZW50KSB7CisgICAgaWYg
KGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubG9hZEV2ZW50KSB7CiAgICAgICAgIC8vIEZvciBv
bmxvYWQgZXZlbnRzLCBzZW5kIGEgc2VwYXJhdGUgbG9hZCBldmVudCB0byB0aGUgZW5jbG9zaW5n
IGZyYW1lIG9ubHkuCiAgICAgICAgIC8vIFRoaXMgaXMgYSBET00gZXh0ZW5zaW9uIGFuZCBpcyBp
bmRlcGVuZGVudCBvZiBidWJibGluZy9jYXB0dXJpbmcgcnVsZXMgb2YKICAgICAgICAgLy8gdGhl
IERPTS4KQEAgLTQzNCw5ICs0MzIsOSBAQCB2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hX
aW5kb3dFdmVuCiBib29sIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hVSUV2ZW50KGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlLCBpbnQgZGV0YWlsLCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRl
cmx5aW5nRXZlbnQpCiB7CiAgICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwot
ICAgIEFTU0VSVChldmVudFR5cGUgPT0gRE9NRm9jdXNJbkV2ZW50IHx8IGV2ZW50VHlwZSA9PSBE
T01Gb2N1c091dEV2ZW50IHx8IGV2ZW50VHlwZSA9PSBET01BY3RpdmF0ZUV2ZW50KTsKKyAgICBB
U1NFUlQoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5ET01Gb2N1c0luRXZlbnQgfHwgZXZlbnRU
eXBlID09IGV2ZW50TmFtZXMoKS5ET01Gb2N1c091dEV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVu
dE5hbWVzKCkuRE9NQWN0aXZhdGVFdmVudCk7CiAgICAgCi0gICAgYm9vbCBjYW5jZWxhYmxlID0g
ZXZlbnRUeXBlID09IERPTUFjdGl2YXRlRXZlbnQ7CisgICAgYm9vbCBjYW5jZWxhYmxlID0gZXZl
bnRUeXBlID09IGV2ZW50TmFtZXMoKS5ET01BY3RpdmF0ZUV2ZW50OwogICAgIAogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwogICAgIFJlZlB0cjxVSUV2ZW50PiBldnQgPSBVSUV2ZW50OjpjcmVh
dGUoZXZlbnRUeXBlLCB0cnVlLCBjYW5jZWxhYmxlLCBkb2N1bWVudCgpLT5kZWZhdWx0Vmlldygp
LCBkZXRhaWwpOwpAQCAtNTEyLDE0ICs1MTAsMTQgQEAgdm9pZCBFdmVudFRhcmdldE5vZGU6OmRp
c3BhdGNoU2ltdWxhdGVkQwogICAgIAogICAgIC8vIHNlbmQgbW91c2Vkb3duIGFuZCBtb3VzZXVw
IGJlZm9yZSB0aGUgY2xpY2ssIGlmIHJlcXVlc3RlZAogICAgIGlmIChzZW5kTW91c2VFdmVudHMp
Ci0gICAgICAgIGRpc3BhdGNoU2ltdWxhdGVkTW91c2VFdmVudChtb3VzZWRvd25FdmVudCwgZXZl
bnQuZ2V0KCkpOworICAgICAgICBkaXNwYXRjaFNpbXVsYXRlZE1vdXNlRXZlbnQoZXZlbnROYW1l
cygpLm1vdXNlZG93bkV2ZW50LCBldmVudC5nZXQoKSk7CiAgICAgc2V0QWN0aXZlKHRydWUsIHNo
b3dQcmVzc2VkTG9vayk7CiAgICAgaWYgKHNlbmRNb3VzZUV2ZW50cykKLSAgICAgICAgZGlzcGF0
Y2hTaW11bGF0ZWRNb3VzZUV2ZW50KG1vdXNldXBFdmVudCwgZXZlbnQuZ2V0KCkpOworICAgICAg
ICBkaXNwYXRjaFNpbXVsYXRlZE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCwg
ZXZlbnQuZ2V0KCkpOwogICAgIHNldEFjdGl2ZShmYWxzZSk7CiAKICAgICAvLyBhbHdheXMgc2Vu
ZCBjbGljawotICAgIGRpc3BhdGNoU2ltdWxhdGVkTW91c2VFdmVudChjbGlja0V2ZW50LCBldmVu
dCk7CisgICAgZGlzcGF0Y2hTaW11bGF0ZWRNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5jbGlja0V2
ZW50LCBldmVudCk7CiAgICAgCiAgICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3Mt
PnJlbW92ZSh0aGlzKTsKIH0KQEAgLTU0MSw3ICs1MzksNyBAQCBib29sIEV2ZW50VGFyZ2V0Tm9k
ZTo6ZGlzcGF0Y2hNb3VzZUV2ZW50CiAgICAgLy8gc28gdGhlIHBvaW50ZXIgd2lsbCBiZSBnb29k
IGZvciB0aGUgdHdvIHN1YnNlcXVlbnQgb25lcy4KICAgICBSZWZQdHI8Tm9kZT4gcHJvdGVjdCh0
aGlzKTsKICAgICAKLSAgICBib29sIGNhbmNlbGFibGUgPSBldmVudFR5cGUgIT0gbW91c2Vtb3Zl
RXZlbnQ7CisgICAgYm9vbCBjYW5jZWxhYmxlID0gZXZlbnRUeXBlICE9IGV2ZW50TmFtZXMoKS5t
b3VzZW1vdmVFdmVudDsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAKQEAg
LTU3Niw4ICs1NzQsOCBAQCBib29sIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hNb3VzZUV2ZW50
CiAgICAgLy8gU3BlY2lhbCBjYXNlOiBJZiBpdCdzIGEgZG91YmxlIGNsaWNrIGV2ZW50LCB3ZSBh
bHNvIHNlbmQgdGhlIGRibGNsaWNrIGV2ZW50LiBUaGlzIGlzIG5vdCBwYXJ0CiAgICAgLy8gb2Yg
dGhlIERPTSBzcGVjcywgYnV0IGlzIHVzZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb25k
YmxjbGljaz0iIiBhdHRyaWJ1dGUuICBUaGlzIGlzIHRyZWF0ZWQKICAgICAvLyBhcyBhIHNlcGFy
YXRlIGV2ZW50IGluIG90aGVyIERPTS1jb21wbGlhbnQgYnJvd3NlcnMgbGlrZSBGaXJlZm94LCBh
bmQgc28gd2UgZG8gdGhlIHNhbWUuCi0gICAgaWYgKGV2ZW50VHlwZSA9PSBjbGlja0V2ZW50ICYm
IGRldGFpbCA9PSAyKSB7Ci0gICAgICAgIFJlZlB0cjxFdmVudD4gZG91YmxlQ2xpY2tFdmVudCA9
IE1vdXNlRXZlbnQ6OmNyZWF0ZShkYmxjbGlja0V2ZW50LAorICAgIGlmIChldmVudFR5cGUgPT0g
ZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgJiYgZGV0YWlsID09IDIpIHsKKyAgICAgICAgUmVmUHRy
PEV2ZW50PiBkb3VibGVDbGlja0V2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5kYmxjbGlja0V2ZW50LAogICAgICAgICAgICAgdHJ1ZSwgY2FuY2VsYWJsZSwgZG9jdW1lbnQo
KS0+ZGVmYXVsdFZpZXcoKSwKICAgICAgICAgICAgIGRldGFpbCwgc2NyZWVuWCwgc2NyZWVuWSwg
cGFnZVgsIHBhZ2VZLAogICAgICAgICAgICAgY3RybEtleSwgYWx0S2V5LCBzaGlmdEtleSwgbWV0
YUtleSwgYnV0dG9uLApAQCAtNjQyLDEyICs2NDAsMTIgQEAgYm9vbCBFdmVudFRhcmdldE5vZGU6
OmRpc3BhdGNoV2ViS2l0VHJhbgogCiB2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hGb2N1
c0V2ZW50KCkKIHsKLSAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShmb2N1c0V2ZW50LCBmYWxzZSwg
ZmFsc2UpOworICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50
LCBmYWxzZSwgZmFsc2UpOwogfQogCiB2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hCbHVy
RXZlbnQoKQogewotICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGJsdXJFdmVudCwgZmFsc2UsIGZh
bHNlKTsKKyAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVzKCkuYmx1ckV2ZW50LCBm
YWxzZSwgZmFsc2UpOwogfQogCiBib29sIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hFdmVudEZv
clR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBi
b29sIGNhbmNlbGFibGVBcmcpCkBAIC03MzAsMTggKzcyOCwxOCBAQCB2b2lkIEV2ZW50VGFyZ2V0
Tm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxlCiAgICAgaWYgKGV2ZW50LT50YXJnZXQoKSAhPSB0aGlz
KQogICAgICAgICByZXR1cm47CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUgPSBl
dmVudC0+dHlwZSgpOwotICAgIGlmIChldmVudFR5cGUgPT0ga2V5ZG93bkV2ZW50IHx8IGV2ZW50
VHlwZSA9PSBrZXlwcmVzc0V2ZW50KSB7CisgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVz
KCkua2V5ZG93bkV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVu
dCkgewogICAgICAgICBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQogICAgICAgICAgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgICAgICAgICAg
ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5kZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIoc3RhdGlj
X2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50KSk7Ci0gICAgfSBlbHNlIGlmIChldmVudFR5cGUg
PT0gY2xpY2tFdmVudCkgeworICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMo
KS5jbGlja0V2ZW50KSB7CiAgICAgICAgIGludCBkZXRhaWwgPSBldmVudC0+aXNVSUV2ZW50KCkg
PyBzdGF0aWNfY2FzdDxVSUV2ZW50Kj4oZXZlbnQpLT5kZXRhaWwoKSA6IDA7Ci0gICAgICAgIGRp
c3BhdGNoVUlFdmVudChET01BY3RpdmF0ZUV2ZW50LCBkZXRhaWwsIGV2ZW50KTsKLSAgICB9IGVs
c2UgaWYgKGV2ZW50VHlwZSA9PSBjb250ZXh0bWVudUV2ZW50KSB7CisgICAgICAgIGRpc3BhdGNo
VUlFdmVudChldmVudE5hbWVzKCkuRE9NQWN0aXZhdGVFdmVudCwgZGV0YWlsLCBldmVudCk7Cisg
ICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmNvbnRleHRtZW51RXZlbnQp
IHsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAg
ICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCiAgICAgICAgICAgICAgICAg
cGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmhhbmRsZUNvbnRleHRNZW51RXZlbnQoZXZl
bnQpOwotICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IHRleHRJbnB1dEV2ZW50KSB7CisgICAg
fSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnRleHRJbnB1dEV2ZW50KSB7CiAg
ICAgICAgIGlmIChldmVudC0+aXNUZXh0RXZlbnQoKSkKICAgICAgICAgICAgIGlmIChGcmFtZSog
ZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+ZGVmYXVsdFRleHRJbnB1dEV2ZW50SGFuZGxlcihzdGF0aWNfY2FzdDxUZXh0
RXZlbnQqPihldmVudCkpOwpAQCAtNzUwLDQwMiArNzQ4LDQwMiBAQCB2b2lkIEV2ZW50VGFyZ2V0
Tm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxlCiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9k
ZTo6b25hYm9ydCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JU
eXBlKGFib3J0RXZlbnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShl
dmVudE5hbWVzKCkuYWJvcnRFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRP
bmFib3J0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBz
ZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShhYm9ydEV2ZW50LCBldmVudExpc3RlbmVyKTsK
KyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuYWJvcnRFdmVu
dCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6
b25ibHVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUo
Ymx1ckV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRO
YW1lcygpLmJsdXJFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmJsdXIo
UGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGJsdXJFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmJsdXJFdmVudCwgZXZlbnRM
aXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25jaGFuZ2Uo
KSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShjaGFuZ2VF
dmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5jaGFuZ2VFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmNoYW5nZShQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoY2hhbmdlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25jbGlj
aygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNsaWNr
RXZlbnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVz
KCkuY2xpY2tFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmNsaWNrKFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZShjbGlja0V2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJ
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgZXZlbnRM
aXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25jb250ZXh0
bWVudSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNv
bnRleHRtZW51RXZlbnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShl
dmVudE5hbWVzKCkuY29udGV4dG1lbnVFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2Rl
OjpzZXRPbmNvbnRleHRtZW51KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5l
cikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShjb250ZXh0bWVudUV2ZW50
LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVu
dE5hbWVzKCkuY29udGV4dG1lbnVFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlz
dGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25kYmxjbGljaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGRibGNsaWNrRXZlbnQpOworICAgIHJldHVybiBp
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZGJsY2xpY2tFdmVudCk7CiB9
CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmRibGNsaWNrKFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9y
VHlwZShkYmxjbGlja0V2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZGJsY2xpY2tFdmVudCwgZXZlbnRMaXN0ZW5lcik7
CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25lcnJvcigpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGVycm9yRXZlbnQpOworICAg
IHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZXJyb3JFdmVu
dCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmVycm9yKFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZShlcnJvckV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9
CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25mb2N1cygpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGZvY3VzRXZlbnQpOworICAgIHJl
dHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZm9jdXNFdmVudCk7
CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmZvY3VzKFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9y
VHlwZShmb2N1c0V2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZShldmVudE5hbWVzKCkuZm9jdXNFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAK
IEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25pbnB1dCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGlucHV0RXZlbnQpOworICAgIHJldHVy
biBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuaW5wdXRFdmVudCk7CiB9
CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmlucHV0KFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZShpbnB1dEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZShldmVudE5hbWVzKCkuaW5wdXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2
ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25rZXlkb3duKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoa2V5ZG93bkV2ZW50KTsKKyAgICByZXR1
cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmtleWRvd25FdmVudCk7
CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmtleWRvd24oUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlKGtleWRvd25FdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmtleWRvd25FdmVudCwgZXZlbnRMaXN0ZW5lcik7
CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25rZXlwcmVzcygpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGtleXByZXNzRXZlbnQp
OworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkua2V5
cHJlc3NFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmtleXByZXNzKFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZShrZXlwcmVzc0V2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBz
ZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCwg
ZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25r
ZXl1cCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGtl
eXVwRXZlbnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5h
bWVzKCkua2V5dXBFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmtleXVw
KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxp
bmVFdmVudExpc3RlbmVyRm9yVHlwZShrZXl1cEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBz
ZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkua2V5dXBFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25sb2Fk
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUobG9hZEV2
ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygp
LmxvYWRFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmxvYWQoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlKGxvYWRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZXZlbnRMaXN0ZW5l
cik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25tb3VzZWRvd24oKSBj
b25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShtb3VzZWRvd25F
dmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5tb3VzZWRvd25FdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbm1vdXNl
ZG93bihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUobW91c2Vkb3duRXZlbnQsIGV2ZW50TGlzdGVuZXIp
OworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5tb3VzZWRv
d25FdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0
Tm9kZTo6b25tb3VzZW1vdmUoKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZShtb3VzZW1vdmVFdmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRU
YXJnZXROb2RlOjpzZXRPbm1vdXNlbW92ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50
TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUobW91c2Vtb3Zl
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBl
KGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50
TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25tb3VzZW91dCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNlb3V0RXZlbnQpOworICAgIHJldHVy
biBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCk7
CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbm1vdXNlb3V0KFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZShtb3VzZW91dEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCwgZXZlbnRMaXN0ZW5l
cik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25tb3VzZW92ZXIoKSBj
b25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShtb3VzZW92ZXJF
dmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5tb3VzZW92ZXJFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbm1vdXNl
b3ZlcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUobW91c2VvdmVyRXZlbnQsIGV2ZW50TGlzdGVuZXIp
OworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5tb3VzZW92
ZXJFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0
Tm9kZTo6b25tb3VzZXVwKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGUobW91c2V1cEV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGUoZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXRO
b2RlOjpzZXRPbm1vdXNldXAoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNldXBFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1l
cygpLm1vdXNldXBFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2
ZW50VGFyZ2V0Tm9kZTo6b25tb3VzZXdoZWVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUobW91c2V3aGVlbEV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCk7CiB9CiAK
IHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbm1vdXNld2hlZWwoUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JU
eXBlKG1vdXNld2hlZWxFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCwgZXZlbnRMaXN0ZW5l
cik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25iZWZvcmVjdXQoKSBj
b25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShiZWZvcmVjdXRF
dmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5iZWZvcmVjdXRFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmJlZm9y
ZWN1dChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoYmVmb3JlY3V0RXZlbnQsIGV2ZW50TGlzdGVuZXIp
OworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5iZWZvcmVj
dXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0
Tm9kZTo6b25jdXQoKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9y
VHlwZShjdXRFdmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2
ZW50TmFtZXMoKS5jdXRFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmN1
dChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoY3V0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5jdXRFdmVudCwgZXZlbnRM
aXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25iZWZvcmVj
b3B5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoYmVm
b3JlY29weUV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZl
bnROYW1lcygpLmJlZm9yZWNvcHlFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpz
ZXRPbmJlZm9yZWNvcHkoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQog
ewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGJlZm9yZWNvcHlFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1l
cygpLmJlZm9yZWNvcHlFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIq
IEV2ZW50VGFyZ2V0Tm9kZTo6b25jb3B5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGUoY29weUV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmNvcHlFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJn
ZXROb2RlOjpzZXRPbmNvcHkoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNvcHlFdmVudCwgZXZlbnRM
aXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygp
LmNvcHlFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFy
Z2V0Tm9kZTo6b25iZWZvcmVwYXN0ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlKGJlZm9yZXBhc3RlRXZlbnQpOworICAgIHJldHVybiBpbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuYmVmb3JlcGFzdGVFdmVudCk7CiB9CiAKIHZv
aWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmJlZm9yZXBhc3RlKFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZShiZWZvcmVwYXN0ZUV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuYmVmb3JlcGFzdGVFdmVudCwgZXZlbnRMaXN0ZW5l
cik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25wYXN0ZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHBhc3RlRXZlbnQpOwor
ICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkucGFzdGVF
dmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbnBhc3RlKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZShwYXN0ZUV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkucGFzdGVFdmVudCwgZXZlbnRMaXN0ZW5lcik7
CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25kcmFnZW50ZXIoKSBjb25z
dAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShkcmFnZW50ZXJFdmVu
dCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5k
cmFnZW50ZXJFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmRyYWdlbnRl
cihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZHJhZ2VudGVyRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwor
ICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnZW50ZXJF
dmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9k
ZTo6b25kcmFnb3ZlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlKGRyYWdvdmVyRXZlbnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9y
VHlwZShldmVudE5hbWVzKCkuZHJhZ292ZXJFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXRO
b2RlOjpzZXRPbmRyYWdvdmVyKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5l
cikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShkcmFnb3ZlckV2ZW50LCBl
dmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5h
bWVzKCkuZHJhZ292ZXJFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIq
IEV2ZW50VGFyZ2V0Tm9kZTo6b25kcmFnbGVhdmUoKSBjb25zdAogewotICAgIHJldHVybiBpbmxp
bmVFdmVudExpc3RlbmVyRm9yVHlwZShkcmFnbGVhdmVFdmVudCk7CisgICAgcmV0dXJuIGlubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnbGVhdmVFdmVudCk7CiB9CiAK
IHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmRyYWdsZWF2ZShQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5
cGUoZHJhZ2xlYXZlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnbGVhdmVFdmVudCwgZXZlbnRMaXN0ZW5lcik7
CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25kcm9wKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZHJvcEV2ZW50KTsKKyAgICBy
ZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmRyb3BFdmVudCk7
CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmRyb3AoUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JU
eXBlKGRyb3BFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGUoZXZlbnROYW1lcygpLmRyb3BFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2
ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25kcmFnc3RhcnQoKSBjb25zdAogewotICAg
IHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShkcmFnc3RhcnRFdmVudCk7CisgICAg
cmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnc3RhcnRF
dmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmRyYWdzdGFydChQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGUoZHJhZ3N0YXJ0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnc3RhcnRFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25kcmFn
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZHJhZ0V2
ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygp
LmRyYWdFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmRyYWcoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlKGRyYWdFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmRyYWdFdmVudCwgZXZlbnRMaXN0ZW5l
cik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25kcmFnZW5kKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZHJhZ2VuZEV2ZW50
KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmRy
YWdlbmRFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbmRyYWdlbmQoUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlKGRyYWdlbmRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmRyYWdlbmRFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25yZXNl
dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHJlc2V0
RXZlbnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVz
KCkucmVzZXRFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbnJlc2V0KFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZShyZXNldEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJ
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkucmVzZXRFdmVudCwgZXZlbnRM
aXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25yZXNpemUo
KSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShyZXNpemVF
dmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5yZXNpemVFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbnJlc2l6ZShQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUocmVzaXplRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25zY3Jv
bGwoKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShzY3Jv
bGxFdmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFt
ZXMoKS5zY3JvbGxFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbnNjcm9s
bChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoc2Nyb2xsRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAg
IHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudCwg
ZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25z
ZWFyY2goKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShz
ZWFyY2hFdmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50
TmFtZXMoKS5zZWFyY2hFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbnNl
YXJjaChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoc2VhcmNoRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwor
ICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5zZWFyY2hFdmVu
dCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6
b25zZWxlY3QoKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZShzZWxlY3RFdmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2
ZW50TmFtZXMoKS5zZWxlY3RFdmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRP
bnNlbGVjdChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAg
c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoc2VsZWN0RXZlbnQsIGV2ZW50TGlzdGVuZXIp
OworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5zZWxlY3RF
dmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9k
ZTo6b25zZWxlY3RzdGFydCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlKHNlbGVjdHN0YXJ0RXZlbnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZShldmVudE5hbWVzKCkuc2VsZWN0c3RhcnRFdmVudCk7CiB9CiAKIHZvaWQgRXZl
bnRUYXJnZXROb2RlOjpzZXRPbnNlbGVjdHN0YXJ0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
ZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShzZWxl
Y3RzdGFydEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZShldmVudE5hbWVzKCkuc2VsZWN0c3RhcnRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9
CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b25zdWJtaXQoKSBjb25zdAogewot
ICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShzdWJtaXRFdmVudCk7CisgICAg
cmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5zdWJtaXRFdmVu
dCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbnN1Ym1pdChQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGUoc3VibWl0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5zdWJtaXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7
CiB9CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0Tm9kZTo6b251bmxvYWQoKSBjb25zdAog
ewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZSh1bmxvYWRFdmVudCk7Cisg
ICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS51bmxvYWRF
dmVudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRPbnVubG9hZChQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGUodW5sb2FkRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCwgZXZlbnRMaXN0ZW5l
cik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL0tleWJv
YXJkRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3Bw
CShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMywyMyArMzMsMjEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11
c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKLQogc3RhdGljIGlubGluZSBjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZUZvcktleWJvYXJkRXZlbnRUeXBlKFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dDo6VHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIFBsYXRm
b3JtS2V5Ym9hcmRFdmVudDo6S2V5VXA6Ci0gICAgICAgICAgICByZXR1cm4ga2V5dXBFdmVudDsK
KyAgICAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkua2V5dXBFdmVudDsKICAgICAgICAgY2Fz
ZSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlJhd0tleURvd246Ci0gICAgICAgICAgICByZXR1cm4g
a2V5ZG93bkV2ZW50OworICAgICAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5rZXlkb3duRXZl
bnQ7CiAgICAgICAgIGNhc2UgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpDaGFyOgotICAgICAgICAg
ICAgcmV0dXJuIGtleXByZXNzRXZlbnQ7CisgICAgICAgICAgICByZXR1cm4gZXZlbnROYW1lcygp
LmtleXByZXNzRXZlbnQ7CiAgICAgICAgIGNhc2UgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpLZXlE
b3duOgogICAgICAgICAgICAgLy8gVGhlIGNhbGxlciBzaG91bGQgZGlzYW1iaWd1YXRlIHRoZSBj
b21iaW5lZCBldmVudCBpbnRvIFJhd0tleURvd24gb3IgQ2hhciBldmVudHMuCiAgICAgICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGtl
eWRvd25FdmVudDsKKyAgICByZXR1cm4gZXZlbnROYW1lcygpLmtleWRvd25FdmVudDsKIH0KIAog
S2V5Ym9hcmRFdmVudDo6S2V5Ym9hcmRFdmVudCgpCkBAIC0xMjMsNyArMTIxLDcgQEAgaW50IEtl
eWJvYXJkRXZlbnQ6OmtleUNvZGUoKSBjb25zdAogICAgIC8vIFdlIG1hdGNoIElFLgogICAgIGlm
ICghbV9rZXlFdmVudCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHR5cGUoKSA9PSBrZXlk
b3duRXZlbnQgfHwgdHlwZSgpID09IGtleXVwRXZlbnQpCisgICAgaWYgKHR5cGUoKSA9PSBldmVu
dE5hbWVzKCkua2V5ZG93bkV2ZW50IHx8IHR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5dXBFdmVu
dCkKICAgICAgICAgcmV0dXJuIG1fa2V5RXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpOwog
ICAgIHJldHVybiBjaGFyQ29kZSgpOwogfQpAQCAtMTM3LDcgKzEzNSw3IEBAIGludCBLZXlib2Fy
ZEV2ZW50OjpjaGFyQ29kZSgpIGNvbnN0CiAgICAgaWYgKHZpZXcoKSkKICAgICAgICAgYmFja3dh
cmRDb21wYXRpYmlsaXR5TW9kZSA9IHZpZXcoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPm5l
ZWRzS2V5Ym9hcmRFdmVudERpc2FtYmlndWF0aW9uUXVpcmtzKCk7CiAKLSAgICBpZiAoIW1fa2V5
RXZlbnQgfHwgKHR5cGUoKSAhPSBrZXlwcmVzc0V2ZW50ICYmICFiYWNrd2FyZENvbXBhdGliaWxp
dHlNb2RlKSkKKyAgICBpZiAoIW1fa2V5RXZlbnQgfHwgKHR5cGUoKSAhPSBldmVudE5hbWVzKCku
a2V5cHJlc3NFdmVudCAmJiAhYmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSkpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIFN0cmluZyB0ZXh0ID0gbV9rZXlFdmVudC0+dGV4dCgpOwogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KHRleHQuY2hhcmFjdGVyU3RhcnRpbmdBdCgwKSk7CkluZGV4OiBX
ZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01l
c3NhZ2VFdmVudC5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9kb20vTWVzc2FnZUV2
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTQgKzMzLDEyIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0KIE1lc3NhZ2VFdmVudDo6
TWVzc2FnZUV2ZW50KCkKIHsKIH0KIAogTWVzc2FnZUV2ZW50OjpNZXNzYWdlRXZlbnQoY29uc3Qg
U3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBsYXN0RXZl
bnRJZCwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHNvdXJjZSwgUGFzc1JlZlB0cjxNZXNzYWdlUG9y
dD4gbWVzc2FnZVBvcnQpCi0gICAgOiBFdmVudChtZXNzYWdlRXZlbnQsIGZhbHNlLCB0cnVlKQor
ICAgIDogRXZlbnQoZXZlbnROYW1lcygpLm1lc3NhZ2VFdmVudCwgZmFsc2UsIHRydWUpCiAgICAg
LCBtX2RhdGEoZGF0YSkKICAgICAsIG1fb3JpZ2luKG9yaWdpbikKICAgICAsIG1fbGFzdEV2ZW50
SWQobGFzdEV2ZW50SWQpCkluZGV4OiBXZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysr
IFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwLDcgKzIx
MCw3IEBAIHZvaWQgTWVzc2FnZVBvcnQ6OmRpc3BhdGNoTWVzc2FnZXMoKQogICAgIFJlZlB0cjxF
dmVudD4gZXZ0OwogICAgIHdoaWxlIChtX21lc3NhZ2VRdWV1ZS50cnlHZXRNZXNzYWdlKGV2dCkp
IHsKIAotICAgICAgICBBU1NFUlQoZXZ0LT50eXBlKCkgPT0gRXZlbnROYW1lczo6bWVzc2FnZUV2
ZW50KTsKKyAgICAgICAgQVNTRVJUKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tZXNzYWdl
RXZlbnQpOwogCiAgICAgICAgIGlmIChtX29uTWVzc2FnZUxpc3RlbmVyKSB7CiAgICAgICAgICAg
ICBldnQtPnNldFRhcmdldCh0aGlzKTsKQEAgLTIzOCw3ICsyMzgsNyBAQCB2b2lkIE1lc3NhZ2VQ
b3J0OjpkaXNwYXRjaENsb3NlRXZlbnQoKQogICAgIEFTU0VSVChtX3BlbmRpbmdDbG9zZUV2ZW50
KTsKICAgICBtX3BlbmRpbmdDbG9zZUV2ZW50ID0gZmFsc2U7CiAKLSAgICBSZWZQdHI8RXZlbnQ+
IGV2dCA9IEV2ZW50OjpjcmVhdGUoRXZlbnROYW1lczo6Y2xvc2VFdmVudCwgZmFsc2UsIHRydWUp
OworICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2xv
c2VFdmVudCwgZmFsc2UsIHRydWUpOwogICAgIGlmIChtX29uQ2xvc2VMaXN0ZW5lcikgewogICAg
ICAgICBldnQtPnNldFRhcmdldCh0aGlzKTsKICAgICAgICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0
KHRoaXMpOwpJbmRleDogV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9k
b20vTW91c2VFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKLQogTW91c2VF
dmVudDo6TW91c2VFdmVudCgpCiAgICAgOiBtX2J1dHRvbigwKQogICAgICwgbV9idXR0b25Eb3du
KGZhbHNlKQpAQCAtODcsOCArODUsOCBAQCBib29sIE1vdXNlRXZlbnQ6OmlzTW91c2VFdmVudCgp
IGNvbnN0CiBib29sIE1vdXNlRXZlbnQ6OmlzRHJhZ0V2ZW50KCkgY29uc3QKIHsKICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHQgPSB0eXBlKCk7Ci0gICAgcmV0dXJuIHQgPT0gZHJhZ2VudGVyRXZl
bnQgfHwgdCA9PSBkcmFnb3ZlckV2ZW50IHx8IHQgPT0gZHJhZ2xlYXZlRXZlbnQgfHwgdCA9PSBk
cm9wRXZlbnQKLSAgICAgICAgICAgICAgIHx8IHQgPT0gZHJhZ3N0YXJ0RXZlbnR8fCB0ID09IGRy
YWdFdmVudCB8fCB0ID09IGRyYWdlbmRFdmVudDsKKyAgICByZXR1cm4gdCA9PSBldmVudE5hbWVz
KCkuZHJhZ2VudGVyRXZlbnQgfHwgdCA9PSBldmVudE5hbWVzKCkuZHJhZ292ZXJFdmVudCB8fCB0
ID09IGV2ZW50TmFtZXMoKS5kcmFnbGVhdmVFdmVudCB8fCB0ID09IGV2ZW50TmFtZXMoKS5kcm9w
RXZlbnQKKyAgICAgICAgICAgICAgIHx8IHQgPT0gZXZlbnROYW1lcygpLmRyYWdzdGFydEV2ZW50
fHwgdCA9PSBldmVudE5hbWVzKCkuZHJhZ0V2ZW50IHx8IHQgPT0gZXZlbnROYW1lcygpLmRyYWdl
bmRFdmVudDsKIH0KIAogaW50IE1vdXNlRXZlbnQ6OndoaWNoKCkgY29uc3QKQEAgLTEwMiw3ICsx
MDAsNyBAQCBpbnQgTW91c2VFdmVudDo6d2hpY2goKSBjb25zdAogTm9kZSogTW91c2VFdmVudDo6
dG9FbGVtZW50KCkgY29uc3QKIHsKICAgICAvLyBNU0lFIGV4dGVuc2lvbiAtICJ0aGUgb2JqZWN0
IHRvd2FyZCB3aGljaCB0aGUgdXNlciBpcyBtb3ZpbmcgdGhlIG1vdXNlIHBvaW50ZXIiCi0gICAg
aWYgKHR5cGUoKSA9PSBtb3VzZW91dEV2ZW50KSAKKyAgICBpZiAodHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZW91dEV2ZW50KSAKICAgICAgICAgcmV0dXJuIHJlbGF0ZWRUYXJnZXQoKTsKICAg
ICAKICAgICByZXR1cm4gdGFyZ2V0KCkgPyB0YXJnZXQoKS0+dG9Ob2RlKCkgOiAwOwpAQCAtMTEx
LDcgKzEwOSw3IEBAIE5vZGUqIE1vdXNlRXZlbnQ6OnRvRWxlbWVudCgpIGNvbnN0CiBOb2RlKiBN
b3VzZUV2ZW50Ojpmcm9tRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgLy8gTVNJRSBleHRlbnNpb24g
LSAib2JqZWN0IGZyb20gd2hpY2ggYWN0aXZhdGlvbiBvciB0aGUgbW91c2UgcG9pbnRlciBpcyBl
eGl0aW5nIGR1cmluZyB0aGUgZXZlbnQiIChodWg/KQotICAgIGlmICh0eXBlKCkgIT0gbW91c2Vv
dXRFdmVudCkKKyAgICBpZiAodHlwZSgpICE9IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KQog
ICAgICAgICByZXR1cm4gcmVsYXRlZFRhcmdldCgpOwogICAgIAogICAgIHJldHVybiB0YXJnZXQo
KSA/IHRhcmdldCgpLT50b05vZGUoKSA6IDA7CkluZGV4OiBXZWJDb3JlL2RvbS9PdmVyZmxvd0V2
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9PdmVyZmxvd0V2ZW50LmNwcAkocmV2
aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL2RvbS9PdmVyZmxvd0V2ZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksMTEgKzI5LDkgQEAKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKLSAgICAKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwotICAgIAor
ICAgICAgICAKIE92ZXJmbG93RXZlbnQ6Ok92ZXJmbG93RXZlbnQoKQotICAgIDogRXZlbnQob3Zl
cmZsb3djaGFuZ2VkRXZlbnQsIGZhbHNlLCBmYWxzZSkKKyAgICA6IEV2ZW50KGV2ZW50TmFtZXMo
KS5vdmVyZmxvd2NoYW5nZWRFdmVudCwgZmFsc2UsIGZhbHNlKQogICAgICwgbV9vcmllbnQoVkVS
VElDQUwpCiAgICAgLCBtX2hvcml6b250YWxPdmVyZmxvdyhmYWxzZSkKICAgICAsIG1fdmVydGlj
YWxPdmVyZmxvdyhmYWxzZSkKQEAgLTQxLDcgKzM5LDcgQEAgT3ZlcmZsb3dFdmVudDo6T3ZlcmZs
b3dFdmVudCgpCiB9CiAKIE92ZXJmbG93RXZlbnQ6Ok92ZXJmbG93RXZlbnQoYm9vbCBob3Jpem9u
dGFsT3ZlcmZsb3dDaGFuZ2VkLCBib29sIGhvcml6b250YWxPdmVyZmxvdywgYm9vbCB2ZXJ0aWNh
bE92ZXJmbG93Q2hhbmdlZCwgYm9vbCB2ZXJ0aWNhbE92ZXJmbG93KQotICAgIDogRXZlbnQob3Zl
cmZsb3djaGFuZ2VkRXZlbnQsIGZhbHNlLCBmYWxzZSkKKyAgICA6IEV2ZW50KGV2ZW50TmFtZXMo
KS5vdmVyZmxvd2NoYW5nZWRFdmVudCwgZmFsc2UsIGZhbHNlKQogICAgICwgbV9ob3Jpem9udGFs
T3ZlcmZsb3coaG9yaXpvbnRhbE92ZXJmbG93KQogICAgICwgbV92ZXJ0aWNhbE92ZXJmbG93KHZl
cnRpY2FsT3ZlcmZsb3cpCiB7CkluZGV4OiBXZWJDb3JlL2RvbS9UZXh0RXZlbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL1RleHRFdmVudC5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysg
V2ViQ29yZS9kb20vVGV4dEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsNiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwot
CiBUZXh0RXZlbnQ6OlRleHRFdmVudCgpCiAgICAgOiBtX2lzTGluZUJyZWFrKGZhbHNlKQogICAg
ICwgbV9pc0JhY2tUYWIoZmFsc2UpCkBAIC00MCw3ICszOCw3IEBAIFRleHRFdmVudDo6VGV4dEV2
ZW50KCkKIH0KIAogVGV4dEV2ZW50OjpUZXh0RXZlbnQoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+
IHZpZXcsIGNvbnN0IFN0cmluZyYgZGF0YSkKLSAgICA6IFVJRXZlbnQodGV4dElucHV0RXZlbnQs
IHRydWUsIHRydWUsIHZpZXcsIDApCisgICAgOiBVSUV2ZW50KGV2ZW50TmFtZXMoKS50ZXh0SW5w
dXRFdmVudCwgdHJ1ZSwgdHJ1ZSwgdmlldywgMCkKICAgICAsIG1fZGF0YShkYXRhKQogICAgICwg
bV9pc0xpbmVCcmVhayhmYWxzZSkKICAgICAsIG1faXNCYWNrVGFiKGZhbHNlKQpJbmRleDogV2Vi
Q29yZS9kb20vV2ViS2l0QW5pbWF0aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL1dlYktpdEFuaW1hdGlvbkV2ZW50LmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3Jl
L2RvbS9XZWJLaXRBbmltYXRpb25FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDQ3ICsy
OSw0NSBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewot
ICAgIAotICAgIHVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwotICAgIAotICAgIFdlYktpdEFu
aW1hdGlvbkV2ZW50OjpXZWJLaXRBbmltYXRpb25FdmVudCgpCisKK1dlYktpdEFuaW1hdGlvbkV2
ZW50OjpXZWJLaXRBbmltYXRpb25FdmVudCgpCiAgICAgOiBtX2VsYXBzZWRUaW1lKDAuMCkKLSAg
ICB7Ci0gICAgfQotICAgIAotICAgIFdlYktpdEFuaW1hdGlvbkV2ZW50OjpXZWJLaXRBbmltYXRp
b25FdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9u
TmFtZSwgZG91YmxlIGVsYXBzZWRUaW1lKQoreworfQorCitXZWJLaXRBbmltYXRpb25FdmVudDo6
V2ViS2l0QW5pbWF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJp
bmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBlbGFwc2VkVGltZSkKICAgICA6IEV2ZW50KHR5cGUs
IHRydWUsIHRydWUpCiAgICAgLCBtX2FuaW1hdGlvbk5hbWUoYW5pbWF0aW9uTmFtZSkKICAgICAs
IG1fZWxhcHNlZFRpbWUoZWxhcHNlZFRpbWUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBXZWJL
aXRBbmltYXRpb25FdmVudDo6fldlYktpdEFuaW1hdGlvbkV2ZW50KCkKLSAgICB7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgV2ViS2l0QW5pbWF0aW9uRXZlbnQ6OmluaXRXZWJLaXRBbmltYXRpb25F
dmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIC8qY2FuQnViYmxlQXJnKi8sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgLypjYW5jZWxhYmxlQXJnKi8sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
YW5pbWF0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZG91YmxlIGVsYXBzZWRUaW1lKQotICAgIHsKLSAgICAgICAgaWYgKGRpc3BhdGNoZWQoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGluaXRFdmVudCh0eXBlLCBm
YWxzZSwgdHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBtX2FuaW1hdGlvbk5hbWUgPSBhbmltYXRp
b25OYW1lOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBTdHJpbmcmIFdlYktpdEFuaW1hdGlvbkV2
ZW50OjphbmltYXRpb25OYW1lKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FuaW1h
dGlvbk5hbWU7Ci0gICAgfQoreworfQorCitXZWJLaXRBbmltYXRpb25FdmVudDo6fldlYktpdEFu
aW1hdGlvbkV2ZW50KCkKK3sKK30KKwordm9pZCBXZWJLaXRBbmltYXRpb25FdmVudDo6aW5pdFdl
YktpdEFuaW1hdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAvKmNhbkJ1YmJsZUFyZyovLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgLypjYW5jZWxhYmxlQXJn
Ki8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRvdWJsZSBlbGFwc2VkVGltZSkKK3sKKyAgICBpZiAoZGlzcGF0Y2hlZCgpKQorICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgZG91YmxlIFdlYktpdEFuaW1hdGlvbkV2ZW50OjplbGFwc2VkVGlt
ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9lbGFwc2VkVGltZTsKLSAgICB9Cisg
ICAgaW5pdEV2ZW50KHR5cGUsIGZhbHNlLCB0cnVlKTsKICAgICAKKyAgICBtX2FuaW1hdGlvbk5h
bWUgPSBhbmltYXRpb25OYW1lOworfQorCitjb25zdCBTdHJpbmcmIFdlYktpdEFuaW1hdGlvbkV2
ZW50OjphbmltYXRpb25OYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hbmltYXRpb25OYW1l
OworfQorCitkb3VibGUgV2ViS2l0QW5pbWF0aW9uRXZlbnQ6OmVsYXBzZWRUaW1lKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9lbGFwc2VkVGltZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9kb20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAzODA2
NCkKKysrIFdlYkNvcmUvZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDQ4ICsyOSw0NiBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewotICAgIAotICAgIHVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwotICAg
IAotICAgIFdlYktpdFRyYW5zaXRpb25FdmVudDo6V2ViS2l0VHJhbnNpdGlvbkV2ZW50KCkKKyAg
ICAgICAgCitXZWJLaXRUcmFuc2l0aW9uRXZlbnQ6OldlYktpdFRyYW5zaXRpb25FdmVudCgpCiAg
ICAgOiBtX3Byb3BlcnR5TmFtZSgpCiAgICAgLCBtX2VsYXBzZWRUaW1lKDAuMCkKLSAgICB7Ci0g
ICAgfQotICAgIAotICAgIFdlYktpdFRyYW5zaXRpb25FdmVudDo6V2ViS2l0VHJhbnNpdGlvbkV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUs
IGRvdWJsZSBlbGFwc2VkVGltZSkKK3sKK30KKworV2ViS2l0VHJhbnNpdGlvbkV2ZW50OjpXZWJL
aXRUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IHByb3BlcnR5TmFtZSwgZG91YmxlIGVsYXBzZWRUaW1lKQogICAgIDogRXZlbnQodHlwZSwgdHJ1
ZSwgdHJ1ZSkKICAgICAsIG1fcHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSkKICAgICAsIG1fZWxh
cHNlZFRpbWUoZWxhcHNlZFRpbWUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBXZWJLaXRUcmFu
c2l0aW9uRXZlbnQ6On5XZWJLaXRUcmFuc2l0aW9uRXZlbnQoKQotICAgIHsKLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBXZWJLaXRUcmFuc2l0aW9uRXZlbnQ6OmluaXRXZWJLaXRUcmFuc2l0aW9uRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCAKK3sKK30KKworV2ViS2l0VHJhbnNpdGlvbkV2
ZW50Ojp+V2ViS2l0VHJhbnNpdGlvbkV2ZW50KCkKK3sKK30KKwordm9pZCBXZWJLaXRUcmFuc2l0
aW9uRXZlbnQ6OmluaXRXZWJLaXRUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0
eXBlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAv
KmNhbkJ1YmJsZUFyZyovLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIC8qY2FuY2VsYWJsZUFyZyovLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGVsYXBzZWRUaW1lKQotICAg
IHsKLSAgICAgICAgaWYgKGRpc3BhdGNoZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgCi0gICAgICAgIGluaXRFdmVudCh0eXBlLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgICAgIAotICAg
ICAgICBtX3Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKLSAgICB9Ci0gICAgCi0gICAgY29u
c3QgU3RyaW5nJiBXZWJLaXRUcmFuc2l0aW9uRXZlbnQ6OnByb3BlcnR5TmFtZSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eU5hbWU7Ci0gICAgfQoreworICAgIGlmIChk
aXNwYXRjaGVkKCkpCisgICAgICAgIHJldHVybjsKICAgICAKLSAgICBkb3VibGUgV2ViS2l0VHJh
bnNpdGlvbkV2ZW50OjplbGFwc2VkVGltZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9lbGFwc2VkVGltZTsKLSAgICB9CisgICAgaW5pdEV2ZW50KHR5cGUsIGZhbHNlLCB0cnVlKTsK
ICAgICAKKyAgICBtX3Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKK30KKworY29uc3QgU3Ry
aW5nJiBXZWJLaXRUcmFuc2l0aW9uRXZlbnQ6OnByb3BlcnR5TmFtZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcHJvcGVydHlOYW1lOworfQorCitkb3VibGUgV2ViS2l0VHJhbnNpdGlvbkV2ZW50
OjplbGFwc2VkVGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZWxhcHNlZFRpbWU7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL1doZWVsRXZlbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1doZWVsRXZlbnQuY3BwCShyZXZpc2lvbiAzODA2
NCkKKysrIFdlYkNvcmUvZG9tL1doZWVsRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4
ICsyOCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50
TmFtZXM7Ci0KIFdoZWVsRXZlbnQ6OldoZWVsRXZlbnQoKQogICAgIDogbV93aGVlbERlbHRhWCgw
KQogICAgICwgbV93aGVlbERlbHRhWSgwKQpAQCAtMzksNyArMzcsNyBAQCBXaGVlbEV2ZW50OjpX
aGVlbEV2ZW50KCkKIFdoZWVsRXZlbnQ6OldoZWVsRXZlbnQoZmxvYXQgd2hlZWxEZWx0YVgsIGZs
b2F0IHdoZWVsRGVsdGFZLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywKICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHNjcmVlblgsIGludCBzY3JlZW5ZLCBpbnQgcGFnZVgsIGludCBw
YWdlWSwKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwg
Ym9vbCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5KQotICAgIDogTW91c2VSZWxhdGVkRXZlbnQobW91
c2V3aGVlbEV2ZW50LAorICAgIDogTW91c2VSZWxhdGVkRXZlbnQoZXZlbnROYW1lcygpLm1vdXNl
d2hlZWxFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIHRydWUsIHZpZXcsIDAs
IHNjcmVlblgsIHNjcmVlblksIHBhZ2VYLCBwYWdlWSwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjdHJsS2V5LCBhbHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5KQogICAgICwgbV93aGVlbERlbHRh
WChscm91bmRmKHdoZWVsRGVsdGFYKSAqIDEyMCkKQEAgLTU5LDcgKzU3LDcgQEAgdm9pZCBXaGVl
bEV2ZW50Ojppbml0V2hlZWxFdmVudChpbnQgd2hlZQogICAgIGlmIChkaXNwYXRjaGVkKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBpbml0VUlFdmVudChtb3VzZXdoZWVsRXZlbnQsIHRy
dWUsIHRydWUsIHZpZXcsIDApOworICAgIGluaXRVSUV2ZW50KGV2ZW50TmFtZXMoKS5tb3VzZXdo
ZWVsRXZlbnQsIHRydWUsIHRydWUsIHZpZXcsIDApOwogICAgIAogICAgIG1fc2NyZWVuWCA9IHNj
cmVlblg7CiAgICAgbV9zY3JlZW5ZID0gc2NyZWVuWTsKSW5kZXg6IFdlYkNvcmUvZG9tL1hNTFRv
a2VuaXplckxpYnhtbDIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1hNTFRva2VuaXpl
ckxpYnhtbDIuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvZG9tL1hNTFRva2VuaXpl
ckxpYnhtbDIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnRUeXBlLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTY0
LDggKzYzLDYgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKLQogY2xhc3MgUGVuZGluZ0NhbGxiYWNrcyB7
CiBwdWJsaWM6CiAgICAgUGVuZGluZ0NhbGxiYWNrcygpCkluZGV4OiBXZWJDb3JlL2RvbS9YTUxU
b2tlbml6ZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyUXQu
Y3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplclF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5oIgot
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC01OCw4ICs1Nyw2IEBAIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNw
YWNlIEV2ZW50TmFtZXM7Ci0KICNpZiBRVF9WRVJTSU9OID49IDB4MDQwNDAwCiBjbGFzcyBFbnRp
dHlSZXNvbHZlciA6IHB1YmxpYyBRWG1sU3RyZWFtRW50aXR5UmVzb2x2ZXIKIHsKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9EZWxldGVCdXR0b24uY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvZWRpdGlu
Zy9EZWxldGVCdXR0b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0KIERlbGV0
ZUJ1dHRvbjo6RGVsZXRlQnV0dG9uKERvY3VtZW50KiBkb2N1bWVudCkKICAgICA6IEhUTUxJbWFn
ZUVsZW1lbnQoZG9jdW1lbnQpCiB7CkBAIC00NSw3ICs0Myw3IEBAIERlbGV0ZUJ1dHRvbjo6RGVs
ZXRlQnV0dG9uKERvY3VtZW50KiBkb2MKIHZvaWQgRGVsZXRlQnV0dG9uOjpkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7
Ci0gICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGNsaWNrRXZlbnQpIHsKKyAgICAgICAgaWYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKICAgICAgICAgICAg
IGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5kZWxldGVCdXR0b25Db250cm9sbGVyKCkt
PmRlbGV0ZVRhcmdldCgpOwogICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAkocmV2aXNpb24gMzgwNjQp
CisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw4ICs0MSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2
ZW50TmFtZXM7Ci0KIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZChEb2N1bWVudCogZG9jdW1lbnQp
IAogICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fcGFyZW50KDApCkluZGV4OiBX
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiAvLyBXaGVuIGFuIGV2ZW50IGhhbmRsZXIgaGFzIG1v
dmVkIHRoZSBzZWxlY3Rpb24gb3V0c2lkZSBvZiBhIHRleHQgY29udHJvbApAQCAtMTI5LDE3ICsx
MjgsMTcgQEAgYm9vbCBFZGl0b3I6OmNhbkVkaXRSaWNobHkoKSBjb25zdAogCiBib29sIEVkaXRv
cjo6Y2FuREhUTUxDdXQoKQogewotICAgIHJldHVybiAhbV9mcmFtZS0+c2VsZWN0aW9uKCktPmlz
SW5QYXNzd29yZEZpZWxkKCkgJiYgIWRpc3BhdGNoQ1BQRXZlbnQoYmVmb3JlY3V0RXZlbnQsIENs
aXBib2FyZE51bWIpOworICAgIHJldHVybiAhbV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzSW5QYXNz
d29yZEZpZWxkKCkgJiYgIWRpc3BhdGNoQ1BQRXZlbnQoZXZlbnROYW1lcygpLmJlZm9yZWN1dEV2
ZW50LCBDbGlwYm9hcmROdW1iKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ29weSgpCiB7
Ci0gICAgcmV0dXJuICFtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNJblBhc3N3b3JkRmllbGQoKSAm
JiAhZGlzcGF0Y2hDUFBFdmVudChiZWZvcmVjb3B5RXZlbnQsIENsaXBib2FyZE51bWIpOworICAg
IHJldHVybiAhbV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzSW5QYXNzd29yZEZpZWxkKCkgJiYgIWRp
c3BhdGNoQ1BQRXZlbnQoZXZlbnROYW1lcygpLmJlZm9yZWNvcHlFdmVudCwgQ2xpcGJvYXJkTnVt
Yik7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5ESFRNTFBhc3RlKCkKIHsKLSAgICByZXR1cm4gIWRp
c3BhdGNoQ1BQRXZlbnQoYmVmb3JlcGFzdGVFdmVudCwgQ2xpcGJvYXJkTnVtYik7CisgICAgcmV0
dXJuICFkaXNwYXRjaENQUEV2ZW50KGV2ZW50TmFtZXMoKS5iZWZvcmVwYXN0ZUV2ZW50LCBDbGlw
Ym9hcmROdW1iKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkN1dCgpIGNvbnN0CkBAIC0zNTcsNyAr
MzU2LDcgQEAgYm9vbCBFZGl0b3I6OnRyeURIVE1MQ29weSgpCiAgICAgLy8gYWxzbyBkb25lIGZv
ciBzZWN1cml0eSwgYXMgaXQgZXJhc2VzIGRhdGEgZnJvbSB0aGUgbGFzdCBjb3B5L3Bhc3RlLgog
ICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPmNsZWFyKCk7CiAKLSAgICByZXR1
cm4gIWRpc3BhdGNoQ1BQRXZlbnQoY29weUV2ZW50LCBDbGlwYm9hcmRXcml0YWJsZSk7CisgICAg
cmV0dXJuICFkaXNwYXRjaENQUEV2ZW50KGV2ZW50TmFtZXMoKS5jb3B5RXZlbnQsIENsaXBib2Fy
ZFdyaXRhYmxlKTsKIH0KIAogYm9vbCBFZGl0b3I6OnRyeURIVE1MQ3V0KCkKQEAgLTM2OSwxMiAr
MzY4LDEyIEBAIGJvb2wgRWRpdG9yOjp0cnlESFRNTEN1dCgpCiAgICAgLy8gYWxzbyBkb25lIGZv
ciBzZWN1cml0eSwgYXMgaXQgZXJhc2VzIGRhdGEgZnJvbSB0aGUgbGFzdCBjb3B5L3Bhc3RlLgog
ICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPmNsZWFyKCk7CiAKLSAgICByZXR1
cm4gIWRpc3BhdGNoQ1BQRXZlbnQoY3V0RXZlbnQsIENsaXBib2FyZFdyaXRhYmxlKTsKKyAgICBy
ZXR1cm4gIWRpc3BhdGNoQ1BQRXZlbnQoZXZlbnROYW1lcygpLmN1dEV2ZW50LCBDbGlwYm9hcmRX
cml0YWJsZSk7CiB9CiAKIGJvb2wgRWRpdG9yOjp0cnlESFRNTFBhc3RlKCkKIHsKLSAgICByZXR1
cm4gIWRpc3BhdGNoQ1BQRXZlbnQocGFzdGVFdmVudCwgQ2xpcGJvYXJkUmVhZGFibGUpOworICAg
IHJldHVybiAhZGlzcGF0Y2hDUFBFdmVudChldmVudE5hbWVzKCkucGFzdGVFdmVudCwgQ2xpcGJv
YXJkUmVhZGFibGUpOwogfQogCiB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCkKQEAgLTc0OCw5ICs3NDcsOSBAQCBzdGF0aWMgdm9p
ZCBkaXNwYXRjaEVkaXRhYmxlQ29udGVudENoYW5nCiAgICAgRWxlbWVudCogZW5kUm9vdCA9IGNv
bW1hbmQuZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWM7
CiAgICAgaWYgKHN0YXJ0Um9vdCkKLSAgICAgICAgc3RhcnRSb290LT5kaXNwYXRjaEV2ZW50KEV2
ZW50OjpjcmVhdGUod2Via2l0RWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50LCBmYWxzZSwgZmFs
c2UpLCBlYyk7CisgICAgICAgIHN0YXJ0Um9vdC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS53ZWJraXRFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQsIGZhbHNlLCBm
YWxzZSksIGVjKTsKICAgICBpZiAoZW5kUm9vdCAmJiBlbmRSb290ICE9IHN0YXJ0Um9vdCkKLSAg
ICAgICAgZW5kUm9vdC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKHdlYmtpdEVkaXRhYmxl
Q29udGVudENoYW5nZWRFdmVudCwgZmFsc2UsIGZhbHNlKSwgZWMpOworICAgICAgICBlbmRSb290
LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdEVkaXRhYmxl
Q29udGVudENoYW5nZWRFdmVudCwgZmFsc2UsIGZhbHNlKSwgZWMpOwogfQogCiB2b2lkIEVkaXRv
cjo6YXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gY21kKQpJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiAzODA2
NCkKKysrIFdlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDcgKzUxLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2lu
ZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIGVu
dW0gRUZyYWdtZW50VHlwZSB7IEVtcHR5RnJhZ21lbnQsIFNpbmdsZVRleHROb2RlRnJhZ21lbnQs
IFRyZWVGcmFnbWVudCB9OwpAQCAtMTIzLDcgKzEyMiw3IEBAIFJlcGxhY2VtZW50RnJhZ21lbnQ6
OlJlcGxhY2VtZW50RnJhZ21lbnQKICAgICAKICAgICBOb2RlKiBzaGFkb3dBbmNlc3Rvck5vZGUg
PSBlZGl0YWJsZVJvb3QtPnNoYWRvd0FuY2VzdG9yTm9kZSgpOwogICAgIAotICAgIGlmICghZWRp
dGFibGVSb290LT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZSh3ZWJraXRCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudCkgJiYKKyAgICBpZiAoIWVkaXRhYmxlUm9vdC0+aW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGUoZXZlbnROYW1lcygpLndlYmtpdEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KSAmJgog
ICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZXNlIGNoZWNrcyBvbmNlIHRleHRhcmVhcyBhbmQg
dGV4dGZpZWxkcyBhY3R1YWxseSByZWdpc3RlciBhbiBldmVudCBoYW5kbGVyLgogICAgICAgICAh
KHNoYWRvd0FuY2VzdG9yTm9kZSAmJiBzaGFkb3dBbmNlc3Rvck5vZGUtPnJlbmRlcmVyKCkgJiYg
c2hhZG93QW5jZXN0b3JOb2RlLT5yZW5kZXJlcigpLT5pc1RleHRGaWVsZCgpKSAmJgogICAgICAg
ICAhKHNoYWRvd0FuY2VzdG9yTm9kZSAmJiBzaGFkb3dBbmNlc3Rvck5vZGUtPnJlbmRlcmVyKCkg
JiYgc2hhZG93QW5jZXN0b3JOb2RlLT5yZW5kZXJlcigpLT5pc1RleHRBcmVhKCkpICYmCkluZGV4
OiBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAzODA2NCkK
KysrIFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcsNyArNTcsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVz
cGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogY29uc3QgaW50
IE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uID0gSU5UX01JTjsKQEAgLTExNDgsNyAr
MTE0Nyw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0Rm9jdXNlZChib28KICAgICBm
b2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKTsKIAogICAgIGlmIChEb2N1bWVudCogZG9jID0g
bV9mcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgZG9jLT5kaXNwYXRjaFdpbmRvd0V2ZW50KGZs
YWcgPyBmb2N1c0V2ZW50IDogYmx1ckV2ZW50LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBkb2Mt
PmRpc3BhdGNoV2luZG93RXZlbnQoZmxhZyA/IGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50IDogZXZl
bnROYW1lcygpLmJsdXJFdmVudCwgZmFsc2UsIGZhbHNlKTsKIH0KIAogYm9vbCBTZWxlY3Rpb25D
b250cm9sbGVyOjppc0ZvY3VzZWRBbmRBY3RpdmUoKSBjb25zdApJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxBbmNob3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEFu
Y2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQW5j
aG9yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDYgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLXVzaW5nIG5hbWVzcGFj
ZSBFdmVudE5hbWVzOwogCiBIVE1MQW5jaG9yRWxlbWVudDo6SFRNTEFuY2hvckVsZW1lbnQoRG9j
dW1lbnQqIGRvYykKICAgICA6IEhUTUxFbGVtZW50KGFUYWcsIGRvYykKQEAgLTEzMiwxMyArMTMx
LDEzIEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmQKICAgICAvLyBS
ZWFjdCBvbiBjbGlja3MgYW5kIG9uIGtleXByZXNzZXMuCiAgICAgLy8gRG9uJ3QgbWFrZSB0aGlz
IEtFWVVQX0VWRU5UIGFnYWluLCBpdCBtYWtlcyBraHRtbCBmb2xsb3cgbGlua3MgaXQgc2hvdWxk
bid0LAogICAgIC8vIHdoZW4gcHJlc3NpbmcgRW50ZXIgaW4gdGhlIGNvbWJvLgotICAgIGlmIChp
c0xpbmsoKSAmJiAoZXZ0LT50eXBlKCkgPT0gY2xpY2tFdmVudCB8fCAoZXZ0LT50eXBlKCkgPT0g
a2V5ZG93bkV2ZW50ICYmIGZvY3VzZWQoKSkpKSB7CisgICAgaWYgKGlzTGluaygpICYmIChldnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCB8fCAoZXZ0LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmtleWRvd25FdmVudCAmJiBmb2N1c2VkKCkpKSkgewogICAgICAgICBNb3VzZUV2
ZW50KiBlID0gMDsKLSAgICAgICAgaWYgKGV2dC0+dHlwZSgpID09IGNsaWNrRXZlbnQgJiYgZXZ0
LT5pc01vdXNlRXZlbnQoKSkKKyAgICAgICAgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5jbGlja0V2ZW50ICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkpCiAgICAgICAgICAgICBlID0gc3Rh
dGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCk7CiAKICAgICAgICAgS2V5Ym9hcmRFdmVudCogayA9
IDA7Ci0gICAgICAgIGlmIChldnQtPnR5cGUoKSA9PSBrZXlkb3duRXZlbnQgJiYgZXZ0LT5pc0tl
eWJvYXJkRXZlbnQoKSkKKyAgICAgICAgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5r
ZXlkb3duRXZlbnQgJiYgZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSkKICAgICAgICAgICAgIGsgPSBz
dGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0KTsKIAogICAgICAgICBpZiAoZSAmJiBlLT5i
dXR0b24oKSA9PSBSaWdodEJ1dHRvbikgewpAQCAtMjI0LDEyICsyMjMsMTIgQEAgdm9pZCBIVE1M
QW5jaG9yRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZAogICAgIH0gZWxzZSBpZiAoaXNMaW5rKCkg
JiYgaXNDb250ZW50RWRpdGFibGUoKSkgewogICAgICAgICAvLyBUaGlzIGtlZXBzIHRyYWNrIG9m
IHRoZSBlZGl0YWJsZSBibG9jayB0aGF0IHRoZSBzZWxlY3Rpb24gd2FzIGluIChpZiBpdCB3YXMg
aW4gb25lKSBqdXN0IGJlZm9yZSB0aGUgbGluayB3YXMgY2xpY2tlZAogICAgICAgICAvLyBmb3Ig
dGhlIExpdmVXaGVuTm90Rm9jdXNlZCBlZGl0YWJsZSBsaW5rIGJlaGF2aW9yCi0gICAgICAgIGlm
IChldnQtPnR5cGUoKSA9PSBtb3VzZWRvd25FdmVudCAmJiBldnQtPmlzTW91c2VFdmVudCgpICYm
IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpLT5idXR0b24oKSAhPSBSaWdodEJ1dHRvbiAm
JiBkb2N1bWVudCgpLT5mcmFtZSgpICYmIGRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigp
KSB7CisgICAgICAgIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZl
bnQgJiYgZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0
KS0+YnV0dG9uKCkgIT0gUmlnaHRCdXR0b24gJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiBkb2N1
bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKSkgewogICAgICAgICAgICAgTW91c2VFdmVudCog
ZSA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpOwogCiAgICAgICAgICAgICBtX3Jvb3RF
ZGl0YWJsZUVsZW1lbnRGb3JTZWxlY3Rpb25Pbk1vdXNlRG93biA9IGRvY3VtZW50KCktPmZyYW1l
KCktPnNlbGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgICAgICAgICBtX3dh
c1NoaWZ0S2V5RG93bk9uTW91c2VEb3duID0gZSAmJiBlLT5zaGlmdEtleSgpOwotICAgICAgICB9
IGVsc2UgaWYgKGV2dC0+dHlwZSgpID09IG1vdXNlb3ZlckV2ZW50KSB7CisgICAgICAgIH0gZWxz
ZSBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7CiAgICAg
ICAgICAgICAvLyBUaGVzZSBhcmUgY2xlYXJlZCBvbiBtb3VzZW92ZXIgYW5kIG5vdCBtb3VzZW91
dCBiZWNhdXNlIHRoZWlyIHZhbHVlcyBhcmUgbmVlZGVkIGZvciBkcmFnIGV2ZW50cywgYnV0IHRo
ZXNlIGhhcHBlbgogICAgICAgICAgICAgLy8gYWZ0ZXIgbW91c2Ugb3V0IGV2ZW50cy4KICAgICAg
ICAgICAgIG1fcm9vdEVkaXRhYmxlRWxlbWVudEZvclNlbGVjdGlvbk9uTW91c2VEb3duID0gMDsK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7
CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBIVE1MQm9keUVsZW1lbnQ6OkhUTUxCb2R5
RWxlbWVudChEb2N1bWVudCogZG9jKQpAQCAtMTMxLDI0ICsxMzAsMjQgQEAgdm9pZCBIVE1MQm9k
eUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidQogICAgICAgICBpZiAoYXR0YWNoZWQoKSkKICAg
ICAgICAgICAgIGRvY3VtZW50KCktPnJlY2FsY1N0eWxlKEZvcmNlKTsKICAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBvbmxvYWRBdHRyKQotICAgICAgICBkb2N1bWVudCgpLT5zZXRXaW5k
b3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShsb2FkRXZlbnQsIGF0dHIp
OworICAgICAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkubG9hZEV2ZW50LCBhdHRyKTsKICAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gb25iZWZvcmV1bmxvYWRBdHRyKQotICAgICAgICBkb2N1bWVudCgp
LT5zZXRXaW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShiZWZvcmV1
bmxvYWRFdmVudCwgYXR0cik7CisgICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0lubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5iZWZvcmV1bmxvYWRF
dmVudCwgYXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9udW5sb2FkQXR0cikK
LSAgICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVB
bmRBdHRyaWJ1dGUodW5sb2FkRXZlbnQsIGF0dHIpOworICAgICAgICBkb2N1bWVudCgpLT5zZXRX
aW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCku
dW5sb2FkRXZlbnQsIGF0dHIpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmJsdXJB
dHRyKQotICAgICAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9y
VHlwZUFuZEF0dHJpYnV0ZShibHVyRXZlbnQsIGF0dHIpOworICAgICAgICBkb2N1bWVudCgpLT5z
ZXRXaW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVz
KCkuYmx1ckV2ZW50LCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25mb2N1
c0F0dHIpCi0gICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0lubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlQW5kQXR0cmlidXRlKGZvY3VzRXZlbnQsIGF0dHIpOworICAgICAgICBkb2N1bWVudCgp
LT5zZXRXaW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5h
bWVzKCkuZm9jdXNFdmVudCwgYXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
cmVzaXplQXR0cikKLSAgICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93SW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUocmVzaXplRXZlbnQsIGF0dHIpOworICAgICAgICBkb2N1
bWVudCgpLT5zZXRXaW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShl
dmVudE5hbWVzKCkucmVzaXplRXZlbnQsIGF0dHIpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBvbnNjcm9sbEF0dHIpCi0gICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0lubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKHNjcm9sbEV2ZW50LCBhdHRyKTsKKyAgICAg
ICAgZG9jdW1lbnQoKS0+c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRy
aWJ1dGUoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50LCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gb25zdG9yYWdlQXR0cikgewogICAgICAgICAvLyBUaGUgSFRNTDUgc3BlYyBj
dXJyZW50bHkgc3BlY2lmaWVzIHRoYXQgc3RvcmFnZSBldmVudHMgYXJlIGZpcmVkIG9ubHkgYXQg
dGhlIGJvZHkgZWxlbWVudCBvZgogICAgICAgICAvLyBhbiBIVE1MRG9jdW1lbnQsIHdoaWNoIGlz
IHdoeSB0aGUgb25zdG9yYWdlIGF0dHJpYnV0ZSBkaWZmZXJzIGZyb20gdGhlIG9uZXMgYmVmb3Jl
IGl0LgogICAgICAgICAvLyBUaGUgc3BlYyBtaWdodCBjaGFuZ2Ugb24gdGhpcywgYW5kIHRoZW4g
c28gc2hvdWxkIHdlIQotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0
dHJpYnV0ZShzdG9yYWdlRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBhdHRyKTsK
ICAgICB9IGVsc2UKICAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODA2
NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDcgKzM1LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3Bh
Y2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEhUTUxCdXR0b25F
bGVtZW50OjpIVE1MQnV0dG9uRWxlbWVudChEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQq
IGZvcm0pCkBAIC04OCwxNiArODcsMTYgQEAgdm9pZCBIVE1MQnV0dG9uRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaQogICAgICAgICAvLyBEb24ndCBtYXAgJ2FsaWduJyBhdHRyaWJ1dGUuICBUaGlz
IG1hdGNoZXMgd2hhdCBGaXJlZm94IGFuZCBJRSBkbywgYnV0IG5vdCBPcGVyYS4KICAgICAgICAg
Ly8gU2VlIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDcxCiAgICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25mb2N1c0F0dHIpIHsKLSAgICAgICAgc2V0SW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZm9jdXNFdmVudCwgYXR0cik7Cisg
ICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFt
ZXMoKS5mb2N1c0V2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBv
bmJsdXJBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0
cmlidXRlKGJsdXJFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQsIGF0dHIpOwogICAgIH0g
ZWxzZQogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKIH0KIAogdm9pZCBIVE1MQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCogZXZ0KQogewotICAgIGlmIChldnQtPnR5cGUoKSA9PSBET01BY3RpdmF0ZUV2ZW50
ICYmICFkaXNhYmxlZCgpKSB7CisgICAgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5E
T01BY3RpdmF0ZUV2ZW50ICYmICFkaXNhYmxlZCgpKSB7CiAgICAgICAgIGlmIChmb3JtKCkgJiYg
bV90eXBlID09IFNVQk1JVCkgewogICAgICAgICAgICAgbV9hY3RpdmVTdWJtaXQgPSB0cnVlOwog
ICAgICAgICAgICAgZm9ybSgpLT5wcmVwYXJlU3VibWl0KGV2dCk7CkBAIC0xMDgsMTIgKzEwNywx
MiBAQCB2b2lkIEhUTUxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kCiAgICAgfQogCiAg
ICAgaWYgKGV2dC0+aXNLZXlib2FyZEV2ZW50KCkpIHsKLSAgICAgICAgaWYgKGV2dC0+dHlwZSgp
ID09IGtleWRvd25FdmVudCAmJiBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0KS0+a2V5
SWRlbnRpZmllcigpID09ICJVKzAwMjAiKSB7CisgICAgICAgIGlmIChldnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihl
dnQpLT5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAyMCIpIHsKICAgICAgICAgICAgIHNldEFjdGl2
ZSh0cnVlLCB0cnVlKTsKICAgICAgICAgICAgIC8vIE5vIHNldERlZmF1bHRIYW5kbGVkKCkgLSBJ
RSBkaXNwYXRjaGVzIGEga2V5cHJlc3MgaW4gdGhpcyBjYXNlLgogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChldnQtPnR5cGUoKSA9PSBrZXlwcmVzc0V2ZW50KSB7
CisgICAgICAgIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkg
ewogICAgICAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0KS0+
Y2hhckNvZGUoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgJ1xyJzoKICAgICAgICAgICAgICAg
ICAgICAgZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhldnQpOwpAQCAtMTI3LDcgKzEyNiw3IEBAIHZv
aWQgSFRNTEJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmQKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGV2dC0+dHlw
ZSgpID09IGtleXVwRXZlbnQgJiYgc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2dCktPmtl
eUlkZW50aWZpZXIoKSA9PSAiVSswMDIwIikgeworICAgICAgICBpZiAoZXZ0LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmtleXVwRXZlbnQgJiYgc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2
dCktPmtleUlkZW50aWZpZXIoKSA9PSAiVSswMDIwIikgewogICAgICAgICAgICAgaWYgKGFjdGl2
ZSgpKQogICAgICAgICAgICAgICAgIGRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soZXZ0KTsKICAgICAg
ICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAko
cmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw3ICs0Niw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcg
bmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiB1c2lu
ZyBzdGQ6Om1pbjsKQEAgLTE1OCw3NSArMTU3LDc1IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE0KICAgICB9CiAvLyBzdGFuZGFyZCBldmVudHMKICAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gb25jbGlja0F0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoY2xpY2tFdmVudCwgYXR0cik7CisgICAgICAgIHNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5jbGlj
a0V2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmNvbnRleHRt
ZW51QXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJp
YnV0ZShjb250ZXh0bWVudUV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmNvbnRleHRtZW51RXZlbnQsIGF0
dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZGJsY2xpY2tBdHRyKSB7Ci0g
ICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGRibGNsaWNr
RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0
dHJpYnV0ZShldmVudE5hbWVzKCkuZGJsY2xpY2tFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gb25tb3VzZWRvd25BdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKG1vdXNlZG93bkV2ZW50LCBhdHRyKTsKKyAg
ICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1l
cygpLm1vdXNlZG93bkV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBvbm1vdXNlbW92ZUF0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5
cGVBbmRBdHRyaWJ1dGUobW91c2Vtb3ZlRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZl
bnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ubW91c2VvdXRBdHRy
KSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKG1v
dXNlb3V0RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCwgYXR0cik7CiAgICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25tb3VzZW92ZXJBdHRyKSB7Ci0gICAgICAgIHNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKG1vdXNlb3ZlckV2ZW50LCBhdHRy
KTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZl
bnROYW1lcygpLm1vdXNlb3ZlckV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBvbm1vdXNldXBBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlQW5kQXR0cmlidXRlKG1vdXNldXBFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZl
bnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ubW91c2V3aGVlbEF0
dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUo
bW91c2V3aGVlbEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCwgYXR0cik7CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25mb2N1c0F0dHIpIHsKLSAgICAgICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZm9jdXNFdmVudCwgYXR0cik7
CisgICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50
TmFtZXMoKS5mb2N1c0V2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBvbmJsdXJBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5k
QXR0cmlidXRlKGJsdXJFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQsIGF0dHIpOwogICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ua2V5ZG93bkF0dHIpIHsKLSAgICAgICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoa2V5ZG93bkV2ZW50LCBhdHRy
KTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZl
bnROYW1lcygpLmtleWRvd25FdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gb25rZXlwcmVzc0F0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGVBbmRBdHRyaWJ1dGUoa2V5cHJlc3NFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2
ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmtleXVwQXR0cikg
ewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShrZXl1
cEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRB
dHRyaWJ1dGUoZXZlbnROYW1lcygpLmtleXVwRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IG9uc2Nyb2xsQXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShzY3JvbGxFdmVudCwgYXR0cik7CisgICAgICAgIHNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5zY3Jv
bGxFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25iZWZvcmVj
dXRBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmli
dXRlKGJlZm9yZWN1dEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmJlZm9yZWN1dEV2ZW50LCBhdHRyKTsK
ICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmN1dEF0dHIpIHsKLSAgICAgICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoY3V0RXZlbnQsIGF0dHIpOwor
ICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5h
bWVzKCkuY3V0RXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
YmVmb3JlY29weUF0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVB
bmRBdHRyaWJ1dGUoYmVmb3JlY29weUV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmJlZm9yZWNvcHlFdmVu
dCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25jb3B5QXR0cikgewot
ICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShjb3B5RXZl
bnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJp
YnV0ZShldmVudE5hbWVzKCkuY29weUV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBvbmJlZm9yZXBhc3RlQXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShiZWZvcmVwYXN0ZUV2ZW50LCBhdHRyKTsKKyAgICAg
ICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygp
LmJlZm9yZXBhc3RlRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IG9ucGFzdGVBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5k
QXR0cmlidXRlKHBhc3RlRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkucGFzdGVFdmVudCwgYXR0cik7CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25kcmFnZW50ZXJBdHRyKSB7Ci0gICAgICAg
IHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGRyYWdlbnRlckV2ZW50
LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1
dGUoZXZlbnROYW1lcygpLmRyYWdlbnRlckV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBvbmRyYWdvdmVyQXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShkcmFnb3ZlckV2ZW50LCBhdHRyKTsKKyAgICAgICAg
c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmRy
YWdvdmVyRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZHJh
Z2xlYXZlQXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0
dHJpYnV0ZShkcmFnbGVhdmVFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5kcmFnbGVhdmVFdmVudCwgYXR0
cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25kcm9wQXR0cikgewotICAgICAg
ICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShkcm9wRXZlbnQsIGF0
dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShl
dmVudE5hbWVzKCkuZHJvcEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBvbmRyYWdzdGFydEF0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGVBbmRBdHRyaWJ1dGUoZHJhZ3N0YXJ0RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxp
bmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuZHJhZ3N0YXJ0
RXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZHJhZ0F0dHIp
IHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZHJh
Z0V2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRB
dHRyaWJ1dGUoZXZlbnROYW1lcygpLmRyYWdFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gb25kcmFnZW5kQXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShkcmFnZW5kRXZlbnQsIGF0dHIpOworICAgICAgICBz
ZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuZHJh
Z2VuZEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnNlbGVj
dHN0YXJ0QXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0
dHJpYnV0ZShzZWxlY3RzdGFydEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLnNlbGVjdHN0YXJ0RXZlbnQs
IGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uc3VibWl0QXR0cikgewot
ICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShzdWJtaXRF
dmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0
cmlidXRlKGV2ZW50TmFtZXMoKS5zdWJtaXRFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gb25lcnJvckF0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXJyb3JFdmVudCwgYXR0cik7CisgICAgICAgIHNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5lcnJvckV2
ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbndlYmtpdGFuaW1h
dGlvbnN0YXJ0QXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFu
ZEF0dHJpYnV0ZSh3ZWJraXRBbmltYXRpb25TdGFydEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLndlYmtp
dEFuaW1hdGlvblN0YXJ0RXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IG9ud2Via2l0YW5pbWF0aW9uaXRlcmF0aW9uQXR0cikgewotICAgICAgICBzZXRJbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZSh3ZWJraXRBbmltYXRpb25JdGVyYXRpb25F
dmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0
cmlidXRlKGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVudCwgYXR0cik7
CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb253ZWJraXRhbmltYXRpb25lbmRBdHRy
KSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKHdl
YmtpdEFuaW1hdGlvbkVuZEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkVuZEV2
ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbndlYmtpdHRyYW5z
aXRpb25lbmRBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5k
QXR0cmlidXRlKHdlYmtpdFRyYW5zaXRpb25FbmRFdmVudCwgYXR0cik7CisgICAgICAgIHNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS53ZWJraXRU
cmFuc2l0aW9uRW5kRXZlbnQsIGF0dHIpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5
LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1l
czsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmKQpAQCAtMTYxLDcgKzE2MCw3IEBAIHZvaWQg
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0TmFtZShjb24KIAogdm9pZCBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpvbkNoYW5nZSgpCiB7Ci0gICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoY2hhbmdl
RXZlbnQsIHRydWUsIGZhbHNlKTsKKyAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVz
KCkuY2hhbmdlRXZlbnQsIHRydWUsIGZhbHNlKTsKIH0KIAogYm9vbCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpkaXNhYmxlZCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAko
cmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVz
aW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAog
c3RhdGljIGNvbnN0IGNoYXIgaGV4RGlnaXRzWzE3XSA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKQEAg
LTEyMyw3ICsxMjIsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVu
CiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqIGV2ZW50LCBi
b29sIHVzZUNhcHR1cmUpCiB7CiAgICAgRXZlbnRUYXJnZXROb2RlKiB0YXJnZXROb2RlID0gZXZl
bnQtPnRhcmdldCgpLT50b05vZGUoKTsKLSAgICBpZiAoIXVzZUNhcHR1cmUgJiYgdGFyZ2V0Tm9k
ZSAmJiB0YXJnZXROb2RlICE9IHRoaXMgJiYgKGV2ZW50LT50eXBlKCkgPT0gc3VibWl0RXZlbnQg
fHwgZXZlbnQtPnR5cGUoKSA9PSByZXNldEV2ZW50KSkgeworICAgIGlmICghdXNlQ2FwdHVyZSAm
JiB0YXJnZXROb2RlICYmIHRhcmdldE5vZGUgIT0gdGhpcyAmJiAoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkuc3VibWl0RXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
cmVzZXRFdmVudCkpIHsKICAgICAgICAgZXZlbnQtPnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMzYzLDcgKzM2Miw3IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50
OjpwcmVwYXJlU3VibWl0KEV2ZW4KICAgICBtX2luc3VibWl0ID0gdHJ1ZTsKICAgICBtX2RvaW5n
c3VibWl0ID0gZmFsc2U7CiAKLSAgICBpZiAoZGlzcGF0Y2hFdmVudEZvclR5cGUoc3VibWl0RXZl
bnQsIHRydWUsIHRydWUpICYmICFtX2RvaW5nc3VibWl0KQorICAgIGlmIChkaXNwYXRjaEV2ZW50
Rm9yVHlwZShldmVudE5hbWVzKCkuc3VibWl0RXZlbnQsIHRydWUsIHRydWUpICYmICFtX2RvaW5n
c3VibWl0KQogICAgICAgICBtX2RvaW5nc3VibWl0ID0gdHJ1ZTsKIAogICAgIG1faW5zdWJtaXQg
PSBmYWxzZTsKQEAgLTUxOCw3ICs1MTcsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVzZXQo
KQogCiAgICAgLy8gIyMjIERPTTIgbGFiZWxzIHRoaXMgZXZlbnQgYXMgbm90IGNhbmNlbGFibGUs
IGhvd2V2ZXIKICAgICAvLyBjb21tb24gYnJvd3NlcnMoIHNpY2shICkgYWxsb3cgaXQgYmUgY2Fu
Y2VsbGVkLgotICAgIGlmICggIWRpc3BhdGNoRXZlbnRGb3JUeXBlKHJlc2V0RXZlbnQsdHJ1ZSwg
dHJ1ZSkgKSB7CisgICAgaWYgKCAhZGlzcGF0Y2hFdmVudEZvclR5cGUoZXZlbnROYW1lcygpLnJl
c2V0RXZlbnQsdHJ1ZSwgdHJ1ZSkgKSB7CiAgICAgICAgIG1faW5yZXNldCA9IGZhbHNlOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtNTU1LDkgKzU1NCw5IEBAIHZvaWQgSFRNTEZvcm1FbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnUKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZG9jdW1l
bnQoKS0+dW5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlzKTsKICAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnN1Ym1pdEF0dHIpCi0gICAgICAgIHNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKHN1Ym1pdEV2ZW50LCBhdHRyKTsK
KyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnRO
YW1lcygpLnN1Ym1pdEV2ZW50LCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
b25yZXNldEF0dHIpCi0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0
cmlidXRlKHJlc2V0RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkucmVzZXRFdmVudCwgYXR0cik7CiAgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7CiAgICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmV3TmFtZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgICAgIGlmIChpbkRvY3VtZW50
KCkgJiYgZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TEZyYW1lRWxlbWVudEJhc2UuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpIVE1MRnJh
bWVFbGVtZW50QmFzZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9j
KQpAQCAtMTQxLDEwICsxNDAsMTAgQEAgdm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6cGFyc2VN
YXBwZWRBdAogICAgICAgICBpZiAoY29udGVudEZyYW1lKCkpCiAgICAgICAgICAgICBjb250ZW50
RnJhbWUoKS0+c2V0SW5WaWV3U291cmNlTW9kZSh2aWV3U291cmNlTW9kZSgpKTsKICAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmxvYWRBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGxvYWRFdmVudCwgYXR0cik7CisgICAgICAg
IHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5s
b2FkRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uYmVmb3Jl
dW5sb2FkQXR0cikgewogICAgICAgICAvLyBGSVhNRTogc2hvdWxkIDxmcmFtZT4gZWxlbWVudHMg
aGF2ZSBiZWZvcmV1bmxvYWQgaGFuZGxlcnM/Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlQW5kQXR0cmlidXRlKGJlZm9yZXVubG9hZEV2ZW50LCBhdHRyKTsKKyAgICAgICAg
c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmJl
Zm9yZXVubG9hZEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UKICAgICAgICAgSFRNTEZyYW1lT3du
ZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTEZyYW1lU2V0RWxlbWVudC5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9odG1s
L0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBIVE1MRnJhbWVTZXRFbGVtZW50OjpIVE1MRnJh
bWVTZXRFbGVtZW50KERvY3VtZW50ICpkb2MpCkBAIC0xMjcsMTEgKzEyNiwxMSBAQCB2b2lkIEhU
TUxGcmFtZVNldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0CiAgICAgICAgICAgICBtX2JvcmRlckNv
bG9yU2V0ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IG9ubG9hZEF0dHIpIHsKLSAgICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUobG9hZEV2ZW50LCBhdHRyKTsKKyAgICAgICAgZG9j
dW1lbnQoKS0+c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUo
ZXZlbnROYW1lcygpLmxvYWRFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gb25iZWZvcmV1bmxvYWRBdHRyKSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRv
d0lubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGJlZm9yZXVubG9hZEV2ZW50
LCBhdHRyKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmJlZm9yZXVubG9hZEV2ZW50LCBhdHRy
KTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnVubG9hZEF0dHIpIHsKLSAgICAg
ICAgZG9jdW1lbnQoKS0+c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRy
aWJ1dGUodW5sb2FkRXZlbnQsIGF0dHIpOworICAgICAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dJ
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkudW5sb2Fk
RXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZQogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKIAogSFRNTEltYWdlRWxlbWVudDo6SFRNTEltYWdlRWxlbWVudChE
b2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGYpCkBAIC0xMjIsOSArMTIxLDkgQEAgdm9p
ZCBIVE1MSW1hZ2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogICAgIH0gZWxzZSBpZiAoYXR0
ck5hbWUgPT0gaXNtYXBBdHRyKQogICAgICAgICBpc21hcCA9IHRydWU7CiAgICAgZWxzZSBpZiAo
YXR0ck5hbWUgPT0gb25hYm9ydEF0dHIpCi0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlQW5kQXR0cmlidXRlKGFib3J0RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuYWJvcnRFdmVudCwg
YXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gb25sb2FkQXR0cikKLSAgICAgICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUobG9hZEV2ZW50LCBhdHRyKTsK
KyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnRO
YW1lcygpLmxvYWRFdmVudCwgYXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gY29tcG9z
aXRlQXR0cikgewogICAgICAgICBpZiAoIXBhcnNlQ29tcG9zaXRlT3BlcmF0b3IoYXR0ci0+dmFs
dWUoKSwgbV9jb21wb3NpdGVPcGVyYXRvcikpCiAgICAgICAgICAgICBtX2NvbXBvc2l0ZU9wZXJh
dG9yID0gQ29tcG9zaXRlU291cmNlT3ZlcjsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VM
b2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3Bw
CShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0KIEhUTUxJbWFnZUxvYWRlcjo6SFRNTEltYWdl
TG9hZGVyKEVsZW1lbnQqIG5vZGUpCiAgICAgOiBJbWFnZUxvYWRlcihub2RlKQogewpAQCAtNDYs
NyArNDQsNyBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6ZGlzcGF0Y2hMb2FkRXZlbnQoCiB7CiAg
ICAgaWYgKCFoYXZlRmlyZWRMb2FkRXZlbnQoKSAmJiBpbWFnZSgpKSB7CiAgICAgICAgIHNldEhh
dmVGaXJlZExvYWRFdmVudCh0cnVlKTsKLSAgICAgICAgZWxlbWVudCgpLT5kaXNwYXRjaEV2ZW50
Rm9yVHlwZShpbWFnZSgpLT5lcnJvck9jY3VycmVkKCkgPyBlcnJvckV2ZW50IDogbG9hZEV2ZW50
LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBlbGVtZW50KCktPmRpc3BhdGNoRXZlbnRGb3JUeXBl
KGltYWdlKCktPmVycm9yT2NjdXJyZWQoKSA/IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50IDogZXZl
bnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKICAgICB9CiB9CiAKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw2IEBAIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNw
YWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBjb25zdCBpbnQg
bWF4U2F2ZWRSZXN1bHRzID0gMjU2OwpAQCAtNjY4LDIwICs2NjcsMjAgQEAgdm9pZCBIVE1MSW5w
dXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogICAgICAgICBpZiAocmVzcGVjdEhlaWdodEFu
ZFdpZHRoQXR0cnMoKSkKICAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NQcm9wZXJ0
eUhlaWdodCwgYXR0ci0+dmFsdWUoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
b25mb2N1c0F0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRB
dHRyaWJ1dGUoZm9jdXNFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50LCBhdHRyKTsKICAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmJsdXJBdHRyKSB7Ci0gICAgICAgIHNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGJsdXJFdmVudCwgYXR0cik7Cisg
ICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFt
ZXMoKS5ibHVyRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
c2VsZWN0QXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0
dHJpYnV0ZShzZWxlY3RFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudCwgYXR0cik7CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25jaGFuZ2VBdHRyKSB7Ci0gICAgICAgIHNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGNoYW5nZUV2ZW50LCBhdHRy
KTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZl
bnROYW1lcygpLmNoYW5nZUV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBvbmlucHV0QXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZUFuZEF0dHJpYnV0ZShpbnB1dEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmlucHV0RXZlbnQsIGF0dHIp
OwogICAgIH0KICAgICAvLyBTZWFyY2ggZmllbGQgYW5kIHNsaWRlciBhdHRyaWJ1dGVzIGFsbCBq
dXN0IGNhdXNlIHVwZGF0ZUZyb21FbGVtZW50IHRvIGJlIGNhbGxlZCB0aHJvdWdoIHN0eWxlCiAg
ICAgLy8gcmVjYWxjaW5nLgogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnNlYXJjaEF0
dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUo
c2VhcmNoRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuc2VhcmNoRXZlbnQsIGF0dHIpOwogICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IHJlc3VsdHNBdHRyKSB7CiAgICAgICAgIGludCBvbGRSZXN1
bHRzID0gbV9tYXhSZXN1bHRzOwogICAgICAgICBtX21heFJlc3VsdHMgPSAhYXR0ci0+aXNOdWxs
KCkgPyBtaW4oYXR0ci0+dmFsdWUoKS50b0ludCgpLCBtYXhTYXZlZFJlc3VsdHMpIDogLTE7CkBA
IC0xMDU4LDcgKzEwNTcsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRnJvbVJl
bmRlCiAgICAgc2V0VmFsdWVNYXRjaGVzUmVuZGVyZXIoKTsKIAogICAgIC8vIEZpcmUgdGhlICJp
bnB1dCIgRE9NIGV2ZW50LgotICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGlucHV0RXZlbnQsIHRy
dWUsIGZhbHNlKTsKKyAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVzKCkuaW5wdXRF
dmVudCwgdHJ1ZSwgZmFsc2UpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEZpbGVM
aXN0RnJvbVJlbmRlcmVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykKQEAgLTEwOTksNyAr
MTA5OCw3IEBAIHZvaWQqIEhUTUxJbnB1dEVsZW1lbnQ6OnByZURpc3BhdGNoRXZlbnQKICAgICAv
LyBUaGlzIHJlc3VsdCBnaXZlcyB1cyBlbm91Z2ggaW5mbyB0byBwZXJmb3JtIHRoZSAidW5kbyIg
aW4gcG9zdERpc3BhdGNoIG9mIHRoZSBhY3Rpb24gd2UgdGFrZSBoZXJlLgogICAgIHZvaWQqIHJl
c3VsdCA9IDA7IAogICAgIGlmICgoaW5wdXRUeXBlKCkgPT0gQ0hFQ0tCT1ggfHwgaW5wdXRUeXBl
KCkgPT0gUkFESU8pICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkKLSAgICAgICAgICAgICYmIGV2dC0+
dHlwZSgpID09IGNsaWNrRXZlbnQgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1
dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICAgICAgICAgICYmIGV2dC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpLT5i
dXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGlmIChpbnB1dFR5cGUoKSA9PSBDSEVD
S0JPWCkgewogICAgICAgICAgICAgLy8gQXMgYSB3YXkgdG8gc3RvcmUgdGhlIHN0YXRlLCB3ZSBy
ZXR1cm4gMCBpZiB3ZSB3ZXJlIHVuY2hlY2tlZCwgMSBpZiB3ZSB3ZXJlIGNoZWNrZWQsIGFuZCAy
IGZvcgogICAgICAgICAgICAgLy8gaW5kZXRlcm1pbmF0ZS4KQEAgLTExMzcsNyArMTEzNiw3IEBA
IHZvaWQqIEhUTUxJbnB1dEVsZW1lbnQ6OnByZURpc3BhdGNoRXZlbnQKIHZvaWQgSFRNTElucHV0
RWxlbWVudDo6cG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyKEV2ZW50ICpldnQsIHZvaWQqIGRhdGEp
CiB7CiAgICAgaWYgKChpbnB1dFR5cGUoKSA9PSBDSEVDS0JPWCB8fCBpbnB1dFR5cGUoKSA9PSBS
QURJTykgJiYgZXZ0LT5pc01vdXNlRXZlbnQoKQotICAgICAgICAgICAgJiYgZXZ0LT50eXBlKCkg
PT0gY2xpY2tFdmVudCAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KS0+YnV0dG9uKCkg
PT0gTGVmdEJ1dHRvbikgeworICAgICAgICAgICAgJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmNsaWNrRXZlbnQgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1dHRvbigp
ID09IExlZnRCdXR0b24pIHsKICAgICAgICAgaWYgKGlucHV0VHlwZSgpID09IENIRUNLQk9YKSB7
CiAgICAgICAgICAgICAvLyBSZXZlcnNlIHRoZSBjaGVja2luZyB3ZSBkaWQgaW4gcHJlRGlzcGF0
Y2guCiAgICAgICAgICAgICBpZiAoZXZ0LT5kZWZhdWx0UHJldmVudGVkKCkgfHwgZXZ0LT5kZWZh
dWx0SGFuZGxlZCgpKSB7CkBAIC0xMTcyLDEwICsxMTcxLDEwIEBAIHZvaWQgSFRNTElucHV0RWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGwKIHsKICAgICBib29sIGNsaWNrRGVmYXVsdEZvcm1CdXR0
b24gPSBmYWxzZTsKIAotICAgIGlmIChpc1RleHRGaWVsZCgpICYmIGV2dC0+dHlwZSgpID09IHRl
eHRJbnB1dEV2ZW50ICYmIGV2dC0+aXNUZXh0RXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxUZXh0RXZl
bnQqPihldnQpLT5kYXRhKCkgPT0gIlxuIikKKyAgICBpZiAoaXNUZXh0RmllbGQoKSAmJiBldnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkudGV4dElucHV0RXZlbnQgJiYgZXZ0LT5pc1RleHRFdmVu
dCgpICYmIHN0YXRpY19jYXN0PFRleHRFdmVudCo+KGV2dCktPmRhdGEoKSA9PSAiXG4iKQogICAg
ICAgICBjbGlja0RlZmF1bHRGb3JtQnV0dG9uID0gdHJ1ZTsKIAotICAgIGlmIChpbnB1dFR5cGUo
KSA9PSBJTUFHRSAmJiBldnQtPmlzTW91c2VFdmVudCgpICYmIGV2dC0+dHlwZSgpID09IGNsaWNr
RXZlbnQpIHsKKyAgICBpZiAoaW5wdXRUeXBlKCkgPT0gSU1BR0UgJiYgZXZ0LT5pc01vdXNlRXZl
bnQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewogICAgICAg
ICAvLyByZWNvcmQgdGhlIG1vdXNlIHBvc2l0aW9uIGZvciB3aGVuIHdlIGdldCB0aGUgRE9NQWN0
aXZhdGUgZXZlbnQKICAgICAgICAgTW91c2VFdmVudCogbWUgPSBzdGF0aWNfY2FzdDxNb3VzZUV2
ZW50Kj4oZXZ0KTsKICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGp1c3QgY2FsbCBvZmZzZXRY
KCkgYW5kIG9mZnNldFkoKSBvbiB0aGUgZXZlbnQsCkBAIC0xMTkyLDE0ICsxMTkxLDE0IEBAIHZv
aWQgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGwKICAgICAgICAgfQogICAgIH0K
IAotICAgIGlmIChpc1RleHRGaWVsZCgpICYmIGV2dC0+dHlwZSgpID09IGtleWRvd25FdmVudCAm
JiBldnQtPmlzS2V5Ym9hcmRFdmVudCgpICYmIGZvY3VzZWQoKSAmJiBkb2N1bWVudCgpLT5mcmFt
ZSgpCisgICAgaWYgKGlzVGV4dEZpZWxkKCkgJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmtleWRvd25FdmVudCAmJiBldnQtPmlzS2V5Ym9hcmRFdmVudCgpICYmIGZvY3VzZWQoKSAmJiBk
b2N1bWVudCgpLT5mcmFtZSgpCiAgICAgICAgICAgICAgICAgJiYgZG9jdW1lbnQoKS0+ZnJhbWUo
KS0+ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KHRoaXMsIHN0YXRpY19jYXN0PEtleWJvYXJk
RXZlbnQqPihldnQpKSkgewogICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoaW5wdXRUeXBlKCkgPT0gUkFESU8gJiYgZXZ0
LT5pc01vdXNlRXZlbnQoKQotICAgICAgICAgICAgJiYgZXZ0LT50eXBlKCkgPT0gY2xpY2tFdmVu
dCAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRv
bikgeworICAgICAgICAgICAgJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZl
bnQgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1dHRvbigpID09IExlZnRCdXR0
b24pIHsKICAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMTIxNSw3ICsxMjE0LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbAogICAgIC8vIGFjdHVhbGx5IHN1Ym1pdHRpbmcgdGhlIGZvcm0uIEZvciBy
ZXNldCBpbnB1dHMsIHRoZSBmb3JtIGlzIHJlc2V0LiBUaGVzZSBldmVudHMgYXJlIHNlbnQgd2hl
biB0aGUgdXNlciBjbGlja3MKICAgICAvLyBvbiB0aGUgZWxlbWVudCwgb3IgcHJlc3NlcyBlbnRl
ciB3aGlsZSBpdCBpcyB0aGUgYWN0aXZlIGVsZW1lbnQuIEphdmFTY3JpcHQgY29kZSB3aXNoaW5n
IHRvIGFjdGl2YXRlIHRoZSBlbGVtZW50CiAgICAgLy8gbXVzdCBkaXNwYXRjaCBhIERPTUFjdGl2
YXRlIGV2ZW50IC0gYSBjbGljayBldmVudCB3aWxsIG5vdCBkbyB0aGUgam9iLgotICAgIGlmIChl
dnQtPnR5cGUoKSA9PSBET01BY3RpdmF0ZUV2ZW50ICYmICFkaXNhYmxlZCgpKSB7CisgICAgaWYg
KGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ET01BY3RpdmF0ZUV2ZW50ICYmICFkaXNhYmxl
ZCgpKSB7CiAgICAgICAgIGlmIChpbnB1dFR5cGUoKSA9PSBJTUFHRSB8fCBpbnB1dFR5cGUoKSA9
PSBTVUJNSVQgfHwgaW5wdXRUeXBlKCkgPT0gUkVTRVQpIHsKICAgICAgICAgICAgIGlmICghZm9y
bSgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTEyMzksNyArMTIzOCw3IEBAIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGwKIAogICAgIC8vIFVzZSBrZXkgcHJl
c3MgZXZlbnQgaGVyZSBzaW5jZSBzZW5kaW5nIHNpbXVsYXRlZCBtb3VzZSBldmVudHMKICAgICAv
LyBvbiBrZXkgZG93biBibG9ja3MgdGhlIHByb3BlciBzZW5kaW5nIG9mIHRoZSBrZXkgcHJlc3Mg
ZXZlbnQuCi0gICAgaWYgKGV2dC0+dHlwZSgpID09IGtleXByZXNzRXZlbnQgJiYgZXZ0LT5pc0tl
eWJvYXJkRXZlbnQoKSkgeworICAgIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5
cHJlc3NFdmVudCAmJiBldnQtPmlzS2V5Ym9hcmRFdmVudCgpKSB7CiAgICAgICAgIGJvb2wgY2xp
Y2tFbGVtZW50ID0gZmFsc2U7CiAKICAgICAgICAgaW50IGNoYXJDb2RlID0gc3RhdGljX2Nhc3Q8
S2V5Ym9hcmRFdmVudCo+KGV2dCktPmNoYXJDb2RlKCk7CkBAIC0xMjkxLDcgKzEyOTAsNyBAQCB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBpZiAoZXZ0LT50eXBlKCkgPT0ga2V5ZG93bkV2ZW50ICYmIGV2dC0+aXNLZXlib2Fy
ZEV2ZW50KCkpIHsKKyAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25F
dmVudCAmJiBldnQtPmlzS2V5Ym9hcmRFdmVudCgpKSB7CiAgICAgICAgIFN0cmluZyBrZXkgPSBz
dGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0KS0+a2V5SWRlbnRpZmllcigpOwogCiAgICAg
ICAgIGlmIChrZXkgPT0gIlUrMDAyMCIpIHsKQEAgLTEzNDcsNyArMTM0Niw3IEBAIHZvaWQgSFRN
TElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGwKICAgICAgICAgfQogICAgIH0KIAotICAg
IGlmIChldnQtPnR5cGUoKSA9PSBrZXl1cEV2ZW50ICYmIGV2dC0+aXNLZXlib2FyZEV2ZW50KCkp
IHsKKyAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXVwRXZlbnQgJiYgZXZ0
LT5pc0tleWJvYXJkRXZlbnQoKSkgewogICAgICAgICBib29sIGNsaWNrRWxlbWVudCA9IGZhbHNl
OwogCiAgICAgICAgIFN0cmluZyBrZXkgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0
KS0+a2V5SWRlbnRpZmllcigpOwpAQCAtMTQyMiwxMiArMTQyMSwxMiBAQCB2b2lkIEhUTUxJbnB1
dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsCiAgICAgICAgIHRleHRFdmVudC0+c2V0VGV4dChj
b25zdHJhaW5WYWx1ZSh0ZXh0RXZlbnQtPnRleHQoKSwgbWF4TmV3TGVuKSk7CiAgICAgfQogCi0g
ICAgaWYgKGlzVGV4dEZpZWxkKCkgJiYgcmVuZGVyZXIoKSAmJiAoZXZ0LT5pc01vdXNlRXZlbnQo
KSB8fCBldnQtPmlzRHJhZ0V2ZW50KCkgfHwgZXZ0LT5pc1doZWVsRXZlbnQoKSB8fCBldnQtPnR5
cGUoKSA9PSBibHVyRXZlbnQgfHwgZXZ0LT50eXBlKCkgPT0gZm9jdXNFdmVudCkpCisgICAgaWYg
KGlzVGV4dEZpZWxkKCkgJiYgcmVuZGVyZXIoKSAmJiAoZXZ0LT5pc01vdXNlRXZlbnQoKSB8fCBl
dnQtPmlzRHJhZ0V2ZW50KCkgfHwgZXZ0LT5pc1doZWVsRXZlbnQoKSB8fCBldnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50IHx8IGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5m
b2N1c0V2ZW50KSkKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2wqPihyZW5k
ZXJlcigpKS0+Zm9yd2FyZEV2ZW50KGV2dCk7CiAKICAgICBpZiAoaW5wdXRUeXBlKCkgPT0gUkFO
R0UgJiYgcmVuZGVyZXIoKSkgewogICAgICAgICBSZW5kZXJTbGlkZXIqIHNsaWRlciA9IHN0YXRp
Y19jYXN0PFJlbmRlclNsaWRlcio+KHJlbmRlcmVyKCkpOwotICAgICAgICBpZiAoZXZ0LT5pc01v
dXNlRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBtb3VzZWRvd25FdmVudCAmJiBzdGF0aWNfY2Fz
dDxNb3VzZUV2ZW50Kj4oZXZ0KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgICAgICBp
ZiAoZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2Vkb3duRXZlbnQgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1dHRvbigpID09
IExlZnRCdXR0b24pIHsKICAgICAgICAgICAgIE1vdXNlRXZlbnQqIG1FdnQgPSBzdGF0aWNfY2Fz
dDxNb3VzZUV2ZW50Kj4oZXZ0KTsKICAgICAgICAgICAgIGlmICghc2xpZGVyLT5tb3VzZUV2ZW50
SXNJblRodW1iKG1FdnQpKSB7CiAgICAgICAgICAgICAgICAgSW50UG9pbnQgZXZlbnRPZmZzZXQo
bUV2dC0+b2Zmc2V0WCgpLCBtRXZ0LT5vZmZzZXRZKCkpOwpAQCAtMTYyNCw3ICsxNjIzLDcgQEAg
dm9pZCBIVE1MSW5wdXRFbGVtZW50OjpvblNlYXJjaCgpCiAgICAgQVNTRVJUKGlzU2VhcmNoRmll
bGQoKSk7CiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRl
eHRDb250cm9sKj4ocmVuZGVyZXIoKSktPnN0b3BTZWFyY2hFdmVudFRpbWVyKCk7Ci0gICAgZGlz
cGF0Y2hFdmVudEZvclR5cGUoc2VhcmNoRXZlbnQsIHRydWUsIGZhbHNlKTsKKyAgICBkaXNwYXRj
aEV2ZW50Rm9yVHlwZShldmVudE5hbWVzKCkuc2VhcmNoRXZlbnQsIHRydWUsIGZhbHNlKTsKIH0K
IAogU2VsZWN0aW9uIEhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvbigpIGNvbnN0CkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvaHRt
bC9IVE1MTGFiZWxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotdXNpbmcg
bmFtZXNwYWNlIEV2ZW50TmFtZXM7CiAKIEhUTUxMYWJlbEVsZW1lbnQ6OkhUTUxMYWJlbEVsZW1l
bnQoRG9jdW1lbnQgKmRvYykKICAgICA6IEhUTUxFbGVtZW50KGxhYmVsVGFnLCBkb2MpCkBAIC0x
MDMsNyArMTAyLDcgQEAgdm9pZCBIVE1MTGFiZWxFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbAog
ewogICAgIHN0YXRpYyBib29sIHByb2Nlc3NpbmdDbGljayA9IGZhbHNlOwogCi0gICAgaWYgKGV2
dC0+dHlwZSgpID09IGNsaWNrRXZlbnQgJiYgIXByb2Nlc3NpbmdDbGljaykgeworICAgIGlmIChl
dnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCAmJiAhcHJvY2Vzc2luZ0NsaWNr
KSB7CiAgICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gY29udHJvbCA9IGNvcnJlc3BvbmRpbmdD
b250cm9sKCk7CiAKICAgICAgICAgLy8gSWYgd2UgY2FuJ3QgZmluZCBhIGNvbnRyb2wgb3IgaWYg
dGhlIGNvbnRyb2wgcmVjZWl2ZWQgdGhlIGNsaWNrCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3Rk
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogSFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlh
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQpAQCAt
Mjg2LDcgKzI4NSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZChFeGNlcHRpb25Db2QK
ICAgICBpZiAobV9iZWd1bikgewogICAgICAgICBtX2JlZ3VuID0gZmFsc2U7CiAgICAgICAgIG1f
ZXJyb3IgPSBNZWRpYUVycm9yOjpjcmVhdGUoTWVkaWFFcnJvcjo6TUVESUFfRVJSX0FCT1JURUQp
OwotICAgICAgICBpbml0QW5kRGlzcGF0Y2hQcm9ncmVzc0V2ZW50KGFib3J0RXZlbnQpOworICAg
ICAgICBpbml0QW5kRGlzcGF0Y2hQcm9ncmVzc0V2ZW50KGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50
KTsKICAgICAgICAgaWYgKG1fbG9hZE5lc3RpbmdMZXZlbCA8IG1fdGVybWluYXRlTG9hZEJlbG93
TmVzdGluZ0xldmVsKQogICAgICAgICAgICAgZ290byBlbmQ7CiAgICAgfQpAQCAtMzEwLDcgKzMw
OSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZChFeGNlcHRpb25Db2QKICAgICAgICAg
ICAgIG1fcGxheWVyLT5zZWVrKDApOwogICAgICAgICB9CiAgICAgICAgIG1fY3VycmVudExvb3Ag
PSAwOwotICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShlbXB0aWVkRXZlbnQsIGZhbHNlLCB0
cnVlKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoZXZlbnROYW1lcygpLmVtcHRpZWRF
dmVudCwgZmFsc2UsIHRydWUpOwogICAgICAgICBpZiAobV9sb2FkTmVzdGluZ0xldmVsIDwgbV90
ZXJtaW5hdGVMb2FkQmVsb3dOZXN0aW5nTGV2ZWwpCiAgICAgICAgICAgICBnb3RvIGVuZDsKICAg
ICB9CkBAIC0zMzAsNyArMzI5LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpsb2FkKEV4Y2Vw
dGlvbkNvZAogICAgIAogICAgIC8vIDkKICAgICBtX2JlZ3VuID0gdHJ1ZTsgICAgICAgIAotICAg
IGRpc3BhdGNoUHJvZ3Jlc3NFdmVudChsb2Fkc3RhcnRFdmVudCwgZmFsc2UsIDAsIDApOworICAg
IGRpc3BhdGNoUHJvZ3Jlc3NFdmVudChldmVudE5hbWVzKCkubG9hZHN0YXJ0RXZlbnQsIGZhbHNl
LCAwLCAwKTsKICAgICBpZiAobV9sb2FkTmVzdGluZ0xldmVsIDwgbV90ZXJtaW5hdGVMb2FkQmVs
b3dOZXN0aW5nTGV2ZWwpCiAgICAgICAgIGdvdG8gZW5kOwogICAgIApAQCAtMzc2LDcgKzM3NSw3
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJOZXR3b3IKICAgICAgICAgbV9w
cm9ncmVzc0V2ZW50VGltZXIuc3RvcCgpOwogICAgICAgICBtX2J1ZmZlcmluZ1JhdGUgPSAwOwog
ICAgICAgICAKLSAgICAgICAgaW5pdEFuZERpc3BhdGNoUHJvZ3Jlc3NFdmVudChlcnJvckV2ZW50
KTsgCisgICAgICAgIGluaXRBbmREaXNwYXRjaFByb2dyZXNzRXZlbnQoZXZlbnROYW1lcygpLmVy
cm9yRXZlbnQpOyAKICAgICAgICAgaWYgKG1fbG9hZE5lc3RpbmdMZXZlbCA8IG1fdGVybWluYXRl
TG9hZEJlbG93TmVzdGluZ0xldmVsKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKQEAg
LTM4NSw3ICszODQsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyTmV0d29y
CiAgICAgICAgIGlmIChpc1ZpZGVvKCkpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MVmlk
ZW9FbGVtZW50Kj4odGhpcyktPnVwZGF0ZVBvc3RlckltYWdlKCk7CiAKLSAgICAgICAgZGlzcGF0
Y2hFdmVudEZvclR5cGUoZW1wdGllZEV2ZW50LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIGRpc3Bh
dGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5lbXB0aWVkRXZlbnQsIGZhbHNlLCB0cnVlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTM5NiwxMSArMzk1LDExIEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJOZXR3b3IKICAgICAgICAgbV9wbGF5ZXItPnNl
ZWsoZWZmZWN0aXZlU3RhcnQoKSk7CiAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTE9BREVEX01F
VEFEQVRBOwogICAgICAgICAKLSAgICAgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoZHVyYXRpb25j
aGFuZ2VFdmVudCwgZmFsc2UsIHRydWUpOworICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShl
dmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCwgZmFsc2UsIHRydWUpOwogICAgICAgICBp
ZiAobV9sb2FkTmVzdGluZ0xldmVsIDwgbV90ZXJtaW5hdGVMb2FkQmVsb3dOZXN0aW5nTGV2ZWwp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBkaXNwYXRjaEV2ZW50Rm9y
VHlwZShsb2FkZWRtZXRhZGF0YUV2ZW50LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIGRpc3BhdGNo
RXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5sb2FkZWRtZXRhZGF0YUV2ZW50LCBmYWxzZSwgdHJ1
ZSk7CiAgICAgICAgIGlmIChtX2xvYWROZXN0aW5nTGV2ZWwgPCBtX3Rlcm1pbmF0ZUxvYWRCZWxv
d05lc3RpbmdMZXZlbCkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00MjIsMTEgKzQy
MSwxMSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyTmV0d29yCiAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxSZW5kZXJWaWRlbyo+KHJlbmRlcmVyKCkpLT52aWRlb1NpemVDaGFu
Z2VkKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBl
KGxvYWRlZGZpcnN0ZnJhbWVFdmVudCwgZmFsc2UsIHRydWUpOworICAgICAgICBkaXNwYXRjaEV2
ZW50Rm9yVHlwZShldmVudE5hbWVzKCkubG9hZGVkZmlyc3RmcmFtZUV2ZW50LCBmYWxzZSwgdHJ1
ZSk7CiAgICAgICAgIGlmIChtX2xvYWROZXN0aW5nTGV2ZWwgPCBtX3Rlcm1pbmF0ZUxvYWRCZWxv
d05lc3RpbmdMZXZlbCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIGRp
c3BhdGNoRXZlbnRGb3JUeXBlKGNhbnNob3djdXJyZW50ZnJhbWVFdmVudCwgZmFsc2UsIHRydWUp
OworICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVzKCkuY2Fuc2hvd2N1cnJl
bnRmcmFtZUV2ZW50LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgIGlmIChtX2xvYWROZXN0aW5nTGV2
ZWwgPCBtX3Rlcm1pbmF0ZUxvYWRCZWxvd05lc3RpbmdMZXZlbCkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC00MzcsNyArNDM2LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRp
YVBsYXllck5ldHdvcgogICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IExPQURFRDsKICAgICAgICAg
bV9wcm9ncmVzc0V2ZW50VGltZXIuc3RvcCgpOwogICAgICAgICBtX2J1ZmZlcmluZ1JhdGUgPSAw
OwotICAgICAgICBpbml0QW5kRGlzcGF0Y2hQcm9ncmVzc0V2ZW50KGxvYWRFdmVudCk7IAorICAg
ICAgICBpbml0QW5kRGlzcGF0Y2hQcm9ncmVzc0V2ZW50KGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQp
OyAKICAgICB9CiB9CiAKQEAgLTQ2MywyNSArNDYyLDI1IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6c2V0UmVhZHlTdGF0ZShSZWEKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdGF0
ZSA9PSBEQVRBX1VOQVZBSUxBQkxFKSB7Ci0gICAgICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGRh
dGF1bmF2YWlsYWJsZUV2ZW50LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnRG
b3JUeXBlKGV2ZW50TmFtZXMoKS5kYXRhdW5hdmFpbGFibGVFdmVudCwgZmFsc2UsIHRydWUpOwog
ICAgICAgICBpZiAod2FzQWN0aXZlbHlQbGF5aW5nKSB7Ci0gICAgICAgICAgICBkaXNwYXRjaEV2
ZW50Rm9yVHlwZSh0aW1ldXBkYXRlRXZlbnQsIGZhbHNlLCB0cnVlKTsKLSAgICAgICAgICAgIGRp
c3BhdGNoRXZlbnRGb3JUeXBlKHdhaXRpbmdFdmVudCwgZmFsc2UsIHRydWUpOworICAgICAgICAg
ICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoZXZlbnROYW1lcygpLnRpbWV1cGRhdGVFdmVudCwgZmFs
c2UsIHRydWUpOworICAgICAgICAgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoZXZlbnROYW1lcygp
LndhaXRpbmdFdmVudCwgZmFsc2UsIHRydWUpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChz
dGF0ZSA9PSBDQU5fU0hPV19DVVJSRU5UX0ZSQU1FKSB7CiAgICAgICAgIGlmIChtX2xvYWRlZEZp
cnN0RnJhbWUpCi0gICAgICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShjYW5zaG93Y3VycmVu
dGZyYW1lRXZlbnQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIGRpc3BhdGNoRXZlbnRGb3JU
eXBlKGV2ZW50TmFtZXMoKS5jYW5zaG93Y3VycmVudGZyYW1lRXZlbnQsIGZhbHNlLCB0cnVlKTsK
ICAgICAgICAgaWYgKHdhc0FjdGl2ZWx5UGxheWluZykgewotICAgICAgICAgICAgZGlzcGF0Y2hF
dmVudEZvclR5cGUodGltZXVwZGF0ZUV2ZW50LCBmYWxzZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBk
aXNwYXRjaEV2ZW50Rm9yVHlwZSh3YWl0aW5nRXZlbnQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAg
ICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS50aW1ldXBkYXRlRXZlbnQsIGZh
bHNlLCB0cnVlKTsKKyAgICAgICAgICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMo
KS53YWl0aW5nRXZlbnQsIGZhbHNlLCB0cnVlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAo
c3RhdGUgPT0gQ0FOX1BMQVkpIHsKLSAgICAgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoY2FucGxh
eUV2ZW50LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50
TmFtZXMoKS5jYW5wbGF5RXZlbnQsIGZhbHNlLCB0cnVlKTsKICAgICB9IGVsc2UgaWYgKHN0YXRl
ID09IENBTl9QTEFZX1RIUk9VR0gpIHsKLSAgICAgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoY2Fu
cGxheXRocm91Z2hFdmVudCwgZmFsc2UsIHRydWUpOworICAgICAgICBkaXNwYXRjaEV2ZW50Rm9y
VHlwZShldmVudE5hbWVzKCkuY2FucGxheXRocm91Z2hFdmVudCwgZmFsc2UsIHRydWUpOwogICAg
ICAgICBpZiAobV9hdXRvcGxheWluZyAmJiBtX3BhdXNlZCAmJiBhdXRvcGxheSgpKSB7CiAgICAg
ICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOwotICAgICAgICAgICAgZGlzcGF0Y2hFdmVudEZvclR5
cGUocGxheUV2ZW50LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICBkaXNwYXRjaEV2ZW50Rm9y
VHlwZShldmVudE5hbWVzKCkucGxheUV2ZW50LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgdXBkYXRlUGxheVN0YXRlKCk7CkBAIC00OTksMTEgKzQ5OCwxMSBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OnByb2dyZXNzRXZlbnRUaW1lCiAgICAgaWYgKHByb2dyZXNzID09IG1f
cHJldmlvdXNQcm9ncmVzcykgewogICAgICAgICBpZiAodGltZWRlbHRhID4gMy4wICYmICFtX3Nl
bnRTdGFsbGVkRXZlbnQpIHsKICAgICAgICAgICAgIG1fYnVmZmVyaW5nUmF0ZSA9IDA7Ci0gICAg
ICAgICAgICBpbml0QW5kRGlzcGF0Y2hQcm9ncmVzc0V2ZW50KHN0YWxsZWRFdmVudCk7CisgICAg
ICAgICAgICBpbml0QW5kRGlzcGF0Y2hQcm9ncmVzc0V2ZW50KGV2ZW50TmFtZXMoKS5zdGFsbGVk
RXZlbnQpOwogICAgICAgICAgICAgbV9zZW50U3RhbGxlZEV2ZW50ID0gdHJ1ZTsKICAgICAgICAg
fQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGluaXRBbmREaXNwYXRjaFByb2dyZXNzRXZlbnQocHJv
Z3Jlc3NFdmVudCk7CisgICAgICAgIGluaXRBbmREaXNwYXRjaFByb2dyZXNzRXZlbnQoZXZlbnRO
YW1lcygpLnByb2dyZXNzRXZlbnQpOwogICAgICAgICBtX3ByZXZpb3VzUHJvZ3Jlc3MgPSBwcm9n
cmVzczsKICAgICAgICAgbV9wcmV2aW91c1Byb2dyZXNzVGltZSA9IHRpbWU7CiAgICAgICAgIG1f
c2VudFN0YWxsZWRFdmVudCA9IGZhbHNlOwpAQCAtNTQ5LDcgKzU0OCw3IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6c2VlayhmbG9hdCB0aW1lLCAKICAgICBtX3NlZWtpbmcgPSB0cnVlOwogICAg
IAogICAgIC8vIDkKLSAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZSh0aW1ldXBkYXRlRXZlbnQsIGZh
bHNlLCB0cnVlKTsKKyAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVzKCkudGltZXVw
ZGF0ZUV2ZW50LCBmYWxzZSwgdHJ1ZSk7CiAgICAgCiAgICAgLy8gMTAKICAgICAvLyBBcyBzb29u
IGFzIHRoZSB1c2VyIGFnZW50IGhhcyBlc3RhYmxpc2hlZCB3aGV0aGVyIG9yIG5vdCB0aGUgbWVk
aWEgZGF0YSBmb3IgdGhlIG5ldyBwbGF5YmFjayBwb3NpdGlvbiBpcyBhdmFpbGFibGUsIApAQCAt
NjA4LDcgKzYwNyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0RGVmYXVsdFBsYXliYWMK
ICAgICB9CiAgICAgaWYgKG1fZGVmYXVsdFBsYXliYWNrUmF0ZSAhPSByYXRlKSB7CiAgICAgICAg
IG1fZGVmYXVsdFBsYXliYWNrUmF0ZSA9IHJhdGU7Ci0gICAgICAgIGRpc3BhdGNoRXZlbnRBc3lu
YyhyYXRlY2hhbmdlRXZlbnQpOworICAgICAgICBkaXNwYXRjaEV2ZW50QXN5bmMoZXZlbnROYW1l
cygpLnJhdGVjaGFuZ2VFdmVudCk7CiAgICAgfQogfQogCkBAIC02MjUsNyArNjI0LDcgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRQbGF5YmFja1JhdGUoZgogICAgIH0KICAgICBpZiAobV9w
bGF5ZXIgJiYgbV9wbGF5ZXItPnJhdGUoKSAhPSByYXRlKSB7CiAgICAgICAgIG1fcGxheWVyLT5z
ZXRSYXRlKHJhdGUpOwotICAgICAgICBkaXNwYXRjaEV2ZW50QXN5bmMocmF0ZWNoYW5nZUV2ZW50
KTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudEFzeW5jKGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdlRXZl
bnQpOwogICAgIH0KIH0KIApAQCAtNjYyLDcgKzY2MSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6cGxheShFeGNlcHRpb25Db2QKICAgICAKICAgICBpZiAobV9wYXVzZWQpIHsKICAgICAgICAg
bV9wYXVzZWQgPSBmYWxzZTsKLSAgICAgICAgZGlzcGF0Y2hFdmVudEFzeW5jKHBsYXlFdmVudCk7
CisgICAgICAgIGRpc3BhdGNoRXZlbnRBc3luYyhldmVudE5hbWVzKCkucGxheUV2ZW50KTsKICAg
ICB9CiAKICAgICBtX2F1dG9wbGF5aW5nID0gZmFsc2U7CkBAIC02ODIsOCArNjgxLDggQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpwYXVzZShFeGNlcHRpb25DbwogCiAgICAgaWYgKCFtX3BhdXNl
ZCkgewogICAgICAgICBtX3BhdXNlZCA9IHRydWU7Ci0gICAgICAgIGRpc3BhdGNoRXZlbnRBc3lu
Yyh0aW1ldXBkYXRlRXZlbnQpOwotICAgICAgICBkaXNwYXRjaEV2ZW50QXN5bmMocGF1c2VFdmVu
dCk7CisgICAgICAgIGRpc3BhdGNoRXZlbnRBc3luYyhldmVudE5hbWVzKCkudGltZXVwZGF0ZUV2
ZW50KTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudEFzeW5jKGV2ZW50TmFtZXMoKS5wYXVzZUV2ZW50
KTsKICAgICB9CiAKICAgICBtX2F1dG9wbGF5aW5nID0gZmFsc2U7CkBAIC03ODcsNyArNzg2LDcg
QEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRWb2x1bWUoZmxvYXQgdgogICAgIGlmIChtX3Zv
bHVtZSAhPSB2b2wpIHsKICAgICAgICAgbV92b2x1bWUgPSB2b2w7CiAgICAgICAgIHVwZGF0ZVZv
bHVtZSgpOwotICAgICAgICBkaXNwYXRjaEV2ZW50QXN5bmModm9sdW1lY2hhbmdlRXZlbnQpOwor
ICAgICAgICBkaXNwYXRjaEV2ZW50QXN5bmMoZXZlbnROYW1lcygpLnZvbHVtZWNoYW5nZUV2ZW50
KTsKICAgICB9CiB9CiAKQEAgLTgwMSw3ICs4MDAsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OnNldE11dGVkKGJvb2wgbXV0CiAgICAgaWYgKG1fbXV0ZWQgIT0gbXV0ZWQpIHsKICAgICAgICAg
bV9tdXRlZCA9IG11dGVkOwogICAgICAgICB1cGRhdGVWb2x1bWUoKTsKLSAgICAgICAgZGlzcGF0
Y2hFdmVudEFzeW5jKHZvbHVtZWNoYW5nZUV2ZW50KTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudEFz
eW5jKGV2ZW50TmFtZXMoKS52b2x1bWVjaGFuZ2VFdmVudCk7CiAgICAgfQogfQogCkBAIC04OTAs
MTIgKzg4OSwxMiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyVGltZUNoCiAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAgIHNlZWsoZWZmZWN0aXZlTG9vcFN0YXJ0
KCksIGVjKTsKICAgICAgICAgbV9jdXJyZW50TG9vcCsrOwotICAgICAgICBkaXNwYXRjaEV2ZW50
Rm9yVHlwZSh0aW1ldXBkYXRlRXZlbnQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgZGlzcGF0Y2hF
dmVudEZvclR5cGUoZXZlbnROYW1lcygpLnRpbWV1cGRhdGVFdmVudCwgZmFsc2UsIHRydWUpOwog
ICAgIH0KICAgICAKICAgICBpZiAobV9jdXJyZW50TG9vcCA9PSBwbGF5Q291bnQoKSAtIDEgJiYg
Y3VycmVudFRpbWUoKSA+PSBlZmZlY3RpdmVFbmQoKSkgewotICAgICAgICBkaXNwYXRjaEV2ZW50
Rm9yVHlwZSh0aW1ldXBkYXRlRXZlbnQsIGZhbHNlLCB0cnVlKTsKLSAgICAgICAgZGlzcGF0Y2hF
dmVudEZvclR5cGUoZW5kZWRFdmVudCwgZmFsc2UsIHRydWUpOworICAgICAgICBkaXNwYXRjaEV2
ZW50Rm9yVHlwZShldmVudE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50LCBmYWxzZSwgdHJ1ZSk7Cisg
ICAgICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5lbmRlZEV2ZW50LCBmYWxz
ZSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgdXBkYXRlUGxheVN0YXRlKCk7CkBAIC0xMDE4LDExICsx
MDE3LDExIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZG9jdW1lbnRXaWxsQmVjb20KIAogICAg
ICAgICBtX2Vycm9yID0gTWVkaWFFcnJvcjo6Y3JlYXRlKE1lZGlhRXJyb3I6Ok1FRElBX0VSUl9B
Qk9SVEVEKTsKICAgICAgICAgbV9iZWd1biA9IGZhbHNlOwotICAgICAgICBpbml0QW5kRGlzcGF0
Y2hQcm9ncmVzc0V2ZW50KGFib3J0RXZlbnQpOworICAgICAgICBpbml0QW5kRGlzcGF0Y2hQcm9n
cmVzc0V2ZW50KGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KTsKICAgICAgICAgaWYgKG1fbmV0d29y
a1N0YXRlID49IExPQURJTkcpIHsKICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gRU1QVFk7
CiAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBEQVRBX1VOQVZBSUxBQkxFOwotICAgICAgICAg
ICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoZW1wdGllZEV2ZW50LCBmYWxzZSwgdHJ1ZSk7CisgICAg
ICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVzKCkuZW1wdGllZEV2ZW50LCBm
YWxzZSwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgbV9pbkFjdGl2ZURvY3VtZW50ID0g
ZmFsc2U7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDM4MDY0
KQorKysgV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNyArNDIsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFj
ZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogSFRNTE9iamVjdEVs
ZW1lbnQ6OkhUTUxPYmplY3RFbGVtZW50KERvY3VtZW50KiBkb2MsIGJvb2wgY3JlYXRlZEJ5UGFy
c2VyKSAKQEAgLTk0LDcgKzkzLDcgQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaQogICAgICAgICBpZiAocmVuZGVyZXIoKSkKICAgICAgICAgICBtX25lZWRXaWRnZXRV
cGRhdGUgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ubG9hZEF0dHIp
IHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUobG9h
ZEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRB
dHRyaWJ1dGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gbmFtZUF0dHIpIHsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBu
ZXdOYW1lID0gYXR0ci0+dmFsdWUoKTsKICAgICAgICAgaWYgKGlzRG9jTmFtZWRJdGVtKCkgJiYg
aW5Eb2N1bWVudCgpICYmIGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBA
CiAKICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
LSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCkBAIC00
MSw3ICs0MCw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7Ci11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIAogSFRNTE9wdGlvbkVsZW1lbnQ6
OkhUTUxPcHRpb25FbGVtZW50KERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZikKICAg
ICA6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQob3B0aW9uVGFnLCBkb2MsIGYpCkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MU2NyaXB0RWxlbWVudC5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9odG1s
L0hUTUxTY3JpcHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotdXNpbmcg
bmFtZXNwYWNlIEV2ZW50TmFtZXM7CiAKIEhUTUxTY3JpcHRFbGVtZW50OjpIVE1MU2NyaXB0RWxl
bWVudChEb2N1bWVudCogZG9jKQogICAgIDogSFRNTEVsZW1lbnQoc2NyaXB0VGFnLCBkb2MpCkBA
IC03MSw3ICs3MCw3IEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmkK
ICAgICBpZiAoYXR0ck5hbWUgPT0gc3JjQXR0cikKICAgICAgICAgaGFuZGxlU291cmNlQXR0cmli
dXRlKG1fZGF0YSwgYXR0ci0+dmFsdWUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gb25s
b2FkQXR0cikKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1
dGUobG9hZEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5
cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgYXR0cik7CiAgICAgZWxzZQog
ICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC0y
MTcsMTIgKzIxNiwxMiBAQCB2b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpkaXNwYXRjaExvYWRFdmVu
CiAgICAgQVNTRVJUKCFtX2RhdGEuaGF2ZUZpcmVkTG9hZEV2ZW50KCkpOwogICAgIG1fZGF0YS5z
ZXRIYXZlRmlyZWRMb2FkRXZlbnQodHJ1ZSk7CiAKLSAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShs
b2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoZXZlbnRO
YW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKIH0KIAogdm9pZCBIVE1MU2NyaXB0RWxl
bWVudDo6ZGlzcGF0Y2hFcnJvckV2ZW50KCkKIHsKLSAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShl
cnJvckV2ZW50LCB0cnVlLCBmYWxzZSk7CisgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoZXZlbnRO
YW1lcygpLmVycm9yRXZlbnQsIHRydWUsIGZhbHNlKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
U2VsZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDYgQEAgdXNpbmcg
bmFtZXNwYWNlIFVuaWNvZGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNw
YWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBzdGF0aWMgY29u
c3QgRE9NVGltZVN0YW1wIHR5cGVBaGVhZFRpbWVvdXQgPSAxMDAwOwpAQCAtMzc0LDExICszNzMs
MTEgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaQogICAgICAgICAv
LyBEb24ndCBtYXAgJ2FsaWduJyBhdHRyaWJ1dGUuICBUaGlzIG1hdGNoZXMgd2hhdCBGaXJlZm94
LCBPcGVyYSBhbmQgSUUgZG8uCiAgICAgICAgIC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjA3MgogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
Zm9jdXNBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0
cmlidXRlKGZvY3VzRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuZm9jdXNFdmVudCwgYXR0cik7CiAgICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25ibHVyQXR0cikgewotICAgICAgICBzZXRJbmxp
bmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShibHVyRXZlbnQsIGF0dHIpOworICAg
ICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVz
KCkuYmx1ckV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmNo
YW5nZUF0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRy
aWJ1dGUoY2hhbmdlRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsIGF0dHIpOwogICAg
IH0gZWxzZQogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTYwNyw3ICs2MDYsNyBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kCiAgICAgaWYgKGV2dC0+ZGVmYXVsdEhhbmRsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGV2dC0+dHlwZSgpID09IGtleXByZXNzRXZl
bnQgJiYgZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSkgeworICAgIGlmIChldnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCAmJiBldnQtPmlzS2V5Ym9hcmRFdmVudCgpKSB7CiAg
ICAgICAgIEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQgPSBzdGF0aWNfY2FzdDxLZXlib2Fy
ZEV2ZW50Kj4oZXZ0KTsKICAgICAKICAgICAgICAgaWYgKCFrZXlib2FyZEV2ZW50LT5jdHJsS2V5
KCkgJiYgIWtleWJvYXJkRXZlbnQtPmFsdEtleSgpICYmICFrZXlib2FyZEV2ZW50LT5tZXRhS2V5
KCkgJiYKQEAgLTYyNSw3ICs2MjQsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlz
dERlZmF1bHRFCiB7CiAgICAgUmVuZGVyTWVudUxpc3QqIG1lbnVMaXN0ID0gc3RhdGljX2Nhc3Q8
UmVuZGVyTWVudUxpc3QqPihyZW5kZXJlcigpKTsKIAotICAgIGlmIChldnQtPnR5cGUoKSA9PSBr
ZXlkb3duRXZlbnQpIHsKKyAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRv
d25FdmVudCkgewogICAgICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIWV2dC0+aXNLZXlib2FyZEV2
ZW50KCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIFN0cmluZyBrZXlJZGVudGlmaWVy
ID0gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2dCktPmtleUlkZW50aWZpZXIoKTsKQEAg
LTY2Nyw3ICs2NjYsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1bHRF
CiAKICAgICAvLyBVc2Uga2V5IHByZXNzIGV2ZW50IGhlcmUgc2luY2Ugc2VuZGluZyBzaW11bGF0
ZWQgbW91c2UgZXZlbnRzCiAgICAgLy8gb24ga2V5IGRvd24gYmxvY2tzIHRoZSBwcm9wZXIgc2Vu
ZGluZyBvZiB0aGUga2V5IHByZXNzIGV2ZW50LgotICAgIGlmIChldnQtPnR5cGUoKSA9PSBrZXlw
cmVzc0V2ZW50KSB7CisgICAgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVz
c0V2ZW50KSB7CiAgICAgICAgIGlmICghcmVuZGVyZXIoKSB8fCAhZXZ0LT5pc0tleWJvYXJkRXZl
bnQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaW50IGtleUNvZGUgPSBzdGF0aWNf
Y2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0KS0+a2V5Q29kZSgpOwpAQCAtNjk5LDcgKzY5OCw3IEBA
IHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVsdEUKICAgICAgICAgICAgIGV2
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9CiAKLSAgICBpZiAoZXZ0LT50eXBlKCkgPT0g
bW91c2Vkb3duRXZlbnQgJiYgZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3Vz
ZUV2ZW50Kj4oZXZ0KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgIGlmIChldnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZ0LT5pc01vdXNlRXZlbnQo
KSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRv
bikgewogICAgICAgICBmb2N1cygpOwogICAgICAgICBpZiAobWVudUxpc3QtPnBvcHVwSXNWaXNp
YmxlKCkpCiAgICAgICAgICAgICBtZW51TGlzdC0+aGlkZVBvcHVwKCk7CkBAIC03MTUsNyArNzE0
LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxpc3REZWZhdWx0RQogCiB2b2lkIEhU
TUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQog
ewotICAgIGlmIChldnQtPnR5cGUoKSA9PSBtb3VzZWRvd25FdmVudCAmJiBldnQtPmlzTW91c2VF
dmVudCgpICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpLT5idXR0b24oKSA9PSBMZWZ0
QnV0dG9uKSB7CisgICAgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25F
dmVudCAmJiBldnQtPmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihl
dnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGZvY3VzKCk7CiAgICAgICAg
IAogICAgICAgICBNb3VzZUV2ZW50KiBtRXZ0ID0gc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2
dCk7CkBAIC03NzUsMTAgKzc3NCwxMCBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94
RGVmYXVsdEV2CiAKICAgICAgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAg
ICAgfQotICAgIH0gZWxzZSBpZiAoZXZ0LT50eXBlKCkgPT0gbW91c2V1cEV2ZW50ICYmIGV2dC0+
aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1dHRvbigp
ID09IExlZnRCdXR0b24gJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmF1
dG9zY3JvbGxSZW5kZXJlcigpICE9IHJlbmRlcmVyKCkpCisgICAgfSBlbHNlIGlmIChldnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkg
JiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1dHRvbigpID09IExlZnRCdXR0b24g
JiYgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmF1dG9zY3JvbGxSZW5kZXJl
cigpICE9IHJlbmRlcmVyKCkpCiAgICAgICAgIC8vIFRoaXMgbWFrZXMgc3VyZSB3ZSBmaXJlIG9u
Q2hhbmdlIGZvciBhIHNpbmdsZSBjbGljay4gIEZvciBkcmFnIHNlbGVjdGlvbiwgb25DaGFuZ2Ug
d2lsbCBmaXJlIHdoZW4gdGhlIGF1dG9zY3JvbGwgdGltZXIgc3RvcHMuCiAgICAgICAgIGxpc3RC
b3hPbkNoYW5nZSgpOwotICAgIGVsc2UgaWYgKGV2dC0+dHlwZSgpID09IGtleWRvd25FdmVudCkg
eworICAgIGVsc2UgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQp
IHsKICAgICAgICAgaWYgKCFldnQtPmlzS2V5Ym9hcmRFdmVudCgpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBTdHJpbmcga2V5SWRlbnRpZmllciA9IHN0YXRpY19jYXN0PEtleWJvYXJk
RXZlbnQqPihldnQpLT5rZXlJZGVudGlmaWVyKCk7CkBAIC04MTksNyArODE4LDcgQEAgdm9pZCBI
VE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveERlZmF1bHRFdgogICAgICAgICAgICAgbGlzdEJveE9u
Q2hhbmdlKCk7CiAgICAgICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKGV2dC0+dHlwZSgpID09IGtleXByZXNzRXZlbnQpIHsKKyAgICB9
IGVsc2UgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7CiAg
ICAgICAgIGlmICghZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgaW50IGtleUNvZGUgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0KS0+
a2V5Q29kZSgpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkocmV2aXNp
b24gMzgwNjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDcgKzQxLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2lu
ZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHN0
YXRpYyBjb25zdCBpbnQgZGVmYXVsdFJvd3MgPSAyOwpAQCAtMTY4LDEzICsxNjcsMTMgQEAgdm9p
ZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpwYXJzZU1hcHBlZEF0dAogICAgICAgICAvLyBEb24ndCBt
YXAgJ2FsaWduJyBhdHRyaWJ1dGUuICBUaGlzIG1hdGNoZXMgd2hhdCBGaXJlZm94LCBPcGVyYSBh
bmQgSUUgZG8uCiAgICAgICAgIC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MDc1CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25mb2N1c0F0dHIp
Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGZvY3Vz
RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0
dHJpYnV0ZShldmVudE5hbWVzKCkuZm9jdXNFdmVudCwgYXR0cik7CiAgICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG9uYmx1ckF0dHIpCi0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlQW5kQXR0cmlidXRlKGJsdXJFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQsIGF0
dHIpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnNlbGVjdEF0dHIpCi0gICAgICAg
IHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKHNlbGVjdEV2ZW50LCBh
dHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUo
ZXZlbnROYW1lcygpLnNlbGVjdEV2ZW50LCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gb25jaGFuZ2VBdHRyKQotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZUFuZEF0dHJpYnV0ZShjaGFuZ2VFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgYXR0
cik7CiAgICAgZWxzZQogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTIzMyw3ICsyMzIsNyBAQCB2b2lkIEhU
TUxUZXh0QXJlYUVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwCiAKIHZvaWQgSFRNTFRleHRBcmVhRWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKHJlbmRl
cmVyKCkgJiYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSB8fCBldmVudC0+aXNEcmFnRXZlbnQoKSB8
fCBldmVudC0+aXNXaGVlbEV2ZW50KCkgfHwgZXZlbnQtPnR5cGUoKSA9PSBibHVyRXZlbnQpKQor
ICAgIGlmIChyZW5kZXJlcigpICYmIChldmVudC0+aXNNb3VzZUV2ZW50KCkgfHwgZXZlbnQtPmlz
RHJhZ0V2ZW50KCkgfHwgZXZlbnQtPmlzV2hlZWxFdmVudCgpIHx8IGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmJsdXJFdmVudCkpCiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRleHRD
b250cm9sKj4ocmVuZGVyZXIoKSktPmZvcndhcmRFdmVudChldmVudCk7CiAKICAgICBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9odG1s
L0hUTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBAIHVzaW5n
IG5hbWVzcGFjZSBXVEY7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7Ci11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIAogI2lmIE1PQklMRQogLy8g
VGhlIG1vYmlsZSBkZXZpY2UgbmVlZHMgdG8gYmUgcmVzcG9uc2l2ZSwgYXMgc3VjaCB0aGUgdG9r
ZW5pemVyIGNodW5rIHNpemUgaXMgcmVkdWNlZC4KQEAgLTIwMDYsMTEgKzIwMDUsMTEgQEAgdm9p
ZCBIVE1MVG9rZW5pemVyOjpub3RpZnlGaW5pc2hlZChDYWNoZQogI2VuZGlmCiAKICAgICAgICAg
aWYgKGVycm9yT2NjdXJyZWQpCi0gICAgICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KG4uZ2V0
KCkpLT5kaXNwYXRjaEV2ZW50Rm9yVHlwZShlcnJvckV2ZW50LCB0cnVlLCBmYWxzZSk7CisgICAg
ICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KG4uZ2V0KCkpLT5kaXNwYXRjaEV2ZW50Rm9yVHlw
ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgdHJ1ZSwgZmFsc2UpOwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudCo+KG4uZ2V0KCkp
LT5zaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkpCiAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9
IHNjcmlwdEV4ZWN1dGlvbihzY3JpcHRTb3VyY2UsIG1fc3RhdGUsIGNhY2hlZFNjcmlwdFVybCk7
Ci0gICAgICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KG4uZ2V0KCkpLT5kaXNwYXRjaEV2ZW50
Rm9yVHlwZShsb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICBFdmVudFRhcmdl
dE5vZGVDYXN0KG4uZ2V0KCkpLT5kaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVzKCkubG9h
ZEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGhlIHN0YXRl
IG9mIHBlbmRpbmdTY3JpcHRzLmlzRW1wdHkoKSBjYW4gY2hhbmdlIGluc2lkZSB0aGUgc2NyaXB0
RXhlY3V0aW9uKCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDM4MDY0KQor
KysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIs
NyArMTEyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIFNWR05hbWVz
OwogI2VuZGlmCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotdXNpbmcgbmFtZXNwYWNlIEV2
ZW50TmFtZXM7CiAKICNpZiBVU0UoTE9XX0JBTkRXSURUSF9ESVNQTEFZKQogY29uc3QgdW5zaWdu
ZWQgaW50IGNNYXhQZW5kaW5nU291cmNlTGVuZ3RoSW5Mb3dCYW5kd2lkdGhEaXNwbGF5ID0gMTI4
ICogMTAyNDsKQEAgLTU5Miw3ICs1OTEsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wTG9hZGlu
Zyhib29sIHNlbmRVCiAgICAgICAgICAgICAgICAgTm9kZSogY3VycmVudEZvY3VzZWROb2RlID0g
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsKICAgICAgICAgICAgICAgICBpZiAo
Y3VycmVudEZvY3VzZWROb2RlKQogICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9jdXNlZE5v
ZGUtPmFib3V0VG9VbmxvYWQoKTsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgp
LT5kaXNwYXRjaFdpbmRvd0V2ZW50KHVubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpOworICAgICAg
ICAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQoZXZlbnRO
YW1lcygpLnVubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgIGlmICht
X2ZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT51cGRhdGVSZW5kZXJpbmcoKTsKICAgICAgICAgICAgICAgICBtX3dhc1VubG9hZEV2ZW50
RW1pdHRlZCA9IHRydWU7CkBAIC0xOTExLDcgKzE5MTAsNyBAQCBib29sIEZyYW1lTG9hZGVyOjpj
YW5DYWNoZVBhZ2UoKQogICAgICAgICAmJiAhbV9jb250YWluc1BsdWdJbnMKICAgICAgICAgJiYg
IW1fVVJMLnByb3RvY29sSXMoImh0dHBzIikKICAgICAgICAgJiYgbV9mcmFtZS0+ZG9jdW1lbnQo
KQotICAgICAgICAmJiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aGFzV2luZG93RXZlbnRMaXN0ZW5l
cih1bmxvYWRFdmVudCkKKyAgICAgICAgJiYgIW1fZnJhbWUtPmRvY3VtZW50KCktPmhhc1dpbmRv
d0V2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KQogI2lmIEVOQUJMRShEQVRB
QkFTRSkKICAgICAgICAgJiYgIW1fZnJhbWUtPmRvY3VtZW50KCktPmhhc09wZW5EYXRhYmFzZXMo
KQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2xvYWRlci9JbWFnZURvY3VtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9JbWFnZURvY3VtZW50LmNwcAkocmV2aXNpb24gMzgwNjQp
CisrKyBXZWJDb3JlL2xvYWRlci9JbWFnZURvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNyArNDcsNiBAQCB1c2luZyBzdGQ6Om1pbjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11
c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAK
IGNsYXNzIEltYWdlRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKQEAgLTMz
OSw5ICszMzgsOSBAQCBib29sIEltYWdlRG9jdW1lbnQ6OnNob3VsZFNocmlua1RvRml0KCkgCiAK
IHZvaWQgSW1hZ2VFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQsIGJvb2wg
aXNXaW5kb3dFdmVudCkKIHsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSByZXNpemVFdmVudCkK
KyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkucmVzaXplRXZlbnQpCiAgICAg
ICAgIG1fZG9jLT53aW5kb3dTaXplQ2hhbmdlZCgpOwotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBl
KCkgPT0gY2xpY2tFdmVudCkgeworICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLmNsaWNrRXZlbnQpIHsKICAgICAgICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHN0
YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7CiAgICAgICAgIG1fZG9jLT5pbWFnZUNsaWNr
ZWQobW91c2VFdmVudC0+eCgpLCBtb3VzZUV2ZW50LT55KCkpOwogICAgIH0KSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9J
bWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9sb2FkZXIvSW1hZ2VM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMyArMjcsMTAgQEAKICNpbmNsdWRlICJE
b2NMb2FkZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIK
LSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKLQogSW1hZ2VM
b2FkZXI6OkltYWdlTG9hZGVyKEVsZW1lbnQqIGVsdCkKICAgICA6IG1fZWxlbWVudChlbHQpCiAg
ICAgLCBtX2ltYWdlKDApCkluZGV4OiBXZWJDb3JlL2xvYWRlci9NZWRpYURvY3VtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9NZWRpYURvY3VtZW50LmNwcAkocmV2aXNpb24g
MzgwNjQpCisrKyBXZWJDb3JlL2xvYWRlci9NZWRpYURvY3VtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDcsNyArNDcsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVz
cGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogY2xhc3MgTWVk
aWFUb2tlbml6ZXIgOiBwdWJsaWMgVG9rZW5pemVyIHsKQEAgLTE1MSwxMiArMTUwLDEyIEBAIHZv
aWQgTWVkaWFEb2N1bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcigKICAgICBpZiAodGFyZ2V0Tm9k
ZSAmJiB0YXJnZXROb2RlLT5oYXNUYWdOYW1lKHZpZGVvVGFnKSkgewogICAgICAgICBIVE1MVmlk
ZW9FbGVtZW50KiB2aWRlbyA9IHN0YXRpY19jYXN0PEhUTUxWaWRlb0VsZW1lbnQqPih0YXJnZXRO
b2RlKTsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgaWYgKGV2ZW50LT50eXBl
KCkgPT0gY2xpY2tFdmVudCkgeworICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkuY2xpY2tFdmVudCkgewogICAgICAgICAgICAgaWYgKCF2aWRlby0+Y2FuUGxheSgpKSB7
CiAgICAgICAgICAgICAgICAgdmlkZW8tPnBhdXNlKGVjKTsKICAgICAgICAgICAgICAgICBldmVu
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlm
IChldmVudC0+dHlwZSgpID09IGRibGNsaWNrRXZlbnQpIHsKKyAgICAgICAgfSBlbHNlIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5kYmxjbGlja0V2ZW50KSB7CiAgICAgICAgICAg
ICBpZiAodmlkZW8tPmNhblBsYXkoKSkgewogICAgICAgICAgICAgICAgIHZpZGVvLT5wbGF5KGVj
KTsKICAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCShyZXZp
c2lvbiAzODA2NCkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2Fj
aGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCw2IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0KIERPTUFwcGxpY2F0aW9uQ2Fj
aGU6OkRPTUFwcGxpY2F0aW9uQ2FjaGUoRnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFt
ZSkKIHsKQEAgLTI1MCwzNyArMjQ4LDM3IEBAIHZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2Fs
bExpc3RlbmVyKGMKIAogdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsQ2hlY2tpbmdMaXN0
ZW5lcigpCiB7Ci0gICAgY2FsbExpc3RlbmVyKGNoZWNraW5nRXZlbnQsIG1fb25DaGVja2luZ0xp
c3RlbmVyLmdldCgpKTsKKyAgICBjYWxsTGlzdGVuZXIoZXZlbnROYW1lcygpLmNoZWNraW5nRXZl
bnQsIG1fb25DaGVja2luZ0xpc3RlbmVyLmdldCgpKTsKIH0KIAogdm9pZCBET01BcHBsaWNhdGlv
bkNhY2hlOjpjYWxsRXJyb3JMaXN0ZW5lcigpCiB7Ci0gICAgY2FsbExpc3RlbmVyKGVycm9yRXZl
bnQsIG1fb25FcnJvckxpc3RlbmVyLmdldCgpKTsKKyAgICBjYWxsTGlzdGVuZXIoZXZlbnROYW1l
cygpLmVycm9yRXZlbnQsIG1fb25FcnJvckxpc3RlbmVyLmdldCgpKTsKIH0KIAogdm9pZCBET01B
cHBsaWNhdGlvbkNhY2hlOjpjYWxsTm9VcGRhdGVMaXN0ZW5lcigpCiB7Ci0gICAgY2FsbExpc3Rl
bmVyKG5vdXBkYXRlRXZlbnQsIG1fb25Ob1VwZGF0ZUxpc3RlbmVyLmdldCgpKTsKKyAgICBjYWxs
TGlzdGVuZXIoZXZlbnROYW1lcygpLm5vdXBkYXRlRXZlbnQsIG1fb25Ob1VwZGF0ZUxpc3RlbmVy
LmdldCgpKTsKIH0KIAogdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsRG93bmxvYWRpbmdM
aXN0ZW5lcigpCiB7Ci0gICAgY2FsbExpc3RlbmVyKGRvd25sb2FkaW5nRXZlbnQsIG1fb25Eb3du
bG9hZGluZ0xpc3RlbmVyLmdldCgpKTsKKyAgICBjYWxsTGlzdGVuZXIoZXZlbnROYW1lcygpLmRv
d25sb2FkaW5nRXZlbnQsIG1fb25Eb3dubG9hZGluZ0xpc3RlbmVyLmdldCgpKTsKIH0KIAogdm9p
ZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsUHJvZ3Jlc3NMaXN0ZW5lcigpCiB7Ci0gICAgY2Fs
bExpc3RlbmVyKHByb2dyZXNzRXZlbnQsIG1fb25Qcm9ncmVzc0xpc3RlbmVyLmdldCgpKTsKKyAg
ICBjYWxsTGlzdGVuZXIoZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQsIG1fb25Qcm9ncmVzc0xp
c3RlbmVyLmdldCgpKTsKIH0KIAogdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsVXBkYXRl
UmVhZHlMaXN0ZW5lcigpCiB7Ci0gICAgY2FsbExpc3RlbmVyKHVwZGF0ZXJlYWR5RXZlbnQsIG1f
b25VcGRhdGVSZWFkeUxpc3RlbmVyLmdldCgpKTsKKyAgICBjYWxsTGlzdGVuZXIoZXZlbnROYW1l
cygpLnVwZGF0ZXJlYWR5RXZlbnQsIG1fb25VcGRhdGVSZWFkeUxpc3RlbmVyLmdldCgpKTsKIH0K
IAogdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsQ2FjaGVkTGlzdGVuZXIoKQogewotICAg
IGNhbGxMaXN0ZW5lcihjYWNoZWRFdmVudCwgbV9vbkNhY2hlZExpc3RlbmVyLmdldCgpKTsKKyAg
ICBjYWxsTGlzdGVuZXIoZXZlbnROYW1lcygpLmNhY2hlZEV2ZW50LCBtX29uQ2FjaGVkTGlzdGVu
ZXIuZ2V0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Bh
Z2UvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0Fj
Y2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcGFnZS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAog
I2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJBWE9iamVj
dENhY2hlLmgiCiAjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKLSNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTU3LDcgKzU2LDYgQEAgdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1l
czsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFj
Y2Vzc2liaWxpdHlPYmplY3QoKQpJbmRleDogV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL3BhZ2UvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDYgQEAgdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3Bh
Y2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikKQEAgLTUwNSw3ICs1MDQsNyBAQCBFbGVtZW50KiBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Ojptb3VzCiAgICAgCiAgICAgLy8gRklYTUU6IERvIHRoZSBjb250aW51YXRpb24gc2Vh
cmNoIGxpa2UgYW5jaG9yRWxlbWVudCBkb2VzCiAgICAgZm9yIChFdmVudFRhcmdldE5vZGUqIGVs
dCA9IHN0YXRpY19jYXN0PEV2ZW50VGFyZ2V0Tm9kZSo+KG5vZGUpOyBlbHQ7IGVsdCA9IHN0YXRp
Y19jYXN0PEV2ZW50VGFyZ2V0Tm9kZSo+KGVsdC0+cGFyZW50Tm9kZSgpKSkgewotICAgICAgICBp
ZiAoZWx0LT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShjbGlja0V2ZW50KSB8fCBlbHQtPmlu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNlZG93bkV2ZW50KSB8fCBlbHQtPmlubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNldXBFdmVudCkpCisgICAgICAgIGlmIChlbHQtPmlubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB8fCBlbHQtPmlu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgfHwg
ZWx0LT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2V1cEV2ZW50
KSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZWx0KTsKICAgICB9
CiAgICAgCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAkocmV2aXNp
b24gMzgwNjQpCisrKyBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTgsOCArNTgsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVz
aW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwotCiBDb250ZXh0TWVudUNvbnRyb2xsZXI6OkNvbnRl
eHRNZW51Q29udHJvbGxlcihQYWdlKiBwYWdlLCBDb250ZXh0TWVudUNsaWVudCogY2xpZW50KQog
ICAgIDogbV9wYWdlKHBhZ2UpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCkBAIC04MSw3ICs3OSw3
IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjbGVhckNvbnRleHQKIAogdm9pZCBDb250
ZXh0TWVudUNvbnRyb2xsZXI6OmhhbmRsZUNvbnRleHRNZW51RXZlbnQoRXZlbnQqIGV2ZW50KQog
ewotICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09IGNvbnRleHRtZW51RXZlbnQpOworICAgIEFT
U0VSVChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jb250ZXh0bWVudUV2ZW50KTsKICAg
ICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIE1vdXNl
RXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOwpJbmRl
eDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDggKzc4LDYgQEAgdXNpbmcgc3RkOjptYXg7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0KIGNs
YXNzIFBvc3RNZXNzYWdlVGltZXIgOiBwdWJsaWMgVGltZXJCYXNlIHsKIHB1YmxpYzoKICAgICBQ
b3N0TWVzc2FnZVRpbWVyKERPTVdpbmRvdyogd2luZG93LCBQYXNzUmVmUHRyPE1lc3NhZ2VFdmVu
dD4gZXZlbnQsIFNlY3VyaXR5T3JpZ2luKiB0YXJnZXRPcmlnaW4pCkBAIC05NDEsMjkyICs5Mzks
MjkyIEBAIGlubGluZSBFdmVudExpc3RlbmVyKiBET01XaW5kb3c6OmlubGluZUUKIAogRXZlbnRM
aXN0ZW5lciogRE9NV2luZG93OjpvbmFib3J0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoYWJvcnRFdmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KTsKIH0KIAogdm9pZCBET01X
aW5kb3c6OnNldE9uYWJvcnQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGFib3J0RXZlbnQsIGV2ZW50
TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5hYm9ydEV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2lu
ZG93OjpvbmJsdXIoKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9y
VHlwZShibHVyRXZlbnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShl
dmVudE5hbWVzKCkuYmx1ckV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9uYmx1cihQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoYmx1ckV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJ
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuYmx1ckV2ZW50LCBldmVudExp
c3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbmNoYW5nZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNoYW5nZUV2ZW50KTsK
KyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmNoYW5n
ZUV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9uY2hhbmdlKFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZShjaGFuZ2VFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCBldmVudExpc3RlbmVyKTsK
IH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbmNsaWNrKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoY2xpY2tFdmVudCk7CisgICAgcmV0dXJu
IGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KTsKIH0K
IAogdm9pZCBET01XaW5kb3c6OnNldE9uY2xpY2soUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBl
dmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNsaWNr
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBl
KGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0
ZW5lciogRE9NV2luZG93OjpvbmRibGNsaWNrKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZGJsY2xpY2tFdmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kYmxjbGlja0V2ZW50KTsKIH0KIAogdm9p
ZCBET01XaW5kb3c6OnNldE9uZGJsY2xpY2soUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVu
dExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGRibGNsaWNr
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBl
KGV2ZW50TmFtZXMoKS5kYmxjbGlja0V2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRM
aXN0ZW5lciogRE9NV2luZG93OjpvbmVycm9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXJyb3JFdmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50KTsKIH0KIAogdm9pZCBET01X
aW5kb3c6OnNldE9uZXJyb3IoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGVycm9yRXZlbnQsIGV2ZW50
TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5lcnJvckV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2lu
ZG93OjpvbmZvY3VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGUoZm9jdXNFdmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBl
KGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9uZm9j
dXMoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGZvY3VzRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAg
IHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50LCBl
dmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbmtleWRvd24o
KSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShrZXlkb3du
RXZlbnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVz
KCkua2V5ZG93bkV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ua2V5ZG93bihQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGUoa2V5ZG93bkV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJ
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50LCBldmVu
dExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbmtleXByZXNzKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoa2V5cHJlc3NF
dmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5rZXlwcmVzc0V2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ua2V5cHJlc3MoUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlKGtleXByZXNzRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50LCBl
dmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbmtleXVwKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoa2V5dXBFdmVu
dCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5r
ZXl1cEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ua2V5dXAoUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlKGtleXVwRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50LCBldmVudExpc3RlbmVyKTsK
IH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbmxvYWQoKSBjb25zdAogewotICAgIHJl
dHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShsb2FkRXZlbnQpOworICAgIHJldHVybiBp
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubG9hZEV2ZW50KTsKIH0KIAog
dm9pZCBET01XaW5kb3c6OnNldE9ubG9hZChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50
TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUobG9hZEV2ZW50
LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVu
dE5hbWVzKCkubG9hZEV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciog
RE9NV2luZG93Ojpvbm1vdXNlZG93bigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlKG1vdXNlZG93bkV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KTsKIH0KIAogdm9pZCBE
T01XaW5kb3c6OnNldE9ubW91c2Vkb3duKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRM
aXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShtb3VzZWRvd25F
dmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUo
ZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRM
aXN0ZW5lciogRE9NV2luZG93Ojpvbm1vdXNlbW92ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNlbW92ZUV2ZW50KTsKKyAgICByZXR1cm4gaW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KTsKIH0K
IAogdm9pZCBET01XaW5kb3c6OnNldE9ubW91c2Vtb3ZlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZSht
b3VzZW1vdmVFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0K
IAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93Ojpvbm1vdXNlb3V0KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUobW91c2VvdXRFdmVudCk7CisgICAgcmV0
dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50
KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ubW91c2VvdXQoUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JU
eXBlKG1vdXNlb3V0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50LCBldmVudExpc3RlbmVyKTsK
IH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93Ojpvbm1vdXNlb3ZlcigpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNlb3ZlckV2ZW50KTsKKyAg
ICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNlb3Zl
ckV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ubW91c2VvdmVyKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZShtb3VzZW92ZXJFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50LCBldmVudExp
c3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93Ojpvbm1vdXNldXAoKSBjb25z
dAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShtb3VzZXVwRXZlbnQp
OworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91
c2V1cEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ubW91c2V1cChQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGUobW91c2V1cEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2V1cEV2ZW50LCBldmVudExpc3Rl
bmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93Ojpvbm1vdXNld2hlZWwoKSBjb25z
dAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShtb3VzZXdoZWVsRXZl
bnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCku
bW91c2V3aGVlbEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ubW91c2V3aGVlbChQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUobW91c2V3aGVlbEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAg
ICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2V3aGVlbEV2
ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbnJl
c2V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUocmVz
ZXRFdmVudCk7CisgICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFt
ZXMoKS5yZXNldEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ucmVzZXQoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlKHJlc2V0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5yZXNldEV2ZW50LCBldmVudExpc3Rl
bmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbnJlc2l6ZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHJlc2l6ZUV2ZW50KTsKKyAg
ICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnJlc2l6ZUV2
ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ucmVzaXplKFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9y
VHlwZShyZXNpemVFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0K
IAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbnNjcm9sbCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHNjcm9sbEV2ZW50KTsKKyAgICByZXR1cm4g
aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50KTsKIH0K
IAogdm9pZCBET01XaW5kb3c6OnNldE9uc2Nyb2xsKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
ZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShzY3Jv
bGxFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5
cGUoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRM
aXN0ZW5lciogRE9NV2luZG93OjpvbnNlYXJjaCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHNlYXJjaEV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnNlYXJjaEV2ZW50KTsKIH0KIAogdm9pZCBE
T01XaW5kb3c6OnNldE9uc2VhcmNoKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0
ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShzZWFyY2hFdmVudCwg
ZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRO
YW1lcygpLnNlYXJjaEV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciog
RE9NV2luZG93OjpvbnNlbGVjdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlKHNlbGVjdEV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGUoZXZlbnROYW1lcygpLnNlbGVjdEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6
OnNldE9uc2VsZWN0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsK
LSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShzZWxlY3RFdmVudCwgZXZlbnRMaXN0
ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnNl
bGVjdEV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93
OjpvbnN1Ym1pdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JU
eXBlKHN1Ym1pdEV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUo
ZXZlbnROYW1lcygpLnN1Ym1pdEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9uc3Vi
bWl0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJ
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShzdWJtaXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7Cisg
ICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnN1Ym1pdEV2ZW50
LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbnVubG9h
ZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHVubG9h
ZEV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1l
cygpLnVubG9hZEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9udW5sb2FkKFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZSh1bmxvYWRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50LCBldmVudExp
c3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbmJlZm9yZXVubG9hZCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGJlZm9yZXVu
bG9hZEV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRO
YW1lcygpLmJlZm9yZXVubG9hZEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9uYmVm
b3JldW5sb2FkKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAg
ICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShiZWZvcmV1bmxvYWRFdmVudCwgZXZlbnRM
aXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygp
LmJlZm9yZXVubG9hZEV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciog
RE9NV2luZG93OjpvbndlYmtpdGFuaW1hdGlvbnN0YXJ0KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUod2Via2l0QW5pbWF0aW9uU3RhcnRFdmVudCk7Cisg
ICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS53ZWJraXRB
bmltYXRpb25TdGFydEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ud2Via2l0YW5p
bWF0aW9uc3RhcnQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewot
ICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHdlYmtpdEFuaW1hdGlvblN0YXJ0RXZl
bnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2
ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25TdGFydEV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0K
IAogRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbndlYmtpdGFuaW1hdGlvbml0ZXJhdGlvbigp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHdlYmtpdEFu
aW1hdGlvbkl0ZXJhdGlvbkV2ZW50KTsKKyAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGUoZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2ZW50KTsKIH0KIAog
dm9pZCBET01XaW5kb3c6OnNldE9ud2Via2l0YW5pbWF0aW9uaXRlcmF0aW9uKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZSh3ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVudCwgZXZlbnRMaXN0ZW5lcik7
CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLndlYmtpdEFu
aW1hdGlvbkl0ZXJhdGlvbkV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5l
ciogRE9NV2luZG93OjpvbndlYmtpdGFuaW1hdGlvbmVuZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHdlYmtpdEFuaW1hdGlvbkVuZEV2ZW50KTsKKyAg
ICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLndlYmtpdEFu
aW1hdGlvbkVuZEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ud2Via2l0YW5pbWF0
aW9uZW5kKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBz
ZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZSh3ZWJraXRBbmltYXRpb25FbmRFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1l
cygpLndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRM
aXN0ZW5lciogRE9NV2luZG93OjpvbndlYmtpdHRyYW5zaXRpb25lbmQoKSBjb25zdAogewotICAg
IHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZSh3ZWJraXRUcmFuc2l0aW9uRW5kRXZl
bnQpOworICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCku
d2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNldE9ud2Vi
a2l0dHJhbnNpdGlvbmVuZChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIp
CiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUod2Via2l0VHJhbnNpdGlvbkVu
ZEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZShldmVudE5hbWVzKCkud2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50LCBldmVudExpc3RlbmVyKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJl
dmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDcgKzczLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBu
YW1lc3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIC8vIFRo
ZSBsaW5rIGRyYWcgaHlzdGVyZXNpcyBpcyBtdWNoIGxhcmdlciB0aGFuIHRoZSBvdGhlcnMgYmVj
YXVzZSB0aGVyZQpAQCAtMTA2Niw3ICsxMDY1LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRs
ZU1vdXNlUHJlc3NFdmVudAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29s
IHN3YWxsb3dFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChtb3VzZWRvd25FdmVudCwgbWV2LnRh
cmdldE5vZGUoKSwgdHJ1ZSwgbV9jbGlja0NvdW50LCBtb3VzZUV2ZW50LCB0cnVlKTsKKyAgICBi
b29sIHN3YWxsb3dFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkubW91c2Vk
b3duRXZlbnQsIG1ldi50YXJnZXROb2RlKCksIHRydWUsIG1fY2xpY2tDb3VudCwgbW91c2VFdmVu
dCwgdHJ1ZSk7CiAKICAgICAvLyBJZiB0aGUgaGl0IHRlc3Rpbmcgb3JpZ2luYWxseSBkZXRlcm1p
bmVkIHRoZSBldmVudCB3YXMgaW4gYSBzY3JvbGxiYXIsIHJlZmV0Y2ggdGhlIE1vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMKICAgICAvLyBpbiBjYXNlIHRoZSBzY3JvbGxiYXIgd2lkZ2V0IHdh
cyBkZXN0cm95ZWQgd2hlbiB0aGUgbW91c2UgZXZlbnQgd2FzIGhhbmRsZWQuCkBAIC0xMTIyLDEy
ICsxMTIxLDEyIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZURvdWJsZUNsaWMKICAg
ICB9CiAKICAgICBtX2NsaWNrQ291bnQgPSBtb3VzZUV2ZW50LmNsaWNrQ291bnQoKTsKLSAgICBi
b29sIHN3YWxsb3dNb3VzZVVwRXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQobW91c2V1cEV2ZW50
LCBtZXYudGFyZ2V0Tm9kZSgpLCB0cnVlLCBtX2NsaWNrQ291bnQsIG1vdXNlRXZlbnQsIGZhbHNl
KTsKKyAgICBib29sIHN3YWxsb3dNb3VzZVVwRXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQoZXZl
bnROYW1lcygpLm1vdXNldXBFdmVudCwgbWV2LnRhcmdldE5vZGUoKSwgdHJ1ZSwgbV9jbGlja0Nv
dW50LCBtb3VzZUV2ZW50LCBmYWxzZSk7CiAKICAgICBib29sIHN3YWxsb3dDbGlja0V2ZW50ID0g
ZmFsc2U7CiAgICAgLy8gRG9uJ3QgZXZlciBkaXNwYXRjaCBjbGljayBldmVudHMgZm9yIHJpZ2h0
IGNsaWNrcwogICAgIGlmIChtb3VzZUV2ZW50LmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uICYmIG1l
di50YXJnZXROb2RlKCkgPT0gbV9jbGlja05vZGUpCi0gICAgICAgIHN3YWxsb3dDbGlja0V2ZW50
ID0gZGlzcGF0Y2hNb3VzZUV2ZW50KGNsaWNrRXZlbnQsIG1ldi50YXJnZXROb2RlKCksIHRydWUs
IG1fY2xpY2tDb3VudCwgbW91c2VFdmVudCwgdHJ1ZSk7CisgICAgICAgIHN3YWxsb3dDbGlja0V2
ZW50ID0gZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBtZXYudGFy
Z2V0Tm9kZSgpLCB0cnVlLCBtX2NsaWNrQ291bnQsIG1vdXNlRXZlbnQsIHRydWUpOwogCiAgICAg
aWYgKG1fbGFzdFNjcm9sbGJhclVuZGVyTW91c2UpCiAgICAgICAgIHN3YWxsb3dNb3VzZVVwRXZl
bnQgPSBtX2xhc3RTY3JvbGxiYXJVbmRlck1vdXNlLT5tb3VzZVVwKCk7CkBAIC0xMTgwLDcgKzEx
NzksNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQoCiAjZW5kaWYK
IAogICAgIGlmIChtX2ZyYW1lU2V0QmVpbmdSZXNpemVkKQotICAgICAgICByZXR1cm4gZGlzcGF0
Y2hNb3VzZUV2ZW50KG1vdXNlbW92ZUV2ZW50LCBtX2ZyYW1lU2V0QmVpbmdSZXNpemVkLmdldCgp
LCBmYWxzZSwgMCwgbW91c2VFdmVudCwgZmFsc2UpOworICAgICAgICByZXR1cm4gZGlzcGF0Y2hN
b3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCwgbV9mcmFtZVNldEJlaW5nUmVz
aXplZC5nZXQoKSwgZmFsc2UsIDAsIG1vdXNlRXZlbnQsIGZhbHNlKTsKIAogICAgIC8vIFNlbmQg
ZXZlbnRzIHJpZ2h0IHRvIGEgc2Nyb2xsYmFyIGlmIHRoZSBtb3VzZSBpcyBwcmVzc2VkLgogICAg
IGlmIChtX2xhc3RTY3JvbGxiYXJVbmRlck1vdXNlICYmIG1fbW91c2VQcmVzc2VkKQpAQCAtMTI0
MSw3ICsxMjQwLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KAog
ICAgIGlmIChzd2FsbG93RXZlbnQpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIHN3
YWxsb3dFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChtb3VzZW1vdmVFdmVudCwgbWV2LnRhcmdl
dE5vZGUoKSwgZmFsc2UsIDAsIG1vdXNlRXZlbnQsIHRydWUpOworICAgIHN3YWxsb3dFdmVudCA9
IGRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQsIG1ldi50YXJn
ZXROb2RlKCksIGZhbHNlLCAwLCBtb3VzZUV2ZW50LCB0cnVlKTsKICAgICBpZiAoIXN3YWxsb3dF
dmVudCkKICAgICAgICAgc3dhbGxvd0V2ZW50ID0gaGFuZGxlTW91c2VEcmFnZ2VkRXZlbnQobWV2
KTsKIApAQCAtMTI3Myw3ICsxMjcyLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNl
UmVsZWFzZUV2ZQogI2VuZGlmCiAKICAgICBpZiAobV9mcmFtZVNldEJlaW5nUmVzaXplZCkKLSAg
ICAgICAgcmV0dXJuIGRpc3BhdGNoTW91c2VFdmVudChtb3VzZXVwRXZlbnQsIG1fZnJhbWVTZXRC
ZWluZ1Jlc2l6ZWQuZ2V0KCksIHRydWUsIG1fY2xpY2tDb3VudCwgbW91c2VFdmVudCwgZmFsc2Up
OworICAgICAgICByZXR1cm4gZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5tb3VzZXVw
RXZlbnQsIG1fZnJhbWVTZXRCZWluZ1Jlc2l6ZWQuZ2V0KCksIHRydWUsIG1fY2xpY2tDb3VudCwg
bW91c2VFdmVudCwgZmFsc2UpOwogCiAgICAgaWYgKG1fbGFzdFNjcm9sbGJhclVuZGVyTW91c2Up
IHsKICAgICAgICAgaW52YWxpZGF0ZUNsaWNrKCk7CkBAIC0xMjg3LDEyICsxMjg2LDEyIEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmUKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCi0gICAgYm9vbCBzd2FsbG93TW91c2VVcEV2ZW50ID0gZGlzcGF0Y2hNb3Vz
ZUV2ZW50KG1vdXNldXBFdmVudCwgbWV2LnRhcmdldE5vZGUoKSwgdHJ1ZSwgbV9jbGlja0NvdW50
LCBtb3VzZUV2ZW50LCBmYWxzZSk7CisgICAgYm9vbCBzd2FsbG93TW91c2VVcEV2ZW50ID0gZGlz
cGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQsIG1ldi50YXJnZXROb2Rl
KCksIHRydWUsIG1fY2xpY2tDb3VudCwgbW91c2VFdmVudCwgZmFsc2UpOwogCiAgICAgLy8gRG9u
J3QgZXZlciBkaXNwYXRjaCBjbGljayBldmVudHMgZm9yIHJpZ2h0IGNsaWNrcwogICAgIGJvb2wg
c3dhbGxvd0NsaWNrRXZlbnQgPSBmYWxzZTsKICAgICBpZiAobV9jbGlja0NvdW50ID4gMCAmJiBt
b3VzZUV2ZW50LmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uICYmIG1ldi50YXJnZXROb2RlKCkgPT0g
bV9jbGlja05vZGUpCi0gICAgICAgIHN3YWxsb3dDbGlja0V2ZW50ID0gZGlzcGF0Y2hNb3VzZUV2
ZW50KGNsaWNrRXZlbnQsIG1ldi50YXJnZXROb2RlKCksIHRydWUsIG1fY2xpY2tDb3VudCwgbW91
c2VFdmVudCwgdHJ1ZSk7CisgICAgICAgIHN3YWxsb3dDbGlja0V2ZW50ID0gZGlzcGF0Y2hNb3Vz
ZUV2ZW50KGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBtZXYudGFyZ2V0Tm9kZSgpLCB0cnVlLCBt
X2NsaWNrQ291bnQsIG1vdXNlRXZlbnQsIHRydWUpOwogCiAgICAgaWYgKG1fcmVzaXplTGF5ZXIp
IHsKICAgICAgICAgbV9yZXNpemVMYXllci0+c2V0SW5SZXNpemVNb2RlKGZhbHNlKTsKQEAgLTEz
NTAsNyArMTM0OSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChjb24K
ICAgICAgICAgICAgIGlmIChuZXdUYXJnZXQtPmhhc1RhZ05hbWUoZnJhbWVUYWcpIHx8IG5ld1Rh
cmdldC0+aGFzVGFnTmFtZShpZnJhbWVUYWcpKQogICAgICAgICAgICAgICAgIGFjY2VwdCA9IHN0
YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNlKj4obmV3VGFyZ2V0KS0+Y29udGVudEZyYW1l
KCktPmV2ZW50SGFuZGxlcigpLT51cGRhdGVEcmFnQW5kRHJvcChldmVudCwgY2xpcGJvYXJkKTsK
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhY2NlcHQgPSBkaXNwYXRjaERyYWdF
dmVudChkcmFnZW50ZXJFdmVudCwgbmV3VGFyZ2V0LCBldmVudCwgY2xpcGJvYXJkKTsKKyAgICAg
ICAgICAgICAgICBhY2NlcHQgPSBkaXNwYXRjaERyYWdFdmVudChldmVudE5hbWVzKCkuZHJhZ2Vu
dGVyRXZlbnQsIG5ld1RhcmdldCwgZXZlbnQsIGNsaXBib2FyZCk7CiAgICAgICAgIAogICAgICAg
ICBpZiAobV9kcmFnVGFyZ2V0KSB7CiAgICAgICAgICAgICBGcmFtZSogZnJhbWUgPSAobV9kcmFn
VGFyZ2V0LT5oYXNUYWdOYW1lKGZyYW1lVGFnKSB8fCBtX2RyYWdUYXJnZXQtPmhhc1RhZ05hbWUo
aWZyYW1lVGFnKSkgCkBAIC0xMzU4LDE0ICsxMzU3LDE0IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1
cGRhdGVEcmFnQW5kRHJvcChjb24KICAgICAgICAgICAgIGlmIChmcmFtZSkKICAgICAgICAgICAg
ICAgICBhY2NlcHQgPSBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnVwZGF0ZURyYWdBbmREcm9wKGV2
ZW50LCBjbGlwYm9hcmQpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRpc3Bh
dGNoRHJhZ0V2ZW50KGRyYWdsZWF2ZUV2ZW50LCBtX2RyYWdUYXJnZXQuZ2V0KCksIGV2ZW50LCBj
bGlwYm9hcmQpOworICAgICAgICAgICAgICAgIGRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50TmFtZXMo
KS5kcmFnbGVhdmVFdmVudCwgbV9kcmFnVGFyZ2V0LmdldCgpLCBldmVudCwgY2xpcGJvYXJkKTsK
ICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChuZXdUYXJnZXQpCiAgICAgICAg
ICAgICBpZiAobmV3VGFyZ2V0LT5oYXNUYWdOYW1lKGZyYW1lVGFnKSB8fCBuZXdUYXJnZXQtPmhh
c1RhZ05hbWUoaWZyYW1lVGFnKSkKICAgICAgICAgICAgICAgICBhY2NlcHQgPSBzdGF0aWNfY2Fz
dDxIVE1MRnJhbWVFbGVtZW50QmFzZSo+KG5ld1RhcmdldCktPmNvbnRlbnRGcmFtZSgpLT5ldmVu
dEhhbmRsZXIoKS0+dXBkYXRlRHJhZ0FuZERyb3AoZXZlbnQsIGNsaXBib2FyZCk7CiAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYWNjZXB0ID0gZGlzcGF0Y2hEcmFnRXZlbnQoZHJh
Z292ZXJFdmVudCwgbmV3VGFyZ2V0LCBldmVudCwgY2xpcGJvYXJkKTsKKyAgICAgICAgICAgICAg
ICBhY2NlcHQgPSBkaXNwYXRjaERyYWdFdmVudChldmVudE5hbWVzKCkuZHJhZ292ZXJFdmVudCwg
bmV3VGFyZ2V0LCBldmVudCwgY2xpcGJvYXJkKTsKICAgICB9CiAgICAgbV9kcmFnVGFyZ2V0ID0g
bmV3VGFyZ2V0OwogCkBAIC0xMzgwLDcgKzEzNzksNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6Y2Fu
Y2VsRHJhZ0FuZERyb3AoY29uCiAgICAgICAgIGlmIChmcmFtZSkKICAgICAgICAgICAgIGZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+Y2FuY2VsRHJhZ0FuZERyb3AoZXZlbnQsIGNsaXBib2FyZCk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRpc3BhdGNoRHJhZ0V2ZW50KGRyYWdsZWF2ZUV2ZW50
LCBtX2RyYWdUYXJnZXQuZ2V0KCksIGV2ZW50LCBjbGlwYm9hcmQpOworICAgICAgICAgICAgZGlz
cGF0Y2hEcmFnRXZlbnQoZXZlbnROYW1lcygpLmRyYWdsZWF2ZUV2ZW50LCBtX2RyYWdUYXJnZXQu
Z2V0KCksIGV2ZW50LCBjbGlwYm9hcmQpOwogICAgIH0KICAgICBjbGVhckRyYWdTdGF0ZSgpOwog
fQpAQCAtMTM5NCw3ICsxMzkzLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBlcmZvcm1EcmFnQW5k
RHJvcChjbwogICAgICAgICBpZiAoZnJhbWUpCiAgICAgICAgICAgICBhY2NlcHQgPSBmcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPnBlcmZvcm1EcmFnQW5kRHJvcChldmVudCwgY2xpcGJvYXJkKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgYWNjZXB0ID0gZGlzcGF0Y2hEcmFnRXZlbnQoZHJvcEV2
ZW50LCBtX2RyYWdUYXJnZXQuZ2V0KCksIGV2ZW50LCBjbGlwYm9hcmQpOworICAgICAgICAgICAg
YWNjZXB0ID0gZGlzcGF0Y2hEcmFnRXZlbnQoZXZlbnROYW1lcygpLmRyb3BFdmVudCwgbV9kcmFn
VGFyZ2V0LmdldCgpLCBldmVudCwgY2xpcGJvYXJkKTsKICAgICB9CiAgICAgY2xlYXJEcmFnU3Rh
dGUoKTsKICAgICByZXR1cm4gYWNjZXB0OwpAQCAtMTUwNSwxMCArMTUwNCwxMCBAQCB2b2lkIEV2
ZW50SGFuZGxlcjo6dXBkYXRlTW91c2VFdmVudFRhcmdlCiAgICAgICAgIGlmIChtX2xhc3ROb2Rl
VW5kZXJNb3VzZSAhPSBtX25vZGVVbmRlck1vdXNlKSB7CiAgICAgICAgICAgICAvLyBzZW5kIG1v
dXNlb3V0IGV2ZW50IHRvIHRoZSBvbGQgbm9kZQogICAgICAgICAgICAgaWYgKG1fbGFzdE5vZGVV
bmRlck1vdXNlKQotICAgICAgICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QobV9sYXN0Tm9k
ZVVuZGVyTW91c2UuZ2V0KCkpLT5kaXNwYXRjaE1vdXNlRXZlbnQobW91c2VFdmVudCwgbW91c2Vv
dXRFdmVudCwgMCwgbV9ub2RlVW5kZXJNb3VzZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgRXZl
bnRUYXJnZXROb2RlQ2FzdChtX2xhc3ROb2RlVW5kZXJNb3VzZS5nZXQoKSktPmRpc3BhdGNoTW91
c2VFdmVudChtb3VzZUV2ZW50LCBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCwgMCwgbV9ub2Rl
VW5kZXJNb3VzZS5nZXQoKSk7CiAgICAgICAgICAgICAvLyBzZW5kIG1vdXNlb3ZlciBldmVudCB0
byB0aGUgbmV3IG5vZGUKICAgICAgICAgICAgIGlmIChtX25vZGVVbmRlck1vdXNlKQotICAgICAg
ICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QobV9ub2RlVW5kZXJNb3VzZS5nZXQoKSktPmRp
c3BhdGNoTW91c2VFdmVudChtb3VzZUV2ZW50LCBtb3VzZW92ZXJFdmVudCwgMCwgbV9sYXN0Tm9k
ZVVuZGVyTW91c2UuZ2V0KCkpOworICAgICAgICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3Qo
bV9ub2RlVW5kZXJNb3VzZS5nZXQoKSktPmRpc3BhdGNoTW91c2VFdmVudChtb3VzZUV2ZW50LCBl
dmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQsIDAsIG1fbGFzdE5vZGVVbmRlck1vdXNlLmdldCgp
KTsKICAgICAgICAgfQogICAgICAgICBtX2xhc3ROb2RlVW5kZXJNb3VzZSA9IG1fbm9kZVVuZGVy
TW91c2U7CiAjaWYgRU5BQkxFKFNWRykKQEAgLTE1MjYsNyArMTUyNSw3IEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjpkaXNwYXRjaE1vdXNlRXZlbnQoY28KICAgICBpZiAobV9ub2RlVW5kZXJNb3VzZSkK
ICAgICAgICAgc3dhbGxvd0V2ZW50ID0gRXZlbnRUYXJnZXROb2RlQ2FzdChtX25vZGVVbmRlck1v
dXNlLmdldCgpKS0+ZGlzcGF0Y2hNb3VzZUV2ZW50KG1vdXNlRXZlbnQsIGV2ZW50VHlwZSwgY2xp
Y2tDb3VudCk7CiAgICAgCi0gICAgaWYgKCFzd2FsbG93RXZlbnQgJiYgZXZlbnRUeXBlID09IG1v
dXNlZG93bkV2ZW50KSB7CisgICAgaWYgKCFzd2FsbG93RXZlbnQgJiYgZXZlbnRUeXBlID09IGV2
ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgewogICAgICAgICAvLyBCbHVyIGN1cnJlbnQgZm9j
dXMgbm9kZSB3aGVuIGEgbGluay9idXR0b24gaXMgY2xpY2tlZDsgdGhpcwogICAgICAgICAvLyBp
cyBleHBlY3RlZCBieSBzb21lIHNpdGVzIHRoYXQgcmVseSBvbiBvbkNoYW5nZSBoYW5kbGVycyBy
dW5uaW5nCiAgICAgICAgIC8vIGZyb20gZm9ybSBmaWVsZHMgYmVmb3JlIHRoZSBidXR0b24gY2xp
Y2sgaXMgcHJvY2Vzc2VkLgpAQCAtMTY0MCw3ICsxNjM5LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6
OnNlbmRDb250ZXh0TWVudUV2ZW50KAogICAgIH0KICNlbmRpZgogCi0gICAgc3dhbGxvd0V2ZW50
ID0gZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnRleHRtZW51RXZlbnQsIG1ldi50YXJnZXROb2RlKCks
IHRydWUsIDAsIGV2ZW50LCB0cnVlKTsKKyAgICBzd2FsbG93RXZlbnQgPSBkaXNwYXRjaE1vdXNl
RXZlbnQoZXZlbnROYW1lcygpLmNvbnRleHRtZW51RXZlbnQsIG1ldi50YXJnZXROb2RlKCksIHRy
dWUsIDAsIGV2ZW50LCB0cnVlKTsKICAgICAKICAgICByZXR1cm4gc3dhbGxvd0V2ZW50OwogfQpA
QCAtMTY2Myw3ICsxNjYyLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmNhbk1vdXNlRG93blN0YXJ0
U2VsZQogICAgICAgICAgICAgCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBub2RlLT5y
ZW5kZXJlcigpOyBjdXJyOyBjdXJyID0gY3Vyci0+cGFyZW50KCkpICAgIAogICAgICAgICBpZiAo
Tm9kZSogbm9kZSA9IGN1cnItPmVsZW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBFdmVudFRh
cmdldE5vZGVDYXN0KG5vZGUpLT5kaXNwYXRjaEV2ZW50Rm9yVHlwZShzZWxlY3RzdGFydEV2ZW50
LCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiBFdmVudFRhcmdldE5vZGVDYXN0KG5v
ZGUpLT5kaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVzKCkuc2VsZWN0c3RhcnRFdmVudCwg
dHJ1ZSwgdHJ1ZSk7CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNjc1LDcgKzE2NzQs
NyBAQCBib29sIEV2ZW50SGFuZGxlcjo6Y2FuTW91c2VEcmFnRXh0ZW5kU2VsCiAgICAgICAgICAg
ICAKICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IG5vZGUtPnJlbmRlcmVyKCk7IGN1cnI7
IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkgICAgCiAgICAgICAgIGlmIChOb2RlKiBub2RlID0gY3Vy
ci0+ZWxlbWVudCgpKQotICAgICAgICAgICAgcmV0dXJuIEV2ZW50VGFyZ2V0Tm9kZUNhc3Qobm9k
ZSktPmRpc3BhdGNoRXZlbnRGb3JUeXBlKHNlbGVjdHN0YXJ0RXZlbnQsIHRydWUsIHRydWUpOwor
ICAgICAgICAgICAgcmV0dXJuIEV2ZW50VGFyZ2V0Tm9kZUNhc3Qobm9kZSktPmRpc3BhdGNoRXZl
bnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5zZWxlY3RzdGFydEV2ZW50LCB0cnVlLCB0cnVlKTsKICAg
ICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE4NjYsNyArMTg2NSw3IEBAIHZvaWQgRXZlbnRI
YW5kbGVyOjpoYW5kbGVLZXlib2FyZFNlbGVjdGkKICAgICAKIHZvaWQgRXZlbnRIYW5kbGVyOjpk
ZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0gICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBrZXlkb3duRXZlbnQpIHsKKyAgIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKICAgICAgICAgbV9mcmFtZS0+ZWRpdG9y
KCktPmhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQpOwogICAgICAgICBpZiAoZXZlbnQtPmRlZmF1
bHRIYW5kbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xODc3LDcgKzE4NzYsNyBAQCB2
b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdEtleWJvYXJkRXZlbnRICiAgICAgICAgaWYgKEFYT2Jq
ZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkKCkpCiAg
ICAgICAgICAgIGhhbmRsZUtleWJvYXJkU2VsZWN0aW9uTW92ZW1lbnQoZXZlbnQpOyAgICAgICAK
ICAgIH0KLSAgIGlmIChldmVudC0+dHlwZSgpID09IGtleXByZXNzRXZlbnQpIHsKKyAgIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7CiAgICAgICAgIG1f
ZnJhbWUtPmVkaXRvcigpLT5oYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50KTsKICAgICAgICAgaWYg
KGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTkyNCw3
ICsxOTIzLDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRyYWdTb3VyY2VNb3ZlZFRvKGNvbgogewog
ICAgIGlmIChkcmFnU3RhdGUoKS5tX2RyYWdTcmMgJiYgZHJhZ1N0YXRlKCkubV9kcmFnU3JjTWF5
QmVESFRNTCkKICAgICAgICAgLy8gZm9yIG5vdyB3ZSBkb24ndCBjYXJlIGlmIGV2ZW50IGhhbmRs
ZXIgY2FuY2VscyBkZWZhdWx0IGJlaGF2aW9yLCBzaW5jZSB0aGVyZSBpcyBub25lCi0gICAgICAg
IGRpc3BhdGNoRHJhZ1NyY0V2ZW50KGRyYWdFdmVudCwgZXZlbnQpOworICAgICAgICBkaXNwYXRj
aERyYWdTcmNFdmVudChldmVudE5hbWVzKCkuZHJhZ0V2ZW50LCBldmVudCk7CiB9CiAgICAgCiB2
b2lkIEV2ZW50SGFuZGxlcjo6ZHJhZ1NvdXJjZUVuZGVkQXQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JiBldmVudCwgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24pCkBAIC0xOTMyLDcgKzE5MzEsNyBA
QCB2b2lkIEV2ZW50SGFuZGxlcjo6ZHJhZ1NvdXJjZUVuZGVkQXQoY29uCiAgICAgaWYgKGRyYWdT
dGF0ZSgpLm1fZHJhZ1NyYyAmJiBkcmFnU3RhdGUoKS5tX2RyYWdTcmNNYXlCZURIVE1MKSB7CiAg
ICAgICAgIGRyYWdTdGF0ZSgpLm1fZHJhZ0NsaXBib2FyZC0+c2V0RGVzdGluYXRpb25PcGVyYXRp
b24ob3BlcmF0aW9uKTsKICAgICAgICAgLy8gZm9yIG5vdyB3ZSBkb24ndCBjYXJlIGlmIGV2ZW50
IGhhbmRsZXIgY2FuY2VscyBkZWZhdWx0IGJlaGF2aW9yLCBzaW5jZSB0aGVyZSBpcyBub25lCi0g
ICAgICAgIGRpc3BhdGNoRHJhZ1NyY0V2ZW50KGRyYWdlbmRFdmVudCwgZXZlbnQpOworICAgICAg
ICBkaXNwYXRjaERyYWdTcmNFdmVudChldmVudE5hbWVzKCkuZHJhZ2VuZEV2ZW50LCBldmVudCk7
CiAgICAgfQogICAgIGZyZWVDbGlwYm9hcmQoKTsKICAgICBkcmFnU3RhdGUoKS5tX2RyYWdTcmMg
PSAwOwpAQCAtMjAzNyw3ICsyMDM2LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZURyYWco
Y29uc3QgTW91cwogICAgICAgICAgICAgfQogICAgICAgICB9IAogICAgICAgICAKLSAgICAgICAg
bV9tb3VzZURvd25NYXlTdGFydERyYWcgPSBkaXNwYXRjaERyYWdTcmNFdmVudChkcmFnc3RhcnRF
dmVudCwgbV9tb3VzZURvd24pCisgICAgICAgIG1fbW91c2VEb3duTWF5U3RhcnREcmFnID0gZGlz
cGF0Y2hEcmFnU3JjRXZlbnQoZXZlbnROYW1lcygpLmRyYWdzdGFydEV2ZW50LCBtX21vdXNlRG93
bikKICAgICAgICAgICAgICYmICFtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNJblBhc3N3b3JkRmll
bGQoKTsKICAgICAgICAgCiAgICAgICAgIC8vIEludmFsaWRhdGUgY2xpcGJvYXJkIGhlcmUgYWdh
aW5zdCBhbnltb3JlIHBhc3RlYm9hcmQgd3JpdGluZyBmb3Igc2VjdXJpdHkuICBUaGUgZHJhZwpA
QCAtMjA2MCw3ICsyMDU5LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZURyYWcoY29uc3Qg
TW91cwogICAgICAgICBib29sIHN0YXJ0ZWREcmFnID0gZHJhZ0NvbnRyb2xsZXIgJiYgZHJhZ0Nv
bnRyb2xsZXItPnN0YXJ0RHJhZyhtX2ZyYW1lLCBkcmFnU3RhdGUoKS5tX2RyYWdDbGlwYm9hcmQu
Z2V0KCksIHNyY09wLCBldmVudC5ldmVudCgpLCBtX21vdXNlRG93blBvcywgZHJhZ1N0YXRlKCku
bV9kcmFnU3JjSXNESFRNTCk7CiAgICAgICAgIGlmICghc3RhcnRlZERyYWcgJiYgZHJhZ1N0YXRl
KCkubV9kcmFnU3JjTWF5QmVESFRNTCkgewogICAgICAgICAgICAgLy8gRHJhZyB3YXMgY2FubmVk
IGF0IHRoZSBsYXN0IG1pbnV0ZSAtIHdlIG93ZSBtX2RyYWdTcmMgYSBEUkFHRU5EIGV2ZW50Ci0g
ICAgICAgICAgICBkaXNwYXRjaERyYWdTcmNFdmVudChkcmFnZW5kRXZlbnQsIGV2ZW50LmV2ZW50
KCkpOworICAgICAgICAgICAgZGlzcGF0Y2hEcmFnU3JjRXZlbnQoZXZlbnROYW1lcygpLmRyYWdl
bmRFdmVudCwgZXZlbnQuZXZlbnQoKSk7CiAgICAgICAgICAgICBtX21vdXNlRG93bk1heVN0YXJ0
RHJhZyA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfSAKQEAgLTIwODUsNyArMjA4NCw3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVUZXh0SW5wdXRFdmVudCgKICAgICAvLyBQbGF0Zm9ybXMg
c2hvdWxkIGRpZmZlcmVudGlhdGUgcmVhbCBjb21tYW5kcyBsaWtlIHNlbGVjdEFsbCBmcm9tIHRl
eHQgaW5wdXQgaW4gZGlzZ3Vpc2UgKGxpa2UgaW5zZXJ0TmV3bGluZSksCiAgICAgLy8gYW5kIGF2
b2lkIGRpc3BhdGNoaW5nIHRleHQgaW5wdXQgZXZlbnRzIGZyb20ga2V5ZG93biBkZWZhdWx0IGhh
bmRsZXJzLgogICAgIGlmICh1bmRlcmx5aW5nRXZlbnQgJiYgdW5kZXJseWluZ0V2ZW50LT5pc0tl
eWJvYXJkRXZlbnQoKSkKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQq
Pih1bmRlcmx5aW5nRXZlbnQpLT50eXBlKCkgPT0ga2V5cHJlc3NFdmVudCk7CisgICAgICAgIEFT
U0VSVChzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4odW5kZXJseWluZ0V2ZW50KS0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KTsKICNlbmRpZgogICAgIEV2ZW50VGFyZ2V0
KiB0YXJnZXQ7CiAgICAgaWYgKHVuZGVybHlpbmdFdmVudCkKSW5kZXg6IFdlYkNvcmUvcGFnZS9G
b2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCi0jaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCkBAIC01MSw3ICs1MCw2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwogCiBGb2N1c0NvbnRyb2xsZXI6OkZvY3VzQ29udHJvbGxlcihQYWdl
KiBwYWdlKQpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDYgQEAgdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsK
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKICNpZm5kZWYgTkRFQlVHICAgIApAQCAtMTMx
NCw3ICsxMzEzLDcgQEAgdm9pZCBGcmFtZTo6Zm9yY2VMYXlvdXRXaXRoUGFnZVdpZHRoUmFuZwog
dm9pZCBGcmFtZTo6c2VuZFJlc2l6ZUV2ZW50KCkKIHsKICAgICBpZiAoRG9jdW1lbnQqIGRvYyA9
IGRvY3VtZW50KCkpCi0gICAgICAgIGRvYy0+ZGlzcGF0Y2hXaW5kb3dFdmVudChFdmVudE5hbWVz
OjpyZXNpemVFdmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgZG9jLT5kaXNwYXRjaFdpbmRv
d0V2ZW50KGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCwgZmFsc2UsIGZhbHNlKTsKIH0KIAogdm9p
ZCBGcmFtZTo6c2VuZFNjcm9sbEV2ZW50KCkKQEAgLTEzMjYsNyArMTMyNSw3IEBAIHZvaWQgRnJh
bWU6OnNlbmRTY3JvbGxFdmVudCgpCiAgICAgRG9jdW1lbnQqIGRvYyA9IGRvY3VtZW50KCk7CiAg
ICAgaWYgKCFkb2MpCiAgICAgICAgIHJldHVybjsKLSAgICBkb2MtPmRpc3BhdGNoRXZlbnRGb3JU
eXBlKHNjcm9sbEV2ZW50LCB0cnVlLCBmYWxzZSk7CisgICAgZG9jLT5kaXNwYXRjaEV2ZW50Rm9y
VHlwZShldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQsIHRydWUsIGZhbHNlKTsKIH0KIAogdm9pZCBG
cmFtZTo6Y2xlYXJUaW1lcnMoRnJhbWVWaWV3ICp2aWV3LCBEb2N1bWVudCAqZG9jdW1lbnQpCklu
ZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjcsOCArNjcsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5n
IG5hbWVzcGFjZSBFdmVudE5hbWVzOwotCiBzdGF0aWMgSGFzaFNldDxQYWdlKj4qIGFsbFBhZ2Vz
OwogCiAjaWZuZGVmIE5ERUJVRwpAQCAtODYsNyArODQsNyBAQCBzdGF0aWMgdm9pZCBuZXR3b3Jr
U3RhdGVDaGFuZ2VkKCkKICAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoZnJhbWUpOwogICAgIH0K
IAotICAgIEF0b21pY1N0cmluZyBldmVudE5hbWUgPSBuZXR3b3JrU3RhdGVOb3RpZmllcigpLm9u
TGluZSgpID8gb25saW5lRXZlbnQgOiBvZmZsaW5lRXZlbnQ7CisgICAgQXRvbWljU3RyaW5nIGV2
ZW50TmFtZSA9IG5ldHdvcmtTdGF0ZU5vdGlmaWVyKCkub25MaW5lKCkgPyBldmVudE5hbWVzKCku
b25saW5lRXZlbnQgOiBldmVudE5hbWVzKCkub2ZmbGluZUV2ZW50OwogICAgIAogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gZnJhbWVzW2ldLT5kb2N1bWVudCgpOwpJbmRleDogV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1NCw3
ICs1NTQsNyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBCiAgICAg
ICAgICAgICAgICAgLy8gU2V0IHRoZSBzdGFydCB0aW1lciB0byB0aGUgaW5pdGlhbCBkZWxheSAo
MCBpZiBubyBkZWxheSkKICAgICAgICAgICAgICAgICBtX3dhaXRlZEZvclJlc3BvbnNlID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgbV9hbmltU3RhdGUgPSBBbmltYXRpb25TdGF0ZVN0YXJ0V2Fp
dFRpbWVyOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uVGltZXJDYWxsYmFjay5zdGFydFRp
bWVyKG1fYW5pbWF0aW9uLT5kZWxheSgpLCBFdmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25TdGFy
dEV2ZW50LCBtX2FuaW1hdGlvbi0+ZGVsYXkoKSk7CisgICAgICAgICAgICAgICAgbV9hbmltYXRp
b25UaW1lckNhbGxiYWNrLnN0YXJ0VGltZXIobV9hbmltYXRpb24tPmRlbGF5KCksIGV2ZW50TmFt
ZXMoKS53ZWJraXRBbmltYXRpb25TdGFydEV2ZW50LCBtX2FuaW1hdGlvbi0+ZGVsYXkoKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBbmltYXRpb25T
dGF0ZVN0YXJ0V2FpdFRpbWVyOgpAQCAtNzE4LDExICs3MTgsMTEgQEAgdm9pZCBBbmltYXRpb25C
YXNlOjphbmltYXRpb25UaW1lckNhbGxiYQogICAgIEFTU0VSVChtX29iamVjdC0+ZG9jdW1lbnQo
KSAmJiAhbV9vYmplY3QtPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpOwogCiAgICAgLy8gRklY
TUU6IHVzZSBhbiBlbnVtCi0gICAgaWYgKGV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjp3ZWJraXRB
bmltYXRpb25TdGFydEV2ZW50KQorICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndl
YmtpdEFuaW1hdGlvblN0YXJ0RXZlbnQpCiAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmlt
YXRpb25TdGF0ZUlucHV0U3RhcnRUaW1lckZpcmVkLCBlbGFwc2VkVGltZSk7Ci0gICAgZWxzZSBp
ZiAoZXZlbnRUeXBlID09IEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2ZW50
KQorICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9u
SXRlcmF0aW9uRXZlbnQpCiAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0
ZUlucHV0TG9vcFRpbWVyRmlyZWQsIGVsYXBzZWRUaW1lKTsKLSAgICBlbHNlIGlmIChldmVudFR5
cGUgPT0gRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uRW5kRXZlbnQpIHsKKyAgICBlbHNlIGlm
IChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50KSB7CiAg
ICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0RW5kVGltZXJGaXJl
ZCwgZWxhcHNlZFRpbWUpOwogICAgICAgICAvLyB8dGhpc3wgbWF5IGJlIGRlbGV0ZWQgaGVyZQog
ICAgIH0KQEAgLTgwNCwxMSArODA0LDExIEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6cHJpbWVFdmVu
dFRpbWVycygpCiAgICAgICAgIC8vIFdlIGFyZSBub3QgYXQgdGhlIGVuZCB5ZXQsIHNlbmQgYSBs
b29wIGV2ZW50CiAgICAgICAgIEFTU0VSVChuZXh0SXRlcmF0aW9uVGltZSA+IDApOwogICAgICAg
ICBtX2FuaW1TdGF0ZSA9IEFuaW1hdGlvblN0YXRlTG9vcGluZzsKLSAgICAgICAgbV9hbmltYXRp
b25UaW1lckNhbGxiYWNrLnN0YXJ0VGltZXIoZHVyYXRpb25MZWZ0LCBFdmVudE5hbWVzOjp3ZWJr
aXRBbmltYXRpb25JdGVyYXRpb25FdmVudCwgbmV4dEl0ZXJhdGlvblRpbWUpOworICAgICAgICBt
X2FuaW1hdGlvblRpbWVyQ2FsbGJhY2suc3RhcnRUaW1lcihkdXJhdGlvbkxlZnQsIGV2ZW50TmFt
ZXMoKS53ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVudCwgbmV4dEl0ZXJhdGlvblRpbWUpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFdlIGFyZSBhdCB0aGUgZW5kLCBzZW5kIGFuIGVuZCBl
dmVudAogICAgICAgICBtX2FuaW1TdGF0ZSA9IEFuaW1hdGlvblN0YXRlRW5kaW5nOwotICAgICAg
ICBtX2FuaW1hdGlvblRpbWVyQ2FsbGJhY2suc3RhcnRUaW1lcihkdXJhdGlvbkxlZnQsIEV2ZW50
TmFtZXM6OndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50LCBuZXh0SXRlcmF0aW9uVGltZSk7CisgICAg
ICAgIG1fYW5pbWF0aW9uVGltZXJDYWxsYmFjay5zdGFydFRpbWVyKGR1cmF0aW9uTGVmdCwgZXZl
bnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50LCBuZXh0SXRlcmF0aW9uVGltZSk7CiAg
ICAgfQogfQogICAKSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmlt
YXRpb24uY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1w
bGljaXRBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQg
SW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXQKIAogdm9pZCBJbXBsaWNpdEFuaW1h
dGlvbjo6b25BbmltYXRpb25FbmQoZG91YmxlIGVsYXBzZWRUaW1lKQogewotICAgIGlmICghc2Vu
ZFRyYW5zaXRpb25FdmVudChFdmVudE5hbWVzOjp3ZWJraXRUcmFuc2l0aW9uRW5kRXZlbnQsIGVs
YXBzZWRUaW1lKSkgeworICAgIGlmICghc2VuZFRyYW5zaXRpb25FdmVudChldmVudE5hbWVzKCku
d2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50LCBlbGFwc2VkVGltZSkpIHsKICAgICAgICAgLy8gV2Ug
ZGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50LCB3aGljaCB3b3VsZCBjYWxsIGVuZEFuaW1hdGlvbigp
LCBzbyB3ZSdsbCBqdXN0IGNhbGwgaXQgaGVyZS4KICAgICAgICAgZW5kQW5pbWF0aW9uKHRydWUp
OwogICAgIH0KQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6b25Bbmlt
YXRpb25FbmQoZAogCiBib29sIEltcGxpY2l0QW5pbWF0aW9uOjpzZW5kVHJhbnNpdGlvbkV2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxhcHNlZFRpbWUpCiB7Ci0g
ICAgaWYgKGV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjp3ZWJraXRUcmFuc2l0aW9uRW5kRXZlbnQp
IHsKKyAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53ZWJraXRUcmFuc2l0aW9uRW5k
RXZlbnQpIHsKICAgICAgICAgRG9jdW1lbnQ6Okxpc3RlbmVyVHlwZSBsaXN0ZW5lclR5cGUgPSBE
b2N1bWVudDo6VFJBTlNJVElPTkVORF9MSVNURU5FUjsKIAogICAgICAgICBpZiAoc2hvdWxkU2Vu
ZEV2ZW50Rm9yTGlzdGVuZXIobGlzdGVuZXJUeXBlKSkgewpAQCAtMTE0LDcgKzExNCw3IEBAIGJv
b2wgSW1wbGljaXRBbmltYXRpb246OnNlbmRUcmFuc2l0aW9uRXYKICAgICAgICAgICAgIGVsZW1l
bnQtPmRpc3BhdGNoV2ViS2l0VHJhbnNpdGlvbkV2ZW50KGV2ZW50VHlwZSwgcHJvcGVydHlOYW1l
LCBlbGFwc2VkVGltZSk7CiAKICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsICh1
bmFuaW1hdGVkKSBzdHlsZQotICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBFdmVudE5hbWVz
Ojp3ZWJraXRBbmltYXRpb25FbmRFdmVudCAmJiBlbGVtZW50LT5yZW5kZXJlcigpKQorICAgICAg
ICAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9uRW5kRXZl
bnQgJiYgZWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICBzZXRDaGFuZ2VkKGVs
ZW1lbnQuZ2V0KCkpOwogCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRGlkIGRpc3BhdGNo
IGFuIGV2ZW50CkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0
aW9uLmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZy
YW1lQW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDE3ICsxNjIsMTcgQEAgYm9v
bCBLZXlmcmFtZUFuaW1hdGlvbjo6c2hvdWxkU2VuZEV2ZW50RgogCiB2b2lkIEtleWZyYW1lQW5p
bWF0aW9uOjpvbkFuaW1hdGlvblN0YXJ0KGRvdWJsZSBlbGFwc2VkVGltZSkKIHsKLSAgICBzZW5k
QW5pbWF0aW9uRXZlbnQoRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uU3RhcnRFdmVudCwgZWxh
cHNlZFRpbWUpOworICAgIHNlbmRBbmltYXRpb25FdmVudChldmVudE5hbWVzKCkud2Via2l0QW5p
bWF0aW9uU3RhcnRFdmVudCwgZWxhcHNlZFRpbWUpOwogfQogCiB2b2lkIEtleWZyYW1lQW5pbWF0
aW9uOjpvbkFuaW1hdGlvbkl0ZXJhdGlvbihkb3VibGUgZWxhcHNlZFRpbWUpCiB7Ci0gICAgc2Vu
ZEFuaW1hdGlvbkV2ZW50KEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2ZW50
LCBlbGFwc2VkVGltZSk7CisgICAgc2VuZEFuaW1hdGlvbkV2ZW50KGV2ZW50TmFtZXMoKS53ZWJr
aXRBbmltYXRpb25JdGVyYXRpb25FdmVudCwgZWxhcHNlZFRpbWUpOwogfQogCiB2b2lkIEtleWZy
YW1lQW5pbWF0aW9uOjpvbkFuaW1hdGlvbkVuZChkb3VibGUgZWxhcHNlZFRpbWUpCiB7Ci0gICAg
aWYgKCFzZW5kQW5pbWF0aW9uRXZlbnQoRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uRW5kRXZl
bnQsIGVsYXBzZWRUaW1lKSkgeworICAgIGlmICghc2VuZEFuaW1hdGlvbkV2ZW50KGV2ZW50TmFt
ZXMoKS53ZWJraXRBbmltYXRpb25FbmRFdmVudCwgZWxhcHNlZFRpbWUpKSB7CiAgICAgICAgIC8v
IFdlIGRpZG4ndCBkaXNwYXRjaCBhbiBldmVudCwgd2hpY2ggd291bGQgY2FsbCBlbmRBbmltYXRp
b24oKSwgc28gd2UnbGwganVzdCBjYWxsIGl0IGhlcmUuCiAgICAgICAgIGVuZEFuaW1hdGlvbih0
cnVlKTsKICAgICB9CkBAIC0xODEsMTIgKzE4MSwxMiBAQCB2b2lkIEtleWZyYW1lQW5pbWF0aW9u
OjpvbkFuaW1hdGlvbkVuZChkCiBib29sIEtleWZyYW1lQW5pbWF0aW9uOjpzZW5kQW5pbWF0aW9u
RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSkK
IHsKICAgICBEb2N1bWVudDo6TGlzdGVuZXJUeXBlIGxpc3RlbmVyVHlwZTsKLSAgICBpZiAoZXZl
bnRUeXBlID09IEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2ZW50KQorICAg
IGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2
ZW50KQogICAgICAgICBsaXN0ZW5lclR5cGUgPSBEb2N1bWVudDo6QU5JTUFUSU9OSVRFUkFUSU9O
X0xJU1RFTkVSOwotICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjp3ZWJraXRB
bmltYXRpb25FbmRFdmVudCkKKyAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygp
LndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50KQogICAgICAgICBsaXN0ZW5lclR5cGUgPSBEb2N1bWVu
dDo6QU5JTUFUSU9ORU5EX0xJU1RFTkVSOwogICAgIGVsc2UgewotICAgICAgICBBU1NFUlQoZXZl
bnRUeXBlID09IEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlvblN0YXJ0RXZlbnQpOworICAgICAg
ICBBU1NFUlQoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25TdGFydEV2
ZW50KTsKICAgICAgICAgbGlzdGVuZXJUeXBlID0gRG9jdW1lbnQ6OkFOSU1BVElPTlNUQVJUX0xJ
U1RFTkVSOwogICAgIH0KIApAQCAtMjA3LDcgKzIwNyw3IEBAIGJvb2wgS2V5ZnJhbWVBbmltYXRp
b246OnNlbmRBbmltYXRpb25FdmUKICAgICAgICAgZWxlbWVudC0+ZGlzcGF0Y2hXZWJLaXRBbmlt
YXRpb25FdmVudChldmVudFR5cGUsIG1fa2V5ZnJhbWVzLmFuaW1hdGlvbk5hbWUoKSwgZWxhcHNl
ZFRpbWUpOwogCiAgICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsICh1bmFuaW1hdGVkKSBz
dHlsZQotICAgICAgICBpZiAoZXZlbnRUeXBlID09IEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlv
bkVuZEV2ZW50ICYmIGVsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgICAgIGlmIChldmVudFR5cGUg
PT0gZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50ICYmIGVsZW1lbnQtPnJlbmRl
cmVyKCkpCiAgICAgICAgICAgICBzZXRDaGFuZ2VkKGVsZW1lbnQuZ2V0KCkpOwogCiAgICAgICAg
IHJldHVybiB0cnVlOyAvLyBEaWQgZGlzcGF0Y2ggYW4gZXZlbnQKSW5kZXg6IFdlYkNvcmUvcGFn
ZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvZ3Rr
L0V2ZW50SGFuZGxlckd0ay5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9wYWdlL2d0
ay9FdmVudEhhbmRsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAj
aW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAKICNpbmNsdWRlICJDbGlwYm9hcmRHdGsuaCIKLSNp
bmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUg
IkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC00Myw4ICs0Miw2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0K
IHVuc2lnbmVkIEV2ZW50SGFuZGxlcjo6c19hY2Nlc3NLZXlNb2RpZmllcnMgPSBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQ6OkFsdEtleTsKIAogY29uc3QgZG91YmxlIEV2ZW50SGFuZGxlcjo6VGV4dERy
YWdEZWxheSA9IDAuMDsKSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCShyZXZp
c2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw4ICs0NSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNp
bmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0KIHVuc2lnbmVkIEV2ZW50SGFuZGxlcjo6c19hY2Nl
c3NLZXlNb2RpZmllcnMgPSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkN0cmxLZXkgfCBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQ6OkFsdEtleTsKIAogY29uc3QgZG91YmxlIEV2ZW50SGFuZGxlcjo6VGV4
dERyYWdEZWxheSA9IDAuMTU7CkBAIC05Nyw3ICs5NSw3IEBAIFBhc3NSZWZQdHI8S2V5Ym9hcmRF
dmVudD4gRXZlbnRIYW5kbGVyOjoKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0tleWJvYXJkT3B0aW9u
VGFiKEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAgIHJldHVybiBldmVudAotICAgICAgICAm
JiAoZXZlbnQtPnR5cGUoKSA9PSBrZXlkb3duRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBrZXlw
cmVzc0V2ZW50KQorICAgICAgICAmJiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5
ZG93bkV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQp
CiAgICAgICAgICYmIGV2ZW50LT5hbHRLZXkoKQogICAgICAgICAmJiBldmVudC0+a2V5SWRlbnRp
ZmllcigpID09ICJVKzAwMDkiOyAgICAKIH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvRnJhbWVN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQkocmV2aXNp
b24gMzgwNjQpCisrKyBXZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw3ICszNSw2IEBACiAjaW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgogI2ltcG9ydCAi
RWRpdG9yQ2xpZW50LmgiCiAjaW1wb3J0ICJFdmVudC5oIgotI2ltcG9ydCAiRXZlbnROYW1lcy5o
IgogI2ltcG9ydCAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbXBvcnQgIkZyYW1lUHJpdmF0ZS5o
IgogI2ltcG9ydCAiRnJhbWVWaWV3LmgiCkBAIC03NSw3ICs3NCw2IEBAIHVzaW5nIEpTQzo6SlNM
b2NrOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVz
OwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogLy8gRWl0aGVyIGdldCBjYWNoZWQgcmVn
ZXhwIG9yIGJ1aWxkIG9uZSB0aGF0IG1hdGNoZXMgYW55IG9mIHRoZSBsYWJlbHMuCkluZGV4OiBX
ZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9xdC9FdmVudEhhbmRsZXJRdC5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9w
YWdlL3F0L0V2ZW50SGFuZGxlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsOCArNTYsNiBA
QCBRVF9FTkRfTkFNRVNQQUNFCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNw
YWNlIEV2ZW50TmFtZXM7Ci0KIHVuc2lnbmVkIEV2ZW50SGFuZGxlcjo6c19hY2Nlc3NLZXlNb2Rp
ZmllcnMgPSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkN0cmxLZXk7CiAKIGNvbnN0IGRvdWJsZSBF
dmVudEhhbmRsZXI6OlRleHREcmFnRGVsYXkgPSAwLjA7CkBAIC02NSw3ICs2Myw3IEBAIGNvbnN0
IGRvdWJsZSBFdmVudEhhbmRsZXI6OlRleHREcmFnRGVsYXkKIHN0YXRpYyBib29sIGlzS2V5Ym9h
cmRPcHRpb25UYWIoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgcmV0dXJuIGV2ZW50Ci0g
ICAgICAgICYmIChldmVudC0+dHlwZSgpID09IGtleWRvd25FdmVudCB8fCBldmVudC0+dHlwZSgp
ID09IGtleXByZXNzRXZlbnQpCisgICAgICAgICYmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5rZXlkb3duRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJl
c3NFdmVudCkKICAgICAgICAgJiYgZXZlbnQtPmFsdEtleSgpCiAgICAgICAgICYmIGV2ZW50LT5r
ZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAwOSI7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvQXRvbWljU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQv
QXRvbWljU3RyaW5nLmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvQXRvbWljU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsMTEgQEAKICNp
bmNsdWRlIDxranMvaWRlbnRpZmllci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKKyNp
ZiBFTkFCTEUoV09SS0VSUykKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KK3VzaW5n
IG5hbWVzcGFjZSBXVEY7CisjZW5kaWYKKwogI2lmIFVTRShKU0MpCiB1c2luZyBKU0M6OklkZW50
aWZpZXI7CiB1c2luZyBKU0M6OlVTdHJpbmc7CkBAIC0zOCw3ICs0MywyMCBAQCB1c2luZyBKU0M6
OlVTdHJpbmc7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIEhhc2hTZXQ8U3RyaW5n
SW1wbCo+KiBzdHJpbmdUYWJsZTsKKyNpZiBFTkFCTEUoV09SS0VSUykKK3N0YXRpYyBUaHJlYWRT
cGVjaWZpYzxIYXNoU2V0PFN0cmluZ0ltcGwqPiA+KiBzdGF0aWNTdHJpbmdUYWJsZTsKKyNlbHNl
CitzdGF0aWMgSGFzaFNldDxTdHJpbmdJbXBsKj4qIHN0YXRpY1N0cmluZ1RhYmxlOworI2VuZGlm
CisKK3N0YXRpYyBpbmxpbmUgSGFzaFNldDxTdHJpbmdJbXBsKj4qIHN0cmluZ1RhYmxlKCkKK3sK
KyNpZiBFTkFCTEUoV09SS0VSUykKKyAgICByZXR1cm4gKnN0YXRpY1N0cmluZ1RhYmxlOworI2Vs
c2UKKyAgICByZXR1cm4gc3RhdGljU3RyaW5nVGFibGU7CisjZW5kaWYKK30KIAogc3RydWN0IENT
dHJpbmdUcmFuc2xhdG9yIHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBjaGFyKiBj
KQpAQCAtODAsNyArOTgsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IEF0b21pY1N0cmluZzo6
YWRkCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICghKmMpCiAgICAgICAgIHJldHVybiBTdHJp
bmdJbXBsOjplbXB0eSgpOyAgICAKLSAgICBwYWlyPEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVy
YXRvciwgYm9vbD4gYWRkUmVzdWx0ID0gc3RyaW5nVGFibGUtPmFkZDxjb25zdCBjaGFyKiwgQ1N0
cmluZ1RyYW5zbGF0b3I+KGMpOworICAgIHBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJh
dG9yLCBib29sPiBhZGRSZXN1bHQgPSBzdHJpbmdUYWJsZSgpLT5hZGQ8Y29uc3QgY2hhciosIENT
dHJpbmdUcmFuc2xhdG9yPihjKTsKICAgICBpZiAoIWFkZFJlc3VsdC5zZWNvbmQpCiAgICAgICAg
IHJldHVybiAqYWRkUmVzdWx0LmZpcnN0OwogICAgIHJldHVybiBhZG9wdFJlZigqYWRkUmVzdWx0
LmZpcnN0KTsKQEAgLTE3Miw3ICsxOTAsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IEF0b21p
Y1N0cmluZzo6YWRkCiAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgpOwogICAgIAog
ICAgIFVDaGFyQnVmZmVyIGJ1ZiA9IHsgcywgbGVuZ3RoIH07IAotICAgIHBhaXI8SGFzaFNldDxT
dHJpbmdJbXBsKj46Oml0ZXJhdG9yLCBib29sPiBhZGRSZXN1bHQgPSBzdHJpbmdUYWJsZS0+YWRk
PFVDaGFyQnVmZmVyLCBVQ2hhckJ1ZmZlclRyYW5zbGF0b3I+KGJ1Zik7CisgICAgcGFpcjxIYXNo
U2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IGFkZFJlc3VsdCA9IHN0cmluZ1RhYmxl
KCktPmFkZDxVQ2hhckJ1ZmZlciwgVUNoYXJCdWZmZXJUcmFuc2xhdG9yPihidWYpOwogICAgIGlm
ICghYWRkUmVzdWx0LnNlY29uZCkKICAgICAgICAgcmV0dXJuICphZGRSZXN1bHQuZmlyc3Q7CiAg
ICAgcmV0dXJuIGFkb3B0UmVmKCphZGRSZXN1bHQuZmlyc3QpOwpAQCAtMTkxLDcgKzIwOSw3IEBA
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQKICAgICAgICAgcmV0dXJu
IFN0cmluZ0ltcGw6OmVtcHR5KCk7CiAKICAgICBVQ2hhckJ1ZmZlciBidWYgPSB7cywgbGVuZ3Ro
fTsgCi0gICAgcGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IGFkZFJl
c3VsdCA9IHN0cmluZ1RhYmxlLT5hZGQ8VUNoYXJCdWZmZXIsIFVDaGFyQnVmZmVyVHJhbnNsYXRv
cj4oYnVmKTsKKyAgICBwYWlyPEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVyYXRvciwgYm9vbD4g
YWRkUmVzdWx0ID0gc3RyaW5nVGFibGUoKS0+YWRkPFVDaGFyQnVmZmVyLCBVQ2hhckJ1ZmZlclRy
YW5zbGF0b3I+KGJ1Zik7CiAgICAgaWYgKCFhZGRSZXN1bHQuc2Vjb25kKQogICAgICAgICByZXR1
cm4gKmFkZFJlc3VsdC5maXJzdDsKICAgICByZXR1cm4gYWRvcHRSZWYoKmFkZFJlc3VsdC5maXJz
dCk7CkBAIC0yMDUsNyArMjIzLDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBBdG9taWNTdHJp
bmc6OmFkZAogICAgIGlmIChyLT5sZW5ndGgoKSA9PSAwKQogICAgICAgICByZXR1cm4gU3RyaW5n
SW1wbDo6ZW1wdHkoKTsKICAgICAKLSAgICBTdHJpbmdJbXBsKiByZXN1bHQgPSAqc3RyaW5nVGFi
bGUtPmFkZChyKS5maXJzdDsKKyAgICBTdHJpbmdJbXBsKiByZXN1bHQgPSAqc3RyaW5nVGFibGUo
KS0+YWRkKHIpLmZpcnN0OwogICAgIGlmIChyZXN1bHQgPT0gcikKICAgICAgICAgci0+bV9pblRh
YmxlID0gdHJ1ZTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjEzLDcgKzIzMSw3IEBAIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQKIAogdm9pZCBBdG9taWNTdHJpbmc6
OnJlbW92ZShTdHJpbmdJbXBsKiByKQogewotICAgIHN0cmluZ1RhYmxlLT5yZW1vdmUocik7Cisg
ICAgc3RyaW5nVGFibGUoKS0+cmVtb3ZlKHIpOwogfQogCiAjaWYgVVNFKEpTQykKQEAgLTIyOCw3
ICsyNDYsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IEF0b21pY1N0cmluZzo6YWRkCiAgICAg
ICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgpOwogCiAgICAgSGFzaEFuZENoYXJhY3RlcnMg
YnVmZmVyID0geyBzdHJpbmctPmNvbXB1dGVkSGFzaCgpLCBzdHJpbmctPmRhdGEoKSwgbGVuZ3Ro
IH07IAotICAgIHBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yLCBib29sPiBhZGRS
ZXN1bHQgPSBzdHJpbmdUYWJsZS0+YWRkPEhhc2hBbmRDaGFyYWN0ZXJzLCBIYXNoQW5kQ2hhcmFj
dGVyc1RyYW5zbGF0b3I+KGJ1ZmZlcik7CisgICAgcGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6
aXRlcmF0b3IsIGJvb2w+IGFkZFJlc3VsdCA9IHN0cmluZ1RhYmxlKCktPmFkZDxIYXNoQW5kQ2hh
cmFjdGVycywgSGFzaEFuZENoYXJhY3RlcnNUcmFuc2xhdG9yPihidWZmZXIpOwogICAgIGlmICgh
YWRkUmVzdWx0LnNlY29uZCkKICAgICAgICAgcmV0dXJuICphZGRSZXN1bHQuZmlyc3Q7CiAgICAg
cmV0dXJuIGFkb3B0UmVmKCphZGRSZXN1bHQuZmlyc3QpOwpAQCAtMjQ1LDcgKzI2Myw3IEBAIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQKICAgICAgICAgcmV0dXJuIFN0
cmluZ0ltcGw6OmVtcHR5KCk7CiAKICAgICBIYXNoQW5kQ2hhcmFjdGVycyBidWZmZXIgPSB7IHN0
cmluZy0+aGFzaCgpLCBzdHJpbmctPmRhdGEoKSwgbGVuZ3RoIH07IAotICAgIHBhaXI8SGFzaFNl
dDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yLCBib29sPiBhZGRSZXN1bHQgPSBzdHJpbmdUYWJsZS0+
YWRkPEhhc2hBbmRDaGFyYWN0ZXJzLCBIYXNoQW5kQ2hhcmFjdGVyc1RyYW5zbGF0b3I+KGJ1ZmZl
cik7CisgICAgcGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IGFkZFJl
c3VsdCA9IHN0cmluZ1RhYmxlKCktPmFkZDxIYXNoQW5kQ2hhcmFjdGVycywgSGFzaEFuZENoYXJh
Y3RlcnNUcmFuc2xhdG9yPihidWZmZXIpOwogICAgIGlmICghYWRkUmVzdWx0LnNlY29uZCkKICAg
ICAgICAgcmV0dXJuICphZGRSZXN1bHQuZmlyc3Q7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCphZGRS
ZXN1bHQuZmlyc3QpOwpAQCAtMjYzLDggKzI4MSw4IEBAIEF0b21pY1N0cmluZ0ltcGwqIEF0b21p
Y1N0cmluZzo6ZmluZChjb24KICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEF0b21pY1N0cmlu
Z0ltcGwqPihTdHJpbmdJbXBsOjplbXB0eSgpKTsKIAogICAgIEhhc2hBbmRDaGFyYWN0ZXJzIGJ1
ZmZlciA9IHsgc3RyaW5nLT5jb21wdXRlZEhhc2goKSwgc3RyaW5nLT5kYXRhKCksIGxlbmd0aCB9
OyAKLSAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBzdHJpbmdU
YWJsZS0+ZmluZDxIYXNoQW5kQ2hhcmFjdGVycywgSGFzaEFuZENoYXJhY3RlcnNUcmFuc2xhdG9y
PihidWZmZXIpOwotICAgIGlmIChpdGVyYXRvciA9PSBzdHJpbmdUYWJsZS0+ZW5kKCkpCisgICAg
SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ZXJhdG9yID0gc3RyaW5nVGFibGUoKS0+
ZmluZDxIYXNoQW5kQ2hhcmFjdGVycywgSGFzaEFuZENoYXJhY3RlcnNUcmFuc2xhdG9yPihidWZm
ZXIpOworICAgIGlmIChpdGVyYXRvciA9PSBzdHJpbmdUYWJsZSgpLT5lbmQoKSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEF0b21pY1N0cmluZ0ltcGwqPigqaXRl
cmF0b3IpOwogfQpAQCAtMjgyLDkgKzMwMCwxNCBAQCBERUZJTkVfR0xPQkFMKEF0b21pY1N0cmlu
Zywgc3RhckF0b20sICIqCiAKIHZvaWQgQXRvbWljU3RyaW5nOjppbml0KCkKIHsKKyAgICAvLyBJ
bml0aWFsaXphdGlvbiBpcyBub3QgdGhyZWFkIHNhZmUsIHNvIHRoaXMgZnVuY3Rpb24gbXVzdCBi
ZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQgZmlyc3QuCiAgICAgc3RhdGljIGJvb2wgaW5p
dGlhbGl6ZWQ7CiAgICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBzdHJpbmdUYWJsZSA9
IG5ldyBIYXNoU2V0PFN0cmluZ0ltcGwqPjsKKyNpZiBFTkFCTEUoV09SS0VSUykKKyAgICAgICAg
c3RhdGljU3RyaW5nVGFibGUgPSBuZXcgVGhyZWFkU3BlY2lmaWM8SGFzaFNldDxTdHJpbmdJbXBs
Kj4gPjsKKyNlbHNlCisgICAgICAgIHN0YXRpY1N0cmluZ1RhYmxlID0gbmV3IEhhc2hTZXQ8U3Ry
aW5nSW1wbCo+OworI2VuZGlmCiAKICAgICAgICAgLy8gVXNlIHBsYWNlbWVudCBuZXcgdG8gaW5p
dGlhbGl6ZSB0aGUgZ2xvYmFscy4KICAgICAgICAgbmV3ICgodm9pZCopJm51bGxBdG9tKSBBdG9t
aWNTdHJpbmc7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5oCShyZXZpc2lv
biAzODA2NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM0LDYgKzEzNCw3IEBAIGlubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNl
KGNvbnN0IGNoYXIKIGlubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IFN0cmluZyYg
YSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShhLmlt
cGwoKSwgYi5pbXBsKCkpOyB9CiAKIC8vIERlZmluZSBleHRlcm5hbCBnbG9iYWwgdmFyaWFibGVz
IGZvciB0aGUgY29tbW9ubHkgdXNlZCBhdG9taWMgc3RyaW5ncy4KKy8vIFRoZXNlIGFyZSBvbmx5
IHVzYWJsZSBmcm9tIHRoZSBtYWluIHRocmVhZC4KICNpZm5kZWYgQVRPTUlDU1RSSU5HX0hJREVf
R0xPQkFMUwogICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgbnVsbEF0b207CiAgICAgZXh0
ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBlbXB0eUF0b207CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMv
UGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcu
Y3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJh
bWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTc5LDcgKzc4LDYgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgRXZl
bnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHN0YXRpYyBpbnQgc19jYWxs
aW5nUGx1Z2luOwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZp
c2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUg
IkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1l
TG9hZFJlcXVlc3QuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKQEAgLTgxLDcgKzgwLDYgQEAg
dXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1l
c3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHZvaWQgUGx1
Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcGx1Z2lu
cy9xdC9QbHVnaW5WaWV3UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9xdC9Q
bHVnaW5WaWV3UXQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcGx1Z2lucy9xdC9Q
bHVnaW5WaWV3UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIu
aCIKICNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgi
CkBAIC03NCw3ICs3Myw2IEBAIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwogCiB2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgpIGNvbnN0Cklu
ZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHJldmlzaW9uIDM4MDY0KQor
KysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTIsNyArOTIsNiBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIAogY29uc3QgTFBDV1NUUiBrV2ViUGx1Z2luVmlld2Rvd0NsYXNzTmFtZSA9IEwiV2Vi
UGx1Z2luVmlldyI7CkBAIC0zOTcsMTAgKzM5NiwxMCBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRs
ZUtleWJvYXJkRXZlbnQoS2V5CiAKICAgICBucEV2ZW50LndQYXJhbSA9IGV2ZW50LT5rZXlDb2Rl
KCk7ICAgIAogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0ga2V5ZG93bkV2ZW50KSB7CisgICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgewogICAgICAg
ICBucEV2ZW50LmV2ZW50ID0gV01fS0VZRE9XTjsKICAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAw
OwotICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBrZXl1cEV2ZW50KSB7CisgICAgfSBl
bHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KSB7CiAgICAg
ICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9LRVlVUDsKICAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAw
eDgwMDA7CiAgICAgfQpAQCAtNDI3LDkgKzQyNiw5IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
TW91c2VFdmVudChNb3VzZUUKICAgICBpZiAoZXZlbnQtPnNoaWZ0S2V5KCkpCiAgICAgICAgIG5w
RXZlbnQud1BhcmFtIHw9IE1LX1NISUZUOwogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gbW91
c2Vtb3ZlRXZlbnQgfHwKLSAgICAgICAgZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW91dEV2ZW50IHx8
IAotICAgICAgICBldmVudC0+dHlwZSgpID09IG1vdXNlb3ZlckV2ZW50KSB7CisgICAgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50IHx8CisgICAgICAgIGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQgfHwgCisgICAgICAgIGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7CiAgICAgICAgIG5w
RXZlbnQuZXZlbnQgPSBXTV9NT1VTRU1PVkU7CiAgICAgICAgIGlmIChldmVudC0+YnV0dG9uRG93
bigpKQogICAgICAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKQEAgLTQ0NCw3ICs0
NDMsNyBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKGV2ZW50
LT50eXBlKCkgPT0gbW91c2Vkb3duRXZlbnQpIHsKKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgewogICAgICAgICAvLyBGb2N1cyB0aGUg
cGx1Z2luCiAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQog
ICAgICAgICAgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEZvY3VzZWRGcmFtZShtX3Bh
cmVudEZyYW1lKTsKQEAgLTQ2MCw3ICs0NTksNyBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1v
dXNlRXZlbnQoTW91c2VFCiAgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX1JCVVRU
T05ET1dOOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlm
IChldmVudC0+dHlwZSgpID09IG1vdXNldXBFdmVudCkgeworICAgIH0gZWxzZSBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KSB7CiAgICAgICAgIHN3aXRjaCAo
ZXZlbnQtPmJ1dHRvbigpKSB7CiAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAg
bnBFdmVudC5ldmVudCA9IFdNX0xCVVRUT05VUDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL01l
ZGlhQ29udHJvbEVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9N
ZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFt
ZXM7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiAvLyBGSVhNRTogVGhlc2UgY29uc3Rh
bnRzIG1heSBuZWVkIHRvIGJlIHR3ZWFrZWQgdG8gYmV0dGVyIG1hdGNoIHRoZSBzZWVraW5nIGlu
IHRoZSBRVCBwbHVnaW4KQEAgLTEwNCw3ICsxMDMsNyBAQCBNZWRpYUNvbnRyb2xNdXRlQnV0dG9u
RWxlbWVudDo6TWVkaWFDb250CiAKIHZvaWQgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewotICAgIGlmIChldmVudC0+dHlw
ZSgpID09IGNsaWNrRXZlbnQpIHsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkuY2xpY2tFdmVudCkgewogICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0TXV0ZWQoIW1fbWVk
aWFFbGVtZW50LT5tdXRlZCgpKTsKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CiAgICAgfQpAQCAtMTIwLDcgKzExOSw3IEBAIE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50
OjpNZWRpYUNvbnQKIAogdm9pZCBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0g
Y2xpY2tFdmVudCkgeworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlj
a0V2ZW50KSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAgIGlmIChtX21lZGlh
RWxlbWVudC0+Y2FuUGxheSgpKQogICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBsYXkoZWMp
OwpAQCAtMTQ0LDcgKzE0Myw3IEBAIE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50OjpNZWRp
YUNvbnQKIAogdm9pZCBNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gbW91c2Vk
b3duRXZlbnQpIHsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vk
b3duRXZlbnQpIHsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1l
KCkpIHsKICAgICAgICAgICAgIG1fY2FwdHVyaW5nID0gdHJ1ZTsKICAgICAgICAgICAgIGZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKHRoaXMpOwpAQCAt
MTUzLDcgKzE1Miw3IEBAIHZvaWQgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQ6OmRlZmEK
ICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBhdXNlKGVjKTsKICAgICAgICAgbV9zZWVrVGltZXIu
c3RhcnRSZXBlYXRpbmcoY1NlZWtSZXBlYXREZWxheSk7CiAgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOwotICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBtb3VzZXVwRXZl
bnQpIHsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
dXBFdmVudCkgewogICAgICAgICBpZiAobV9jYXB0dXJpbmcpCiAgICAgICAgICAgICBpZiAoRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewogICAgICAgICAgICAgICAgIG1fY2Fw
dHVyaW5nID0gZmFsc2U7CkBAIC0xOTksNyArMTk4LDcgQEAgdm9pZCBNZWRpYUNvbnRyb2xUaW1l
bGluZUVsZW1lbnQ6OmRlZmF1bAogICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIoZXZlbnQpOwogCiAgICAgZmxvYXQgdGltZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
dmFsdWUoKS50b0RvdWJsZSgpKTsKLSAgICBpZiAob2xkVGltZSAhPSB0aW1lIHx8IGV2ZW50LT50
eXBlKCkgPT0gaW5wdXRFdmVudCkgeworICAgIGlmIChvbGRUaW1lICE9IHRpbWUgfHwgZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkuaW5wdXRFdmVudCkgewogICAgICAgICBFeGNlcHRpb25D
b2RlIGVjOwogICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0Q3VycmVudFRpbWUodGltZSwgZWMp
OwogICAgIH0KQEAgLTIzNCw3ICsyMzMsNyBAQCBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9u
RWxlbWVudDo6TWVkCiAKIHZvaWQgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewotICAgIGlmIChldmVudC0+dHlw
ZSgpID09IGNsaWNrRXZlbnQpIHsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkuY2xpY2tFdmVudCkgewogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAg
ICB9CiAgICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsOCArNDEsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBF
dmVudE5hbWVzOwotCiBSZW5kZXJGcmFtZVNldDo6UmVuZGVyRnJhbWVTZXQoSFRNTEZyYW1lU2V0
RWxlbWVudCogZnJhbWVTZXQpCiAgICAgOiBSZW5kZXJDb250YWluZXIoZnJhbWVTZXQpCiAgICAg
LCBtX2lzUmVzaXppbmcoZmFsc2UpCkBAIC01NjUsNyArNTYzLDcgQEAgYm9vbCBSZW5kZXJGcmFt
ZVNldDo6dXNlclJlc2l6ZShNb3VzZUV2ZQogICAgIGlmICghbV9pc1Jlc2l6aW5nKSB7CiAgICAg
ICAgIGlmIChuZWVkc0xheW91dCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoZXZ0LT50eXBlKCkgPT0gbW91c2Vkb3duRXZlbnQgJiYgZXZ0LT5idXR0b24oKSA9PSBM
ZWZ0QnV0dG9uKSB7CisgICAgICAgIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2Vkb3duRXZlbnQgJiYgZXZ0LT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgICAg
ICBzdGFydFJlc2l6aW5nKG1fY29scywgZXZ0LT5wYWdlWCgpIC0geFBvcygpKTsKICAgICAgICAg
ICAgIHN0YXJ0UmVzaXppbmcobV9yb3dzLCBldnQtPnBhZ2VZKCkgLSB5UG9zKCkpOwogICAgICAg
ICAgICAgaWYgKG1fY29scy5tX3NwbGl0QmVpbmdSZXNpemVkICE9IG5vU3BsaXQgfHwgbV9yb3dz
Lm1fc3BsaXRCZWluZ1Jlc2l6ZWQgIT0gbm9TcGxpdCkgewpAQCAtNTc0LDEwICs1NzIsMTAgQEAg
Ym9vbCBSZW5kZXJGcmFtZVNldDo6dXNlclJlc2l6ZShNb3VzZUV2ZQogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGV2dC0+dHlwZSgpID09IG1vdXNl
bW92ZUV2ZW50IHx8IChldnQtPnR5cGUoKSA9PSBtb3VzZXVwRXZlbnQgJiYgZXZ0LT5idXR0b24o
KSA9PSBMZWZ0QnV0dG9uKSkgeworICAgICAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlbW92ZUV2ZW50IHx8IChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1
cEV2ZW50ICYmIGV2dC0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikpIHsKICAgICAgICAgICAgIGNv
bnRpbnVlUmVzaXppbmcobV9jb2xzLCBldnQtPnBhZ2VYKCkgLSB4UG9zKCkpOwogICAgICAgICAg
ICAgY29udGludWVSZXNpemluZyhtX3Jvd3MsIGV2dC0+cGFnZVkoKSAtIHlQb3MoKSk7Ci0gICAg
ICAgICAgICBpZiAoZXZ0LT50eXBlKCkgPT0gbW91c2V1cEV2ZW50ICYmIGV2dC0+YnV0dG9uKCkg
PT0gTGVmdEJ1dHRvbikgeworICAgICAgICAgICAgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZXVwRXZlbnQgJiYgZXZ0LT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAg
ICAgICAgICAgICAgc2V0SXNSZXNpemluZyhmYWxzZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShy
ZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODUsNyArODUsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKIAogY29uc3QgUmVuZGVyTGF5ZXI6OlNjcm9sbEFsaWdubWVudCBS
ZW5kZXJMYXllcjo6Z0FsaWduQ2VudGVySWZOZWVkZWQgPSB7IFJlbmRlckxheWVyOjpub1Njcm9s
bCwgUmVuZGVyTGF5ZXI6OmFsaWduQ2VudGVyLCBSZW5kZXJMYXllcjo6YWxpZ25Ub0Nsb3Nlc3RF
ZGdlIH07CkBAIC04MzksNyArODM4LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZz
ZXQoaW50IHgsIAogICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgRE9NIGV2ZW50LgogICAgIGlm
ICh2aWV3KSB7CiAgICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHZpZXctPmZyYW1l
VmlldygpKQotICAgICAgICAgICAgZnJhbWVWaWV3LT5zY2hlZHVsZUV2ZW50KEV2ZW50OjpjcmVh
dGUoc2Nyb2xsRXZlbnQsIGZhbHNlLCBmYWxzZSksIEV2ZW50VGFyZ2V0Tm9kZUNhc3QocmVuZGVy
ZXIoKS0+ZWxlbWVudCgpKSk7CisgICAgICAgICAgICBmcmFtZVZpZXctPnNjaGVkdWxlRXZlbnQo
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQsIGZhbHNlLCBmYWxzZSksIEV2
ZW50VGFyZ2V0Tm9kZUNhc3QocmVuZGVyZXIoKS0+ZWxlbWVudCgpKSk7CiAgICAgfQogfQogCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgs
NyArNTgsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
ICAKIGNvbnN0IGludCByb3dTcGFjaW5nID0gMTsKQEAgLTUyOCw3ICs1MjcsNyBAQCB2b2lkIFJl
bmRlckxpc3RCb3g6OnZhbHVlQ2hhbmdlZChTY3JvbGxiCiAgICAgICAgIG1faW5kZXhPZmZzZXQg
PSBuZXdPZmZzZXQ7CiAgICAgICAgIHJlcGFpbnQoKTsKICAgICAgICAgLy8gRmlyZSB0aGUgc2Ny
b2xsIERPTSBldmVudC4KLSAgICAgICAgRXZlbnRUYXJnZXROb2RlQ2FzdChub2RlKCkpLT5kaXNw
YXRjaEV2ZW50Rm9yVHlwZShzY3JvbGxFdmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgRXZl
bnRUYXJnZXROb2RlQ2FzdChub2RlKCkpLT5kaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVz
KCkuc2Nyb2xsRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWVkaWEuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1lZGlhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsNiBAQCB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBF
dmVudE5hbWVzOwotCiBzdGF0aWMgY29uc3QgZG91YmxlIGNUaW1lVXBkYXRlUmVwZWF0RGVsYXkg
PSAwLjI7CiBzdGF0aWMgY29uc3QgZG91YmxlIGNPcGFjaXR5QW5pbWF0aW9uUmVwZWF0RGVsYXkg
PSAwLjA1OwogLy8gRklYTUUgZ2V0IHRoaXMgZnJvbSBzdHlsZQpAQCAtMzc2LDExICszNzQsMTEg
QEAgdm9pZCBSZW5kZXJNZWRpYTo6Zm9yd2FyZEV2ZW50KEV2ZW50KiBldgogICAgICAgICBpZiAo
bV9mdWxsc2NyZWVuQnV0dG9uICYmIG1fZnVsbHNjcmVlbkJ1dHRvbi0+cmVuZGVyZXIoKSAmJiBt
X2Z1bGxzY3JlZW5CdXR0b24tPnJlbmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCku
Y29udGFpbnMocG9pbnQpKQogICAgICAgICAgICAgbV9mdWxsc2NyZWVuQnV0dG9uLT5kZWZhdWx0
RXZlbnRIYW5kbGVyKGV2ZW50KTsKICAgICAgICAgCi0gICAgICAgIGlmIChldmVudC0+dHlwZSgp
ID09IG1vdXNlb3ZlckV2ZW50KSB7CisgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkgewogICAgICAgICAgICAgbV9tb3VzZU92ZXIgPSB0cnVl
OwogICAgICAgICAgICAgdXBkYXRlQ29udHJvbFZpc2liaWxpdHkoKTsKICAgICAgICAgfQotICAg
ICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW91dEV2ZW50KSB7CisgICAgICAgIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KSB7CiAgICAgICAgICAg
ICAvLyBGSVhNRTogbW92aW5nIG92ZXIgc2Nyb2xsYmFyIHRodW1iIGdlbmVyYXRlcyBtb3VzZW91
dCBmb3IgdGhlIGFuY2VzdG9yIG1lZGlhIGVsZW1lbnQgZm9yIHNvbWUgcmVhc29uCiAgICAgICAg
ICAgICBtX21vdXNlT3ZlciA9IGFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkuY29udGFpbnMocG9p
bnQpOwogICAgICAgICAgICAgdXBkYXRlQ29udHJvbFZpc2liaWxpdHkoKTsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBACiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXZl
bnRIYW5kbGVyLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC02OSw3
ICs2OCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
CiAjaWZuZGVmIE5ERUJVRwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCShyZXZp
c2lvbiAzODA2NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAgdXNpbmcgc3RkOjptaW47CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogCiBjb25zdCBpbnQgZGVmYXVsdFRyYWNrTGVuZ3RoID0gMTI5OwpAQCAtNzIs
NyArNzEsNyBAQCBIVE1MU2xpZGVyVGh1bWJFbGVtZW50OjpIVE1MU2xpZGVyVGh1bWJFCiB2b2lk
IEhUTUxTbGlkZXJUaHVtYkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50
KQogewogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlID0gZXZlbnQtPnR5cGUoKTsK
LSAgICBpZiAoZXZlbnRUeXBlID09IG1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZl
bnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0
QnV0dG9uKSB7CisgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZl
bnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihl
dmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAgICAgTW91c2VFdmVudCogbW91
c2VFdmVudCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7CiAgICAgICAgIGlmIChk
b2N1bWVudCgpLT5mcmFtZSgpICYmIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+cGFyZW50KCkK
ICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxSZW5kZXJTbGlkZXIqPihyZW5kZXJlcigp
LT5wYXJlbnQoKSktPm1vdXNlRXZlbnRJc0luVGh1bWIobW91c2VFdmVudCkpIHsKQEAgLTg3LDcg
Kzg2LDcgQEAgdm9pZCBIVE1MU2xpZGVyVGh1bWJFbGVtZW50OjpkZWZhdWx0RXZlbgogICAgICAg
ICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBtb3VzZXVwRXZlbnQgJiYgZXZl
bnQtPmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPmJ1
dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVu
dE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNf
Y2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAg
ICAgIGlmIChtX2luRHJhZ01vZGUpIHsKICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBk
b2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIo
KS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKDApOyAgICAgIApAQCAtOTUsNyArOTQsNyBA
QCB2b2lkIEhUTUxTbGlkZXJUaHVtYkVsZW1lbnQ6OmRlZmF1bHRFdmVuCiAgICAgICAgICAgICBl
dmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IG1vdXNlbW92ZUV2ZW50ICYmIGV2ZW50LT5p
c01vdXNlRXZlbnQoKSkgeworICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMo
KS5tb3VzZW1vdmVFdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKICAgICAgICAgaWYg
KG1faW5EcmFnTW9kZSAmJiByZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnBhcmVudCgpKSB7CiAg
ICAgICAgICAgICAvLyBNb3ZlIHRoZSBzbGlkZXIKICAgICAgICAgICAgIE1vdXNlRXZlbnQqIG1v
dXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDcgKzU2LDYgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKIC8vIFZhbHVlIGNob3NlbiBieSBvYnNlcnZhdGlvbi4gIFRoaXMgY2FuIGJlIHR3ZWFrZWQu
CkBAIC04NDIsNyArODQxLDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y2FsY1ByZWZXaWR0
aHMoKQogCiB2b2lkIFJlbmRlclRleHRDb250cm9sOjpmb3J3YXJkRXZlbnQoRXZlbnQqIGV2dCkK
IHsKLSAgICBpZiAoZXZ0LT50eXBlKCkgPT0gYmx1ckV2ZW50KSB7CisgICAgaWYgKGV2dC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBp
bm5lclJlbmRlcmVyID0gbV9pbm5lclRleHQtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmIChpbm5l
clJlbmRlcmVyKSB7CiAgICAgICAgICAgICBSZW5kZXJMYXllciogaW5uZXJMYXllciA9IGlubmVy
UmVuZGVyZXItPmxheWVyKCk7CkBAIC04NTAsNyArODQ5LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29u
dHJvbDo6Zm9yd2FyZEV2ZW50KEV2ZQogICAgICAgICAgICAgICAgIGlubmVyTGF5ZXItPnNjcm9s
bFRvT2Zmc2V0KHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCA/IGlubmVyTGF5ZXItPnNjcm9s
bFdpZHRoKCkgOiAwLCAwKTsKICAgICAgICAgfQogICAgICAgICBjYXBzTG9ja1N0YXRlTWF5SGF2
ZUNoYW5nZWQoKTsKLSAgICB9IGVsc2UgaWYgKGV2dC0+dHlwZSgpID09IGZvY3VzRXZlbnQpCisg
ICAgfSBlbHNlIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZm9jdXNFdmVudCkKICAg
ICAgICAgY2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7CiAgICAgZWxzZSB7CiAgICAgICAg
IGlmIChldnQtPmlzTW91c2VFdmVudCgpICYmIG1fcmVzdWx0c0J1dHRvbiAmJiBzdGF0aWNfY2Fz
dDxNb3VzZUV2ZW50Kj4oZXZ0KS0+eCgpIDwgbV9pbm5lclRleHQtPnJlbmRlcmVyKCktPmFic29s
dXRlQm91bmRpbmdCb3hSZWN0KCkueCgpKQpAQCAtODcxLDcgKzg3MCw3IEBAIHZvaWQgUmVuZGVy
VGV4dENvbnRyb2w6OnNlbGVjdGlvbkNoYW5nZWQKICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudCo+KGVsZW1lbnQpLT5jYWNoZVNlbGVjdGlvbihzZWxlY3Rpb25TdGFydCgpLCBz
ZWxlY3Rpb25FbmQoKSk7CiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1l
KCkpCiAgICAgICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKSAmJiB1c2VyVHJp
Z2dlcmVkKQotICAgICAgICAgICAgZWxlbWVudC0+ZGlzcGF0Y2hFdmVudEZvclR5cGUoc2VsZWN0
RXZlbnQsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnRG
b3JUeXBlKGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudCwgdHJ1ZSwgZmFsc2UpOwogfQogCiB2b2lk
IFJlbmRlclRleHRDb250cm9sOjphdXRvc2Nyb2xsKCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcldpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
V2lkZ2V0LmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJX
aWRnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNs
dWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgpAQCAtNDEsOCArNDAs
NiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5n
IG5hbWVzcGFjZSBFdmVudE5hbWVzOwotCiBzdGF0aWMgSGFzaE1hcDxjb25zdCBXaWRnZXQqLCBS
ZW5kZXJXaWRnZXQqPiYgd2lkZ2V0UmVuZGVyZXJNYXAoKQogewogICAgIHN0YXRpYyBIYXNoTWFw
PGNvbnN0IFdpZGdldCosIFJlbmRlcldpZGdldCo+KiBzdGF0aWNXaWRnZXRSZW5kZXJlck1hcCA9
IG5ldyBIYXNoTWFwPGNvbnN0IFdpZGdldCosIFJlbmRlcldpZGdldCo+OwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCShyZXZpc2lvbiAz
ODA2NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKLQogY2xhc3MgUmVuZGVyVGV4dENvbnRyb2xJ
bm5lckJsb2NrIDogcHVibGljIFJlbmRlckJsb2NrIHsKIHB1YmxpYzoKICAgICBSZW5kZXJUZXh0
Q29udHJvbElubmVyQmxvY2soTm9kZSogbm9kZSkgOiBSZW5kZXJCbG9jayhub2RlKSB7IH0KQEAg
LTEwMCw3ICs5OCw3IEBAIHZvaWQgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpkZWZhdWwK
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc2hhZG93QW5j
ZXN0b3IpLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2dCk7CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudCo+KHNoYWRvd0FuY2Vz
dG9yKS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOwotICAgICAgICBpZiAoZXZ0LT50eXBlKCkg
PT0gd2Via2l0RWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50KQorICAgICAgICBpZiAoZXZ0LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLndlYmtpdEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudCkK
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRleHRDb250cm9sKj4oc2hhZG93QW5jZXN0
b3ItPnJlbmRlcmVyKCkpLT5zdWJ0cmVlSGFzQ2hhbmdlZCgpOwogICAgIH0KICAgICBpZiAoIWV2
dC0+ZGVmYXVsdEhhbmRsZWQoKSkKQEAgLTEyMSw3ICsxMTksNyBAQCB2b2lkIFNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvbkVsZW1lbnQ6OmRlCiB7CiAgICAgLy8gT24gbW91c2Vkb3duLCBicmluZyB1
cCBhIG1lbnUsIGlmIG5lZWRlZAogICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHNoYWRvd0FuY2VzdG9yTm9kZSgpKTsKLSAgICBpZiAo
ZXZ0LT50eXBlKCkgPT0gbW91c2Vkb3duRXZlbnQgJiYgZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBz
dGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewor
ICAgIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZ0
LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KS0+YnV0dG9u
KCkgPT0gTGVmdEJ1dHRvbikgewogICAgICAgICBpbnB1dC0+Zm9jdXMoKTsKICAgICAgICAgaW5w
dXQtPnNlbGVjdCgpOwogICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQtPnJlbmRlcmVyKCkgJiYg
c3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2wqPihpbnB1dC0+cmVuZGVyZXIoKSktPnBvcHVw
SXNWaXNpYmxlKCkpCkBAIC0xNDQsNyArMTQyLDcgQEAgdm9pZCBTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbkVsZW1lbnQ6OmRlZgogewogICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIHZpc2libGUsIG9u
IG1vdXNldXAsIGNsZWFyIHRoZSB2YWx1ZSwgYW5kIHNldCBzZWxlY3Rpb24KICAgICBIVE1MSW5w
dXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihzaGFkb3dB
bmNlc3Rvck5vZGUoKSk7Ci0gICAgaWYgKGV2dC0+dHlwZSgpID09IG1vdXNlZG93bkV2ZW50ICYm
IGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1
dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlZG93bkV2ZW50ICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8
TW91c2VFdmVudCo+KGV2dCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAgICAgaW5w
dXQtPmZvY3VzKCk7CiAgICAgICAgIGlucHV0LT5zZWxlY3QoKTsKICAgICAgICAgZXZ0LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOwpAQCAtMTUzLDcgKzE1MSw3IEBAIHZvaWQgU2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25FbGVtZW50OjpkZWYKICAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSh0aGlzKTsKICAgICAgICAgICAgICAgICBt
X2NhcHR1cmluZyA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChldnQtPnR5
cGUoKSA9PSBtb3VzZXVwRXZlbnQgJiYgZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2Fz
dDxNb3VzZUV2ZW50Kj4oZXZ0KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgIH0gZWxz
ZSBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCAmJiBldnQtPmlz
TW91c2VFdmVudCgpICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpLT5idXR0b24oKSA9
PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGlmIChtX2NhcHR1cmluZyAmJiByZW5kZXJlcigpICYm
IHJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKSB7CiAgICAgICAg
ICAgICBpZiAoaG92ZXJlZCgpKSB7CiAgICAgICAgICAgICAgICAgaW5wdXQtPnNldFZhbHVlKCIi
KTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5jcHAJKHJldmlzaW9uIDM4MDY0
KQorKysgV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpkaXNwYXRjaFN0b3Jh
Z2VFdgogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYW1lcy5zaXplKCk7ICsraSkg
ewogICAgICAgICBpZiAoSFRNTEVsZW1lbnQqIGJvZHkgPSBmcmFtZXNbaV0tPmRvY3VtZW50KCkt
PmJvZHkoKSkKLSAgICAgICAgICAgIGJvZHktPmRpc3BhdGNoU3RvcmFnZUV2ZW50KEV2ZW50TmFt
ZXM6OnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHNvdXJjZUZyYW1lKTsg
ICAgICAgIAorICAgICAgICAgICAgYm9keS0+ZGlzcGF0Y2hTdG9yYWdlRXZlbnQoZXZlbnROYW1l
cygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHNvdXJjZUZyYW1lKTsg
ICAgICAgIAogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdl
QXJlYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlQXJl
YS5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdl
QXJlYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBTZXNzaW9uU3Rv
cmFnZUFyZWE6OmRpc3BhdGNoU3RvcmFnZQogICAgICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZnJhbWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChIVE1MRWxlbWVudCog
Ym9keSA9IGZyYW1lc1tpXS0+ZG9jdW1lbnQoKS0+Ym9keSgpKQotICAgICAgICAgICAgYm9keS0+
ZGlzcGF0Y2hTdG9yYWdlRXZlbnQoRXZlbnROYW1lczo6c3RvcmFnZUV2ZW50LCBrZXksIG9sZFZh
bHVlLCBuZXdWYWx1ZSwgc291cmNlRnJhbWUpOyAgICAgICAgCisgICAgICAgICAgICBib2R5LT5k
aXNwYXRjaFN0b3JhZ2VFdmVudChldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBrZXksIG9sZFZh
bHVlLCBuZXdWYWx1ZSwgc291cmNlRnJhbWUpOyAgICAgICAgCiAgICAgfQogfQogCkluZGV4OiBX
ZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZH
QUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdlYkNvcmUvc3ZnL1NWR0FFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwotCiBTVkdBRWxlbWVudDo6U1ZHQUVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKICAgICA6
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIFNWR1VS
SVJlZmVyZW5jZSgpCkBAIC0xMDgsMTMgKzEwNiwxMyBAQCBSZW5kZXJPYmplY3QqIFNWR0FFbGVt
ZW50OjpjcmVhdGVSZW5kZXJlCiAKIHZvaWQgU1ZHQUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqIGV2dCkKIHsKLSAgICBpZiAoaXNMaW5rKCkgJiYgKGV2dC0+dHlwZSgpID09IGNs
aWNrRXZlbnQgfHwgKGV2dC0+dHlwZSgpID09IGtleWRvd25FdmVudCAmJiBmb2N1c2VkKCkpKSkg
eworICAgIGlmIChpc0xpbmsoKSAmJiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNr
RXZlbnQgfHwgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgJiYgZm9j
dXNlZCgpKSkpIHsKICAgICAgICAgTW91c2VFdmVudCogZSA9IDA7Ci0gICAgICAgIGlmIChldnQt
PnR5cGUoKSA9PSBjbGlja0V2ZW50ICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkpCisgICAgICAgIGlm
IChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCAmJiBldnQtPmlzTW91c2VF
dmVudCgpKQogICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpOwog
ICAgICAgICAKICAgICAgICAgS2V5Ym9hcmRFdmVudCogayA9IDA7Ci0gICAgICAgIGlmIChldnQt
PnR5cGUoKSA9PSBrZXlkb3duRXZlbnQgJiYgZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAg
ICAgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgJiYgZXZ0LT5p
c0tleWJvYXJkRXZlbnQoKSkKICAgICAgICAgICAgIGsgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2
ZW50Kj4oZXZ0KTsKICAgICAgICAgCiAgICAgICAgIGlmIChlICYmIGUtPmJ1dHRvbigpID09IFJp
Z2h0QnV0dG9uKSB7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdEb2N1bWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdl
YkNvcmUvc3ZnL1NWR0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBA
QCB2b2lkIFNWR0RvY3VtZW50OjpkaXNwYXRjaFpvb21FdmVudChmbG9hCiB7CiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAgICAgUmVmUHRyPFNWR1pvb21FdmVudD4gZXZlbnQgPSBzdGF0aWNf
cG9pbnRlcl9jYXN0PFNWR1pvb21FdmVudD4oY3JlYXRlRXZlbnQoIlNWR1pvb21FdmVudHMiLCBl
YykpOwotICAgIGV2ZW50LT5pbml0RXZlbnQoRXZlbnROYW1lczo6em9vbUV2ZW50LCB0cnVlLCBm
YWxzZSk7CisgICAgZXZlbnQtPmluaXRFdmVudChldmVudE5hbWVzKCkuem9vbUV2ZW50LCB0cnVl
LCBmYWxzZSk7CiAgICAgZXZlbnQtPnNldFByZXZpb3VzU2NhbGUocHJldlNjYWxlKTsKICAgICBl
dmVudC0+c2V0TmV3U2NhbGUobmV3U2NhbGUpOwogICAgIHJvb3RFbGVtZW50KCktPmRpc3BhdGNo
RXZlbnQoZXZlbnQucmVsZWFzZSgpLCBlYyk7CkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgU1ZHRG9j
dW1lbnQ6OmRpc3BhdGNoU2Nyb2xsRXZlbnQoKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwogICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBjcmVhdGVFdmVudCgiU1ZHRXZlbnRzIiwgZWMp
OwotICAgIGV2ZW50LT5pbml0RXZlbnQoRXZlbnROYW1lczo6c2Nyb2xsRXZlbnQsIHRydWUsIGZh
bHNlKTsKKyAgICBldmVudC0+aW5pdEV2ZW50KGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudCwgdHJ1
ZSwgZmFsc2UpOwogICAgIHJvb3RFbGVtZW50KCktPmRpc3BhdGNoRXZlbnQoZXZlbnQucmVsZWFz
ZSgpLCBlYyk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAzODA2NCkKKysrIFdl
YkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw2IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci11c2lu
ZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIAogU1ZHRWxlbWVudDo6U1ZHRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU3R5bGVkRWxlbWVu
dCh0YWdOYW1lLCBkb2MpCkBAIC0xNDMsMjUgKzE0MiwyNSBAQCB2b2lkIFNWR0VsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hCiB7CiAgICAgLy8gc3RhbmRhcmQgZXZlbnRzCiAgICAgaWYg
KGF0dHItPm5hbWUoKSA9PSBvbmxvYWRBdHRyKQotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShsb2FkRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxp
bmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkubG9hZEV2ZW50
LCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25jbGlja0F0dHIpCi0gICAg
ICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGNsaWNrRXZlbnQs
IGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0
ZShldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgYXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IG9ubW91c2Vkb3duQXR0cikKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGVBbmRBdHRyaWJ1dGUobW91c2Vkb3duRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxp
bmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkubW91c2Vkb3du
RXZlbnQsIGF0dHIpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbm1vdXNlbW92ZUF0
dHIpCi0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKG1v
dXNlbW92ZUV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5
cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50LCBhdHRyKTsKICAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25tb3VzZW91dEF0dHIpCi0gICAgICAgIHNldElubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKG1vdXNlb3V0RXZlbnQsIGF0dHIpOwor
ICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5h
bWVzKCkubW91c2VvdXRFdmVudCwgYXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IG9ubW91c2VvdmVyQXR0cikKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVB
bmRBdHRyaWJ1dGUobW91c2VvdmVyRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQs
IGF0dHIpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbm1vdXNldXBBdHRyKQotICAg
ICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShtb3VzZXVwRXZl
bnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJp
YnV0ZShldmVudE5hbWVzKCkubW91c2V1cEV2ZW50LCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9uZm9jdXNpbkF0dHIpCi0gICAgICAgIHNldElubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKERPTUZvY3VzSW5FdmVudCwgYXR0cik7Cisg
ICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFt
ZXMoKS5ET01Gb2N1c0luRXZlbnQsIGF0dHIpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6b25mb2N1c291dEF0dHIpCi0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlQW5kQXR0cmlidXRlKERPTUZvY3VzT3V0RXZlbnQsIGF0dHIpOworICAgICAgICBz
ZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuRE9N
Rm9jdXNPdXRFdmVudCwgYXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpvbmFjdGl2YXRlQXR0cikKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5
cGVBbmRBdHRyaWJ1dGUoRE9NQWN0aXZhdGVFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5ET01BY3RpdmF0
ZUV2ZW50LCBhdHRyKTsKICAgICBlbHNlCiAgICAgICAgIFN0eWxlZEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOwogfQpAQCAtMTg1LDcgKzE4NCw3IEBAIHN0YXRpYyBib29sIGhh
c0xvYWRMaXN0ZW5lcihTVkdFbGVtZW50KiAKICAgICAgICAgaWYgKGxpc3QpIHsKICAgICAgICAg
ICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDo6SXRlcmF0b3IgZW5kID0gbGlzdC0+ZW5k
KCk7CiAgICAgICAgICAgICBmb3IgKFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDo6SXRlcmF0
b3IgaXQgPSBsaXN0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAg
aWYgKCgqaXQpLT5ldmVudFR5cGUoKSA9PSBsb2FkRXZlbnQgJiYKKyAgICAgICAgICAgICAgICBp
ZiAoKCppdCktPmV2ZW50VHlwZSgpID09IGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQgJiYKICAgICAg
ICAgICAgICAgICAgICAgKCppdCktPnVzZUNhcHR1cmUoKSA9PSB0cnVlIHx8IGN1cnJlbnROb2Rl
ID09IG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBA
IC0yMDMsNyArMjAyLDcgQEAgdm9pZCBTVkdFbGVtZW50OjpzZW5kU1ZHTG9hZEV2ZW50SWZQb3Nz
aQogICAgICAgICBpZiAoc2VuZFBhcmVudExvYWRFdmVudHMpCiAgICAgICAgICAgICBwYXJlbnQg
PSBjdXJyZW50VGFyZ2V0LT5wYXJlbnROb2RlKCk7IC8vIHNhdmUgdGhlIG5leHQgcGFyZW50IHRv
IGRpc3BhdGNoIHRvbyBpbmNhc2UgZGlzcGF0Y2hpbmcgdGhlIGV2ZW50IGNoYW5nZXMgdGhlIHRy
ZWUKICAgICAgICAgaWYgKGhhc0xvYWRMaXN0ZW5lcihjdXJyZW50VGFyZ2V0LmdldCgpKSkgewot
ICAgICAgICAgICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IEV2ZW50OjpjcmVhdGUobG9hZEV2ZW50
LCBmYWxzZSwgZmFsc2UpOworICAgICAgICAgICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAg
ICAgIGV2ZW50LT5zZXRUYXJnZXQoY3VycmVudFRhcmdldCk7CiAgICAgICAgICAgICBFeGNlcHRp
b25Db2RlIGlnbm9yZWQgPSAwOwogICAgICAgICAgICAgY3VycmVudFRhcmdldC0+ZGlzcGF0Y2hH
ZW5lcmljRXZlbnQoZXZlbnQucmVsZWFzZSgpLCBpZ25vcmVkKTsKSW5kZXg6IFdlYkNvcmUvc3Zn
L1NWR0VsZW1lbnRJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRWxl
bWVudEluc3RhbmNlLmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50SW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0KICNpZm5kZWYg
TkRFQlVHCiBzdGF0aWMgV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIgaW5zdGFuY2VDb3VudGVy
KCJXZWJDb3JlU1ZHRWxlbWVudEluc3RhbmNlIik7CiAjZW5kaWYKQEAgLTE3MSw0MDIgKzE2OSw0
MDIgQEAgYm9vbCBTVkdFbGVtZW50SW5zdGFuY2U6OmRpc3BhdGNoRXZlbnQoUAogCiBFdmVudExp
c3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uYWJvcnQoKSBjb25zdAogewotICAgIHJldHVy
biBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShhYm9y
dEV2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmFib3J0RXZlbnQpOwogfQogCiB2b2lkIFNWR0Vs
ZW1lbnRJbnN0YW5jZTo6c2V0T25hYm9ydChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50
TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGUoYWJvcnRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9u
ZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygp
LmFib3J0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVt
ZW50SW5zdGFuY2U6Om9uYmx1cigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdF
bGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGJsdXJFdmVudCk7CisgICAgcmV0
dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2
ZW50TmFtZXMoKS5ibHVyRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0
T25ibHVyKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBj
b3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShibHVy
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQsIGV2ZW50TGlz
dGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uY2hhbmdl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGUoY2hhbmdlRXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25kaW5n
RWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuY2hhbmdl
RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25jaGFuZ2UoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNvcnJlc3BvbmRpbmdF
bGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNoYW5nZUV2ZW50LCBldmVu
dExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwog
fQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uY2xpY2soKSBjb25zdAog
ewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZShjbGlja0V2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+
aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpOwogfQog
CiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25jbGljayhQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoY2xpY2tFdmVudCwgZXZlbnRMaXN0ZW5lcik7Cisg
ICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUo
ZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3Rl
bmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uY29udGV4dG1lbnUoKSBjb25zdAogewotICAgIHJl
dHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShj
b250ZXh0bWVudUV2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmNvbnRleHRtZW51RXZlbnQpOwog
fQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25jb250ZXh0bWVudShQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1l
bnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoY29udGV4dG1lbnVFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmNvbnRleHRtZW51RXZlbnQsIGV2ZW50TGlzdGVu
ZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uZGJsY2xpY2so
KSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZShkYmxjbGlja0V2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGlu
Z0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmRibGNs
aWNrRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25kYmxjbGljayhQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9u
ZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZGJsY2xpY2tFdmVu
dCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmRibGNsaWNrRXZlbnQsIGV2ZW50TGlz
dGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uZXJyb3Io
KSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZShlcnJvckV2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0Vs
ZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmVycm9yRXZl
bnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25lcnJvcihQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1l
bnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXJyb3JFdmVudCwgZXZlbnRMaXN0
ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBF
dmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uZm9jdXMoKSBjb25zdAogewotICAg
IHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZShmb2N1c0V2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmZvY3VzRXZlbnQpOwogfQogCiB2b2lk
IFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25mb2N1cyhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZm9jdXNFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29y
cmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRO
YW1lcygpLmZvY3VzRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBT
VkdFbGVtZW50SW5zdGFuY2U6Om9uaW5wdXQoKSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNw
b25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShpbnB1dEV2ZW50KTsK
KyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGUoZXZlbnROYW1lcygpLmlucHV0RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0
YW5jZTo6c2V0T25pbnB1dChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIp
CiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGUoaW5wdXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1l
bnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmlucHV0RXZl
bnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFu
Y2U6Om9ua2V5ZG93bigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50
KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGtleWRvd25FdmVudCk7CisgICAgcmV0dXJu
IGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50
TmFtZXMoKS5rZXlkb3duRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0
T25rZXlkb3duKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAg
ICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShr
ZXlkb3duRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCkt
PnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQs
IGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6
Om9ua2V5cHJlc3MoKSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgp
LT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShrZXlwcmVzc0V2ZW50KTsKKyAgICByZXR1cm4g
Y29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRO
YW1lcygpLmtleXByZXNzRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0
T25rZXlwcmVzcyhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0g
ICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUo
a2V5cHJlc3NFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQo
KS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmtleXByZXNzRXZl
bnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFu
Y2U6Om9ua2V5dXAoKSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgp
LT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShrZXl1cEV2ZW50KTsKKyAgICByZXR1cm4gY29y
cmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1l
cygpLmtleXVwRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25rZXl1
cChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVz
cG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoa2V5dXBFdmVu
dCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmtleXVwRXZlbnQsIGV2ZW50TGlzdGVu
ZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ubG9hZCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlKGxvYWRFdmVudCk7CisgICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50
KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQpOwog
fQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25sb2FkKFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5z
ZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShsb2FkRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwor
ICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBl
KGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3Rl
bmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ubW91c2Vkb3duKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUobW91
c2Vkb3duRXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpOwogfQogCiB2
b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25tb3VzZWRvd24oUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNlZG93bkV2ZW50LCBldmVudExpc3RlbmVy
KTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9y
VHlwZShldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBF
dmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ubW91c2Vtb3ZlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGUobW91c2Vtb3ZlRXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgp
LT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQp
OwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25tb3VzZW1vdmUoUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNvcnJlc3BvbmRpbmdFbGVt
ZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNlbW92ZUV2ZW50LCBldmVu
dExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQsIGV2ZW50TGlzdGVuZXIp
OwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ubW91c2VvdXQoKSBj
b25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZShtb3VzZW91dEV2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0Vs
ZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNlb3V0
RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25tb3VzZW91dChQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGlu
Z0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUobW91c2VvdXRFdmVudCwg
ZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQsIGV2ZW50TGlzdGVu
ZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ubW91c2VvdmVy
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGUobW91c2VvdmVyRXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25k
aW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91
c2VvdmVyRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25tb3VzZW92
ZXIoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNvcnJl
c3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNlb3Zl
ckV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJ
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQsIGV2
ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9u
bW91c2V1cCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNldXBFdmVudCk7CisgICAgcmV0dXJuIGNvcnJl
c3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5tb3VzZXVwRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25tb3Vz
ZXVwKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBjb3Jy
ZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShtb3VzZXVw
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQsIGV2ZW50
TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ubW91
c2V3aGVlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKG1vdXNld2hlZWxFdmVudCk7CisgICAgcmV0dXJuIGNv
cnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFt
ZXMoKS5tb3VzZXdoZWVsRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0
T25tb3VzZXdoZWVsKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsK
LSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZShtb3VzZXdoZWVsRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVt
ZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5tb3VzZXdo
ZWVsRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50
SW5zdGFuY2U6Om9uYmVmb3JlY3V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGlu
Z0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoYmVmb3JlY3V0RXZlbnQpOwor
ICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9y
VHlwZShldmVudE5hbWVzKCkuYmVmb3JlY3V0RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJ
bnN0YW5jZTo6c2V0T25iZWZvcmVjdXQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExp
c3RlbmVyKQogewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlKGJlZm9yZWN1dEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNw
b25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVz
KCkuYmVmb3JlY3V0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBT
VkdFbGVtZW50SW5zdGFuY2U6Om9uY3V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9u
ZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoY3V0RXZlbnQpOworICAg
IHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZShldmVudE5hbWVzKCkuY3V0RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6
c2V0T25jdXQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAg
IGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGN1
dEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJ
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuY3V0RXZlbnQsIGV2ZW50TGlz
dGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uYmVmb3Jl
Y29weSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGJlZm9yZWNvcHlFdmVudCk7CisgICAgcmV0dXJuIGNvcnJl
c3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5iZWZvcmVjb3B5RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25i
ZWZvcmVjb3B5KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAg
ICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShi
ZWZvcmVjb3B5RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50
KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5iZWZvcmVjb3B5
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5z
dGFuY2U6Om9uY29weSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50
KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNvcHlFdmVudCk7CisgICAgcmV0dXJuIGNv
cnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFt
ZXMoKS5jb3B5RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25jb3B5
KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBjb3JyZXNw
b25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShjb3B5RXZlbnQs
IGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5jb3B5RXZlbnQsIGV2ZW50TGlzdGVuZXIp
OwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uYmVmb3JlcGFzdGUo
KSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZShiZWZvcmVwYXN0ZUV2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9u
ZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmJl
Zm9yZXBhc3RlRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25iZWZv
cmVwYXN0ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAg
Y29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoYmVm
b3JlcGFzdGVFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQo
KS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmJlZm9yZXBhc3Rl
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5z
dGFuY2U6Om9ucGFzdGUoKSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVu
dCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShwYXN0ZUV2ZW50KTsKKyAgICByZXR1cm4g
Y29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRO
YW1lcygpLnBhc3RlRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25w
YXN0ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29y
cmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUocGFzdGVF
dmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnBhc3RlRXZlbnQsIGV2ZW50TGlz
dGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uZHJhZ2Vu
dGVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZHJhZ2VudGVyRXZlbnQpOworICAgIHJldHVybiBjb3JyZXNw
b25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCku
ZHJhZ2VudGVyRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25kcmFn
ZW50ZXIoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNv
cnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGRyYWdl
bnRlckV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5z
ZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZHJhZ2VudGVyRXZlbnQs
IGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6
Om9uZHJhZ292ZXIoKSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgp
LT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShkcmFnb3ZlckV2ZW50KTsKKyAgICByZXR1cm4g
Y29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRO
YW1lcygpLmRyYWdvdmVyRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0
T25kcmFnb3ZlcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0g
ICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUo
ZHJhZ292ZXJFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQo
KS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmRyYWdvdmVyRXZl
bnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFu
Y2U6Om9uZHJhZ2xlYXZlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1l
bnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZHJhZ2xlYXZlRXZlbnQpOworICAgIHJl
dHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShl
dmVudE5hbWVzKCkuZHJhZ2xlYXZlRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5j
ZTo6c2V0T25kcmFnbGVhdmUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KQogewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlKGRyYWdsZWF2ZUV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5n
RWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZHJh
Z2xlYXZlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVt
ZW50SW5zdGFuY2U6Om9uZHJvcCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdF
bGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGRyb3BFdmVudCk7CisgICAgcmV0
dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2
ZW50TmFtZXMoKS5kcm9wRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0
T25kcm9wKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBj
b3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShkcm9w
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcm9wRXZlbnQsIGV2ZW50TGlz
dGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uZHJhZ3N0
YXJ0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZHJhZ3N0YXJ0RXZlbnQpOworICAgIHJldHVybiBjb3JyZXNw
b25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCku
ZHJhZ3N0YXJ0RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25kcmFn
c3RhcnQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNv
cnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGRyYWdz
dGFydEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5z
ZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZHJhZ3N0YXJ0RXZlbnQs
IGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6
Om9uZHJhZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGRyYWdFdmVudCk7CisgICAgcmV0dXJuIGNvcnJlc3Bv
bmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5k
cmFnRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25kcmFnKFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBjb3JyZXNwb25kaW5n
RWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShkcmFnRXZlbnQsIGV2ZW50
TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQog
CiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uZHJhZ2VuZCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlKGRyYWdlbmRFdmVudCk7CisgICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCkt
PmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnZW5kRXZlbnQpOwog
fQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25kcmFnZW5kKFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgp
LT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShkcmFnZW5kRXZlbnQsIGV2ZW50TGlzdGVu
ZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnZW5kRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBF
dmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ucmVzZXQoKSBjb25zdAogewotICAg
IHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZShyZXNldEV2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnJlc2V0RXZlbnQpOwogfQogCiB2b2lk
IFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25yZXNldChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUocmVzZXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29y
cmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRO
YW1lcygpLnJlc2V0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBT
VkdFbGVtZW50SW5zdGFuY2U6Om9ucmVzaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVz
cG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUocmVzaXplRXZlbnQp
OworICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZShldmVudE5hbWVzKCkucmVzaXplRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJ
bnN0YW5jZTo6c2V0T25yZXNpemUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3Rl
bmVyKQogewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlKHJlc2l6ZUV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5n
RWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkucmVz
aXplRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50
SW5zdGFuY2U6Om9uc2Nyb2xsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0Vs
ZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoc2Nyb2xsRXZlbnQpOworICAgIHJl
dHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShl
dmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6
c2V0T25zY3JvbGwoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewot
ICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBl
KHNjcm9sbEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgp
LT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQs
IGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6
Om9uc2VhcmNoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+
aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoc2VhcmNoRXZlbnQpOworICAgIHJldHVybiBjb3Jy
ZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVz
KCkuc2VhcmNoRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25zZWFy
Y2goUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNvcnJl
c3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHNlYXJjaEV2
ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxp
bmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuc2VhcmNoRXZlbnQsIGV2ZW50TGlz
dGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uc2VsZWN0
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGUoc2VsZWN0RXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25kaW5n
RWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuc2VsZWN0
RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25zZWxlY3QoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNvcnJlc3BvbmRpbmdF
bGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHNlbGVjdEV2ZW50LCBldmVu
dExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuc2VsZWN0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwog
fQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uc2VsZWN0c3RhcnQoKSBj
b25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZShzZWxlY3RzdGFydEV2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGlu
Z0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnNlbGVj
dHN0YXJ0RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25zZWxlY3Rz
dGFydChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29y
cmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoc2VsZWN0
c3RhcnRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+
c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnNlbGVjdHN0YXJ0RXZl
bnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFu
Y2U6Om9uc3VibWl0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQo
KS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoc3VibWl0RXZlbnQpOworICAgIHJldHVybiBj
b3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5h
bWVzKCkuc3VibWl0RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25z
dWJtaXQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNv
cnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHN1Ym1p
dEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJ
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuc3VibWl0RXZlbnQsIGV2ZW50
TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9udW5s
b2FkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUodW5sb2FkRXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25k
aW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkudW5s
b2FkRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T251bmxvYWQoUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNvcnJlc3BvbmRp
bmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKHVubG9hZEV2ZW50LCBl
dmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkudW5sb2FkRXZlbnQsIGV2ZW50TGlzdGVuZXIp
OwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdJbWFnZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvU1ZHSW1hZ2VMb2FkZXIuY3BwCShyZXZpc2lvbiAzODA2NCkKKysr
IFdlYkNvcmUvc3ZnL1NWR0ltYWdlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyAr
NDYsNyBAQCB2b2lkIFNWR0ltYWdlTG9hZGVyOjpkaXNwYXRjaExvYWRFdmVudCgpCiAgICAgICAg
IHNldEhhdmVGaXJlZExvYWRFdmVudCh0cnVlKTsKICAgICAgICAgCiAgICAgICAgIGlmIChpbWFn
ZSgpLT5lcnJvck9jY3VycmVkKCkpCi0gICAgICAgICAgICBlbGVtZW50KCktPmRpc3BhdGNoRXZl
bnRGb3JUeXBlKEV2ZW50TmFtZXM6OmVycm9yRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAg
ICAgICBlbGVtZW50KCktPmRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5lcnJvckV2
ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFNWR0ltYWdl
RWxlbWVudCogaW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4oZWxl
bWVudCgpKTsKICAgICAgICAgICAgIGlmIChpbWFnZUVsZW1lbnQtPmV4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWRCYXNlVmFsdWUoKSkKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAz
ODA2NCkKKysrIFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MSw3ICs1MSw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7Ci11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBT
VkdOYW1lczsKIAogU1ZHU1ZHRWxlbWVudDo6U1ZHU1ZHRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQpAQCAtMjIwLDEzICsyMTksMTMgQEAgdm9pZCBT
VkdTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZQogCiAgICAgICAgIC8vIE9ubHkgaGFu
ZGxlIGV2ZW50cyBpZiB3ZSdyZSB0aGUgb3V0ZXJtb3N0IDxzdmc+IGVsZW1lbnQKICAgICAgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBvbnVubG9hZEF0dHIpCi0gICAgICAgICAgICBkb2N1bWVudCgp
LT5zZXRXaW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZSh1bmxvYWRF
dmVudCwgYXR0cik7CisgICAgICAgICAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dJbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkudW5sb2FkRXZlbnQsIGF0
dHIpOwogICAgICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25yZXNpemVBdHRyKQotICAg
ICAgICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVB
bmRBdHRyaWJ1dGUocmVzaXplRXZlbnQsIGF0dHIpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+
c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1l
cygpLnJlc2l6ZUV2ZW50LCBhdHRyKTsKICAgICAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IG9uc2Nyb2xsQXR0cikKLSAgICAgICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0lubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKHNjcm9sbEV2ZW50LCBhdHRyKTsKKyAgICAg
ICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0lubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5k
QXR0cmlidXRlKGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudCwgYXR0cik7CiAgICAgICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6b256b29tQXR0cikKLSAgICAgICAgICAgIGRv
Y3VtZW50KCktPnNldFdpbmRvd0lubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRl
KHpvb21FdmVudCwgYXR0cik7CisgICAgICAgICAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dJbmxp
bmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuem9vbUV2ZW50
LCBhdHRyKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0TGlzdGVuZXIgPSBmYWxzZTsK
ICAKQEAgLTIzNSw5ICsyMzQsOSBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlCiAgICAgfQogCiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmFib3J0QXR0cikKLSAg
ICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRB
dHRyaWJ1dGUoYWJvcnRFdmVudCwgYXR0cik7CisgICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRv
d0lubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5hYm9y
dEV2ZW50LCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25lcnJvckF0dHIp
Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0lubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBl
QW5kQXR0cmlidXRlKGVycm9yRXZlbnQsIGF0dHIpOworICAgICAgICBkb2N1bWVudCgpLT5zZXRX
aW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCku
ZXJyb3JFdmVudCwgYXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp4QXR0cikKICAgICAgICAgc2V0WEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3RoTW9kZVdpZHRo
LCBhdHRyLT52YWx1ZSgpKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp5QXR0cikKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODA2NCkK
KysrIFdlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDQsNyArMjA0LDcgQEAgdm9pZCBTVkdTY3JpcHRFbGVtZW50OjpkaXNwYXRjaExvYWRFdmVudAog
CiB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoRXJyb3JFdmVudCgpCiB7Ci0gICAgZGlz
cGF0Y2hFdmVudEZvclR5cGUoRXZlbnROYW1lczo6ZXJyb3JFdmVudCwgdHJ1ZSwgZmFsc2UpOwor
ICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCB0cnVlLCBm
YWxzZSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDM4MDY0
KQorKysgV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw4ICs1MSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2
ZW50TmFtZXM7Ci0KIHN0cnVjdCBQcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0gewogICAgIFByZWZs
aWdodFJlc3VsdENhY2hlSXRlbSh1bnNpZ25lZCBleHBpcnlEZWx0YSwgYm9vbCBjcmVkZW50aWFs
cywgSGFzaFNldDxTdHJpbmc+KiBtZXRob2RzLCBIYXNoU2V0PFN0cmluZywgQ2FzZUZvbGRpbmdI
YXNoPiogaGVhZGVycykKICAgICAgICAgOiBtX2Fic29sdXRlRXhwaXJ5VGltZShjdXJyZW50VGlt
ZSgpICsgZXhwaXJ5RGVsdGEpCkBAIC0xMjQ4LDcgKzEyNDYsNyBAQCB2b2lkIFhNTEh0dHBSZXF1
ZXN0Ojp1cGRhdGVBbmREaXNwYXRjaE9uCiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpc3BhdGNo
UmVhZHlTdGF0ZUNoYW5nZUV2ZW50KCkKIHsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2dCA9IEV2ZW50
OjpjcmVhdGUocmVhZHlzdGF0ZWNoYW5nZUV2ZW50LCBmYWxzZSwgZmFsc2UpOworICAgIFJlZlB0
cjxFdmVudD4gZXZ0ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucmVhZHlzdGF0ZWNoYW5n
ZUV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgIGlmIChtX29uUmVhZHlTdGF0ZUNoYW5nZUxpc3Rl
bmVyKSB7CiAgICAgICAgIGV2dC0+c2V0VGFyZ2V0KHRoaXMpOwogICAgICAgICBldnQtPnNldEN1
cnJlbnRUYXJnZXQodGhpcyk7CkBAIC0xMjc2LDI3ICsxMjc0LDI3IEBAIHZvaWQgWE1MSHR0cFJl
cXVlc3Q6OmRpc3BhdGNoWE1MSHR0cFJlcXUKIAogdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlzcGF0
Y2hBYm9ydEV2ZW50KCkKIHsKLSAgICBkaXNwYXRjaFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dChtX29uQWJvcnRMaXN0ZW5lci5nZXQoKSwgYWJvcnRFdmVudCwgZmFsc2UsIDAsIDApOworICAg
IGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KG1fb25BYm9ydExpc3RlbmVyLmdl
dCgpLCBldmVudE5hbWVzKCkuYWJvcnRFdmVudCwgZmFsc2UsIDAsIDApOwogfQogCiB2b2lkIFhN
TEh0dHBSZXF1ZXN0OjpkaXNwYXRjaEVycm9yRXZlbnQoKQogewotICAgIGRpc3BhdGNoWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50KG1fb25FcnJvckxpc3RlbmVyLmdldCgpLCBlcnJvckV2ZW50
LCBmYWxzZSwgMCwgMCk7CisgICAgZGlzcGF0Y2hYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQo
bV9vbkVycm9yTGlzdGVuZXIuZ2V0KCksIGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCBmYWxzZSwg
MCwgMCk7CiB9CiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpc3BhdGNoTG9hZEV2ZW50KCkKIHsK
LSAgICBkaXNwYXRjaFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudChtX29uTG9hZExpc3RlbmVy
LmdldCgpLCBsb2FkRXZlbnQsIGZhbHNlLCAwLCAwKTsKKyAgICBkaXNwYXRjaFhNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudChtX29uTG9hZExpc3RlbmVyLmdldCgpLCBldmVudE5hbWVzKCkubG9h
ZEV2ZW50LCBmYWxzZSwgMCwgMCk7CiB9CiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpc3BhdGNo
TG9hZFN0YXJ0RXZlbnQoKQogewotICAgIGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2
ZW50KG1fb25Mb2FkU3RhcnRMaXN0ZW5lci5nZXQoKSwgbG9hZHN0YXJ0RXZlbnQsIGZhbHNlLCAw
LCAwKTsKKyAgICBkaXNwYXRjaFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudChtX29uTG9hZFN0
YXJ0TGlzdGVuZXIuZ2V0KCksIGV2ZW50TmFtZXMoKS5sb2Fkc3RhcnRFdmVudCwgZmFsc2UsIDAs
IDApOwogfQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaXNwYXRjaFByb2dyZXNzRXZlbnQobG9u
ZyBsb25nIGV4cGVjdGVkTGVuZ3RoKQogewotICAgIGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50KG1fb25Qcm9ncmVzc0xpc3RlbmVyLmdldCgpLCBwcm9ncmVzc0V2ZW50LCBleHBl
Y3RlZExlbmd0aCAmJiBtX3JlY2VpdmVkTGVuZ3RoIDw9IGV4cGVjdGVkTGVuZ3RoLCAKKyAgICBk
aXNwYXRjaFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudChtX29uUHJvZ3Jlc3NMaXN0ZW5lci5n
ZXQoKSwgZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQsIGV4cGVjdGVkTGVuZ3RoICYmIG1fcmVj
ZWl2ZWRMZW5ndGggPD0gZXhwZWN0ZWRMZW5ndGgsIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3JlY2VpdmVkTGVuZ3RoKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGV4cGVjdGVkTGVuZ3RoKSk7CiB9CiAKSW5kZXg6IFdlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5jcHAJKHJldmlzaW9uIDM4MDY0KQorKysgV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7
Ci0KIFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjpYTUxIdHRwUmVxdWVzdFVwbG9hZChYTUxIdHRwUmVx
dWVzdCogeG1sSHR0cFJlcXVlc3QpCiAgICAgOiBtX3htbEh0dHBSZXF1ZXN0KHhtbEh0dHBSZXF1
ZXN0KQogewpAQCAtMTIwLDI3ICsxMTgsMjcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdFVwbG9hZDo6
ZGlzcGF0Y2hYTUxIdAogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjpkaXNwYXRjaEFib3J0
RXZlbnQoKQogewotICAgIGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KG1fb25B
Ym9ydExpc3RlbmVyLmdldCgpLCBhYm9ydEV2ZW50LCBmYWxzZSwgMCwgMCk7CisgICAgZGlzcGF0
Y2hYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQobV9vbkFib3J0TGlzdGVuZXIuZ2V0KCksIGV2
ZW50TmFtZXMoKS5hYm9ydEV2ZW50LCBmYWxzZSwgMCwgMCk7CiB9CiAKIHZvaWQgWE1MSHR0cFJl
cXVlc3RVcGxvYWQ6OmRpc3BhdGNoRXJyb3JFdmVudCgpCiB7Ci0gICAgZGlzcGF0Y2hYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnQobV9vbkVycm9yTGlzdGVuZXIuZ2V0KCksIGVycm9yRXZlbnQs
IGZhbHNlLCAwLCAwKTsKKyAgICBkaXNwYXRjaFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudCht
X29uRXJyb3JMaXN0ZW5lci5nZXQoKSwgZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGZhbHNlLCAw
LCAwKTsKIH0KIAogdm9pZCBYTUxIdHRwUmVxdWVzdFVwbG9hZDo6ZGlzcGF0Y2hMb2FkRXZlbnQo
KQogewotICAgIGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KG1fb25Mb2FkTGlz
dGVuZXIuZ2V0KCksIGxvYWRFdmVudCwgZmFsc2UsIDAsIDApOworICAgIGRpc3BhdGNoWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50KG1fb25Mb2FkTGlzdGVuZXIuZ2V0KCksIGV2ZW50TmFtZXMo
KS5sb2FkRXZlbnQsIGZhbHNlLCAwLCAwKTsKIH0KIAogdm9pZCBYTUxIdHRwUmVxdWVzdFVwbG9h
ZDo6ZGlzcGF0Y2hMb2FkU3RhcnRFdmVudCgpCiB7Ci0gICAgZGlzcGF0Y2hYTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnQobV9vbkxvYWRTdGFydExpc3RlbmVyLmdldCgpLCBsb2Fkc3RhcnRFdmVu
dCwgZmFsc2UsIDAsIDApOworICAgIGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
KG1fb25Mb2FkU3RhcnRMaXN0ZW5lci5nZXQoKSwgZXZlbnROYW1lcygpLmxvYWRzdGFydEV2ZW50
LCBmYWxzZSwgMCwgMCk7CiB9CiAKIHZvaWQgWE1MSHR0cFJlcXVlc3RVcGxvYWQ6OmRpc3BhdGNo
UHJvZ3Jlc3NFdmVudChsb25nIGxvbmcgYnl0ZXNTZW50LCBsb25nIGxvbmcgdG90YWxCeXRlc1Rv
QmVTZW50KQogewotICAgIGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KG1fb25Q
cm9ncmVzc0xpc3RlbmVyLmdldCgpLCBwcm9ncmVzc0V2ZW50LCB0cnVlLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oYnl0ZXNTZW50KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvdGFsQnl0ZXNUb0Jl
U2VudCkpOworICAgIGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KG1fb25Qcm9n
cmVzc0xpc3RlbmVyLmdldCgpLCBldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCwgdHJ1ZSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGJ5dGVzU2VudCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0b3Rh
bEJ5dGVzVG9CZVNlbnQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS94bWwvWFBhdGhSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hQYXRo
UmVzdWx0LmNwcAkocmV2aXNpb24gMzgwNjQpCisrKyBXZWJDb3JlL3htbC9YUGF0aFJlc3VsdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgWFBhdGhSZXN1bHQ6OlhQYXRoUmVz
dWx0KEV2ZW50VGFyZ2V0Tm9kZQogICAgICwgbV9ldmVudFRhcmdldChldmVudFRhcmdldCkKIHsK
ICAgICBtX2V2ZW50TGlzdGVuZXIgPSBJbnZhbGlkYXRpbmdFdmVudExpc3RlbmVyOjpjcmVhdGUo
dGhpcyk7Ci0gICAgbV9ldmVudFRhcmdldC0+YWRkRXZlbnRMaXN0ZW5lcihFdmVudE5hbWVzOjpE
T01TdWJ0cmVlTW9kaWZpZWRFdmVudCwgbV9ldmVudExpc3RlbmVyLCBmYWxzZSk7CisgICAgbV9l
dmVudFRhcmdldC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuRE9NU3VidHJlZU1vZGlm
aWVkRXZlbnQsIG1fZXZlbnRMaXN0ZW5lciwgZmFsc2UpOwogICAgIHN3aXRjaCAobV92YWx1ZS50
eXBlKCkpIHsKICAgICAgICAgY2FzZSBWYWx1ZTo6Qm9vbGVhblZhbHVlOgogICAgICAgICAgICAg
bV9yZXN1bHRUeXBlID0gQk9PTEVBTl9UWVBFOwpAQCAtNzksNyArNzksNyBAQCBYUGF0aFJlc3Vs
dDo6WFBhdGhSZXN1bHQoRXZlbnRUYXJnZXROb2RlCiBYUGF0aFJlc3VsdDo6flhQYXRoUmVzdWx0
KCkKIHsKICAgICBpZiAobV9ldmVudFRhcmdldCkKLSAgICAgICAgbV9ldmVudFRhcmdldC0+cmVt
b3ZlRXZlbnRMaXN0ZW5lcihFdmVudE5hbWVzOjpET01TdWJ0cmVlTW9kaWZpZWRFdmVudCwgbV9l
dmVudExpc3RlbmVyLmdldCgpLCBmYWxzZSk7CisgICAgICAgIG1fZXZlbnRUYXJnZXQtPnJlbW92
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLkRPTVN1YnRyZWVNb2RpZmllZEV2ZW50LCBtX2V2
ZW50TGlzdGVuZXIuZ2V0KCksIGZhbHNlKTsKIH0KIAogdm9pZCBYUGF0aFJlc3VsdDo6Y29udmVy
dFRvKHVuc2lnbmVkIHNob3J0IHR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTgxLDcgKzE4
MSw3IEBAIHZvaWQgWFBhdGhSZXN1bHQ6OmludmFsaWRhdGVJdGVyYXRvclN0YXQKICAgICBBU1NF
UlQobV9ldmVudFRhcmdldCk7CiAgICAgQVNTRVJUKG1fZXZlbnRMaXN0ZW5lcik7CiAgICAgCi0g
ICAgbV9ldmVudFRhcmdldC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihFdmVudE5hbWVzOjpET01TdWJ0
cmVlTW9kaWZpZWRFdmVudCwgbV9ldmVudExpc3RlbmVyLmdldCgpLCBmYWxzZSk7CisgICAgbV9l
dmVudFRhcmdldC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuRE9NU3VidHJlZU1v
ZGlmaWVkRXZlbnQsIG1fZXZlbnRMaXN0ZW5lci5nZXQoKSwgZmFsc2UpOwogICAgIAogICAgIG1f
ZXZlbnRUYXJnZXQgPSAwOwogfQpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4MDY1KQorKysgV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAwOC0xMS0wMSAg
QWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyMDMwCisgICAgICAgIE1ha2UgRXZlbnROYW1lcyB1c2FibGUgZnJvbSBt
dWx0aXBsZSB0aHJlYWRzCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAg
ICAgICAqIFdlYlZpZXcvV2ViUERGVmlldy5tbToKKyAgICAgICAgKC1bV2ViUERGVmlldyBQREZW
aWV3V2lsbENsaWNrT25MaW5rOndpdGhVUkw6XSk6CisgICAgICAgIEFjY2VzcyBldmVudCBuYW1l
cyB2aWEgZXZlbnROYW1lcygpIGZ1bmN0aW9uLgorCiAyMDA4LTEwLTMxICBDYW1lcm9uIFp3YXJp
Y2ggIDx6d2FyaWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDM4MDY0KQorKysg
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3
ICs4Myw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL0VkaXRvckRlbGV0ZUFjdGlvbi5oPgogI2ltcG9y
dCA8V2ViQ29yZS9FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxlci5oPgot
I2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V4Y2VwdGlv
bkhhbmRsZXJzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RyYWdDb250cm9sbGVyLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERlZp
ZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERlZpZXcubW0JKHJl
dmlzaW9uIDM4MDY0KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERlZpZXcubW0JKHdvcmtp
bmcgY29weSkKQEAgLTU3LDcgKzU3LDYgQEAKICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiAK
IC8vIFJlZGVjbGFyYXRpb25zIG9mIFBERktpdCBub3RpZmljYXRpb25zLiBXZSBjYW4ndCB1c2Ug
dGhlIEFQSSBzaW5jZSB3ZSB1c2UgYSB3ZWFrIGxpbmsgdG8gdGhlIGZyYW1ld29yay4KICNkZWZp
bmUgX3dlYmtpdF9QREZWaWV3RGlzcGxheU1vZGVDaGFuZ2VkTm90aWZpY2F0aW9uIEAiUERGVmll
d0Rpc3BsYXlNb2RlQ2hhbmdlZCIKQEAgLTkzNSw3ICs5MzQsNyBAQCBzdGF0aWMgQk9PTCBfUERG
U2VsZWN0aW9uc0FyZUVxdWFsKFBERlNlCiAgICAgICAgIGNhc2UgTlNLZXlEb3duOiB7CiAgICAg
ICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQgcGUobnNFdmVudCk7CiAgICAgICAgICAgICBw
ZS5kaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpSYXdLZXlE
b3duKTsKLSAgICAgICAgICAgIGV2ZW50ID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKGtleWRvd25F
dmVudCwgdHJ1ZSwgdHJ1ZSwgMCwKKyAgICAgICAgICAgIGV2ZW50ID0gS2V5Ym9hcmRFdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQsIHRydWUsIHRydWUsIDAsCiAgICAgICAg
ICAgICAgICAgcGUua2V5SWRlbnRpZmllcigpLCBwZS53aW5kb3dzVmlydHVhbEtleUNvZGUoKSwK
ICAgICAgICAgICAgICAgICBwZS5jdHJsS2V5KCksIHBlLmFsdEtleSgpLCBwZS5zaGlmdEtleSgp
LCBwZS5tZXRhS2V5KCksIGZhbHNlKTsKICAgICAgICAgfQpAQCAtOTQzLDcgKzk0Miw3IEBAIHN0
YXRpYyBCT09MIF9QREZTZWxlY3Rpb25zQXJlRXF1YWwoUERGU2UKICAgICAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBpZiAoYnV0dG9uICE9IG5vQnV0dG9uKQotICAgICAgICBldmVudCA9IE1v
dXNlRXZlbnQ6OmNyZWF0ZShjbGlja0V2ZW50LCB0cnVlLCB0cnVlLCAwLCBbbnNFdmVudCBjbGlj
a0NvdW50XSwgMCwgMCwgMCwgMCwKKyAgICAgICAgZXZlbnQgPSBNb3VzZUV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIHRydWUsIHRydWUsIDAsIFtuc0V2ZW50IGNsaWNrQ291
bnRdLCAwLCAwLCAwLCAwLAogICAgICAgICAgICAgW25zRXZlbnQgbW9kaWZpZXJGbGFnc10gJiBO
U0NvbnRyb2xLZXlNYXNrLAogICAgICAgICAgICAgW25zRXZlbnQgbW9kaWZpZXJGbGFnc10gJiBO
U0FsdGVybmF0ZUtleU1hc2ssCiAgICAgICAgICAgICBbbnNFdmVudCBtb2RpZmllckZsYWdzXSAm
IE5TU2hpZnRLZXlNYXNrLApJbmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4MDY1KQorKysgV2ViS2l0L3dpbi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAwOC0xMS0wMSAgQWxl
eGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMDMwCisgICAgICAgIE1ha2UgRXZlbnROYW1lcyB1c2FibGUgZnJvbSBtdWx0
aXBsZSB0aHJlYWRzCisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDogKFdlYlZpZXc6OmludGVycHJl
dEtleUV2ZW50KTogQWNjZXNzIGV2ZW50IG5hbWVzIHZpYSBldmVudE5hbWVzKCkgZnVuY3Rpb24u
CisKIDIwMDgtMTAtMzEgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgpJbmRleDogV2ViS2l0L3dpbi9XZWJWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiAzODA2NCkK
KysrIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQs
NiBAQAogI2luY2x1ZGUgPHdpbmRvd3N4Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkV2ZW50TmFtZXM7CiB1c2luZyBKU0M6OkpTTG9jazsK
IHVzaW5nIHN0ZDo6bWluOwogdXNpbmcgc3RkOjptYXg7CkBAIC0xNDM2LDcgKzE0MzUsNyBAQCBz
dGF0aWMgY29uc3QgS2V5UHJlc3NFbnRyeSBrZXlQcmVzc0VudHJpCiAKIGNvbnN0IGNoYXIqIFdl
YlZpZXc6OmludGVycHJldEtleUV2ZW50KGNvbnN0IEtleWJvYXJkRXZlbnQqIGV2dCkKIHsKLSAg
ICBBU1NFUlQoZXZ0LT50eXBlKCkgPT0ga2V5ZG93bkV2ZW50IHx8IGV2dC0+dHlwZSgpID09IGtl
eXByZXNzRXZlbnQpOworICAgIEFTU0VSVChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5
ZG93bkV2ZW50IHx8IGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KTsK
IAogICAgIHN0YXRpYyBIYXNoTWFwPGludCwgY29uc3QgY2hhcio+KiBrZXlEb3duQ29tbWFuZHNN
YXAgPSAwOwogICAgIHN0YXRpYyBIYXNoTWFwPGludCwgY29uc3QgY2hhcio+KiBrZXlQcmVzc0Nv
bW1hbmRzTWFwID0gMDsKQEAgLTE0NjAsNyArMTQ1OSw3IEBAIGNvbnN0IGNoYXIqIFdlYlZpZXc6
OmludGVycHJldEtleUV2ZW50KGMKICAgICBpZiAoZXZ0LT5jdHJsS2V5KCkpCiAgICAgICAgIG1v
ZGlmaWVycyB8PSBDdHJsS2V5OwogCi0gICAgaWYgKGV2dC0+dHlwZSgpID09IGtleWRvd25FdmVu
dCkgeworICAgIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSB7
CiAgICAgICAgIGludCBtYXBLZXkgPSBtb2RpZmllcnMgPDwgMTYgfCBldnQtPmtleUNvZGUoKTsK
ICAgICAgICAgcmV0dXJuIG1hcEtleSA/IGtleURvd25Db21tYW5kc01hcC0+Z2V0KG1hcEtleSkg
OiAwOwogICAgIH0K
</data>
<flag name="review"
          id="11372"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>