<?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>124463</bug_id>
          
          <creation_ts>2013-11-16 16:01:31 -0800</creation_ts>
          <short_desc>Move execution of IDBCursorBackendOperations to the IDBServerConnection</short_desc>
          <delta_ts>2013-11-18 11:59:20 -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>Page Loading</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="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>alecflett</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jsbell</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>951397</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-16 16:01:31 -0800</bug_when>
    <thetext>Move execution of IDBCursorBackendOperations to the IDBServerConnection

This almost entirely removes knowledge of the backing store from the front end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951398</commentid>
    <comment_count>1</comment_count>
      <attachid>217139</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-16 16:04:03 -0800</bug_when>
    <thetext>Created attachment 217139
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951732</commentid>
    <comment_count>2</comment_count>
      <attachid>217139</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-11-18 11:52:57 -0800</bug_when>
    <thetext>Comment on attachment 217139
Patch v1

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

I was once (recently) made to typedef my IDs :(

&gt; Source/WebCore/Modules/indexeddb/IDBCursorBackend.h:75
&gt; +    void clearCursorData();

given the class name, I wonder if the CursorData suffix is necessary here (and maybe elsewhere)

&gt; Source/WebCore/Modules/indexeddb/IDBCursorBackend.h:87
&gt; +    int64_t m_cursorID; // Must be destroyed before m_transaction.
&gt; +    int64_t m_savedCursorID; // Must be destroyed before m_transaction.

Destroying int64_ts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951739</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-18 11:59:20 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/159445</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217139</attachid>
            <date>2013-11-16 16:04:03 -0800</date>
            <delta_ts>2013-11-18 11:52:57 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>67435</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiOTJhMWViLi5jYWYxNDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODcg
QEAKKzIwMTMtMTEtMTYgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIE1vdmUgZXhlY3V0aW9uIG9mIElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zIHRvIHRoZSBJ
REJTZXJ2ZXJDb25uZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjQ0NjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIGFsbW9zdCBlbnRpcmVseSByZW1vdmVzIGtub3dsZWRnZSBvZiB0aGUg
YmFja2luZyBzdG9yZSBmcm9tIHRoZSBmcm9udCBlbmQuCisKKyAgICAgICAgVGhlIHByaW1hcnkg
Y2hhbmdlIGhlcmUgaXMgdG8gZ2l2ZSBjdXJzb3JzIGEgdW5pcXVlIElELgorCisgICAgICAgIFRo
aXMgd2F5IHRoZSBJREJDdXJzb3JCYWNrZW5kIGNhbiByZWZlcmVuY2UgaXRzZWxmIGJ5IElELCB3
aGlsZSB0aGUgCisgICAgICAgIElEQlNlcnZlckNvbm5lY3Rpb24gY2FuIGhhbmRsZSBtYXBwaW5n
IHRoYXQgSUQgdG8gYSBiYWNraW5nIHN0b3JlLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlLmg6CisKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmVJbnRlcmZhY2UuaDoKKworICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q3Vyc29yQmFja2VuZDo6SURCQ3Vyc29yQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJD
dXJzb3JCYWNrZW5kOjpkZWxldGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJz
b3JCYWNrZW5kOjpwcmVmZXRjaFJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJh
Y2tlbmQ6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmQ6OnVwZGF0
ZUN1cnNvckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZDo6Y2xlYXJD
dXJzb3JEYXRhKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5k
Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZDo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkN1cnNvckJhY2tlbmQ6OnByaW1hcnlLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29y
QmFja2VuZDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZDo6aWQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZDo6dHJhbnNhY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZDo6c2V0U2F2ZWRDdXJzb3JJRCk6CisKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlOjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybSk6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbjo6a2V5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbjo6Y2FsbGJhY2tzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1cnNvckFkdmFuY2VPcGVyYXRpb246OmNvdW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cnNvckFkdmFuY2VPcGVyYXRpb246OmNhbGxiYWNrcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6bnVtYmVyVG9GZXRjaCk6
CisgICAgICAgIChXZWJDb3JlOjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6Y2Fs
bGJhY2tzKToKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNvbm5lY3Rp
b24uaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0
b3JlQ3Vyc29yTGV2ZWxEQi5oOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlQ3Vy
c29yTGV2ZWxEQjo6SURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQik6CisKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpjbG9uZSk6CisgICAgICAgIChX
ZWJDb3JlOjpPYmplY3RTdG9yZUtleUN1cnNvckltcGw6Ok9iamVjdFN0b3JlS2V5Q3Vyc29ySW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RTdG9yZUN1cnNvckltcGw6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpPYmplY3RTdG9yZUN1cnNvckltcGw6OmNsb25lKToKKyAgICAgICAg
KFdlYkNvcmU6Ok9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6T2JqZWN0U3RvcmVDdXJzb3JJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZUxldmVsREI6Om9wZW5PYmplY3RTdG9y
ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmVMZXZlbERCOjpvcGVu
T2JqZWN0U3RvcmVLZXlDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3Jl
TGV2ZWxEQjo6b3BlbkluZGV4S2V5Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tp
bmdTdG9yZUxldmVsREI6Om9wZW5JbmRleEN1cnNvcik6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmg6CisKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpJREJTZXJ2ZXJDb25u
ZWN0aW9uTGV2ZWxEQik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2
ZWxEQjo6c2V0SW5kZXhLZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlckNvbm5lY3Rp
b25MZXZlbERCOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyQ29ubmVjdGlvbkxldmVsREI6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXJDb25uZWN0aW9uTGV2ZWxEQjo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyQ29ubmVjdGlvbkxldmVsREI6OmRlbGV0ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpjbGVhck9iamVjdFN0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpkZWxldGVPYmplY3RTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Y2hhbmdlRGF0YWJh
c2VWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERC
OjpjdXJzb3JBZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlckNvbm5lY3Rpb25M
ZXZlbERCOjpjdXJzb3JJdGVyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlckNvbm5l
Y3Rpb25MZXZlbERCOjpjdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Y3Vyc29yUHJlZmV0Y2hSZXNldCk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxE
Qi5oOgorCiAyMDEzLTExLTE1ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBNb3ZlIElEQkN1cnNvckJhY2tlbmQgb3BlcmF0aW9ucyBpbnRvIHRoZWlyIG93biBm
aWxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFj
a2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2UuaAppbmRleCA4ZWIzODE0Li44ZDMy
NDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNr
aW5nU3RvcmVDdXJzb3JJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2UuaApAQCAtNTAsNyArNTAsNiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5
KiA9IDAsIEl0ZXJhdG9yU3RhdGUgPSBTZWVrKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGFkdmFu
Y2UodW5zaWduZWQgbG9uZykgPSAwOwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZUN1cnNvckludGVyZmFjZT4gY2xvbmUoKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQktleT4gcHJpbWFyeUtleSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IElE
QlJlY29yZElkZW50aWZpZXImIHJlY29yZElkZW50aWZpZXIoKSBjb25zdCA9IDA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmVJbnRl
cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9y
ZUludGVyZmFjZS5oCmluZGV4IGFlZWVjMTkuLjlmMjU1MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZUludGVyZmFjZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZUludGVyZmFj
ZS5oCkBAIC04MSwxMCArODEsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJ
bmRleChJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSYsIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVu
dHJ5KSA9IDA7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4KElEQkJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uSW50ZXJmYWNlJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCkgPSAwOwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gb3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKElE
QkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSW5kZXhlZERCOjpDdXJz
b3JEaXJlY3Rpb24pID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
Q3Vyc29ySW50ZXJmYWNlPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoSURCQmFja2luZ1N0b3JlVHJh
bnNhY3Rpb25JbnRlcmZhY2UmLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbikgPSAw
OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+
IG9wZW5JbmRleEtleUN1cnNvcihJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSYs
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24pID0gMDsK
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBv
cGVuSW5kZXhDdXJzb3IoSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2UmLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBj
b25zdCBJREJLZXlSYW5nZSosIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKSA9IDA7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gb3Blbk9i
amVjdFN0b3JlS2V5Q3Vyc29yKGludDY0X3QgY3Vyc29ySUQsIElEQkJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uSW50ZXJmYWNlJiwgaW50NjRfdCBkYXRhYmFzZUlELCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24pID0gMDsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBv
cGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBjdXJzb3JJRCwgSURCQmFja2luZ1N0b3JlVHJh
bnNhY3Rpb25JbnRlcmZhY2UmLCBpbnQ2NF90IGRhdGFiYXNlSUQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbikgPSAw
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+
IG9wZW5JbmRleEtleUN1cnNvcihpbnQ2NF90IGN1cnNvcklELCBJREJCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbkludGVyZmFjZSYsIGludDY0X3QgZGF0YWJhc2VJRCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSW5kZXhlZERCOjpDdXJz
b3JEaXJlY3Rpb24pID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
Q3Vyc29ySW50ZXJmYWNlPiBvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBjdXJzb3JJRCwgSURCQmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2UmLCBpbnQ2NF90IGRhdGFiYXNlSUQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElu
ZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJp
bWFyeUtleVZpYUluZGV4KElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlJiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgSURCS2V5JiwgUmVmUHRyPElEQktleT4mIHByaW1hcnlLZXkpID0gMDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kLmNw
cAppbmRleCBkM2Y0NDRmLi4wODk5Yzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kLmNwcApAQCAtMzYsMTggKzM2LDE5IEBA
CiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJREJLZXlSYW5n
ZS5oIgogI2luY2x1ZGUgIklEQk9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIklEQlNlcnZlckNvbm5l
Y3Rpb24uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSURCQ3Vyc29yQmFja2VuZDo6SURCQ3Vyc29yQmFj
a2VuZChQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gY3Vyc29yLCBJ
bmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNr
VHlwZSB0YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBvYmplY3RTdG9yZUlkKQorSURCQ3Vyc29yQmFja2VuZDo6SURCQ3Vyc29yQmFja2VuZChpbnQ2
NF90IGN1cnNvcklELCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJh
c2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlEKQogICAgIDogbV90YXNrVHlwZSh0YXNrVHlw
ZSkKICAgICAsIG1fY3Vyc29yVHlwZShjdXJzb3JUeXBlKQotICAgICwgbV9kYXRhYmFzZSgmKHRy
YW5zYWN0aW9uLT5kYXRhYmFzZSgpKSkKLSAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24p
Ci0gICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAgICAsIG1fY3Vyc29yKGN1
cnNvcikKKyAgICAsIG1fdHJhbnNhY3Rpb24oJnRyYW5zYWN0aW9uKQorICAgICwgbV9vYmplY3RT
dG9yZUlEKG9iamVjdFN0b3JlSUQpCisgICAgLCBtX2N1cnNvcklEKGN1cnNvcklEKQorICAgICwg
bV9zYXZlZEN1cnNvcklEKDApCiAgICAgLCBtX2Nsb3NlZChmYWxzZSkKIHsKICAgICBtX3RyYW5z
YWN0aW9uLT5yZWdpc3Rlck9wZW5DdXJzb3IodGhpcyk7CkBAIC01OCw3ICs1OSw2IEBAIElEQkN1
cnNvckJhY2tlbmQ6On5JREJDdXJzb3JCYWNrZW5kKCkKICAgICBtX3RyYW5zYWN0aW9uLT51bnJl
Z2lzdGVyT3BlbkN1cnNvcih0aGlzKTsKIH0KIAotCiB2b2lkIElEQkN1cnNvckJhY2tlbmQ6OmNv
bnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYpCiB7CiAgICAgTE9HKFN0b3JhZ2VB
UEksICJJREJDdXJzb3JCYWNrZW5kOjpjb250aW51ZSIpOwpAQCAtNzcsOCArNzcsOCBAQCB2b2lk
IElEQkN1cnNvckJhY2tlbmQ6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBwcnBDYWxsYmFja3MsIEV4YwogewogICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQ3Vyc29yQmFj
a2VuZDo6ZGVsZXRlIik7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uUmVhZE9ubHkpOwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UgPSBJREJLZXlSYW5nZTo6Y3JlYXRlKG1fY3Vyc29yLT5wcmltYXJ5S2V5KCkpOwotICAg
IG1fZGF0YWJhc2UtPmRlbGV0ZVJhbmdlKG1fdHJhbnNhY3Rpb24uZ2V0KCktPmlkKCksIG1fb2Jq
ZWN0U3RvcmVJZCwga2V5UmFuZ2UucmVsZWFzZSgpLCBwcnBDYWxsYmFja3MpOworICAgIFJlZlB0
cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6Y3JlYXRlKHByaW1hcnlLZXko
KSk7CisgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5kZWxldGVSYW5nZShtX3RyYW5zYWN0
aW9uLT5pZCgpLCBtX29iamVjdFN0b3JlSUQsIGtleVJhbmdlLnJlbGVhc2UoKSwgcHJwQ2FsbGJh
Y2tzKTsKIH0KIAogdm9pZCBJREJDdXJzb3JCYWNrZW5kOjpwcmVmZXRjaENvbnRpbnVlKGludCBu
dW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNl
cHRpb25Db2RlJikKQEAgLTkxLDI1ICs5MSwzNiBAQCB2b2lkIElEQkN1cnNvckJhY2tlbmQ6OnBy
ZWZldGNoQ29udGludWUoaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJhYwog
dm9pZCBJREJDdXJzb3JCYWNrZW5kOjpwcmVmZXRjaFJlc2V0KGludCB1c2VkUHJlZmV0Y2hlcywg
aW50KQogewogICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQ3Vyc29yQmFja2VuZDo6cHJlZmV0Y2hS
ZXNldCIpOwotICAgIG1fY3Vyc29yID0gbV9zYXZlZEN1cnNvcjsKLSAgICBtX3NhdmVkQ3Vyc29y
ID0gMDsKKyAgICBtX2N1cnNvcklEID0gbV9zYXZlZEN1cnNvcklEOworICAgIG1fc2F2ZWRDdXJz
b3JJRCA9IDA7CiAKICAgICBpZiAobV9jbG9zZWQpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAo
bV9jdXJzb3IpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2VkUHJlZmV0Y2hlczsg
KytpKSB7Ci0gICAgICAgICAgICBib29sIG9rID0gbV9jdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24o
KTsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKLSAgICAgICAgfQotICAgIH0K
KyAgICBpZiAobV9jdXJzb3JJRCkKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5z
ZXJ2ZXJDb25uZWN0aW9uKCkuY3Vyc29yUHJlZmV0Y2hSZXNldCgqdGhpcywgdXNlZFByZWZldGNo
ZXMpOwogfQogCiB2b2lkIElEQkN1cnNvckJhY2tlbmQ6OmNsb3NlKCkKIHsKICAgICBMT0coU3Rv
cmFnZUFQSSwgIklEQkN1cnNvckJhY2tlbmQ6OmNsb3NlIik7CisgICAgY2xlYXJDdXJzb3JEYXRh
KCk7CiAgICAgbV9jbG9zZWQgPSB0cnVlOwotICAgIG1fY3Vyc29yLmNsZWFyKCk7Ci0gICAgbV9z
YXZlZEN1cnNvci5jbGVhcigpOworICAgIG1fc2F2ZWRDdXJzb3JJRCA9IDA7Cit9CisKK3ZvaWQg
SURCQ3Vyc29yQmFja2VuZDo6dXBkYXRlQ3Vyc29yRGF0YShJREJLZXkqIGtleSwgSURCS2V5KiBw
cmltYXJ5S2V5LCBTaGFyZWRCdWZmZXIqIHZhbHVlKQoreworICAgIG1fY3VycmVudEtleSA9IGtl
eTsKKyAgICBtX2N1cnJlbnRQcmltYXJ5S2V5ID0gcHJpbWFyeUtleTsKKyAgICBtX2N1cnJlbnRW
YWx1ZSA9IHZhbHVlOworfQorCit2b2lkIElEQkN1cnNvckJhY2tlbmQ6OmNsZWFyQ3Vyc29yRGF0
YSgpCit7CisgICAgbV9jdXJzb3JJRCA9IDA7CisgICAgbV9jdXJyZW50S2V5ID0gMDsKKyAgICBt
X2N1cnJlbnRQcmltYXJ5S2V5ID0gMDsKKyAgICBtX2N1cnJlbnRWYWx1ZSA9IDA7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvckJhY2tlbmQuaAppbmRleCAyMGE3NGM5Li5hNWVlNTNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZC5o
CkBAIC0yOSw3ICsyOSw2IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2lu
Y2x1ZGUgIklEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQkRh
dGFiYXNlQmFja2VuZC5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZC5oIgogI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgpAQCAtNDMsMTMgKzQyLDEzIEBAIGNsYXNzIElEQktleVJh
bmdlOwogCiBjbGFzcyBJREJDdXJzb3JCYWNrZW5kIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQ3Vy
c29yQmFja2VuZD4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkN1cnNvckJh
Y2tlbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4g
Y3Vyc29yLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGNyZWF0ZShpbnQ2NF90IGN1cnNvcklELCBJbmRl
eGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlEKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJREJDdXJzb3JCYWNrZW5kKGN1cnNvciwgY3Vyc29yVHlwZSwgSURCRGF0YWJh
c2VCYWNrZW5kOjpOb3JtYWxUYXNrLCB0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCkpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvckJhY2tlbmQoY3Vyc29ySUQsIGN1cnNv
clR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaywgdHJhbnNhY3Rpb24sIG9iamVj
dFN0b3JlSUQpKTsKICAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2Vu
ZD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBjdXJz
b3IsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6
OlRhc2tUeXBlIHRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZD4gY3JlYXRlKGludDY0X3QgY3Vyc29ySUQsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJz
b3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlLCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvckJhY2tlbmQoY3Vyc29yLCBjdXJz
b3JUeXBlLCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJREJDdXJzb3JCYWNrZW5kKGN1cnNvcklELCBjdXJzb3JUeXBl
LCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSUQpKTsKICAgICB9CiAgICAgfklE
QkN1cnNvckJhY2tlbmQoKTsKIApAQCAtNjAsMjkgKzU5LDM2IEBAIHB1YmxpYzoKICAgICB2b2lk
IHByZWZldGNoUmVzZXQoaW50IHVzZWRQcmVmZXRjaGVzLCBpbnQgdW51c2VkUHJlZmV0Y2hlcyk7
CiAgICAgdm9pZCBwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpIHsgfQogCi0gICAgSURCS2V5
KiBrZXkoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvci0+a2V5KCkuZ2V0KCk7IH0KLSAgICBJREJL
ZXkqIHByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvci0+cHJpbWFyeUtleSgpLmdl
dCgpOyB9Ci0gICAgU2hhcmVkQnVmZmVyKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIChtX2N1cnNv
clR5cGUgPT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KSA/IDAgOiBtX2N1cnNvci0+dmFsdWUo
KS5nZXQoKTsgfQorICAgIElEQktleSoga2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50S2V5
LmdldCgpOyB9CisgICAgSURCS2V5KiBwcmltYXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJy
ZW50UHJpbWFyeUtleS5nZXQoKTsgfQorICAgIFNoYXJlZEJ1ZmZlciogdmFsdWUoKSBjb25zdCB7
IHJldHVybiAobV9jdXJzb3JUeXBlID09IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkgPyAwIDog
bV9jdXJyZW50VmFsdWUuZ2V0KCk7IH0KKyAgICB2b2lkIHVwZGF0ZUN1cnNvckRhdGEoSURCS2V5
KiwgSURCS2V5KiBwcmltYXJ5S2V5LCBTaGFyZWRCdWZmZXIqIHZhbHVlKTsKIAogICAgIHZvaWQg
Y2xvc2UoKTsKIAogICAgIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9jdXJzb3JUeXBlOyB9CiAKLSAgICBJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRl
cmZhY2UqIGRlcHJlY2F0ZWRCYWNraW5nU3RvcmVDdXJzb3IoKSB7IHJldHVybiBtX2N1cnNvci5n
ZXQoKTsgfQotICAgIHZvaWQgZGVwcmVjYXRlZFNldEJhY2tpbmdTdG9yZUN1cnNvcihQYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gY3Vyc29yKSB7IG1fY3Vyc29yID0g
Y3Vyc29yOyB9Ci0gICAgdm9pZCBkZXByZWNhdGVkU2V0U2F2ZWRCYWNraW5nU3RvcmVDdXJzb3Io
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+IGN1cnNvcikgeyBtX3Nh
dmVkQ3Vyc29yID0gY3Vyc29yOyB9CisgICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y3Vyc29ySUQ7IH0KKworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24oKSB7
IHJldHVybiAqbV90cmFuc2FjdGlvbjsgfQorCisgICAgdm9pZCBjbGVhckN1cnNvckRhdGEoKTsK
KyAgICB2b2lkIHNldFNhdmVkQ3Vyc29ySUQoaW50NjRfdCBjdXJzb3JJRCkgeyBtX3NhdmVkQ3Vy
c29ySUQgPSBjdXJzb3JJRDsgfQogCiBwcml2YXRlOgotICAgIElEQkN1cnNvckJhY2tlbmQoUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+LCBJbmRleGVkREI6OkN1cnNv
clR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCosIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgSURCQ3Vyc29yQmFja2VuZChpbnQ2NF90
IGN1cnNvcklELCBJbmRleGVkREI6OkN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFz
a1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCk7CiAK
ICAgICBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIG1fdGFza1R5cGU7CiAgICAgSW5kZXhl
ZERCOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKLSAgICBjb25zdCBSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kPiBtX2RhdGFiYXNlOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+
IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAg
Y29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSUQ7CisKKyAgICBpbnQ2NF90IG1fY3Vyc29ySUQ7
IC8vIE11c3QgYmUgZGVzdHJveWVkIGJlZm9yZSBtX3RyYW5zYWN0aW9uLgorICAgIGludDY0X3Qg
bV9zYXZlZEN1cnNvcklEOyAvLyBNdXN0IGJlIGRlc3Ryb3llZCBiZWZvcmUgbV90cmFuc2FjdGlv
bi4KIAotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+IG1fY3Vyc29y
OyAvLyBNdXN0IGJlIGRlc3Ryb3llZCBiZWZvcmUgbV90cmFuc2FjdGlvbi4KLSAgICBSZWZQdHI8
SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBtX3NhdmVkQ3Vyc29yOyAvLyBNdXN0IGJl
IGRlc3Ryb3llZCBiZWZvcmUgbV90cmFuc2FjdGlvbi4KKyAgICBSZWZQdHI8SURCS2V5PiBtX2N1
cnJlbnRLZXk7CisgICAgUmVmUHRyPElEQktleT4gbV9jdXJyZW50UHJpbWFyeUtleTsKKyAgICBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2N1cnJlbnRWYWx1ZTsKIAogICAgIGJvb2wgbV9jbG9zZWQ7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yQmFja2VuZE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuY3BwCmluZGV4IDU3ZWJiZDAuLjBiNmEyYzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJh
Y2tlbmRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5jcHAKQEAgLTI3LDEwNCArMjcsMzAgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5o
IgogCisjaW5jbHVkZSAiSURCU2VydmVyQ29ubmVjdGlvbi5oIgorCiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgQ2FsbE9uRGVzdHJ1Y3QgewotcHVibGljOgotICAgIENhbGxPbkRlc3RydWN0
KHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjYWxsYmFjaykKLSAgICAgICAgOiBtX2NhbGxiYWNrKGNh
bGxiYWNrKQotICAgIHsgfQotCi0gICAgfkNhbGxPbkRlc3RydWN0KCkKLSAgICB7Ci0gICAgICAg
IG1fY2FsbGJhY2soKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjpmdW5jdGlvbjx2b2lk
KCk+IG1fY2FsbGJhY2s7Ci19OwotCiB2b2lkIEN1cnNvckFkdmFuY2VPcGVyYXRpb246OnBlcmZv
cm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsKLSAgICBDYWxs
T25EZXN0cnVjdCBjYWxsT25EZXN0cnVjdChjb21wbGV0aW9uQ2FsbGJhY2spOwotCiAgICAgTE9H
KFN0b3JhZ2VBUEksICJDdXJzb3JBZHZhbmNlT3BlcmF0aW9uIik7Ci0gICAgaWYgKCFtX2N1cnNv
ci0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZUN1cnNvcigpIHx8ICFtX2N1cnNvci0+ZGVwcmVjYXRl
ZEJhY2tpbmdTdG9yZUN1cnNvcigpLT5hZHZhbmNlKG1fY291bnQpKSB7Ci0gICAgICAgIG1fY3Vy
c29yLT5kZXByZWNhdGVkU2V0QmFja2luZ1N0b3JlQ3Vyc29yKDApOwotICAgICAgICBtX2NhbGxi
YWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KDApKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MobV9jdXJzb3ItPmtl
eSgpLCBtX2N1cnNvci0+cHJpbWFyeUtleSgpLCBtX2N1cnNvci0+dmFsdWUoKSk7CisgICAgbV9j
dXJzb3ItPnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuY3Vyc29y
QWR2YW5jZSgqbV9jdXJzb3IsICp0aGlzLCBjb21wbGV0aW9uQ2FsbGJhY2spOwogfQogCiB2b2lk
IEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4g
Y29tcGxldGlvbkNhbGxiYWNrKQogewotICAgIENhbGxPbkRlc3RydWN0IGNhbGxPbkRlc3RydWN0
KGNvbXBsZXRpb25DYWxsYmFjayk7Ci0KICAgICBMT0coU3RvcmFnZUFQSSwgIkN1cnNvckl0ZXJh
dGlvbk9wZXJhdGlvbiIpOwotICAgIGlmICghbV9jdXJzb3ItPmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmVDdXJzb3IoKSB8fCAhbV9jdXJzb3ItPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVDdXJzb3IoKS0+
Y29udGludWVGdW5jdGlvbihtX2tleS5nZXQoKSkpIHsKLSAgICAgICAgbV9jdXJzb3ItPmRlcHJl
Y2F0ZWRTZXRCYWNraW5nU3RvcmVDdXJzb3IoMCk7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1
Y2Nlc3Moc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oMCkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhtX2N1cnNvci0+a2V5KCksIG1fY3Vy
c29yLT5wcmltYXJ5S2V5KCksIG1fY3Vyc29yLT52YWx1ZSgpKTsKKyAgICBtX2N1cnNvci0+dHJh
bnNhY3Rpb24oKS5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5jdXJzb3JJdGVyYXRlKCpt
X2N1cnNvciwgKnRoaXMsIGNvbXBsZXRpb25DYWxsYmFjayk7CiB9CiAKIHZvaWQgQ3Vyc29yUHJl
ZmV0Y2hJdGVyYXRpb25PcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNv
bXBsZXRpb25DYWxsYmFjaykKIHsKLSAgICBDYWxsT25EZXN0cnVjdCBjYWxsT25EZXN0cnVjdChj
b21wbGV0aW9uQ2FsbGJhY2spOwotCiAgICAgTE9HKFN0b3JhZ2VBUEksICJDdXJzb3JQcmVmZXRj
aEl0ZXJhdGlvbk9wZXJhdGlvbiIpOwotCi0gICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+PiBmb3Vu
ZEtleXM7Ci0gICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+PiBmb3VuZFByaW1hcnlLZXlzOwotICAg
IFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4gZm91bmRWYWx1ZXM7Ci0KLSAgICBpZiAobV9j
dXJzb3ItPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVDdXJzb3IoKSkKLSAgICAgICAgbV9jdXJzb3It
PmRlcHJlY2F0ZWRTZXRTYXZlZEJhY2tpbmdTdG9yZUN1cnNvcihtX2N1cnNvci0+ZGVwcmVjYXRl
ZEJhY2tpbmdTdG9yZUN1cnNvcigpLT5jbG9uZSgpKTsKLQotICAgIGNvbnN0IHNpemVfdCBtYXhT
aXplRXN0aW1hdGUgPSAxMCAqIDEwMjQgKiAxMDI0OwotICAgIHNpemVfdCBzaXplRXN0aW1hdGUg
PSAwOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX251bWJlclRvRmV0Y2g7ICsraSkgewot
ICAgICAgICBpZiAoIW1fY3Vyc29yLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlQ3Vyc29yKCkgfHwg
IW1fY3Vyc29yLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlQ3Vyc29yKCktPmNvbnRpbnVlRnVuY3Rp
b24oMCkpIHsKLSAgICAgICAgICAgIG1fY3Vyc29yLT5kZXByZWNhdGVkU2V0QmFja2luZ1N0b3Jl
Q3Vyc29yKDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3Vu
ZEtleXMuYXBwZW5kKG1fY3Vyc29yLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlQ3Vyc29yKCktPmtl
eSgpKTsKLSAgICAgICAgZm91bmRQcmltYXJ5S2V5cy5hcHBlbmQobV9jdXJzb3ItPmRlcHJlY2F0
ZWRCYWNraW5nU3RvcmVDdXJzb3IoKS0+cHJpbWFyeUtleSgpKTsKLQotICAgICAgICBzd2l0Y2gg
KG1fY3Vyc29yLT5jdXJzb3JUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OkN1cnNv
cktleU9ubHk6Ci0gICAgICAgICAgICBmb3VuZFZhbHVlcy5hcHBlbmQoU2hhcmVkQnVmZmVyOjpj
cmVhdGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OkN1
cnNvcktleUFuZFZhbHVlOgotICAgICAgICAgICAgc2l6ZUVzdGltYXRlICs9IG1fY3Vyc29yLT5k
ZXByZWNhdGVkQmFja2luZ1N0b3JlQ3Vyc29yKCktPnZhbHVlKCktPnNpemUoKTsKLSAgICAgICAg
ICAgIGZvdW5kVmFsdWVzLmFwcGVuZChtX2N1cnNvci0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZUN1
cnNvcigpLT52YWx1ZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgc2l6
ZUVzdGltYXRlICs9IG1fY3Vyc29yLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlQ3Vyc29yKCktPmtl
eSgpLT5zaXplRXN0aW1hdGUoKTsKLSAgICAgICAgc2l6ZUVzdGltYXRlICs9IG1fY3Vyc29yLT5k
ZXByZWNhdGVkQmFja2luZ1N0b3JlQ3Vyc29yKCktPnByaW1hcnlLZXkoKS0+c2l6ZUVzdGltYXRl
KCk7Ci0KLSAgICAgICAgaWYgKHNpemVFc3RpbWF0ZSA+IG1heFNpemVFc3RpbWF0ZSkKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmICghZm91bmRLZXlzLnNpemUoKSkgewotICAg
ICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KDAp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3NX
aXRoUHJlZmV0Y2goZm91bmRLZXlzLCBmb3VuZFByaW1hcnlLZXlzLCBmb3VuZFZhbHVlcyk7Cisg
ICAgbV9jdXJzb3ItPnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCku
Y3Vyc29yUHJlZmV0Y2hJdGVyYXRpb24oKm1fY3Vyc29yLCAqdGhpcywgY29tcGxldGlvbkNhbGxi
YWNrKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25z
LmgKaW5kZXggMzlmNjFiNS4uMjNjYTQ5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5oCkBA
IC00Miw2ICs0Miw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0o
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykgT1ZFUlJJREUgRklOQUw7
CiAKKyAgICBJREJLZXkqIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5LmdldCgpOyB9CisgICAg
SURCQ2FsbGJhY2tzKiBjYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrcy5nZXQo
KTsgfQorCiBwcml2YXRlOgogICAgIEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbihQYXNzUmVmUHRy
PElEQkN1cnNvckJhY2tlbmQ+IGN1cnNvciwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICAgICAgOiBtX2N1cnNvcihjdXJzb3Ip
CkBAIC02Myw2ICs2Niw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHBlcmZv
cm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykgT1ZFUlJJREUgRklO
QUw7CiAKKyAgICB1bnNpZ25lZCBsb25nIGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jb3VudDsg
fQorICAgIElEQkNhbGxiYWNrcyogY2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFj
a3MuZ2V0KCk7IH0KKwogcHJpdmF0ZToKICAgICBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uKFBhc3NS
ZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3Vyc29yLCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgICAgICA6IG1fY3Vyc29yKGN1cnNv
cikKQEAgLTg0LDYgKzkwLDkgQEAgcHVibGljOgogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKSBPVkVSUklERSBG
SU5BTDsKIAorICAgIGludCBudW1iZXJUb0ZldGNoKCkgY29uc3QgeyByZXR1cm4gbV9udW1iZXJU
b0ZldGNoOyB9CisgICAgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBt
X2NhbGxiYWNrcy5nZXQoKTsgfQorCiBwcml2YXRlOgogICAgIEN1cnNvclByZWZldGNoSXRlcmF0
aW9uT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3Vyc29yLCBpbnQgbnVt
YmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICAgICAg
OiBtX2N1cnNvcihjdXJzb3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJTZXJ2ZXJDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJTZXJ2ZXJDb25uZWN0aW9uLmgKaW5kZXggMzQ2ZWExZS4uYWQyNjg2OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCU2VydmVyQ29ubmVj
dGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNv
bm5lY3Rpb24uaApAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBJREJTZXJ2ZXJDb25uZWN0aW9u
X2gKICNkZWZpbmUgSURCU2VydmVyQ29ubmVjdGlvbl9oCiAKKyNpbmNsdWRlICJJREJDdXJzb3JC
YWNrZW5kT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIklEQk1ldGFkYXRhLmgiCiAjaW5jbHVkZSAi
SURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkluZGV4ZWREQi5o
IgpAQCAtODgsNiArODksMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVj
dFN0b3JlKElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0IENsZWFyT2JqZWN0U3RvcmVPcGVy
YXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+
IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RT
dG9yZShJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBEZWxldGVPYmplY3RTdG9yZU9wZXJh
dGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4g
Y29tcGxldGlvbkNhbGxiYWNrKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNoYW5nZURhdGFiYXNl
VmVyc2lvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmQ6
OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOworCisgICAgLy8gQ3Vy
c29yLWxldmVsIG9wZXJhdGlvbnMKKyAgICB2aXJ0dWFsIHZvaWQgY3Vyc29yQWR2YW5jZShJREJD
dXJzb3JCYWNrZW5kJiwgY29uc3QgQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3Vy
c29ySXRlcmF0ZShJREJDdXJzb3JCYWNrZW5kJiwgY29uc3QgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0
aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbihJREJDdXJzb3JCYWNrZW5kJiwg
Y29uc3QgQ3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGN1cnNvclBy
ZWZldGNoUmVzZXQoSURCQ3Vyc29yQmFja2VuZCYsIGludCB1c2VkUHJlZmV0Y2hlcykgPSAwOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9y
ZUN1cnNvckxldmVsREIuaAppbmRleCA4YTZlOWFhLi5iYzk0NmJlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUN1cnNv
ckxldmVsREIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREIuaApAQCAtNTgsNyArNTgsOCBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIGFkdmFuY2UodW5zaWduZWQgbG9uZykgT1ZFUlJJREU7CiAgICAg
Ym9vbCBmaXJzdFNlZWsoKTsKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmVDdXJzb3JJbnRlcmZhY2U+IGNsb25lKCkgT1ZFUlJJREUgPSAwOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCPiBjbG9uZSgpID0gMDsKKwogICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBtX2N1cnJlbnRLZXk7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiB2YWx1ZSgpIGNvbnN0IE9WRVJSSURFID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IElEQlJl
Y29yZElkZW50aWZpZXImIHJlY29yZElkZW50aWZpZXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biAqbV9yZWNvcmRJZGVudGlmaWVyOyB9CkBAIC02Niw4ICs2Nyw5IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKSA9IDA7CiAKIHByb3RlY3RlZDoKLSAgICBJREJC
YWNraW5nU3RvcmVDdXJzb3JMZXZlbERCKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCi0gICAgICAgIDogbV90cmFuc2Fj
dGlvbih0cmFuc2FjdGlvbikKKyAgICBJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCKGludDY0
X3QgY3Vyc29ySUQsIExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNv
ck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAgICAgIDogbV9jdXJzb3JJRChjdXJzb3JJRCkK
KyAgICAgICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQogICAgICAgICAsIG1fY3Vyc29y
T3B0aW9ucyhjdXJzb3JPcHRpb25zKQogICAgICAgICAsIG1fcmVjb3JkSWRlbnRpZmllcihJREJS
ZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoKSkKICAgICB7CkBAIC03OSw2ICs4MSw3IEBAIHByb3Rl
Y3RlZDoKICAgICBib29sIGlzUGFzdEJvdW5kcygpIGNvbnN0OwogICAgIGJvb2wgaGF2ZUVudGVy
ZWRSYW5nZSgpIGNvbnN0OwogCisgICAgaW50NjRfdCBtX2N1cnNvcklEOwogICAgIExldmVsREJU
cmFuc2FjdGlvbiogbV90cmFuc2FjdGlvbjsKICAgICBjb25zdCBDdXJzb3JPcHRpb25zIG1fY3Vy
c29yT3B0aW9uczsKICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBtX2l0ZXJhdG9yOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNr
aW5nU3RvcmVMZXZlbERCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5jcHAKaW5kZXggZTMwODQxNC4uYmI3ZDdkNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJC
YWNraW5nU3RvcmVMZXZlbERCLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwCkBAIC0xNDQzLDEyICsxNDQz
LDEyIEBAIGJvb2wgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6dXBkYXRlS2V5R2VuZXJhdG9yKElE
QlRyYW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3RpCiAKIGNsYXNzIE9iamVjdFN0b3JlS2V5Q3Vy
c29ySW1wbCA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxPYmplY3RTdG9yZUtleUN1cnNvckltcGw+IGNyZWF0ZShM
ZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBJREJCYWNraW5nU3RvcmVDdXJz
b3JMZXZlbERCOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbD4gY3JlYXRlKGludDY0X3QgY3Vyc29ySUQs
IExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkJhY2tpbmdTdG9yZUN1
cnNvckxldmVsREI6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbCh0cmFuc2FjdGlv
biwgY3Vyc29yT3B0aW9ucykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9iamVjdFN0
b3JlS2V5Q3Vyc29ySW1wbChjdXJzb3JJRCwgdHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpKTsK
ICAgICB9CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50
ZXJmYWNlPiBjbG9uZSgpCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1
cnNvckxldmVsREI+IGNsb25lKCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsKHRoaXMpKTsKICAgICB9CkBAIC0xNDY0LDggKzE0NjQs
OCBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogCiBwcml2YXRlOgotICAgIE9iamVjdFN0b3JlS2V5Q3Vy
c29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBJREJCYWNraW5n
U3RvcmVDdXJzb3JMZXZlbERCOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQotICAgICAg
ICA6IElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREIodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlv
bnMpCisgICAgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsKGludDY0X3QgY3Vyc29ySUQsIExldmVs
REJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkJhY2tpbmdTdG9yZUN1cnNvckxl
dmVsREI6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAgICAgIDogSURCQmFja2lu
Z1N0b3JlQ3Vyc29yTGV2ZWxEQihjdXJzb3JJRCwgdHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMp
CiAgICAgewogICAgIH0KIApAQCAtMTUwNCwxMiArMTUwNCwxMiBAQCBib29sIE9iamVjdFN0b3Jl
S2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogCiBjbGFzcyBPYmplY3RTdG9yZUN1cnNv
ckltcGwgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQiB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxE
QlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2
ZWxEQjo6Q3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGNyZWF0ZShpbnQ2NF90IGN1cnNvcklELCBMZXZlbERC
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZl
bERCOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBPYmplY3RTdG9yZUN1cnNvckltcGwodHJhbnNhY3Rpb24sIGN1cnNvck9w
dGlvbnMpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPYmplY3RTdG9yZUN1cnNvcklt
cGwoY3Vyc29ySUQsIHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKSk7CiAgICAgfQogCi0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gY2xvbmUo
KQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCPiBj
bG9uZSgpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9iamVjdFN0b3JlQ3Vy
c29ySW1wbCh0aGlzKSk7CiAgICAgfQpAQCAtMTUyNSw4ICsxNTI1LDggQEAgcHJvdGVjdGVkOgog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBPYmplY3RTdG9yZUN1cnNvckltcGwoTGV2ZWxEQlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQjo6
Q3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKLSAgICAgICAgOiBJREJCYWNraW5nU3RvcmVD
dXJzb3JMZXZlbERCKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQorICAgIE9iamVjdFN0b3Jl
Q3Vyc29ySW1wbChpbnQ2NF90IGN1cnNvcklELCBMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBjb25zdCBJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCOjpDdXJzb3JPcHRpb25zJiBj
dXJzb3JPcHRpb25zKQorICAgICAgICA6IElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREIoY3Vy
c29ySUQsIHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQogICAgIHsKICAgICB9CiAKQEAgLTE1
NzEsMTIgKzE1NzEsMTIgQEAgYm9vbCBPYmplY3RTdG9yZUN1cnNvckltcGw6OmxvYWRDdXJyZW50
Um93KCkKIAogY2xhc3MgSW5kZXhLZXlDdXJzb3JJbXBsIEZJTkFMIDogcHVibGljIElEQkJhY2tp
bmdTdG9yZUN1cnNvckxldmVsREIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElu
ZGV4S2V5Q3Vyc29ySW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGNvbnN0IElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREI6OkN1cnNvck9wdGlvbnMmIGN1cnNv
ck9wdGlvbnMpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5kZXhLZXlDdXJzb3JJbXBsPiBjcmVh
dGUoaW50NjRfdCBjdXJzb3JJRCwgTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29u
c3QgSURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQjo6Q3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0
aW9ucykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhLZXlDdXJzb3JJ
bXBsKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5kZXhLZXlDdXJzb3JJbXBsKGN1cnNvcklELCB0cmFuc2FjdGlvbiwgY3Vyc29yT3B0
aW9ucykpOwogICAgIH0KIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVD
dXJzb3JJbnRlcmZhY2U+IGNsb25lKCkKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlQ3Vyc29yTGV2ZWxEQj4gY2xvbmUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbmRleEtleUN1cnNvckltcGwodGhpcykpOwogICAgIH0KQEAgLTE1OTQsOCArMTU5
NCw4IEBAIHByb3RlY3RlZDoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSW5kZXhLZXlDdXJzb3JJ
bXBsKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkJhY2tpbmdTdG9y
ZUN1cnNvckxldmVsREI6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCi0gICAgICAgIDog
SURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQih0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykK
KyAgICBJbmRleEtleUN1cnNvckltcGwoaW50NjRfdCBjdXJzb3JJRCwgTGV2ZWxEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQjo6Q3Vy
c29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICAgICAgOiBJREJCYWNraW5nU3RvcmVDdXJz
b3JMZXZlbERCKGN1cnNvcklELCB0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykKICAgICB7CiAg
ICAgfQogCkBAIC0xNjYyLDEyICsxNjYyLDEyIEBAIGJvb2wgSW5kZXhLZXlDdXJzb3JJbXBsOjps
b2FkQ3VycmVudFJvdygpCiAKIGNsYXNzIEluZGV4Q3Vyc29ySW1wbCBGSU5BTCA6IHB1YmxpYyBJ
REJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbmRleEN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBjb25zdCBJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCOjpDdXJzb3JPcHRpb25zJiBj
dXJzb3JPcHRpb25zKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluZGV4Q3Vyc29ySW1wbD4gY3Jl
YXRlKGludDY0X3QgY3Vyc29ySUQsIExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNv
bnN0IElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREI6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9w
dGlvbnMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluZGV4Q3Vyc29ySW1w
bCh0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEluZGV4Q3Vyc29ySW1wbChjdXJzb3JJRCwgdHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMp
KTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29y
SW50ZXJmYWNlPiBjbG9uZSgpCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZUN1cnNvckxldmVsREI+IGNsb25lKCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSW5kZXhDdXJzb3JJbXBsKHRoaXMpKTsKICAgICB9CkBAIC0xNjg1LDggKzE2ODUsOCBAQCBw
cm90ZWN0ZWQ6CiAgICAgfQogCiBwcml2YXRlOgotICAgIEluZGV4Q3Vyc29ySW1wbChMZXZlbERC
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZl
bERCOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQotICAgICAgICA6IElEQkJhY2tpbmdT
dG9yZUN1cnNvckxldmVsREIodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCisgICAgSW5kZXhD
dXJzb3JJbXBsKGludDY0X3QgY3Vyc29ySUQsIExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGNvbnN0IElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREI6OkN1cnNvck9wdGlvbnMmIGN1
cnNvck9wdGlvbnMpCisgICAgICAgIDogSURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQihjdXJz
b3JJRCwgdHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCiAgICAgewogICAgIH0KIApAQCAtMTg1
OSw1NyArMTg1OSw1NyBAQCBzdGF0aWMgYm9vbCBpbmRleEN1cnNvck9wdGlvbnMoTGV2ZWxEQlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZQogCiAgICAgcmV0dXJuIHRy
dWU7CiB9Ci1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gSURCQmFj
a2luZ1N0b3JlTGV2ZWxEQjo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yKElEQkJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uSW50ZXJmYWNlJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSW5kZXhlZERCOjpD
dXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uKQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJz
b3JJbnRlcmZhY2U+IElEQkJhY2tpbmdTdG9yZUxldmVsREI6Om9wZW5PYmplY3RTdG9yZUN1cnNv
cihpbnQ2NF90IGN1cnNvcklELCBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSYg
dHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJRCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVj
dGlvbikKIAogewogICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6
b3Blbk9iamVjdFN0b3JlQ3Vyc29yIik7CiAgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERC
VHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI6OmxldmVsREJU
cmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIElEQkJhY2tpbmdTdG9yZUN1cnNvckxl
dmVsREI6OkN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKLSAgICBpZiAoIW9iamVjdFN0b3Jl
Q3Vyc29yT3B0aW9ucyhsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIHJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvck9wdGlvbnMpKQorICAgIGlmICghb2JqZWN0U3Rv
cmVDdXJzb3JPcHRpb25zKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJRCwgb2JqZWN0U3Rv
cmVJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCiAgICAgICAgIHJldHVybiAw
OwotICAgIFJlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGN1cnNvciA9IE9iamVjdFN0b3Jl
Q3Vyc29ySW1wbDo6Y3JlYXRlKGxldmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucyk7Cisg
ICAgUmVmUHRyPE9iamVjdFN0b3JlQ3Vyc29ySW1wbD4gY3Vyc29yID0gT2JqZWN0U3RvcmVDdXJz
b3JJbXBsOjpjcmVhdGUoY3Vyc29ySUQsIGxldmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9u
cyk7CiAgICAgaWYgKCFjdXJzb3ItPmZpcnN0U2VlaygpKQogICAgICAgICByZXR1cm4gMDsKIAog
ICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZUN1cnNvckludGVyZmFjZT4gSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6b3Blbk9iamVjdFN0
b3JlS2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlJiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleVJhbmdlKiByYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uKQor
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+IElEQkJhY2tpbmdTdG9y
ZUxldmVsREI6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihpbnQ2NF90IGN1cnNvcklELCBJREJC
YWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJRCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2Us
IEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBMT0coU3RvcmFn
ZUFQSSwgIklEQkJhY2tpbmdTdG9yZUxldmVsREI6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvciIp
OwogICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0
aW9uKTsKICAgICBJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCOjpDdXJzb3JPcHRpb25zIGN1
cnNvck9wdGlvbnM7Ci0gICAgaWYgKCFvYmplY3RTdG9yZUN1cnNvck9wdGlvbnMobGV2ZWxEQlRy
YW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCByYW5nZSwgZGlyZWN0aW9uLCBj
dXJzb3JPcHRpb25zKSkKKyAgICBpZiAoIW9iamVjdFN0b3JlQ3Vyc29yT3B0aW9ucyhsZXZlbERC
VHJhbnNhY3Rpb24sIGRhdGFiYXNlSUQsIG9iamVjdFN0b3JlSWQsIHJhbmdlLCBkaXJlY3Rpb24s
IGN1cnNvck9wdGlvbnMpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZWZQdHI8T2JqZWN0U3Rv
cmVLZXlDdXJzb3JJbXBsPiBjdXJzb3IgPSBPYmplY3RTdG9yZUtleUN1cnNvckltcGw6OmNyZWF0
ZShsZXZlbERCVHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpOworICAgIFJlZlB0cjxPYmplY3RT
dG9yZUtleUN1cnNvckltcGw+IGN1cnNvciA9IE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbDo6Y3Jl
YXRlKGN1cnNvcklELCBsZXZlbERCVHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpOwogICAgIGlm
ICghY3Vyc29yLT5maXJzdFNlZWsoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4g
Y3Vyc29yLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJ
bnRlcmZhY2U+IElEQkJhY2tpbmdTdG9yZUxldmVsREI6Om9wZW5JbmRleEtleUN1cnNvcihJREJC
YWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElE
QktleVJhbmdlKiByYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uKQor
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+IElEQkJhY2tpbmdTdG9y
ZUxldmVsREI6Om9wZW5JbmRleEtleUN1cnNvcihpbnQ2NF90IGN1cnNvcklELCBJREJCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
RCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJh
bmdlKiByYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAg
IExPRyhTdG9yYWdlQVBJLCAiSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6b3BlbkluZGV4S2V5Q3Vy
c29yIik7CiAgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJC
YWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI6OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJh
bnNhY3Rpb24pOwogICAgIElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREI6OkN1cnNvck9wdGlv
bnMgY3Vyc29yT3B0aW9uczsKLSAgICBpZiAoIWluZGV4Q3Vyc29yT3B0aW9ucyhsZXZlbERCVHJh
bnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIHJhbmdlLCBkaXJl
Y3Rpb24sIGN1cnNvck9wdGlvbnMpKQorICAgIGlmICghaW5kZXhDdXJzb3JPcHRpb25zKGxldmVs
REJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJRCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgcmFuZ2Us
IGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCiAgICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0
cjxJbmRleEtleUN1cnNvckltcGw+IGN1cnNvciA9IEluZGV4S2V5Q3Vyc29ySW1wbDo6Y3JlYXRl
KGxldmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucyk7CisgICAgUmVmUHRyPEluZGV4S2V5
Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhLZXlDdXJzb3JJbXBsOjpjcmVhdGUoY3Vyc29ySUQs
IGxldmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucyk7CiAgICAgaWYgKCFjdXJzb3ItPmZp
cnN0U2VlaygpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBjdXJzb3IucmVsZWFz
ZSgpOwogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gSURC
QmFja2luZ1N0b3JlTGV2ZWxEQjo6b3BlbkluZGV4Q3Vyc29yKElEQkJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uSW50ZXJmYWNlJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdl
LCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24pCitQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6b3Blbklu
ZGV4Q3Vyc29yKGludDY0X3QgY3Vyc29ySUQsIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50
ZXJmYWNlJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlELCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJbmRleGVk
REI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJJ
REJCYWNraW5nU3RvcmVMZXZlbERCOjpvcGVuSW5kZXhDdXJzb3IiKTsKICAgICBMZXZlbERCVHJh
bnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
TGV2ZWxEQjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAgICAgSURCQmFj
a2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQjo6Q3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOwotICAg
IGlmICghaW5kZXhDdXJzb3JPcHRpb25zKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykp
CisgICAgaWYgKCFpbmRleEN1cnNvck9wdGlvbnMobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFz
ZUlELCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCByYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRp
b25zKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVmUHRyPEluZGV4Q3Vyc29ySW1wbD4gY3Vy
c29yID0gSW5kZXhDdXJzb3JJbXBsOjpjcmVhdGUobGV2ZWxEQlRyYW5zYWN0aW9uLCBjdXJzb3JP
cHRpb25zKTsKKyAgICBSZWZQdHI8SW5kZXhDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEN1cnNv
ckltcGw6OmNyZWF0ZShjdXJzb3JJRCwgbGV2ZWxEQlRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25z
KTsKICAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkpCiAgICAgICAgIHJldHVybiAwOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJh
Y2tpbmdTdG9yZUxldmVsREIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oCmluZGV4IDRlZjIwY2MuLmJiNTZhNjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFj
a2luZ1N0b3JlTGV2ZWxEQi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oCkBAIC05NiwxMCArOTYsMTAgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgYm9vbCBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoSURCQmFja2luZ1N0
b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2UmLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBSZWZQdHI8SURCS2V5
PiYgcHJpbWFyeUtleSkgT1ZFUlJJREUgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZpcnR1YWwg
Ym9vbCBrZXlFeGlzdHNJbkluZGV4KElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNl
JiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFy
eUtleSwgYm9vbCYgZXhpc3RzKSBPVkVSUklERSBXQVJOX1VOVVNFRF9SRVRVUk47CiAKLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBvcGVuT2Jq
ZWN0U3RvcmVLZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2UmLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFu
Z2UqLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gb3Blbk9iamVjdFN0b3Jl
Q3Vyc29yKElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlJiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSW5kZXhl
ZERCOjpDdXJzb3JEaXJlY3Rpb24pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+IG9wZW5JbmRleEtleUN1cnNvcihJREJCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSW5k
ZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+IG9wZW5JbmRleEN1cnNvcihJREJCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSW5k
ZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24pIE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+IG9wZW5PYmplY3RTdG9yZUtleUN1cnNv
cihpbnQ2NF90IGN1cnNvcklELCBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSYs
IGludDY0X3QgZGF0YWJhc2VJRCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlS
YW5nZSosIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBvcGVuT2JqZWN0U3Rv
cmVDdXJzb3IoaW50NjRfdCBjdXJzb3JJRCwgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRl
cmZhY2UmLCBpbnQ2NF90IGRhdGFiYXNlSUQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCS2V5UmFuZ2UqLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gb3Blbklu
ZGV4S2V5Q3Vyc29yKGludDY0X3QgY3Vyc29ySUQsIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
SW50ZXJmYWNlJiwgaW50NjRfdCBkYXRhYmFzZUlELCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJbmRleGVkREI6OkN1cnNvckRpcmVj
dGlvbikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1
cnNvckludGVyZmFjZT4gb3BlbkluZGV4Q3Vyc29yKGludDY0X3QgY3Vyc29ySUQsIElEQkJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlJiwgaW50NjRfdCBkYXRhYmFzZUlELCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJbmRl
eGVkREI6OkN1cnNvckRpcmVjdGlvbikgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFr
ZUluZGV4V3JpdGVycyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3QgZGF0YWJhc2VJZCwg
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIElEQktleSYgcHJpbWFyeUtleSwgYm9vbCBr
ZXlXYXNHZW5lcmF0ZWQsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZl
Y3RvcjxJbmRleEtleXM+JiwgVmVjdG9yPFJlZlB0cjxJREJJbmRleFdyaXRlckxldmVsREI+PiYg
aW5kZXhXcml0ZXJzLCBTdHJpbmcqIGVycm9yTWVzc2FnZSwgYm9vbCYgY29tcGxldGVkKSBPVkVS
UklERSBXQVJOX1VOVVNFRF9SRVRVUk47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0
aW9uTGV2ZWxEQi5jcHAKaW5kZXggNDMxNTY3Yy4uMzAxMGIwZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9uTGV2
ZWxEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKICNpZiBVU0UoTEVWRUxEQikKIAorI2luY2x1ZGUgIklEQkJh
Y2tpbmdTdG9yZUN1cnNvckxldmVsREIuaCIKICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVMZXZl
bERCLmgiCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCLmgiCiAj
aW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZC5oIgpAQCAtMzYsMjAgKzM3LDI3IEBACiAjaW5jbHVk
ZSAiSURCSW5kZXhXcml0ZXJMZXZlbERCLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
IAotI2RlZmluZSBBU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLKGNhbGxiYWNrLCBhcmcpIFwKKyNk
ZWZpbmUgQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDS19XSVRIX0FSRyhjYWxsYmFjaywgYXJnKSBc
CiAgICAgY2FsbE9uTWFpblRocmVhZChbY2FsbGJhY2ssIGFyZ10oKSB7IFwKICAgICAgICAgY2Fs
bGJhY2soYXJnKTsgXAogICAgIH0pOwogCi0jZGVmaW5lIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05f
Q0FMTEJBQ0soY2FsbGJhY2spIFwKKyNkZWZpbmUgQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDS19X
SVRIX05VTExfQVJHKGNhbGxiYWNrKSBcCiAgICAgY2FsbE9uTWFpblRocmVhZChbY2FsbGJhY2td
KCkgeyBcCiAgICAgICAgIGNhbGxiYWNrKDApOyBcCiAgICAgfSk7CiAKKyNkZWZpbmUgRU1QVFlf
QVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjYWxsYmFjaykgXAorICAgIGNhbGxPbk1haW5UaHJl
YWQoW2NhbGxiYWNrXSgpIHsgXAorICAgICAgICBjYWxsYmFjaygpOyBcCisgICAgfSk7CisKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6SURCU2Vy
dmVyQ29ubmVjdGlvbkxldmVsREIoSURCQmFja2luZ1N0b3JlTGV2ZWxEQiogYmFja2luZ1N0b3Jl
KQogICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICwgbV9uZXh0Q3Vyc29y
SUQoMSkKICAgICAsIG1fY2xvc2VkKGZhbHNlKQogewogfQpAQCAtMTg2LDcgKzE5NCw3IEBAIHZv
aWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OnNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5z
YWN0aW9uSUQsIGludDY0X3QgZGF0CiAgICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5
cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLCAqbV9iYWNraW5nU3RvcmUsICpiYWNraW5nU3RvcmVU
cmFuc2FjdGlvbiwgZGF0YWJhc2VJRCwgb2JqZWN0U3RvcmVJRCk7CiAgICAgfQogCi0gICAgRU1Q
VFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOworICAgIEFT
WU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0tfV0lUSF9OVUxMX0FSRyhjb21wbGV0aW9uQ2FsbGJhY2sp
OwogfQogCiB2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpjcmVhdGVPYmplY3RTdG9y
ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBDcmVhdGVPYmplY3RT
dG9yZU9wZXJhdGlvbiYgb3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKQEAgLTIwMiw3ICsyMTAsNyBA
QCB2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpjcmVhdGVPYmplY3RTdG9yZShJREJU
cmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYQogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICBFTVBUWV9BU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLKGNvbXBsZXRpb25DYWxs
YmFjayk7CisgICAgQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDS19XSVRIX05VTExfQVJHKGNvbXBs
ZXRpb25DYWxsYmFjayk7CiB9CiAKIHZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmNy
ZWF0ZUluZGV4KElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IENyZWF0
ZUluZGV4T3BlcmF0aW9uJiBvcGVyYXRpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRy
PElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKQpAQCAtMjE3LDcgKzIyNSw3
IEBAIHZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmNyZWF0ZUluZGV4KElEQlRyYW5z
YWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sCiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNh
bGxiYWNrKTsKKyAgICBBU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLX1dJVEhfTlVMTF9BUkcoY29t
cGxldGlvbkNhbGxiYWNrKTsKIH0KIAogdm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6
ZGVsZXRlSW5kZXgoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgY29uc3QgRGVs
ZXRlSW5kZXhPcGVyYXRpb24mIG9wZXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spCkBAIC0yMzIsNyArMjQw
LDcgQEAgdm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6ZGVsZXRlSW5kZXgoSURCVHJh
bnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0aW9u
Q2FsbGJhY2spOworICAgIEFTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0tfV0lUSF9OVUxMX0FSRyhj
b21wbGV0aW9uQ2FsbGJhY2spOwogfQogCiB2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERC
OjpnZXQoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgY29uc3QgR2V0T3BlcmF0
aW9uJiBvcGVyYXRpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNl
RXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKQpAQCAtMjQ2LDIzICsyNTQsMjUgQEAgdm9pZCBJ
REJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Z2V0KElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHJh
bnNhY3Rpb24sIGNvbnN0IEcKICAgICAgICAga2V5ID0gb3BlcmF0aW9uLmtleVJhbmdlKCktPmxv
d2VyKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJ
bnRlcmZhY2U+IGJhY2tpbmdTdG9yZUN1cnNvcjsKKyAgICAgICAgaW50NjRfdCBjdXJzb3JJRCA9
IG1fbmV4dEN1cnNvcklEKys7CisKICAgICAgICAgaWYgKG9wZXJhdGlvbi5pbmRleElEKCkgPT0g
SURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7CiAgICAgICAgICAgICBBU1NFUlQob3BlcmF0
aW9uLmN1cnNvclR5cGUoKSAhPSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOwogICAgICAgICAg
ICAgLy8gT2JqZWN0U3RvcmUgUmV0cmlldmFsIE9wZXJhdGlvbgotICAgICAgICAgICAgYmFja2lu
Z1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1cnNvcigqYmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0
aW9uLm9iamVjdFN0b3JlSUQoKSwgb3BlcmF0aW9uLmtleVJhbmdlKCksIEluZGV4ZWREQjo6Q3Vy
c29yTmV4dCk7CisgICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9y
ZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKGN1cnNvcklELCAqYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQo
KSwgb3BlcmF0aW9uLmtleVJhbmdlKCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAob3BlcmF0aW9uLmN1cnNvclR5cGUoKSA9PSBJbmRl
eGVkREI6OkN1cnNvcktleU9ubHkpIHsKICAgICAgICAgICAgICAgICAvLyBJbmRleCBWYWx1ZSBS
ZXRyaWV2YWwgT3BlcmF0aW9uCi0gICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0g
bV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcigqYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQo
KSwgb3BlcmF0aW9uLmluZGV4SUQoKSwgb3BlcmF0aW9uLmtleVJhbmdlKCksIEluZGV4ZWREQjo6
Q3Vyc29yTmV4dCk7CisgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNr
aW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcihjdXJzb3JJRCwgKmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9y
ZUlEKCksIG9wZXJhdGlvbi5pbmRleElEKCksIG9wZXJhdGlvbi5rZXlSYW5nZSgpLCBJbmRleGVk
REI6OkN1cnNvck5leHQpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAv
LyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KLSAgICAgICAgICAg
ICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29y
KCpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5pZCgpLCBv
cGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCBvcGVyYXRpb24uaW5kZXhJRCgpLCBvcGVyYXRpb24u
a2V5UmFuZ2UoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKKyAgICAgICAgICAgICAgICBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29yKGN1cnNvcklE
LCAqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwg
b3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgb3BlcmF0aW9uLmluZGV4SUQoKSwgb3BlcmF0aW9u
LmtleVJhbmdlKCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewogICAgICAgICAgICAg
b3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vblN1Y2Nlc3MoKTsKLSAgICAgICAgICAgIEVNUFRZX0FT
WU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICAgICAgICAg
IEFTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0tfV0lUSF9OVUxMX0FSRyhjb21wbGV0aW9uQ2FsbGJh
Y2spOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTI3NywyNCArMjg3LDI0
IEBAIHZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmdldChJREJUcmFuc2FjdGlvbkJh
Y2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBHCiAgICAgICAgIG9rID0gbV9iYWNraW5nU3RvcmUt
PmdldFJlY29yZCgqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNl
KCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgKmtleSwgdmFsdWUpOwogICAgICAg
ICBpZiAoIW9rKSB7CiAgICAgICAgICAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJy
b3IsICJJbnRlcm5hbCBlcnJvciBpbiBnZXRSZWNvcmQuIikpOwotICAgICAgICAgICAgRU1QVFlf
QVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOworICAgICAgICAg
ICAgQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDS19XSVRIX05VTExfQVJHKGNvbXBsZXRpb25DYWxs
YmFjayk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAodmFs
dWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uU3Vj
Y2VzcygpOwotICAgICAgICAgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21w
bGV0aW9uQ2FsbGJhY2spOworICAgICAgICAgICAgQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDS19X
SVRIX05VTExfQVJHKGNvbXBsZXRpb25DYWxsYmFjayk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAob3BlcmF0aW9uLmF1dG9JbmNyZW1lbnQoKSAmJiAhb3Bl
cmF0aW9uLmtleVBhdGgoKS5pc051bGwoKSkgewogICAgICAgICAgICAgb3BlcmF0aW9uLmNhbGxi
YWNrcygpLT5vblN1Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSksIGtleSwg
b3BlcmF0aW9uLmtleVBhdGgoKSk7Ci0gICAgICAgICAgICBFTVBUWV9BU1lOQ19DT01QTEVUSU9O
X0NBTExCQUNLKGNvbXBsZXRpb25DYWxsYmFjayk7CisgICAgICAgICAgICBBU1lOQ19DT01QTEVU
SU9OX0NBTExCQUNLX1dJVEhfTlVMTF9BUkcoY29tcGxldGlvbkNhbGxiYWNrKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+
b25TdWNjZXNzKFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IodmFsdWUpKTsKLSAgICAgICAgRU1Q
VFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOworICAgICAg
ICBBU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLX1dJVEhfTlVMTF9BUkcoY29tcGxldGlvbkNhbGxi
YWNrKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgfQpAQCAtMzAzLDE4ICszMTMsMTggQEAgdm9p
ZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Z2V0KElEQlRyYW5zYWN0aW9uQmFja2VuZCYg
dHJhbnNhY3Rpb24sIGNvbnN0IEcKICAgICBvayA9IG1fYmFja2luZ1N0b3JlLT5nZXRQcmltYXJ5
S2V5VmlhSW5kZXgoKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFz
ZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZUlEKCksIG9wZXJhdGlvbi5pbmRleElEKCks
ICprZXksIHByaW1hcnlLZXkpOwogICAgIGlmICghb2spIHsKICAgICAgICAgb3BlcmF0aW9uLmNh
bGxiYWNrcygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0UHJpbWFyeUtleVZp
YUluZGV4LiIpKTsKLSAgICAgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21w
bGV0aW9uQ2FsbGJhY2spOworICAgICAgICBBU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLX1dJVEhf
TlVMTF9BUkcoY29tcGxldGlvbkNhbGxiYWNrKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBpZiAoIXByaW1hcnlLZXkpIHsKICAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vblN1
Y2Nlc3MoKTsKLSAgICAgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0
aW9uQ2FsbGJhY2spOworICAgICAgICBBU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLX1dJVEhfTlVM
TF9BUkcoY29tcGxldGlvbkNhbGxiYWNrKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBp
ZiAob3BlcmF0aW9uLmN1cnNvclR5cGUoKSA9PSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpIHsK
ICAgICAgICAgLy8gSW5kZXggVmFsdWUgUmV0cmlldmFsIE9wZXJhdGlvbgogICAgICAgICBvcGVy
YXRpb24uY2FsbGJhY2tzKCktPm9uU3VjY2VzcyhwcmltYXJ5S2V5LmdldCgpKTsKLSAgICAgICAg
RU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOworICAg
ICAgICBBU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLX1dJVEhfTlVMTF9BUkcoY29tcGxldGlvbkNh
bGxiYWNrKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzIzLDIyICszMzMsMjIgQEAg
dm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Z2V0KElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCYgdHJhbnNhY3Rpb24sIGNvbnN0IEcKICAgICBvayA9IG1fYmFja2luZ1N0b3JlLT5nZXRSZWNv
cmQoKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCks
IG9wZXJhdGlvbi5vYmplY3RTdG9yZUlEKCksICpwcmltYXJ5S2V5LCB2YWx1ZSk7CiAgICAgaWYg
KCFvaykgewogICAgICAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRl
cm5hbCBlcnJvciBpbiBnZXRSZWNvcmQuIikpOwotICAgICAgICBFTVBUWV9BU1lOQ19DT01QTEVU
SU9OX0NBTExCQUNLKGNvbXBsZXRpb25DYWxsYmFjayk7CisgICAgICAgIEFTWU5DX0NPTVBMRVRJ
T05fQ0FMTEJBQ0tfV0lUSF9OVUxMX0FSRyhjb21wbGV0aW9uQ2FsbGJhY2spOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICBvcGVy
YXRpb24uY2FsbGJhY2tzKCktPm9uU3VjY2VzcygpOwotICAgICAgICBFTVBUWV9BU1lOQ19DT01Q
TEVUSU9OX0NBTExCQUNLKGNvbXBsZXRpb25DYWxsYmFjayk7CisgICAgICAgIEFTWU5DX0NPTVBM
RVRJT05fQ0FMTEJBQ0tfV0lUSF9OVUxMX0FSRyhjb21wbGV0aW9uQ2FsbGJhY2spOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGlmIChvcGVyYXRpb24uYXV0b0luY3JlbWVudCgpICYmICFv
cGVyYXRpb24ua2V5UGF0aCgpLmlzTnVsbCgpKSB7CiAgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFj
a3MoKS0+b25TdWNjZXNzKFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IodmFsdWUpLCBwcmltYXJ5
S2V5LCBvcGVyYXRpb24ua2V5UGF0aCgpKTsKLSAgICAgICAgRU1QVFlfQVNZTkNfQ09NUExFVElP
Tl9DQUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOworICAgICAgICBBU1lOQ19DT01QTEVUSU9O
X0NBTExCQUNLX1dJVEhfTlVMTF9BUkcoY29tcGxldGlvbkNhbGxiYWNrKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uU3VjY2VzcyhTaGFyZWRC
dWZmZXI6OmFkb3B0VmVjdG9yKHZhbHVlKSk7Ci0gICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9D
QUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOworICAgIEFTWU5DX0NPTVBMRVRJT05fQ0FMTEJB
Q0tfV0lUSF9OVUxMX0FSRyhjb21wbGV0aW9uQ2FsbGJhY2spOwogfQogCiB2b2lkIElEQlNlcnZl
ckNvbm5lY3Rpb25MZXZlbERCOjpwdXQoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlv
biwgY29uc3QgUHV0T3BlcmF0aW9uJiBvcGVyYXRpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNz
UmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKQpAQCAtMzU0LDcg
KzM2NCw3IEBAIHZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OnB1dChJREJUcmFuc2Fj
dGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBQCiAgICAgICAgIGtleVdhc0dlbmVyYXRl
ZCA9IHRydWU7CiAgICAgICAgIGlmICghYXV0b0luY0tleS0+aXNWYWxpZCgpKSB7CiAgICAgICAg
ICAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsICJNYXhpbXVtIGtleSBn
ZW5lcmF0b3IgdmFsdWUgcmVhY2hlZC4iKSk7Ci0gICAgICAgICAgICBFTVBUWV9BU1lOQ19DT01Q
TEVUSU9OX0NBTExCQUNLKGNvbXBsZXRpb25DYWxsYmFjayk7CisgICAgICAgICAgICBBU1lOQ19D
T01QTEVUSU9OX0NBTExCQUNLX1dJVEhfTlVMTF9BUkcoY29tcGxldGlvbkNhbGxiYWNrKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBrZXkgPSBhdXRvSW5jS2V5OwpA
QCAtMzY5LDEyICszNzksMTIgQEAgdm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6cHV0
KElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IFAKICAgICAgICAgYm9v
bCBvayA9IG1fYmFja2luZ1N0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKCpiYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2Jq
ZWN0U3RvcmUoKS5pZCwgKmtleSwgcmVjb3JkSWRlbnRpZmllcik7CiAgICAgICAgIGlmICghb2sp
IHsKICAgICAgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVy
bmFsIGVycm9yIGNoZWNraW5nIGtleSBleGlzdGVuY2UuIikpOwotICAgICAgICAgICAgRU1QVFlf
QVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOworICAgICAgICAg
ICAgQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDS19XSVRIX05VTExfQVJHKGNvbXBsZXRpb25DYWxs
YmFjayk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJlY29y
ZElkZW50aWZpZXIpIHsKICAgICAgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFp
bnRFcnJvciwgIktleSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgb2JqZWN0IHN0b3JlLiIpKTsKLSAg
ICAgICAgICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxi
YWNrKTsKKyAgICAgICAgICAgIEFTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0tfV0lUSF9OVUxMX0FS
Ryhjb21wbGV0aW9uQ2FsbGJhY2spOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMzg1LDEyICszOTUsMTIgQEAgdm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxE
Qjo6cHV0KElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IFAKICAgICBi
b29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+bWFrZUluZGV4V3JpdGVy
cyh0cmFuc2FjdGlvbi5pZCgpLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlv
bi5vYmplY3RTdG9yZSgpLCAqa2V5LCBrZXlXYXNHZW5lcmF0ZWQsIG9wZXJhdGlvbi5pbmRleElE
cygpLCBvcGVyYXRpb24uaW5kZXhLZXlzKCksIGluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSwg
b2JleXNDb25zdHJhaW50cyk7CiAgICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7CiAgICAg
ICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBi
YWNraW5nIHN0b3JlIGVycm9yIHVwZGF0aW5nIGluZGV4IGtleXMuIikpOwotICAgICAgICBFTVBU
WV9BU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLKGNvbXBsZXRpb25DYWxsYmFjayk7CisgICAgICAg
IEFTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0tfV0lUSF9OVUxMX0FSRyhjb21wbGV0aW9uQ2FsbGJh
Y2spOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghb2JleXNDb25zdHJhaW50cykg
ewogICAgICAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsIGVycm9yTWVz
c2FnZSkpOwotICAgICAgICBFTVBUWV9BU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLKGNvbXBsZXRp
b25DYWxsYmFjayk7CisgICAgICAgIEFTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0tfV0lUSF9OVUxM
X0FSRyhjb21wbGV0aW9uQ2FsbGJhY2spOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0z
OTgsNyArNDA4LDcgQEAgdm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6cHV0KElEQlRy
YW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IFAKICAgICBiYWNraW5nU3RvcmVT
dWNjZXNzID0gbV9iYWNraW5nU3RvcmUtPnB1dFJlY29yZCgqYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlKCku
aWQsICprZXksIG9wZXJhdGlvbi52YWx1ZSgpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKICAg
ICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKICAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNr
cygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgcGVy
Zm9ybWluZyBwdXQvYWRkLiIpKTsKLSAgICAgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxM
QkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOworICAgICAgICBBU1lOQ19DT01QTEVUSU9OX0NBTExC
QUNLX1dJVEhfTlVMTF9BUkcoY29tcGxldGlvbkNhbGxiYWNrKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtNDExLDEzICs0MjEsMTMgQEAgdm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2
ZWxEQjo6cHV0KElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IFAKICAg
ICAgICAgYm9vbCBvayA9IG1fYmFja2luZ1N0b3JlLT51cGRhdGVLZXlHZW5lcmF0b3IodHJhbnNh
Y3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3Jl
KCkuaWQsICprZXksICFrZXlXYXNHZW5lcmF0ZWQpOwogICAgICAgICBpZiAoIW9rKSB7CiAgICAg
ICAgICAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJv
ciB1cGRhdGluZyBrZXkgZ2VuZXJhdG9yLiIpKTsKLSAgICAgICAgICAgIEVNUFRZX0FTWU5DX0NP
TVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICAgICAgICAgIEFTWU5D
X0NPTVBMRVRJT05fQ0FMTEJBQ0tfV0lUSF9OVUxMX0FSRyhjb21wbGV0aW9uQ2FsbGJhY2spOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCiAgICAgb3BlcmF0aW9uLmNh
bGxiYWNrcygpLT5vblN1Y2Nlc3Moa2V5LnJlbGVhc2UoKSk7Ci0gICAgRU1QVFlfQVNZTkNfQ09N
UExFVElPTl9DQUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOworICAgIEFTWU5DX0NPTVBMRVRJ
T05fQ0FMTEJBQ0tfV0lUSF9OVUxMX0FSRyhjb21wbGV0aW9uQ2FsbGJhY2spOwogfQogCiB2b2lk
IElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpvcGVuQ3Vyc29yKElEQlRyYW5zYWN0aW9uQmFj
a2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IE9wZW5DdXJzb3JPcGVyYXRpb24mIG9wZXJhdGlvbiwg
c3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0
aW9uQ2FsbGJhY2spCkBAIC00MzIsMTYgKzQ0MiwxOCBAQCB2b2lkIElEQlNlcnZlckNvbm5lY3Rp
b25MZXZlbERCOjpvcGVuQ3Vyc29yKElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24s
CiAgICAgaWYgKG9wZXJhdGlvbi50YXNrVHlwZSgpID09IElEQkRhdGFiYXNlQmFja2VuZDo6UHJl
ZW1wdGl2ZVRhc2spCiAgICAgICAgIHRyYW5zYWN0aW9uLmFkZFByZWVtcHRpdmVFdmVudCgpOwog
CisgICAgaW50NjRfdCBjdXJzb3JJRCA9IG1fbmV4dEN1cnNvcklEKys7CisKICAgICBSZWZQdHI8
SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBiYWNraW5nU3RvcmVDdXJzb3I7CiAgICAg
aWYgKG9wZXJhdGlvbi5pbmRleElEKCkgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7
CiAgICAgICAgIEFTU0VSVChvcGVyYXRpb24uY3Vyc29yVHlwZSgpICE9IEluZGV4ZWREQjo6Q3Vy
c29yS2V5T25seSk7Ci0gICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3Jl
LT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IoKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2Fj
dGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZUlEKCksIG9wZXJhdGlv
bi5rZXlSYW5nZSgpLCBvcGVyYXRpb24uZGlyZWN0aW9uKCkpOworICAgICAgICBiYWNraW5nU3Rv
cmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKGN1cnNvcklE
LCAqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwg
b3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgb3BlcmF0aW9uLmtleVJhbmdlKCksIG9wZXJhdGlv
bi5kaXJlY3Rpb24oKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wZXJhdGlvbi50
YXNrVHlwZSgpID09IElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzayk7CiAgICAgICAgIGlm
IChvcGVyYXRpb24uY3Vyc29yVHlwZSgpID09IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkKLSAg
ICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhL
ZXlDdXJzb3IoKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgp
LmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZUlEKCksIG9wZXJhdGlvbi5pbmRleElEKCksIG9w
ZXJhdGlvbi5rZXlSYW5nZSgpLCBvcGVyYXRpb24uZGlyZWN0aW9uKCkpOworICAgICAgICAgICAg
YmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcihj
dXJzb3JJRCwgKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgp
LmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZUlEKCksIG9wZXJhdGlvbi5pbmRleElEKCksIG9w
ZXJhdGlvbi5rZXlSYW5nZSgpLCBvcGVyYXRpb24uZGlyZWN0aW9uKCkpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbklu
ZGV4Q3Vyc29yKCpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2Uo
KS5pZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCBvcGVyYXRpb24uaW5kZXhJRCgpLCBv
cGVyYXRpb24ua2V5UmFuZ2UoKSwgb3BlcmF0aW9uLmRpcmVjdGlvbigpKTsKKyAgICAgICAgICAg
IGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhDdXJzb3IoY3Vy
c29ySUQsICpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5p
ZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCBvcGVyYXRpb24uaW5kZXhJRCgpLCBvcGVy
YXRpb24ua2V5UmFuZ2UoKSwgb3BlcmF0aW9uLmRpcmVjdGlvbigpKTsKICAgICB9CiAKICAgICBp
ZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewpAQCAtNDU0LDExICs0NjYsMTEgQEAgdm9pZCBJREJT
ZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6b3BlbkN1cnNvcihJREJUcmFuc2FjdGlvbkJhY2tlbmQm
IHRyYW5zYWN0aW9uLAogCiAgICAgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlw
ZShzdGF0aWNfY2FzdDxJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlPihvcGVyYXRpb24udGFz
a1R5cGUoKSkpOwogCi0gICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGN1cnNvciA9IElEQkN1
cnNvckJhY2tlbmQ6OmNyZWF0ZShiYWNraW5nU3RvcmVDdXJzb3IsIG9wZXJhdGlvbi5jdXJzb3JU
eXBlKCksIHRhc2tUeXBlLCAmdHJhbnNhY3Rpb24sIG9wZXJhdGlvbi5vYmplY3RTdG9yZUlEKCkp
OworICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBjdXJzb3IgPSBJREJDdXJzb3JCYWNrZW5k
OjpjcmVhdGUoY3Vyc29ySUQsIG9wZXJhdGlvbi5jdXJzb3JUeXBlKCksIHRhc2tUeXBlLCB0cmFu
c2FjdGlvbiwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSk7CiAKICAgICBvcGVyYXRpb24uY2Fs
bGJhY2tzKCktPm9uU3VjY2VzcyhjdXJzb3IsIGN1cnNvci0+a2V5KCksIGN1cnNvci0+cHJpbWFy
eUtleSgpLCBjdXJzb3ItPnZhbHVlKCkpOwogCi0gICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9D
QUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOworICAgIEFTWU5DX0NPTVBMRVRJT05fQ0FMTEJB
Q0tfV0lUSF9OVUxMX0FSRyhjb21wbGV0aW9uQ2FsbGJhY2spOwogfQogCiB2b2lkIElEQlNlcnZl
ckNvbm5lY3Rpb25MZXZlbERCOjpjb3VudChJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0
aW9uLCBjb25zdCBDb3VudE9wZXJhdGlvbiYgb3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKQEAgLTQ2
OSwxMCArNDgxLDEyIEBAIHZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmNvdW50KElE
QlRyYW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0CiAgICAgdWludDMyX3QgY291
bnQgPSAwOwogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+IGJhY2tp
bmdTdG9yZUN1cnNvcjsKIAorICAgIGludDY0X3QgY3Vyc29ySUQgPSBtX25leHRDdXJzb3JJRCsr
OworCiAgICAgaWYgKG9wZXJhdGlvbi5pbmRleElEKCkgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52
YWxpZElkKQotICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Bl
bk9iamVjdFN0b3JlS2V5Q3Vyc29yKCpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rp
b24uZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCBvcGVyYXRpb24u
a2V5UmFuZ2UoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKKyAgICAgICAgYmFja2luZ1N0b3Jl
Q3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihjdXJzb3JJ
RCwgKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCks
IG9wZXJhdGlvbi5vYmplY3RTdG9yZUlEKCksIG9wZXJhdGlvbi5rZXlSYW5nZSgpLCBJbmRleGVk
REI6OkN1cnNvck5leHQpOwogICAgIGVsc2UKLSAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0g
bV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcigqYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQo
KSwgb3BlcmF0aW9uLmluZGV4SUQoKSwgb3BlcmF0aW9uLmtleVJhbmdlKCksIEluZGV4ZWREQjo6
Q3Vyc29yTmV4dCk7CisgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3Jl
LT5vcGVuSW5kZXhLZXlDdXJzb3IoY3Vyc29ySUQsICpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwg
dHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCBv
cGVyYXRpb24uaW5kZXhJRCgpLCBvcGVyYXRpb24ua2V5UmFuZ2UoKSwgSW5kZXhlZERCOjpDdXJz
b3JOZXh0KTsKICAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewogICAgICAgICBvcGVyYXRp
b24uY2FsbGJhY2tzKCktPm9uU3VjY2Vzcyhjb3VudCk7CiAgICAgICAgIGNhbGxPbk1haW5UaHJl
YWQoW2NvbXBsZXRpb25DYWxsYmFja10oKSB7CkBAIC00ODYsNyArNTAwLDcgQEAgdm9pZCBJREJT
ZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Y291bnQoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFu
c2FjdGlvbiwgY29uc3QKICAgICB9IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVl
RnVuY3Rpb24oMCkpOwogCiAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vblN1Y2Nlc3MoY291
bnQpOwotICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxi
YWNrKTsKKyAgICBBU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLX1dJVEhfTlVMTF9BUkcoY29tcGxl
dGlvbkNhbGxiYWNrKTsKIH0KIAogdm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6ZGVs
ZXRlUmFuZ2UoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgY29uc3QgRGVsZXRl
UmFuZ2VPcGVyYXRpb24mIG9wZXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spCkBAIC00OTQsNyArNTA4LDkg
QEAgdm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6ZGVsZXRlUmFuZ2UoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwKICAgICBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bkxldmVsREIqIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbnMuZ2V0KHRyYW5zYWN0aW9uLmlkKCkpOwogICAgIEFTU0VSVChiYWNraW5nU3RvcmVUcmFu
c2FjdGlvbik7CiAKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBi
YWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29y
KCpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5pZCgpLCBv
cGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCBvcGVyYXRpb24ua2V5UmFuZ2UoKSwgSW5kZXhlZERC
OjpDdXJzb3JOZXh0KTsKKyAgICBpbnQ2NF90IGN1cnNvcklEID0gbV9uZXh0Q3Vyc29ySUQrKzsK
KworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+IGJhY2tpbmdTdG9y
ZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IoY3Vyc29ySUQs
ICpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5pZCgpLCBv
cGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCBvcGVyYXRpb24ua2V5UmFuZ2UoKSwgSW5kZXhlZERC
OjpDdXJzb3JOZXh0KTsKICAgICBpZiAoYmFja2luZ1N0b3JlQ3Vyc29yKSB7CiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJlY29yZCgqYmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9u
Lm9iamVjdFN0b3JlSUQoKSwgYmFja2luZ1N0b3JlQ3Vyc29yLT5yZWNvcmRJZGVudGlmaWVyKCkp
KSB7CkBAIC01MDgsNyArNTI0LDcgQEAgdm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6
ZGVsZXRlUmFuZ2UoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwKICAgICB9CiAK
ICAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uU3VjY2VzcygpOwotICAgIEVNUFRZX0FTWU5D
X0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICBBU1lOQ19DT01Q
TEVUSU9OX0NBTExCQUNLX1dJVEhfTlVMTF9BUkcoY29tcGxldGlvbkNhbGxiYWNrKTsKIH0KIAog
dm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Y2xlYXJPYmplY3RTdG9yZShJREJUcmFu
c2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBDbGVhck9iamVjdFN0b3JlT3BlcmF0
aW9uJiBvcGVyYXRpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNl
RXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKQpAQCAtNTI0LDcgKzU0MCw3IEBAIHZvaWQgSURC
U2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmNsZWFyT2JqZWN0U3RvcmUoSURCVHJhbnNhY3Rpb25C
YWNrZW5kJiB0cmFuc2FjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgb3BlcmF0aW9uLmNh
bGxiYWNrcygpLT5vblN1Y2Nlc3MoKTsKLSAgICBFTVBUWV9BU1lOQ19DT01QTEVUSU9OX0NBTExC
QUNLKGNvbXBsZXRpb25DYWxsYmFjayk7CisgICAgQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDS19X
SVRIX05VTExfQVJHKGNvbXBsZXRpb25DYWxsYmFjayk7CiB9CiAKIHZvaWQgSURCU2VydmVyQ29u
bmVjdGlvbkxldmVsREI6OmRlbGV0ZU9iamVjdFN0b3JlKElEQlRyYW5zYWN0aW9uQmFja2VuZCYg
dHJhbnNhY3Rpb24sIGNvbnN0IERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uJiBvcGVyYXRpb24s
IHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxl
dGlvbkNhbGxiYWNrKQpAQCAtNTQwLDcgKzU1Niw3IEBAIHZvaWQgSURCU2VydmVyQ29ubmVjdGlv
bkxldmVsREI6OmRlbGV0ZU9iamVjdFN0b3JlKElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHJhbnNh
CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIEVNUFRZX0FTWU5DX0NP
TVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICBBU1lOQ19DT01QTEVU
SU9OX0NBTExCQUNLX1dJVEhfTlVMTF9BUkcoY29tcGxldGlvbkNhbGxiYWNrKTsKIH0KIAogdm9p
ZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Y2hhbmdlRGF0YWJhc2VWZXJzaW9uKElEQlRy
YW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZDo6
VmVyc2lvbkNoYW5nZU9wZXJhdGlvbiYgb3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKQEAgLTU1OCwx
NiArNTc0LDEzMSBAQCB2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpjaGFuZ2VEYXRh
YmFzZVZlcnNpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cgogICAgIGlmICghbV9iYWNraW5n
U3RvcmUtPnVwZGF0ZUlEQkRhdGFiYXNlVmVyc2lvbigqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24s
IGRhdGFiYXNlSWQsIGRhdGFiYXNlLm1ldGFkYXRhKCkudmVyc2lvbikpIHsKICAgICAgICAgUmVm
UHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJFcnJvciB3cml0aW5nIGRhdGEgdG8g
c3RhYmxlIHN0b3JhZ2Ugd2hlbiB1cGRhdGluZyB2ZXJzaW9uLiIpOwogICAgICAgICBvcGVyYXRp
b24uY2FsbGJhY2tzKCktPm9uRXJyb3IoZXJyb3IpOwotICAgICAgICBBU1lOQ19DT01QTEVUSU9O
X0NBTExCQUNLKGNvbXBsZXRpb25DYWxsYmFjaywgZXJyb3IpOworICAgICAgICBBU1lOQ19DT01Q
TEVUSU9OX0NBTExCQUNLX1dJVEhfQVJHKGNvbXBsZXRpb25DYWxsYmFjaywgZXJyb3IpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIEFTU0VSVCghZGF0YWJhc2UuaGFzUGVuZGluZ1NlY29u
ZEhhbGZPcGVuKCkpOwogICAgIGRhdGFiYXNlLnNldFBlbmRpbmdTZWNvbmRIYWxmT3BlbihJREJQ
ZW5kaW5nT3BlbkNhbGw6OmNyZWF0ZSgqb3BlcmF0aW9uLmNhbGxiYWNrcygpLCAqb3BlcmF0aW9u
LmRhdGFiYXNlQ2FsbGJhY2tzKCksIHRyYW5zYWN0aW9uLmlkKCksIG9wZXJhdGlvbi52ZXJzaW9u
KCkpKTsKICAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uVXBncmFkZU5lZWRlZChvbGRWZXJz
aW9uLCAmZGF0YWJhc2UsIGRhdGFiYXNlLm1ldGFkYXRhKCkpOwogCisgICAgQVNZTkNfQ09NUExF
VElPTl9DQUxMQkFDS19XSVRIX05VTExfQVJHKGNvbXBsZXRpb25DYWxsYmFjayk7Cit9CisKK3Zv
aWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmN1cnNvckFkdmFuY2UoSURCQ3Vyc29yQmFj
a2VuZCYgY3Vyc29yLCBjb25zdCBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uJiBvcGVyYXRpb24sIHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgSURCQmFja2lu
Z1N0b3JlQ3Vyc29yTGV2ZWxEQiogYmFja2luZ1N0b3JlQ3Vyc29yID0gY3Vyc29yLmlkKCkgPyBt
X2JhY2tpbmdTdG9yZUN1cnNvcnMuZ2V0KGN1cnNvci5pZCgpKSA6IDA7CisjaWZuZGVmIE5ERUJV
RworICAgIGlmIChjdXJzb3IuaWQoKSkKKyAgICAgICAgQVNTRVJUKGJhY2tpbmdTdG9yZUN1cnNv
cik7CisjZW5kaWYKKworICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yIHx8ICFiYWNraW5nU3Rv
cmVDdXJzb3ItPmFkdmFuY2Uob3BlcmF0aW9uLmNvdW50KCkpKSB7CisgICAgICAgIG1fYmFja2lu
Z1N0b3JlQ3Vyc29ycy5yZW1vdmUoY3Vyc29yLmlkKCkpOworICAgICAgICBjdXJzb3IuY2xlYXJD
dXJzb3JEYXRhKCk7CisKKyAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vblN1Y2Nlc3Mo
c3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oMCkpOworICAgICAgICBFTVBUWV9BU1lOQ19DT01Q
TEVUSU9OX0NBTExCQUNLKGNvbXBsZXRpb25DYWxsYmFjayk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBjdXJzb3IudXBkYXRlQ3Vyc29yRGF0YShiYWNraW5nU3RvcmVDdXJzb3ItPmtl
eSgpLmdldCgpLCBiYWNraW5nU3RvcmVDdXJzb3ItPnByaW1hcnlLZXkoKS5nZXQoKSwgYmFja2lu
Z1N0b3JlQ3Vyc29yLT52YWx1ZSgpLmdldCgpKTsKKyAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCkt
Pm9uU3VjY2VzcyhiYWNraW5nU3RvcmVDdXJzb3ItPmtleSgpLCBiYWNraW5nU3RvcmVDdXJzb3It
PnByaW1hcnlLZXkoKSwgYmFja2luZ1N0b3JlQ3Vyc29yLT52YWx1ZSgpKTsKKyAgICBFTVBUWV9B
U1lOQ19DT01QTEVUSU9OX0NBTExCQUNLKGNvbXBsZXRpb25DYWxsYmFjayk7Cit9CisKK3ZvaWQg
SURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmN1cnNvckl0ZXJhdGUoSURCQ3Vyc29yQmFja2Vu
ZCYgY3Vyc29yLCBjb25zdCBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKK3sKKyAgICBJREJCYWNraW5n
U3RvcmVDdXJzb3JMZXZlbERCKiBiYWNraW5nU3RvcmVDdXJzb3IgPSBjdXJzb3IuaWQoKSA/IG1f
YmFja2luZ1N0b3JlQ3Vyc29ycy5nZXQoY3Vyc29yLmlkKCkpIDogMDsKKyNpZm5kZWYgTkRFQlVH
CisgICAgaWYgKGN1cnNvci5pZCgpKQorICAgICAgICBBU1NFUlQoYmFja2luZ1N0b3JlQ3Vyc29y
KTsKKyNlbmRpZgorCisgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0
aW9uQ2FsbGJhY2spOworCisgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IgfHwgIWJhY2tpbmdT
dG9yZUN1cnNvci0+Y29udGludWVGdW5jdGlvbihvcGVyYXRpb24ua2V5KCkpKSB7CisgICAgICAg
IG1fYmFja2luZ1N0b3JlQ3Vyc29ycy5yZW1vdmUoY3Vyc29yLmlkKCkpOworICAgICAgICBjdXJz
b3IuY2xlYXJDdXJzb3JEYXRhKCk7CisgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25T
dWNjZXNzKHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KDApKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGN1cnNvci51cGRhdGVDdXJzb3JEYXRhKGJhY2tpbmdTdG9yZUN1cnNvci0+
a2V5KCkuZ2V0KCksIGJhY2tpbmdTdG9yZUN1cnNvci0+cHJpbWFyeUtleSgpLmdldCgpLCBiYWNr
aW5nU3RvcmVDdXJzb3ItPnZhbHVlKCkuZ2V0KCkpOworICAgIG9wZXJhdGlvbi5jYWxsYmFja3Mo
KS0+b25TdWNjZXNzKGJhY2tpbmdTdG9yZUN1cnNvci0+a2V5KCksIGJhY2tpbmdTdG9yZUN1cnNv
ci0+cHJpbWFyeUtleSgpLCBiYWNraW5nU3RvcmVDdXJzb3ItPnZhbHVlKCkpOworICAgIAorfQor
Cit2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpjdXJzb3JQcmVmZXRjaEl0ZXJhdGlv
bihJREJDdXJzb3JCYWNrZW5kJiBjdXJzb3IsIGNvbnN0IEN1cnNvclByZWZldGNoSXRlcmF0aW9u
T3BlcmF0aW9uJiBvcGVyYXRpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2Fs
bGJhY2spCit7CisgICAgSURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQiogYmFja2luZ1N0b3Jl
Q3Vyc29yID0gY3Vyc29yLmlkKCkgPyBtX2JhY2tpbmdTdG9yZUN1cnNvcnMuZ2V0KGN1cnNvci5p
ZCgpKSA6IDA7CisjaWZuZGVmIE5ERUJVRworICAgIGlmIChjdXJzb3IuaWQoKSkKKyAgICAgICAg
QVNTRVJUKGJhY2tpbmdTdG9yZUN1cnNvcik7CisjZW5kaWYKKworICAgIFZlY3RvcjxSZWZQdHI8
SURCS2V5Pj4gZm91bmRLZXlzOworICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4gZm91bmRQcmlt
YXJ5S2V5czsKKyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+IGZvdW5kVmFsdWVzOwor
CisgICAgaWYgKGJhY2tpbmdTdG9yZUN1cnNvcikgeworICAgICAgICBpbnQ2NF90IGN1cnNvcklE
ID0gbV9uZXh0Q3Vyc29ySUQrKzsKKyAgICAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNv
ckxldmVsREI+IHNhdmVkQ3Vyc29yID0gYmFja2luZ1N0b3JlQ3Vyc29yLT5jbG9uZSgpOworICAg
ICAgICBtX2JhY2tpbmdTdG9yZUN1cnNvcnMuc2V0KGN1cnNvcklELCBzYXZlZEN1cnNvci5yZWxl
YXNlKCkpOworICAgICAgICBjdXJzb3Iuc2V0U2F2ZWRDdXJzb3JJRChjdXJzb3JJRCk7CisgICAg
fQorCisgICAgY29uc3Qgc2l6ZV90IG1heFNpemVFc3RpbWF0ZSA9IDEwICogMTAyNCAqIDEwMjQ7
CisgICAgc2l6ZV90IHNpemVFc3RpbWF0ZSA9IDA7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IG9wZXJhdGlvbi5udW1iZXJUb0ZldGNoKCk7ICsraSkgeworICAgICAgICBpZiAoIWJhY2tpbmdT
dG9yZUN1cnNvciB8fCAhYmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKSB7
CisgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZUN1cnNvcnMucmVtb3ZlKGN1cnNvci5pZCgpKTsK
KyAgICAgICAgICAgIGN1cnNvci5jbGVhckN1cnNvckRhdGEoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgZm91bmRLZXlzLmFwcGVuZChiYWNraW5nU3RvcmVDdXJz
b3ItPmtleSgpKTsKKyAgICAgICAgZm91bmRQcmltYXJ5S2V5cy5hcHBlbmQoYmFja2luZ1N0b3Jl
Q3Vyc29yLT5wcmltYXJ5S2V5KCkpOworCisgICAgICAgIHN3aXRjaCAoY3Vyc29yLmN1cnNvclR5
cGUoKSkgeworICAgICAgICBjYXNlIEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seToKKyAgICAgICAg
ICAgIGZvdW5kVmFsdWVzLmFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEluZGV4ZWREQjo6Q3Vyc29yS2V5QW5kVmFsdWU6Cisg
ICAgICAgICAgICBzaXplRXN0aW1hdGUgKz0gYmFja2luZ1N0b3JlQ3Vyc29yLT52YWx1ZSgpLT5z
aXplKCk7CisgICAgICAgICAgICBmb3VuZFZhbHVlcy5hcHBlbmQoYmFja2luZ1N0b3JlQ3Vyc29y
LT52YWx1ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgc2l6ZUVzdGlt
YXRlICs9IGJhY2tpbmdTdG9yZUN1cnNvci0+a2V5KCktPnNpemVFc3RpbWF0ZSgpOworICAgICAg
ICBzaXplRXN0aW1hdGUgKz0gYmFja2luZ1N0b3JlQ3Vyc29yLT5wcmltYXJ5S2V5KCktPnNpemVF
c3RpbWF0ZSgpOworCisgICAgICAgIGlmIChzaXplRXN0aW1hdGUgPiBtYXhTaXplRXN0aW1hdGUp
CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIWZvdW5kS2V5cy5zaXplKCkp
IHsKKyAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8
U2hhcmVkQnVmZmVyKj4oMCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3BlcmF0
aW9uLmNhbGxiYWNrcygpLT5vblN1Y2Nlc3NXaXRoUHJlZmV0Y2goZm91bmRLZXlzLCBmb3VuZFBy
aW1hcnlLZXlzLCBmb3VuZFZhbHVlcyk7CisgICAgCiAgICAgRU1QVFlfQVNZTkNfQ09NUExFVElP
Tl9DQUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOwogfQogCit2b2lkIElEQlNlcnZlckNvbm5l
Y3Rpb25MZXZlbERCOjpjdXJzb3JQcmVmZXRjaFJlc2V0KElEQkN1cnNvckJhY2tlbmQmIGN1cnNv
ciwgaW50IHVzZWRQcmVmZXRjaGVzKQoreworICAgIElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVs
REIqIGJhY2tpbmdTdG9yZUN1cnNvciA9IGN1cnNvci5pZCgpID8gbV9iYWNraW5nU3RvcmVDdXJz
b3JzLmdldChjdXJzb3IuaWQoKSkgOiAwOworICAgIEFTU0VSVChiYWNraW5nU3RvcmVDdXJzb3Ip
OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2VkUHJlZmV0Y2hlczsgKytpKSB7CisgICAg
ICAgIGJvb2wgb2sgPSBiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oKTsKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKExFVkVMREIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERC
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNv
bm5lY3Rpb25MZXZlbERCLmgKaW5kZXggZDlkZWVlNS4uNjE3NmYyMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9u
TGV2ZWxEQi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuaApAQCAtMzMsNiArMzMsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREI7CiBjbGFz
cyBJREJCYWNraW5nU3RvcmVMZXZlbERCOwogY2xhc3MgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25MZXZlbERCOwogCkBAIC03NSwxMSArNzYsMjEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBjbGVhck9iamVjdFN0b3JlKElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0IENsZWFyT2Jq
ZWN0U3RvcmVPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZU9iamVjdFN0b3JlKElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0IERlbGV0
ZU9iamVjdFN0b3JlT3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spIE9WRVJSSURFOwogICAgIHZpcnR1
YWwgdm9pZCBjaGFuZ2VEYXRhYmFzZVZlcnNpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgY29u
c3QgSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uJiwgc3RkOjpmdW5j
dGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJh
Y2spIE9WRVJSSURFOworCisgICAgLy8gQ3Vyc29yLWxldmVsIG9wZXJhdGlvbnMKKyAgICB2aXJ0
dWFsIHZvaWQgY3Vyc29yQWR2YW5jZShJREJDdXJzb3JCYWNrZW5kJiwgY29uc3QgQ3Vyc29yQWR2
YW5jZU9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2sp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjdXJzb3JJdGVyYXRlKElEQkN1cnNvckJhY2tl
bmQmLCBjb25zdCBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4gY29tcGxldGlvbkNhbGxiYWNrKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY3Vyc29y
UHJlZmV0Y2hJdGVyYXRpb24oSURCQ3Vyc29yQmFja2VuZCYsIGNvbnN0IEN1cnNvclByZWZldGNo
SXRlcmF0aW9uT3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxs
YmFjaykgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGN1cnNvclByZWZldGNoUmVzZXQoSURC
Q3Vyc29yQmFja2VuZCYsIGludCB1c2VkUHJlZmV0Y2hlcykgT1ZFUlJJREU7CisKIHByaXZhdGU6
CiAgICAgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIoSURCQmFja2luZ1N0b3JlTGV2ZWxEQiop
OwogCiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUxldmVsREI+IG1fYmFja2luZ1N0b3JlOwog
ICAgIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2
ZWxEQj4+IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zOworICAgIEhhc2hNYXA8aW50NjRfdCwg
UmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREI+PiBtX2JhY2tpbmdTdG9yZUN1cnNv
cnM7CisKKyAgICBpbnQ2NF90IG1fbmV4dEN1cnNvcklEOwogCiAgICAgYm9vbCBtX2Nsb3NlZDsK
IH07Cg==
</data>
<flag name="review"
          id="240231"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>