<?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>23867</bug_id>
          
          <creation_ts>2009-02-10 08:04:38 -0800</creation_ts>
          <short_desc>Eliminate obsolete frame-&gt;document() checks</short_desc>
          <delta_ts>2009-02-10 09:33:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>109112</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-10 08:04:38 -0800</bug_when>
    <thetext>Every frame always has a document now (except construction/teardown time). Most checks for document being non-null come from earlier times, when this wasn&apos;t the case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109113</commentid>
    <comment_count>1</comment_count>
      <attachid>27519</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-10 08:18:58 -0800</bug_when>
    <thetext>Created attachment 27519
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109118</commentid>
    <comment_count>2</comment_count>
      <attachid>27519</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-10 08:55:54 -0800</bug_when>
    <thetext>Comment on attachment 27519
proposed patch

Should Frame::document() also assert that it&apos;s non-zero? I guess that&apos;s not critical since it will probably crash a moment later when the document pointer is used.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109123</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-10 09:33:52 -0800</bug_when>
    <thetext>Committed revision 40824.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27519</attachid>
            <date>2009-02-10 08:18:58 -0800</date>
            <delta_ts>2009-02-10 08:55:54 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>NoDocumentChecks.txt</filename>
            <type>text/plain</type>
            <size>74798</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDgyMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTc1IEBACisyMDA5LTAyLTEwICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM4NjcKKyAgICAgICAg
RWxpbWluYXRlIG9ic29sZXRlIGZyYW1lLT5kb2N1bWVudCgpIGNoZWNrcworCisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuY3BwOiAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKTog
QXBwYXJlbnRseSBkdWUgdG8gYSB0eXBvCisgICAgICAgIChkb2N1bWVudCB2cy4gIWRvY3VtZW50
KSwgZmlsbFdpdGhSZWQgd2FzIGFsd2F5cyBzZXQgdG8gZmFsc2UsIGFuZCBvdGhlciBicmFuY2hl
cyB3ZXJlCisgICAgICAgIG5ldmVyIHRha2VuLiBSZW1vdmluZyB0aGUgY2hlY2sgZm9yIGRvY3Vt
ZW50IHJlc3RvcmVzIGRlYnVnLW9ubHkgcmVkIGNvbG9yIGZpbGxpbmcuCisKKyAgICAgICAgKiBs
b2FkZXIvRnJhbWVMb2FkZXIuY3BwOiAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmJlZ2luKTogT25s
eSBjYWxsIGRpc3BhdGNoV2luZG93T2JqZWN0QXZhaWxhYmxlKCkKKyAgICAgICAgYWZ0ZXIgYSBk
b2N1bWVudCBpcyBjcmVhdGVkLiBBIGNsaWVudCBjYW4gZG8gYW55dGhpbmcgaW4gaXRzIGRlbGVn
YXRlIG1ldGhvZCwgc28gd2UnZCBuZWVkCisgICAgICAgIHRvIGhhdmUgZnJhbWUtPmRvY3VtZW50
KCkgY2hlY2tzIG90aGVyd2lzZS4gRHVtcFJlbmRlclRyZWUgdXNlcyB0aGlzIGRlbGVnYXRlIHRv
IGFkZCBpdHMKKyAgICAgICAgY3VzdG9tIHByb3BlcnR5LCBhbmQgaXQgd2FzIGNyYXNoaW5nIGR1
ZSB0byBudWxsIGRvY3VtZW50IGluIEpTRE9NV2luZG93QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90
KCkKKyAgICAgICAgb3RlaHJ3aXNlLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5k
b3dCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Z2V0T3duUHJv
cGVydHlTbG90KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
bmVlZHNZb3VUdWJlUXVpcmspOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChXZWJD
b3JlOjp1cGRhdGVSZW5kZXJpbmdGb3JCaW5kaW5ncyk6CisgICAgICAgICogZG9tL0RvY3VtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojppbml0U2VjdXJpdHlDb250ZXh0KToK
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmRlbGV0ZVdpdGhEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkaXNwYXRj
aENQUEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGUpOgorICAgICAgICAqIGVk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkNvbW1h
bmQ6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpDb21tYW5kOjppc0VuYWJs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpDb21tYW5kOjpzdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQ6OnZhbHVlKToKKyAgICAgICAgKiBlZGl0aW5nL1Nl
bGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJv
bGxlcjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNv
bnRyb2xsZXI6OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVjdEFsbCk6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRGb2N1c2VkKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRS
ZXNvdXJjZURvY3VtZW50Tm9kZSk6CisgICAgICAgICogaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1
Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNl
dEphdmFTY3JpcHRQYXVzZWQpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjYW5vbmljYWxpemVkVGl0bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRMb2FkZXI6OnN0b3BMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyOjppc0xvYWRpbmdJbkFQSVNlbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyOjpzdWJyZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRl
cjo6Z2V0U3VicmVzb3VyY2VzKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnVybFNlbGVjdGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
OjppY29uVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpleGVjdXRlSWZKYXZh
U2NyaXB0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjbGVhcik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6ZW5kSWZOb3RMb2FkaW5nTWFpblJlc291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpyZXN0b3JlRG9jdW1lbnRTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Z290b0FuY2hvcik6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6bG9hZERvbmUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OmNoZWNrQ29tcGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjaGVj
a0NhbGxJbXBsaWNpdENsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzY2hl
ZHVsZVJlZnJlc2gpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Om91dGdvaW5nT3Jp
Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjYW5DYWNoZVBhZ2VDb250YWlu
aW5nVGhpc0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpsb2dDYW5DYWNo
ZUZyYW1lRGVjaXNpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnVwZGF0ZVBv
bGljeUJhc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnNldFBvbGljeUJh
c2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmZyYW1lRGV0YWNoZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnNob3VsZFNjcm9sbFRvQW5jaG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzYXZlRG9jdW1lbnRTdGF0ZSk6CisgICAgICAg
ICogbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUpOgorICAgICAgICAqIGxvYWRlci9pY29uL0lj
b25GZXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okljb25GZXRjaGVyOjpjcmVhdGUpOgor
ICAgICAgICAqIGxvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SWNvbkxvYWRlcjo6c3RhcnRMb2FkaW5nKToKKyAgICAgICAgKiBwYWdlL0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQpOgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cExvYWREZWZlcnJlcjo6UGFnZUdyb3VwTG9h
ZERlZmVycmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cExvYWREZWZlcnJlcjo6flBh
Z2VHcm91cExvYWREZWZlcnJlcik6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpzZXNzaW9uU3RvcmFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpET01XaW5kb3c6OmFsZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6Y29u
ZmlybSk6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnByb21wdCk6CisgICAgICAgIChX
ZWJDb3JlOjpET01XaW5kb3c6OnNjcm9sbFgpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93
OjpzY3JvbGxZKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6Z2V0TWF0Y2hlZENTU1J1
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6b3BlbkRhdGFiYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6RE9N
V2luZG93OjpzY3JvbGxUbyk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjphbGxvd0RIVE1MRHJhZyk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNjcm9sbE92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VEb3VibGVDbGlja0V2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudEhhbmRsZXI6OnVwZGF0ZURyYWdBbmREcm9wKToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6Y2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6c2VuZFJlc2l6ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6c2VuZFNjcm9sbEV2ZW50KToKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZWVwRm9jdXNhYmxlTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1cyk6CisgICAgICAgICogcGFn
ZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0Rm9jdXNlZE5vZGVJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2hvdWxkQXBwbHlUZXh0Wm9vbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2hvdWxkQXBwbHlQYWdlWm9vbSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZTo6c2V0Wm9vbUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6
c2V0UHJpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlYXBwbHlTdHlsZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmlzQ29udGVudEVkaXRhYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWU6OnNlbGVjdGlvbkNvbXB1dGVkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6OmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZTo6cmVtb3ZlRWRpdGluZ1N0eWxlRnJvbUJvZHlFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lOjpjb250ZW50UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnN0
eWxlRm9yU2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldFNlbGVj
dGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpmaW5kU3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lOjptYXJrQWxsTWF0Y2hlc0ZvclRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWU6OnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWU6OmRvY3VtZW50VHlwZVN0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZTo6c2hvdWxkQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6fkZyYW1lVmlldyk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVZpZXc6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZp
ZXc6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmxheW91dFRpbWVyRmly
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzY2hlZHVsZVJlbGF5b3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6bmVlZHNMYXlvdXQpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVWaWV3Ojp1bnNjaGVkdWxlUmVsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3Ojp3aW5kb3dDbGlwUmVjdCk6CisgICAgICAgICogcGFnZS9HZW9sb2NhdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6ZGlzY29ubmVjdEZyYW1lKToKKyAgICAg
ICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV0d29ya1N0YXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp+UGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlOjp1bm1hcmtBbGxUZXh0TWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRN
ZWRpYVZvbHVtZSk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBk
YXRlUmVuZGVyaW5nRGlzcGF0Y2hlckZpcmVkKToKKyAgICAgICAgKiBwYWdlL21hYy9FdmVudEhh
bmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmN1cnJlbnRLZXli
b2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6bmVlZHNLZXlib2Fy
ZEV2ZW50RGlzYW1iaWd1YXRpb25RdWlya3MpOgorICAgICAgICAqIHBhZ2UvbWFjL0ZyYW1lTWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRhc2hib2FyZFJlZ2lvbnNEaWN0aW9uYXJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXRVc2VyU3R5bGVTaGVldCk6CisgICAgICAgICog
c3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3Rv
cmFnZUFyZWE6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KToKKyAgICAgICAgKiBzdG9yYWdlL1Nlc3Np
b25TdG9yYWdlQXJlYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXNzaW9uU3RvcmFnZUFyZWE6
OmRpc3BhdGNoU3RvcmFnZUV2ZW50KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OnNldENvbnRhaW5lclNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OnVzZXNDb250YWluZXJTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ltYWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpoYXNS
ZWxhdGl2ZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpoYXNSZWxhdGl2ZUhl
aWdodCk6CisgICAgICAgIFJlbW92ZWQgZnJhbWUtPmRvY3VtZW50KCkgY2hlY2tzLgorCiAyMDA5
LTAyLTEwICBBZGFtIFRyZWF0ICA8YWRhbS50cmVhdEB0b3JjaG1vYmlsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgR2VvcmdlIFN0YWlrb3MuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lvbiA0MDgxNCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA5LDcgKzYwOSw3IEBA
IGJvb2wgSlNET01XaW5kb3dCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QKIAogICAgIC8vIEFsbG93
IHNob3J0Y3V0cyBsaWtlICdJbWFnZTEnIGluc3RlYWQgb2YgZG9jdW1lbnQuaW1hZ2VzLkltYWdl
MQogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGltcGwoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsK
LSAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpIHsKKyAgICBp
ZiAoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpIHsKICAgICAgICAgQXRvbWljU3RyaW5nSW1w
bCogYXRvbWljUHJvcGVydHlOYW1lID0gQXRvbWljU3RyaW5nOjpmaW5kKHByb3BlcnR5TmFtZSk7
CiAgICAgICAgIGlmIChhdG9taWNQcm9wZXJ0eU5hbWUgJiYgKHN0YXRpY19jYXN0PEhUTUxEb2N1
bWVudCo+KGRvY3VtZW50KS0+aGFzTmFtZWRJdGVtKGF0b21pY1Byb3BlcnR5TmFtZSkgfHwgZG9j
dW1lbnQtPmhhc0VsZW1lbnRXaXRoSWQoYXRvbWljUHJvcGVydHlOYW1lKSkpIHsKICAgICAgICAg
ICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5hbWVkSXRlbUdldHRlcik7CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNDA4MTQpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjY4LDEwICsyNjgsOCBAQCBKU1ZhbHVlUHRyIEpTRE9NV2luZG93OjphZGRFdmVudExpc3Rl
bmVyCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAg
ICBpZiAoUmVmUHRyPEpTRXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBmaW5kT3JDcmVhdGVKU0V2
ZW50TGlzdGVuZXIoZXhlYywgYXJncy5hdChleGVjLCAxKSkpIHsKLSAgICAgICAgaWYgKERvY3Vt
ZW50KiBkb2MgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGRvYy0+YWRkV2luZG93
RXZlbnRMaXN0ZW5lcihBdG9taWNTdHJpbmcoYXJncy5hdChleGVjLCAwKS50b1N0cmluZyhleGVj
KSksIGxpc3RlbmVyLnJlbGVhc2UoKSwgYXJncy5hdChleGVjLCAyKS50b0Jvb2xlYW4oZXhlYykp
OwotICAgIH0KKyAgICBpZiAoUmVmUHRyPEpTRXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBmaW5k
T3JDcmVhdGVKU0V2ZW50TGlzdGVuZXIoZXhlYywgYXJncy5hdChleGVjLCAxKSkpCisgICAgICAg
IGZyYW1lLT5kb2N1bWVudCgpLT5hZGRXaW5kb3dFdmVudExpc3RlbmVyKEF0b21pY1N0cmluZyhh
cmdzLmF0KGV4ZWMsIDApLnRvU3RyaW5nKGV4ZWMpKSwgbGlzdGVuZXIucmVsZWFzZSgpLCBhcmdz
LmF0KGV4ZWMsIDIpLnRvQm9vbGVhbihleGVjKSk7CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KQEAgLTI4MiwxMCArMjgwLDggQEAgSlNWYWx1ZVB0ciBKU0RPTVdpbmRvdzo6cmVtb3Zl
RXZlbnRMaXN0ZQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCi0gICAgaWYgKEpTRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBmaW5kSlNFdmVudExpc3Rl
bmVyKGFyZ3MuYXQoZXhlYywgMSkpKSB7Ci0gICAgICAgIGlmIChEb2N1bWVudCogZG9jID0gZnJh
bWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICBkb2MtPnJlbW92ZVdpbmRvd0V2ZW50TGlzdGVu
ZXIoQXRvbWljU3RyaW5nKGFyZ3MuYXQoZXhlYywgMCkudG9TdHJpbmcoZXhlYykpLCBsaXN0ZW5l
ciwgYXJncy5hdChleGVjLCAyKS50b0Jvb2xlYW4oZXhlYykpOwotICAgIH0KKyAgICBpZiAoSlNF
dmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IGZpbmRKU0V2ZW50TGlzdGVuZXIoYXJncy5hdChleGVj
LCAxKSkpCisgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5yZW1vdmVXaW5kb3dFdmVudExpc3Rl
bmVyKEF0b21pY1N0cmluZyhhcmdzLmF0KGV4ZWMsIDApLnRvU3RyaW5nKGV4ZWMpKSwgbGlzdGVu
ZXIsIGFyZ3MuYXQoZXhlYywgMikudG9Cb29sZWFuKGV4ZWMpKTsKIAogICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3Rv
bS5jcHAJKHJldmlzaW9uIDQwODE0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRv
ckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDEwICs3Niw2IEBAIHN0YXRpYyBib29s
IG5lZWRzWW91VHViZVF1aXJrKEV4ZWNTdGF0ZSoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgLy8gRklYTUU6
IFRoZSBkb2N1bWVudCBpcyBuZXZlciBudWxsLCBzbyB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgY2hl
Y2sgYWxvbmcgd2l0aCB0aGUKLSAgICAvLyBvdGhlciBzaW1pbGFyIG9uZXMgaW4gdGhpcyBmaWxl
IHdoZW4gd2UgYXJlIGFic29sdXRlbHkgc3VyZSBpdCdzIHNhZmUuCi0gICAgaWYgKCFkb2N1bWVu
dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRG8gdGhlIHF1aXJrIG9ubHkgb24g
dGhlIGZyb250IHBhZ2Ugb2YgdGhlIGdsb2JhbCB2ZXJzaW9uIG9mIFlvdVR1YmUuCiAgICAgY29u
c3QgS1VSTCYgdXJsID0gZG9jdW1lbnQtPnVybCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY2hlZHVsZWRBY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
U2NoZWR1bGVkQWN0aW9uLmNwcAkocmV2aXNpb24gNDA4MTQpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw4ICsxMzIsNyBA
QCB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZShEb2N1bWVudCogCiAgICAgLy8gRklYTUU6
IElzIHRoaXMgcmVhbGx5IHRoZSByaWdodCBwb2ludCB0byBkbyB0aGUgdXBkYXRlPyBXZSBuZWVk
IGEgcGxhY2UgdGhhdCB3b3JrcwogICAgIC8vIGZvciBhbGwgcG9zc2libGUgZW50cnkgcG9pbnRz
IHRoYXQgbWlnaHQgcG9zc2libHkgZXhlY3V0ZSBzY3JpcHQsIGJ1dCB0aGlzIHNlZW1zCiAgICAg
Ly8gdG8gYmUgYSBiaXQgdG9vIGxvdy1sZXZlbC4KLSAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50
ID0gZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgIGRvY3VtZW50LT51cGRhdGVSZW5kZXJpbmco
KTsKKyAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlUmVuZGVyaW5nKCk7CiAKICAgICBmcmFt
ZS0+c2NyaXB0KCktPnNldFByb2Nlc3NpbmdUaW1lckNhbGxiYWNrKGZhbHNlKTsKIH0KSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDQw
ODE0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTcsMTEgKzE1Nyw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZVJlbmRlcmlu
Z0ZvckJpbmRpbmdzKEoKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBkb2N1bWVudC0+dXBkYXRlUmVuZGVyaW5nKCk7Cisg
ICAgZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZVJlbmRlcmluZygpOwogfQogCiB2b2lkIFNjcmlw
dENvbnRyb2xsZXI6OmluaXRKYXZhSlNCaW5kaW5ncygpCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lv
biA0MDgxNCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDE1OCw3ICs0MTU4LDcgQEAgdm9pZCBEb2N1bWVudDo6aW5pdFNlY3VyaXR5Q29udGV4dCgpCiAg
ICAgaWYgKCFvd25lckZyYW1lKQogICAgICAgICBvd25lckZyYW1lID0gbV9mcmFtZS0+bG9hZGVy
KCktPm9wZW5lcigpOwogCi0gICAgaWYgKG93bmVyRnJhbWUgJiYgb3duZXJGcmFtZS0+ZG9jdW1l
bnQoKSkgeworICAgIGlmIChvd25lckZyYW1lKSB7CiAgICAgICAgIG1fY29va2llVVJMID0gb3du
ZXJGcmFtZS0+ZG9jdW1lbnQoKS0+Y29va2llVVJMKCk7CiAgICAgICAgIC8vIFdlIGFsaWFzIHRo
ZSBTZWN1cml0eU9yaWdpbnMgdG8gbWF0Y2ggRmlyZWZveCwgc2VlIEJ1ZyAxNTMxMwogICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzMTMKSW5kZXg6
IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCShyZXZpc2lvbiA0MDgxNCkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNyArMjIyLDcgQEAgYm9vbCBFZGl0b3I6OmlzU2Vs
ZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRQogCiBib29sIEVkaXRvcjo6ZGVsZXRlV2l0aERpcmVjdGlv
bihTZWxlY3Rpb25Db250cm9sbGVyOjpFRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4dEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5LCBib29sIGtpbGxSaW5nLCBib29sIGlzVHlwaW5nQWN0aW9uKQogewot
ICAgIGlmICghY2FuRWRpdCgpIHx8ICFtX2ZyYW1lLT5kb2N1bWVudCgpKQorICAgIGlmICghY2Fu
RWRpdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9mcmFtZS0+c2VsZWN0
aW9uKCktPmlzUmFuZ2UoKSkgewpAQCAtNjg5LDcgKzY4OSw3IEBAIHZvaWQgRWRpdG9yOjpjbGVh
ckxhc3RFZGl0Q29tbWFuZCgpIAogYm9vbCBFZGl0b3I6OmRpc3BhdGNoQ1BQRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nICZldmVudFR5cGUsIENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3kpCiB7
CiAgICAgTm9kZSogdGFyZ2V0ID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCkuZWxlbWVu
dCgpOwotICAgIGlmICghdGFyZ2V0ICYmIG1fZnJhbWUtPmRvY3VtZW50KCkpCisgICAgaWYgKCF0
YXJnZXQpCiAgICAgICAgIHRhcmdldCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmJvZHkoKTsKICAg
ICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC03MTgsNyArNzE4LDcgQEAg
dm9pZCBFZGl0b3I6OmFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdAogICAgICAgICAgICAgbV9m
cmFtZS0+Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246OlJhbmdlU2Vs
ZWN0aW9uOgotICAgICAgICAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkgJiYgc3R5bGUpCisg
ICAgICAgICAgICBpZiAoc3R5bGUpCiAgICAgICAgICAgICAgICAgYXBwbHlDb21tYW5kKEFwcGx5
U3R5bGVDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgc3R5bGUsIGVkaXRpbmdB
Y3Rpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTczNyw3ICs3MzcsNyBAQCB2
b2lkIEVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZShDU1NTdHlsCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbjoKICAgICAg
ICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKLSAgICAgICAgICAgIGlm
IChtX2ZyYW1lLT5kb2N1bWVudCgpICYmIHN0eWxlKQorICAgICAgICAgICAgaWYgKHN0eWxlKQog
ICAgICAgICAgICAgICAgIGFwcGx5Q29tbWFuZChBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKG1f
ZnJhbWUtPmRvY3VtZW50KCksIHN0eWxlLCBlZGl0aW5nQWN0aW9uLCBBcHBseVN0eWxlQ29tbWFu
ZDo6Rm9yY2VCbG9ja1Byb3BlcnRpZXMpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDQwODE0KQorKysgV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQzLDcgKzE0
NDMsNyBAQCBib29sIEVkaXRvcjo6Q29tbWFuZDo6ZXhlY3V0ZShjb25zdCBTdHJpCiB7CiAgICAg
aWYgKCFpc0VuYWJsZWQodHJpZ2dlcmluZ0V2ZW50KSkgewogICAgICAgICAvLyBMZXQgY2VydGFp
biBjb21tYW5kcyBiZSBleGVjdXRlZCB3aGVuIHBlcmZvcm1lZCBleHBsaWNpdGx5IGV2ZW4gaWYg
dGhleSBhcmUgZGlzYWJsZWQuCi0gICAgICAgIGlmICghaXNTdXBwb3J0ZWQoKSB8fCAhbV9mcmFt
ZSB8fCAhbV9mcmFtZS0+ZG9jdW1lbnQoKSB8fCAhbV9jb21tYW5kLT5hbGxvd0V4ZWN1dGlvbldo
ZW5EaXNhYmxlZCkKKyAgICAgICAgaWYgKCFpc1N1cHBvcnRlZCgpIHx8ICFtX2ZyYW1lIHx8ICFt
X2NvbW1hbmQtPmFsbG93RXhlY3V0aW9uV2hlbkRpc2FibGVkKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKQEAgLTE0NjIsMjEgKzE0NjIsMjEgQEAgYm9vbCBFZGl0
b3I6OkNvbW1hbmQ6OmlzU3VwcG9ydGVkKCkgY29ucwogCiBib29sIEVkaXRvcjo6Q29tbWFuZDo6
aXNFbmFibGVkKEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFpc1N1
cHBvcnRlZCgpIHx8ICFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5kb2N1bWVudCgpKQorICAgIGlmICgh
aXNTdXBwb3J0ZWQoKSB8fCAhbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJl
dHVybiBtX2NvbW1hbmQtPmlzRW5hYmxlZChtX2ZyYW1lLmdldCgpLCB0cmlnZ2VyaW5nRXZlbnQs
IG1fc291cmNlKTsKIH0KIAogVHJpU3RhdGUgRWRpdG9yOjpDb21tYW5kOjpzdGF0ZShFdmVudCog
dHJpZ2dlcmluZ0V2ZW50KSBjb25zdAogewotICAgIGlmICghaXNTdXBwb3J0ZWQoKSB8fCAhbV9m
cmFtZSB8fCAhbV9mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICBpZiAoIWlzU3VwcG9ydGVkKCkgfHwg
IW1fZnJhbWUpCiAgICAgICAgIHJldHVybiBGYWxzZVRyaVN0YXRlOwogICAgIHJldHVybiBtX2Nv
bW1hbmQtPnN0YXRlKG1fZnJhbWUuZ2V0KCksIHRyaWdnZXJpbmdFdmVudCk7CiB9CiAKIFN0cmlu
ZyBFZGl0b3I6OkNvbW1hbmQ6OnZhbHVlKEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpIGNvbnN0CiB7
Ci0gICAgaWYgKCFpc1N1cHBvcnRlZCgpIHx8ICFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5kb2N1bWVu
dCgpKQorICAgIGlmICghaXNTdXBwb3J0ZWQoKSB8fCAhbV9mcmFtZSkKICAgICAgICAgcmV0dXJu
IFN0cmluZygpOwogICAgIHJldHVybiBtX2NvbW1hbmQtPnZhbHVlKG1fZnJhbWUuZ2V0KCksIHRy
aWdnZXJpbmdFdmVudCk7CiB9CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xs
ZXIuY3BwCShyZXZpc2lvbiA0MDgxNCkKKysrIFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250
cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMwLDcgKzgzMCw3IEBAIEludFJlY3QgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6Y2FyZXRSZXBhaW4KIAogYm9vbCBTZWxlY3Rpb25Db250cm9sbGVy
OjpyZWNvbXB1dGVDYXJldFJlY3QoKQogewotICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+
ZG9jdW1lbnQoKSkKKyAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgCiAgICAgRnJhbWVWaWV3KiB2ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dmlldygpOwpA
QCAtMTA0Myw4ICsxMDQzLDYgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZWxlY3RGcmFt
ZUVsZQogCiAgICAgLy8gR2V0IHRvIHRoZSA8aWZyYW1lPiBvciA8ZnJhbWU+IChvciBldmVuIDxv
YmplY3Q+KSBlbGVtZW50IGluIHRoZSBwYXJlbnQgZnJhbWUuCiAgICAgRG9jdW1lbnQqIGRvYyA9
IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2MpCi0gICAgICAgIHJldHVybjsKICAg
ICBFbGVtZW50KiBvd25lckVsZW1lbnQgPSBkb2MtPm93bmVyRWxlbWVudCgpOwogICAgIGlmICgh
b3duZXJFbGVtZW50KQogICAgICAgICByZXR1cm47CkBAIC0xMDcyLDggKzEwNzAsNiBAQCB2b2lk
IFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVjdEZyYW1lRWxlCiB2b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OnNlbGVjdEFsbCgpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+
ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm47CiAgICAgCiAg
ICAgaWYgKGRvY3VtZW50LT5mb2N1c2VkTm9kZSgpICYmIGRvY3VtZW50LT5mb2N1c2VkTm9kZSgp
LT5jYW5TZWxlY3RBbGwoKSkgewogICAgICAgICBkb2N1bWVudC0+Zm9jdXNlZE5vZGUoKS0+c2Vs
ZWN0QWxsKCk7CkBAIC0xMjA3LDggKzEyMDMsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OnNldEZvY3VzZWQoYm9vCiAKICAgICBmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKTsKIAot
ICAgIGlmIChEb2N1bWVudCogZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgZG9j
LT5kaXNwYXRjaFdpbmRvd0V2ZW50KGZsYWcgPyBldmVudE5hbWVzKCkuZm9jdXNFdmVudCA6IGV2
ZW50TmFtZXMoKS5ibHVyRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+ZGlzcGF0Y2hXaW5kb3dFdmVudChmbGFnID8gZXZlbnROYW1lcygpLmZvY3VzRXZlbnQg
OiBldmVudE5hbWVzKCkuYmx1ckV2ZW50LCBmYWxzZSwgZmFsc2UpOwogfQogCiBib29sIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OmlzRm9jdXNlZEFuZEFjdGl2ZSgpIGNvbnN0CkluZGV4OiBXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNDA4MTQpCisrKyBX
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjY4LDggKzY2OCw2IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldFJlc291cmNlRG9jdW1lbnRO
b2QKICAgICBGcmFtZSogZnJhbWUgPSByZXNvdXJjZS0+ZnJhbWUuZ2V0KCk7CiAKICAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQot
ICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogCiAgICAgaWYgKGRvY3VtZW50LT5pc1BsdWdpbkRv
Y3VtZW50KCkgfHwgZG9jdW1lbnQtPmlzSW1hZ2VEb2N1bWVudCgpIHx8IGRvY3VtZW50LT5pc01l
ZGlhRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKSW5kZXg6IFdlYkNvcmUv
aW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9pbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gNDA4MTQpCisr
KyBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjMsMTIgKzM2MywxMSBAQCB2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0
SmF2YVNjcmlwCiAKICAgICBmcmFtZS0+c2NyaXB0KCktPnNldFBhdXNlZChwYXVzZWQpOwogCi0g
ICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKSB7Ci0gICAgICAg
IGlmIChwYXVzZWQpCi0gICAgICAgICAgICBkb2N1bWVudC0+c3VzcGVuZEFjdGl2ZURPTU9iamVj
dHMoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZG9jdW1lbnQtPnJlc3VtZUFjdGl2ZURP
TU9iamVjdHMoKTsKLSAgICB9CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3Vt
ZW50KCk7CisgICAgaWYgKHBhdXNlZCkKKyAgICAgICAgZG9jdW1lbnQtPnN1c3BlbmRBY3RpdmVE
T01PYmplY3RzKCk7CisgICAgZWxzZQorICAgICAgICBkb2N1bWVudC0+cmVzdW1lQWN0aXZlRE9N
T2JqZWN0cygpOwogCiAgICAgc2V0SmF2YVNjcmlwdFBhdXNlZChmcmFtZS0+dmlldygpLCBwYXVz
ZWQpOwogfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkocmV2aXNpb24gNDA4MTQp
CisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNCw4ICsxMTQsNyBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBjYW5vbmljYWxpemVkVGl0bGUo
CiAgICAgYnVmZmVyLnNocmluayhidWlsZGVySW5kZXggKyAxKTsKICAgICAKICAgICAvLyBSZXBs
YWNlIHRoZSBiYWNrc2xhc2hlcyB3aXRoIGN1cnJlbmN5IHN5bWJvbHMgaWYgdGhlIGVuY29kaW5n
IHJlcXVpcmVzIGl0LgotICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgZnJhbWUt
PmRvY3VtZW50KCktPmRpc3BsYXlCdWZmZXJNb2RpZmllZEJ5RW5jb2RpbmcoYnVmZmVyLmNoYXJh
Y3RlcnMoKSwgYnVmZmVyLmxlbmd0aCgpKTsKKyAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+ZGlzcGxh
eUJ1ZmZlck1vZGlmaWVkQnlFbmNvZGluZyhidWZmZXIuY2hhcmFjdGVycygpLCBidWZmZXIubGVu
Z3RoKCkpOwogCiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoYnVmZmVyKTsKIH0KQEAgLTI5Miw3
ICsyOTEsNyBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpzdG9wTG9hZGluZygpCiAgICAgICAgIC8v
IHN0aWxsICBwYXJzaW5nLiBGYWlsdXJlIHRvIGRvIHNvIGNhbiBjYXVzZSBhIHdvcmxkIGxlYWsu
CiAgICAgICAgIERvY3VtZW50KiBkb2MgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwogICAgICAgICAK
LSAgICAgICAgaWYgKGxvYWRpbmcgfHwgKGRvYyAmJiBkb2MtPnBhcnNpbmcoKSkpCisgICAgICAg
IGlmIChsb2FkaW5nIHx8IGRvYy0+cGFyc2luZygpKQogICAgICAgICAgICAgbV9mcmFtZS0+bG9h
ZGVyKCktPnN0b3BMb2FkaW5nKGZhbHNlKTsKICAgICB9CiAKQEAgLTQ2OCwxMyArNDY3LDEyIEBA
IGJvb2wgRG9jdW1lbnRMb2FkZXI6OmlzTG9hZGluZ0luQVBJU2Vuc2UKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICBpZiAoIW1fc3VicmVzb3VyY2VMb2FkZXJzLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoRG9jdW1lbnQqIGRvYyA9IG1f
ZnJhbWUtPmRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChkb2MtPmRvY0xvYWRlcigpLT5y
ZXF1ZXN0Q291bnQoKSkKKyAgICAgICAgRG9jdW1lbnQqIGRvYyA9IG1fZnJhbWUtPmRvY3VtZW50
KCk7CisgICAgICAgIGlmIChkb2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0Q291bnQoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoVG9rZW5pemVyKiB0b2sgPSBkb2MtPnRv
a2VuaXplcigpKQorICAgICAgICAgICAgaWYgKHRvay0+cHJvY2Vzc2luZ0RhdGEoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChUb2tlbml6ZXIqIHRvayA9
IGRvYy0+dG9rZW5pemVyKCkpCi0gICAgICAgICAgICAgICAgaWYgKHRvay0+cHJvY2Vzc2luZ0Rh
dGEoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KICAgICB9
CiAgICAgcmV0dXJuIGZyYW1lTG9hZGVyKCktPnN1YmZyYW1lSXNMb2FkaW5nKCk7CiB9CkBAIC01
NTIsOCArNTUwLDYgQEAgUGFzc1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IERvY3VtZW50TG9hZAog
ICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBEb2N1bWVudCogZG9jID0gbV9mcmFtZS0+ZG9j
dW1lbnQoKTsKLSAgICBpZiAoIWRvYykKLSAgICAgICAgcmV0dXJuIGFyY2hpdmVSZXNvdXJjZUZv
clVSTCh1cmwpOwogICAgICAgICAKICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBkb2Mt
PmRvY0xvYWRlcigpLT5jYWNoZWRSZXNvdXJjZSh1cmwpOwogICAgIGlmICghcmVzb3VyY2UgfHwg
cmVzb3VyY2UtPnByZWxvYWRSZXN1bHQoKSA9PSBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZFJlZmVy
ZW5jZWQpCkBAIC01NjgsOCArNTY0LDYgQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6Z2V0U3VicmVz
b3VyY2VzKFZlYwogICAgICAgICByZXR1cm47CiAKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsK
IAogICAgIGNvbnN0IERvY0xvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcCYgYWxsUmVzb3VyY2Vz
ID0gZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5hbGxDYWNoZWRSZXNvdXJjZXMoKTsKICAgICBEb2NM
b2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFsbFJlc291
cmNlcy5lbmQoKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDQwODE0KQor
KysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTAs
NyArNDEwLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6dXJsU2VsZWN0ZWQoY29uc3QgUmVzbwogICAg
ICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgdGFyZ2V0ID0gX3RhcmdldDsKLSAgICBpZiAodGFy
Z2V0LmlzRW1wdHkoKSAmJiBtX2ZyYW1lLT5kb2N1bWVudCgpKQorICAgIGlmICh0YXJnZXQuaXNF
bXB0eSgpKQogICAgICAgICB0YXJnZXQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVGFyZ2V0
KCk7CiAKICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lUmVxdWVzdChyZXF1ZXN0LCB0YXJnZXQp
OwpAQCAtNjQ1LDE2ICs2NDUsMTAgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c3RvcCgpCiAgICAgLy8g
VGhlIGZyYW1lJ3MgbGFzdCByZWYgbWF5IGJlIHJlbW92ZWQgYW5kIGl0IHdpbGwgYmUgZGVsZXRl
ZCBieSBjaGVja0NvbXBsZXRlZCgpLgogICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9yKG1fZnJh
bWUpOwogICAgIAotICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpKSB7Ci0gICAgICAgIGlmICht
X2ZyYW1lLT5kb2N1bWVudCgpLT50b2tlbml6ZXIoKSkKLSAgICAgICAgICAgIG1fZnJhbWUtPmRv
Y3VtZW50KCktPnRva2VuaXplcigpLT5zdG9wUGFyc2luZygpOwotICAgICAgICBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5maW5pc2hQYXJzaW5nKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIC8vIFdlYktp
dCBwYXJ0aWFsbHkgdXNlcyBXZWJDb3JlIHdoZW4gbG9hZGluZyBub24tSFRNTCBkb2NzLiAgSW4g
dGhlc2UgY2FzZXMgZG9jPT1uaWwsIGJ1dAotICAgICAgICAvLyBXZWJDb3JlIGlzIGVub3VnaCBp
bnZvbHZlZCB0aGF0IHdlIG5lZWQgdG8gY2hlY2tDb21wbGV0ZWQoKSBpbiBvcmRlciBmb3IgbV9i
Q29tcGxldGUgdG8KLSAgICAgICAgLy8gYmVjb21lIHRydWUuIEFuIGV4YW1wbGUgaXMgd2hlbiBh
IHN1YmZyYW1lIGlzIGEgcHVyZSB0ZXh0IGRvYywgYW5kIHRoYXQgc3ViZnJhbWUgaXMgdGhlCi0g
ICAgICAgIC8vIGxhc3Qgb25lIHRvIGNvbXBsZXRlLgotICAgICAgICBjaGVja0NvbXBsZXRlZCgp
OworICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpLT50b2tlbml6ZXIoKSkKKyAgICAgICAgbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+dG9rZW5pemVyKCktPnN0b3BQYXJzaW5nKCk7CisgICAgbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+ZmluaXNoUGFyc2luZygpOworCiAgICAgaWYgKG1faWNvbkxvYWRlcikK
ICAgICAgICAgbV9pY29uTG9hZGVyLT5zdG9wTG9hZGluZygpOwogfQpAQCAtNjgzLDcgKzY3Nyw3
IEBAIEtVUkwgRnJhbWVMb2FkZXI6Omljb25VUkwoKQogICAgICAgICByZXR1cm4gS1VSTCgpOwog
CiAgICAgLy8gSWYgd2UgaGF2ZSBhbiBpY29uVVJMIGZyb20gYSBMaW5rIGVsZW1lbnQsIHJldHVy
biB0aGF0Ci0gICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkgJiYgIW1fZnJhbWUtPmRvY3VtZW50
KCktPmljb25VUkwoKS5pc0VtcHR5KCkpCisgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpLT5p
Y29uVVJMKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gS1VSTChtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5pY29uVVJMKCkpOwogCiAgICAgLy8gRG9uJ3QgcmV0dXJuIGEgZmF2aWNvbiBpY29uVVJM
IHVubGVzcyB3ZSdyZSBodHRwIG9yIGh0dHBzCkBAIC03NTcsOCArNzUxLDcgQEAgYm9vbCBGcmFt
ZUxvYWRlcjo6ZXhlY3V0ZUlmSmF2YVNjcmlwdFVSTAogICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIFNlY3VyaXR5T3JpZ2luKiBjdXJyZW50U2VjdXJpdHlPcmlnaW4gPSAwOwotICAgIGlmICht
X2ZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICBjdXJyZW50U2VjdXJpdHlPcmlnaW4gPSBtX2Zy
YW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpOworICAgIGN1cnJlbnRTZWN1cml0eU9y
aWdpbiA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCk7CiAKICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGFsd2F5cyByZXBsYWNlIHRoZSBkb2N1bWVudCwgYnV0IGRvaW5nIHNv
CiAgICAgLy8gICAgICAgIHN5bmNocm9ub3VzbHkgY2FuIGNhdXNlIGNyYXNoZXM6CkBAIC04MTUs
NyArODA4LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXIoYm9vbCBjbGVhcldpbmRvdwogICAg
ICAgICByZXR1cm47CiAgICAgbV9uZWVkc0NsZWFyID0gZmFsc2U7CiAgICAgCi0gICAgaWYgKG1f
ZnJhbWUtPmRvY3VtZW50KCkgJiYgIW1fZnJhbWUtPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkp
IHsKKyAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpIHsKICAgICAg
ICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y2FuY2VsUGFyc2luZygpOwogICAgICAgICBtX2ZyYW1l
LT5kb2N1bWVudCgpLT5zdG9wQWN0aXZlRE9NT2JqZWN0cygpOwogICAgICAgICBpZiAobV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+YXR0YWNoZWQoKSkgewpAQCAtOTEyLDEyICs5MDUsMTAgQEAgdm9pZCBG
cmFtZUxvYWRlcjo6YmVnaW4oY29uc3QgS1VSTCYgdXJsLAogICAgIC8vIG1pZ2h0IGRlc3Ryb3kg
dGhlIGRvY3VtZW50IHRoYXQgb3ducyBpdC4KICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IGZv
cmNlZFNlY3VyaXR5T3JpZ2luID0gb3JpZ2luOwogCi0gICAgYm9vbCByZXNldFNjcmlwdGluZyA9
ICEobV9pc0Rpc3BsYXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCAmJiBtX2ZyYW1lLT5kb2N1bWVu
dCgpICYmIG1fZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmlzU2VjdXJlVHJh
bnNpdGlvblRvKHVybCkpOworICAgIGJvb2wgcmVzZXRTY3JpcHRpbmcgPSAhKG1faXNEaXNwbGF5
aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlP
cmlnaW4oKS0+aXNTZWN1cmVUcmFuc2l0aW9uVG8odXJsKSk7CiAgICAgY2xlYXIocmVzZXRTY3Jp
cHRpbmcsIHJlc2V0U2NyaXB0aW5nKTsKICAgICBpZiAocmVzZXRTY3JpcHRpbmcpCiAgICAgICAg
IG1fZnJhbWUtPnNjcmlwdCgpLT51cGRhdGVQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKTsKLSAgICBp
ZiAoZGlzcGF0Y2gpCi0gICAgICAgIGRpc3BhdGNoV2luZG93T2JqZWN0QXZhaWxhYmxlKCk7CiAK
ICAgICBtX25lZWRzQ2xlYXIgPSB0cnVlOwogICAgIG1faXNDb21wbGV0ZSA9IGZhbHNlOwpAQCAt
OTQwLDYgKzkzMSw5IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmJlZ2luKGNvbnN0IEtVUkwmIHVybCwK
ICAgICAgICAgZG9jdW1lbnQgPSBET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQobV9y
ZXNwb25zZU1JTUVUeXBlLCBtX2ZyYW1lLCBtX2ZyYW1lLT5pblZpZXdTb3VyY2VNb2RlKCkpOwog
ICAgIG1fZnJhbWUtPnNldERvY3VtZW50KGRvY3VtZW50KTsKIAorICAgIGlmIChkaXNwYXRjaCkK
KyAgICAgICAgZGlzcGF0Y2hXaW5kb3dPYmplY3RBdmFpbGFibGUoKTsKKwogICAgIGRvY3VtZW50
LT5zZXRVUkwobV9VUkwpOwogICAgIGlmIChtX2RlY29kZXIpCiAgICAgICAgIGRvY3VtZW50LT5z
ZXREZWNvZGVyKG1fZGVjb2Rlci5nZXQoKSk7CkBAIC0xMDYxLDcgKzEwNTUsNyBAQCB2b2lkIEZy
YW1lTG9hZGVyOjplbmQoKQogCiB2b2lkIEZyYW1lTG9hZGVyOjplbmRJZk5vdExvYWRpbmdNYWlu
UmVzb3VyY2UoKQogewotICAgIGlmIChtX2lzTG9hZGluZ01haW5SZXNvdXJjZSB8fCAhbV9mcmFt
ZS0+cGFnZSgpKQorICAgIGlmIChtX2lzTG9hZGluZ01haW5SZXNvdXJjZSB8fCAhbV9mcmFtZS0+
cGFnZSgpIHx8ICFtX2ZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg1NApAQCAtMTA3MCwy
MSArMTA2NCwxNCBAQCB2b2lkIEZyYW1lTG9hZGVyOjplbmRJZk5vdExvYWRpbmdNYWluUmVzCiAg
ICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7CiAKICAgICAvLyBtYWtlIHN1cmUg
bm90aGluZydzIGxlZnQgaW4gdGhlcmUKLSAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSkgewot
ICAgICAgICB3cml0ZSgwLCAwLCB0cnVlKTsKLSAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
ZmluaXNoUGFyc2luZygpOworICAgIHdyaXRlKDAsIDAsIHRydWUpOworICAgIG1fZnJhbWUtPmRv
Y3VtZW50KCktPmZpbmlzaFBhcnNpbmcoKTsKICNpZiBVU0UoTE9XX0JBTkRXSURUSF9ESVNQTEFZ
KQotICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKS0+aW5Mb3dCYW5kd2lkdGhEaXNwbGF5
KCkpIHsKLSAgICAgICAgICAgIG1fZmluaXNoZWRQYXJzaW5nRHVyaW5nTG93QmFuZHdpZHRoRGlz
cGxheSA9IHRydWU7Ci0gICAgICAgICAgICBzd2l0Y2hPdXRMb3dCYW5kd2lkdGhEaXNwbGF5SWZS
ZWFkeSgpOwotICAgICAgICB9CisgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCktPmluTG93QmFu
ZHdpZHRoRGlzcGxheSgpKSB7CisgICAgICAgIG1fZmluaXNoZWRQYXJzaW5nRHVyaW5nTG93QmFu
ZHdpZHRoRGlzcGxheSA9IHRydWU7CisgICAgICAgIHN3aXRjaE91dExvd0JhbmR3aWR0aERpc3Bs
YXlJZlJlYWR5KCk7CisgICAgfQogI2VuZGlmICAgICAgICAgICAgCi0gICAgfSBlbHNlCi0gICAg
ICAgIC8vIFdlYktpdCBwYXJ0aWFsbHkgdXNlcyBXZWJDb3JlIHdoZW4gbG9hZGluZyBub24tSFRN
TCBkb2NzLiAgSW4gdGhlc2UgY2FzZXMgZG9jPT1uaWwsIGJ1dAotICAgICAgICAvLyBXZWJDb3Jl
IGlzIGVub3VnaCBpbnZvbHZlZCB0aGF0IHdlIG5lZWQgdG8gY2hlY2tDb21wbGV0ZWQoKSBpbiBv
cmRlciBmb3IgbV9iQ29tcGxldGUgdG8KLSAgICAgICAgLy8gYmVjb21lIHRydWUuICBBbiBleGFt
cGxlIGlzIHdoZW4gYSBzdWJmcmFtZSBpcyBhIHB1cmUgdGV4dCBkb2MsIGFuZCB0aGF0IHN1YmZy
YW1lIGlzIHRoZQotICAgICAgICAvLyBsYXN0IG9uZSB0byBjb21wbGV0ZS4KLSAgICAgICAgY2hl
Y2tDb21wbGV0ZWQoKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6aWNvbkxvYWREZWNpc2lvbkF2
YWlsYWJsZSgpCkBAIC0xMTk2LDggKzExODMsNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb21taXRJ
Y29uVVJMVG9JY29uRGF0CiB2b2lkIEZyYW1lTG9hZGVyOjpyZXN0b3JlRG9jdW1lbnRTdGF0ZSgp
CiB7CiAgICAgRG9jdW1lbnQqIGRvYyA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFk
b2MpCi0gICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgSGlzdG9yeUl0ZW0qIGl0ZW1Ub1Jl
c3RvcmUgPSAwOwogICAgIApAQCAtMTIyOCw3ICsxMjEzLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6
Z290b0FuY2hvcigpCiAgICAgLy8gT1RPSCBJZiBDU1MgdGFyZ2V0IHdhcyBzZXQgcHJldmlvdXNs
eSwgd2Ugd2FudCB0byBzZXQgaXQgdG8gMCwgcmVjYWxjCiAgICAgLy8gYW5kIHBvc3NpYmx5IHJl
cGFpbnQgYmVjYXVzZSA6dGFyZ2V0IHBzZXVkbyBjbGFzcyBtYXkgaGF2ZSBiZWVuCiAgICAgLy8g
c2V0IChzZWUgYnVnIDExMzIxKS4KLSAgICBpZiAoIW1fVVJMLmhhc1JlZigpICYmICEobV9mcmFt
ZS0+ZG9jdW1lbnQoKSAmJiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jc3NUYXJnZXQoKSkpCisgICAg
aWYgKCFtX1VSTC5oYXNSZWYoKSAmJiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyByZWYgPSBtX1VSTC5yZWYoKTsKQEAgLTEy
NjYsOCArMTI1MSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmZpbmlzaGVkUGFyc2luZygpCiAKIHZv
aWQgRnJhbWVMb2FkZXI6OmxvYWREb25lKCkKIHsKLSAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQo
KSkKLSAgICAgICAgY2hlY2tDb21wbGV0ZWQoKTsKKyAgICBjaGVja0NvbXBsZXRlZCgpOwogfQog
CiB2b2lkIEZyYW1lTG9hZGVyOjpjaGVja0NvbXBsZXRlZCgpCkBAIC0xMjgyLDE3ICsxMjY2LDE2
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNoZWNrQ29tcGxldGVkKCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gQXJlIHdlIHN0aWxsIHBhcnNpbmc/Ci0gICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50
KCkgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cGFyc2luZygpKQorICAgIGlmIChtX2ZyYW1lLT5k
b2N1bWVudCgpLT5wYXJzaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFN0aWxsIHdh
aXRpbmcgZm9yIGltYWdlcy9zY3JpcHRzPwotICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpKQot
ICAgICAgICBpZiAobnVtUmVxdWVzdHMobV9mcmFtZS0+ZG9jdW1lbnQoKSkpCi0gICAgICAgICAg
ICByZXR1cm47CisgICAgaWYgKG51bVJlcXVlc3RzKG1fZnJhbWUtPmRvY3VtZW50KCkpKQorICAg
ICAgICByZXR1cm47CiAKICNpZiBVU0UoTE9XX0JBTkRXSURUSF9ESVNQTEFZKQogICAgIC8vIGFz
IHN3aXRjaCB3aWxsIGJlIGNhbGxlZCwgZG9uJ3QgY29tcGxldGUgeWV0Ci0gICAgaWYgKG1fZnJh
bWUtPmRvY3VtZW50KCkgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aW5Mb3dCYW5kd2lkdGhEaXNw
bGF5KCkgJiYgbV9uZWVkVG9Td2l0Y2hPdXRMb3dCYW5kd2lkdGhEaXNwbGF5KQorICAgIGlmICht
X2ZyYW1lLT5kb2N1bWVudCgpLT5pbkxvd0JhbmR3aWR0aERpc3BsYXkoKSAmJiBtX25lZWRUb1N3
aXRjaE91dExvd0JhbmR3aWR0aERpc3BsYXkpCiAgICAgICAgIHJldHVybjsKICNlbmRpZgogCkBA
IC0xMzM4LDcgKzEzMjEsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzY2hlZHVsZUNoZWNrTG9hZENv
bXBsCiAKIHZvaWQgRnJhbWVMb2FkZXI6OmNoZWNrQ2FsbEltcGxpY2l0Q2xvc2UoKQogewotICAg
IGlmIChtX2RpZENhbGxJbXBsaWNpdENsb3NlIHx8ICFtX2ZyYW1lLT5kb2N1bWVudCgpIHx8IG1f
ZnJhbWUtPmRvY3VtZW50KCktPnBhcnNpbmcoKSkKKyAgICBpZiAobV9kaWRDYWxsSW1wbGljaXRD
bG9zZSB8fCBtX2ZyYW1lLT5kb2N1bWVudCgpLT5wYXJzaW5nKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS0+dHJlZSgpLT5maXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCktPm5leHRTaWJsaW5nKCkpCkBAIC0xMzQ3LDgg
KzEzMzAsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjaGVja0NhbGxJbXBsaWNpdENsb3NlCiAKICAg
ICBtX2RpZENhbGxJbXBsaWNpdENsb3NlID0gdHJ1ZTsKICAgICBtX3dhc1VubG9hZEV2ZW50RW1p
dHRlZCA9IGZhbHNlOwotICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICBtX2Zy
YW1lLT5kb2N1bWVudCgpLT5pbXBsaWNpdENsb3NlKCk7CisgICAgbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+aW1wbGljaXRDbG9zZSgpOwogfQogCiBLVVJMIEZyYW1lTG9hZGVyOjpiYXNlVVJMKCkgY29u
c3QKQEAgLTE0MTgsMTggKzE0MDAsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzY2hlZHVsZVJlZnJl
c2goYm9vbCB3CiAgICAgaWYgKCFtX2ZyYW1lLT5wYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIC8vIEhhbmRsZSBhIGxvY2F0aW9uIGNoYW5nZSBvZiBhIHBhZ2Ugd2l0aCBubyBkb2N1bWVu
dCBhcyBhIHNwZWNpYWwgY2FzZS4KLSAgICAvLyBUaGlzIG1heSBoYXBwZW4gd2hlbiBhIGZyYW1l
IHJlcXVlc3RzIGEgcmVmcmVzaCBvZiBhbm90aGVyIGZyYW1lLgotICAgIGJvb2wgZHVyaW5nTG9h
ZCA9ICFtX2ZyYW1lLT5kb2N1bWVudCgpOwotICAgIAotICAgIC8vIElmIGEgcmVmcmVzaCB3YXMg
c2NoZWR1bGVkIGR1cmluZyBhIGxvYWQsIHRoZW4gc3RvcCB0aGUgY3VycmVudCBsb2FkLgotICAg
IC8vIE90aGVyd2lzZSB3aGVuIHRoZSBjdXJyZW50IGxvYWQgdHJhbnNpdGlvbnMgZnJvbSBhIHBy
b3Zpc2lvbmFsIHRvIGEgCi0gICAgLy8gY29tbWl0dGVkIHN0YXRlLCBwZW5kaW5nIHJlZGlyZWN0
cyBtYXkgYmUgY2FuY2VsbGVkLiAKLSAgICBpZiAoZHVyaW5nTG9hZCkKLSAgICAgICAgc3RvcExv
YWRpbmcodHJ1ZSk7ICAgCi0KLSAgICBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6VHlwZSB0eXBlID0g
ZHVyaW5nTG9hZAotICAgICAgICA/IFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5n
ZUR1cmluZ0xvYWQgOiBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2U7CisgICAg
U2NoZWR1bGVkUmVkaXJlY3Rpb246OlR5cGUgdHlwZSA9IFNjaGVkdWxlZFJlZGlyZWN0aW9uOjps
b2NhdGlvbkNoYW5nZTsKICAgICBzY2hlZHVsZVJlZGlyZWN0aW9uKG5ldyBTY2hlZHVsZWRSZWRp
cmVjdGlvbih0eXBlLCBtX1VSTC5zdHJpbmcoKSwgbV9vdXRnb2luZ1JlZmVycmVyLCB0cnVlLCB0
cnVlLCB3YXNVc2VyR2VzdHVyZSwgdHJ1ZSkpOwogfQogCkBAIC0xNjQzLDEyICsxNjE0LDEwIEBA
IGJvb2wgRnJhbWVMb2FkZXI6OmdvdG9BbmNob3IoY29uc3QgU3RyaW4KIAogICAgIC8vIFdlIG5l
ZWQgdG8gdXBkYXRlIHRoZSBsYXlvdXQgYmVmb3JlIHNjcm9sbGluZywgb3RoZXJ3aXNlIHdlIGNv
dWxkCiAgICAgLy8gcmVhbGx5IG1lc3MgdGhpbmdzIHVwIGlmIGFuIGFuY2hvciBzY3JvbGwgY29t
ZXMgYXQgYSBiYWQgbW9tZW50LgotICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpKSB7Ci0gICAg
ICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZVJlbmRlcmluZygpOwotICAgICAgICAvLyBP
bmx5IGRvIGEgbGF5b3V0IGlmIGNoYW5nZXMgaGF2ZSBvY2N1cnJlZCB0aGF0IG1ha2UgaXQgbmVj
ZXNzYXJ5LgotICAgICAgICBpZiAobV9mcmFtZS0+dmlldygpICYmIG1fZnJhbWUtPmNvbnRlbnRS
ZW5kZXJlcigpICYmIG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpLT5uZWVkc0xheW91dCgpKQot
ICAgICAgICAgICAgbV9mcmFtZS0+dmlldygpLT5sYXlvdXQoKTsKLSAgICB9CisgICAgbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+dXBkYXRlUmVuZGVyaW5nKCk7CisgICAgLy8gT25seSBkbyBhIGxheW91
dCBpZiBjaGFuZ2VzIGhhdmUgb2NjdXJyZWQgdGhhdCBtYWtlIGl0IG5lY2Vzc2FyeS4KKyAgICBp
ZiAobV9mcmFtZS0+dmlldygpICYmIG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpICYmIG1fZnJh
bWUtPmNvbnRlbnRSZW5kZXJlcigpLT5uZWVkc0xheW91dCgpKQorICAgICAgICBtX2ZyYW1lLT52
aWV3KCktPmxheW91dCgpOwogICAKICAgICAvLyBTY3JvbGwgbmVzdGVkIGxheWVycyBhbmQgZnJh
bWVzIHRvIHJldmVhbCB0aGUgYW5jaG9yLgogICAgIC8vIEFsaWduIHRvIHRoZSB0b3AgYW5kIHRv
IHRoZSBjbG9zZXN0IHNpZGUgKHRoaXMgbWF0Y2hlcyBvdGhlciBicm93c2VycykuCkBAIC0xNzg3
LDEwICsxNzU2LDcgQEAgU3RyaW5nIEZyYW1lTG9hZGVyOjpvdXRnb2luZ1JlZmVycmVyKCkgYwog
CiBTdHJpbmcgRnJhbWVMb2FkZXI6Om91dGdvaW5nT3JpZ2luKCkgY29uc3QKIHsKLSAgICBpZiAo
bV9mcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWUtPmRvY3VtZW50KCkt
PnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gU2VjdXJpdHlPcmln
aW46OmNyZWF0ZUVtcHR5KCktPnRvU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fZnJhbWUtPmRvY3Vt
ZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCk7CiB9CiAKIEZyYW1lKiBGcmFtZUxv
YWRlcjo6b3BlbmVyKCkKQEAgLTE4OTQsNyArMTg2MCw2IEBAIGJvb2wgRnJhbWVMb2FkZXI6OmNh
bkNhY2hlUGFnZUNvbnRhaW5pbmcKICAgICAgICAgLy8gdGhlIHJpZ2h0IE5QT2JqZWN0cy4gU2Vl
IDxyZGFyOi8vcHJvYmxlbS81MTk3MDQxPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAg
JiYgIW1fY29udGFpbnNQbHVnSW5zCiAgICAgICAgICYmICFtX1VSTC5wcm90b2NvbElzKCJodHRw
cyIpCi0gICAgICAgICYmIG1fZnJhbWUtPmRvY3VtZW50KCkKICAgICAgICAgJiYgIW1fZnJhbWUt
PmRvY3VtZW50KCktPmhhc1dpbmRvd0V2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnVubG9hZEV2
ZW50KQogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICAgICAgJiYgIW1fZnJhbWUtPmRvY3VtZW50
KCktPmhhc09wZW5EYXRhYmFzZXMoKQpAQCAtMjAzNywxMSArMjAwMiw2IEBAIGJvb2wgRnJhbWVM
b2FkZXI6OmxvZ0NhbkNhY2hlRnJhbWVEZWNpc2kKICAgICAgICAgICAgIHsgUENMT0coIiAgIC1G
cmFtZSBjb250YWlucyBwbHVnaW5zIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQogICAgICAgICBp
ZiAobV9VUkwucHJvdG9jb2xJcygiaHR0cHMiKSkKICAgICAgICAgICAgIHsgUENMT0coIiAgIC1G
cmFtZSBpcyBIVFRQUyIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSAgICAgICAgaWYgKCFtX2Zy
YW1lLT5kb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBQQ0xPRygiICAgLVRoZXJlIGlzIG5vIERv
Y3VtZW50IG9iamVjdCIpOwotICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkt
Pmhhc1dpbmRvd0V2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KSkKICAgICAg
ICAgICAgIHsgUENMT0coIiAgIC1GcmFtZSBoYXMgYW4gdW5sb2FkIGV2ZW50IGxpc3RlbmVyIik7
IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQogI2lmIEVOQUJMRShEQVRBQkFTRSkKQEAgLTIwODMsNyAr
MjA0Myw3IEBAIGJvb2wgRnJhbWVMb2FkZXI6OmxvZ0NhbkNhY2hlRnJhbWVEZWNpc2kKIAogdm9p
ZCBGcmFtZUxvYWRlcjo6dXBkYXRlUG9saWN5QmFzZVVSTCgpCiB7Ci0gICAgaWYgKG1fZnJhbWUt
PnRyZWUoKS0+cGFyZW50KCkgJiYgbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKS0+ZG9jdW1lbnQo
KSkKKyAgICBpZiAobV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKICAgICAgICAgc2V0UG9saWN5
QmFzZVVSTChtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpLT5kb2N1bWVudCgpLT5wb2xpY3lCYXNl
VVJMKCkpOwogICAgIGVsc2UKICAgICAgICAgc2V0UG9saWN5QmFzZVVSTChtX1VSTCk7CkBAIC0y
MDkxLDggKzIwNTEsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVQb2xpY3lCYXNlVVJMKCkK
IAogdm9pZCBGcmFtZUxvYWRlcjo6c2V0UG9saWN5QmFzZVVSTChjb25zdCBLVVJMJiB1cmwpCiB7
Ci0gICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgIG1fZnJhbWUtPmRvY3VtZW50
KCktPnNldFBvbGljeUJhc2VVUkwodXJsKTsKKyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZXRQ
b2xpY3lCYXNlVVJMKHVybCk7CiAgICAgZm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLT50cmVl
KCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS0+bmV4dFNpYmxp
bmcoKSkKICAgICAgICAgY2hpbGQtPmxvYWRlcigpLT5zZXRQb2xpY3lCYXNlVVJMKHVybCk7CiB9
CkBAIC0zNTIyLDggKzM0ODEsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpoYW5kbGVkT25sb2FkRXZl
bnRzKCkKIHZvaWQgRnJhbWVMb2FkZXI6OmZyYW1lRGV0YWNoZWQoKQogewogICAgIHN0b3BBbGxM
b2FkZXJzKCk7Ci0gICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50
KCkpCi0gICAgICAgIGRvY3VtZW50LT5zdG9wQWN0aXZlRE9NT2JqZWN0cygpOworICAgIG1fZnJh
bWUtPmRvY3VtZW50KCktPnN0b3BBY3RpdmVET01PYmplY3RzKCk7CiAgICAgZGV0YWNoRnJvbVBh
cmVudCgpOwogfQogCkBAIC0zODgwLDcgKzM4MzgsNyBAQCBib29sIEZyYW1lTG9hZGVyOjpzaG91
bGRTY3JvbGxUb0FuY2hvcihiCiAgICAgICAgICYmICFzaG91bGRSZWxvYWQodGhpcy0+dXJsKCks
IHVybCkKICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBqdXN0IHNjcm9sbCBpZiBhIGxpbmsg
ZnJvbSB3aXRoaW4gYQogICAgICAgICAvLyBmcmFtZXNldCBpcyB0cnlpbmcgdG8gcmVsb2FkIHRo
ZSBmcmFtZXNldCBpbnRvIF90b3AuCi0gICAgICAgICYmICghbV9mcmFtZS0+ZG9jdW1lbnQoKSB8
fCAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aXNGcmFtZVNldCgpKTsKKyAgICAgICAgJiYgIW1fZnJh
bWUtPmRvY3VtZW50KCktPmlzRnJhbWVTZXQoKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6b3Bl
bmVkKCkKQEAgLTQ0NTIsNyArNDQxMCw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnNhdmVEb2N1bWVu
dFN0YXRlKCkKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwog
ICAgIEFTU0VSVChkb2N1bWVudCk7CiAgICAgCi0gICAgaWYgKGRvY3VtZW50ICYmIGl0ZW0tPmlz
Q3VycmVudERvY3VtZW50KGRvY3VtZW50KSkgeworICAgIGlmIChpdGVtLT5pc0N1cnJlbnREb2N1
bWVudChkb2N1bWVudCkpIHsKICAgICAgICAgTE9HKExvYWRpbmcsICJXZWJDb3JlTG9hZGluZyAl
czogc2F2aW5nIGZvcm0gc3RhdGUgdG8gJXAiLCBtX2ZyYW1lLT50cmVlKCktPm5hbWUoKS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBpdGVtKTsKICAgICAgICAgaXRlbS0+c2V0RG9jdW1lbnRTdGF0
ZShkb2N1bWVudC0+Zm9ybUVsZW1lbnRzU3RhdGUoKSk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9s
b2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCShyZXZpc2lvbiA0MDgx
NCkKKysrIFdlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwNiwxMCArNTA2LDcgQEAgUGFzc1JlZlB0cjxMZWdhY3lXZWJBcmNo
aXZlPiBMZWdhY3lXZWJBcgogICAgICAgICBpZiAoKCgqaXQpLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6ZnJhbWVUYWcpIHx8ICgqaXQpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lVGFnKSB8
fCAoKml0KS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdFRhZykpICYmCiAgICAgICAgICAg
ICAgKGNoaWxkRnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPigqaXQp
LT5jb250ZW50RnJhbWUoKSkpIHsKICAgICAgICAgICAgIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZl
PiBzdWJmcmFtZUFyY2hpdmU7Ci0gICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0g
Y2hpbGRGcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICBzdWJmcmFtZUFyY2hpdmUg
PSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoZG9jdW1lbnQpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHN1YmZyYW1lQXJjaGl2ZSA9IGNyZWF0ZShjaGlsZEZyYW1lKTsKKyAg
ICAgICAgICAgIHN1YmZyYW1lQXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShjaGls
ZEZyYW1lLT5kb2N1bWVudCgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHN1YmZy
YW1lQXJjaGl2ZSkKICAgICAgICAgICAgICAgICBzdWJmcmFtZUFyY2hpdmVzLmFwcGVuZChzdWJm
cmFtZUFyY2hpdmUpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRmV0Y2hlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRmV0Y2hlci5jcHAJKHJldmlz
aW9uIDQwODE0KQorKysgV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRmV0Y2hlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMSw4ICsxMDEsNiBAQCBzdGF0aWMgdm9pZCBwYXJzZUljb25MaW5rKEhU
TUxMaW5rRWxlbWVuCiBQYXNzUmVmUHRyPEljb25GZXRjaGVyPiBJY29uRmV0Y2hlcjo6Y3JlYXRl
KEZyYW1lKiBmcmFtZSwgSWNvbkZldGNoZXJDbGllbnQqIGNsaWVudCkKIHsKICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAg
ICAgICByZXR1cm4gMDsKICAgICAKICAgICBIVE1MSGVhZEVsZW1lbnQqIGhlYWQgPSBkb2N1bWVu
dC0+aGVhZCgpOwogICAgIGlmICghaGVhZCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2ljb24vSWNv
bkxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVy
LmNwcAkocmV2aXNpb24gNDA4MTQpCisrKyBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25Mb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxNCArNjIsNiBAQCB2b2lkIEljb25Mb2FkZXI6OnN0
YXJ0TG9hZGluZygpCiAgICAgaWYgKG1fcmVzb3VyY2VMb2FkZXIpCiAgICAgICAgIHJldHVybjsK
IAotICAgIC8vIEZJWE1FOiBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDkwMgotICAgIC8vIE9uY2UgUmVzb3VyY2VIYW5kbGUgd2lsbCBsb2FkIHdpdGhvdXQgYSBEb2NM
b2FkZXIsIHdlIGNhbiByZW1vdmUgdGhpcyBjaGVjay4KLSAgICAvLyBBIGZyYW1lIG1heSBiZSBk
b2N1bWVudGxlc3MgLSBvbmUgZXhhbXBsZSBpcyBhIGZyYW1lIGNvbnRhaW5pbmcgb25seSBhIFBE
Ri4KLSAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCkpIHsKLSAgICAgICAgTE9HKEljb25EYXRh
YmFzZSwgIkRvY3VtZW50bGVzcy1mcmFtZSAtIGljb24gd29uJ3QgYmUgbG9hZGVkIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBTZXQgZmxhZyBzbyB3ZSBjYW4gZGV0ZWN0IHRo
ZSBjYXNlIHdoZXJlIHRoZSBsb2FkIGNvbXBsZXRlcyBiZWZvcmUKICAgICAvLyBTdWJyZXNvdXJj
ZUxvYWRlcjo6Y3JlYXRlIHJldHVybnMuCiAgICAgbV9sb2FkSXNJblByb2dyZXNzID0gdHJ1ZTsK
SW5kZXg6IFdlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlz
aW9uIDQwODE0KQorKysgV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzcwLDEwICsxNzcwLDcgQEAgVmlzaWJsZVBvc2l0aW9uIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplYwogICAgICAgICBGcmFtZSogZnJhbWUgPSBzdGF0aWNfY2Fz
dDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpOwogICAgICAgICBpZiAoIWZyYW1lKQogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1
bWVudCgpOwotICAgICAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIHJlbmRlclZpZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpOworICAgICAgICByZW5kZXJW
aWV3ID0gZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKTsKICAgICAgICAgZnJhbWVWaWV3
ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KTsKICAgICB9CiAgICAgCkluZGV4OiBX
ZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21l
LmNwcAkocmV2aXNpb24gNDA4MTQpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDU3LDEwICs0NTcsOCBAQCBQYWdlR3JvdXBMb2FkRGVmZXJyZXI6OlBhZ2VH
cm91cExvYWREZWZlCiAgICAgICAgICAgICAgICAgbV9kZWZlcnJlZEZyYW1lcy5hcHBlbmQob3Ro
ZXJQYWdlLT5tYWluRnJhbWUoKSk7CiAKICNpZiAhUExBVEZPUk0oTUFDKQotICAgICAgICAgICAg
Zm9yIChGcmFtZSogZnJhbWUgPSBvdGhlclBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgICAgIGlmIChE
b2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICAg
ICAgZG9jdW1lbnQtPnN1c3BlbmRBY3RpdmVET01PYmplY3RzKCk7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG90aGVyUGFnZS0+bWFpbkZyYW1lKCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKQorICAgICAgICAgICAg
ICAgIGZyYW1lLT5kb2N1bWVudCgpLT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpOwogI2VuZGlm
CiAgICAgICAgIH0KICAgICB9CkBAIC00NzgsMTAgKzQ3Niw4IEBAIFBhZ2VHcm91cExvYWREZWZl
cnJlcjo6flBhZ2VHcm91cExvYWREZWYKICAgICAgICAgICAgIHBhZ2UtPnNldERlZmVyc0xvYWRp
bmcoZmFsc2UpOwogCiAjaWYgIVBMQVRGT1JNKE1BQykKLSAgICAgICAgICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkt
PnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVu
dCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC0+cmVz
dW1lQWN0aXZlRE9NT2JqZWN0cygpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChG
cmFtZSogZnJhbWUgPSBwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS0+dHJhdmVyc2VOZXh0KCkpCisgICAgICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCkt
PnJlc3VtZUFjdGl2ZURPTU9iamVjdHMoKTsKICNlbmRpZgogICAgICAgICB9CiAgICAgfQpJbmRl
eDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDQwODE0KQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNCw4ICszMjQsNiBAQCBTdG9yYWdlKiBET01XaW5k
b3c6OnNlc3Npb25TdG9yYWdlKCkgY29uCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQot
ICAgICAgICByZXR1cm4gMDsKIAogICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEg
PSBwYWdlLT5zZXNzaW9uU3RvcmFnZSgpLT5zdG9yYWdlQXJlYShkb2N1bWVudC0+c2VjdXJpdHlP
cmlnaW4oKSk7CiAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5kaWRVc2VET01TdG9y
YWdlKHN0b3JhZ2VBcmVhLmdldCgpLCBmYWxzZSwgbV9mcmFtZSk7CkBAIC00OTgsMTAgKzQ5Niw3
IEBAIHZvaWQgRE9NV2luZG93OjphbGVydChjb25zdCBTdHJpbmcmIG1lc3MKICAgICBpZiAoIW1f
ZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIERvY3VtZW50KiBkb2MgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpOwotICAgIEFTU0VSVChkb2MpOwotICAgIGlmIChkb2MpCi0gICAgICAgIGRvYy0+
dXBkYXRlUmVuZGVyaW5nKCk7CisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlUmVuZGVy
aW5nKCk7CiAKICAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOwogICAgIGlmICghcGFn
ZSkKQEAgLTUxNSwxMCArNTEwLDcgQEAgYm9vbCBET01XaW5kb3c6OmNvbmZpcm0oY29uc3QgU3Ry
aW5nJiBtZQogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
RG9jdW1lbnQqIGRvYyA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgQVNTRVJUKGRvYyk7Ci0g
ICAgaWYgKGRvYykKLSAgICAgICAgZG9jLT51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICBtX2ZyYW1l
LT5kb2N1bWVudCgpLT51cGRhdGVSZW5kZXJpbmcoKTsKIAogICAgIFBhZ2UqIHBhZ2UgPSBtX2Zy
YW1lLT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQpAQCAtNTMyLDEwICs1MjQsNyBAQCBTdHJpbmcg
RE9NV2luZG93Ojpwcm9tcHQoY29uc3QgU3RyaW5nJiBtCiAgICAgaWYgKCFtX2ZyYW1lKQogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBEb2N1bWVudCogZG9jID0gbV9mcmFtZS0+ZG9j
dW1lbnQoKTsKLSAgICBBU1NFUlQoZG9jKTsKLSAgICBpZiAoZG9jKQotICAgICAgICBkb2MtPnVw
ZGF0ZVJlbmRlcmluZygpOworICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZVJlbmRlcmlu
ZygpOwogCiAgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2Up
CkBAIC02NDMsMTAgKzYzMiw3IEBAIGludCBET01XaW5kb3c6OnNjcm9sbFgoKSBjb25zdAogICAg
IGlmICghdmlldykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBEb2N1bWVudCogZG9jID0gbV9m
cmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBBU1NFUlQoZG9jKTsKLSAgICBpZiAoZG9jKQotICAgICAg
ICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIG1fZnJh
bWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwog
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4odmlldy0+c2Nyb2xsWCgpIC8gbV9mcmFtZS0+
cGFnZVpvb21GYWN0b3IoKSk7CiB9CkBAIC02NjAsMTAgKzY0Niw3IEBAIGludCBET01XaW5kb3c6
OnNjcm9sbFkoKSBjb25zdAogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAg
ICBEb2N1bWVudCogZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBBU1NFUlQoZG9jKTsK
LSAgICBpZiAoZG9jKQotICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOworICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwogCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4odmlldy0+
c2Nyb2xsWSgpIC8gbV9mcmFtZS0+cGFnZVpvb21GYWN0b3IoKSk7CiB9CkBAIC03OTcsOSArNzgw
LDYgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gRE9NV2luZG93OjpnZXRNYQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIERvY3VtZW50KiBkb2MgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotICAg
IEFTU0VSVChkb2MpOwotICAgIGlmICghZG9jKQotICAgICAgICByZXR1cm4gMDsKIAogICAgIGlm
ICghcHNldWRvRWx0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGRvYy0+c3R5bGVTZWxlY3Rv
cigpLT5wc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChlbHQsIHBzZXVkb0VsdCwgYXV0aG9yT25s
eSk7CkBAIC04MjUsOSArODA1LDYgQEAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gRE9NV2luZG93Ojpv
cGVuRGF0YQogICAgICAgICByZXR1cm4gMDsKIAogICAgIERvY3VtZW50KiBkb2MgPSBtX2ZyYW1l
LT5kb2N1bWVudCgpOwotICAgIEFTU0VSVChkb2MpOwotICAgIGlmICghZG9jKQotICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCk7
CiAgICAgaWYgKCFzZXR0aW5ncyB8fCAhc2V0dGluZ3MtPmRhdGFiYXNlc0VuYWJsZWQoKSkKQEAg
LTg0MiwxMCArODE5LDcgQEAgdm9pZCBET01XaW5kb3c6OnNjcm9sbEJ5KGludCB4LCBpbnQgeSkg
YwogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRG9jdW1lbnQqIGRv
YyA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgQVNTRVJUKGRvYyk7Ci0gICAgaWYgKGRvYykK
LSAgICAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAg
ICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHMoKTsKIAogICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKICAgICBpZiAo
IXZpZXcpCkBAIC04NTksMTAgKzgzMyw3IEBAIHZvaWQgRE9NV2luZG93OjpzY3JvbGxUbyhpbnQg
eCwgaW50IHkpIGMKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIERv
Y3VtZW50KiBkb2MgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotICAgIEFTU0VSVChkb2MpOwotICAg
IGlmIChkb2MpCi0gICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hl
ZXRzKCk7CisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGlu
Z1N0eWxlc2hlZXRzKCk7CiAKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7
CiAgICAgaWYgKCF2aWV3KQpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDQwODE0
KQorKysgV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4
NSw3ICs2ODUsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6c2V0QXV0b3Njcm9sbFJlbmRlcmVyCiAK
IHZvaWQgRXZlbnRIYW5kbGVyOjphbGxvd0RIVE1MRHJhZyhib29sJiBmbGFnREhUTUwsIGJvb2wm
IGZsYWdVQSkgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUtPmRvY3VtZW50
KCkpIHsKKyAgICBpZiAoIW1fZnJhbWUpIHsKICAgICAgICAgZmxhZ0RIVE1MID0gZmFsc2U7CiAg
ICAgICAgIGZsYWdVQSA9IGZhbHNlOwogICAgICAgICByZXR1cm47CkBAIC03OTEsOSArNzkxLDYg
QEAgdm9pZCBFdmVudEhhbmRsZXI6OnNldE1vdXNlUHJlc3NOb2RlKFBhcwogCiBib29sIEV2ZW50
SGFuZGxlcjo6c2Nyb2xsT3ZlcmZsb3coU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xs
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7Ci0gICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCiAgICAgTm9kZSogbm9kZSA9IG1fZnJhbWUt
PmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICBub2Rl
ID0gbV9tb3VzZVByZXNzTm9kZS5nZXQoKTsKQEAgLTEwMDIsOSArOTk5LDYgQEAgQ3Vyc29yIEV2
ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IAogCiBib29sIEV2ZW50SGFuZGxlcjo6aGFu
ZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkK
IHsKLSAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQogICAgIFJlZlB0cjxGcmFtZVZpZXc+IHByb3RlY3RvcihtX2ZyYW1lLT52aWV3KCkpOwogCiAg
ICAgbV9tb3VzZVByZXNzZWQgPSB0cnVlOwpAQCAtMTEyNiw5ICsxMTIwLDYgQEAgYm9vbCBFdmVu
dEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudAogLy8gVGhpcyBtZXRob2Qgb25seSBleGlz
dHMgZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IGtub3cgaG93IHRvIGRlbGl2ZXIgCiBib29sIEV2
ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VEb3VibGVDbGlja0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYgbW91c2VFdmVudCkKIHsKLSAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIFJlZlB0cjxGcmFtZVZpZXc+IHByb3RlY3Rvciht
X2ZyYW1lLT52aWV3KCkpOwogCiAgICAgLy8gV2UgZ2V0IHRoaXMgaW5zdGVhZCBvZiBhIHNlY29u
ZCBtb3VzZS11cCAKQEAgLTExODUsNyArMTE3Niw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5k
bGVNb3VzZU1vdmVFdmVudCgKICAgICAvLyBidXQgYWxzbyBhc3NlcnQgc28gdGhhdCB3ZSBjYW4g
dHJ5IHRvIGZpZ3VyZSB0aGlzIG91dCBpbiBkZWJ1ZwogICAgIC8vIGJ1aWxkcywgaWYgaXQgaGFw
cGVucy4KICAgICBBU1NFUlQobV9mcmFtZSk7Ci0gICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1l
LT5kb2N1bWVudCgpKQorICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgUmVmUHRyPEZyYW1lVmlldz4gcHJvdGVjdG9yKG1fZnJhbWUtPnZpZXcoKSk7CkBAIC0x
MjgzLDkgKzEyNzQsNiBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6aW52YWxpZGF0ZUNsaWNrKCkKIAog
Ym9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYgbW91c2VFdmVudCkKIHsKLSAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIFJlZlB0cjxGcmFtZVZpZXc+IHByb3RlY3Rv
cihtX2ZyYW1lLT52aWV3KCkpOwogCiAgICAgbV9tb3VzZVByZXNzZWQgPSBmYWxzZTsKQEAgLTEz
NTUsOSArMTM0Myw2IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChjb24K
IHsKICAgICBib29sIGFjY2VwdCA9IGZhbHNlOwogCi0gICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVu
dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBpZiAoIW1fZnJhbWUtPnZpZXcoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xNjAwLDggKzE1ODUsNiBAQCBib29sIEV2ZW50
SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxl
V2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCiB7CiAgICAgRG9jdW1lbnQqIGRvYyA9
IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2MpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIFJlbmRlck9iamVjdCogZG9jUmVuZGVyZXIgPSBkb2MtPnJlbmRlcmVyKCk7CiAg
ICAgaWYgKCFkb2NSZW5kZXJlcikKQEAgLTE2NTIsNyArMTYzNSw3IEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpzZW5kQ29udGV4dE1lbnVFdmVudCgKIHsKICAgICBEb2N1bWVudCogZG9jID0gbV9mcmFt
ZS0+ZG9jdW1lbnQoKTsKICAgICBGcmFtZVZpZXcqIHYgPSBtX2ZyYW1lLT52aWV3KCk7Ci0gICAg
aWYgKCFkb2MgfHwgIXYpCisgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CiAgICAgYm9vbCBzd2FsbG93RXZlbnQ7CkBAIC0yMjM3LDEwICsyMjIwLDEwIEBAIHZvaWQgRXZl
bnRIYW5kbGVyOjpkZWZhdWx0VGFiRXZlbnRIYW5kbGUKIAogdm9pZCBFdmVudEhhbmRsZXI6OmNh
cHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZCgpCiB7Ci0gICAgaWYgKERvY3VtZW50KiBkID0gbV9m
cmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgaWYgKE5vZGUqIG5vZGUgPSBkLT5mb2N1c2VkTm9k
ZSgpKQotICAgICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogciA9IG5vZGUtPnJlbmRlcmVyKCkp
Ci0gICAgICAgICAgICAgICAgci0+Y2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7CisgICAg
RG9jdW1lbnQqIGQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmIChOb2RlKiBub2RlID0g
ZC0+Zm9jdXNlZE5vZGUoKSkKKyAgICAgICAgaWYgKFJlbmRlck9iamVjdCogciA9IG5vZGUtPnJl
bmRlcmVyKCkpCisgICAgICAgICAgICByLT5jYXBzTG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWQoKTsK
IH0KIAogdW5zaWduZWQgRXZlbnRIYW5kbGVyOjpwZW5kaW5nRnJhbWVVbmxvYWRFdmVudENvdW50
KCkKQEAgLTIyNzIsOCArMjI1NSw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpjbGVhclBlbmRpbmdG
cmFtZVVubG8KIAogdm9pZCBFdmVudEhhbmRsZXI6OnNlbmRSZXNpemVFdmVudCgpCiB7Ci0gICAg
aWYgKERvY3VtZW50KiBkb2MgPSBtX2ZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICBkb2MtPmRp
c3BhdGNoV2luZG93RXZlbnQoZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50LCBmYWxzZSwgZmFsc2Up
OworICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQoZXZlbnROYW1l
cygpLnJlc2l6ZUV2ZW50LCBmYWxzZSwgZmFsc2UpOwogfQogCiB2b2lkIEV2ZW50SGFuZGxlcjo6
c2VuZFNjcm9sbEV2ZW50KCkKQEAgLTIyODIsMTAgKzIyNjQsNyBAQCB2b2lkIEV2ZW50SGFuZGxl
cjo6c2VuZFNjcm9sbEV2ZW50KCkKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICB2
LT5zZXRXYXNTY3JvbGxlZEJ5VXNlcih0cnVlKTsKLSAgICBEb2N1bWVudCogZG9jID0gbV9mcmFt
ZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvYykKLSAgICAgICAgcmV0dXJuOwotICAgIGRvYy0+
ZGlzcGF0Y2hFdmVudEZvclR5cGUoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50LCB0cnVlLCBmYWxz
ZSk7CisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZGlzcGF0Y2hFdmVudEZvclR5cGUoZXZlbnRO
YW1lcygpLnNjcm9sbEV2ZW50LCB0cnVlLCBmYWxzZSk7CiB9CiAKIHVuc2lnbmVkIEV2ZW50SGFu
ZGxlcjo6cGVuZGluZ0ZyYW1lQmVmb3JlVW5sb2FkRXZlbnRDb3VudCgpCkluZGV4OiBXZWJDb3Jl
L3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRm9j
dXNDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNDA4MTQpCisrKyBXZWJDb3JlL3BhZ2UvRm9jdXND
b250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsOCArOTAsNiBAQCBzdGF0aWMgTm9k
ZSogZGVlcEZvY3VzYWJsZU5vZGUoRm9jdXNEaXJlCiAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBvd25lci0+Y29udGVudEZyYW1lKCktPmRvY3VtZW50
KCk7Ci0gICAgICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICBub2RlID0gKGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkZvcndhcmQpCiAgICAgICAgICAg
ICA/IGRvY3VtZW50LT5uZXh0Rm9jdXNhYmxlTm9kZSgwLCBldmVudCkKQEAgLTExNSw4ICsxMTMs
NiBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzKEZvY3VzCiAgICAgRnJhbWUq
IGZyYW1lID0gZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50
KQotICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBOb2RlKiBub2RlID0gKGRpcmVjdGlvbiA9
PSBGb2N1c0RpcmVjdGlvbkZvcndhcmQpCiAgICAgICAgID8gZG9jdW1lbnQtPm5leHRGb2N1c2Fi
bGVOb2RlKGRvY3VtZW50LT5mb2N1c2VkTm9kZSgpLCBldmVudCkKQEAgLTEyOSw4ICsxMjUsNiBA
QCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzKEZvY3VzCiAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICBEb2N1bWVudCogcGFyZW50RG9jdW1lbnQgPSBwYXJlbnRGcmFtZS0+
ZG9jdW1lbnQoKTsKLSAgICAgICAgaWYgKCFwYXJlbnREb2N1bWVudCkKLSAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBmcmFtZS0+b3du
ZXJFbGVtZW50KCk7CiAgICAgICAgIGlmICghb3duZXIpCkBAIC0xNTUsMTAgKzE0OSwxMCBAQCBi
b29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzKEZvY3VzCiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBDaHJvbWUgZG9lc24ndCB3YW50IGZvY3VzLCBzbyB3ZSBzaG91bGQgd3JhcCBmb2N1
cy4KLSAgICAgICAgaWYgKERvY3VtZW50KiBkID0gbV9wYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1l
bnQoKSkKLSAgICAgICAgICAgIG5vZGUgPSAoZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uRm9y
d2FyZCkKLSAgICAgICAgICAgICAgICA/IGQtPm5leHRGb2N1c2FibGVOb2RlKDAsIGV2ZW50KQot
ICAgICAgICAgICAgICAgIDogZC0+cHJldmlvdXNGb2N1c2FibGVOb2RlKDAsIGV2ZW50KTsKKyAg
ICAgICAgRG9jdW1lbnQqIGQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpOworICAg
ICAgICBub2RlID0gKGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkZvcndhcmQpCisgICAgICAg
ICAgICA/IGQtPm5leHRGb2N1c2FibGVOb2RlKDAsIGV2ZW50KQorICAgICAgICAgICAgOiBkLT5w
cmV2aW91c0ZvY3VzYWJsZU5vZGUoMCwgZXZlbnQpOwogCiAgICAgICAgIG5vZGUgPSBkZWVwRm9j
dXNhYmxlTm9kZShkaXJlY3Rpb24sIG5vZGUsIGV2ZW50KTsKIApJbmRleDogV2ViQ29yZS9wYWdl
L0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lv
biA0MDgxNCkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2
Niw3ICs1NjYsNyBAQCBzdGF0aWMgYm9vbCBpc0ZyYW1lRWxlbWVudChjb25zdCBOb2RlICpuCiAK
IHZvaWQgRnJhbWU6OnNldEZvY3VzZWROb2RlSWZOZWVkZWQoKQogewotICAgIGlmICghZG9jdW1l
bnQoKSB8fCBzZWxlY3Rpb24oKS0+aXNOb25lKCkgfHwgIXNlbGVjdGlvbigpLT5pc0ZvY3VzZWRB
bmRBY3RpdmUoKSkKKyAgICBpZiAoc2VsZWN0aW9uKCktPmlzTm9uZSgpIHx8ICFzZWxlY3Rpb24o
KS0+aXNGb2N1c2VkQW5kQWN0aXZlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIE5vZGUqIHRh
cmdldCA9IHNlbGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVtZW50KCk7CkBAIC02OTYsNyArNjk2
LDcgQEAgYm9vbCBGcmFtZTo6c2hvdWxkQXBwbHlUZXh0Wm9vbSgpIGNvbnN0CiAgICAgaWYgKG1f
em9vbUZhY3RvciA9PSAxLjBmIHx8ICFpc1pvb21GYWN0b3JUZXh0T25seSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAjaWYgRU5BQkxFKFNWRykKLSAgICBpZiAobV9kb2MgJiYgbV9kb2MtPmlz
U1ZHRG9jdW1lbnQoKSkKKyAgICBpZiAobV9kb2MtPmlzU1ZHRG9jdW1lbnQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CkBAIC03MDcsNyArNzA3LDcg
QEAgYm9vbCBGcmFtZTo6c2hvdWxkQXBwbHlQYWdlWm9vbSgpIGNvbnN0CiAgICAgaWYgKG1fem9v
bUZhY3RvciA9PSAxLjBmIHx8IGlzWm9vbUZhY3RvclRleHRPbmx5KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChtX2RvYyAmJiBtX2RvYy0+aXNTVkdE
b2N1bWVudCgpKQorICAgIGlmIChtX2RvYy0+aXNTVkdEb2N1bWVudCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTcyMSw3ICs3MjEsNyBAQCB2
b2lkIEZyYW1lOjpzZXRab29tRmFjdG9yKGZsb2F0IHBlcmNlbnQsCiAjaWYgRU5BQkxFKFNWRykK
ICAgICAvLyBTVkcgZG9lc24ndCBjYXJlIGlmIHRoZSB6b29tIGZhY3RvciBpcyB0ZXh0IG9ubHku
ICBJdCB3aWxsIGFsd2F5cyBhcHBseSBhIAogICAgIC8vIHpvb20gdG8gdGhlIHdob2xlIFNWRy4K
LSAgICBpZiAobV9kb2MgJiYgbV9kb2MtPmlzU1ZHRG9jdW1lbnQoKSkgeworICAgIGlmIChtX2Rv
Yy0+aXNTVkdEb2N1bWVudCgpKSB7CiAgICAgICAgIGlmICghc3RhdGljX2Nhc3Q8U1ZHRG9jdW1l
bnQqPihtX2RvYy5nZXQoKSktPnpvb21BbmRQYW5FbmFibGVkKCkpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIG1fem9vbUZhY3RvciA9IHBlcmNlbnQ7CkBAIC03MzUsMjEgKzczNSwxNyBA
QCB2b2lkIEZyYW1lOjpzZXRab29tRmFjdG9yKGZsb2F0IHBlcmNlbnQsCiAgICAgbV96b29tRmFj
dG9yID0gcGVyY2VudDsKICAgICBtX3BhZ2UtPnNldHRpbmdzKCktPnNldFpvb21zVGV4dE9ubHko
aXNUZXh0T25seSk7CiAKLSAgICBpZiAobV9kb2MpCi0gICAgICAgIG1fZG9jLT5yZWNhbGNTdHls
ZShOb2RlOjpGb3JjZSk7CisgICAgbV9kb2MtPnJlY2FsY1N0eWxlKE5vZGU6OkZvcmNlKTsKIAog
ICAgIGZvciAoRnJhbWUqIGNoaWxkID0gdHJlZSgpLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT50cmVlKCktPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGNoaWxkLT5zZXRab29t
RmFjdG9yKG1fem9vbUZhY3RvciwgaXNUZXh0T25seSk7CiAKLSAgICBpZiAobV9kb2MgJiYgbV9k
b2MtPnJlbmRlcmVyKCkgJiYgbV9kb2MtPnJlbmRlcmVyKCktPm5lZWRzTGF5b3V0KCkgJiYgdmll
dygpLT5kaWRGaXJzdExheW91dCgpKQorICAgIGlmIChtX2RvYy0+cmVuZGVyZXIoKSAmJiBtX2Rv
Yy0+cmVuZGVyZXIoKS0+bmVlZHNMYXlvdXQoKSAmJiB2aWV3KCktPmRpZEZpcnN0TGF5b3V0KCkp
CiAgICAgICAgIHZpZXcoKS0+bGF5b3V0KCk7CiB9CiAKIHZvaWQgRnJhbWU6OnNldFByaW50aW5n
KGJvb2wgcHJpbnRpbmcsIGZsb2F0IG1pblBhZ2VXaWR0aCwgZmxvYXQgbWF4UGFnZVdpZHRoLCBi
b29sIGFkanVzdFZpZXdTaXplKQogewotICAgIGlmICghbV9kb2MpCi0gICAgICAgIHJldHVybjsK
LQogICAgIG1fZG9jLT5zZXRQcmludGluZyhwcmludGluZyk7CiAgICAgdmlldygpLT5zZXRNZWRp
YVR5cGUocHJpbnRpbmcgPyAicHJpbnQiIDogInNjcmVlbiIpOwogICAgIG1fZG9jLT51cGRhdGVT
dHlsZVNlbGVjdG9yKCk7CkBAIC04MDgsOCArODA0LDcgQEAgdm9pZCBGcmFtZTo6cmVhcHBseVN0
eWxlcygpCiAgICAgLy8gRklYTUU6IFRoaXMgY2FsbCBkb2Vzbid0IHJlYWxseSBtYWtlIHNlbnNl
IGluIGEgbWV0aG9kIGNhbGxlZAogICAgIC8vICJyZWFwcGx5U3R5bGVzIi4gV2Ugc2hvdWxkIHBy
b2JhYmx5IGV2ZW50dWFsbHkgbW92ZSBpdCBpbnRvIGl0cyBvd24KICAgICAvLyBtZXRob2QuCi0g
ICAgaWYgKG1fZG9jKQotICAgICAgICBtX2RvYy0+ZG9jTG9hZGVyKCktPnNldEF1dG9Mb2FkSW1h
Z2VzKG1fcGFnZSAmJiBtX3BhZ2UtPnNldHRpbmdzKCktPmxvYWRzSW1hZ2VzQXV0b21hdGljYWxs
eSgpKTsKKyAgICBtX2RvYy0+ZG9jTG9hZGVyKCktPnNldEF1dG9Mb2FkSW1hZ2VzKG1fcGFnZSAm
JiBtX3BhZ2UtPnNldHRpbmdzKCktPmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSgpKTsKICAgICAg
ICAgCiAjaWYgRlJBTUVfTE9BRFNfVVNFUl9TVFlMRVNIRUVUCiAgICAgY29uc3QgS1VSTCB1c2Vy
U3R5bGVTaGVldExvY2F0aW9uID0gbV9wYWdlID8gbV9wYWdlLT5zZXR0aW5ncygpLT51c2VyU3R5
bGVTaGVldExvY2F0aW9uKCkgOiBLVVJMKCk7CkBAIC04MjMsOCArODE4LDcgQEAgdm9pZCBGcmFt
ZTo6cmVhcHBseVN0eWxlcygpCiAgICAgLy8gVGhlIGRvY3VtZW50IGF1dG9tYXRpY2FsbHkgZG9l
cyB0aGlzIGFzIHJlcXVpcmVkIHdoZW4geW91IHNldCB0aGUgc3R5bGUgc2hlZXQuCiAgICAgLy8g
QnV0IHdlIGhhZCBwcm9ibGVtcyB3aGVuIHRoaXMgY29kZSB3YXMgcmVtb3ZlZC4gRGV0YWlscyBh
cmUgaW4KICAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA3
OT4uCi0gICAgaWYgKG1fZG9jKQotICAgICAgICBtX2RvYy0+dXBkYXRlU3R5bGVTZWxlY3Rvcigp
OworICAgIG1fZG9jLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7CiB9CiAKIGJvb2wgRnJhbWU6OnNo
b3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24p
IGNvbnN0CkBAIC04NDcsOCArODQxLDYgQEAgYm9vbCBGcmFtZTo6aXNDb250ZW50RWRpdGFibGUo
KSBjb25zdCAKIHsKICAgICBpZiAobV9lZGl0b3IuY2xpZW50SXNFZGl0YWJsZSgpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIW1fZG9jKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgcmV0dXJuIG1fZG9jLT5pbkRlc2lnbk1vZGUoKTsKIH0KIApAQCAtOTE3LDcgKzkwOSw3IEBA
IHZvaWQgRnJhbWU6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShDU1MKICAgICAvLyBIYW5kbGUg
YmxvY2sgc3R5bGVzLCBzdWJzdHJhY3RpbmcgdGhlc2UgZnJvbSB0aGUgdHlwaW5nIHN0eWxlLgog
ICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gYmxvY2tTdHlsZSA9IG11dGFi
bGVTdHlsZS0+Y29weUJsb2NrUHJvcGVydGllcygpOwogICAgIGJsb2NrU3R5bGUtPmRpZmYobXV0
YWJsZVN0eWxlLmdldCgpKTsKLSAgICBpZiAoZG9jdW1lbnQoKSAmJiBibG9ja1N0eWxlLT5sZW5n
dGgoKSA+IDApCisgICAgaWYgKGJsb2NrU3R5bGUtPmxlbmd0aCgpID4gMCkKICAgICAgICAgYXBw
bHlDb21tYW5kKEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgYmxvY2tTdHls
ZS5nZXQoKSwgZWRpdGluZ0FjdGlvbikpOwogICAgIAogICAgIC8vIFNldCB0aGUgcmVtYWluaW5n
IHN0eWxlIGFzIHRoZSB0eXBpbmcgc3R5bGUuCkBAIC05NDYsOSArOTM4LDYgQEAgUGFzc1JlZlB0
cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IAogewogICAgIG5vZGVUb1JlbW92ZSA9IDA7
CiAKLSAgICBpZiAoIWRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCiAgICAgaWYgKHNl
bGVjdGlvbigpLT5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTEwMzIsOSArMTAy
MSw2IEBAIHZvaWQgRnJhbWU6OnRleHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW0KIAogdm9pZCBG
cmFtZTo6YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCkgY29uc3QKIHsKLSAgICBpZiAo
IW1fZG9jKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAogICAgIFJlZlB0cjxOb2RlTGlzdD4g
bGlzdCA9IG1fZG9jLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpOwogICAgIHVuc2lnbmVk
IGxlbiA9IGxpc3QtPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47
IGkrKykgewpAQCAtMTA0NCw5ICsxMDMwLDYgQEAgdm9pZCBGcmFtZTo6YXBwbHlFZGl0aW5nU3R5
bGVUb0JvZHlFbGVtZQogCiB2b2lkIEZyYW1lOjpyZW1vdmVFZGl0aW5nU3R5bGVGcm9tQm9keUVs
ZW1lbnQoKSBjb25zdAogewotICAgIGlmICghbV9kb2MpCi0gICAgICAgIHJldHVybjsKLSAgICAg
ICAgCiAgICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gbV9kb2MtPmdldEVsZW1lbnRzQnlUYWdO
YW1lKCJib2R5Iik7CiAgICAgdW5zaWduZWQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CkBAIC0xMTI3LDggKzExMTAsNiBAQCB2
b2lkIEZyYW1lOjpjbGVhckRPTVdpbmRvdygpCiBSZW5kZXJWaWV3KiBGcmFtZTo6Y29udGVudFJl
bmRlcmVyKCkgY29uc3QKIHsKICAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsKLSAgICBp
ZiAoIWRvYykKLSAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBk
b2MtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybiAwOwpAQCAt
MTMyNiw4ICsxMzA3LDYgQEAgUmVuZGVyU3R5bGUgKkZyYW1lOjpzdHlsZUZvclNlbGVjdGlvblN0
YQogewogICAgIG5vZGVUb1JlbW92ZSA9IDA7CiAgICAgCi0gICAgaWYgKCFkb2N1bWVudCgpKQot
ICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoc2VsZWN0aW9uKCktPmlzTm9uZSgpKQogICAgICAg
ICByZXR1cm4gMDsKICAgICAKQEAgLTEzNjQsNyArMTM0Myw3IEBAIHZvaWQgRnJhbWU6OnNldFNl
bGVjdGlvbkZyb21Ob25lKCkKICAgICAvLyBQdXQgYSBjYXJldCBpbnNpZGUgdGhlIGJvZHkgaWYg
dGhlIGVudGlyZSBmcmFtZSBpcyBlZGl0YWJsZSAoZWl0aGVyIHRoZSAKICAgICAvLyBlbnRpcmUg
V2ViVmlldyBpcyBlZGl0YWJsZSBvciBkZXNpZ25Nb2RlIGlzIG9uIGZvciB0aGlzIGRvY3VtZW50
KS4KICAgICBEb2N1bWVudCAqZG9jID0gZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvYyB8fCAhc2Vs
ZWN0aW9uKCktPmlzTm9uZSgpIHx8ICFpc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmICghc2Vs
ZWN0aW9uKCktPmlzTm9uZSgpIHx8ICFpc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1
cm47CiAgICAgICAgIAogICAgIE5vZGUqIG5vZGUgPSBkb2MtPmRvY3VtZW50RWxlbWVudCgpOwpA
QCAtMTM4Nyw3ICsxMzY2LDcgQEAgdm9pZCBGcmFtZTo6c2V0SW5WaWV3U291cmNlTW9kZShib29s
IG1vZAogLy8gU2VhcmNoZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudCBpZiBu
b3RoaW5nIGlzIHNlbGVjdGVkLgogYm9vbCBGcmFtZTo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcm
IHRhcmdldCwgYm9vbCBmb3J3YXJkLCBib29sIGNhc2VGbGFnLCBib29sIHdyYXBGbGFnLCBib29s
IHN0YXJ0SW5TZWxlY3Rpb24pCiB7Ci0gICAgaWYgKHRhcmdldC5pc0VtcHR5KCkgfHwgIWRvY3Vt
ZW50KCkpCisgICAgaWYgKHRhcmdldC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKICAgICBpZiAoZXhjbHVkZUZyb21UZXh0U2VhcmNoKCkpCkBAIC0xNDczLDcgKzE0NTIs
NyBAQCBib29sIEZyYW1lOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyCiAKIHVuc2lnbmVk
IEZyYW1lOjptYXJrQWxsTWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIGJvb2wg
Y2FzZUZsYWcsIHVuc2lnbmVkIGxpbWl0KQogewotICAgIGlmICh0YXJnZXQuaXNFbXB0eSgpIHx8
ICFkb2N1bWVudCgpKQorICAgIGlmICh0YXJnZXQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
MDsKICAgICAKICAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlKHJhbmdlT2ZDb250ZW50cyhk
b2N1bWVudCgpKSk7CkBAIC0xNTE2LDcgKzE0OTUsNyBAQCB1bnNpZ25lZCBGcmFtZTo6bWFya0Fs
bE1hdGNoZXNGb3JUZXh0KGNvCiAgICAgLy8gRG8gYSAiZmFrZSIgcGFpbnQgaW4gb3JkZXIgdG8g
ZXhlY3V0ZSB0aGUgY29kZSB0aGF0IGNvbXB1dGVzIHRoZSByZW5kZXJlZCByZWN0IGZvciAKICAg
ICAvLyBlYWNoIHRleHQgbWF0Y2guCiAgICAgRG9jdW1lbnQqIGRvYyA9IGRvY3VtZW50KCk7Ci0g
ICAgaWYgKGRvYyAmJiBtX3ZpZXcgJiYgY29udGVudFJlbmRlcmVyKCkpIHsKKyAgICBpZiAobV92
aWV3ICYmIGNvbnRlbnRSZW5kZXJlcigpKSB7CiAgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0KCk7
IC8vIEVuc3VyZSBsYXlvdXQgaXMgdXAgdG8gZGF0ZS4KICAgICAgICAgSW50UmVjdCB2aXNpYmxl
UmVjdCA9IG1fdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgICAgIGlmICghdmlzaWJs
ZVJlY3QuaXNFbXB0eSgpKSB7CkBAIC0xNTM2LDcgKzE1MTUsNyBAQCBib29sIEZyYW1lOjptYXJr
ZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdoCiAKIHZvaWQgRnJhbWU6OnNldE1hcmtlZFRleHRNYXRj
aGVzQXJlSGlnaGxpZ2h0ZWQoYm9vbCBmbGFnKQogewotICAgIGlmIChmbGFnID09IG1faGlnaGxp
Z2h0VGV4dE1hdGNoZXMgfHwgIWRvY3VtZW50KCkpCisgICAgaWYgKGZsYWcgPT0gbV9oaWdobGln
aHRUZXh0TWF0Y2hlcykKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIG1faGlnaGxpZ2h0VGV4
dE1hdGNoZXMgPSBmbGFnOwpAQCAtMTYxNiwxMCArMTU5NSw4IEBAIHZvaWQgRnJhbWU6OmRpc2Nv
bm5lY3RPd25lckVsZW1lbnQoKQogCiBTdHJpbmcgRnJhbWU6OmRvY3VtZW50VHlwZVN0cmluZygp
IGNvbnN0CiB7Ci0gICAgaWYgKERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpKSB7Ci0gICAgICAg
IGlmIChEb2N1bWVudFR5cGUqIGRvY3R5cGUgPSBkb2MtPmRvY3R5cGUoKSkKLSAgICAgICAgICAg
IHJldHVybiBjcmVhdGVNYXJrdXAoZG9jdHlwZSk7Ci0gICAgfQorICAgIGlmIChEb2N1bWVudFR5
cGUqIGRvY3R5cGUgPSBkb2N1bWVudCgpLT5kb2N0eXBlKCkpCisgICAgICAgIHJldHVybiBjcmVh
dGVNYXJrdXAoZG9jdHlwZSk7CiAKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CkBAIC0xNjUzLDgg
KzE2MzAsNiBAQCBib29sIEZyYW1lOjpzaG91bGRDbG9zZSgpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2MgPSBkb2N1bWVudCgpOwotICAgIGlmICghZG9j
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBIVE1MRWxlbWVudCogYm9keSA9IGRvYy0+Ym9k
eSgpOwogICAgIGlmICghYm9keSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNjYzLDcgKzE2
MzgsNyBAQCBib29sIEZyYW1lOjpzaG91bGRDbG9zZSgpCiAgICAgYmVmb3JlVW5sb2FkRXZlbnQt
PnNldFRhcmdldChkb2MpOwogICAgIGRvYy0+aGFuZGxlV2luZG93RXZlbnQoYmVmb3JlVW5sb2Fk
RXZlbnQuZ2V0KCksIGZhbHNlKTsKIAotICAgIGlmICghYmVmb3JlVW5sb2FkRXZlbnQtPmRlZmF1
bHRQcmV2ZW50ZWQoKSAmJiBkb2MpCisgICAgaWYgKCFiZWZvcmVVbmxvYWRFdmVudC0+ZGVmYXVs
dFByZXZlbnRlZCgpKQogICAgICAgICBkb2MtPmRlZmF1bHRFdmVudEhhbmRsZXIoYmVmb3JlVW5s
b2FkRXZlbnQuZ2V0KCkpOwogICAgIGlmIChiZWZvcmVVbmxvYWRFdmVudC0+cmVzdWx0KCkuaXNO
dWxsKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTY4NCw1MCArMTY1OSw0OCBAQCB2b2lk
IEZyYW1lOjpzY2hlZHVsZUNsb3NlKCkKIAogdm9pZCBGcmFtZTo6cmVzcG9uZFRvQ2hhbmdlZFNl
bGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGJvb2wgY2xvc2VU
eXBpbmcpCiB7Ci0gICAgaWYgKGRvY3VtZW50KCkpIHsKLSAgICAgICAgYm9vbCBpc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGVkaXRvcigpLT5pc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCgpOwotICAgICAgICBib29sIGlzQ29udGludW91c0dyYW1tYXJDaGVja2luZ0Vu
YWJsZWQgPSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCAmJiBlZGl0b3IoKS0+aXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKCk7Ci0gICAgICAgIGlmIChpc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCkgewotICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdBZGphY2Vu
dFdvcmRzOwotICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3RlZFNlbnRlbmNl
OwotICAgICAgICAgICAgaWYgKHNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0
YWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1N0YXJ0KHNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7Ci0gICAgICAgICAgICAgICAgbmV3
QWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQobmV3U3RhcnQsIExl
ZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKG5ld1N0YXJ0LCBSaWdodFdvcmRJZk9uQm91
bmRhcnkpKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNDb250aW51b3VzR3JhbW1hckNoZWNraW5n
RW5hYmxlZCkKLSAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRTZW50ZW5jZSA9IFZpc2li
bGVTZWxlY3Rpb24oc3RhcnRPZlNlbnRlbmNlKG5ld1N0YXJ0KSwgZW5kT2ZTZW50ZW5jZShuZXdT
dGFydCkpOwotICAgICAgICAgICAgfQorICAgIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQgPSBlZGl0b3IoKS0+aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsK
KyAgICBib29sIGlzQ29udGludW91c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBpc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCAmJiBlZGl0b3IoKS0+aXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKCk7CisgICAgaWYgKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKSB7CisgICAg
ICAgIFZpc2libGVTZWxlY3Rpb24gbmV3QWRqYWNlbnRXb3JkczsKKyAgICAgICAgVmlzaWJsZVNl
bGVjdGlvbiBuZXdTZWxlY3RlZFNlbnRlbmNlOworICAgICAgICBpZiAoc2VsZWN0aW9uKCktPnNl
bGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICAgICAgICAgIFZpc2libGVQb3Np
dGlvbiBuZXdTdGFydChzZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwor
ICAgICAgICAgICAgbmV3QWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldv
cmQobmV3U3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKG5ld1N0YXJ0LCBS
aWdodFdvcmRJZk9uQm91bmRhcnkpKTsKKyAgICAgICAgICAgIGlmIChpc0NvbnRpbnVvdXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkKQorICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkU2VudGVuY2Ug
PSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZTZW50ZW5jZShuZXdTdGFydCksIGVuZE9mU2VudGVu
Y2UobmV3U3RhcnQpKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBXaGVuIHR5cGluZyB3
ZSBjaGVjayBzcGVsbGluZyBlbHNld2hlcmUsIHNvIGRvbid0IHJlZG8gaXQgaGVyZS4KLSAgICAg
ICAgICAgIC8vIElmIHRoaXMgaXMgYSBjaGFuZ2UgaW4gc2VsZWN0aW9uIHJlc3VsdGluZyBmcm9t
IGEgZGVsZXRlIG9wZXJhdGlvbiwKLSAgICAgICAgICAgIC8vIG9sZFNlbGVjdGlvbiBtYXkgbm8g
bG9uZ2VyIGJlIGluIHRoZSBkb2N1bWVudC4KLSAgICAgICAgICAgIGlmIChjbG9zZVR5cGluZyAm
JiBvbGRTZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSAmJiBvbGRTZWxlY3Rpb24uc3RhcnQo
KS5ub2RlKCkgJiYgb2xkU2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpLT5pbkRvY3VtZW50KCkpIHsK
LSAgICAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gb2xkU3RhcnQob2xkU2VsZWN0aW9uLnZp
c2libGVTdGFydCgpKTsKLSAgICAgICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZEFkamFj
ZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKG9sZFN0YXJ0LCBMZWZ0V29y
ZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChvbGRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5
KSk7ICAgCi0gICAgICAgICAgICAgICAgaWYgKG9sZEFkamFjZW50V29yZHMgIT0gbmV3QWRqYWNl
bnRXb3JkcykgewotICAgICAgICAgICAgICAgICAgICBlZGl0b3IoKS0+bWFya01pc3NwZWxsaW5n
cyhvbGRBZGphY2VudFdvcmRzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ29udGludW91
c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpc2li
bGVTZWxlY3Rpb24gb2xkU2VsZWN0ZWRTZW50ZW5jZSA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRP
ZlNlbnRlbmNlKG9sZFN0YXJ0KSwgZW5kT2ZTZW50ZW5jZShvbGRTdGFydCkpOyAgIAotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG9sZFNlbGVjdGVkU2VudGVuY2UgIT0gbmV3U2VsZWN0ZWRT
ZW50ZW5jZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IoKS0+bWFya0JhZEdy
YW1tYXIob2xkU2VsZWN0ZWRTZW50ZW5jZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgLy8gV2hlbiB0eXBpbmcgd2UgY2hlY2sgc3BlbGxpbmcgZWxzZXdoZXJlLCBzbyBkb24ndCBy
ZWRvIGl0IGhlcmUuCisgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjaGFuZ2UgaW4gc2VsZWN0aW9u
IHJlc3VsdGluZyBmcm9tIGEgZGVsZXRlIG9wZXJhdGlvbiwKKyAgICAgICAgLy8gb2xkU2VsZWN0
aW9uIG1heSBubyBsb25nZXIgYmUgaW4gdGhlIGRvY3VtZW50LgorICAgICAgICBpZiAoY2xvc2VU
eXBpbmcgJiYgb2xkU2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgJiYgb2xkU2VsZWN0aW9u
LnN0YXJ0KCkubm9kZSgpICYmIG9sZFNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKS0+aW5Eb2N1bWVu
dCgpKSB7CisgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gb2xkU3RhcnQob2xkU2VsZWN0aW9u
LnZpc2libGVTdGFydCgpKTsKKyAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gb2xkQWRqYWNl
bnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQob2xkU3RhcnQsIExlZnRXb3Jk
SWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKG9sZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkp
KTsgICAKKyAgICAgICAgICAgIGlmIChvbGRBZGphY2VudFdvcmRzICE9IG5ld0FkamFjZW50V29y
ZHMpIHsKKyAgICAgICAgICAgICAgICBlZGl0b3IoKS0+bWFya01pc3NwZWxsaW5ncyhvbGRBZGph
Y2VudFdvcmRzKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNDb250aW51b3VzR3JhbW1hckNoZWNr
aW5nRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNl
bGVjdGVkU2VudGVuY2UgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZTZW50ZW5jZShvbGRTdGFy
dCksIGVuZE9mU2VudGVuY2Uob2xkU3RhcnQpKTsgICAKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG9sZFNlbGVjdGVkU2VudGVuY2UgIT0gbmV3U2VsZWN0ZWRTZW50ZW5jZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVkaXRvcigpLT5tYXJrQmFkR3JhbW1hcihvbGRTZWxlY3RlZFNlbnRlbmNl
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFRo
aXMgb25seSBlcmFzZXMgbWFya2VycyB0aGF0IGFyZSBpbiB0aGUgZmlyc3QgdW5pdCAod29yZCBv
ciBzZW50ZW5jZSkgb2YgdGhlIHNlbGVjdGlvbi4KLSAgICAgICAgICAgIC8vIFBlcmhhcHMgcGVj
dWxpYXIsIGJ1dCBpdCBtYXRjaGVzIEFwcEtpdC4KLSAgICAgICAgICAgIGlmIChSZWZQdHI8UmFu
Z2U+IHdvcmRSYW5nZSA9IG5ld0FkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKSkKLSAg
ICAgICAgICAgICAgICBkb2N1bWVudCgpLT5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZS5nZXQoKSwg
RG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+
IHNlbnRlbmNlUmFuZ2UgPSBuZXdTZWxlY3RlZFNlbnRlbmNlLnRvTm9ybWFsaXplZFJhbmdlKCkp
Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlTWFya2VycyhzZW50ZW5jZVJhbmdl
LmdldCgpLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CiAgICAgICAgIH0KIAotICAgICAgICAv
LyBXaGVuIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgb2ZmLCBleGlzdGluZyBtYXJrZXJz
IGRpc2FwcGVhciBhZnRlciB0aGUgc2VsZWN0aW9uIGNoYW5nZXMuCi0gICAgICAgIGlmICghaXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCi0gICAgICAgICAgICBkb2N1bWVudCgpLT5y
ZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7Ci0gICAgICAgIGlmICghaXND
b250aW51b3VzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKLSAgICAgICAgICAgIGRvY3VtZW50KCkt
PnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOworICAgICAgICAvLyBUaGlz
IG9ubHkgZXJhc2VzIG1hcmtlcnMgdGhhdCBhcmUgaW4gdGhlIGZpcnN0IHVuaXQgKHdvcmQgb3Ig
c2VudGVuY2UpIG9mIHRoZSBzZWxlY3Rpb24uCisgICAgICAgIC8vIFBlcmhhcHMgcGVjdWxpYXIs
IGJ1dCBpdCBtYXRjaGVzIEFwcEtpdC4KKyAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gd29yZFJh
bmdlID0gbmV3QWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpKQorICAgICAgICAgICAg
ZG9jdW1lbnQoKS0+cmVtb3ZlTWFya2Vycyh3b3JkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2Vy
OjpTcGVsbGluZyk7CisgICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHNlbnRlbmNlUmFuZ2UgPSBu
ZXdTZWxlY3RlZFNlbnRlbmNlLnRvTm9ybWFsaXplZFJhbmdlKCkpCisgICAgICAgICAgICBkb2N1
bWVudCgpLT5yZW1vdmVNYXJrZXJzKHNlbnRlbmNlUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2Vy
OjpHcmFtbWFyKTsKICAgICB9CiAKKyAgICAvLyBXaGVuIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tp
bmcgaXMgb2ZmLCBleGlzdGluZyBtYXJrZXJzIGRpc2FwcGVhciBhZnRlciB0aGUgc2VsZWN0aW9u
IGNoYW5nZXMuCisgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkKKyAg
ICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcp
OworICAgIGlmICghaXNDb250aW51b3VzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKKyAgICAgICAg
ZG9jdW1lbnQoKS0+cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CisKICAg
ICBlZGl0b3IoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwogfQog
CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gNDA4MTQpCisrKyBXZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw3IEBAIEZyYW1lVmlldzo6
fkZyYW1lVmlldygpCiAgICAgQVNTRVJUKCFtX2VucXVldWVFdmVudHMpOwogCiAgICAgaWYgKG1f
ZnJhbWUpIHsKLSAgICAgICAgQVNTRVJUKG1fZnJhbWUtPnZpZXcoKSAhPSB0aGlzIHx8ICFtX2Zy
YW1lLT5kb2N1bWVudCgpIHx8ICFtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSk7CisgICAgICAg
IEFTU0VSVChtX2ZyYW1lLT52aWV3KCkgIT0gdGhpcyB8fCAhbV9mcmFtZS0+Y29udGVudFJlbmRl
cmVyKCkpOwogICAgICAgICBSZW5kZXJQYXJ0KiByZW5kZXJlciA9IG1fZnJhbWUtPm93bmVyUmVu
ZGVyZXIoKTsKICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT53aWRnZXQoKSA9PSB0
aGlzKQogICAgICAgICAgICAgcmVuZGVyZXItPnNldFdpZGdldCgwKTsKQEAgLTI4Niw4ICsyODYs
NiBAQCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gRnJhbWVWaWV3OjpjcmVhdGVTCiB7CiAgICAgLy8g
RklYTUU6IFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBzY3JvbGxiYXIgZHluYW1pY2FsbHkgYXMgZG9j
dW1lbnRzIGNoYW5nZSAob3IgYXMgZG9jIGVsZW1lbnRzIGFuZCBib2RpZXMgZ2V0IGRpc2NvdmVy
ZWQgdGhhdCBoYXZlIGN1c3RvbSBzdHlsZXMpLgogICAgIERvY3VtZW50KiBkb2MgPSBtX2ZyYW1l
LT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jKQotICAgICAgICByZXR1cm4gU2Nyb2xsVmlldzo6
Y3JlYXRlU2Nyb2xsYmFyKG9yaWVudGF0aW9uKTsKIAogICAgIC8vIFRyeSB0aGUgPGJvZHk+IGVs
ZW1lbnQgZmlyc3QgYXMgYSBzY3JvbGxiYXIgc291cmNlLgogICAgIEVsZW1lbnQqIGJvZHkgPSBk
b2MtPmJvZHkoKTsKQEAgLTQ0MywxMSArNDQxLDYgQEAgdm9pZCBGcmFtZVZpZXc6OmxheW91dChi
b29sIGFsbG93U3VidHJlZQogICAgICAgICByZXR1cm47CiAKICAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpIHsKLSAgICAgICAg
Ly8gRklYTUU6IFNob3VsZCB3ZSBzZXQgbV9zaXplLmhlaWdodCBoZXJlIHRvbz8KLSAgICAgICAg
bV9zaXplLnNldFdpZHRoKGxheW91dFdpZHRoKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQog
CiAgICAgbV9sYXlvdXRTY2hlZHVsaW5nRW5hYmxlZCA9IGZhbHNlOwogCkBAIC03NjUsNyArNzU4
LDcgQEAgdm9pZCBGcmFtZVZpZXc6OmVuZERlZmVycmVkUmVwYWludHMoKQogdm9pZCBGcmFtZVZp
ZXc6OmxheW91dFRpbWVyRmlyZWQoVGltZXI8RnJhbWVWaWV3PiopCiB7CiAjaWZkZWYgSU5TVFJV
TUVOVF9MQVlPVVRfU0NIRURVTElORwotICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpICYmICFt
X2ZyYW1lLT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKSkKKyAgICBpZiAoIW1fZnJhbWUtPmRv
Y3VtZW50KCktPm93bmVyRWxlbWVudCgpKQogICAgICAgICBwcmludGYoIkxheW91dCB0aW1lciBm
aXJlZCBhdCAlZFxuIiwgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZWxhcHNlZFRpbWUoKSk7CiAjZW5k
aWYKICAgICBsYXlvdXQoKTsKQEAgLTc3Myw3ICs3NjYsNyBAQCB2b2lkIEZyYW1lVmlldzo6bGF5
b3V0VGltZXJGaXJlZChUaW1lcjxGCiAKIHZvaWQgRnJhbWVWaWV3OjpzY2hlZHVsZVJlbGF5b3V0
KCkKIHsKLSAgICBBU1NFUlQoIW1fZnJhbWUtPmRvY3VtZW50KCkgfHwgIW1fZnJhbWUtPmRvY3Vt
ZW50KCktPmluUGFnZUNhY2hlKCkpOworICAgIEFTU0VSVCghbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
aW5QYWdlQ2FjaGUoKSk7CiAgICAgQVNTRVJUKG1fZnJhbWUtPnZpZXcoKSA9PSB0aGlzKTsKIAog
ICAgIGlmIChtX2xheW91dFJvb3QpIHsKQEAgLTc4NCw3ICs3NzcsNyBAQCB2b2lkIEZyYW1lVmll
dzo6c2NoZWR1bGVSZWxheW91dCgpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW5lZWRzTGF5
b3V0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCkgfHwg
IW1fZnJhbWUtPmRvY3VtZW50KCktPnNob3VsZFNjaGVkdWxlTGF5b3V0KCkpCisgICAgaWYgKCFt
X2ZyYW1lLT5kb2N1bWVudCgpLT5zaG91bGRTY2hlZHVsZUxheW91dCgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBpbnQgZGVsYXkgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5taW5pbXVtTGF5b3V0
RGVsYXkoKTsKQEAgLTg2NSw3ICs4NTgsNyBAQCBib29sIEZyYW1lVmlldzo6bmVlZHNMYXlvdXQo
KSBjb25zdAogICAgIHJldHVybiBsYXlvdXRQZW5kaW5nKCkKICAgICAgICAgfHwgKHJvb3QgJiYg
cm9vdC0+bmVlZHNMYXlvdXQoKSkKICAgICAgICAgfHwgbV9sYXlvdXRSb290Ci0gICAgICAgIHx8
IChkb2N1bWVudCAmJiBkb2N1bWVudC0+aGFzQ2hhbmdlZENoaWxkKCkpIC8vIGNhbiBvY2N1ciB3
aGVuIHVzaW5nIFdlYktpdCBPYmpDIGludGVyZmFjZQorICAgICAgICB8fCBkb2N1bWVudC0+aGFz
Q2hhbmdlZENoaWxkKCkgLy8gY2FuIG9jY3VyIHdoZW4gdXNpbmcgV2ViS2l0IE9iakMgaW50ZXJm
YWNlCiAgICAgICAgIHx8IG1fZnJhbWUtPm5lZWRzUmVhcHBseVN0eWxlcygpOwogfQogCkBAIC04
ODIsNyArODc1LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnVuc2NoZWR1bGVSZWxheW91dCgpCiAgICAg
ICAgIHJldHVybjsKIAogI2lmZGVmIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcKLSAgICBp
ZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSAmJiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+b3duZXJFbGVt
ZW50KCkpCisgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKSkKICAg
ICAgICAgcHJpbnRmKCJMYXlvdXQgdGltZXIgdW5zY2hlZHVsZWQgYXQgJWRcbiIsIG1fZnJhbWUt
PmRvY3VtZW50KCktPmVsYXBzZWRUaW1lKCkpOwogI2VuZGlmCiAgICAgCkBAIC0xMDY1LDcgKzEw
NTgsNyBAQCBJbnRSZWN0IEZyYW1lVmlldzo6d2luZG93Q2xpcFJlY3QoYm9vbCBjCiAKICAgICAv
LyBTZXQgb3VyIGNsaXAgcmVjdCB0byBiZSBvdXIgY29udGVudHMuCiAgICAgSW50UmVjdCBjbGlw
UmVjdCA9IGNvbnRlbnRzVG9XaW5kb3codmlzaWJsZUNvbnRlbnRSZWN0KCFjbGlwVG9Db250ZW50
cykpOwotICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+ZG9jdW1lbnQoKSB8fCAhbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50KCkpCisgICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2Zy
YW1lLT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGNsaXBSZWN0
OwogCiAgICAgLy8gVGFrZSBvdXIgb3duZXIgZWxlbWVudCBhbmQgZ2V0IHRoZSBjbGlwIHJlY3Qg
ZnJvbSB0aGUgZW5jbG9zaW5nIGxheWVyLgpAQCAtMTE5MSwxMiArMTE4NCwxMCBAQCB2b2lkIEZy
YW1lVmlldzo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvCiAgICAgICAgIHJldHVybjsKICAgICAK
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZSgpLT5kb2N1bWVudCgpOwotICAgIGlmICgh
ZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKIAogI2lmbmRlZiBOREVCVUcKICAgICBib29sIGZp
bGxXaXRoUmVkOwotICAgIGlmIChkb2N1bWVudCB8fCBkb2N1bWVudC0+cHJpbnRpbmcoKSkKKyAg
ICBpZiAoZG9jdW1lbnQtPnByaW50aW5nKCkpCiAgICAgICAgIGZpbGxXaXRoUmVkID0gZmFsc2U7
IC8vIFByaW50aW5nLCBkb24ndCBmaWxsIHdpdGggcmVkIChjYW4ndCByZW1lbWJlciB3aHkpLgog
ICAgIGVsc2UgaWYgKGRvY3VtZW50LT5vd25lckVsZW1lbnQoKSkKICAgICAgICAgZmlsbFdpdGhS
ZWQgPSBmYWxzZTsgLy8gU3ViZnJhbWUsIGRvbid0IGZpbGwgd2l0aCByZWQuCkluZGV4OiBXZWJD
b3JlL3BhZ2UvR2VvbG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9HZW9s
b2NhdGlvbi5jcHAJKHJldmlzaW9uIDQwODE0KQorKysgV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsOCArNjIsNyBAQCBHZW9sb2NhdGlvbjo6R2VvbG9j
YXRpb24oRnJhbWUqIGZyYW1lKQogdm9pZCBHZW9sb2NhdGlvbjo6ZGlzY29ubmVjdEZyYW1lKCkK
IHsKICAgICBtX3NlcnZpY2UtPnN0b3BVcGRhdGluZygpOwotICAgIGlmIChtX2ZyYW1lLT5kb2N1
bWVudCgpKQotICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZXRVc2luZ0dlb2xvY2F0aW9u
KGZhbHNlKTsKKyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZXRVc2luZ0dlb2xvY2F0aW9uKGZh
bHNlKTsKICAgICBtX2ZyYW1lID0gMDsKIH0KIApJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gNDA4MTQpCisr
KyBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDkgKzkzLDYgQEAg
c3RhdGljIHZvaWQgbmV0d29ya1N0YXRlQ2hhbmdlZCgpCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGZyYW1lcy5zaXplKCk7IGkrKykgewogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBmcmFtZXNbaV0tPmRvY3VtZW50KCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWRvY3VtZW50
KQotICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAgICAgLy8gSWYgdGhlIGRvY3VtZW50IGRv
ZXMgbm90IGhhdmUgYSBib2R5IHRoZSBldmVudCBzaG91bGQgYmUgZGlzcGF0Y2hlZCB0byB0aGUg
ZG9jdW1lbnQKICAgICAgICAgTm9kZSogZXZlbnRUYXJnZXQgPSBkb2N1bWVudC0+Ym9keSgpOwog
ICAgICAgICBpZiAoIWV2ZW50VGFyZ2V0KQpAQCAtMTU4LDggKzE1NSw3IEBAIFBhZ2U6On5QYWdl
KCkKICAgICBhbGxQYWdlcy0+cmVtb3ZlKHRoaXMpOwogICAgIAogICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNl
TmV4dCgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGZy
YW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudFdpbGxCZWNvbWVJbmFjdGl2ZSgpOworICAgICAgICBm
cmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRXaWxsQmVjb21lSW5hY3RpdmUoKTsKICAgICAgICAg
ZnJhbWUtPnBhZ2VEZXN0cm95ZWQoKTsKICAgICB9CiAgICAgbV9lZGl0b3JDbGllbnQtPnBhZ2VE
ZXN0cm95ZWQoKTsKQEAgLTM1OCw4ICszNTQsNyBAQCB2b2lkIFBhZ2U6OnVubWFya0FsbFRleHRN
YXRjaGVzKCkKIAogICAgIEZyYW1lKiBmcmFtZSA9IG1haW5GcmFtZSgpOwogICAgIGRvIHsKLSAg
ICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAg
ICAgICAgZG9jdW1lbnQtPnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7
CisgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2Vy
OjpUZXh0TWF0Y2gpOwogICAgICAgICBmcmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lLCB0cnVl
LCBmYWxzZSk7CiAgICAgfSB3aGlsZSAoZnJhbWUpOwogfQpAQCAtNDA0LDggKzM5OSw3IEBAIHZv
aWQgUGFnZTo6c2V0TWVkaWFWb2x1bWUoZmxvYXQgdm9sdW1lKQogCiAgICAgbV9tZWRpYVZvbHVt
ZSA9IHZvbHVtZTsKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1haW5GcmFtZSgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoZnJh
bWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+bWVkaWFWb2x1
bWVEaWRDaGFuZ2UoKTsKKyAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPm1lZGlhVm9sdW1lRGlk
Q2hhbmdlKCk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1h
dGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDQwODE0KQorKysgV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3
LDcgKzE0Nyw3IEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZVIKICAg
ICAKICAgICBtX25vZGVDaGFuZ2VzVG9EaXNwYXRjaC5jbGVhcigpOwogICAgIAotICAgIGlmICht
X2ZyYW1lICYmIG1fZnJhbWUtPmRvY3VtZW50KCkpCisgICAgaWYgKG1fZnJhbWUpCiAgICAgICAg
IG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZVJlbmRlcmluZygpOwogfQogCkluZGV4OiBXZWJD
b3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bh
Z2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQkocmV2aXNpb24gNDA4MTQpCisrKyBXZWJDb3JlL3Bh
Z2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtODMsMTAgKzgzLDEw
IEBAIFBhc3NSZWZQdHI8S2V5Ym9hcmRFdmVudD4gRXZlbnRIYW5kbGVyOjoKICAgICAgICAgY2Fz
ZSBOU0tleURvd246IHsKICAgICAgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBwbGF0Zm9y
bUV2ZW50KGV2ZW50KTsKICAgICAgICAgICAgIHBsYXRmb3JtRXZlbnQuZGlzYW1iaWd1YXRlS2V5
RG93bkV2ZW50KFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UmF3S2V5RG93bik7Ci0gICAgICAgICAg
ICByZXR1cm4gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKHBsYXRmb3JtRXZlbnQsIG1fZnJhbWUtPmRv
Y3VtZW50KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpIDogMCk7CisgICAg
ICAgICAgICByZXR1cm4gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKHBsYXRmb3JtRXZlbnQsIG1fZnJh
bWUtPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCkpOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
TlNLZXlVcDoKLSAgICAgICAgICAgIHJldHVybiBLZXlib2FyZEV2ZW50OjpjcmVhdGUoZXZlbnQs
IG1fZnJhbWUtPmRvY3VtZW50KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgpLT5kZWZhdWx0Vmlldygp
IDogMCk7CisgICAgICAgICAgICByZXR1cm4gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKGV2ZW50LCBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpKTsKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTE0MCw4ICsxNDAsNiBAQCBib29sIEV2ZW50
SGFuZGxlcjo6bmVlZHNLZXlib2FyZEV2ZW50RGlzCiAgICAgfQogICAgIAogICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gUlNTIHZpZXcgbmVlZHMgYXJyb3cga2V5IGtl
eXByZXNzIGV2ZW50cy4KICAgICBpZiAoaXNTYWZhcmkgJiYgZG9jdW1lbnQtPnVybCgpLnByb3Rv
Y29sSXMoImZlZWQiKSB8fCBkb2N1bWVudC0+dXJsKCkucHJvdG9jb2xJcygiZmVlZHMiKSkKSW5k
ZXg6IFdlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL21hYy9GcmFtZU1hYy5tbQkocmV2aXNpb24gNDA4MTQpCisrKyBXZWJDb3JlL3BhZ2UvbWFj
L0ZyYW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OTAsOCArNDkwLDYgQEAgdm9pZCBGcmFt
ZTo6c2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRyeShibwogTlNNdXRhYmxlRGljdGlvbmFyeSogRnJh
bWU6OmRhc2hib2FyZFJlZ2lvbnNEaWN0aW9uYXJ5KCkKIHsKICAgICBEb2N1bWVudCogZG9jID0g
ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvYykKLSAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIGNv
bnN0IFZlY3RvcjxEYXNoYm9hcmRSZWdpb25WYWx1ZT4mIHJlZ2lvbnMgPSBkb2MtPmRhc2hib2Fy
ZFJlZ2lvbnMoKTsKICAgICBzaXplX3QgbiA9IHJlZ2lvbnMuc2l6ZSgpOwpAQCAtNTM3LDcgKzUz
NSw3IEBAIHZvaWQgRnJhbWU6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oY28KIHsKICAgICBk
ZWxldGUgbV91c2VyU3R5bGVTaGVldExvYWRlcjsKICAgICBtX3VzZXJTdHlsZVNoZWV0TG9hZGVy
ID0gMDsKLSAgICBpZiAobV9kb2MgJiYgbV9kb2MtPmRvY0xvYWRlcigpKQorICAgIGlmIChtX2Rv
Yy0+ZG9jTG9hZGVyKCkpCiAgICAgICAgIG1fdXNlclN0eWxlU2hlZXRMb2FkZXIgPSBuZXcgVXNl
clN0eWxlU2hlZXRMb2FkZXIobV9kb2MsIHVybC5zdHJpbmcoKSk7CiB9CiAKQEAgLTU0NSw4ICs1
NDMsNyBAQCB2b2lkIEZyYW1lOjpzZXRVc2VyU3R5bGVTaGVldChjb25zdCBTdHJpCiB7CiAgICAg
ZGVsZXRlIG1fdXNlclN0eWxlU2hlZXRMb2FkZXI7CiAgICAgbV91c2VyU3R5bGVTaGVldExvYWRl
ciA9IDA7Ci0gICAgaWYgKG1fZG9jKQotICAgICAgICBtX2RvYy0+c2V0VXNlclN0eWxlU2hlZXQo
c3R5bGVTaGVldCk7CisgICAgbV9kb2MtPnNldFVzZXJTdHlsZVNoZWV0KHN0eWxlU2hlZXQpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxT
dG9yYWdlQXJlYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFn
ZUFyZWEuY3BwCShyZXZpc2lvbiA0MDgxNCkKKysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3Jh
Z2VBcmVhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDkgKzIxOSw4IEBAIHZvaWQgTG9jYWxT
dG9yYWdlQXJlYTo6ZGlzcGF0Y2hTdG9yYWdlRXYKICAgICBIYXNoU2V0PFBhZ2UqPjo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gcGFnZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBwYWdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgZm9yIChGcmFtZSogZnJhbWUgPSAoKml0KS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoRG9jdW1l
bnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICAgICAgaWYgKGRv
Y3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbigpKSkKLSAgICAg
ICAgICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7CisgICAgICAgICAgICBpZiAoZnJh
bWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmVxdWFsKHNlY3VyaXR5T3JpZ2luKCkp
KQorICAgICAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoZnJhbWUpOwogICAgICAgICB9CiAgICAg
fQogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VBcmVhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VBcmVhLmNwcAkocmV2aXNpb24g
NDA4MTQpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VBcmVhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzUsOSArNzUsOCBAQCB2b2lkIFNlc3Npb25TdG9yYWdlQXJlYTo6ZGlzcGF0
Y2hTdG9yYWdlCiAgICAgLy8gRm9yIFNlc3Npb25TdG9yYWdlIGV2ZW50cywgZWFjaCBmcmFtZSBp
biB0aGUgcGFnZSdzIGZyYW1ldHJlZSB3aXRoIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGlzIFN0b3Jh
Z2VBcmVhIG5lZWRzIHRvIGJlIG5vdGlmaWVkIG9mIHRoZSBjaGFuZ2UKICAgICBWZWN0b3I8UmVm
UHRyPEZyYW1lPiA+IGZyYW1lczsKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFp
bkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7
Ci0gICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAg
ICAgICAgICAgIGlmIChkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlP
cmlnaW4oKSkpCi0gICAgICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7CisgICAgICAg
IGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlP
cmlnaW4oKSkpCisgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKICAgICB9CiAgICAg
ICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyArK2kpIHsK
SW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDQwODE0KQorKysgV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyAr
MTAzLDcgQEAgdm9pZCBTVkdJbWFnZTo6c2V0Q29udGFpbmVyU2l6ZShjb25zdCBJbgogICAgIGlm
IChjb250YWluZXJTaXplLndpZHRoKCkgPD0gMCB8fCBjb250YWluZXJTaXplLmhlaWdodCgpIDw9
IDApCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+ZG9j
dW1lbnQoKSkKKyAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsKICAgICBTVkdTVkdF
bGVtZW50KiByb290RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0RvY3VtZW50Kj4obV9mcmFtZS0+
ZG9jdW1lbnQoKSktPnJvb3RFbGVtZW50KCk7CiAgICAgaWYgKCFyb290RWxlbWVudCkKQEAgLTEx
NCw3ICsxMTQsNyBAQCB2b2lkIFNWR0ltYWdlOjpzZXRDb250YWluZXJTaXplKGNvbnN0IEluCiAK
IGJvb2wgU1ZHSW1hZ2U6OnVzZXNDb250YWluZXJTaXplKCkgY29uc3QKIHsKLSAgICBpZiAoIW1f
ZnJhbWUgfHwgIW1fZnJhbWUtPmRvY3VtZW50KCkpCisgICAgaWYgKCFtX2ZyYW1lKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgU1ZHU1ZHRWxlbWVudCogcm9vdEVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxTVkdEb2N1bWVudCo+KG1fZnJhbWUtPmRvY3VtZW50KCkpLT5yb290RWxlbWVudCgpOwog
ICAgIGlmICghcm9vdEVsZW1lbnQpCkBAIC0xMjUsNyArMTI1LDcgQEAgYm9vbCBTVkdJbWFnZTo6
dXNlc0NvbnRhaW5lclNpemUoKSBjb25zdAogCiBJbnRTaXplIFNWR0ltYWdlOjpzaXplKCkgY29u
c3QKIHsKLSAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUtPmRvY3VtZW50KCkpCisgICAgaWYg
KCFtX2ZyYW1lKQogICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwogICAgIAogICAgIFNWR1NWR0Vs
ZW1lbnQqIHJvb3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRG9jdW1lbnQqPihtX2ZyYW1lLT5k
b2N1bWVudCgpKS0+cm9vdEVsZW1lbnQoKTsKQEAgLTE1MSw3ICsxNTEsNyBAQCBJbnRTaXplIFNW
R0ltYWdlOjpzaXplKCkgY29uc3QKIAogYm9vbCBTVkdJbWFnZTo6aGFzUmVsYXRpdmVXaWR0aCgp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5kb2N1bWVudCgpKQorICAg
IGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFNWR1NWR0VsZW1lbnQq
IHJvb3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRG9jdW1lbnQqPihtX2ZyYW1lLT5kb2N1bWVu
dCgpKS0+cm9vdEVsZW1lbnQoKTsKICAgICBpZiAoIXJvb3RFbGVtZW50KQpAQCAtMTYyLDcgKzE2
Miw3IEBAIGJvb2wgU1ZHSW1hZ2U6Omhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdAogCiBib29sIFNW
R0ltYWdlOjpoYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ZyYW1lIHx8
ICFtX2ZyYW1lLT5kb2N1bWVudCgpKQorICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIFNWR1NWR0VsZW1lbnQqIHJvb3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
RG9jdW1lbnQqPihtX2ZyYW1lLT5kb2N1bWVudCgpKS0+cm9vdEVsZW1lbnQoKTsKICAgICBpZiAo
IXJvb3RFbGVtZW50KQo=
</data>
<flag name="review"
          id="13323"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>