<?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>123449</bug_id>
          
          <creation_ts>2013-10-29 10:59:09 -0700</creation_ts>
          <short_desc>IDBTransactionBackend should be cross platform</short_desc>
          <delta_ts>2013-10-29 22:31:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>123451</dependson>
    
    <dependson>123475</dependson>
    
    <dependson>123483</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>alecflett</cc>
    
    <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jsbell</cc>
    
    <cc>rakuco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>944479</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-10-29 10:59:09 -0700</bug_when>
    <thetext>IDBTransactionBackend should be cross platform</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944647</commentid>
    <comment_count>1</comment_count>
      <attachid>215438</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-10-29 15:23:43 -0700</bug_when>
    <thetext>Created attachment 215438
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944652</commentid>
    <comment_count>2</comment_count>
      <attachid>215438</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-10-29 15:41:50 -0700</bug_when>
    <thetext>Comment on attachment 215438
Patch v1 

Patch to the wrong bug.  Sigh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944752</commentid>
    <comment_count>3</comment_count>
      <attachid>215468</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-10-29 21:00:22 -0700</bug_when>
    <thetext>Created attachment 215468
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944760</commentid>
    <comment_count>4</comment_count>
      <attachid>215470</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-10-29 22:01:29 -0700</bug_when>
    <thetext>Created attachment 215470
Patch for landing for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944767</commentid>
    <comment_count>5</comment_count>
      <attachid>215470</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-29 22:31:18 -0700</bug_when>
    <thetext>Comment on attachment 215470
Patch for landing for EWS

Clearing flags on attachment: 215470

Committed r158253: &lt;http://trac.webkit.org/changeset/158253&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944768</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-29 22:31:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215438</attachid>
            <date>2013-10-29 15:23:43 -0700</date>
            <delta_ts>2013-10-29 21:00:22 -0700</delta_ts>
            <desc>Patch v1 </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>45691</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmNjc4MTEwLi5hMDdhMmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTYg
QEAKIDIwMTMtMTAtMjkgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIE1vdmUgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiB0byBnZW5lcmljIElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM0NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgaXQncyB1c2luZyBJREJCYWNraW5nU3Rv
cmVMZXZlbERCOjpUcmFuc2FjdGlvbiwgd2hpY2ggaGluZGVycyB0aGUgZ29hbCBvZjoKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzQ0OSAtIElEQlRy
YW5zYWN0aW9uQmFja2VuZCBzaG91bGQgYmUgY3Jvc3MgcGxhdGZvcm0KKworICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZUludGVyZmFjZS5oOgorCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhXcml0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCSW5kZXhXcml0ZXI6OndyaXRlSW5kZXhLZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQklu
ZGV4V3JpdGVyOjp2ZXJpZnlJbmRleEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhX
cml0ZXI6OmFkZGluZ0tleUFsbG93ZWQpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkluZGV4V3JpdGVyLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJC
YWNraW5nU3RvcmVMZXZlbERCOjp1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6dXBkYXRlSURCRGF0YWJhc2VNZXRh
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmVMZXZlbERCOjpjcmVhdGVP
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmVMZXZlbERCOjpk
ZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmVMZXZl
bERCOjpnZXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlTGV2ZWxE
Qjo6cHV0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZUxldmVsREI6
OmNsZWFyT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlTGV2
ZWxEQjo6ZGVsZXRlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZUxl
dmVsREI6OmdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVt
YmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZUxldmVsREI6OmtleUV4aXN0
c0luT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlTGV2ZWxE
Qjo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlTGV2ZWxE
Qjo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlTGV2ZWxE
Qjo6cHV0SW5kZXhEYXRhRm9yUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdT
dG9yZUxldmVsREI6OmZpbmRLZXlJbkluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tp
bmdTdG9yZUxldmVsREI6OmdldFByaW1hcnlLZXlWaWFJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmVMZXZlbERCOjprZXlFeGlzdHNJbkluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkJhY2tpbmdTdG9yZUxldmVsREI6Om9wZW5PYmplY3RTdG9yZUN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmVMZXZlbERCOjpvcGVuT2JqZWN0U3RvcmVL
ZXlDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6b3Bl
bkluZGV4S2V5Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZUxldmVs
REI6Om9wZW5JbmRleEN1cnNvcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxk
Yi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6SURCVHJhbnNhY3Rpb25CYWNrZW5k
TGV2ZWxEQik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
OjphYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
Ojpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
Qjo6dGFza1RpbWVyRmlyZWQpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oOgorCisyMDEzLTEwLTI5ICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKwogICAgICAgICBHZXQgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQk9wZXJhdGlvbnMgKmFsbW9zdCogcmVhZHkgdG8gZ28gY3Jvc3MgcGxhdGZvcm0u
CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM0NTEK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2lu
Z1N0b3JlSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJC
YWNraW5nU3RvcmVJbnRlcmZhY2UuaAppbmRleCA1MWYzZTk5Li4wZjhhODJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmVJbnRlcmZh
Y2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3Rv
cmVJbnRlcmZhY2UuaApAQCAtNTMsNiArNTMsMTEgQEAgcHVibGljOgogICAgIGNsYXNzIFRyYW5z
YWN0aW9uIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgflRyYW5zYWN0aW9uKCkgeyB9
CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGJlZ2luKCkgPSAwOworICAgICAgICB2aXJ0dWFsIGJv
b2wgY29tbWl0KCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2soKSA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCByZXNldFRyYW5zYWN0aW9uKCkgPSAwOwogICAgIH07CiAKICAg
ICBjbGFzcyBDdXJzb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxDdXJzb3I+IHsKQEAgLTc0LDM3ICs3
OSwzOSBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgSURCUmVjb3JkSWRlbnRpZmll
ciYgcmVjb3JkSWRlbnRpZmllcigpIGNvbnN0ID0gMDsKICAgICB9OwogCisgICAgdmlydHVhbCBz
dGQ6OnVuaXF1ZV9wdHI8VHJhbnNhY3Rpb24+IGNyZWF0ZUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCkgPSAwOworCiAgICAgdmlydHVhbCBib29sIGdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3Qg
U3RyaW5nJiBuYW1lLCBJREJEYXRhYmFzZU1ldGFkYXRhKiwgYm9vbCYgZm91bmQpID0gMDsKICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgSURCRGF0
YWJhc2VNZXRhZGF0YTo6T2JqZWN0U3RvcmVNYXAqIG9iamVjdFN0b3JlcykgPSAwOwogICAgIHZp
cnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lk
KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2lu
Z1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWZQdHI8SURCUmVjb3JkSWRlbnRpZmll
cj4mIGZvdW5kSURCUmVjb3JkSWRlbnRpZmllcikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBrZXlF
eGlzdHNJbk9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24m
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
JiwgUmVmUHRyPElEQlJlY29yZElkZW50aWZpZXI+JiBmb3VuZElEQlJlY29yZElkZW50aWZpZXIp
ID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoSURCQmFja2lu
Z1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IElE
QlJlY29yZElkZW50aWZpZXIqKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5k
ZXgoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktl
eSYsIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXksIGJvb2wmIGV4aXN0cykgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoSURCQmFja2luZ1N0b3JlSW50
ZXJmYWNlOjpUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IElEQlJlY29yZElk
ZW50aWZpZXIqKSA9IDA7CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoSURCQmFj
a2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIFJlZlB0
cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXksIGJvb2wmIGV4aXN0cykgPSAwOwogCiAgICAgdmly
dHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSkgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oSURCQmFja2luZ1N0b3JlSW50
ZXJmYWNlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbikg
PSAwOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oSURCQmFj
a2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiYsIGludDY0X3Qgcm93SWQsIGludDY0X3Qg
aW50VmVyc2lvbikgPSAwOwogCi0gICAgdmlydHVhbCBib29sIGdldFJlY29yZChJREJCYWNraW5n
U3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFZlY3RvcjxjaGFyPiYgcmVjb3JkKSA9IDA7
Ci0gICAgdmlydHVhbCBib29sIHB1dFJlY29yZChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQktleSYsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgSURCUmVjb3JkSWRl
bnRpZmllciopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUmVjb3JkKElEQkJhY2tpbmdT
dG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCUmVjb3JkSWRlbnRpZmllciYpID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgZ2V0UmVjb3JkKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24m
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
JiwgVmVjdG9yPGNoYXI+JiByZWNvcmQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcHV0UmVjb3Jk
KElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IHZhbHVlLCBJREJSZWNvcmRJZGVudGlmaWVyKikgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBkZWxldGVSZWNvcmQoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiYs
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJSZWNv
cmRJZGVudGlmaWVyJikgPSAwOwogCi0gICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3Jl
KElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJL
ZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0
ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCBjbGVhck9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6
OlRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVu
dCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVPYmplY3RTdG9yZShJREJCYWNraW5nU3Rv
cmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY2xlYXJPYmplY3RTdG9yZShJREJC
YWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJbmRl
eChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50
cnkpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXgoSURCQmFja2luZ1N0b3JlSW50
ZXJmYWNlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5k
ZXgoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVu
dHJ5KSA9IDA7CisgICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4KElEQkJhY2tpbmdTdG9yZUlu
dGVyZmFjZTo6VHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKSA9IDA7CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUtleUN1cnNv
cihJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSW5kZXhlZERC
OjpDdXJzb3JEaXJlY3Rpb24pID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlSW50ZXJmYWNlOjpDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUN1cnNvcihJREJCYWNraW5n
U3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSW5kZXhlZERCOjpDdXJzb3JEaXJl
Y3Rpb24pID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJm
YWNlOjpDdXJzb3I+IG9wZW5JbmRleEtleUN1cnNvcihJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6
OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJbmRleGVkREI6OkN1cnNvckRp
cmVjdGlvbikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVJbnRl
cmZhY2U6OkN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6
VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIEluZGV4ZWREQjo6Q3Vyc29yRGly
ZWN0aW9uKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUludGVy
ZmFjZTo6Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlSW50
ZXJmYWNlOjpUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKSA9
IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6Q3Vy
c29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFu
c2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBJREJLZXlSYW5nZSosIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKSA9IDA7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6Q3Vyc29yPiBvcGVuSW5k
ZXhLZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiYsIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleVJhbmdlKiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24pID0gMDsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpDdXJzb3I+IG9wZW5J
bmRleEN1cnNvcihJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uJiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5UmFuZ2UqLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbikgPSAwOwogCi0gICAg
dmlydHVhbCBib29sIGdldFByaW1hcnlLZXlWaWFJbmRleChJREJCYWNraW5nU3RvcmVJbnRlcmZh
Y2U6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgUmVmUHRyPElEQktleT4mIHByaW1h
cnlLZXkpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJpbWFyeUtleVZpYUluZGV4KElEQkJh
Y2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBSZWZQ
dHI8SURCS2V5PiYgcHJpbWFyeUtleSkgPSAwOwogCi0gICAgdmlydHVhbCBib29sIGdldEtleUdl
bmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90JiBr
ZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIG1heWJlVXBk
YXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgbmV3U3RhdGUsIGJvb2wgY2hlY2tDdXJyZW50KSA9IDA7CisgICAgdmlydHVhbCBib29s
IGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpU
cmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90JiBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKSA9IDA7CisgICAgdmlydHVhbCBib29s
IG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmVJbnRl
cmZhY2U6OlRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgbmV3U3RhdGUsIGJvb2wgY2hlY2tDdXJyZW50KSA9IDA7CiAKICAgICB2
aXJ0dWFsIGJvb2wgbWFrZUluZGV4V3JpdGVycyhJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UmLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBJ
REJLZXkmIHByaW1hcnlLZXksIGJvb2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8aW50
NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIFZlY3RvcjxSZWZQdHI8
SURCSW5kZXhXcml0ZXI+PiYgaW5kZXhXcml0ZXJzLCBTdHJpbmcqIGVycm9yTWVzc2FnZSwgYm9v
bCYgY29tcGxldGVkKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkluZGV4V3JpdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4V3JpdGVyLmNwcAppbmRleCBjZDI3ZWExLi4yNTc4OTRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleFdyaXRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhXcml0ZXIuY3Bw
CkBAIC00MCw3ICs0MCw3IEBAIElEQkluZGV4V3JpdGVyOjpJREJJbmRleFdyaXRlcihjb25zdCBJ
REJJbmRleE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgSW5kZXhLZXlzCiB7CiB9CiAKLXZvaWQg
SURCSW5kZXhXcml0ZXI6OndyaXRlSW5kZXhLZXlzKGNvbnN0IElEQlJlY29yZElkZW50aWZpZXIq
IHJlY29yZElkZW50aWZpZXIsIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSYgYmFja2luZ1N0b3Jl
LCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIGNvbnN0Cit2b2lkIElEQklu
ZGV4V3JpdGVyOjp3cml0ZUluZGV4S2V5cyhjb25zdCBJREJSZWNvcmRJZGVudGlmaWVyKiByZWNv
cmRJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UmIGJhY2tpbmdTdG9yZSwgSURC
QmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBjb25zdAogewogICAgIEFTU0VSVChy
ZWNvcmRJZGVudGlmaWVyKTsKICAgICBpbnQ2NF90IGluZGV4SWQgPSBtX2luZGV4TWV0YWRhdGEu
aWQ7CkBAIC01MSw3ICs1MSw3IEBAIHZvaWQgSURCSW5kZXhXcml0ZXI6OndyaXRlSW5kZXhLZXlz
KGNvbnN0IElEQlJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIsCiAgICAgfQogfQog
Ci1ib29sIElEQkluZGV4V3JpdGVyOjp2ZXJpZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3JlSW50
ZXJmYWNlJiBiYWNraW5nU3RvcmUsIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBib29sJiBjYW5BZGRLZXlzLCBjb25zdCBJREJLZXkqIHByaW1h
cnlLZXksIFN0cmluZyogZXJyb3JNZXNzYWdlKSBjb25zdAorYm9vbCBJREJJbmRleFdyaXRlcjo6
dmVyaWZ5SW5kZXhLZXlzKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSYgYmFja2luZ1N0b3JlLCBJ
REJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgYm9v
bCYgY2FuQWRkS2V5cywgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBTdHJpbmcqIGVycm9yTWVz
c2FnZSkgY29uc3QKIHsKICAgICBjYW5BZGRLZXlzID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7ICsraSkgewpAQCAtNjgsNyArNjgsNyBAQCBi
b29sIElEQkluZGV4V3JpdGVyOjp2ZXJpZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3JlSW50ZXJm
YWNlJiBiYWNraW5nU3RvcmUsIElEQgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElEQklu
ZGV4V3JpdGVyOjphZGRpbmdLZXlBbGxvd2VkKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSYgYmFj
a2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5
LCBib29sJiBhbGxvd2VkKSBjb25zdAorYm9vbCBJREJJbmRleFdyaXRlcjo6YWRkaW5nS2V5QWxs
b3dlZChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UmIGJhY2tpbmdTdG9yZSwgSURCQmFja2luZ1N0
b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSog
aW5kZXhLZXksIGNvbnN0IElEQktleSogcHJpbWFyeUtleSwgYm9vbCYgYWxsb3dlZCkgY29uc3QK
IHsKICAgICBhbGxvd2VkID0gZmFsc2U7CiAgICAgaWYgKCFtX2luZGV4TWV0YWRhdGEudW5pcXVl
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRl
eFdyaXRlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhXcml0
ZXIuaAppbmRleCBmOTljNjcwLi41ZjAyZjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleFdyaXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4V3JpdGVyLmgKQEAgLTQ1LDE0ICs0NSwxNCBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCSW5kZXhXcml0ZXIoaW5kZXhNZXRh
ZGF0YSwgaW5kZXhLZXlzKSk7CiAgICAgfQogCi0gICAgYm9vbCB2ZXJpZnlJbmRleEtleXMoSURC
QmFja2luZ1N0b3JlSW50ZXJmYWNlJiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGJvb2wmIGNhbkFkZEtleXMsIGNvbnN0IElEQktleSogcHJpbWFyeUtleSA9IDAs
IFN0cmluZyogZXJyb3JNZXNzYWdlID0gMCkgY29uc3QgV0FSTl9VTlVTRURfUkVUVVJOOworICAg
IGJvb2wgdmVyaWZ5SW5kZXhLZXlzKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSYsIElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBib29sJiBjYW5BZGRLZXlzLCBjb25z
dCBJREJLZXkqIHByaW1hcnlLZXkgPSAwLCBTdHJpbmcqIGVycm9yTWVzc2FnZSA9IDApIGNvbnN0
IFdBUk5fVU5VU0VEX1JFVFVSTjsKIAotICAgIHZvaWQgd3JpdGVJbmRleEtleXMoY29uc3QgSURC
UmVjb3JkSWRlbnRpZmllciosIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSYsIElEQkJhY2tpbmdT
dG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkgY29uc3Q7CisgICAgdm9pZCB3cml0ZUluZGV4S2V5cyhjb25zdCBJREJS
ZWNvcmRJZGVudGlmaWVyKiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlJiwgSURCQmFja2luZ1N0
b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBJREJJbmRleFdyaXRlcihjb25z
dCBJREJJbmRleE1ldGFkYXRhJiwgY29uc3QgSW5kZXhLZXlzJik7CiAKLSAgICBib29sIGFkZGlu
Z0tleUFsbG93ZWQoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlJiwgSURCQmFja2luZ1N0b3JlSW50
ZXJmYWNlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSogaW5kZXhLZXksIGNvbnN0IElE
QktleSogcHJpbWFyeUtleSwgYm9vbCYgYWxsb3dlZCkgY29uc3QgV0FSTl9VTlVTRURfUkVUVVJO
OworICAgIGJvb2wgYWRkaW5nS2V5QWxsb3dlZChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UmLCBJ
REJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5KiBp
bmRleEtleSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBib29sJiBhbGxvd2VkKSBjb25zdCBX
QVJOX1VOVVNFRF9SRVRVUk47CiAKICAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhN
ZXRhZGF0YTsKICAgICBJbmRleEtleXMgbV9pbmRleEtleXM7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZS5oCmluZGV4IGRkNzNjZGYuLjUyNDY2ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZS5oCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgYWRkUHJlZW1wdGl2ZUV2ZW50KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0
ZVByZWVtcHRpdmVFdmVudCgpID0gMDsKIAotICAgIHZpcnR1YWwgSURCQmFja2luZ1N0b3JlSW50
ZXJmYWNlOjpUcmFuc2FjdGlvbiogYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSA9IDA7CisgICAg
dmlydHVhbCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uJiBiYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpID0gMDsKICAgICB2aXJ0dWFsIElEQkRhdGFiYXNlQmFja2VuZEludGVy
ZmFjZSYgZGF0YWJhc2UoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZT4gY3JlYXRlQ3Vyc29yQmFja2VuZChJREJCYWNraW5nU3Rv
cmVJbnRlcmZhY2U6OkN1cnNvciYsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJh
Y2tpbmdTdG9yZUxldmVsREIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmNwcAppbmRleCBjZmJmMjcxLi5iYmQ2ODQ5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lE
QkJhY2tpbmdTdG9yZUxldmVsREIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5jcHAKQEAgLTU5Miw3ICs1OTIs
NyBAQCBib29sIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURh
dGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IElEQkJhY2tpbmdTdG9yZUxldmVsREI6OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihJREJC
YWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBy
b3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKQorYm9vbCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjp1
cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24sIGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbikK
IHsKICAgICBpZiAoaW50VmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNp
b24pCiAgICAgICAgIGludFZlcnNpb24gPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0SW50
VmVyc2lvbjsKQEAgLTYwMSw3ICs2MDEsNyBAQCBib29sIElEQkJhY2tpbmdTdG9yZUxldmVsREI6
OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihJREJCYWNraW5nU3RvcmVJbnRlcmZhYwogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OnVwZGF0ZUlE
QkRhdGFiYXNlTWV0YURhdGEoSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6VHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uLCBpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCitib29sIElE
QkJhY2tpbmdTdG9yZUxldmVsREI6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoSURCQmFja2lu
Z1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGludDY0X3Qgcm93SWQs
IGNvbnN0IFN0cmluZyYgdmVyc2lvbikKIHsKICAgICBwdXRTdHJpbmcoVHJhbnNhY3Rpb246Omxl
dmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pLCBEYXRhYmFzZU1ldGFEYXRhS2V5Ojpl
bmNvZGUocm93SWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJWZXJzaW9uKSwgdmVyc2lvbik7
CiAgICAgcmV0dXJuIHRydWU7CkBAIC03NzQsNyArNzc0LDcgQEAgV0FSTl9VTlVTRURfUkVUVVJO
IHN0YXRpYyBib29sIHNldE1heE9iamVjdFN0b3JlSWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJCYWNraW5nU3RvcmVMZXZlbERC
OjpjcmVhdGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRv
SW5jcmVtZW50KQorYm9vbCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpjcmVhdGVPYmplY3RTdG9y
ZShJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQogewogICAg
IExPRyhTdG9yYWdlQVBJLCAiSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6Y3JlYXRlT2JqZWN0U3Rv
cmUiKTsKICAgICBpZiAoIUtleVByZWZpeDo6dmFsaWRJZHMoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCkpCkBAIC04MDUsNyArODA1LDcgQEAgYm9vbCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpj
cmVhdGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWMKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpkZWxldGVPYmpl
Y3RTdG9yZShJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCitib29sIElEQkJh
Y2tpbmdTdG9yZUxldmVsREI6OmRlbGV0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZUludGVy
ZmFjZTo6VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCkKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIklEQkJhY2tpbmdTdG9y
ZUxldmVsREI6OmRlbGV0ZU9iamVjdFN0b3JlIik7CiAgICAgaWYgKCFLZXlQcmVmaXg6OnZhbGlk
SWRzKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKQpAQCAtODM0LDcgKzgzNCw3IEBAIGJvb2wg
SURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6ZGVsZXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlOjpUcmFuc2FjCiAgICAgcmV0dXJuIGNsZWFyT2JqZWN0U3RvcmUodHJhbnNhY3Rp
b24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOwogfQogCi1ib29sIElEQkJhY2tpbmdTdG9y
ZUxldmVsREI6OmdldFJlY29yZChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQktleSYga2V5LCBWZWN0b3I8Y2hhcj4mIHJlY29yZCkKK2Jvb2wgSURCQmFja2lu
Z1N0b3JlTGV2ZWxEQjo6Z2V0UmVjb3JkKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNh
Y3Rpb24mIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgSURCS2V5JiBrZXksIFZlY3RvcjxjaGFyPiYgcmVjb3JkKQogewogICAgIExP
RyhTdG9yYWdlQVBJLCAiSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6Z2V0UmVjb3JkIik7CiAgICAg
aWYgKCFLZXlQcmVmaXg6OnZhbGlkSWRzKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKQpAQCAt
ODkyLDcgKzg5Miw3IEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBnZXROZXdWZXJz
aW9uTnVtYmVyKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3RpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6cHV0UmVjb3JkKElEQkJhY2tpbmdT
dG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiBwcnBWYWx1ZSwgSURCUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRp
ZmllcikKK2Jvb2wgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6cHV0UmVjb3JkKElEQkJhY2tpbmdT
dG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiBwcnBWYWx1ZSwgSURCUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRp
ZmllcikKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIklEQkJhY2tpbmdTdG9yZUxldmVsREI6OnB1
dFJlY29yZCIpOwogICAgIGlmICghS2V5UHJlZml4Ojp2YWxpZElkcyhkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkKSkKQEAgLTkyMiw3ICs5MjIsNyBAQCBib29sIElEQkJhY2tpbmdTdG9yZUxldmVs
REI6OnB1dFJlY29yZChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiB0cgog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OmNsZWFy
T2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQorYm9vbCBJ
REJCYWNraW5nU3RvcmVMZXZlbERCOjpjbGVhck9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZUlu
dGVyZmFjZTo6VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIklEQkJhY2tpbmdT
dG9yZUxldmVsREI6OmNsZWFyT2JqZWN0U3RvcmUiKTsKICAgICBpZiAoIUtleVByZWZpeDo6dmFs
aWRJZHMoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpCkBAIC05MzUsNyArOTM1LDcgQEAgYm9v
bCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpjbGVhck9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9y
ZUludGVyZmFjZTo6VHJhbnNhY3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJCYWNr
aW5nU3RvcmVMZXZlbERCOjpkZWxldGVSZWNvcmQoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJSZWNvcmRJZGVudGlmaWVyJiByZWNvcmRJZGVudGlmaWVyKQor
Ym9vbCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpkZWxldGVSZWNvcmQoSURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlOjpUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJSZWNvcmRJZGVudGlmaWVyJiByZWNvcmRJ
ZGVudGlmaWVyKQogewogICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQmFja2luZ1N0b3JlTGV2ZWxE
Qjo6ZGVsZXRlUmVjb3JkIik7CiAKQEAgLTk1Miw3ICs5NTIsNyBAQCBib29sIElEQkJhY2tpbmdT
dG9yZUxldmVsREI6OmRlbGV0ZVJlY29yZChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5z
YWN0aW9uKgogfQogCiAKLWJvb2wgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6Z2V0S2V5R2VuZXJh
dG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QmIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpCitib29sIElEQkJhY2tpbmdTdG9yZUxl
dmVsREI6OmdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlSW50ZXJm
YWNlOjpUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90JiBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKQogewog
ICAgIGlmICghS2V5UHJlZml4Ojp2YWxpZElkcyhkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTAwMiw3ICsxMDAyLDcgQEAgYm9vbCBJREJCYWNr
aW5nU3RvcmVMZXZlbERCOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdT
dG9yZUludGVyZmEKICAgICByZXR1cm4ga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcjsKIH0KIAot
Ym9vbCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjptYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJl
bnROdW1iZXIoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5l
d051bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpCitib29sIElEQkJhY2tpbmdTdG9yZUxldmVsREI6
Om1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmVJbnRl
cmZhY2U6OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVudCkK
IHsKICAgICBpZiAoIUtleVByZWZpeDo6dmFsaWRJZHMoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwMjIsNyArMTAyMiw3IEBAIGJvb2wgSURC
QmFja2luZ1N0b3JlTGV2ZWxEQjo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
KElEQkJhY2tpbmdTdG9yCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSURCQmFja2luZ1N0
b3JlTGV2ZWxEQjo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmVJbnRlcmZh
Y2U6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBSZWZQdHI8SURCUmVjb3JkSWRlbnRp
Zmllcj4mIGZvdW5kSURCUmVjb3JkSWRlbnRpZmllcikKK2Jvb2wgSURCQmFja2luZ1N0b3JlTGV2
ZWxEQjo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBSZWZQdHI8SURCUmVjb3JkSWRlbnRpZmllcj4m
IGZvdW5kSURCUmVjb3JkSWRlbnRpZmllcikKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIklEQkJh
Y2tpbmdTdG9yZUxldmVsREI6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUiKTsKICAgICBpZiAoIUtl
eVByZWZpeDo6dmFsaWRJZHMoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpCkBAIC0xMTQzLDcg
KzExNDMsNyBAQCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RhdGljIGJvb2wgc2V0TWF4SW5kZXhJZChM
ZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbgogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OmNyZWF0ZUluZGV4KElEQkJhY2tpbmdTdG9y
ZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0
aUVudHJ5KQorYm9vbCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpjcmVhdGVJbmRleChJREJCYWNr
aW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBib29s
IGlzTXVsdGlFbnRyeSkKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIklEQkJhY2tpbmdTdG9yZUxl
dmVsREI6OmNyZWF0ZUluZGV4Iik7CiAgICAgaWYgKCFLZXlQcmVmaXg6OnZhbGlkSWRzKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpKQpAQCAtMTE2NCw3ICsxMTY0LDcgQEAgYm9v
bCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpjcmVhdGVJbmRleChJREJCYWNraW5nU3RvcmVJbnRl
cmZhY2U6OlRyYW5zYWN0aW9uKgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElEQkJhY2tp
bmdTdG9yZUxldmVsREI6OmRlbGV0ZUluZGV4KElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQorYm9vbCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpk
ZWxldGVJbmRleChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCkKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIklEQkJhY2tpbmdTdG9yZUxldmVsREI6
OmRlbGV0ZUluZGV4Iik7CiAgICAgaWYgKCFLZXlQcmVmaXg6OnZhbGlkSWRzKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIGluZGV4SWQpKQpAQCAtMTE4MSw3ICsxMTgxLDcgQEAgYm9vbCBJREJC
YWNraW5nU3RvcmVMZXZlbERCOjpkZWxldGVJbmRleChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6
OlRyYW5zYWN0aW9uKgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElEQkJhY2tpbmdTdG9y
ZUxldmVsREI6OnB1dEluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6
OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IElE
QlJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCitib29sIElEQkJhY2tpbmdTdG9y
ZUxldmVsREI6OnB1dEluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6
OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IElE
QlJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCiB7CiAgICAgTE9HKFN0b3JhZ2VB
UEksICJJREJCYWNraW5nU3RvcmVMZXZlbERCOjpwdXRJbmRleERhdGFGb3JSZWNvcmQiKTsKICAg
ICBBU1NFUlQoa2V5LmlzVmFsaWQoKSk7CkBAIC0xMjQ1LDcgKzEyNDUsNyBAQCBzdGF0aWMgYm9v
bCB2ZXJzaW9uRXhpc3RzKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElEQkJhY2tpbmdTdG9y
ZUxldmVsREI6OmZpbmRLZXlJbkluZGV4KElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgVmVjdG9yPGNoYXI+JiBm
b3VuZEVuY29kZWRQcmltYXJ5S2V5LCBib29sJiBmb3VuZCkKK2Jvb2wgSURCQmFja2luZ1N0b3Jl
TGV2ZWxEQjo6ZmluZEtleUluSW5kZXgoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5LCBWZWN0b3I8Y2hhcj4mIGZv
dW5kRW5jb2RlZFByaW1hcnlLZXksIGJvb2wmIGZvdW5kKQogewogICAgIExPRyhTdG9yYWdlQVBJ
LCAiSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6ZmluZEtleUluSW5kZXgiKTsKICAgICBBU1NFUlQo
S2V5UHJlZml4Ojp2YWxpZElkcyhkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKSk7
CkBAIC0xMjg3LDcgKzEyODcsNyBAQCBib29sIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OmZpbmRL
ZXlJbkluZGV4KElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3RpbwogICAgIH0KIH0K
IAotYm9vbCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgoSURC
QmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleSYga2V5LCBSZWZQdHI8SURCS2V5PiYgcHJpbWFyeUtleSkKK2Jvb2wgSURCQmFja2lu
Z1N0b3JlTGV2ZWxEQjo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KElEQkJhY2tpbmdTdG9yZUludGVy
ZmFjZTo6VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgUmVm
UHRyPElEQktleT4mIHByaW1hcnlLZXkpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJCYWNr
aW5nU3RvcmVMZXZlbERCOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgiKTsKICAgICBpZiAoIUtleVBy
ZWZpeDo6dmFsaWRJZHMoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCkpCkBAIC0x
MzA4LDcgKzEzMDgsNyBAQCBib29sIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OmdldFByaW1hcnlL
ZXlWaWFJbmRleChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYQogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OmtleUV4aXN0c0luSW5kZXgoSURC
QmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXksIGJvb2wm
IGV4aXN0cykKK2Jvb2wgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6a2V5RXhpc3RzSW5JbmRleChJ
REJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSwgYm9v
bCYgZXhpc3RzKQogewogICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQmFja2luZ1N0b3JlTGV2ZWxE
Qjo6a2V5RXhpc3RzSW5JbmRleCIpOwogICAgIGlmICghS2V5UHJlZml4Ojp2YWxpZElkcyhkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKSkKQEAgLTE5NjQsNyArMTk2NCw3IEBAIHN0
YXRpYyBib29sIGluZGV4Q3Vyc29yT3B0aW9ucyhMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IGRhdGFiYXNlCiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KLVBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpDdXJzb3I+IElEQkJhY2tpbmdTdG9yZUxldmVsREI6
Om9wZW5PYmplY3RTdG9yZUN1cnNvcihJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24g
ZGlyZWN0aW9uKQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OkN1cnNvcj4g
SURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yKElEQkJhY2tpbmdT
dG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJbmRl
eGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24pCiAKIHsKICAgICBMT0coU3RvcmFnZUFQ
SSwgIklEQkJhY2tpbmdTdG9yZUxldmVsREI6Om9wZW5PYmplY3RTdG9yZUN1cnNvciIpOwpAQCAt
MTk3OSw3ICsxOTc5LDcgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OkN1
cnNvcj4gSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6b3Blbk9iamVjdFMKICAgICByZXR1cm4gY3Vy
c29yLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6
OkN1cnNvcj4gSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29y
KElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2Uq
IHJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24pCitQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6Q3Vyc29yPiBJREJCYWNraW5nU3RvcmVMZXZlbERC
OjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0
aW9uIGRpcmVjdGlvbikKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIklEQkJhY2tpbmdTdG9yZUxl
dmVsREI6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvciIpOwogICAgIExldmVsREJUcmFuc2FjdGlv
biogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6VHJhbnNhY3Rp
b246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwpAQCAtMTk5Myw3ICsxOTkz
LDcgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OkN1cnNvcj4gSURCQmFj
a2luZ1N0b3JlTGV2ZWxEQjo6b3Blbk9iamVjdFMKICAgICByZXR1cm4gY3Vyc29yLnJlbGVhc2Uo
KTsKIH0KIAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OkN1cnNvcj4gSURC
QmFja2luZ1N0b3JlTGV2ZWxEQjo6b3BlbkluZGV4S2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZUlu
dGVyZmFjZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSog
cmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbikKK1Bhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpDdXJzb3I+IElEQkJhY2tpbmdTdG9yZUxldmVsREI6
Om9wZW5JbmRleEtleUN1cnNvcihJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJbmRleGVkREI6OkN1
cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJCYWNr
aW5nU3RvcmVMZXZlbERCOjpvcGVuSW5kZXhLZXlDdXJzb3IiKTsKICAgICBMZXZlbERCVHJhbnNh
Y3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZUxldmVsREI6OlRyYW5z
YWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKQEAgLTIwMDcsNyAr
MjAwNyw3IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpDdXJzb3I+IElE
QkJhY2tpbmdTdG9yZUxldmVsREI6Om9wZW5JbmRleEtlCiAgICAgcmV0dXJuIGN1cnNvci5yZWxl
YXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpDdXJzb3I+
IElEQkJhY2tpbmdTdG9yZUxldmVsREI6Om9wZW5JbmRleEN1cnNvcihJREJCYWNraW5nU3RvcmVJ
bnRlcmZhY2U6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2Uq
IHJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24pCitQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6Q3Vyc29yPiBJREJCYWNraW5nU3RvcmVMZXZlbERC
OjpvcGVuSW5kZXhDdXJzb3IoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiYg
dHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSW5kZXhlZERCOjpDdXJz
b3JEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQmFja2lu
Z1N0b3JlTGV2ZWxEQjo6b3BlbkluZGV4Q3Vyc29yIik7CiAgICAgTGV2ZWxEQlRyYW5zYWN0aW9u
KiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpUcmFuc2FjdGlv
bjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVs
REIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2lu
Z1N0b3JlTGV2ZWxEQi5oCmluZGV4IDI5YmFjMDIuLmUwY2U1MjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxE
Qi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFj
a2luZ1N0b3JlTGV2ZWxEQi5oCkBAIC02NywzMCArNjcsMzIgQEAgcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUxldmVsREI+IG9wZW5Jbk1lbW9yeShjb25zdCBT
dHJpbmcmIGlkZW50aWZpZXIsIExldmVsREJGYWN0b3J5Kik7CiAgICAgV2Vha1B0cjxJREJCYWNr
aW5nU3RvcmVMZXZlbERCPiBjcmVhdGVXZWFrUHRyKCkgeyByZXR1cm4gbV93ZWFrRmFjdG9yeS5j
cmVhdGVXZWFrUHRyKCk7IH0KIAorICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24+IGNyZWF0ZUJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCk7CisKICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IGdldERhdGFiYXNlTmFtZXMoKTsK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5h
bWUsIElEQkRhdGFiYXNlTWV0YWRhdGEqLCBib29sJiBzdWNjZXNzKSBPVkVSUklERSBXQVJOX1VO
VVNFRF9SRVRVUk47CiAgICAgdmlydHVhbCBib29sIGNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QgaW50VmVy
c2lvbiwgaW50NjRfdCYgcm93SWQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJ
REJEYXRhYmFzZU1ldGFEYXRhKElEQkJhY2tpbmdTdG9yZUxldmVsREI6OlRyYW5zYWN0aW9uKiwg
aW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKLSAgICB2aXJ0dWFsIGJvb2wg
dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJh
bnNhY3Rpb24qLCBpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKElEQkJhY2tpbmdTdG9y
ZUludGVyZmFjZTo6VHJhbnNhY3Rpb24mLCBpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZl
cnNpb24pOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oSURC
QmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiYsIGludDY0X3Qgcm93SWQsIGludDY0
X3QgaW50VmVyc2lvbikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNl
KGNvbnN0IFN0cmluZyYgbmFtZSkgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T2Jq
ZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgSURCRGF0YWJhc2VNZXRhZGF0YTo6T2JqZWN0
U3RvcmVNYXAqKSBPVkVSUklERSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgdmlydHVhbCBib29s
IGNyZWF0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50KSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlSW50ZXJm
YWNlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKSBPVkVSUklERSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0
UmVjb3JkKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgVmVjdG9yPGNo
YXI+JiByZWNvcmQpIE9WRVJSSURFIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIGJv
b2wgcHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBJREJSZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJ
REUgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIHZpcnR1YWwgYm9vbCBjbGVhck9iamVjdFN0b3Jl
KElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgV0FSTl9VTlVTRURfUkVUVVJOOwot
ICAgIHZpcnR1YWwgYm9vbCBkZWxldGVSZWNvcmQoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBJREJSZWNvcmRJZGVudGlmaWVyJikgT1ZFUlJJREUgV0FSTl9VTlVTRURfUkVUVVJOOwot
ICAgIHZpcnR1YWwgYm9vbCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdT
dG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCYgY3VycmVudE51bWJlcikgT1ZFUlJJREUgV0FSTl9VTlVT
RURfUkVUVVJOOwotICAgIHZpcnR1YWwgYm9vbCBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJl
bnROdW1iZXIoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld1N0YXRlLCBib29s
IGNoZWNrQ3VycmVudCkgT1ZFUlJJREUgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIHZpcnR1YWwg
Ym9vbCBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJh
bnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgSURCS2V5JiwgUmVmUHRyPElEQlJlY29yZElkZW50aWZpZXI+JiBmb3VuZElEQlJlY29yZElk
ZW50aWZpZXIpIE9WRVJSSURFIFdBUk5fVU5VU0VEX1JFVFVSTjsKLQotICAgIHZpcnR1YWwgYm9v
bCBjcmVhdGVJbmRleChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBpc1VuaXF1ZSwgYm9v
bCBpc011bHRpRW50cnkpIE9WRVJSSURFIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFs
IGJvb2wgZGVsZXRlSW5kZXgoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQpIE9WRVJSSURFIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0SW5k
ZXhEYXRhRm9yUmVjb3JkKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXkmLCBjb25zdCBJREJSZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgV0FS
Tl9VTlVTRURfUkVUVVJOOwotICAgIHZpcnR1YWwgYm9vbCBnZXRQcmltYXJ5S2V5VmlhSW5kZXgo
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYs
IFJlZlB0cjxJREJLZXk+JiBwcmltYXJ5S2V5KSBPVkVSUklERSBXQVJOX1VOVVNFRF9SRVRVUk47
Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0b3JlSW50ZXJm
YWNlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJL
ZXk+JiBmb3VuZFByaW1hcnlLZXksIGJvb2wmIGV4aXN0cykgT1ZFUlJJREUgV0FSTl9VTlVTRURf
UkVUVVJOOworICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShJREJCYWNraW5nU3Rv
cmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wg
YXV0b0luY3JlbWVudCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGRlbGV0ZU9iamVjdFN0
b3JlKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgV0FSTl9VTlVTRURfUkVUVVJO
OworCisgICAgdmlydHVhbCBib29sIGdldFJlY29yZChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6
OlRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQktleSYsIFZlY3RvcjxjaGFyPiYgcmVjb3JkKSBPVkVSUklERSBXQVJOX1VOVVNF
RF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIHB1dFJlY29yZChJREJCYWNraW5nU3RvcmVJbnRl
cmZhY2U6OlRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQktleSYsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgSURC
UmVjb3JkSWRlbnRpZmllciopIE9WRVJSSURFIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICB2aXJ0
dWFsIGJvb2wgY2xlYXJPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5z
YWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJS
SURFIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUmVjb3JkKElE
QkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCUmVjb3JkSWRlbnRpZmllciYpIE9WRVJS
SURFIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0S2V5R2VuZXJhdG9y
Q3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uJiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QmIGN1cnJlbnRO
dW1iZXIpIE9WRVJSSURFIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICB2aXJ0dWFsIGJvb2wgbWF5
YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZUludGVyZmFj
ZTo6VHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBuZXdTdGF0ZSwgYm9vbCBjaGVja0N1cnJlbnQpIE9WRVJSSURFIFdBUk5fVU5V
U0VEX1JFVFVSTjsKKyAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShJREJC
YWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFJlZlB0cjxJREJSZWNvcmRJZGVu
dGlmaWVyPiYgZm91bmRJREJSZWNvcmRJZGVudGlmaWVyKSBPVkVSUklERSBXQVJOX1VOVVNFRF9S
RVRVUk47CisKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlSW50
ZXJmYWNlOjpUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5
UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5KSBPVkVSUklERSBXQVJOX1VO
VVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4KElEQkJhY2tpbmdTdG9y
ZUludGVyZmFjZTo6VHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKSBPVkVSUklERSBXQVJOX1VOVVNFRF9SRVRVUk47
CisgICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmVJ
bnRlcmZhY2U6OlRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgSURCUmVjb3Jk
SWRlbnRpZmllciopIE9WRVJSSURFIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0UHJpbWFyeUtleVZpYUluZGV4KElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNh
Y3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBSZWZQdHI8SURCS2V5PiYgcHJpbWFyeUtleSkgT1ZF
UlJJREUgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbklu
ZGV4KElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJL
ZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5LCBib29sJiBleGlz
dHMpIE9WRVJSSURFIFdBUk5fVU5VU0VEX1JFVFVSTjsKIAogICAgIGNsYXNzIEN1cnNvciA6IHB1
YmxpYyBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OkN1cnNvciB7CiAgICAgcHVibGljOgpAQCAt
MTM5LDI2ICsxNDEsMjcgQEAgcHVibGljOgogICAgICAgICBSZWZQdHI8SURCUmVjb3JkSWRlbnRp
Zmllcj4gbV9yZWNvcmRJZGVudGlmaWVyOwogICAgIH07CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUtleUN1
cnNvcihJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSW5kZXhl
ZERCOjpDdXJzb3JEaXJlY3Rpb24pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OkN1cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKElE
QkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJbmRleGVkREI6OkN1
cnNvckRpcmVjdGlvbikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZTo6Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoSURCQmFja2luZ1N0
b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSW5kZXhl
ZERCOjpDdXJzb3JEaXJlY3Rpb24pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OkN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElu
ZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUtleUN1
cnNvcihJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSW5kZXhl
ZERCOjpDdXJzb3JEaXJlY3Rpb24pIE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OkN1cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKElE
QkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJbmRleGVkREI6OkN1
cnNvckRpcmVjdGlvbikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZTo6Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoSURCQmFja2luZ1N0
b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSW5kZXhl
ZERCOjpDdXJzb3JEaXJlY3Rpb24pIE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OkN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElu
ZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKSBPVkVSUklERTsKIAotICAgIGNsYXNzIFRyYW5zYWN0
aW9uIDogcHVibGljIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24geworICAg
IGNsYXNzIFRyYW5zYWN0aW9uIEZJTkFMIDogcHVibGljIElEQkJhY2tpbmdTdG9yZUludGVyZmFj
ZTo6VHJhbnNhY3Rpb24gewogICAgIHB1YmxpYzoKICAgICAgICAgZXhwbGljaXQgVHJhbnNhY3Rp
b24oSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKik7Ci0gICAgICAgIHZvaWQgYmVnaW4oKTsKLSAg
ICAgICAgYm9vbCBjb21taXQoKTsKLSAgICAgICAgdm9pZCByb2xsYmFjaygpOwotICAgICAgICB2
b2lkIHJlc2V0KCkKKworICAgICAgICB2aXJ0dWFsIHZvaWQgYmVnaW4oKTsKKyAgICAgICAgdmly
dHVhbCBib29sIGNvbW1pdCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2soKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHJlc2V0VHJhbnNhY3Rpb24oKQogICAgICAgICB7CiAgICAgICAg
ICAgICBtX2JhY2tpbmdTdG9yZSA9IDA7CiAgICAgICAgICAgICBtX3RyYW5zYWN0aW9uID0gMDsK
ICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJU
cmFuc2FjdGlvbkZyb20oSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24pCisgICAgICAgIHN0YXRpYyBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFu
c2FjdGlvbkZyb20oSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJREJCYWNr
aW5nU3RvcmVMZXZlbERCOjpUcmFuc2FjdGlvbio+KHRyYW5zYWN0aW9uKS0+bV90cmFuc2FjdGlv
bi5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJREJCYWNraW5nU3RvcmVM
ZXZlbERCOjpUcmFuc2FjdGlvbiY+KHRyYW5zYWN0aW9uKS5tX3RyYW5zYWN0aW9uLmdldCgpOwog
ICAgICAgICB9CiAKICAgICBwcml2YXRlOgpAQCAtMTc3LDcgKzE4MCw3IEBAIHByb3RlY3RlZDoK
IHByaXZhdGU6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlTGV2ZWxEQj4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgUGFzc093blB0cjxMZXZlbERCRGF0YWJh
c2U+LCBQYXNzT3duUHRyPExldmVsREJDb21wYXJhdG9yPik7CiAKLSAgICBib29sIGZpbmRLZXlJ
bkluZGV4KElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJ
REJLZXkmLCBWZWN0b3I8Y2hhcj4mIGZvdW5kRW5jb2RlZFByaW1hcnlLZXksIGJvb2wmIGZvdW5k
KTsKKyAgICBib29sIGZpbmRLZXlJbkluZGV4KElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJh
bnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBWZWN0b3I8Y2hhcj4mIGZvdW5kRW5jb2RlZFBy
aW1hcnlLZXksIGJvb2wmIGZvdW5kKTsKICAgICBib29sIGdldEluZGV4ZXMoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIElEQk9iamVjdFN0b3JlTWV0YWRhdGE6Oklu
ZGV4TWFwKikgV0FSTl9VTlVTRURfUkVUVVJOOwogCiAgICAgU3RyaW5nIG1faWRlbnRpZmllcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuY3BwCmluZGV4IDRi
MDJkMzcuLmQ2MWFkYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCLmNwcApAQCAtNTcsNyArNTcsNyBAQCBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
OjpJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKElEQkRhdGFiYXNlQmFja2VuZEltcAogICAg
ICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQogICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQog
ICAgICwgbV9kYXRhYmFzZShkYXRhYmFzZUJhY2tlbmQpCi0gICAgLCBtX3RyYW5zYWN0aW9uKGRh
dGFiYXNlQmFja2VuZC0+YmFja2luZ1N0b3JlKCkpCisgICAgLCBtX2JhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKGRhdGFiYXNlQmFja2VuZC0+YmFja2luZ1N0b3JlKCktPmNyZWF0ZUJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCkpCiAgICAgLCBtX3Rhc2tUaW1lcih0aGlzLCAmSURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQjo6dGFza1RpbWVyRmlyZWQpCiAgICAgLCBtX3BlbmRpbmdQcmVlbXB0aXZl
RXZlbnRzKDApCiAgICAgLCBtX2JhY2tpbmdTdG9yZShkYXRhYmFzZUJhY2tlbmQtPmJhY2tpbmdT
dG9yZSgpKQpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2
ZWxEQjo6YWJvcnQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikKICAgICBtX3Rh
c2tUaW1lci5zdG9wKCk7CiAKICAgICBpZiAod2FzUnVubmluZykKLSAgICAgICAgbV90cmFuc2Fj
dGlvbi5yb2xsYmFjaygpOworICAgICAgICBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLT5yb2xs
YmFjaygpOwogCiAgICAgLy8gUnVuIHRoZSBhYm9ydCB0YXNrcywgaWYgYW55LgogICAgIHdoaWxl
ICghbV9hYm9ydFRhc2tRdWV1ZS5pc0VtcHR5KCkpIHsKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lk
IElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OmFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4gZXJyb3IpCiAgICAgLy8gYXJlIGZpcmVkLCBhcyB0aGUgc2NyaXB0IGNhbGxiYWNr
cyBtYXkgcmVsZWFzZSByZWZlcmVuY2VzIGFuZCBhbGxvdyB0aGUgYmFja2luZyBzdG9yZQogICAg
IC8vIGl0c2VsZiB0byBiZSByZWxlYXNlZCwgYW5kIG9yZGVyIGlzIGNyaXRpY2FsLgogICAgIGNs
b3NlT3BlbkN1cnNvcnMoKTsKLSAgICBtX3RyYW5zYWN0aW9uLnJlc2V0KCk7CisgICAgbV9iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbi0+cmVzZXRUcmFuc2FjdGlvbigpOwogCiAgICAgLy8gVHJhbnNh
Y3Rpb25zIG11c3QgYWxzbyBiZSBtYXJrZWQgYXMgY29tcGxldGVkIGJlZm9yZSB0aGUgZnJvbnQt
ZW5kIGlzIG5vdGlmaWVkLCBhcwogICAgIC8vIHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIHVu
YmxvY2tzIG9wZXJhdGlvbnMgbGlrZSBjbG9zaW5nIGNvbm5lY3Rpb25zLgpAQCAtMjA3LDEzICsy
MDcsMTMgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpjb21taXQoKQogICAg
IGJvb2wgdW51c2VkID0gbV9zdGF0ZSA9PSBVbnVzZWQ7CiAgICAgbV9zdGF0ZSA9IEZpbmlzaGVk
OwogCi0gICAgYm9vbCBjb21taXR0ZWQgPSB1bnVzZWQgfHwgbV90cmFuc2FjdGlvbi5jb21taXQo
KTsKKyAgICBib29sIGNvbW1pdHRlZCA9IHVudXNlZCB8fCBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uLT5jb21taXQoKTsKIAogICAgIC8vIEJhY2tpbmcgc3RvcmUgcmVzb3VyY2VzIChoZWxkIHZp
YSBjdXJzb3JzKSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBzY3JpcHQgY2FsbGJhY2tzCiAgICAg
Ly8gYXJlIGZpcmVkLCBhcyB0aGUgc2NyaXB0IGNhbGxiYWNrcyBtYXkgcmVsZWFzZSByZWZlcmVu
Y2VzIGFuZCBhbGxvdyB0aGUgYmFja2luZyBzdG9yZQogICAgIC8vIGl0c2VsZiB0byBiZSByZWxl
YXNlZCwgYW5kIG9yZGVyIGlzIGNyaXRpY2FsLgogICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKLSAg
ICBtX3RyYW5zYWN0aW9uLnJlc2V0KCk7CisgICAgbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbi0+
cmVzZXRUcmFuc2FjdGlvbigpOwogCiAgICAgLy8gVHJhbnNhY3Rpb25zIG11c3QgYWxzbyBiZSBt
YXJrZWQgYXMgY29tcGxldGVkIGJlZm9yZSB0aGUgZnJvbnQtZW5kIGlzIG5vdGlmaWVkLCBhcwog
ICAgIC8vIHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIHVuYmxvY2tzIG9wZXJhdGlvbnMgbGlr
ZSBjbG9zaW5nIGNvbm5lY3Rpb25zLgpAQCAtMjM4LDcgKzIzOCw3IEBAIHZvaWQgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQjo6dGFza1RpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2CiAgICAgQVNTRVJUKCFpc1Rhc2tRdWV1ZUVtcHR5KCkpOwogCiAgICAgaWYgKG1f
c3RhdGUgPT0gU3RhcnRQZW5kaW5nKSB7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24uYmVnaW4oKTsK
KyAgICAgICAgbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbi0+YmVnaW4oKTsKICAgICAgICAgbV9z
dGF0ZSA9IFJ1bm5pbmc7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQi5oCmluZGV4IGUwOTQzMmEuLmU3NDJlY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2
ZWxEQi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHVucmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRMZXZlbERCKik7CiAg
ICAgdmlydHVhbCB2b2lkIGFkZFByZWVtcHRpdmVFdmVudCgpIE9WRVJSSURFIHsgbV9wZW5kaW5n
UHJlZW1wdGl2ZUV2ZW50cysrOyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlUHJlZW1w
dGl2ZUV2ZW50KCkgT1ZFUlJJREUgeyBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzLS07IEFTU0VS
VChtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzID49IDApOyB9Ci0gICAgdmlydHVhbCBJREJCYWNr
aW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
IHsgcmV0dXJuICZtX3RyYW5zYWN0aW9uOyB9CisgICAgdmlydHVhbCBJREJCYWNraW5nU3RvcmVJ
bnRlcmZhY2U6OlRyYW5zYWN0aW9uJiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpIHsgcmV0dXJu
ICptX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOyB9CiAKICAgICB2aXJ0dWFsIElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZSYgZGF0YWJhc2UoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAqbV9k
YXRhYmFzZTsgfQogCkBAIC0xMTMsNyArMTEzLDcgQEAgcHJpdmF0ZToKICAgICBUYXNrUXVldWUg
bV9wcmVlbXB0aXZlVGFza1F1ZXVlOwogICAgIFRhc2tRdWV1ZSBtX2Fib3J0VGFza1F1ZXVlOwog
Ci0gICAgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6VHJhbnNhY3Rpb24gbV90cmFuc2FjdGlvbjsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlv
bj4gbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbjsKIAogICAgIC8vIEZJWE1FOiBkZWxldGUgdGhl
IHRpbWVyIG9uY2Ugd2UgaGF2ZSB0aHJlYWRzIGluc3RlYWQuCiAgICAgVGltZXI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQj4gbV90YXNrVGltZXI7Cg==
</data>
<flag name="review"
          id="238167"
          type_id="1"
          status="-"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215468</attachid>
            <date>2013-10-29 21:00:22 -0700</date>
            <delta_ts>2013-10-29 22:01:29 -0700</delta_ts>
            <desc>Patch v1 </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>135269</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYWYwYjI3OC4uYzdkYTljNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTc4Miw2ICs3ODIsOCBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAKICAgICBNb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0
aW9ucy5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAKICAg
ICBNb2R1bGVzL2luZGV4ZWRkYi9QYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuY3BwCkBAIC03OTAs
OCArNzkyLDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCQ3Vyc29yQmFja2VuZExldmVsREIuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmNwcAotICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5jcHAKLSAgICBNb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREJPcGVyYXRpb25zLmNwcAog
CiAgICAgTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKICAgICBNb2R1bGVzL21l
ZGlhc291cmNlL01lZGlhU291cmNlUmVnaXN0cnkuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzE1YTkwNC4u
OTIzNjk0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMwIEBACiAyMDEzLTEwLTI5ICBCcmFkeSBF
aWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAorICAgICAgICBJREJUcmFuc2FjdGlvbkJhY2tl
bmQgc2hvdWxkIGJlIGNyb3NzIHBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM0NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAtIFJlbmFtZSBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
IHRvIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwKKyAgICAgICAgLSBSZW5hbWUgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQk9wZXJhdGlvbnMgdG8gSURCVHJhbnNhY3Rpb25CYWNrZW5kT3Bl
cmF0aW9ucworICAgICAgICAtIE1vdmUgdGhlaXIgZmlsZXMgZnJvbSB0aGUgbGV2ZWxkYiBzdWJk
aXJlY3RvcnkgdG8gdGhlIGluZGV4ZWRkYiBkaXJlY3RvcnkKKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REIuY3BwLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oLgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCT3BlcmF0aW9ucy5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCT3BlcmF0aW9ucy5oLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxk
Yi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5oOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQjo6bWF5YmVDcmVhdGVUcmFuc2FjdGlv
bkJhY2tlbmQpOgorCisyMDEzLTEwLTI5ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNv
bT4KKwogICAgICAgICBNb3ZlIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIgdG8gZ2VuZXJp
YyBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyMzQ4MwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCA3Yzk4MWQ1Li5lMGNlNDdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAg
LTE4NDYsMTMgKzE4NDYsMTMgQEAgd2ViY29yZV9tb2R1bGVzX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlY29yZElkZW50aWZpZXIuaCBcCiAJU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaCBcCi0JU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRMZXZlbERCLmggXAotCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xldmVsZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQk9wZXJhdGlvbnMuY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZExldmVsREJPcGVyYXRpb25zLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb24uaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBcCiAJU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmggXAorCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJh
dGlvbnMuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRPcGVyYXRpb25zLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggXAogCVNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x
ZmZmOWE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKQEAgLTAsMCArMSwzNDAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bC5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5o
IgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURCRGF0YWJh
c2VFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgor
I2luY2x1ZGUgIklEQktleVJhbmdlLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5k
T3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKKyNp
bmNsdWRlICJMb2dnaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVh
dGUoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2VCYWNrZW5kLCBpbnQ2NF90IGlkLCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3Rvcjxp
bnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUp
Cit7CisgICAgSGFzaFNldDxpbnQ2NF90PiBvYmplY3RTdG9yZUhhc2hTZXQ7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBvYmplY3RTdG9yZUlkcy5zaXplKCk7ICsraSkKKyAgICAgICAgb2Jq
ZWN0U3RvcmVIYXNoU2V0LmFkZChvYmplY3RTdG9yZUlkc1tpXSk7CisKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoZGF0YWJhc2VCYWNrZW5kLCBpZCwg
Y2FsbGJhY2tzLCBvYmplY3RTdG9yZUhhc2hTZXQsIG1vZGUpKTsKK30KKworSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChJREJEYXRhYmFzZUJhY2tl
bmRJbXBsKiBkYXRhYmFzZUJhY2tlbmQsIGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgb2JqZWN0U3Rv
cmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCisgICAgOiBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UoaWQpCisgICAgLCBtX29iamVjdFN0b3JlSWRzKG9iamVjdFN0
b3JlSWRzKQorICAgICwgbV9tb2RlKG1vZGUpCisgICAgLCBtX3N0YXRlKFVudXNlZCkKKyAgICAs
IG1fY29tbWl0UGVuZGluZyhmYWxzZSkKKyAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAg
ICAsIG1fZGF0YWJhc2UoZGF0YWJhc2VCYWNrZW5kKQorICAgICwgbV9iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbihkYXRhYmFzZUJhY2tlbmQtPmJhY2tpbmdTdG9yZSgpLT5jcmVhdGVCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpKQorICAgICwgbV90YXNrVGltZXIodGhpcywgJklEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVkKQorICAgICwgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2
ZW50cygwKQorICAgICwgbV9iYWNraW5nU3RvcmUoZGF0YWJhc2VCYWNrZW5kLT5iYWNraW5nU3Rv
cmUoKSkKK3sKKyAgICAvLyBXZSBwYXNzIGEgcmVmZXJlbmNlIG9mIHRoaXMgb2JqZWN0IGJlZm9y
ZSBpdCBjYW4gYmUgYWRvcHRlZC4KKyAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKKwor
ICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkQ3JlYXRlVHJhbnNh
Y3Rpb24odGhpcyk7Cit9CisKK0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6On5JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKCkKK3sKKyAgICAvLyBJdCBzaG91bGRuJ3QgYmUgcG9zc2libGUgZm9y
IHRoaXMgb2JqZWN0IHRvIGdldCBkZWxldGVkIHVudGlsIGl0J3MgZWl0aGVyIGNvbXBsZXRlIG9y
IGFib3J0ZWQuCisgICAgQVNTRVJUKG1fc3RhdGUgPT0gRmluaXNoZWQpOworfQorCit2b2lkIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2U6OlRhc2tUeXBlIHR5cGUsIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiB0YXNrLCBQ
YXNzT3duUHRyPElEQk9wZXJhdGlvbj4gYWJvcnRUYXNrKQoreworICAgIGlmIChtX3N0YXRlID09
IEZpbmlzaGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodHlwZSA9PSBJREJEYXRhYmFz
ZUJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRhc2spCisgICAgICAgIG1fdGFza1F1ZXVlLmFwcGVu
ZCh0YXNrKTsKKyAgICBlbHNlCisgICAgICAgIG1fcHJlZW1wdGl2ZVRhc2tRdWV1ZS5hcHBlbmQo
dGFzayk7CisKKyAgICBpZiAoYWJvcnRUYXNrKQorICAgICAgICBtX2Fib3J0VGFza1F1ZXVlLnBy
ZXBlbmQoYWJvcnRUYXNrKTsKKworICAgIGlmIChtX3N0YXRlID09IFVudXNlZCkKKyAgICAgICAg
c3RhcnQoKTsKKyAgICBlbHNlIGlmIChtX3N0YXRlID09IFJ1bm5pbmcgJiYgIW1fdGFza1RpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgIG1fdGFza1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwor
dm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCgpCit7CisgICAgYWJvcnQoSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3Is
ICJJbnRlcm5hbCBlcnJvciAodW5rbm93biBjYXVzZSkiKSk7Cit9CisKK3ZvaWQgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6YWJvcnQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJv
cikKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFi
b3J0Iik7CisgICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGJvb2wgd2FzUnVubmluZyA9IG1fc3RhdGUgPT0gUnVubmluZzsKKworICAgIC8vIFRoZSBs
YXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9y
bWluZyB0aGUKKyAgICAvLyBhYm9ydCBzdGVwcyBiZWxvdy4gV2UgdGhlcmVmb3JlIHRha2UgYSBz
ZWxmIHJlZmVyZW5jZSB0byBrZWVwIG91cnNlbHZlcworICAgIC8vIGFsaXZlIHdoaWxlIGV4ZWN1
dGluZyB0aGlzIG1ldGhvZC4KKyAgICBSZWY8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJv
dGVjdCgqdGhpcyk7CisKKyAgICBtX3N0YXRlID0gRmluaXNoZWQ7CisgICAgbV90YXNrVGltZXIu
c3RvcCgpOworCisgICAgaWYgKHdhc1J1bm5pbmcpCisgICAgICAgIG1fYmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24tPnJvbGxiYWNrKCk7CisKKyAgICAvLyBSdW4gdGhlIGFib3J0IHRhc2tzLCBpZiBh
bnkuCisgICAgd2hpbGUgKCFtX2Fib3J0VGFza1F1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBP
d25QdHI8SURCT3BlcmF0aW9uPiB0YXNrKG1fYWJvcnRUYXNrUXVldWUudGFrZUZpcnN0KCkpOwor
ICAgICAgICB0YXNrLT5wZXJmb3JtKCk7CisgICAgfQorCisgICAgLy8gQmFja2luZyBzdG9yZSBy
ZXNvdXJjZXMgKGhlbGQgdmlhIGN1cnNvcnMpIG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHNjcmlw
dCBjYWxsYmFja3MKKyAgICAvLyBhcmUgZmlyZWQsIGFzIHRoZSBzY3JpcHQgY2FsbGJhY2tzIG1h
eSByZWxlYXNlIHJlZmVyZW5jZXMgYW5kIGFsbG93IHRoZSBiYWNraW5nIHN0b3JlCisgICAgLy8g
aXRzZWxmIHRvIGJlIHJlbGVhc2VkLCBhbmQgb3JkZXIgaXMgY3JpdGljYWwuCisgICAgY2xvc2VP
cGVuQ3Vyc29ycygpOworICAgIG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24tPnJlc2V0VHJhbnNh
Y3Rpb24oKTsKKworICAgIC8vIFRyYW5zYWN0aW9ucyBtdXN0IGFsc28gYmUgbWFya2VkIGFzIGNv
bXBsZXRlZCBiZWZvcmUgdGhlIGZyb250LWVuZCBpcyBub3RpZmllZCwgYXMKKyAgICAvLyB0aGUg
dHJhbnNhY3Rpb24gY29tcGxldGlvbiB1bmJsb2NrcyBvcGVyYXRpb25zIGxpa2UgY2xvc2luZyBj
b25uZWN0aW9ucy4KKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRp
ZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMpOworICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+dHJhbnNh
Y3Rpb25Db29yZGluYXRvcigpLT5pc0FjdGl2ZSh0aGlzKSk7CisgICAgbV9kYXRhYmFzZS0+dHJh
bnNhY3Rpb25GaW5pc2hlZCh0aGlzKTsKKworICAgIGlmIChtX2NhbGxiYWNrcykKKyAgICAgICAg
bV9jYWxsYmFja3MtPm9uQWJvcnQoaWQoKSwgZXJyb3IpOworCisgICAgbV9kYXRhYmFzZS0+dHJh
bnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0RmlyZWQodGhpcyk7CisKKyAgICBtX2RhdGFiYXNlID0g
MDsKK30KKworYm9vbCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjppc1Rhc2tRdWV1ZUVtcHR5
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcmVlbXB0aXZlVGFza1F1ZXVlLmlzRW1wdHkoKSAm
JiBtX3Rhc2tRdWV1ZS5pc0VtcHR5KCk7Cit9CisKK2Jvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6aGFzUGVuZGluZ1Rhc2tzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wZW5kaW5nUHJl
ZW1wdGl2ZUV2ZW50cyB8fCAhaXNUYXNrUXVldWVFbXB0eSgpOworfQorCit2b2lkIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kSW50
ZXJmYWNlKiBjdXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5hZGQoY3Vyc29yKTsKK30KKwor
dm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlKiBjdXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5yZW1v
dmUoY3Vyc29yKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpydW4oKQor
eworICAgIC8vIFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IgaGFzIHN0YXJ0ZWQgdGhpcyB0cmFuc2Fj
dGlvbi4gU2NoZWR1bGUgYSB0aW1lcgorICAgIC8vIHRvIHByb2Nlc3MgdGhlIGZpcnN0IHRhc2su
CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhcnRQZW5kaW5nIHx8IG1fc3RhdGUgPT0gUnVubmlu
Zyk7CisgICAgQVNTRVJUKCFtX3Rhc2tUaW1lci5pc0FjdGl2ZSgpKTsKKworICAgIG1fdGFza1Rp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpzdGFydCgpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gVW51c2VkKTsKKworICAgIG1fc3Rh
dGUgPSBTdGFydFBlbmRpbmc7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRv
cigpLT5kaWRTdGFydFRyYW5zYWN0aW9uKHRoaXMpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0
aW9uU3RhcnRlZCh0aGlzKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpj
b21taXQoKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6Y29tbWl0Iik7CisKKyAgICAvLyBJbiBtdWx0aXByb2Nlc3MgcG9ydHMsIGZyb250LWVuZCBt
YXkgaGF2ZSByZXF1ZXN0ZWQgYSBjb21taXQgYnV0IGFuIGFib3J0IGhhcyBhbHJlYWR5CisgICAg
Ly8gYmVlbiBpbml0aWF0ZWQgYXN5bmNocm9ub3VzbHkgYnkgdGhlIGJhY2stZW5kLgorICAgIGlm
IChtX3N0YXRlID09IEZpbmlzaGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9z
dGF0ZSA9PSBVbnVzZWQgfHwgbV9zdGF0ZSA9PSBSdW5uaW5nKTsKKyAgICBtX2NvbW1pdFBlbmRp
bmcgPSB0cnVlOworCisgICAgLy8gRnJvbnQtZW5kIGhhcyByZXF1ZXN0ZWQgYSBjb21taXQsIGJ1
dCB0aGVyZSBtYXkgYmUgdGFza3MgbGlrZSBjcmVhdGVJbmRleCB3aGljaAorICAgIC8vIGFyZSBj
b25zaWRlcmVkIHN5bmNocm9ub3VzIGJ5IHRoZSBmcm9udC1lbmQgYnV0IGFyZSBwcm9jZXNzZWQg
YXN5bmNocm9ub3VzbHkuCisgICAgaWYgKGhhc1BlbmRpbmdUYXNrcygpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBUaGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJl
bGVhc2VkIHdoaWxlIHBlcmZvcm1pbmcgdGhlCisgICAgLy8gY29tbWl0IHN0ZXBzIGJlbG93LiBX
ZSB0aGVyZWZvcmUgdGFrZSBhIHNlbGYgcmVmZXJlbmNlIHRvIGtlZXAgb3Vyc2VsdmVzCisgICAg
Ly8gYWxpdmUgd2hpbGUgZXhlY3V0aW5nIHRoaXMgbWV0aG9kLgorICAgIFJlZjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIGJvb2wgdW51c2VkID0gbV9z
dGF0ZSA9PSBVbnVzZWQ7CisgICAgbV9zdGF0ZSA9IEZpbmlzaGVkOworCisgICAgYm9vbCBjb21t
aXR0ZWQgPSB1bnVzZWQgfHwgbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbi0+Y29tbWl0KCk7CisK
KyAgICAvLyBCYWNraW5nIHN0b3JlIHJlc291cmNlcyAoaGVsZCB2aWEgY3Vyc29ycykgbXVzdCBi
ZSByZWxlYXNlZCBiZWZvcmUgc2NyaXB0IGNhbGxiYWNrcworICAgIC8vIGFyZSBmaXJlZCwgYXMg
dGhlIHNjcmlwdCBjYWxsYmFja3MgbWF5IHJlbGVhc2UgcmVmZXJlbmNlcyBhbmQgYWxsb3cgdGhl
IGJhY2tpbmcgc3RvcmUKKyAgICAvLyBpdHNlbGYgdG8gYmUgcmVsZWFzZWQsIGFuZCBvcmRlciBp
cyBjcml0aWNhbC4KKyAgICBjbG9zZU9wZW5DdXJzb3JzKCk7CisgICAgbV9iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbi0+cmVzZXRUcmFuc2FjdGlvbigpOworCisgICAgLy8gVHJhbnNhY3Rpb25zIG11
c3QgYWxzbyBiZSBtYXJrZWQgYXMgY29tcGxldGVkIGJlZm9yZSB0aGUgZnJvbnQtZW5kIGlzIG5v
dGlmaWVkLCBhcworICAgIC8vIHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIHVuYmxvY2tzIG9w
ZXJhdGlvbnMgbGlrZSBjbG9zaW5nIGNvbm5lY3Rpb25zLgorICAgIGlmICghdW51c2VkKQorICAg
ICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5z
YWN0aW9uKHRoaXMpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQodGhpcyk7
CisKKyAgICBpZiAoY29tbWl0dGVkKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkNvbXBsZXRl
KGlkKCkpOworICAgICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkQW5kQ29tcGxl
dGVGaXJlZCh0aGlzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2NhbGxiYWNrcy0+b25BYm9y
dChpZCgpLCBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVu
a25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24uIikpOwor
ICAgICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZCh0aGlz
KTsKKyAgICB9CisKKyAgICBtX2RhdGFiYXNlID0gMDsKK30KKwordm9pZCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjp0YXNrVGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiopCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Ojp0YXNrVGltZXJGaXJlZCIpOworICAgIEFTU0VSVCghaXNUYXNrUXVldWVFbXB0eSgpKTsKKwor
ICAgIGlmIChtX3N0YXRlID09IFN0YXJ0UGVuZGluZykgeworICAgICAgICBtX2JhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uLT5iZWdpbigpOworICAgICAgICBtX3N0YXRlID0gUnVubmluZzsKKyAgICB9
CisKKyAgICAvLyBUaGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVh
c2VkIHdoaWxlIHBlcmZvcm1pbmcgdGhlCisgICAgLy8gdGFza3MuIFRha2UgdGFrZSBhIHNlbGYg
cmVmZXJlbmNlIHRvIGtlZXAgdGhpcyBvYmplY3QgYWxpdmUgc28gdGhhdAorICAgIC8vIHRoZSBs
b29wIHRlcm1pbmF0aW9uIGNvbmRpdGlvbnMgY2FuIGJlIGNoZWNrZWQuCisgICAgUmVmPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IHByb3RlY3QoKnRoaXMpOworCisgICAgVGFza1F1ZXVlKiB0
YXNrUXVldWUgPSBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzID8gJm1fcHJlZW1wdGl2ZVRhc2tR
dWV1ZSA6ICZtX3Rhc2tRdWV1ZTsKKyAgICB3aGlsZSAoIXRhc2tRdWV1ZS0+aXNFbXB0eSgpICYm
IG1fc3RhdGUgIT0gRmluaXNoZWQpIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gUnVubmlu
Zyk7CisgICAgICAgIE93blB0cjxJREJPcGVyYXRpb24+IHRhc2sodGFza1F1ZXVlLT50YWtlRmly
c3QoKSk7CisgICAgICAgIHRhc2stPnBlcmZvcm0oKTsKKworICAgICAgICAvLyBFdmVudCBpdHNl
bGYgbWF5IGNoYW5nZSB3aGljaCBxdWV1ZSBzaG91bGQgYmUgcHJvY2Vzc2VkIG5leHQuCisgICAg
ICAgIHRhc2tRdWV1ZSA9IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgPyAmbV9wcmVlbXB0aXZl
VGFza1F1ZXVlIDogJm1fdGFza1F1ZXVlOworICAgIH0KKworICAgIC8vIElmIHRoZXJlIGFyZSBu
byBwZW5kaW5nIHRhc2tzLCB3ZSBoYXZlbid0IGFscmVhZHkgY29tbWl0dGVkL2Fib3J0ZWQsCisg
ICAgLy8gYW5kIHRoZSBmcm9udC1lbmQgcmVxdWVzdGVkIGEgY29tbWl0LCBpdCBpcyBub3cgc2Fm
ZSB0byBkbyBzby4KKyAgICBpZiAoIWhhc1BlbmRpbmdUYXNrcygpICYmIG1fc3RhdGUgIT0gRmlu
aXNoZWQgJiYgbV9jb21taXRQZW5kaW5nKQorICAgICAgICBjb21taXQoKTsKK30KKwordm9pZCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjbG9zZU9wZW5DdXJzb3JzKCkKK3sKKyAgICBmb3Ig
KEhhc2hTZXQ8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZSo+OjppdGVyYXRvciBpID0gbV9vcGVu
Q3Vyc29ycy5iZWdpbigpOyBpICE9IG1fb3BlbkN1cnNvcnMuZW5kKCk7ICsraSkKKyAgICAgICAg
KCppKS0+Y2xvc2UoKTsKKyAgICBtX29wZW5DdXJzb3JzLmNsZWFyKCk7Cit9CisKK3ZvaWQgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c2NoZWR1bGVDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlv
bihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQorewor
ICAgIHNjaGVkdWxlVGFzayhDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMs
IG1fYmFja2luZ1N0b3JlLmdldCgpLCBvYmplY3RTdG9yZU1ldGFkYXRhKSwgQ3JlYXRlT2JqZWN0
U3RvcmVBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlTWV0YWRhdGEuaWQp
KTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hlZHVsZURlbGV0ZU9i
amVjdFN0b3JlT3BlcmF0aW9uKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0
b3JlTWV0YWRhdGEpCit7CisgICAgc2NoZWR1bGVUYXNrKERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0
aW9uOjpjcmVhdGUodGhpcywgbV9iYWNraW5nU3RvcmUuZ2V0KCksIG9iamVjdFN0b3JlTWV0YWRh
dGEpLCBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0
U3RvcmVNZXRhZGF0YSkpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnNj
aGVkdWxlVmVyc2lvbkNoYW5nZU9wZXJhdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0
X3QgcmVxdWVzdGVkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIGNvbnN0
IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKQoreworICAgIHNjaGVkdWxlVGFzayhJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywg
dHJhbnNhY3Rpb25JZCwgcmVxdWVzdGVkVmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxi
YWNrcyksIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlv
bjo6Y3JlYXRlKHRoaXMsIFN0cmluZzo6bnVtYmVyKG1ldGFkYXRhLnZlcnNpb24pLCBtZXRhZGF0
YS52ZXJzaW9uKSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c2NoZWR1
bGVDcmVhdGVJbmRleE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQklu
ZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCit7CisgICAgc2NoZWR1bGVUYXNrKENyZWF0ZUlu
ZGV4T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgbV9iYWNraW5nU3RvcmUuZ2V0KCksIG9iamVjdFN0
b3JlSWQsIGluZGV4TWV0YWRhdGEpLCBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpjcmVhdGUo
dGhpcywgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YS5pZCkpOworfQorCit2b2lkIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlRGVsZXRlSW5kZXhPcGVyYXRpb24oaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQor
eworICAgIHNjaGVkdWxlVGFzayhEZWxldGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG1f
YmFja2luZ1N0b3JlLmdldCgpLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSwgRGVsZXRl
SW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0
YWRhdGEpKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hlZHVsZUdl
dE9wZXJhdGlvbihjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtl
eVJhbmdlLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBzY2hlZHVsZVRhc2soR2V0T3BlcmF0aW9uOjpj
cmVhdGUodGhpcywgbV9iYWNraW5nU3RvcmUuZ2V0KCksIG1ldGFkYXRhLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkLCBrZXlSYW5nZSwgY3Vyc29yVHlwZSwgY2FsbGJhY2tzKSk7Cit9CisKK3ZvaWQg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c2NoZWR1bGVQdXRPcGVyYXRpb24oY29uc3QgSURC
T2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSwgUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElu
ZGV4S2V5cz4mIGluZGV4S2V5cykKK3sKKyAgICBzY2hlZHVsZVRhc2soUHV0T3BlcmF0aW9uOjpj
cmVhdGUodGhpcywgbV9iYWNraW5nU3RvcmUuZ2V0KCksIGRhdGFiYXNlKCkuaWQoKSwgb2JqZWN0
U3RvcmVNZXRhZGF0YSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBpbmRleElkcywg
aW5kZXhLZXlzKSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c2NoZWR1
bGVTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24oc2l6ZV90IGluZGV4Q291bnQpCit7CisgICAgc2No
ZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHJlZW1wdGl2ZVRhc2ssIFNl
dEluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGluZGV4Q291bnQpKTsKK30KKwor
dm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hlZHVsZU9wZW5DdXJzb3JPcGVyYXRp
b24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24s
IEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQoreworICAgIHNjaGVkdWxlVGFzayhPcGVuQ3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUodGhp
cywgbV9iYWNraW5nU3RvcmUuZ2V0KCksIGRhdGFiYXNlKCkuaWQoKSwgb2JqZWN0U3RvcmVJZCwg
aW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgdGFza1R5cGUsIGNhbGxi
YWNrcykpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlQ291
bnRPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQoreworICAgIHNjaGVkdWxlVGFzayhDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMs
IG1fYmFja2luZ1N0b3JlLmdldCgpLCBkYXRhYmFzZSgpLmlkKCksIG9iamVjdFN0b3JlSWQsIGlu
ZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpzY2hlZHVsZURlbGV0ZVJhbmdlT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgc2NoZWR1bGVUYXNrKERlbGV0ZVJhbmdlT3BlcmF0
aW9uOjpjcmVhdGUodGhpcywgbV9iYWNraW5nU3RvcmUuZ2V0KCksIGRhdGFiYXNlKCkuaWQoKSwg
b2JqZWN0U3RvcmVJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOworfQorCit2b2lkIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlQ2xlYXJPcGVyYXRpb24oaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIHNjaGVk
dWxlVGFzayhDbGVhck9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG1fYmFja2luZ1N0b3JlLmdldCgp
LCBkYXRhYmFzZSgpLmlkKCksIG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcykpOworfQorCitQYXNz
UmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OmNyZWF0ZUN1cnNvckJhY2tlbmQoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpDdXJzb3Im
IGN1cnNvciwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkK
K3sKKyAgICByZXR1cm4gbV9kYXRhYmFzZS0+ZmFjdG9yeUJhY2tlbmQoKS5jcmVhdGVDdXJzb3JC
YWNrZW5kKCp0aGlzLCBjdXJzb3IsIGN1cnNvclR5cGUsIHRhc2tUeXBlLCBvYmplY3RTdG9yZUlk
KTsKK30KKworfTsKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNWIx
MjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGxfaAorI2RlZmluZSBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAi
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1
ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKKyNpbmNsdWRlICJJREJPcGVyYXRpb24uaCIKKyNpbmNs
dWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJUaW1lci5o
IgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQkRh
dGFiYXNlQ2FsbGJhY2tzOworCitjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsIEZJTkFM
IDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gY3JlYXRlKElEQkRh
dGFiYXNlQmFja2VuZEltcGwqLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRz
LCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSk7CisgICAgdmlydHVhbCB+SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbCgpOworCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdCgpIE9WRVJSSURFIEZJ
TkFMOworICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1
YWwgdm9pZCBhYm9ydChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KSBPVkVSUklERSBGSU5B
TDsKKworICAgIHZpcnR1YWwgdm9pZCBydW4oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEluZGV4
ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUoKSBjb25zdCBPVkVSUklERSBGSU5BTCB7IHJldHVy
biBtX21vZGU7IH0KKyAgICBjb25zdCBIYXNoU2V0PGludDY0X3Q+JiBzY29wZSgpIGNvbnN0IE9W
RVJSSURFIHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJZHM7IH0KKworICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZVRhc2soUGFzc093blB0cjxJREJPcGVyYXRpb24+IHRhc2ssIFBhc3NPd25QdHI8SURC
T3BlcmF0aW9uPiBhYm9ydFRhc2sgPSBudWxscHRyKSB7IHNjaGVkdWxlVGFzayhJREJEYXRhYmFz
ZUJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRhc2ssIHRhc2ssIGFib3J0VGFzayk7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFz
a1R5cGUsIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiwgUGFzc093blB0cjxJREJPcGVyYXRpb24+
IGFib3J0VGFzayA9IG51bGxwdHIpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHJlZ2lz
dGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlKikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHVucmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2UqKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGRQcmVlbXB0aXZlRXZlbnQoKSBP
VkVSUklERSB7IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMrKzsgfQorICAgIHZpcnR1YWwgdm9p
ZCBkaWRDb21wbGV0ZVByZWVtcHRpdmVFdmVudCgpIE9WRVJSSURFIHsgbV9wZW5kaW5nUHJlZW1w
dGl2ZUV2ZW50cy0tOyBBU1NFUlQobV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cyA+PSAwKTsgfQor
ICAgIHZpcnR1YWwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiYgYmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSB7IHJldHVybiAqbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbjsg
fQorCisgICAgdmlydHVhbCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UmIGRhdGFiYXNlKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gKm1fZGF0YWJhc2U7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCBzY2hlZHVsZUNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKGNvbnN0IElEQk9iamVjdFN0b3Jl
TWV0YWRhdGEmKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVEZWxl
dGVPYmplY3RTdG9yZU9wZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJikgT1ZF
UlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlVmVyc2lvbkNoYW5nZU9wZXJh
dGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwg
Y29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwg
dm9pZCBzY2hlZHVsZUNyZWF0ZUluZGV4T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgSURCSW5kZXhNZXRhZGF0YSYpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9p
ZCBzY2hlZHVsZURlbGV0ZUluZGV4T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgSURCSW5kZXhNZXRhZGF0YSYpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZUdldE9wZXJhdGlvbihjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBJ
bmRleGVkREI6OkN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikgT1ZFUlJJREUg
RklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlUHV0T3BlcmF0aW9uKGNvbnN0IElEQk9i
amVjdFN0b3JlTWV0YWRhdGEmLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NS
ZWZQdHI8SURCS2V5PiwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNv
bnN0IFZlY3RvcjxJbmRleEtleXM+JikgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lk
IHNjaGVkdWxlU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHNpemVfdCBpbmRleENvdW50KSBPVkVS
UklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9u
KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlw
ZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+KSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb3Vu
dE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikgT1ZFUlJJREUgRklO
QUw7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlRGVsZXRlUmFuZ2VPcGVyYXRpb24oaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+KSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDbGVh
ck9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PikgT1ZFUlJJREUgRklOQUw7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZT4gY3JlYXRlQ3Vyc29yQmFja2VuZChJREJCYWNraW5nU3RvcmVJbnRlcmZh
Y2U6OkN1cnNvciYsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlOjpUYXNrVHlwZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBPVkVSUklERTsKKworcHJp
dmF0ZToKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKElEQkRhdGFiYXNlQmFja2VuZElt
cGwqLCBpbnQ2NF90IGlkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3Qg
SGFzaFNldDxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25N
b2RlKTsKKworICAgIGVudW0gU3RhdGUgeworICAgICAgICBVbnVzZWQsIC8vIENyZWF0ZWQsIGJ1
dCBubyB0YXNrcyB5ZXQuCisgICAgICAgIFN0YXJ0UGVuZGluZywgLy8gRW5xdWV1ZWQgdGFza3Ms
IGJ1dCBiYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIG5vdCB5ZXQgc3RhcnRlZC4KKyAgICAgICAg
UnVubmluZywgLy8gQmFja2luZyBzdG9yZSB0cmFuc2FjdGlvbiBzdGFydGVkIGJ1dCBub3QgeWV0
IGZpbmlzaGVkLgorICAgICAgICBGaW5pc2hlZCwgLy8gRWl0aGVyIGFib3J0ZWQgb3IgY29tbWl0
dGVkLgorICAgIH07CisKKyAgICB2b2lkIHN0YXJ0KCk7CisKKyAgICBib29sIGlzVGFza1F1ZXVl
RW1wdHkoKSBjb25zdDsKKyAgICBib29sIGhhc1BlbmRpbmdUYXNrcygpIGNvbnN0OworCisgICAg
dm9pZCB0YXNrVGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiopOwor
ICAgIHZvaWQgY2xvc2VPcGVuQ3Vyc29ycygpOworCisgICAgY29uc3QgSGFzaFNldDxpbnQ2NF90
PiBtX29iamVjdFN0b3JlSWRzOworICAgIGNvbnN0IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2Rl
IG1fbW9kZTsKKworICAgIFN0YXRlIG1fc3RhdGU7CisgICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7
CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKKworICAgIHR5cGVkZWYgRGVx
dWU8T3duUHRyPElEQk9wZXJhdGlvbj4+IFRhc2tRdWV1ZTsKKyAgICBUYXNrUXVldWUgbV90YXNr
UXVldWU7CisgICAgVGFza1F1ZXVlIG1fcHJlZW1wdGl2ZVRhc2tRdWV1ZTsKKyAgICBUYXNrUXVl
dWUgbV9hYm9ydFRhc2tRdWV1ZTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJCYWNraW5nU3Rv
cmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uPiBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOworCisg
ICAgLy8gRklYTUU6IGRlbGV0ZSB0aGUgdGltZXIgb25jZSB3ZSBoYXZlIHRocmVhZHMgaW5zdGVh
ZC4KKyAgICBUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBtX3Rhc2tUaW1lcjsKKyAg
ICBpbnQgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50czsKKworICAgIEhhc2hTZXQ8SURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZSo+IG1fb3BlbkN1cnNvcnM7CisgICAgCisgICAgUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZUludGVyZmFjZT4gbV9iYWNraW5nU3RvcmU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2VuZGlm
IC8vIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRP
cGVyYXRpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODE2OTM5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAKQEAgLTAsMCArMSwzODYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNr
ZW5kT3BlcmF0aW9ucy5oIgorCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5o
IgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURCSW5kZXhX
cml0ZXIuaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQlJlY29yZElk
ZW50aWZpZXIuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordm9pZCBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybSgpCit7Cisg
ICAgTE9HKFN0b3JhZ2VBUEksICJDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbiIpOworICAgIGlm
ICghbV9iYWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuaWQoKSwgbV9v
YmplY3RTdG9yZU1ldGFkYXRhLmlkLCBtX29iamVjdFN0b3JlTWV0YWRhdGEubmFtZSwgbV9vYmpl
Y3RTdG9yZU1ldGFkYXRhLmtleVBhdGgsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5hdXRvSW5jcmVt
ZW50KSkgeworICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3Ry
aW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIGNyZWF0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIs
IG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgbV90
cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KK30KKwordm9pZCBDcmVhdGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSgpCit7CisgICAgTE9H
KFN0b3JhZ2VBUEksICJDcmVhdGVJbmRleE9wZXJhdGlvbiIpOworICAgIGlmICghbV9iYWNraW5n
U3RvcmUtPmNyZWF0ZUluZGV4KG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuaWQoKSwgbV9vYmplY3RTdG9yZUlkLCBtX2lu
ZGV4TWV0YWRhdGEuaWQsIG1faW5kZXhNZXRhZGF0YS5uYW1lLCBtX2luZGV4TWV0YWRhdGEua2V5
UGF0aCwgbV9pbmRleE1ldGFkYXRhLnVuaXF1ZSwgbV9pbmRleE1ldGFkYXRhLm11bHRpRW50cnkp
KSB7CisgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50
ZXJuYWwgZXJyb3Igd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGluZGV4ICclcycuIiwgbV9pbmRleE1l
dGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30K
Kwordm9pZCBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKCkKK3sKKyAgICBMT0co
U3RvcmFnZUFQSSwgIkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24iKTsKKyAgICBtX3RyYW5zYWN0
aW9uLT5kYXRhYmFzZSgpLnJlbW92ZUluZGV4KG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkKTsK
K30KKwordm9pZCBEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSgpCit7CisgICAgTE9HKFN0
b3JhZ2VBUEksICJEZWxldGVJbmRleE9wZXJhdGlvbiIpOworICAgIGJvb2wgb2sgPSBtX2JhY2tp
bmdTdG9yZS0+ZGVsZXRlSW5kZXgobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5pZCgpLCBtX29iamVjdFN0b3JlSWQsIG1f
aW5kZXhNZXRhZGF0YS5pZCk7CisgICAgaWYgKCFvaykgeworICAgICAgICBSZWZQdHI8SURCRGF0
YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIGRl
bGV0aW5nIGluZGV4ICclcycuIiwgbV9pbmRleE1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSkp
OworICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7CisgICAgfQorfQorCit2b2lk
IERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb246OnBlcmZvcm0oKQoreworICAgIExPRyhTdG9yYWdl
QVBJLCAiRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbiIpOworICAgIG1fdHJhbnNhY3Rpb24tPmRh
dGFiYXNlKCkuYWRkSW5kZXgobV9vYmplY3RTdG9yZUlkLCBtX2luZGV4TWV0YWRhdGEsIElEQklu
ZGV4TWV0YWRhdGE6OkludmFsaWRJZCk7Cit9CisKK3ZvaWQgR2V0T3BlcmF0aW9uOjpwZXJmb3Jt
KCkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkdldE9wZXJhdGlvbiIpOworCisgICAgUmVmUHRy
PElEQktleT4ga2V5OworCisgICAgaWYgKG1fa2V5UmFuZ2UtPmlzT25seUtleSgpKQorICAgICAg
ICBrZXkgPSBtX2tleVJhbmdlLT5sb3dlcigpOworICAgIGVsc2UgeworICAgICAgICBSZWZQdHI8
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKKyAg
ICAgICAgaWYgKG1faW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChtX2N1cnNvclR5cGUgIT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5
KTsKKyAgICAgICAgICAgIC8vIE9iamVjdFN0b3JlIFJldHJpZXZhbCBPcGVyYXRpb24KKyAgICAg
ICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuT2JqZWN0U3Rv
cmVDdXJzb3IobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRh
YmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vy
c29yTmV4dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobV9jdXJzb3JUeXBl
ID09IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkgeworICAgICAgICAgICAgICAgIC8vIEluZGV4
IFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KKyAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVD
dXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24t
PmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlk
LCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEluZGV4IFJlZmVyZW5jZWQg
VmFsdWUgUmV0cmlldmFsIE9wZXJhdGlvbgorICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1
cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhDdXJzb3IobV90cmFuc2FjdGlvbi0+YmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1f
aW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7
CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBrZXkgPSBiYWNraW5nU3RvcmVDdXJzb3ItPmtleSgp
OworICAgIH0KKworICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXk7CisgICAgYm9vbCBvazsK
KyAgICBpZiAobV9pbmRleElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgeworICAg
ICAgICAvLyBPYmplY3QgU3RvcmUgUmV0cmlldmFsIE9wZXJhdGlvbgorICAgICAgICBWZWN0b3I8
Y2hhcj4gdmFsdWU7CisgICAgICAgIG9rID0gbV9iYWNraW5nU3RvcmUtPmdldFJlY29yZChtX3Ry
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2Jq
ZWN0U3RvcmVJZCwgKmtleSwgdmFsdWUpOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAg
ICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGluIGdldFJlY29yZC4i
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAodmFsdWUu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9hdXRvSW5jcmVtZW50
ICYmICFtX2tleVBhdGguaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1
Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSksIGtleSwgbV9rZXlQYXRoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fY2FsbGJhY2tzLT5v
blN1Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSkpOworICAgICAgICByZXR1
cm47CisKKyAgICB9CisKKyAgICAvLyBGcm9tIGhlcmUgd2UgYXJlIGRlYWxpbmcgb25seSB3aXRo
IGluZGV4ZXMuCisgICAgb2sgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4
KG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwg
bV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsICprZXksIHByaW1hcnlLZXkpOworICAgIGlmICgh
b2spIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBp
biBnZXRQcmltYXJ5S2V5VmlhSW5kZXguIikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGlmICghcHJpbWFyeUtleSkgeworICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fY3Vyc29yVHlwZSA9PSBJbmRleGVkREI6
OkN1cnNvcktleU9ubHkpIHsKKyAgICAgICAgLy8gSW5kZXggVmFsdWUgUmV0cmlldmFsIE9wZXJh
dGlvbgorICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHByaW1hcnlLZXkuZ2V0KCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSW5kZXggUmVmZXJlbmNlZCBWYWx1ZSBS
ZXRyaWV2YWwgT3BlcmF0aW9uCisgICAgVmVjdG9yPGNoYXI+IHZhbHVlOworICAgIG9rID0gbV9i
YWNraW5nU3RvcmUtPmdldFJlY29yZChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgKnByaW1hcnlLZXksIHZhbHVl
KTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50
ZXJuYWwgZXJyb3IgaW4gZ2V0UmVjb3JkLiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vz
cygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX2F1dG9JbmNyZW1lbnQgJiYg
IW1fa2V5UGF0aC5pc051bGwoKSkgeworICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNo
YXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IodmFsdWUpLCBwcmltYXJ5S2V5LCBtX2tleVBhdGgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2hhcmVk
QnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSkpOworfQorCit2b2lkIFB1dE9wZXJhdGlvbjo6cGVy
Zm9ybSgpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJQdXRPcGVyYXRpb24iKTsKKyAgICBBU1NF
UlQobV90cmFuc2FjdGlvbi0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25SZWFkT25s
eSk7CisgICAgQVNTRVJUKG1faW5kZXhJZHMuc2l6ZSgpID09IG1faW5kZXhLZXlzLnNpemUoKSk7
CisgICAgYm9vbCBrZXlXYXNHZW5lcmF0ZWQgPSBmYWxzZTsKKworICAgIFJlZlB0cjxJREJLZXk+
IGtleTsKKyAgICBpZiAobV9wdXRNb2RlICE9IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6
Q3Vyc29yVXBkYXRlICYmIG1fb2JqZWN0U3RvcmUuYXV0b0luY3JlbWVudCAmJiAhbV9rZXkpIHsK
KyAgICAgICAgUmVmUHRyPElEQktleT4gYXV0b0luY0tleSA9IG1fYmFja2luZ1N0b3JlLT5nZW5l
cmF0ZUtleSgqbV90cmFuc2FjdGlvbiwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkKTsK
KyAgICAgICAga2V5V2FzR2VuZXJhdGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFhdXRvSW5jS2V5
LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCAi
TWF4aW11bSBrZXkgZ2VuZXJhdG9yIHZhbHVlIHJlYWNoZWQuIikpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIGtleSA9IGF1dG9JbmNLZXk7CisgICAgfSBlbHNlCisg
ICAgICAgIGtleSA9IG1fa2V5OworCisgICAgQVNTRVJUKGtleSk7CisgICAgQVNTRVJUKGtleS0+
aXNWYWxpZCgpKTsKKworICAgIFJlZlB0cjxJREJSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVu
dGlmaWVyOworICAgIGlmIChtX3B1dE1vZGUgPT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNl
OjpBZGRPbmx5KSB7CisgICAgICAgIGJvb2wgb2sgPSBtX2JhY2tpbmdTdG9yZS0+a2V5RXhpc3Rz
SW5PYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBt
X2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQsICprZXksIHJlY29yZElkZW50aWZpZXIpOwor
ICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwg
IkludGVybmFsIGVycm9yIGNoZWNraW5nIGtleSBleGlzdGVuY2UuIikpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChyZWNvcmRJZGVudGlmaWVyKSB7CisgICAg
ICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgIktleSBhbHJlYWR5IGV4aXN0cyBp
biB0aGUgb2JqZWN0IHN0b3JlLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIFZlY3RvcjxSZWZQdHI8SURCSW5kZXhXcml0ZXI+PiBpbmRleFdyaXRlcnM7
CisgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKKyAgICBib29sIG9iZXlzQ29uc3RyYWludHMgPSBm
YWxzZTsKKyAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+bWFr
ZUluZGV4V3JpdGVycygqbV90cmFuc2FjdGlvbiwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3Jl
LCAqa2V5LCBrZXlXYXNHZW5lcmF0ZWQsIG1faW5kZXhJZHMsIG1faW5kZXhLZXlzLCBpbmRleFdy
aXRlcnMsICZlcnJvck1lc3NhZ2UsIG9iZXlzQ29uc3RyYWludHMpOworICAgIGlmICghYmFja2lu
Z1N0b3JlU3VjY2VzcykgeworICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVy
bmFsIGVycm9yOiBiYWNraW5nIHN0b3JlIGVycm9yIHVwZGF0aW5nIGluZGV4IGtleXMuIikpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghb2JleXNDb25zdHJhaW50cykgeworICAg
ICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgZXJyb3JNZXNzYWdlKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBCZWZvcmUgdGhpcyBwb2ludCwgZG9uJ3QgZG8gYW55
IG11dGF0aW9uLiBBZnRlciB0aGlzIHBvaW50LCByb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24gaW4g
Y2FzZSBvZiBlcnJvci4KKyAgICBiYWNraW5nU3RvcmVTdWNjZXNzID0gbV9iYWNraW5nU3RvcmUt
PnB1dFJlY29yZChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2Rh
dGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQsICprZXksIG1fdmFsdWUsIHJlY29yZElkZW50aWZp
ZXIuZ2V0KCkpOworICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2VzcykgeworICAgICAgICBtX2Nh
bGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBiYWNraW5nIHN0b3JlIGVycm9y
IHBlcmZvcm1pbmcgcHV0L2FkZC4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsraSkgeworICAgICAg
ICBJREJJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7Cisg
ICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgp
LCAqbV9iYWNraW5nU3RvcmUsIG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCk7CisgICAgfQorCisgICAgaWYgKG1f
b2JqZWN0U3RvcmUuYXV0b0luY3JlbWVudCAmJiBtX3B1dE1vZGUgIT0gSURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlOjpDdXJzb3JVcGRhdGUgJiYga2V5LT50eXBlKCkgPT0gSURCS2V5OjpOdW1i
ZXJUeXBlKSB7CisgICAgICAgIGJvb2wgb2sgPSBtX2JhY2tpbmdTdG9yZS0+dXBkYXRlS2V5R2Vu
ZXJhdG9yKCptX3RyYW5zYWN0aW9uLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQsICpr
ZXksICFrZXlXYXNHZW5lcmF0ZWQpOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICBt
X2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHVwZGF0aW5nIGtleSBnZW5l
cmF0b3IuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAg
bV9jYWxsYmFja3MtPm9uU3VjY2VzcyhrZXkucmVsZWFzZSgpKTsKK30KKwordm9pZCBTZXRJbmRl
eGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0oKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiU2V0
SW5kZXhlc1JlYWR5T3BlcmF0aW9uIik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2lu
ZGV4Q291bnQ7ICsraSkKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVQcmVlbXB0
aXZlRXZlbnQoKTsKK30KKwordm9pZCBPcGVuQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKCkKK3sK
KyAgICBMT0coU3RvcmFnZUFQSSwgIk9wZW5DdXJzb3JPcGVyYXRpb24iKTsKKworICAgIC8vIFRo
ZSBmcm9udGVuZCBoYXMgYmVndW4gaW5kZXhpbmcsIHNvIHRoaXMgcGF1c2VzIHRoZSB0cmFuc2Fj
dGlvbgorICAgIC8vIHVudGlsIHRoZSBpbmRleGluZyBpcyBjb21wbGV0ZS4gVGhpcyBjYW4ndCBo
YXBwZW4gYW55IGVhcmxpZXIKKyAgICAvLyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gc3dpdGNo
IHRvIGVhcmx5IG1vZGUgaW4gY2FzZSBtdWx0aXBsZQorICAgIC8vIGluZGV4ZXMgYXJlIGJlaW5n
IGNyZWF0ZWQgaW4gYSByb3csIHdpdGggcHV0KCkncyBpbiBiZXR3ZWVuLgorICAgIGlmIChtX3Rh
c2tUeXBlID09IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHJlZW1wdGl2ZVRhc2spCisg
ICAgICAgIG1fdHJhbnNhY3Rpb24tPmFkZFByZWVtcHRpdmVFdmVudCgpOworCisgICAgUmVmUHRy
PElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3I7Cisg
ICAgaWYgKG1faW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAg
ICAgQVNTRVJUKG1fY3Vyc29yVHlwZSAhPSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOworICAg
ICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3Jl
Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJh
c2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2tleVJhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fdGFza1R5cGUgPT0gSURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlOjpOb3JtYWxUYXNrKTsKKyAgICAgICAgaWYgKG1fY3Vyc29yVHlwZSA9PSBJ
bmRleGVkREI6OkN1cnNvcktleU9ubHkpCisgICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3Ig
PSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2lu
ZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIG1fZGlyZWN0aW9uKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEN1
cnNvcihtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNl
SWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBtX2RpcmVj
dGlvbik7CisgICAgfQorCisgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAgICAg
bV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPigwKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6
OlRhc2tUeXBlIHRhc2tUeXBlKHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZTo6VGFza1R5cGU+KG1fdGFza1R5cGUpKTsKKworICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlPiBjdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5jcmVhdGVDdXJzb3JCYWNrZW5kKCpi
YWNraW5nU3RvcmVDdXJzb3IsIG1fY3Vyc29yVHlwZSwgdGFza1R5cGUsIG1fb2JqZWN0U3RvcmVJ
ZCk7CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhjdXJzb3IsIGN1cnNvci0+a2V5KCksIGN1
cnNvci0+cHJpbWFyeUtleSgpLCBjdXJzb3ItPnZhbHVlKCkpOworfQorCit2b2lkIENvdW50T3Bl
cmF0aW9uOjpwZXJmb3JtKCkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkNvdW50T3BlcmF0aW9u
Iik7CisgICAgdWludDMyX3QgY291bnQgPSAwOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVJ
bnRlcmZhY2U6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yOworCisgICAgaWYgKG1faW5kZXhJ
ZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpCisgICAgICAgIGJhY2tpbmdTdG9yZUN1
cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IobV90cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0
b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAgZWxz
ZQorICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4
S2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0
YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIElu
ZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAg
ICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcyhjb3VudCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBkbyB7CisgICAgICAgICsrY291bnQ7CisgICAgfSB3aGlsZSAoYmFja2luZ1N0
b3JlQ3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKKworICAgIG1fY2FsbGJhY2tzLT5vblN1
Y2Nlc3MoY291bnQpOworfQorCit2b2lkIERlbGV0ZVJhbmdlT3BlcmF0aW9uOjpwZXJmb3JtKCkK
K3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkRlbGV0ZVJhbmdlT3BlcmF0aW9uIik7CisgICAgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3Ig
PSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKG1fdHJhbnNhY3Rpb24tPmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBt
X2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5leHQpOworICAgIGlmIChiYWNraW5n
U3RvcmVDdXJzb3IpIHsKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKCFtX2JhY2tpbmdT
dG9yZS0+ZGVsZXRlUmVjb3JkKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBiYWNraW5nU3RvcmVDdXJzb3ItPnJl
Y29yZElkZW50aWZpZXIoKSkpIHsKKyAgICAgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25F
cnJvciwgIkVycm9yIGRlbGV0aW5nIGRhdGEgaW4gcmFuZ2UiKSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChiYWNraW5nU3RvcmVDdXJz
b3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOworICAgIH0KKworICAgIG1fY2FsbGJhY2tzLT5vblN1
Y2Nlc3MoKTsKK30KKwordm9pZCBDbGVhck9wZXJhdGlvbjo6cGVyZm9ybSgpCit7CisgICAgTE9H
KFN0b3JhZ2VBUEksICJPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uIik7CisgICAgaWYgKCFtX2Jh
Y2tpbmdTdG9yZS0+Y2xlYXJPYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCkpIHsKKyAgICAgICAg
bV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJFcnJvciBjbGVhcmluZyBvYmplY3Qgc3RvcmUiKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwor
fQorCit2b2lkIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKCkKK3sKKyAgICBM
T0coU3RvcmFnZUFQSSwgIkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7CisgICAgYm9vbCBv
ayA9IG1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmlkKCksIG1f
b2JqZWN0U3RvcmVNZXRhZGF0YS5pZCk7CisgICAgaWYgKCFvaykgeworICAgICAgICBSZWZQdHI8
SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVy
cm9yIGRlbGV0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5u
YW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3Ip
OworICAgIH0KK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdl
T3BlcmF0aW9uOjpwZXJmb3JtKCkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIlZlcnNpb25DaGFu
Z2VPcGVyYXRpb24iKTsKKyAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UmIGRhdGFiYXNl
ID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBk
YXRhYmFzZS5pZCgpOworICAgIHVpbnQ2NF90IG9sZFZlcnNpb24gPSBkYXRhYmFzZS5tZXRhZGF0
YSgpLnZlcnNpb247CisKKyAgICAvLyBGSVhNRTogRGF0YWJhc2UgdmVyc2lvbnMgYXJlIG5vdyBv
ZiB0eXBlIHVpbnQ2NF90LCBidXQgdGhpcyBjb2RlIGV4cGVjdGVkIGludDY0X3QuCisgICAgQVNT
RVJUKG1fdmVyc2lvbiA+IChpbnQ2NF90KW9sZFZlcnNpb24pOworICAgIGRhdGFiYXNlLnNldEN1
cnJlbnRWZXJzaW9uKG1fdmVyc2lvbik7CisgICAgaWYgKCFkYXRhYmFzZS5iYWNraW5nU3RvcmUo
KS0+dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQsIGRhdGFiYXNlLm1ldGFkYXRhKCkudmVyc2lvbikp
IHsKKyAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJFcnJvciB3
cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2Ugd2hlbiB1cGRhdGluZyB2ZXJzaW9uLiIpOwor
ICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihlcnJvcik7CisgICAgICAgIG1fdHJhbnNhY3Rp
b24tPmFib3J0KGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQoIWRh
dGFiYXNlLmhhc1BlbmRpbmdTZWNvbmRIYWxmT3BlbigpKTsKKyAgICBkYXRhYmFzZS5zZXRQZW5k
aW5nU2Vjb25kSGFsZk9wZW4oSURCUGVuZGluZ09wZW5DYWxsOjpjcmVhdGUoKm1fY2FsbGJhY2tz
LCAqbV9kYXRhYmFzZUNhbGxiYWNrcywgbV90cmFuc2FjdGlvbklkLCBtX3ZlcnNpb24pKTsKKyAg
ICBtX2NhbGxiYWNrcy0+b25VcGdyYWRlTmVlZGVkKG9sZFZlcnNpb24sICZkYXRhYmFzZSwgZGF0
YWJhc2UubWV0YWRhdGEoKSk7Cit9CisKK3ZvaWQgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJh
dGlvbjo6cGVyZm9ybSgpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJDcmVhdGVPYmplY3RTdG9y
ZUFib3J0T3BlcmF0aW9uIik7CisgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5yZW1vdmVP
YmplY3RTdG9yZShtX29iamVjdFN0b3JlSWQpOworfQorCit2b2lkIERlbGV0ZU9iamVjdFN0b3Jl
QWJvcnRPcGVyYXRpb246OnBlcmZvcm0oKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiRGVsZXRl
T2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiIpOworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCkuYWRkT2JqZWN0U3RvcmUobV9vYmplY3RTdG9yZU1ldGFkYXRhLCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhOjpJbnZhbGlkSWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZl
cnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSgpCit7CisgICAgTE9HKFN0b3JhZ2VB
UEksICJWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb24iKTsKKyAgICBtX3RyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpLnNldEN1cnJlbnRWZXJzaW9uKG1fcHJldmlvdXNJbnRWZXJzaW9uKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNDQzYjZlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaApA
QCAtMCwwICsxLDQ0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kT3BlcmF0aW9uc19oCisjZGVmaW5lIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnNf
aAorCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQk9w
ZXJhdGlvbi5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIgor
CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJ
bnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2Jq
ZWN0U3RvcmVNZXRhZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3Jl
YXRlT2JqZWN0U3RvcmVPcGVyYXRpb24odHJhbnNhY3Rpb24sIGJhY2tpbmdTdG9yZSwgb2JqZWN0
U3RvcmVNZXRhZGF0YSkpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIE9WRVJS
SURFIEZJTkFMOworcHJpdmF0ZToKKyAgICBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJ
bnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2Jq
ZWN0U3RvcmVNZXRhZGF0YSkKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQor
ICAgICAgICAsIG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX29iamVj
dFN0b3JlTWV0YWRhdGEob2JqZWN0U3RvcmVNZXRhZGF0YSkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247
CisgICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUludGVyZmFjZT4gbV9iYWNraW5nU3Rv
cmU7CisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlTWV0YWRh
dGE7Cit9OworCitjbGFzcyBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJP
cGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4g
Y3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQkJh
Y2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBjb25zdCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwgYmFja2luZ1N0
b3JlLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtKCkgT1ZFUlJJREUgRklOQUw7Citwcml2YXRlOgorICAgIERlbGV0ZU9iamVjdFN0b3JlT3Bl
cmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQkJh
Y2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBjb25zdCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJh
bnNhY3Rpb24pCisgICAgICAgICwgbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAg
ICAsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YShvYmplY3RTdG9yZU1ldGFkYXRhKQorICAgIHsKKyAg
ICB9CisKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5z
YWN0aW9uOworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U+IG1fYmFj
a2luZ1N0b3JlOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9y
ZU1ldGFkYXRhOworfTsKKworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNo
YW5nZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogdHJhbnNhY3Rpb24sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJz
aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgVmVyc2lvbkNoYW5nZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwgdHJhbnNh
Y3Rpb25JZCwgdmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcykpOworICAgIH0K
KyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIE9WRVJSSURFIEZJTkFMOworcHJpdmF0ZToKKyAg
ICBWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9uLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2Fs
bGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5z
YWN0aW9uKQorICAgICAgICAsIG1fdHJhbnNhY3Rpb25JZCh0cmFuc2FjdGlvbklkKQorICAgICAg
ICAsIG1fdmVyc2lvbih2ZXJzaW9uKQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykK
KyAgICAgICAgLCBtX2RhdGFiYXNlQ2FsbGJhY2tzKGRhdGFiYXNlQ2FsbGJhY2tzKQorICAgIHsK
KyAgICB9CisKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3Ry
YW5zYWN0aW9uOworICAgIGludDY0X3QgbV90cmFuc2FjdGlvbklkOworICAgIGludDY0X3QgbV92
ZXJzaW9uOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworICAgIFJlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gbV9kYXRhYmFzZUNhbGxiYWNrczsKK307CisKK2NsYXNz
IENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZU9iamVjdFN0
b3JlQWJvcnRPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQpKTsKKyAgICB9Cisg
ICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKK3ByaXZhdGU6CisgICAg
Q3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCisgICAgICAgIDogbV90
cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0
U3RvcmVJZCkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3Rv
cmVJZDsKK307CisKK2NsYXNzIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24gOiBwdWJs
aWMgSURCT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVy
YXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9u
LCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbih0
cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmUpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZv
cm0oKSBPVkVSUklERSBGSU5BTDsKK3ByaXZhdGU6CisgICAgRGVsZXRlT2JqZWN0U3RvcmVBYm9y
dE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQorICAgICAg
ICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAgICwgbV9vYmplY3RTdG9yZU1l
dGFkYXRhKG9iamVjdFN0b3JlTWV0YWRhdGEpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247CisgICAgSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlTWV0YWRhdGE7Cit9OworCitjbGFzcyBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb24gOiBwdWJsaWMg
SURCT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRp
b24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBj
b25zdCBTdHJpbmcmIHByZXZpb3VzVmVyc2lvbiwgaW50NjRfdCBwcmV2aW91c0ludFZlcnNpb24p
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFZlcnNpb25DaGFuZ2VBYm9ydE9w
ZXJhdGlvbih0cmFuc2FjdGlvbiwgcHJldmlvdXNWZXJzaW9uLCBwcmV2aW91c0ludFZlcnNpb24p
KTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKK3By
aXZhdGU6CisgICAgVmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIGNvbnN0IFN0cmluZyYgcHJldmlvdXNWZXJzaW9u
LCBpbnQ2NF90IHByZXZpb3VzSW50VmVyc2lvbikKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRy
YW5zYWN0aW9uKQorICAgICAgICAsIG1fcHJldmlvdXNWZXJzaW9uKHByZXZpb3VzVmVyc2lvbikK
KyAgICAgICAgLCBtX3ByZXZpb3VzSW50VmVyc2lvbihwcmV2aW91c0ludFZlcnNpb24pCisgICAg
eworICAgIH0KKworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1f
dHJhbnNhY3Rpb247CisgICAgU3RyaW5nIG1fcHJldmlvdXNWZXJzaW9uOworICAgIGludDY0X3Qg
bV9wcmV2aW91c0ludFZlcnNpb247Cit9OworCitjbGFzcyBDcmVhdGVJbmRleE9wZXJhdGlvbiA6
IHB1YmxpYyBJREJPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElE
Qk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNh
Y3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZUluZGV4T3BlcmF0aW9uKHRyYW5z
YWN0aW9uLCBiYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKKyAg
ICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKK3ByaXZhdGU6
CisgICAgQ3JlYXRlSW5kZXhPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0
YSkKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQorICAgICAgICAsIG1fYmFj
a2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0
U3RvcmVJZCkKKyAgICAgICAgLCBtX2luZGV4TWV0YWRhdGEoaW5kZXhNZXRhZGF0YSkKKyAgICB7
CisgICAgfQorCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV90
cmFuc2FjdGlvbjsKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlPiBt
X2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBj
b25zdCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKK307CisKK2NsYXNzIENyZWF0
ZUluZGV4QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlSW5k
ZXhBYm9ydE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCkpOwor
ICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIE9WRVJSSURFIEZJTkFMOworcHJpdmF0
ZToKKyAgICBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAgICwgbV9v
YmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElkKGluZGV4SWQp
CisgICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3Jl
SWQ7CisgICAgY29uc3QgaW50NjRfdCBtX2luZGV4SWQ7Cit9OworCitjbGFzcyBEZWxldGVJbmRl
eE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3Jl
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0
YWRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZUluZGV4T3Bl
cmF0aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0
YWRhdGEpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5B
TDsKK3ByaXZhdGU6CisgICAgRGVsZXRlSW5kZXhPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNr
aW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYg
aW5kZXhNZXRhZGF0YSkKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQorICAg
ICAgICAsIG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX29iamVjdFN0
b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2luZGV4TWV0YWRhdGEoaW5kZXhNZXRh
ZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3Rv
cmVJZDsKKyAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKK307CisK
K2NsYXNzIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24odHJhbnNh
Y3Rpb24sIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKKyAgICB9CisgICAgdmlydHVh
bCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKK3ByaXZhdGU6CisgICAgRGVsZXRlSW5k
ZXhBYm9ydE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4
TWV0YWRhdGEpCisgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAgICAg
LCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2luZGV4TWV0YWRh
dGEoaW5kZXhNZXRhZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKKyAgICBjb25zdCBpbnQ2NF90IG1f
b2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0
YTsKK307CisKK2NsYXNzIEdldE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24geworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVy
ZmFjZSogYmFja2luZ1N0b3JlLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgR2V0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUsIG1ldGFkYXRh
LCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY3Vyc29yVHlwZSwgY2FsbGJhY2tz
KSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7Citw
cml2YXRlOgorICAgIEdldE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgY29u
c3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhl
ZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCisgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAgICAgLCBt
X2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9kYXRhYmFzZUlkKG1ldGFk
YXRhLmlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICAg
ICAsIG1faW5kZXhJZChpbmRleElkKQorICAgICAgICAsIG1fa2V5UGF0aChtZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmtleVBhdGgpCisgICAgICAgICwgbV9hdXRvSW5j
cmVtZW50KG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCkuYXV0b0luY3Jl
bWVudCkKKyAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQorICAgICAgICAsIG1fY3Vyc29y
VHlwZShjdXJzb3JUeXBlKQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7
CisgICAgICAgIEFTU0VSVChtZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3Rv
cmVJZCkpOworICAgICAgICBBU1NFUlQobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RT
dG9yZUlkKS5pZCA9PSBvYmplY3RTdG9yZUlkKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0aW9uOworICAgIGNvbnN0IFJlZlB0
cjxJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U+IG1fYmFja2luZ1N0b3JlOworICAgIGNvbnN0IGlu
dDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwor
ICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElkOworICAgIGNvbnN0IElEQktleVBhdGggbV9rZXlQ
YXRoOworICAgIGNvbnN0IGJvb2wgbV9hdXRvSW5jcmVtZW50OworICAgIGNvbnN0IFJlZlB0cjxJ
REJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKKyAgICBjb25zdCBJbmRleGVkREI6OkN1cnNvclR5cGUg
bV9jdXJzb3JUeXBlOworICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tz
OworfTsKKworY2xhc3MgUHV0T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJm
YWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwg
UGFzc1JlZlB0cjxJREJLZXk+IGtleSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQdXRN
b2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZl
Y3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtl
eXMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFB1dE9wZXJhdGlvbih0cmFu
c2FjdGlvbiwgYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtl
eSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBpbmRleElkcywgaW5kZXhLZXlzKSk7CisgICAgfQorICAg
IHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7Citwcml2YXRlOgorICAgIFB1
dE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJ
REJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlk
LCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+JiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3Rv
cjxJbmRleEtleXM+JiBpbmRleEtleXMpCisgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2Fj
dGlvbikKKyAgICAgICAgLCBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwg
bV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCisgICAgICAgICwgbV9vYmplY3RTdG9yZShvYmplY3RT
dG9yZSkKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgICAgICAsIG1fa2V5KGtleSkKKyAg
ICAgICAgLCBtX3B1dE1vZGUocHV0TW9kZSkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFj
a3MpCisgICAgICAgICwgbV9pbmRleElkcyhpbmRleElkcykKKyAgICAgICAgLCBtX2luZGV4S2V5
cyhpbmRleEtleXMpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247CisgICAgY29uc3QgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZT4gbV9iYWNraW5nU3RvcmU7CisgICAgY29uc3QgaW50NjRfdCBtX2Rh
dGFiYXNlSWQ7CisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3Jl
OworICAgIGNvbnN0IFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fdmFsdWU7CisgICAgY29uc3QgUmVm
UHRyPElEQktleT4gbV9rZXk7CisgICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNl
OjpQdXRNb2RlIG1fcHV0TW9kZTsKKyAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2Nh
bGxiYWNrczsKKyAgICBjb25zdCBWZWN0b3I8aW50NjRfdD4gbV9pbmRleElkczsKKyAgICBjb25z
dCBWZWN0b3I8SW5kZXhLZXlzPiBtX2luZGV4S2V5czsKK307CisKK2NsYXNzIFNldEluZGV4ZXNS
ZWFkeU9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogdHJhbnNhY3Rpb24sIHNpemVfdCBpbmRleENvdW50KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24odHJhbnNhY3Rpb24s
IGluZGV4Q291bnQpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklE
RSBGSU5BTDsKK3ByaXZhdGU6CisgICAgU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIHNpemVfdCBpbmRleENvdW50KQor
ICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAgICwgbV9pbmRleENv
dW50KGluZGV4Q291bnQpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247CisgICAgY29uc3Qgc2l6ZV90IG1faW5k
ZXhDb3VudDsKK307CisKK2NsYXNzIE9wZW5DdXJzb3JPcGVyYXRpb24gOiBwdWJsaWMgSURCT3Bl
cmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNy
ZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJCYWNr
aW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgSW5kZXhl
ZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6
VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9wZW5DdXJzb3JPcGVyYXRpb24odHJh
bnNhY3Rpb24sIGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJ
ZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgdGFza1R5cGUsIGNhbGxiYWNrcykp
OworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIE9WRVJSSURFIEZJTkFMOworcHJp
dmF0ZToKKyAgICBPcGVuQ3Vyc29yT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3Jl
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JE
aXJlY3Rpb24gZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0
aW9uKQorICAgICAgICAsIG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBt
X2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0
U3RvcmVJZCkKKyAgICAgICAgLCBtX2luZGV4SWQoaW5kZXhJZCkKKyAgICAgICAgLCBtX2tleVJh
bmdlKGtleVJhbmdlKQorICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKKyAgICAgICAg
LCBtX2N1cnNvclR5cGUoY3Vyc29yVHlwZSkKKyAgICAgICAgLCBtX3Rhc2tUeXBlKHRhc2tUeXBl
KQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKKyAg
ICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZTsK
KyAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2Jq
ZWN0U3RvcmVJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsKKyAgICBjb25zdCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOworICAgIGNvbnN0IEluZGV4ZWREQjo6Q3Vy
c29yRGlyZWN0aW9uIG1fZGlyZWN0aW9uOworICAgIGNvbnN0IEluZGV4ZWREQjo6Q3Vyc29yVHlw
ZSBtX2N1cnNvclR5cGU7CisgICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpU
YXNrVHlwZSBtX3Rhc2tUeXBlOworICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2Fs
bGJhY2tzOworfTsKKworY2xhc3MgQ291bnRPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9u
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3Rv
cmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IENvdW50T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5n
U3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBjYWxs
YmFja3MpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5B
TDsKK3ByaXZhdGU6CisgICAgQ291bnRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3Rv
cmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24p
CisgICAgICAgICwgbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAsIG1fZGF0
YWJhc2VJZChkYXRhYmFzZUlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9y
ZUlkKQorICAgICAgICAsIG1faW5kZXhJZChpbmRleElkKQorICAgICAgICAsIG1fa2V5UmFuZ2Uo
a2V5UmFuZ2UpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9
CisKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0
aW9uOworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U+IG1fYmFja2lu
Z1N0b3JlOworICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGNvbnN0IGludDY0
X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElkOworICAgIGNv
bnN0IFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKKyAgICBjb25zdCBSZWZQdHI8SURC
Q2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK2NsYXNzIERlbGV0ZVJhbmdlT3BlcmF0aW9u
IDogcHVibGljIElEQk9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8
SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFu
c2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlUmFuZ2VPcGVyYXRpb24odHJhbnNhY3Rp
b24sIGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5UmFuZ2UsIGNh
bGxiYWNrcykpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIE9WRVJSSURFIEZJ
TkFMOworcHJpdmF0ZToKKyAgICBEZWxldGVSYW5nZU9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJh
Y2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAg
ICwgbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAsIG1fZGF0YWJhc2VJZChk
YXRhYmFzZUlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAg
ICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJh
Y2tzKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPiBtX3RyYW5zYWN0aW9uOworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmVJ
bnRlcmZhY2U+IG1fYmFja2luZ1N0b3JlOworICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlk
OworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IFJlZlB0cjxJ
REJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKKyAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBt
X2NhbGxiYWNrczsKK307CisKK2NsYXNzIENsZWFyT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJh
dGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVh
dGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2lu
Z1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDbGVhck9wZXJhdGlvbih0cmFuc2FjdGlv
biwgYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBjYWxsYmFja3MpKTsK
KyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKK3ByaXZh
dGU6CisgICAgQ2xlYXJPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0
cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisg
ICAgICAgICwgbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAsIG1fZGF0YWJh
c2VJZChkYXRhYmFzZUlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlk
KQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKKyAg
ICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZTsK
KyAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2Jq
ZWN0U3RvcmVJZDsKKyAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQorI2VuZGlmIC8vIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnNfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJD
dXJzb3JCYWNrZW5kTGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRMZXZlbERCLmNwcAppbmRleCA4NTAyNjEyLi5mZTE2
OGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQkN1cnNvckJhY2tlbmRMZXZlbERCLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRMZXZlbERCLmNwcApAQCAtMzYsNyAr
MzYsNiBAQAogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSURC
S2V5UmFuZ2UuaCIKICNpbmNsdWRlICJJREJPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJJREJUcmFu
c2FjdGlvbkJhY2tlbmRMZXZlbERCLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRMZXZlbERCLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRMZXZlbERCLmgKaW5k
ZXggZWQxZjczOC4uMmFjMDJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQ3Vyc29yQmFja2VuZExldmVsREIu
aApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUxldmVsREIuaCIK
ICNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REIuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5jcHAKaW5k
ZXggZDU0MWFjYS4uYTFjYzRiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZl
bERCLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRMZXZl
bERCLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklE
QkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2
ZWxEQi5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKICNpbmNsdWRl
ICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBAIC0xOTQsNyArMTk0LDcgQEAgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQjo6
bWF5YmVDcmVhdGUKICAgICBpZiAoIWJhY2tlbmQtPmlzSURCRGF0YWJhc2VCYWNrZW5kSW1wbCgp
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCOjpjcmVhdGUoc3RhdGljX2Nhc3Q8SURCRGF0YWJhc2VCYWNrZW5kSW1wbCo+KGJhY2tl
bmQpLCB0cmFuc2FjdGlvbklkLCBkYXRhYmFzZUNhbGxiYWNrcywgb2JqZWN0U3RvcmVJZHMsIG1v
ZGUpOworICAgIHJldHVybiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUoc3RhdGlj
X2Nhc3Q8SURCRGF0YWJhc2VCYWNrZW5kSW1wbCo+KGJhY2tlbmQpLCB0cmFuc2FjdGlvbklkLCBk
YXRhYmFzZUNhbGxiYWNrcywgb2JqZWN0U3RvcmVJZHMsIG1vZGUpOwogfQogCiBQYXNzUmVmUHRy
PElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQjo6Y3Jl
YXRlQ3Vyc29yQmFja2VuZChJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UmIHRyYW5zYWN0
aW9uQmFja2VuZCwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpDdXJzb3ImIGJhY2tpbmdTdG9y
ZUN1cnNvciwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2JmNTQyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
Qi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmgiCi0KLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCi0KLSNpbmNsdWRlICJJ
REJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURC
RGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZS5oIgotI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQk9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gSURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQjo6Y3JlYXRlKElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlQmFj
a2VuZCwgaW50NjRfdCBpZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRy
YW5zYWN0aW9uTW9kZSBtb2RlKQotewotICAgIEhhc2hTZXQ8aW50NjRfdD4gb2JqZWN0U3RvcmVI
YXNoU2V0OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U3RvcmVJZHMuc2l6ZSgp
OyArK2kpCi0gICAgICAgIG9iamVjdFN0b3JlSGFzaFNldC5hZGQob2JqZWN0U3RvcmVJZHNbaV0p
OwotCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
KGRhdGFiYXNlQmFja2VuZCwgaWQsIGNhbGxiYWNrcywgb2JqZWN0U3RvcmVIYXNoU2V0LCBtb2Rl
KSk7Ci19Ci0KLUlEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZExldmVsREIoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2VCYWNrZW5kLCBpbnQ2
NF90IGlkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0
IEhhc2hTZXQ8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZSBtb2RlKQotICAgIDogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKGlkKQotICAg
ICwgbV9vYmplY3RTdG9yZUlkcyhvYmplY3RTdG9yZUlkcykKLSAgICAsIG1fbW9kZShtb2RlKQot
ICAgICwgbV9zdGF0ZShVbnVzZWQpCi0gICAgLCBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCi0gICAg
LCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgLCBtX2RhdGFiYXNlKGRhdGFiYXNlQmFja2Vu
ZCkKLSAgICAsIG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oZGF0YWJhc2VCYWNrZW5kLT5iYWNr
aW5nU3RvcmUoKS0+Y3JlYXRlQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSkKLSAgICAsIG1fdGFz
a1RpbWVyKHRoaXMsICZJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjp0YXNrVGltZXJGaXJl
ZCkKLSAgICAsIG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMoMCkKLSAgICAsIG1fYmFja2luZ1N0
b3JlKGRhdGFiYXNlQmFja2VuZC0+YmFja2luZ1N0b3JlKCkpCi17Ci0gICAgLy8gV2UgcGFzcyBh
IHJlZmVyZW5jZSBvZiB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFkb3B0ZWQuCi0gICAg
cmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7Ci0KLSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlv
bkNvb3JkaW5hdG9yKCktPmRpZENyZWF0ZVRyYW5zYWN0aW9uKHRoaXMpOwotfQotCi1JREJUcmFu
c2FjdGlvbkJhY2tlbmRMZXZlbERCOjp+SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQigpCi17
Ci0gICAgLy8gSXQgc2hvdWxkbid0IGJlIHBvc3NpYmxlIGZvciB0aGlzIG9iamVjdCB0byBnZXQg
ZGVsZXRlZCB1bnRpbCBpdCdzIGVpdGhlciBjb21wbGV0ZSBvciBhYm9ydGVkLgotICAgIEFTU0VS
VChtX3N0YXRlID09IEZpbmlzaGVkKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCOjpzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlw
ZSB0eXBlLCBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gdGFzaywgUGFzc093blB0cjxJREJPcGVy
YXRpb24+IGFib3J0VGFzaykKLXsKLSAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKHR5cGUgPT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNl
OjpOb3JtYWxUYXNrKQotICAgICAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQodGFzayk7Ci0gICAgZWxz
ZQotICAgICAgICBtX3ByZWVtcHRpdmVUYXNrUXVldWUuYXBwZW5kKHRhc2spOwotCi0gICAgaWYg
KGFib3J0VGFzaykKLSAgICAgICAgbV9hYm9ydFRhc2tRdWV1ZS5wcmVwZW5kKGFib3J0VGFzayk7
Ci0KLSAgICBpZiAobV9zdGF0ZSA9PSBVbnVzZWQpCi0gICAgICAgIHN0YXJ0KCk7Ci0gICAgZWxz
ZSBpZiAobV9zdGF0ZSA9PSBSdW5uaW5nICYmICFtX3Rhc2tUaW1lci5pc0FjdGl2ZSgpKQotICAg
ICAgICBtX3Rhc2tUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rp
b25CYWNrZW5kTGV2ZWxEQjo6YWJvcnQoKQotewotICAgIGFib3J0KElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJy
b3IgKHVua25vd24gY2F1c2UpIikpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREI6OmFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCi17Ci0gICAg
TE9HKFN0b3JhZ2VBUEksICJJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjphYm9ydCIpOwot
ICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29s
IHdhc1J1bm5pbmcgPSBtX3N0YXRlID09IFJ1bm5pbmc7Ci0KLSAgICAvLyBUaGUgbGFzdCByZWZl
cmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1pbmcgdGhl
Ci0gICAgLy8gYWJvcnQgc3RlcHMgYmVsb3cuIFdlIHRoZXJlZm9yZSB0YWtlIGEgc2VsZiByZWZl
cmVuY2UgdG8ga2VlcCBvdXJzZWx2ZXMKLSAgICAvLyBhbGl2ZSB3aGlsZSBleGVjdXRpbmcgdGhp
cyBtZXRob2QuCi0gICAgUmVmPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IHByb3RlY3Qo
KnRoaXMpOwotCi0gICAgbV9zdGF0ZSA9IEZpbmlzaGVkOwotICAgIG1fdGFza1RpbWVyLnN0b3Ao
KTsKLQotICAgIGlmICh3YXNSdW5uaW5nKQotICAgICAgICBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uLT5yb2xsYmFjaygpOwotCi0gICAgLy8gUnVuIHRoZSBhYm9ydCB0YXNrcywgaWYgYW55Lgot
ICAgIHdoaWxlICghbV9hYm9ydFRhc2tRdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgT3duUHRy
PElEQk9wZXJhdGlvbj4gdGFzayhtX2Fib3J0VGFza1F1ZXVlLnRha2VGaXJzdCgpKTsKLSAgICAg
ICAgdGFzay0+cGVyZm9ybSgpOwotICAgIH0KLQotICAgIC8vIEJhY2tpbmcgc3RvcmUgcmVzb3Vy
Y2VzIChoZWxkIHZpYSBjdXJzb3JzKSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBzY3JpcHQgY2Fs
bGJhY2tzCi0gICAgLy8gYXJlIGZpcmVkLCBhcyB0aGUgc2NyaXB0IGNhbGxiYWNrcyBtYXkgcmVs
ZWFzZSByZWZlcmVuY2VzIGFuZCBhbGxvdyB0aGUgYmFja2luZyBzdG9yZQotICAgIC8vIGl0c2Vs
ZiB0byBiZSByZWxlYXNlZCwgYW5kIG9yZGVyIGlzIGNyaXRpY2FsLgotICAgIGNsb3NlT3BlbkN1
cnNvcnMoKTsKLSAgICBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLT5yZXNldFRyYW5zYWN0aW9u
KCk7Ci0KLSAgICAvLyBUcmFuc2FjdGlvbnMgbXVzdCBhbHNvIGJlIG1hcmtlZCBhcyBjb21wbGV0
ZWQgYmVmb3JlIHRoZSBmcm9udC1lbmQgaXMgbm90aWZpZWQsIGFzCi0gICAgLy8gdGhlIHRyYW5z
YWN0aW9uIGNvbXBsZXRpb24gdW5ibG9ja3Mgb3BlcmF0aW9ucyBsaWtlIGNsb3NpbmcgY29ubmVj
dGlvbnMuCi0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRGaW5p
c2hUcmFuc2FjdGlvbih0aGlzKTsKLSAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IoKS0+aXNBY3RpdmUodGhpcykpOwotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0
aW9uRmluaXNoZWQodGhpcyk7Ci0KLSAgICBpZiAobV9jYWxsYmFja3MpCi0gICAgICAgIG1fY2Fs
bGJhY2tzLT5vbkFib3J0KGlkKCksIGVycm9yKTsKLQotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0
aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVkKHRoaXMpOwotCi0gICAgbV9kYXRhYmFzZSA9IDA7Ci19
Ci0KLWJvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6aXNUYXNrUXVldWVFbXB0eSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJlZW1wdGl2ZVRhc2tRdWV1ZS5pc0VtcHR5KCkgJiYg
bV90YXNrUXVldWUuaXNFbXB0eSgpOwotfQotCi1ib29sIElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREI6Omhhc1BlbmRpbmdUYXNrcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGVuZGluZ1By
ZWVtcHRpdmVFdmVudHMgfHwgIWlzVGFza1F1ZXVlRW1wdHkoKTsKLX0KLQotdm9pZCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRMZXZlbERCOjpyZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZSogY3Vyc29yKQotewotICAgIG1fb3BlbkN1cnNvcnMuYWRkKGN1cnNvcik7Ci19
Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6dW5yZWdpc3Rlck9wZW5DdXJz
b3IoSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZSogY3Vyc29yKQotewotICAgIG1fb3BlbkN1cnNv
cnMucmVtb3ZlKGN1cnNvcik7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
Qjo6cnVuKCkKLXsKLSAgICAvLyBUcmFuc2FjdGlvbkNvb3JkaW5hdG9yIGhhcyBzdGFydGVkIHRo
aXMgdHJhbnNhY3Rpb24uIFNjaGVkdWxlIGEgdGltZXIKLSAgICAvLyB0byBwcm9jZXNzIHRoZSBm
aXJzdCB0YXNrLgotICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXJ0UGVuZGluZyB8fCBtX3N0YXRl
ID09IFJ1bm5pbmcpOwotICAgIEFTU0VSVCghbV90YXNrVGltZXIuaXNBY3RpdmUoKSk7Ci0KLSAg
ICBtX3Rhc2tUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQjo6c3RhcnQoKQotewotICAgIEFTU0VSVChtX3N0YXRlID09IFVudXNlZCk7
Ci0KLSAgICBtX3N0YXRlID0gU3RhcnRQZW5kaW5nOwotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IoKS0+ZGlkU3RhcnRUcmFuc2FjdGlvbih0aGlzKTsKLSAgICBtX2RhdGFi
YXNlLT50cmFuc2FjdGlvblN0YXJ0ZWQodGhpcyk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQjo6Y29tbWl0KCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREI6OmNvbW1pdCIpOwotCi0gICAgLy8gSW4gbXVsdGlwcm9jZXNz
IHBvcnRzLCBmcm9udC1lbmQgbWF5IGhhdmUgcmVxdWVzdGVkIGEgY29tbWl0IGJ1dCBhbiBhYm9y
dCBoYXMgYWxyZWFkeQotICAgIC8vIGJlZW4gaW5pdGlhdGVkIGFzeW5jaHJvbm91c2x5IGJ5IHRo
ZSBiYWNrLWVuZC4KLSAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKG1fc3RhdGUgPT0gVW51c2VkIHx8IG1fc3RhdGUgPT0gUnVubmluZyk7
Ci0gICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKLQotICAgIC8vIEZyb250LWVuZCBoYXMgcmVx
dWVzdGVkIGEgY29tbWl0LCBidXQgdGhlcmUgbWF5IGJlIHRhc2tzIGxpa2UgY3JlYXRlSW5kZXgg
d2hpY2gKLSAgICAvLyBhcmUgY29uc2lkZXJlZCBzeW5jaHJvbm91cyBieSB0aGUgZnJvbnQtZW5k
IGJ1dCBhcmUgcHJvY2Vzc2VkIGFzeW5jaHJvbm91c2x5LgotICAgIGlmIChoYXNQZW5kaW5nVGFz
a3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRo
aXMgb2JqZWN0IG1heSBiZSByZWxlYXNlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZQotICAgIC8vIGNv
bW1pdCBzdGVwcyBiZWxvdy4gV2UgdGhlcmVmb3JlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBr
ZWVwIG91cnNlbHZlcwotICAgIC8vIGFsaXZlIHdoaWxlIGV4ZWN1dGluZyB0aGlzIG1ldGhvZC4K
LSAgICBSZWY8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gcHJvdGVjdCgqdGhpcyk7Ci0K
LSAgICBib29sIHVudXNlZCA9IG1fc3RhdGUgPT0gVW51c2VkOwotICAgIG1fc3RhdGUgPSBGaW5p
c2hlZDsKLQotICAgIGJvb2wgY29tbWl0dGVkID0gdW51c2VkIHx8IG1fYmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24tPmNvbW1pdCgpOwotCi0gICAgLy8gQmFja2luZyBzdG9yZSByZXNvdXJjZXMgKGhl
bGQgdmlhIGN1cnNvcnMpIG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHNjcmlwdCBjYWxsYmFja3MK
LSAgICAvLyBhcmUgZmlyZWQsIGFzIHRoZSBzY3JpcHQgY2FsbGJhY2tzIG1heSByZWxlYXNlIHJl
ZmVyZW5jZXMgYW5kIGFsbG93IHRoZSBiYWNraW5nIHN0b3JlCi0gICAgLy8gaXRzZWxmIHRvIGJl
IHJlbGVhc2VkLCBhbmQgb3JkZXIgaXMgY3JpdGljYWwuCi0gICAgY2xvc2VPcGVuQ3Vyc29ycygp
OwotICAgIG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24tPnJlc2V0VHJhbnNhY3Rpb24oKTsKLQot
ICAgIC8vIFRyYW5zYWN0aW9ucyBtdXN0IGFsc28gYmUgbWFya2VkIGFzIGNvbXBsZXRlZCBiZWZv
cmUgdGhlIGZyb250LWVuZCBpcyBub3RpZmllZCwgYXMKLSAgICAvLyB0aGUgdHJhbnNhY3Rpb24g
Y29tcGxldGlvbiB1bmJsb2NrcyBvcGVyYXRpb25zIGxpa2UgY2xvc2luZyBjb25uZWN0aW9ucy4K
LSAgICBpZiAoIXVudXNlZCkKLSAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGlu
YXRvcigpLT5kaWRGaW5pc2hUcmFuc2FjdGlvbih0aGlzKTsKLSAgICBtX2RhdGFiYXNlLT50cmFu
c2FjdGlvbkZpbmlzaGVkKHRoaXMpOwotCi0gICAgaWYgKGNvbW1pdHRlZCkgewotICAgICAgICBt
X2NhbGxiYWNrcy0+b25Db21wbGV0ZShpZCgpKTsKLSAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNh
Y3Rpb25GaW5pc2hlZEFuZENvbXBsZXRlRmlyZWQodGhpcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgbV9jYWxsYmFja3MtPm9uQWJvcnQoaWQoKSwgSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBjb21taXR0
aW5nIHRyYW5zYWN0aW9uLiIpKTsKLSAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5p
c2hlZEFuZEFib3J0RmlyZWQodGhpcyk7Ci0gICAgfQotCi0gICAgbV9kYXRhYmFzZSA9IDA7Ci19
Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6dGFza1RpbWVyRmlyZWQoVGlt
ZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4qKQotewotICAgIExPRyhTdG9yYWdlQVBJ
LCAiSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6dGFza1RpbWVyRmlyZWQiKTsKLSAgICBB
U1NFUlQoIWlzVGFza1F1ZXVlRW1wdHkoKSk7Ci0KLSAgICBpZiAobV9zdGF0ZSA9PSBTdGFydFBl
bmRpbmcpIHsKLSAgICAgICAgbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbi0+YmVnaW4oKTsKLSAg
ICAgICAgbV9zdGF0ZSA9IFJ1bm5pbmc7Ci0gICAgfQotCi0gICAgLy8gVGhlIGxhc3QgcmVmZXJl
bmNlIHRvIHRoaXMgb2JqZWN0IG1heSBiZSByZWxlYXNlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZQot
ICAgIC8vIHRhc2tzLiBUYWtlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVwIHRoaXMgb2Jq
ZWN0IGFsaXZlIHNvIHRoYXQKLSAgICAvLyB0aGUgbG9vcCB0ZXJtaW5hdGlvbiBjb25kaXRpb25z
IGNhbiBiZSBjaGVja2VkLgotICAgIFJlZjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiBw
cm90ZWN0KCp0aGlzKTsKLQotICAgIFRhc2tRdWV1ZSogdGFza1F1ZXVlID0gbV9wZW5kaW5nUHJl
ZW1wdGl2ZUV2ZW50cyA/ICZtX3ByZWVtcHRpdmVUYXNrUXVldWUgOiAmbV90YXNrUXVldWU7Ci0g
ICAgd2hpbGUgKCF0YXNrUXVldWUtPmlzRW1wdHkoKSAmJiBtX3N0YXRlICE9IEZpbmlzaGVkKSB7
Ci0gICAgICAgIEFTU0VSVChtX3N0YXRlID09IFJ1bm5pbmcpOwotICAgICAgICBPd25QdHI8SURC
T3BlcmF0aW9uPiB0YXNrKHRhc2tRdWV1ZS0+dGFrZUZpcnN0KCkpOwotICAgICAgICB0YXNrLT5w
ZXJmb3JtKCk7Ci0KLSAgICAgICAgLy8gRXZlbnQgaXRzZWxmIG1heSBjaGFuZ2Ugd2hpY2ggcXVl
dWUgc2hvdWxkIGJlIHByb2Nlc3NlZCBuZXh0LgotICAgICAgICB0YXNrUXVldWUgPSBtX3BlbmRp
bmdQcmVlbXB0aXZlRXZlbnRzID8gJm1fcHJlZW1wdGl2ZVRhc2tRdWV1ZSA6ICZtX3Rhc2tRdWV1
ZTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcGVuZGluZyB0YXNrcywgd2UgaGF2
ZW4ndCBhbHJlYWR5IGNvbW1pdHRlZC9hYm9ydGVkLAotICAgIC8vIGFuZCB0aGUgZnJvbnQtZW5k
IHJlcXVlc3RlZCBhIGNvbW1pdCwgaXQgaXMgbm93IHNhZmUgdG8gZG8gc28uCi0gICAgaWYgKCFo
YXNQZW5kaW5nVGFza3MoKSAmJiBtX3N0YXRlICE9IEZpbmlzaGVkICYmIG1fY29tbWl0UGVuZGlu
ZykKLSAgICAgICAgY29tbWl0KCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2
ZWxEQjo6Y2xvc2VPcGVuQ3Vyc29ycygpCi17Ci0gICAgZm9yIChIYXNoU2V0PElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2UqPjo6aXRlcmF0b3IgaSA9IG1fb3BlbkN1cnNvcnMuYmVnaW4oKTsgaSAh
PSBtX29wZW5DdXJzb3JzLmVuZCgpOyArK2kpCi0gICAgICAgICgqaSktPmNsb3NlKCk7Ci0gICAg
bV9vcGVuQ3Vyc29ycy5jbGVhcigpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREI6OnNjaGVkdWxlQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKLXsKLSAgICBzY2hlZHVsZVRhc2so
Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBtX2JhY2tpbmdTdG9yZS5n
ZXQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSksIENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRp
b246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZU1ldGFkYXRhLmlkKSk7Ci19Ci0KLXZvaWQgSURC
VHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6c2NoZWR1bGVEZWxldGVPYmplY3RTdG9yZU9wZXJh
dGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQot
ewotICAgIHNjaGVkdWxlVGFzayhEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKHRo
aXMsIG1fYmFja2luZ1N0b3JlLmdldCgpLCBvYmplY3RTdG9yZU1ldGFkYXRhKSwgRGVsZXRlT2Jq
ZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlTWV0YWRhdGEp
KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpzY2hlZHVsZVZlcnNp
b25DaGFuZ2VPcGVyYXRpb24oaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHJlcXVlc3Rl
ZFZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzLCBjb25zdCBJREJEYXRhYmFz
ZU1ldGFkYXRhJiBtZXRhZGF0YSkKLXsKLSAgICBzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHRyYW5zYWN0aW9u
SWQsIHJlcXVlc3RlZFZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpLCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0
aGlzLCBTdHJpbmc6Om51bWJlcihtZXRhZGF0YS52ZXJzaW9uKSwgbWV0YWRhdGEudmVyc2lvbikp
OwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OnNjaGVkdWxlQ3JlYXRl
SW5kZXhPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFk
YXRhJiBpbmRleE1ldGFkYXRhKQotewotICAgIHNjaGVkdWxlVGFzayhDcmVhdGVJbmRleE9wZXJh
dGlvbjo6Y3JlYXRlKHRoaXMsIG1fYmFja2luZ1N0b3JlLmdldCgpLCBvYmplY3RTdG9yZUlkLCBp
bmRleE1ldGFkYXRhKSwgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9i
amVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEuaWQpKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCOjpzY2hlZHVsZURlbGV0ZUluZGV4T3BlcmF0aW9uKGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKLXsKLSAg
ICBzY2hlZHVsZVRhc2soRGVsZXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBtX2JhY2tp
bmdTdG9yZS5nZXQoKSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSksIERlbGV0ZUluZGV4
QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRh
KSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6c2NoZWR1bGVHZXRP
cGVyYXRpb24oY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlS
YW5nZSwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgc2NoZWR1bGVUYXNrKEdldE9wZXJhdGlvbjo6Y3Jl
YXRlKHRoaXMsIG1fYmFja2luZ1N0b3JlLmdldCgpLCBtZXRhZGF0YSwgb2JqZWN0U3RvcmVJZCwg
aW5kZXhJZCwga2V5UmFuZ2UsIGN1cnNvclR5cGUsIGNhbGxiYWNrcykpOwotfQotCi12b2lkIElE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OnNjaGVkdWxlUHV0T3BlcmF0aW9uKGNvbnN0IElE
Qk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEsIFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgSURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJ
bmRleEtleXM+JiBpbmRleEtleXMpCi17Ci0gICAgc2NoZWR1bGVUYXNrKFB1dE9wZXJhdGlvbjo6
Y3JlYXRlKHRoaXMsIG1fYmFja2luZ1N0b3JlLmdldCgpLCBkYXRhYmFzZSgpLmlkKCksIG9iamVj
dFN0b3JlTWV0YWRhdGEsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgaW5kZXhJZHMs
IGluZGV4S2V5cykpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OnNj
aGVkdWxlU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHNpemVfdCBpbmRleENvdW50KQotewotICAg
IHNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlByZWVtcHRpdmVUYXNr
LCBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBpbmRleENvdW50KSk7Ci19
Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6c2NoZWR1bGVPcGVuQ3Vyc29y
T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGly
ZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKLXsKLSAgICBzY2hlZHVsZVRhc2soT3BlbkN1cnNvck9wZXJhdGlvbjo6Y3Jl
YXRlKHRoaXMsIG1fYmFja2luZ1N0b3JlLmdldCgpLCBkYXRhYmFzZSgpLmlkKCksIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRhc2tUeXBl
LCBjYWxsYmFja3MpKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpz
Y2hlZHVsZUNvdW50T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBzY2hlZHVsZVRhc2soQ291bnRPcGVyYXRpb246OmNy
ZWF0ZSh0aGlzLCBtX2JhY2tpbmdTdG9yZS5nZXQoKSwgZGF0YWJhc2UoKS5pZCgpLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci19Ci0KLXZvaWQgSURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6c2NoZWR1bGVEZWxldGVSYW5nZU9wZXJhdGlvbihpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIHNjaGVkdWxlVGFzayhEZWxl
dGVSYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG1fYmFja2luZ1N0b3JlLmdldCgpLCBkYXRh
YmFzZSgpLmlkKCksIG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKLX0KLQot
dm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpzY2hlZHVsZUNsZWFyT3BlcmF0aW9u
KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKLXsKLSAgICBzY2hlZHVsZVRhc2soQ2xlYXJPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBtX2Jh
Y2tpbmdTdG9yZS5nZXQoKSwgZGF0YWJhc2UoKS5pZCgpLCBvYmplY3RTdG9yZUlkLCBjYWxsYmFj
a3MpKTsKLX0KLQotUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFu
c2FjdGlvbkJhY2tlbmRMZXZlbERCOjpjcmVhdGVDdXJzb3JCYWNrZW5kKElEQkJhY2tpbmdTdG9y
ZUludGVyZmFjZTo6Q3Vyc29yJiBjdXJzb3IsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JU
eXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQpCi17Ci0gICAgcmV0dXJuIG1fZGF0YWJhc2UtPmZhY3RvcnlCYWNr
ZW5kKCkuY3JlYXRlQ3Vyc29yQmFja2VuZCgqdGhpcywgY3Vyc29yLCBjdXJzb3JUeXBlLCB0YXNr
VHlwZSwgb2JqZWN0U3RvcmVJZCk7Ci19Ci0KLX07Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGI5YjM0Li4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREJfaAotI2RlZmlu
ZSBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKLQotI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUludGVy
ZmFjZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9y
LmgiCi0jaW5jbHVkZSAiSURCT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvRGVx
dWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrczsKLQot
Y2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiBGSU5BTCA6IHB1YmxpYyBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IGNyZWF0ZShJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsKiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpU
cmFuc2FjdGlvbk1vZGUpOwotICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBjb21taXQoKSBPVkVSUklERSBGSU5BTDsKLSAgICB2
aXJ0dWFsIHZvaWQgYWJvcnQoKSBPVkVSUklERSBGSU5BTDsKLSAgICB2aXJ0dWFsIHZvaWQgYWJv
cnQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPikgT1ZFUlJJREUgRklOQUw7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgcnVuKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBJbmRleGVkREI6OlRyYW5z
YWN0aW9uTW9kZSBtb2RlKCkgY29uc3QgT1ZFUlJJREUgRklOQUwgeyByZXR1cm4gbV9tb2RlOyB9
Ci0gICAgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgc2NvcGUoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBtX29iamVjdFN0b3JlSWRzOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVUYXNr
KFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiB0YXNrLCBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4g
YWJvcnRUYXNrID0gbnVsbHB0cikgeyBzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlOjpOb3JtYWxUYXNrLCB0YXNrLCBhYm9ydFRhc2spOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBQYXNz
T3duUHRyPElEQk9wZXJhdGlvbj4sIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBhYm9ydFRhc2sg
PSBudWxscHRyKSBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgdm9pZCByZWdpc3Rlck9wZW5DdXJz
b3IoSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZSopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9p
ZCB1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlKikgT1ZFUlJJ
REU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkUHJlZW1wdGl2ZUV2ZW50KCkgT1ZFUlJJREUgeyBt
X3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKys7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxl
dGVQcmVlbXB0aXZlRXZlbnQoKSBPVkVSUklERSB7IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMt
LTsgQVNTRVJUKG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgPj0gMCk7IH0KLSAgICB2aXJ0dWFs
IElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24mIGJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCkgeyByZXR1cm4gKm1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb247IH0KLQotICAgIHZp
cnR1YWwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlJiBkYXRhYmFzZSgpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuICptX2RhdGFiYXNlOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVD
cmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJikg
T1ZFUlJJREUgRklOQUw7Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlRGVsZXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYpIE9WRVJSSURFIEZJTkFM
OwotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZVZlcnNpb25DaGFuZ2VPcGVyYXRpb24oaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IElEQkRh
dGFiYXNlTWV0YWRhdGEmKSBPVkVSUklERSBGSU5BTDsKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1
bGVDcmVhdGVJbmRleE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQklu
ZGV4TWV0YWRhdGEmKSBPVkVSUklERSBGSU5BTDsKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVE
ZWxldGVJbmRleE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4
TWV0YWRhdGEmKSBPVkVSUklERSBGSU5BTDsKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVHZXRP
cGVyYXRpb24oY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSW5kZXhlZERCOjpD
dXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9WRVJSSURFIEZJTkFMOwotICAg
IHZpcnR1YWwgdm9pZCBzY2hlZHVsZVB1dE9wZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhJiwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktl
eT4sIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8
SW5kZXhLZXlzPiYpIE9WRVJSSURFIEZJTkFMOwotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZVNl
dEluZGV4ZXNSZWFkeU9wZXJhdGlvbihzaXplX3QgaW5kZXhDb3VudCkgT1ZFUlJJREUgRklOQUw7
Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlT3BlbkN1cnNvck9wZXJhdGlvbihpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIElu
ZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUsIElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikg
T1ZFUlJJREUgRklOQUw7Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ291bnRPcGVyYXRpb24o
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9WRVJSSURFIEZJTkFMOwotICAgIHZp
cnR1YWwgdm9pZCBzY2hlZHVsZURlbGV0ZVJhbmdlT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikg
T1ZFUlJJREUgRklOQUw7Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ2xlYXJPcGVyYXRpb24o
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9WRVJSSURF
IEZJTkFMOwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U+IGNyZWF0ZUN1cnNvckJhY2tlbmQoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpDdXJzb3Im
LCBJbmRleGVkREI6OkN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFz
a1R5cGUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREU7Ci0KLXByaXZhdGU6Ci0gICAg
SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQihJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiwgaW50
NjRfdCBpZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IEhhc2hTZXQ8
aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSk7Ci0K
LSAgICBlbnVtIFN0YXRlIHsKLSAgICAgICAgVW51c2VkLCAvLyBDcmVhdGVkLCBidXQgbm8gdGFz
a3MgeWV0LgotICAgICAgICBTdGFydFBlbmRpbmcsIC8vIEVucXVldWVkIHRhc2tzLCBidXQgYmFj
a2luZyBzdG9yZSB0cmFuc2FjdGlvbiBub3QgeWV0IHN0YXJ0ZWQuCi0gICAgICAgIFJ1bm5pbmcs
IC8vIEJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24gc3RhcnRlZCBidXQgbm90IHlldCBmaW5pc2hl
ZC4KLSAgICAgICAgRmluaXNoZWQsIC8vIEVpdGhlciBhYm9ydGVkIG9yIGNvbW1pdHRlZC4KLSAg
ICB9OwotCi0gICAgdm9pZCBzdGFydCgpOwotCi0gICAgYm9vbCBpc1Rhc2tRdWV1ZUVtcHR5KCkg
Y29uc3Q7Ci0gICAgYm9vbCBoYXNQZW5kaW5nVGFza3MoKSBjb25zdDsKLQotICAgIHZvaWQgdGFz
a1RpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4qKTsKLSAgICB2
b2lkIGNsb3NlT3BlbkN1cnNvcnMoKTsKLQotICAgIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4gbV9v
YmplY3RTdG9yZUlkczsKLSAgICBjb25zdCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtX21v
ZGU7Ci0KLSAgICBTdGF0ZSBtX3N0YXRlOwotICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOwotICAg
IFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci0gICAgUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0YWJhc2U7Ci0KLSAgICB0eXBlZGVmIERlcXVlPE93
blB0cjxJREJPcGVyYXRpb24+PiBUYXNrUXVldWU7Ci0gICAgVGFza1F1ZXVlIG1fdGFza1F1ZXVl
OwotICAgIFRhc2tRdWV1ZSBtX3ByZWVtcHRpdmVUYXNrUXVldWU7Ci0gICAgVGFza1F1ZXVlIG1f
YWJvcnRUYXNrUXVldWU7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCQmFja2luZ1N0b3JlSW50
ZXJmYWNlOjpUcmFuc2FjdGlvbj4gbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbjsKLQotICAgIC8v
IEZJWE1FOiBkZWxldGUgdGhlIHRpbWVyIG9uY2Ugd2UgaGF2ZSB0aHJlYWRzIGluc3RlYWQuCi0g
ICAgVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gbV90YXNrVGltZXI7Ci0gICAg
aW50IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHM7Ci0KLSAgICBIYXNoU2V0PElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2UqPiBtX29wZW5DdXJzb3JzOwotICAgIAotICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmVJbnRlcmZhY2U+IG1fYmFja2luZ1N0b3JlOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZF
TERCKQotCi0jZW5kaWYgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0
aW9uQmFja2VuZExldmVsREJPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQk9wZXJhdGlvbnMu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjg3YTI5Li4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQk9wZXJhdGlvbnMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzg1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQk9wZXJhdGlvbnMuaCIKLQotI2luY2x1ZGUgIklEQkN1cnNvckJh
Y2tlbmRMZXZlbERCLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKLSNpbmNs
dWRlICJJREJJbmRleFdyaXRlci5oIgotI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0jaW5jbHVk
ZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi12b2lkIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKCkKLXsKLSAgICBM
T0coU3RvcmFnZUFQSSwgIkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7Ci0gICAgaWYgKCFt
X2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5pZCgpLCBtX29iamVj
dFN0b3JlTWV0YWRhdGEuaWQsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5uYW1lLCBtX29iamVjdFN0
b3JlTWV0YWRhdGEua2V5UGF0aCwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQp
KSB7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6
OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3IgY3JlYXRpbmcgb2JqZWN0IHN0b3JlICclcycuIiwgbV9v
YmplY3RTdG9yZU1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSkpOwotICAgICAgICBtX3RyYW5z
YWN0aW9uLT5hYm9ydChlcnJvci5yZWxlYXNlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
fQotCi12b2lkIENyZWF0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKCkKLXsKLSAgICBMT0coU3Rv
cmFnZUFQSSwgIkNyZWF0ZUluZGV4T3BlcmF0aW9uIik7Ci0gICAgaWYgKCFtX2JhY2tpbmdTdG9y
ZS0+Y3JlYXRlSW5kZXgobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
bV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5pZCgpLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhN
ZXRhZGF0YS5pZCwgbV9pbmRleE1ldGFkYXRhLm5hbWUsIG1faW5kZXhNZXRhZGF0YS5rZXlQYXRo
LCBtX2luZGV4TWV0YWRhdGEudW5pcXVlLCBtX2luZGV4TWV0YWRhdGEubXVsdGlFbnRyeSkpIHsK
LSAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5h
bCBlcnJvciB3aGVuIHRyeWluZyB0byBjcmVhdGUgaW5kZXggJyVzJy4iLCBtX2luZGV4TWV0YWRh
dGEubmFtZS51dGY4KCkuZGF0YSgpKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12
b2lkIENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OnBlcmZvcm0oKQotewotICAgIExPRyhTdG9y
YWdlQVBJLCAiQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbiIpOwotICAgIG1fdHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCkucmVtb3ZlSW5kZXgobV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQpOwotfQot
Ci12b2lkIERlbGV0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKCkKLXsKLSAgICBMT0coU3RvcmFn
ZUFQSSwgIkRlbGV0ZUluZGV4T3BlcmF0aW9uIik7Ci0gICAgYm9vbCBvayA9IG1fYmFja2luZ1N0
b3JlLT5kZWxldGVJbmRleChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
LCBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmlkKCksIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRl
eE1ldGFkYXRhLmlkKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3IgZGVsZXRp
bmcgaW5kZXggJyVzJy4iLCBtX2luZGV4TWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSk7Ci0g
ICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKLSAgICB9Ci19Ci0KLXZvaWQgRGVs
ZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSgpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEks
ICJEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uIik7Ci0gICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJh
c2UoKS5hZGRJbmRleChtX29iamVjdFN0b3JlSWQsIG1faW5kZXhNZXRhZGF0YSwgSURCSW5kZXhN
ZXRhZGF0YTo6SW52YWxpZElkKTsKLX0KLQotdm9pZCBHZXRPcGVyYXRpb246OnBlcmZvcm0oKQot
ewotICAgIExPRyhTdG9yYWdlQVBJLCAiR2V0T3BlcmF0aW9uIik7Ci0KLSAgICBSZWZQdHI8SURC
S2V5PiBrZXk7Ci0KLSAgICBpZiAobV9rZXlSYW5nZS0+aXNPbmx5S2V5KCkpCi0gICAgICAgIGtl
eSA9IG1fa2V5UmFuZ2UtPmxvd2VyKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxJREJC
YWNraW5nU3RvcmVJbnRlcmZhY2U6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yOwotICAgICAg
ICBpZiAobV9pbmRleElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgewotICAgICAg
ICAgICAgQVNTRVJUKG1fY3Vyc29yVHlwZSAhPSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOwot
ICAgICAgICAgICAgLy8gT2JqZWN0U3RvcmUgUmV0cmlldmFsIE9wZXJhdGlvbgotICAgICAgICAg
ICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1
cnNvcihtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNl
SWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JO
ZXh0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtX2N1cnNvclR5cGUgPT0g
SW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KSB7Ci0gICAgICAgICAgICAgICAgLy8gSW5kZXggVmFs
dWUgUmV0cmlldmFsIE9wZXJhdGlvbgotICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNv
ciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhLZXlDdXJzb3IobV90cmFuc2FjdGlvbi0+YmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1f
aW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gSW5kZXggUmVmZXJlbmNlZCBWYWx1
ZSBSZXRyaWV2YWwgT3BlcmF0aW9uCi0gICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29y
ID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEN1cnNvcihtX3RyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRl
eElkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5leHQpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKLSAg
ICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIGtleSA9IGJhY2tpbmdTdG9yZUN1cnNvci0+a2V5KCk7Ci0g
ICAgfQotCi0gICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleTsKLSAgICBib29sIG9rOwotICAg
IGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7Ci0gICAgICAg
IC8vIE9iamVjdCBTdG9yZSBSZXRyaWV2YWwgT3BlcmF0aW9uCi0gICAgICAgIFZlY3RvcjxjaGFy
PiB2YWx1ZTsKLSAgICAgICAgb2sgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UmVjb3JkKG1fdHJhbnNh
Y3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RT
dG9yZUlkLCAqa2V5LCB2YWx1ZSk7Ci0gICAgICAgIGlmICghb2spIHsKLSAgICAgICAgICAgIG1f
Y2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0UmVjb3JkLiIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh2YWx1ZS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX2F1dG9JbmNyZW1lbnQgJiYg
IW1fa2V5UGF0aC5pc051bGwoKSkgewotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vz
cyhTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKHZhbHVlKSwga2V5LCBtX2tleVBhdGgpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3Vj
Y2VzcyhTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKHZhbHVlKSk7Ci0gICAgICAgIHJldHVybjsK
LQotICAgIH0KLQotICAgIC8vIEZyb20gaGVyZSB3ZSBhcmUgZGVhbGluZyBvbmx5IHdpdGggaW5k
ZXhlcy4KLSAgICBvayA9IG1fYmFja2luZ1N0b3JlLT5nZXRQcmltYXJ5S2V5VmlhSW5kZXgobV90
cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29i
amVjdFN0b3JlSWQsIG1faW5kZXhJZCwgKmtleSwgcHJpbWFyeUtleSk7Ci0gICAgaWYgKCFvaykg
ewotICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGluIGdl
dFByaW1hcnlLZXlWaWFJbmRleC4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYg
KCFwcmltYXJ5S2V5KSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAobV9jdXJzb3JUeXBlID09IEluZGV4ZWREQjo6Q3Vy
c29yS2V5T25seSkgewotICAgICAgICAvLyBJbmRleCBWYWx1ZSBSZXRyaWV2YWwgT3BlcmF0aW9u
Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MocHJpbWFyeUtleS5nZXQoKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJp
ZXZhbCBPcGVyYXRpb24KLSAgICBWZWN0b3I8Y2hhcj4gdmFsdWU7Ci0gICAgb2sgPSBtX2JhY2tp
bmdTdG9yZS0+Z2V0UmVjb3JkKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCAqcHJpbWFyeUtleSwgdmFsdWUpOwot
ICAgIGlmICghb2spIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5h
bCBlcnJvciBpbiBnZXRSZWNvcmQuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKHZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG1fYXV0b0luY3JlbWVudCAmJiAhbV9r
ZXlQYXRoLmlzTnVsbCgpKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2hhcmVk
QnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSksIHByaW1hcnlLZXksIG1fa2V5UGF0aCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTaGFyZWRCdWZm
ZXI6OmFkb3B0VmVjdG9yKHZhbHVlKSk7Ci19Ci0KLXZvaWQgUHV0T3BlcmF0aW9uOjpwZXJmb3Jt
KCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIlB1dE9wZXJhdGlvbiIpOwotICAgIEFTU0VSVCht
X3RyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsK
LSAgICBBU1NFUlQobV9pbmRleElkcy5zaXplKCkgPT0gbV9pbmRleEtleXMuc2l6ZSgpKTsKLSAg
ICBib29sIGtleVdhc0dlbmVyYXRlZCA9IGZhbHNlOwotCi0gICAgUmVmUHRyPElEQktleT4ga2V5
OwotICAgIGlmIChtX3B1dE1vZGUgIT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpDdXJz
b3JVcGRhdGUgJiYgbV9vYmplY3RTdG9yZS5hdXRvSW5jcmVtZW50ICYmICFtX2tleSkgewotICAg
ICAgICBSZWZQdHI8SURCS2V5PiBhdXRvSW5jS2V5ID0gbV9iYWNraW5nU3RvcmUtPmdlbmVyYXRl
S2V5KCptX3RyYW5zYWN0aW9uLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQpOwotICAg
ICAgICBrZXlXYXNHZW5lcmF0ZWQgPSB0cnVlOwotICAgICAgICBpZiAoIWF1dG9JbmNLZXktPmlz
VmFsaWQoKSkgewotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsICJNYXhp
bXVtIGtleSBnZW5lcmF0b3IgdmFsdWUgcmVhY2hlZC4iKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAga2V5ID0gYXV0b0luY0tleTsKLSAgICB9IGVsc2UKLSAgICAg
ICAga2V5ID0gbV9rZXk7Ci0KLSAgICBBU1NFUlQoa2V5KTsKLSAgICBBU1NFUlQoa2V5LT5pc1Zh
bGlkKCkpOwotCi0gICAgUmVmUHRyPElEQlJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZp
ZXI7Ci0gICAgaWYgKG1fcHV0TW9kZSA9PSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkFk
ZE9ubHkpIHsKLSAgICAgICAgYm9vbCBvayA9IG1fYmFja2luZ1N0b3JlLT5rZXlFeGlzdHNJbk9i
amVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0
YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwgKmtleSwgcmVjb3JkSWRlbnRpZmllcik7Ci0gICAg
ICAgIGlmICghb2spIHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50
ZXJuYWwgZXJyb3IgY2hlY2tpbmcga2V5IGV4aXN0ZW5jZS4iKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlY29yZElkZW50aWZpZXIpIHsKLSAgICAgICAg
ICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCAiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRo
ZSBvYmplY3Qgc3RvcmUuIikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgVmVjdG9yPFJlZlB0cjxJREJJbmRleFdyaXRlcj4+IGluZGV4V3JpdGVyczsKLSAg
ICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGJvb2wgb2JleXNDb25zdHJhaW50cyA9IGZhbHNl
OwotICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5tYWtlSW5k
ZXhXcml0ZXJzKCptX3RyYW5zYWN0aW9uLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUsICpr
ZXksIGtleVdhc0dlbmVyYXRlZCwgbV9pbmRleElkcywgbV9pbmRleEtleXMsIGluZGV4V3JpdGVy
cywgJmVycm9yTWVzc2FnZSwgb2JleXNDb25zdHJhaW50cyk7Ci0gICAgaWYgKCFiYWNraW5nU3Rv
cmVTdWNjZXNzKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwg
ZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5cy4iKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFvYmV5c0NvbnN0cmFpbnRzKSB7Ci0gICAgICAg
IG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCBlcnJvck1lc3NhZ2UpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIEJlZm9yZSB0aGlzIHBvaW50LCBkb24ndCBkbyBhbnkgbXV0
YXRpb24uIEFmdGVyIHRoaXMgcG9pbnQsIHJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbiBpbiBjYXNl
IG9mIGVycm9yLgotICAgIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+cHV0
UmVjb3JkKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJh
c2VJZCwgbV9vYmplY3RTdG9yZS5pZCwgKmtleSwgbV92YWx1ZSwgcmVjb3JkSWRlbnRpZmllci5n
ZXQoKSk7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7Ci0gICAgICAgIG1fY2FsbGJh
Y2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgcGVy
Zm9ybWluZyBwdXQvYWRkLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIElE
QkluZGV4V3JpdGVyKiBpbmRleFdyaXRlciA9IGluZGV4V3JpdGVyc1tpXS5nZXQoKTsKLSAgICAg
ICAgaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIuZ2V0KCksICpt
X2JhY2tpbmdTdG9yZSwgbV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
bV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkKTsKLSAgICB9Ci0KLSAgICBpZiAobV9vYmpl
Y3RTdG9yZS5hdXRvSW5jcmVtZW50ICYmIG1fcHV0TW9kZSAhPSBJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2U6OkN1cnNvclVwZGF0ZSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5
cGUpIHsKLSAgICAgICAgYm9vbCBvayA9IG1fYmFja2luZ1N0b3JlLT51cGRhdGVLZXlHZW5lcmF0
b3IoKm1fdHJhbnNhY3Rpb24sIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwgKmtleSwg
IWtleVdhc0dlbmVyYXRlZCk7Ci0gICAgICAgIGlmICghb2spIHsKLSAgICAgICAgICAgIG1fY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgdXBkYXRpbmcga2V5IGdlbmVyYXRv
ci4iKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2Nh
bGxiYWNrcy0+b25TdWNjZXNzKGtleS5yZWxlYXNlKCkpOwotfQotCi12b2lkIFNldEluZGV4ZXNS
ZWFkeU9wZXJhdGlvbjo6cGVyZm9ybSgpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJTZXRJbmRl
eGVzUmVhZHlPcGVyYXRpb24iKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5kZXhD
b3VudDsgKytpKQotICAgICAgICBtX3RyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVByZWVtcHRpdmVF
dmVudCgpOwotfQotCi12b2lkIE9wZW5DdXJzb3JPcGVyYXRpb246OnBlcmZvcm0oKQotewotICAg
IExPRyhTdG9yYWdlQVBJLCAiT3BlbkN1cnNvck9wZXJhdGlvbiIpOwotCi0gICAgLy8gVGhlIGZy
b250ZW5kIGhhcyBiZWd1biBpbmRleGluZywgc28gdGhpcyBwYXVzZXMgdGhlIHRyYW5zYWN0aW9u
Ci0gICAgLy8gdW50aWwgdGhlIGluZGV4aW5nIGlzIGNvbXBsZXRlLiBUaGlzIGNhbid0IGhhcHBl
biBhbnkgZWFybGllcgotICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBzd2l0Y2ggdG8g
ZWFybHkgbW9kZSBpbiBjYXNlIG11bHRpcGxlCi0gICAgLy8gaW5kZXhlcyBhcmUgYmVpbmcgY3Jl
YXRlZCBpbiBhIHJvdywgd2l0aCBwdXQoKSdzIGluIGJldHdlZW4uCi0gICAgaWYgKG1fdGFza1R5
cGUgPT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQcmVlbXB0aXZlVGFzaykKLSAgICAg
ICAgbV90cmFuc2FjdGlvbi0+YWRkUHJlZW1wdGl2ZUV2ZW50KCk7Ci0KLSAgICBSZWZQdHI8SURC
QmFja2luZ1N0b3JlSW50ZXJmYWNlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKLSAgICBp
ZiAobV9pbmRleElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgewotICAgICAgICBB
U1NFUlQobV9jdXJzb3JUeXBlICE9IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSk7Ci0gICAgICAg
IGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuT2JqZWN0U3RvcmVDdXJz
b3IobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlk
LCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIG1fZGlyZWN0aW9uKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBBU1NFUlQobV90YXNrVHlwZSA9PSBJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2U6Ok5vcm1hbFRhc2spOwotICAgICAgICBpZiAobV9jdXJzb3JUeXBlID09IEluZGV4
ZWREQjo6Q3Vyc29yS2V5T25seSkKLSAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1f
YmFja2luZ1N0b3JlLT5vcGVuSW5kZXhLZXlDdXJzb3IobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJ
ZCwgbV9rZXlSYW5nZS5nZXQoKSwgbV9kaXJlY3Rpb24pOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29y
KG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwg
bV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIG1fZGlyZWN0aW9u
KTsKLSAgICB9Ci0KLSAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICBtX2Nh
bGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KDApKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFz
a1R5cGUgdGFza1R5cGUoc3RhdGljX2Nhc3Q8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpU
YXNrVHlwZT4obV90YXNrVHlwZSkpOwotCi0gICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRl
cmZhY2U+IGN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmNyZWF0ZUN1cnNvckJhY2tlbmQoKmJhY2tp
bmdTdG9yZUN1cnNvciwgbV9jdXJzb3JUeXBlLCB0YXNrVHlwZSwgbV9vYmplY3RTdG9yZUlkKTsK
LSAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvciwgY3Vyc29yLT5rZXkoKSwgY3Vyc29y
LT5wcmltYXJ5S2V5KCksIGN1cnNvci0+dmFsdWUoKSk7Ci19Ci0KLXZvaWQgQ291bnRPcGVyYXRp
b246OnBlcmZvcm0oKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiQ291bnRPcGVyYXRpb24iKTsK
LSAgICB1aW50MzJfdCBjb3VudCA9IDA7Ci0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUludGVy
ZmFjZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3I7Ci0KLSAgICBpZiAobV9pbmRleElkID09
IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkKLSAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29y
ID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihtX3RyYW5zYWN0aW9u
LT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJ
ZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKLSAgICBlbHNlCi0g
ICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhLZXlD
dXJzb3IobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFz
ZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhl
ZERCOjpDdXJzb3JOZXh0KTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAg
ICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGNvdW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGRvIHsKLSAgICAgICAgKytjb3VudDsKLSAgICB9IHdoaWxlIChiYWNraW5nU3RvcmVD
dXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOwotCi0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vz
cyhjb3VudCk7Ci19Ci0KLXZvaWQgRGVsZXRlUmFuZ2VPcGVyYXRpb246OnBlcmZvcm0oKQotewot
ICAgIExPRyhTdG9yYWdlQVBJLCAiRGVsZXRlUmFuZ2VPcGVyYXRpb24iKTsKLSAgICBSZWZQdHI8
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG1f
YmFja2luZ1N0b3JlLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IobV90cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5
UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7Ci0gICAgaWYgKGJhY2tpbmdTdG9y
ZUN1cnNvcikgewotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAoIW1fYmFja2luZ1N0b3Jl
LT5kZWxldGVSZWNvcmQobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
bV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIGJhY2tpbmdTdG9yZUN1cnNvci0+cmVjb3Jk
SWRlbnRpZmllcigpKSkgewotICAgICAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9y
LCAiRXJyb3IgZGVsZXRpbmcgZGF0YSBpbiByYW5nZSIpKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1cnNvci0+
Y29udGludWVGdW5jdGlvbigwKSk7Ci0gICAgfQotCi0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vz
cygpOwotfQotCi12b2lkIENsZWFyT3BlcmF0aW9uOjpwZXJmb3JtKCkKLXsKLSAgICBMT0coU3Rv
cmFnZUFQSSwgIk9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb24iKTsKLSAgICBpZiAoIW1fYmFja2lu
Z1N0b3JlLT5jbGVhck9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkKSkgewotICAgICAgICBtX2Nh
bGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVua25vd25FcnJvciwgIkVycm9yIGNsZWFyaW5nIG9iamVjdCBzdG9yZSIpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci19Ci0K
LXZvaWQgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oKQotewotICAgIExPRyhT
dG9yYWdlQVBJLCAiRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24iKTsKLSAgICBib29sIG9rID0g
bV9iYWNraW5nU3RvcmUtPmRlbGV0ZU9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuaWQoKSwgbV9vYmpl
Y3RTdG9yZU1ldGFkYXRhLmlkKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIFJlZlB0cjxJREJE
YXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3Ig
ZGVsZXRpbmcgb2JqZWN0IHN0b3JlICclcycuIiwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLm5hbWUu
dXRmOCgpLmRhdGEoKSkpOwotICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7Ci0g
ICAgfQotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VPcGVy
YXRpb246OnBlcmZvcm0oKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiVmVyc2lvbkNoYW5nZU9w
ZXJhdGlvbiIpOwotICAgIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSYgZGF0YWJhc2UgPSBt
X3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpOwotICAgIGludDY0X3QgZGF0YWJhc2VJZCA9IGRhdGFi
YXNlLmlkKCk7Ci0gICAgdWludDY0X3Qgb2xkVmVyc2lvbiA9IGRhdGFiYXNlLm1ldGFkYXRhKCku
dmVyc2lvbjsKLQotICAgIC8vIEZJWE1FOiBEYXRhYmFzZSB2ZXJzaW9ucyBhcmUgbm93IG9mIHR5
cGUgdWludDY0X3QsIGJ1dCB0aGlzIGNvZGUgZXhwZWN0ZWQgaW50NjRfdC4KLSAgICBBU1NFUlQo
bV92ZXJzaW9uID4gKGludDY0X3Qpb2xkVmVyc2lvbik7Ci0gICAgZGF0YWJhc2Uuc2V0Q3VycmVu
dFZlcnNpb24obV92ZXJzaW9uKTsKLSAgICBpZiAoIWRhdGFiYXNlLmJhY2tpbmdTdG9yZSgpLT51
cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24obV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgZGF0YWJhc2UubWV0YWRhdGEoKS52ZXJzaW9uKSkgewot
ICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkVycm9yIHdyaXRp
bmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZSB3aGVuIHVwZGF0aW5nIHZlcnNpb24uIik7Ci0gICAg
ICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+
YWJvcnQoZXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEFTU0VSVCghZGF0YWJh
c2UuaGFzUGVuZGluZ1NlY29uZEhhbGZPcGVuKCkpOwotICAgIGRhdGFiYXNlLnNldFBlbmRpbmdT
ZWNvbmRIYWxmT3BlbihJREJQZW5kaW5nT3BlbkNhbGw6OmNyZWF0ZSgqbV9jYWxsYmFja3MsICpt
X2RhdGFiYXNlQ2FsbGJhY2tzLCBtX3RyYW5zYWN0aW9uSWQsIG1fdmVyc2lvbikpOwotICAgIG1f
Y2FsbGJhY2tzLT5vblVwZ3JhZGVOZWVkZWQob2xkVmVyc2lvbiwgJmRhdGFiYXNlLCBkYXRhYmFz
ZS5tZXRhZGF0YSgpKTsKLX0KLQotdm9pZCBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9u
OjpwZXJmb3JtKCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkNyZWF0ZU9iamVjdFN0b3JlQWJv
cnRPcGVyYXRpb24iKTsKLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnJlbW92ZU9iamVj
dFN0b3JlKG1fb2JqZWN0U3RvcmVJZCk7Ci19Ci0KLXZvaWQgRGVsZXRlT2JqZWN0U3RvcmVBYm9y
dE9wZXJhdGlvbjo6cGVyZm9ybSgpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJEZWxldGVPYmpl
Y3RTdG9yZUFib3J0T3BlcmF0aW9uIik7Ci0gICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5h
ZGRPYmplY3RTdG9yZShtX29iamVjdFN0b3JlTWV0YWRhdGEsIElEQk9iamVjdFN0b3JlTWV0YWRh
dGE6OkludmFsaWRJZCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lv
bkNoYW5nZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwg
IlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbiIpOwotICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFi
YXNlKCkuc2V0Q3VycmVudFZlcnNpb24obV9wcmV2aW91c0ludFZlcnNpb24pOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkg
JiYgVVNFKExFVkVMREIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREJPcGVyYXRpb25zLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZExldmVsREJPcGVyYXRpb25zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVl
YTdjY2MuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2
ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCT3BlcmF0aW9ucy5oCisrKyAvZGV2L251
bGwKQEAgLTEsNDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREJPcGVyYXRpb25zX2gKLSNkZWZpbmUgSURCVHJhbnNhY3Rpb25CYWNrZW5k
TGV2ZWxEQk9wZXJhdGlvbnNfaAotCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5o
IgotI2luY2x1ZGUgIklEQk9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZS5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShM
RVZFTERCKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENyZWF0ZU9iamVjdFN0b3Jl
T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUs
IGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
KHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlTWV0YWRhdGEpKTsKLSAgICB9
Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKLXByaXZhdGU6Ci0g
ICAgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUs
IGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCi0gICAg
ICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX2JhY2tpbmdTdG9y
ZShiYWNraW5nU3RvcmUpCi0gICAgICAgICwgbV9vYmplY3RTdG9yZU1ldGFkYXRhKG9iamVjdFN0
b3JlTWV0YWRhdGEpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IFJlZlB0cjxJREJC
YWNraW5nU3RvcmVJbnRlcmZhY2U+IG1fYmFja2luZ1N0b3JlOwotICAgIGNvbnN0IElEQk9iamVj
dFN0b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9yZU1ldGFkYXRhOwotfTsKLQotY2xhc3MgRGVsZXRl
T2JqZWN0U3RvcmVPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJh
Y2tpbmdTdG9yZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRh
ZGF0YSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb24odHJhbnNhY3Rpb24sIGJhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVNZXRhZGF0
YSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIE9WRVJSSURFIEZJTkFMOwot
cHJpdmF0ZToKLSAgICBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJh
Y2tpbmdTdG9yZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRh
ZGF0YSkKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1f
YmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlTWV0YWRh
dGEob2JqZWN0U3RvcmVNZXRhZGF0YSkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZTsKLSAgICBjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsKLX07Ci0KLWNsYXNz
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24gOiBwdWJsaWMg
SURCT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRp
b24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJh
c2VDYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFZlcnNpb25D
aGFuZ2VPcGVyYXRpb24odHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uSWQsIHZlcnNpb24sIGNhbGxi
YWNrcywgZGF0YWJhc2VDYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZv
cm0oKSBPVkVSUklERSBGSU5BTDsKLXByaXZhdGU6Ci0gICAgVmVyc2lvbkNoYW5nZU9wZXJhdGlv
bihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIGludDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFj
a3MpCi0gICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX3Ry
YW5zYWN0aW9uSWQodHJhbnNhY3Rpb25JZCkKLSAgICAgICAgLCBtX3ZlcnNpb24odmVyc2lvbikK
LSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgICAgICwgbV9kYXRhYmFzZUNh
bGxiYWNrcyhkYXRhYmFzZUNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKLSAgICBpbnQ2NF90
IG1fdHJhbnNhY3Rpb25JZDsKLSAgICBpbnQ2NF90IG1fdmVyc2lvbjsKLSAgICBSZWZQdHI8SURC
Q2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
IG1fZGF0YWJhc2VDYWxsYmFja3M7Ci19OwotCi1jbGFzcyBDcmVhdGVPYmplY3RTdG9yZUFib3J0
T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKHRyYW5z
YWN0aW9uLCBvYmplY3RTdG9yZUlkKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3Jt
KCkgT1ZFUlJJREUgRklOQUw7Ci1wcml2YXRlOgotICAgIENyZWF0ZU9iamVjdFN0b3JlQWJvcnRP
cGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBvYmplY3RTdG9yZUlkKQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24p
Ci0gICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgewotICAgIH0K
LQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rp
b247Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci19OwotCi1jbGFzcyBEZWxl
dGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgb2JqZWN0U3RvcmUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3Jl
KSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7Ci1w
cml2YXRlOgotICAgIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24oSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5z
YWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YShvYmplY3RTdG9yZU1ldGFk
YXRhKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPiBtX3RyYW5zYWN0aW9uOwotICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbV9vYmpl
Y3RTdG9yZU1ldGFkYXRhOwotfTsKLQotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVy
c2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgY29uc3QgU3RyaW5nJiBwcmV2aW91c1Zl
cnNpb24sIGludDY0X3QgcHJldmlvdXNJbnRWZXJzaW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb24odHJhbnNhY3Rpb24sIHBy
ZXZpb3VzVmVyc2lvbiwgcHJldmlvdXNJbnRWZXJzaW9uKSk7Ci0gICAgfQotICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7Ci1wcml2YXRlOgotICAgIFZlcnNpb25DaGFu
Z2VBYm9ydE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0
aW9uLCBjb25zdCBTdHJpbmcmIHByZXZpb3VzVmVyc2lvbiwgaW50NjRfdCBwcmV2aW91c0ludFZl
cnNpb24pCi0gICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBt
X3ByZXZpb3VzVmVyc2lvbihwcmV2aW91c1ZlcnNpb24pCi0gICAgICAgICwgbV9wcmV2aW91c0lu
dFZlcnNpb24ocHJldmlvdXNJbnRWZXJzaW9uKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0aW9uOwotICAgIFN0cmlu
ZyBtX3ByZXZpb3VzVmVyc2lvbjsKLSAgICBpbnQ2NF90IG1fcHJldmlvdXNJbnRWZXJzaW9uOwot
fTsKLQotY2xhc3MgQ3JlYXRlSW5kZXhPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJ
bnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJ
bmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDcmVhdGVJbmRleE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgYmFja2luZ1N0b3JlLCBv
YmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7Ci1wcml2YXRlOgotICAgIENyZWF0ZUluZGV4T3BlcmF0
aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi0gICAgICAgIDogbV90cmFuc2Fj
dGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUp
Ci0gICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9p
bmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3Qg
UmVmUHRyPElEQkJhY2tpbmdTdG9yZUludGVyZmFjZT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgY29u
c3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBt
X2luZGV4TWV0YWRhdGE7Ci19OwotCi1jbGFzcyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uIDog
cHVibGljIElEQk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURC
T3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24odHJhbnNh
Y3Rpb24sIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lk
IHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKLXByaXZhdGU6Ci0gICAgQ3JlYXRlSW5kZXhBYm9y
dE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKLSAgICAgICAgOiBtX3RyYW5z
YWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9y
ZUlkKQotICAgICAgICAsIG1faW5kZXhJZChpbmRleElkKQotICAgIHsKLSAgICB9Ci0KLSAgICBj
b25zdCBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0aW9u
OwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIGNvbnN0IGludDY0X3Qg
bV9pbmRleElkOwotfTsKLQotY2xhc3MgRGVsZXRlSW5kZXhPcGVyYXRpb24gOiBwdWJsaWMgSURC
T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+
IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJC
YWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVJbmRleE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgYmFj
a2luZ1N0b3JlLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7Ci0gICAgfQotICAgIHZp
cnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7Ci1wcml2YXRlOgotICAgIERlbGV0
ZUluZGV4T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi0gICAgICAg
IDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX2JhY2tpbmdTdG9yZShi
YWNraW5nU3RvcmUpCi0gICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCi0g
ICAgICAgICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCi0gICAgewotICAgIH0KLQot
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247
Ci0gICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUludGVyZmFjZT4gbV9iYWNraW5nU3Rv
cmU7Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7Ci19OwotCi1jbGFzcyBEZWxldGVJbmRleEFib3J0
T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1l
dGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBp
bmRleE1ldGFkYXRhKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJ
REUgRklOQUw7Ci1wcml2YXRlOgotICAgIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24oSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgICAgICA6IG1f
dHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVj
dFN0b3JlSWQpCi0gICAgICAgICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCi0gICAg
ewotICAgIH0KLQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1f
dHJhbnNhY3Rpb247Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgY29u
c3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7Ci19OwotCi1jbGFzcyBHZXRPcGVy
YXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093
blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgY29u
c3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhl
ZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdldE9wZXJhdGlvbih0
cmFuc2FjdGlvbiwgYmFja2luZ1N0b3JlLCBtZXRhZGF0YSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJ
ZCwga2V5UmFuZ2UsIGN1cnNvclR5cGUsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybSgpIE9WRVJSSURFIEZJTkFMOwotcHJpdmF0ZToKLSAgICBHZXRPcGVyYXRp
b24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2lu
Z1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEm
IG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JU
eXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgICAgICA6IG1fdHJh
bnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0
b3JlKQotICAgICAgICAsIG1fZGF0YWJhc2VJZChtZXRhZGF0YS5pZCkKLSAgICAgICAgLCBtX29i
amVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAgICAgICAgLCBtX2luZGV4SWQoaW5kZXhJZCkK
LSAgICAgICAgLCBtX2tleVBhdGgobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9y
ZUlkKS5rZXlQYXRoKQotICAgICAgICAsIG1fYXV0b0luY3JlbWVudChtZXRhZGF0YS5vYmplY3RT
dG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmF1dG9JbmNyZW1lbnQpCi0gICAgICAgICwgbV9rZXlS
YW5nZShrZXlSYW5nZSkKLSAgICAgICAgLCBtX2N1cnNvclR5cGUoY3Vyc29yVHlwZSkKLSAgICAg
ICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgICAgICBBU1NFUlQobWV0YWRh
dGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAgICAgICAgQVNTRVJU
KG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCkuaWQgPT0gb2JqZWN0U3Rv
cmVJZCk7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJm
YWNlPiBtX2JhY2tpbmdTdG9yZTsKLSAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKLSAg
ICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBjb25zdCBpbnQ2NF90IG1faW5k
ZXhJZDsKLSAgICBjb25zdCBJREJLZXlQYXRoIG1fa2V5UGF0aDsKLSAgICBjb25zdCBib29sIG1f
YXV0b0luY3JlbWVudDsKLSAgICBjb25zdCBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7
Ci0gICAgY29uc3QgSW5kZXhlZERCOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKLSAgICBjb25z
dCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLWNsYXNzIFB1dE9wZXJh
dGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3Jl
LCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXks
IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRz
LCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBQdXRPcGVyYXRpb24odHJhbnNhY3Rpb24sIGJhY2tpbmdTdG9yZSwg
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywg
aW5kZXhJZHMsIGluZGV4S2V5cykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgp
IE9WRVJSSURFIEZJTkFMOwotcHJpdmF0ZToKLSAgICBQdXRPcGVyYXRpb24oSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNl
KiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiYgdmFsdWUsIFBh
c3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9k
ZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0
b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlz
KQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9iYWNr
aW5nU3RvcmUoYmFja2luZ1N0b3JlKQotICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlk
KQotICAgICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCi0gICAgICAgICwgbV92YWx1
ZSh2YWx1ZSkKLSAgICAgICAgLCBtX2tleShrZXkpCi0gICAgICAgICwgbV9wdXRNb2RlKHB1dE1v
ZGUpCi0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgICAgICAsIG1faW5kZXhJ
ZHMoaW5kZXhJZHMpCi0gICAgICAgICwgbV9pbmRleEtleXMoaW5kZXhLZXlzKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5z
YWN0aW9uOwotICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U+IG1fYmFj
a2luZ1N0b3JlOwotICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOwotICAgIGNvbnN0IElE
Qk9iamVjdFN0b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9yZTsKLSAgICBjb25zdCBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBtX3ZhbHVlOwotICAgIGNvbnN0IFJlZlB0cjxJREJLZXk+IG1fa2V5OwotICAg
IGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSBtX3B1dE1vZGU7Ci0g
ICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci0gICAgY29uc3QgVmVj
dG9yPGludDY0X3Q+IG1faW5kZXhJZHM7Ci0gICAgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4gbV9p
bmRleEtleXM7Ci19OwotCi1jbGFzcyBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24gOiBwdWJsaWMg
SURCT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRp
b24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBz
aXplX3QgaW5kZXhDb3VudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2V0
SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBpbmRleENvdW50KSk7Ci0gICAgfQot
ICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7Ci1wcml2YXRlOgotICAg
IFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uLCBzaXplX3QgaW5kZXhDb3VudCkKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9u
KHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1faW5kZXhDb3VudChpbmRleENvdW50KQotICAgIHsK
LSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3Ry
YW5zYWN0aW9uOwotICAgIGNvbnN0IHNpemVfdCBtX2luZGV4Q291bnQ7Ci19OwotCi1jbGFzcyBP
cGVuQ3Vyc29yT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNr
aW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6
OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JU
eXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBPcGVuQ3Vyc29yT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUs
IGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24s
IGN1cnNvclR5cGUsIHRhc2tUeXBlLCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2
b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKLXByaXZhdGU6Ci0gICAgT3BlbkN1cnNvck9w
ZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJC
YWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgSW5k
ZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZTo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
Ci0gICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX2JhY2tp
bmdTdG9yZShiYWNraW5nU3RvcmUpCi0gICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQp
Ci0gICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9p
bmRleElkKGluZGV4SWQpCi0gICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKLSAgICAgICAg
LCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCi0gICAgICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5
cGUpCi0gICAgICAgICwgbV90YXNrVHlwZSh0YXNrVHlwZSkKLSAgICAgICAgLCBtX2NhbGxiYWNr
cyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3QgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgY29uc3QgaW50NjRfdCBtX2Rh
dGFiYXNlSWQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgY29uc3Qg
aW50NjRfdCBtX2luZGV4SWQ7Ci0gICAgY29uc3QgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gbV9r
ZXlSYW5nZTsKLSAgICBjb25zdCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBtX2RpcmVjdGlv
bjsKLSAgICBjb25zdCBJbmRleGVkREI6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOwotICAgIGNv
bnN0IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgbV90YXNrVHlwZTsKLSAg
ICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLWNsYXNzIENv
dW50T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3Rv
cmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
b3VudE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZp
cnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7Ci1wcml2YXRlOgotICAgIENvdW50
T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElE
QkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAg
ICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fYmFja2luZ1N0
b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKLSAg
ICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAgICAgICAgLCBtX2luZGV4
SWQoaW5kZXhJZCkKLSAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQotICAgICAgICAsIG1f
Y2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBSZWZQdHI8
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZTsKLSAgICBjb25zdCBpbnQ2
NF90IG1fZGF0YWJhc2VJZDsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAg
ICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsKLSAgICBjb25zdCBSZWZQdHI8SURCS2V5UmFuZ2U+
IG1fa2V5UmFuZ2U7Ci0gICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7
Ci19OwotCi1jbGFzcyBEZWxldGVSYW5nZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24g
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9y
ZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IERlbGV0ZVJhbmdlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUsIGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAg
dmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKLXByaXZhdGU6Ci0gICAgRGVs
ZXRlUmFuZ2VPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBr
ZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBt
X3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fYmFja2luZ1N0b3JlKGJhY2tp
bmdTdG9yZSkKLSAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKLSAgICAgICAgLCBt
X29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAgICAgICAgLCBtX2tleVJhbmdlKGtleVJh
bmdlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0g
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV90cmFuc2FjdGlvbjsK
LSAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlPiBtX2JhY2tpbmdTdG9y
ZTsKLSAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKLSAgICBjb25zdCBpbnQ2NF90IG1f
b2JqZWN0U3RvcmVJZDsKLSAgICBjb25zdCBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7
Ci0gICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi1jbGFz
cyBDbGVhck9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2lu
Z1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ2xlYXJPcGVyYXRpb24odHJhbnNhY3Rpb24sIGJhY2tpbmdTdG9yZSwgZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9p
ZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7Ci1wcml2YXRlOgotICAgIENsZWFyT3BlcmF0aW9u
KElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdT
dG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAg
ICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fYmFja2luZ1N0b3Jl
KGJhY2tpbmdTdG9yZSkKLSAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKLSAgICAg
ICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAgICAgICAgLCBtX2NhbGxiYWNr
cyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3QgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgY29uc3QgaW50NjRfdCBtX2Rh
dGFiYXNlSWQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgY29uc3Qg
UmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVM
REIpCi0jZW5kaWYgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQk9wZXJhdGlvbnNfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDM0YzI5ZWQuLmI5ODIxM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE2NDUsNiArMTY0NSwxMCBAQAogCQk1MEUxOENE
QTE2RjkyODU4MDBDNjU0ODYgLyogU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtQ2FjaGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwRTE4Q0Q3MTZGOTI4
NTgwMEM2NTQ4NiAvKiBTdHlsZUN1c3RvbUZpbHRlclByb2dyYW1DYWNoZS5oICovOyB9OwogCQk1
MTAxODQ2OTBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwMTg0NjcwQjA4NjAyQTAwNEE4MjVGIC8q
IENhY2hlZFBhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1MTAxODQ2QTBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAxODQ2ODBCMDg2MDJB
MDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5jcHAgKi87IH07CisJCTUxMDU5RERCMTgyMEIxNzYwMERG
RjlCMSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDU5REQ3MTgyMEIxNzYwMERGRjlCMSAvKiBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcCAqLzsgfTsKKwkJNTEwNTlEREMxODIwQjE3NjAw
REZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDU5REQ4MTgyMEIxNzYwMERGRjlCMSAvKiBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmggKi87IH07CisJCTUxMDU5REREMTgyMEIxNzYwMERG
RjlCMSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDU5REQ5MTgyMEIxNzYwMERGRjlC
MSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcCAqLzsgfTsKKwkJNTEwNTlE
REUxODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDU5RERBMTgy
MEIxNzYwMERGRjlCMSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmggKi87IH07
CiAJCTUxMEQ0QTMzMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBMkQx
MDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUVycm9yQmFzZS5jcHAgKi87IH07CiAJCTUx
MEQ0QTM0MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEQ0QTJFMTAzMTY1RUUw
MDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuaCAqLzsgfTsKIAkJNTEwRDRBMzYxMDMx
NjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBMzAxMDMxNjVFRTAwNDlFQTU0
IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwICovOyB9OwpAQCAtODI1Niw2ICs4MjYwLDEw
IEBACiAJCTUwRTE4Q0Q3MTZGOTI4NTgwMEM2NTQ4NiAvKiBTdHlsZUN1c3RvbUZpbHRlclByb2dy
YW1DYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTdHlsZUN1c3RvbUZp
bHRlclByb2dyYW1DYWNoZS5oOyBwYXRoID0gc3R5bGUvU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFt
Q2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwMTg0NjcwQjA4NjAyQTAw
NEE4MjVGIC8qIENhY2hlZFBhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2FjaGVkUGFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAxODQ2ODBCMDg2
MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDYWNoZWRQYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTEwNTlERDcxODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMDU5REQ4MTgyMEIx
NzYwMERGRjlCMSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTEwNTlERDkxODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5z
YWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUxMDU5RERBMTgyMEIxNzYwMERGRjlCMSAvKiBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRPcGVyYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTEwRDRBMkQxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUVycm9yQmFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb2NrZXRTdHJlYW1F
cnJvckJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTBENEEyRTEwMzE2
NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNvY2tldFN0cmVhbUVycm9yQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MTBENEEzMDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFu
ZGxlQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb2NrZXRT
dHJlYW1IYW5kbGVCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2ODQ0
LDcgKzE2ODUyLDExIEBACiAJCQkJNTFENzE5QTQxODExMDZFMDAwMTZEQzUxIC8qIElEQlRyYW5z
YWN0aW9uLmNwcCAqLywKIAkJCQk1MUQ3MTlBNTE4MTEwNkUwMDAxNkRDNTEgLyogSURCVHJhbnNh
Y3Rpb24uaCAqLywKIAkJCQk1MUQ3MTlBNjE4MTEwNkUwMDAxNkRDNTEgLyogSURCVHJhbnNhY3Rp
b24uaWRsICovLAorCQkJCTUxMDU5REQ3MTgyMEIxNzYwMERGRjlCMSAvKiBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsLmNwcCAqLywKKwkJCQk1MTA1OUREODE4MjBCMTc2MDBERkY5QjEgLyogSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oICovLAogCQkJCTUxRjZFMDhGMTgxMUQyNTIwMDU4QTAw
QSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCAqLywKKwkJCQk1MTA1OUREOTE4
MjBCMTc2MDBERkY5QjEgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAgKi8s
CisJCQkJNTEwNTlEREExODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9w
ZXJhdGlvbnMuaCAqLywKIAkJCQk1MUVBQzU2NTE4MTVFRDNFMDA0RjFCQTQgLyogSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5jcHAgKi8sCiAJCQkJNTFFQUM1NjYxODE1RUQzRTAwNEYxQkE0IC8q
IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLywKIAkJCQk1MUQ3MTlBQjE4MTEwNkUwMDAx
NkRDNTEgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcCAqLywKQEAgLTIyNTQxLDYgKzIyNTUz
LDcgQEAKIAkJCQkyRURGMzY5RjEyMkM5NEM4MDAyRjdENEUgLyogRmlsZUV4Y2VwdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYwOTlEMDkxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE4OEE5MDUxNzU1M0NENzAw
MEM3NEY5IC8qIEZpbGVJY29uTG9hZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTA1OUREQzE4
MjBCMTc2MDBERkY5QjEgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRjU1QjNEQkUxMjUxRjEyRDAwM0VGMjY5IC8qIEZpbGVJbnB1dFR5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3NkQ2Qzg2MTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlTGlzdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDY4OUYxQUYxMjY3QkFFMTAwRThEMzgwIC8qIEZpbGVNZXRhZGF0
YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDc0NCw2ICsyNDc1Nyw3IEBACiAJCQkJRTFBNjQzRjIw
RUMwOTcyNTAwNzc5NjY4IC8qIFdvcmtlclNjcmlwdENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJENzBCQTEzMTgwNzREREYwMDAxOTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMuaCBp
biBIZWFkZXJzICovLAogCQkJCUYzNDc0MkU5MTM0MzYzNTAwMDUzMUJDMiAvKiBXb3JrZXJTY3Jp
cHREZWJ1Z1NlcnZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTEwNTlEREUxODIwQjE3NjAwREZG
OUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTA3OTY5REI2MTdEMTQxNTEwMDdGRjg0MiAvKiBKU1JUQ0ljZUNhbmRpZGF0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdENkIzNDkwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExv
YWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVBNzY4MDQwRkU3MTI2NDAwQUI5QzhBIC8qIFdv
cmtlclNjcmlwdExvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzM2NSw2ICsyNzM3
OSw3IEBACiAJCQkJQUE0QzNBNzYwQjJCMTY3OTAwMjMzNEEyIC8qIElubGluZVN0eWxlU2hlZXRP
d25lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTlBRTA2MzE0MkQ2QjI0MDA2NTYzQTEgLyog
U3R5bGVGaWx0ZXJEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzMTc2MTIyMTNDNTE2Njkw
MDI2RTQ1NCAvKiBTdHlsZUZsZXhpYmxlQm94RGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1
MTA1OUREQjE4MjBCMTc2MDBERkY5QjEgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQ0VGNDQ3RDBFNjc0ODA2MDAxQzEyODcgLyogU3R5bGVHZW5l
cmF0ZWRJbWFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTBEQzc2QTE0NzQ3QkFCMDA1RTI0
NzEgLyogU3R5bGVHcmlkRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTEwREI5RDE0RjVE
Rjg3MDBBMDNCOTMgLyogU3R5bGVHcmlkSXRlbURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0y
Nzc4OSw2ICsyNzgwNCw3IEBACiAJCQkJN0U5OUFGNTEwQjEzODQ2NDY4RkIwMUE1IC8qIFdpbmRv
d0ZvY3VzQWxsb3dlZEluZGljYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzNzk5MTk5NjEy
MDBEREY0MDBFQTA0MUMgLyogV09GRkZpbGVGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MkU0MzQ2NDUwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk1MTA1OURERDE4MjBCMTc2MDBERkY5QjEgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0
aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGMzgyMDg5NjE0N0QzNUY5MDAxMEJDMDYgLyog
V29ya2VyQ29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUYzNDc0MkUwMTM0MzYz
MUYwMDUzMUJDMiAvKiBXb3JrZXJEZWJ1Z2dlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUEzRTI2NDMwMTQ3NDg5OTEwMDVBODU4OCAvKiBXb3JrZXJFdmVudFF1ZXVlLmNwcCBpbiBTb3Vy
Y2VzICovLAo=
</data>
<flag name="review"
          id="238204"
          type_id="1"
          status="+"
          setter="bdakin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215470</attachid>
            <date>2013-10-29 22:01:29 -0700</date>
            <delta_ts>2013-10-29 22:31:18 -0700</delta_ts>
            <desc>Patch for landing for EWS</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>135270</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYWYwYjI3OC4uYzdkYTljNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTc4Miw2ICs3ODIsOCBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAKICAgICBNb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0
aW9ucy5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAKICAg
ICBNb2R1bGVzL2luZGV4ZWRkYi9QYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuY3BwCkBAIC03OTAs
OCArNzkyLDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCQ3Vyc29yQmFja2VuZExldmVsREIuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmNwcAotICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5jcHAKLSAgICBNb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREJPcGVyYXRpb25zLmNwcAog
CiAgICAgTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKICAgICBNb2R1bGVzL21l
ZGlhc291cmNlL01lZGlhU291cmNlUmVnaXN0cnkuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWU1NDA0Mi4u
NDFmOWRkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMwIEBACiAyMDEzLTEwLTI5ICBCcmFkeSBF
aWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAorICAgICAgICBJREJUcmFuc2FjdGlvbkJhY2tl
bmQgc2hvdWxkIGJlIGNyb3NzIHBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM0NDkKKworICAgICAgICBSZXZpZXdlZCBieSBCZXRoIERh
a2luLgorCisgICAgICAgIC0gUmVuYW1lIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIgdG8g
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbAorICAgICAgICAtIFJlbmFtZSBJREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCT3BlcmF0aW9ucyB0byBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRp
b25zCisgICAgICAgIC0gTW92ZSB0aGVpciBmaWxlcyBmcm9tIHRoZSBsZXZlbGRiIHN1YmRpcmVj
dG9yeSB0byB0aGUgaW5kZXhlZGRiIGRpcmVjdG9yeQorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5j
cHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxk
Yi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmguCisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZExldmVsREJPcGVyYXRpb25zLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REJPcGVyYXRpb25zLmguCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lE
QkN1cnNvckJhY2tlbmRMZXZlbERCLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9s
ZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRMZXZlbERCLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjptYXliZUNyZWF0ZVRyYW5zYWN0aW9uQmFj
a2VuZCk6CisKKzIwMTMtMTAtMjkgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgor
CiAgICAgICAgIEF0dGVtcHRlZCBidWlsZC1maXggYWZ0ZXIgaHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9jaGFuZ2VzZXQvMTU4MjM0CiAKICAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
aW5kZXggMTcxZjcyZC4uZDViYzAxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBA
IC0xODQ2LDEzICsxODQ2LDEzIEBAIHdlYmNvcmVfbW9kdWxlc19zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZWNvcmRJZGVudGlmaWVyLmggXAogCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmggXAotCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQi5oIFwKLQlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREJPcGVyYXRpb25zLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRMZXZlbERCT3BlcmF0aW9ucy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmggXAogCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVy
YXRpb25zLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MWZmZjlhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCkBAIC0wLDAgKzEsMzQwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCQ3Vy
c29yQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwu
aCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkRhdGFi
YXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIK
KyNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2Vu
ZE9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCisj
aW5jbHVkZSAiTG9nZ2luZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3Jl
YXRlKElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlQmFja2VuZCwgaW50NjRfdCBpZCwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8
aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2Rl
KQoreworICAgIEhhc2hTZXQ8aW50NjRfdD4gb2JqZWN0U3RvcmVIYXNoU2V0OworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U3RvcmVJZHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG9i
amVjdFN0b3JlSGFzaFNldC5hZGQob2JqZWN0U3RvcmVJZHNbaV0pOworCisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKGRhdGFiYXNlQmFja2VuZCwgaWQs
IGNhbGxiYWNrcywgb2JqZWN0U3RvcmVIYXNoU2V0LCBtb2RlKSk7Cit9CisKK0lEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbCogZGF0YWJhc2VCYWNrZW5kLCBpbnQ2NF90IGlkLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIG9iamVjdFN0
b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlKQorICAgIDogSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKGlkKQorICAgICwgbV9vYmplY3RTdG9yZUlkcyhvYmplY3RT
dG9yZUlkcykKKyAgICAsIG1fbW9kZShtb2RlKQorICAgICwgbV9zdGF0ZShVbnVzZWQpCisgICAg
LCBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCisgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisg
ICAgLCBtX2RhdGFiYXNlKGRhdGFiYXNlQmFja2VuZCkKKyAgICAsIG1fYmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oZGF0YWJhc2VCYWNrZW5kLT5iYWNraW5nU3RvcmUoKS0+Y3JlYXRlQmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSkKKyAgICAsIG1fdGFza1RpbWVyKHRoaXMsICZJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjp0YXNrVGltZXJGaXJlZCkKKyAgICAsIG1fcGVuZGluZ1ByZWVtcHRpdmVF
dmVudHMoMCkKKyAgICAsIG1fYmFja2luZ1N0b3JlKGRhdGFiYXNlQmFja2VuZC0+YmFja2luZ1N0
b3JlKCkpCit7CisgICAgLy8gV2UgcGFzcyBhIHJlZmVyZW5jZSBvZiB0aGlzIG9iamVjdCBiZWZv
cmUgaXQgY2FuIGJlIGFkb3B0ZWQuCisgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7CisK
KyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZENyZWF0ZVRyYW5z
YWN0aW9uKHRoaXMpOworfQorCitJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp+SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbCgpCit7CisgICAgLy8gSXQgc2hvdWxkbid0IGJlIHBvc3NpYmxlIGZv
ciB0aGlzIG9iamVjdCB0byBnZXQgZGVsZXRlZCB1bnRpbCBpdCdzIGVpdGhlciBjb21wbGV0ZSBv
ciBhYm9ydGVkLgorICAgIEFTU0VSVChtX3N0YXRlID09IEZpbmlzaGVkKTsKK30KKwordm9pZCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlOjpUYXNrVHlwZSB0eXBlLCBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gdGFzaywg
UGFzc093blB0cjxJREJPcGVyYXRpb24+IGFib3J0VGFzaykKK3sKKyAgICBpZiAobV9zdGF0ZSA9
PSBGaW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHR5cGUgPT0gSURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlOjpOb3JtYWxUYXNrKQorICAgICAgICBtX3Rhc2tRdWV1ZS5hcHBl
bmQodGFzayk7CisgICAgZWxzZQorICAgICAgICBtX3ByZWVtcHRpdmVUYXNrUXVldWUuYXBwZW5k
KHRhc2spOworCisgICAgaWYgKGFib3J0VGFzaykKKyAgICAgICAgbV9hYm9ydFRhc2tRdWV1ZS5w
cmVwZW5kKGFib3J0VGFzayk7CisKKyAgICBpZiAobV9zdGF0ZSA9PSBVbnVzZWQpCisgICAgICAg
IHN0YXJ0KCk7CisgICAgZWxzZSBpZiAobV9zdGF0ZSA9PSBSdW5uaW5nICYmICFtX3Rhc2tUaW1l
ci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3Rhc2tUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisK
K3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6YWJvcnQoKQoreworICAgIGFib3J0KElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9y
LCAiSW50ZXJuYWwgZXJyb3IgKHVua25vd24gY2F1c2UpIikpOworfQorCit2b2lkIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJy
b3IpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjph
Ym9ydCIpOworICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBib29sIHdhc1J1bm5pbmcgPSBtX3N0YXRlID09IFJ1bm5pbmc7CisKKyAgICAvLyBUaGUg
bGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZv
cm1pbmcgdGhlCisgICAgLy8gYWJvcnQgc3RlcHMgYmVsb3cuIFdlIHRoZXJlZm9yZSB0YWtlIGEg
c2VsZiByZWZlcmVuY2UgdG8ga2VlcCBvdXJzZWx2ZXMKKyAgICAvLyBhbGl2ZSB3aGlsZSBleGVj
dXRpbmcgdGhpcyBtZXRob2QuCisgICAgUmVmPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHBy
b3RlY3QoKnRoaXMpOworCisgICAgbV9zdGF0ZSA9IEZpbmlzaGVkOworICAgIG1fdGFza1RpbWVy
LnN0b3AoKTsKKworICAgIGlmICh3YXNSdW5uaW5nKQorICAgICAgICBtX2JhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uLT5yb2xsYmFjaygpOworCisgICAgLy8gUnVuIHRoZSBhYm9ydCB0YXNrcywgaWYg
YW55LgorICAgIHdoaWxlICghbV9hYm9ydFRhc2tRdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
T3duUHRyPElEQk9wZXJhdGlvbj4gdGFzayhtX2Fib3J0VGFza1F1ZXVlLnRha2VGaXJzdCgpKTsK
KyAgICAgICAgdGFzay0+cGVyZm9ybSgpOworICAgIH0KKworICAgIC8vIEJhY2tpbmcgc3RvcmUg
cmVzb3VyY2VzIChoZWxkIHZpYSBjdXJzb3JzKSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBzY3Jp
cHQgY2FsbGJhY2tzCisgICAgLy8gYXJlIGZpcmVkLCBhcyB0aGUgc2NyaXB0IGNhbGxiYWNrcyBt
YXkgcmVsZWFzZSByZWZlcmVuY2VzIGFuZCBhbGxvdyB0aGUgYmFja2luZyBzdG9yZQorICAgIC8v
IGl0c2VsZiB0byBiZSByZWxlYXNlZCwgYW5kIG9yZGVyIGlzIGNyaXRpY2FsLgorICAgIGNsb3Nl
T3BlbkN1cnNvcnMoKTsKKyAgICBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLT5yZXNldFRyYW5z
YWN0aW9uKCk7CisKKyAgICAvLyBUcmFuc2FjdGlvbnMgbXVzdCBhbHNvIGJlIG1hcmtlZCBhcyBj
b21wbGV0ZWQgYmVmb3JlIHRoZSBmcm9udC1lbmQgaXMgbm90aWZpZWQsIGFzCisgICAgLy8gdGhl
IHRyYW5zYWN0aW9uIGNvbXBsZXRpb24gdW5ibG9ja3Mgb3BlcmF0aW9ucyBsaWtlIGNsb3Npbmcg
Y29ubmVjdGlvbnMuCisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5k
aWRGaW5pc2hUcmFuc2FjdGlvbih0aGlzKTsKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IoKS0+aXNBY3RpdmUodGhpcykpOworICAgIG1fZGF0YWJhc2UtPnRy
YW5zYWN0aW9uRmluaXNoZWQodGhpcyk7CisKKyAgICBpZiAobV9jYWxsYmFja3MpCisgICAgICAg
IG1fY2FsbGJhY2tzLT5vbkFib3J0KGlkKCksIGVycm9yKTsKKworICAgIG1fZGF0YWJhc2UtPnRy
YW5zYWN0aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVkKHRoaXMpOworCisgICAgbV9kYXRhYmFzZSA9
IDA7Cit9CisKK2Jvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6aXNUYXNrUXVldWVFbXB0
eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJlZW1wdGl2ZVRhc2tRdWV1ZS5pc0VtcHR5KCkg
JiYgbV90YXNrUXVldWUuaXNFbXB0eSgpOworfQorCitib29sIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6Omhhc1BlbmRpbmdUYXNrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGVuZGluZ1By
ZWVtcHRpdmVFdmVudHMgfHwgIWlzVGFza1F1ZXVlRW1wdHkoKTsKK30KKwordm9pZCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpyZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZSogY3Vyc29yKQoreworICAgIG1fb3BlbkN1cnNvcnMuYWRkKGN1cnNvcik7Cit9CisK
K3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dW5yZWdpc3Rlck9wZW5DdXJzb3IoSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZSogY3Vyc29yKQoreworICAgIG1fb3BlbkN1cnNvcnMucmVt
b3ZlKGN1cnNvcik7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6cnVuKCkK
K3sKKyAgICAvLyBUcmFuc2FjdGlvbkNvb3JkaW5hdG9yIGhhcyBzdGFydGVkIHRoaXMgdHJhbnNh
Y3Rpb24uIFNjaGVkdWxlIGEgdGltZXIKKyAgICAvLyB0byBwcm9jZXNzIHRoZSBmaXJzdCB0YXNr
LgorICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXJ0UGVuZGluZyB8fCBtX3N0YXRlID09IFJ1bm5p
bmcpOworICAgIEFTU0VSVCghbV90YXNrVGltZXIuaXNBY3RpdmUoKSk7CisKKyAgICBtX3Rhc2tU
aW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6c3RhcnQoKQoreworICAgIEFTU0VSVChtX3N0YXRlID09IFVudXNlZCk7CisKKyAgICBtX3N0
YXRlID0gU3RhcnRQZW5kaW5nOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IoKS0+ZGlkU3RhcnRUcmFuc2FjdGlvbih0aGlzKTsKKyAgICBtX2RhdGFiYXNlLT50cmFuc2Fj
dGlvblN0YXJ0ZWQodGhpcyk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
Y29tbWl0KCkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OmNvbW1pdCIpOworCisgICAgLy8gSW4gbXVsdGlwcm9jZXNzIHBvcnRzLCBmcm9udC1lbmQg
bWF5IGhhdmUgcmVxdWVzdGVkIGEgY29tbWl0IGJ1dCBhbiBhYm9ydCBoYXMgYWxyZWFkeQorICAg
IC8vIGJlZW4gaW5pdGlhdGVkIGFzeW5jaHJvbm91c2x5IGJ5IHRoZSBiYWNrLWVuZC4KKyAgICBp
ZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1f
c3RhdGUgPT0gVW51c2VkIHx8IG1fc3RhdGUgPT0gUnVubmluZyk7CisgICAgbV9jb21taXRQZW5k
aW5nID0gdHJ1ZTsKKworICAgIC8vIEZyb250LWVuZCBoYXMgcmVxdWVzdGVkIGEgY29tbWl0LCBi
dXQgdGhlcmUgbWF5IGJlIHRhc2tzIGxpa2UgY3JlYXRlSW5kZXggd2hpY2gKKyAgICAvLyBhcmUg
Y29uc2lkZXJlZCBzeW5jaHJvbm91cyBieSB0aGUgZnJvbnQtZW5kIGJ1dCBhcmUgcHJvY2Vzc2Vk
IGFzeW5jaHJvbm91c2x5LgorICAgIGlmIChoYXNQZW5kaW5nVGFza3MoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gVGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IG1heSBiZSBy
ZWxlYXNlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZQorICAgIC8vIGNvbW1pdCBzdGVwcyBiZWxvdy4g
V2UgdGhlcmVmb3JlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVwIG91cnNlbHZlcworICAg
IC8vIGFsaXZlIHdoaWxlIGV4ZWN1dGluZyB0aGlzIG1ldGhvZC4KKyAgICBSZWY8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBib29sIHVudXNlZCA9IG1f
c3RhdGUgPT0gVW51c2VkOworICAgIG1fc3RhdGUgPSBGaW5pc2hlZDsKKworICAgIGJvb2wgY29t
bWl0dGVkID0gdW51c2VkIHx8IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24tPmNvbW1pdCgpOwor
CisgICAgLy8gQmFja2luZyBzdG9yZSByZXNvdXJjZXMgKGhlbGQgdmlhIGN1cnNvcnMpIG11c3Qg
YmUgcmVsZWFzZWQgYmVmb3JlIHNjcmlwdCBjYWxsYmFja3MKKyAgICAvLyBhcmUgZmlyZWQsIGFz
IHRoZSBzY3JpcHQgY2FsbGJhY2tzIG1heSByZWxlYXNlIHJlZmVyZW5jZXMgYW5kIGFsbG93IHRo
ZSBiYWNraW5nIHN0b3JlCisgICAgLy8gaXRzZWxmIHRvIGJlIHJlbGVhc2VkLCBhbmQgb3JkZXIg
aXMgY3JpdGljYWwuCisgICAgY2xvc2VPcGVuQ3Vyc29ycygpOworICAgIG1fYmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24tPnJlc2V0VHJhbnNhY3Rpb24oKTsKKworICAgIC8vIFRyYW5zYWN0aW9ucyBt
dXN0IGFsc28gYmUgbWFya2VkIGFzIGNvbXBsZXRlZCBiZWZvcmUgdGhlIGZyb250LWVuZCBpcyBu
b3RpZmllZCwgYXMKKyAgICAvLyB0aGUgdHJhbnNhY3Rpb24gY29tcGxldGlvbiB1bmJsb2NrcyBv
cGVyYXRpb25zIGxpa2UgY2xvc2luZyBjb25uZWN0aW9ucy4KKyAgICBpZiAoIXVudXNlZCkKKyAg
ICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRGaW5pc2hUcmFu
c2FjdGlvbih0aGlzKTsKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMp
OworCisgICAgaWYgKGNvbW1pdHRlZCkgeworICAgICAgICBtX2NhbGxiYWNrcy0+b25Db21wbGV0
ZShpZCgpKTsKKyAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBs
ZXRlRmlyZWQodGhpcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uQWJv
cnQoaWQoKSwgSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
bmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBjb21taXR0aW5nIHRyYW5zYWN0aW9uLiIpKTsK
KyAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0RmlyZWQodGhp
cyk7CisgICAgfQorCisgICAgbV9kYXRhYmFzZSA9IDA7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6dGFza1RpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4qKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6dGFza1RpbWVyRmlyZWQiKTsKKyAgICBBU1NFUlQoIWlzVGFza1F1ZXVlRW1wdHkoKSk7CisK
KyAgICBpZiAobV9zdGF0ZSA9PSBTdGFydFBlbmRpbmcpIHsKKyAgICAgICAgbV9iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbi0+YmVnaW4oKTsKKyAgICAgICAgbV9zdGF0ZSA9IFJ1bm5pbmc7CisgICAg
fQorCisgICAgLy8gVGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IG1heSBiZSByZWxl
YXNlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZQorICAgIC8vIHRhc2tzLiBUYWtlIHRha2UgYSBzZWxm
IHJlZmVyZW5jZSB0byBrZWVwIHRoaXMgb2JqZWN0IGFsaXZlIHNvIHRoYXQKKyAgICAvLyB0aGUg
bG9vcCB0ZXJtaW5hdGlvbiBjb25kaXRpb25zIGNhbiBiZSBjaGVja2VkLgorICAgIFJlZjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFRhc2tRdWV1ZSog
dGFza1F1ZXVlID0gbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cyA/ICZtX3ByZWVtcHRpdmVUYXNr
UXVldWUgOiAmbV90YXNrUXVldWU7CisgICAgd2hpbGUgKCF0YXNrUXVldWUtPmlzRW1wdHkoKSAm
JiBtX3N0YXRlICE9IEZpbmlzaGVkKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXRlID09IFJ1bm5p
bmcpOworICAgICAgICBPd25QdHI8SURCT3BlcmF0aW9uPiB0YXNrKHRhc2tRdWV1ZS0+dGFrZUZp
cnN0KCkpOworICAgICAgICB0YXNrLT5wZXJmb3JtKCk7CisKKyAgICAgICAgLy8gRXZlbnQgaXRz
ZWxmIG1heSBjaGFuZ2Ugd2hpY2ggcXVldWUgc2hvdWxkIGJlIHByb2Nlc3NlZCBuZXh0LgorICAg
ICAgICB0YXNrUXVldWUgPSBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzID8gJm1fcHJlZW1wdGl2
ZVRhc2tRdWV1ZSA6ICZtX3Rhc2tRdWV1ZTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGVyZSBhcmUg
bm8gcGVuZGluZyB0YXNrcywgd2UgaGF2ZW4ndCBhbHJlYWR5IGNvbW1pdHRlZC9hYm9ydGVkLAor
ICAgIC8vIGFuZCB0aGUgZnJvbnQtZW5kIHJlcXVlc3RlZCBhIGNvbW1pdCwgaXQgaXMgbm93IHNh
ZmUgdG8gZG8gc28uCisgICAgaWYgKCFoYXNQZW5kaW5nVGFza3MoKSAmJiBtX3N0YXRlICE9IEZp
bmlzaGVkICYmIG1fY29tbWl0UGVuZGluZykKKyAgICAgICAgY29tbWl0KCk7Cit9CisKK3ZvaWQg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y2xvc2VPcGVuQ3Vyc29ycygpCit7CisgICAgZm9y
IChIYXNoU2V0PElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UqPjo6aXRlcmF0b3IgaSA9IG1fb3Bl
bkN1cnNvcnMuYmVnaW4oKTsgaSAhPSBtX29wZW5DdXJzb3JzLmVuZCgpOyArK2kpCisgICAgICAg
ICgqaSktPmNsb3NlKCk7CisgICAgbV9vcGVuQ3Vyc29ycy5jbGVhcigpOworfQorCit2b2lkIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRp
b24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKK3sK
KyAgICBzY2hlZHVsZVRhc2soQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OmNyZWF0ZSh0aGlz
LCBtX2JhY2tpbmdTdG9yZS5nZXQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSksIENyZWF0ZU9iamVj
dFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZU1ldGFkYXRhLmlk
KSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c2NoZWR1bGVEZWxldGVP
YmplY3RTdG9yZU9wZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RT
dG9yZU1ldGFkYXRhKQoreworICAgIHNjaGVkdWxlVGFzayhEZWxldGVPYmplY3RTdG9yZU9wZXJh
dGlvbjo6Y3JlYXRlKHRoaXMsIG1fYmFja2luZ1N0b3JlLmdldCgpLCBvYmplY3RTdG9yZU1ldGFk
YXRhKSwgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVj
dFN0b3JlTWV0YWRhdGEpKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpz
Y2hlZHVsZVZlcnNpb25DaGFuZ2VPcGVyYXRpb24oaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IHJlcXVlc3RlZFZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzLCBjb25z
dCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSkKK3sKKyAgICBzY2hlZHVsZVRhc2soSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMs
IHRyYW5zYWN0aW9uSWQsIHJlcXVlc3RlZFZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxs
YmFja3MpLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRp
b246OmNyZWF0ZSh0aGlzLCBTdHJpbmc6Om51bWJlcihtZXRhZGF0YS52ZXJzaW9uKSwgbWV0YWRh
dGEudmVyc2lvbikpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnNjaGVk
dWxlQ3JlYXRlSW5kZXhPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJ
bmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQoreworICAgIHNjaGVkdWxlVGFzayhDcmVhdGVJ
bmRleE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG1fYmFja2luZ1N0b3JlLmdldCgpLCBvYmplY3RT
dG9yZUlkLCBpbmRleE1ldGFkYXRhKSwgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRl
KHRoaXMsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEuaWQpKTsKK30KKwordm9pZCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hlZHVsZURlbGV0ZUluZGV4T3BlcmF0aW9uKGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkK
K3sKKyAgICBzY2hlZHVsZVRhc2soRGVsZXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBt
X2JhY2tpbmdTdG9yZS5nZXQoKSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSksIERlbGV0
ZUluZGV4QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBpbmRleE1l
dGFkYXRhKSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c2NoZWR1bGVH
ZXRPcGVyYXRpb24oY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBr
ZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgc2NoZWR1bGVUYXNrKEdldE9wZXJhdGlvbjo6
Y3JlYXRlKHRoaXMsIG1fYmFja2luZ1N0b3JlLmdldCgpLCBtZXRhZGF0YSwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGN1cnNvclR5cGUsIGNhbGxiYWNrcykpOworfQorCit2b2lk
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlUHV0T3BlcmF0aW9uKGNvbnN0IElE
Qk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEsIFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgSURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJ
bmRleEtleXM+JiBpbmRleEtleXMpCit7CisgICAgc2NoZWR1bGVUYXNrKFB1dE9wZXJhdGlvbjo6
Y3JlYXRlKHRoaXMsIG1fYmFja2luZ1N0b3JlLmdldCgpLCBkYXRhYmFzZSgpLmlkKCksIG9iamVj
dFN0b3JlTWV0YWRhdGEsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgaW5kZXhJZHMs
IGluZGV4S2V5cykpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnNjaGVk
dWxlU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHNpemVfdCBpbmRleENvdW50KQoreworICAgIHNj
aGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlByZWVtcHRpdmVUYXNrLCBT
ZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBpbmRleENvdW50KSk7Cit9CisK
K3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0
aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9u
LCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKK3sKKyAgICBzY2hlZHVsZVRhc2soT3BlbkN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKHRo
aXMsIG1fYmFja2luZ1N0b3JlLmdldCgpLCBkYXRhYmFzZSgpLmlkKCksIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRhc2tUeXBlLCBjYWxs
YmFja3MpKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hlZHVsZUNv
dW50T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcykKK3sKKyAgICBzY2hlZHVsZVRhc2soQ291bnRPcGVyYXRpb246OmNyZWF0ZSh0aGlz
LCBtX2JhY2tpbmdTdG9yZS5nZXQoKSwgZGF0YWJhc2UoKS5pZCgpLCBvYmplY3RTdG9yZUlkLCBp
bmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6c2NoZWR1bGVEZWxldGVSYW5nZU9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIHNjaGVkdWxlVGFzayhEZWxldGVSYW5nZU9wZXJh
dGlvbjo6Y3JlYXRlKHRoaXMsIG1fYmFja2luZ1N0b3JlLmdldCgpLCBkYXRhYmFzZSgpLmlkKCks
IG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKK30KKwordm9pZCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hlZHVsZUNsZWFyT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBzY2hl
ZHVsZVRhc2soQ2xlYXJPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBtX2JhY2tpbmdTdG9yZS5nZXQo
KSwgZGF0YWJhc2UoKS5pZCgpLCBvYmplY3RTdG9yZUlkLCBjYWxsYmFja3MpKTsKK30KKworUGFz
c1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpjcmVhdGVDdXJzb3JCYWNrZW5kKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6Q3Vyc29y
JiBjdXJzb3IsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQp
Cit7CisgICAgcmV0dXJuIG1fZGF0YWJhc2UtPmZhY3RvcnlCYWNrZW5kKCkuY3JlYXRlQ3Vyc29y
QmFja2VuZCgqdGhpcywgY3Vyc29yLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgb2JqZWN0U3RvcmVJ
ZCk7Cit9CisKK307CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjVi
MTIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsX2gKKyNkZWZpbmUgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbF9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUg
IklEQkJhY2tpbmdTdG9yZUludGVyZmFjZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNs
dWRlICJJREJEYXRhYmFzZUVycm9yLmgiCisjaW5jbHVkZSAiSURCT3BlcmF0aW9uLmgiCisjaW5j
bHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiVGltZXIu
aCIKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJE
YXRhYmFzZUNhbGxiYWNrczsKKworY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCBGSU5B
TCA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IGNyZWF0ZShJREJE
YXRhYmFzZUJhY2tlbmRJbXBsKiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlk
cywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUpOworICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwoKTsKKworICAgIHZpcnR1YWwgdm9pZCBjb21taXQoKSBPVkVSUklERSBG
SU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0
dWFsIHZvaWQgYWJvcnQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPikgT1ZFUlJJREUgRklO
QUw7CisKKyAgICB2aXJ0dWFsIHZvaWQgcnVuKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlKCkgY29uc3QgT1ZFUlJJREUgRklOQUwgeyByZXR1
cm4gbV9tb2RlOyB9CisgICAgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgc2NvcGUoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBtX29iamVjdFN0b3JlSWRzOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
c2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiB0YXNrLCBQYXNzT3duUHRyPElE
Qk9wZXJhdGlvbj4gYWJvcnRUYXNrID0gbnVsbHB0cikgeyBzY2hlZHVsZVRhc2soSURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlOjpOb3JtYWxUYXNrLCB0YXNrLCBhYm9ydFRhc2spOyB9CisgICAg
dmlydHVhbCB2b2lkIHNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRh
c2tUeXBlLCBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4sIFBhc3NPd25QdHI8SURCT3BlcmF0aW9u
PiBhYm9ydFRhc2sgPSBudWxscHRyKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCByZWdp
c3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZSopIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlKikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUHJlZW1wdGl2ZUV2ZW50KCkg
T1ZFUlJJREUgeyBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKys7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZGlkQ29tcGxldGVQcmVlbXB0aXZlRXZlbnQoKSBPVkVSUklERSB7IG1fcGVuZGluZ1ByZWVt
cHRpdmVFdmVudHMtLTsgQVNTRVJUKG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgPj0gMCk7IH0K
KyAgICB2aXJ0dWFsIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24mIGJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKCkgeyByZXR1cm4gKm1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb247
IH0KKworICAgIHZpcnR1YWwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlJiBkYXRhYmFzZSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuICptX2RhdGFiYXNlOyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgc2NoZWR1bGVDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhJikgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlRGVs
ZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYpIE9W
RVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZVZlcnNpb25DaGFuZ2VPcGVy
YXRpb24oaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24sIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4s
IGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFs
IHZvaWQgc2NoZWR1bGVDcmVhdGVJbmRleE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQkluZGV4TWV0YWRhdGEmKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2NoZWR1bGVEZWxldGVJbmRleE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQkluZGV4TWV0YWRhdGEmKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2NoZWR1bGVHZXRPcGVyYXRpb24oY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwg
SW5kZXhlZERCOjpDdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9WRVJSSURF
IEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZVB1dE9wZXJhdGlvbihjb25zdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhJiwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNz
UmVmUHRyPElEQktleT4sIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBj
b25zdCBWZWN0b3I8SW5kZXhLZXlzPiYpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9p
ZCBzY2hlZHVsZVNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbihzaXplX3QgaW5kZXhDb3VudCkgT1ZF
UlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlT3BlbkN1cnNvck9wZXJhdGlv
bihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5
cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPikgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ291
bnRPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9WRVJSSURFIEZJ
TkFMOworICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZURlbGV0ZVJhbmdlT3BlcmF0aW9uKGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPikgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ2xl
YXJPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4pIE9WRVJSSURFIEZJTkFMOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUN1cnNvckJhY2tlbmQoSURCQmFja2luZ1N0b3JlSW50ZXJm
YWNlOjpDdXJzb3ImLCBJbmRleGVkREI6OkN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZTo6VGFza1R5cGUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREU7CisKK3By
aXZhdGU6CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsKiwgaW50NjRfdCBpZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0
IEhhc2hTZXQ8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZSk7CisKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgVW51c2VkLCAvLyBDcmVhdGVkLCBi
dXQgbm8gdGFza3MgeWV0LgorICAgICAgICBTdGFydFBlbmRpbmcsIC8vIEVucXVldWVkIHRhc2tz
LCBidXQgYmFja2luZyBzdG9yZSB0cmFuc2FjdGlvbiBub3QgeWV0IHN0YXJ0ZWQuCisgICAgICAg
IFJ1bm5pbmcsIC8vIEJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24gc3RhcnRlZCBidXQgbm90IHll
dCBmaW5pc2hlZC4KKyAgICAgICAgRmluaXNoZWQsIC8vIEVpdGhlciBhYm9ydGVkIG9yIGNvbW1p
dHRlZC4KKyAgICB9OworCisgICAgdm9pZCBzdGFydCgpOworCisgICAgYm9vbCBpc1Rhc2tRdWV1
ZUVtcHR5KCkgY29uc3Q7CisgICAgYm9vbCBoYXNQZW5kaW5nVGFza3MoKSBjb25zdDsKKworICAg
IHZvaWQgdGFza1RpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4qKTsK
KyAgICB2b2lkIGNsb3NlT3BlbkN1cnNvcnMoKTsKKworICAgIGNvbnN0IEhhc2hTZXQ8aW50NjRf
dD4gbV9vYmplY3RTdG9yZUlkczsKKyAgICBjb25zdCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9k
ZSBtX21vZGU7CisKKyAgICBTdGF0ZSBtX3N0YXRlOworICAgIGJvb2wgbV9jb21taXRQZW5kaW5n
OworICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CisgICAgUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0YWJhc2U7CisKKyAgICB0eXBlZGVmIERl
cXVlPE93blB0cjxJREJPcGVyYXRpb24+PiBUYXNrUXVldWU7CisgICAgVGFza1F1ZXVlIG1fdGFz
a1F1ZXVlOworICAgIFRhc2tRdWV1ZSBtX3ByZWVtcHRpdmVUYXNrUXVldWU7CisgICAgVGFza1F1
ZXVlIG1fYWJvcnRUYXNrUXVldWU7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCQmFja2luZ1N0
b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbj4gbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbjsKKwor
ICAgIC8vIEZJWE1FOiBkZWxldGUgdGhlIHRpbWVyIG9uY2Ugd2UgaGF2ZSB0aHJlYWRzIGluc3Rl
YWQuCisgICAgVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gbV90YXNrVGltZXI7Cisg
ICAgaW50IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHM7CisKKyAgICBIYXNoU2V0PElEQkN1cnNv
ckJhY2tlbmRJbnRlcmZhY2UqPiBtX29wZW5DdXJzb3JzOworICAgIAorICAgIFJlZlB0cjxJREJC
YWNraW5nU3RvcmVJbnRlcmZhY2U+IG1fYmFja2luZ1N0b3JlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRp
ZiAvLyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
T3BlcmF0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgxNjkz
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwCkBAIC0wLDAgKzEsMzg2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFj
a2VuZE9wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2Uu
aCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkluZGV4
V3JpdGVyLmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJSZWNvcmRJ
ZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3ZvaWQgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oKQorewor
ICAgIExPRyhTdG9yYWdlQVBJLCAiQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24iKTsKKyAgICBp
ZiAoIW1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmlkKCksIG1f
b2JqZWN0U3RvcmVNZXRhZGF0YS5pZCwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLm5hbWUsIG1fb2Jq
ZWN0U3RvcmVNZXRhZGF0YS5rZXlQYXRoLCBtX29iamVjdFN0b3JlTWV0YWRhdGEuYXV0b0luY3Jl
bWVudCkpIHsKKyAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0
cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBjcmVhdGluZyBvYmplY3Qgc3RvcmUgJyVzJy4i
LCBtX29iamVjdFN0b3JlTWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIG1f
dHJhbnNhY3Rpb24tPmFib3J0KGVycm9yLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9Cit9CisKK3ZvaWQgQ3JlYXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0oKQoreworICAgIExP
RyhTdG9yYWdlQVBJLCAiQ3JlYXRlSW5kZXhPcGVyYXRpb24iKTsKKyAgICBpZiAoIW1fYmFja2lu
Z1N0b3JlLT5jcmVhdGVJbmRleChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmlkKCksIG1fb2JqZWN0U3RvcmVJZCwgbV9p
bmRleE1ldGFkYXRhLmlkLCBtX2luZGV4TWV0YWRhdGEubmFtZSwgbV9pbmRleE1ldGFkYXRhLmtl
eVBhdGgsIG1faW5kZXhNZXRhZGF0YS51bmlxdWUsIG1faW5kZXhNZXRhZGF0YS5tdWx0aUVudHJ5
KSkgeworICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIklu
dGVybmFsIGVycm9yIHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZSBpbmRleCAnJXMnLiIsIG1faW5kZXhN
ZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9
CisKK3ZvaWQgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSgpCit7CisgICAgTE9H
KFN0b3JhZ2VBUEksICJDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uIik7CisgICAgbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5yZW1vdmVJbmRleChtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCk7
Cit9CisKK3ZvaWQgRGVsZXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0oKQoreworICAgIExPRyhT
dG9yYWdlQVBJLCAiRGVsZXRlSW5kZXhPcGVyYXRpb24iKTsKKyAgICBib29sIG9rID0gbV9iYWNr
aW5nU3RvcmUtPmRlbGV0ZUluZGV4KG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuaWQoKSwgbV9vYmplY3RTdG9yZUlkLCBt
X2luZGV4TWV0YWRhdGEuaWQpOworICAgIGlmICghb2spIHsKKyAgICAgICAgUmVmUHRyPElEQkRh
dGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBk
ZWxldGluZyBpbmRleCAnJXMnLiIsIG1faW5kZXhNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkp
KTsKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IpOworICAgIH0KK30KKwordm9p
ZCBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKCkKK3sKKyAgICBMT0coU3RvcmFn
ZUFQSSwgIkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24iKTsKKyAgICBtX3RyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpLmFkZEluZGV4KG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleE1ldGFkYXRhLCBJREJJ
bmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpOworfQorCit2b2lkIEdldE9wZXJhdGlvbjo6cGVyZm9y
bSgpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJHZXRPcGVyYXRpb24iKTsKKworICAgIFJlZlB0
cjxJREJLZXk+IGtleTsKKworICAgIGlmIChtX2tleVJhbmdlLT5pc09ubHlLZXkoKSkKKyAgICAg
ICAga2V5ID0gbV9rZXlSYW5nZS0+bG93ZXIoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUmVmUHRy
PElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3I7Cisg
ICAgICAgIGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7Cisg
ICAgICAgICAgICBBU1NFUlQobV9jdXJzb3JUeXBlICE9IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25s
eSk7CisgICAgICAgICAgICAvLyBPYmplY3RTdG9yZSBSZXRyaWV2YWwgT3BlcmF0aW9uCisgICAg
ICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0
b3JlQ3Vyc29yKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0
YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1
cnNvck5leHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fY3Vyc29yVHlw
ZSA9PSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpIHsKKyAgICAgICAgICAgICAgICAvLyBJbmRl
eCBWYWx1ZSBSZXRyaWV2YWwgT3BlcmF0aW9uCisgICAgICAgICAgICAgICAgYmFja2luZ1N0b3Jl
Q3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcihtX3RyYW5zYWN0aW9u
LT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJ
ZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5leHQpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBJbmRleCBSZWZlcmVuY2Vk
IFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KKyAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVD
dXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBt
X2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikg
eworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAga2V5ID0gYmFja2luZ1N0b3JlQ3Vyc29yLT5rZXko
KTsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5OworICAgIGJvb2wgb2s7
CisgICAgaWYgKG1faW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAg
ICAgICAgLy8gT2JqZWN0IFN0b3JlIFJldHJpZXZhbCBPcGVyYXRpb24KKyAgICAgICAgVmVjdG9y
PGNoYXI+IHZhbHVlOworICAgICAgICBvayA9IG1fYmFja2luZ1N0b3JlLT5nZXRSZWNvcmQobV90
cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29i
amVjdFN0b3JlSWQsICprZXksIHZhbHVlKTsKKyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAg
ICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBnZXRSZWNvcmQu
IikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHZhbHVl
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fYXV0b0luY3JlbWVu
dCAmJiAhbV9rZXlQYXRoLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25T
dWNjZXNzKFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IodmFsdWUpLCBrZXksIG1fa2V5UGF0aCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX2NhbGxiYWNrcy0+
b25TdWNjZXNzKFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IodmFsdWUpKTsKKyAgICAgICAgcmV0
dXJuOworCisgICAgfQorCisgICAgLy8gRnJvbSBoZXJlIHdlIGFyZSBkZWFsaW5nIG9ubHkgd2l0
aCBpbmRleGVzLgorICAgIG9rID0gbV9iYWNraW5nU3RvcmUtPmdldFByaW1hcnlLZXlWaWFJbmRl
eChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQs
IG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCAqa2V5LCBwcmltYXJ5S2V5KTsKKyAgICBpZiAo
IW9rKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3Ig
aW4gZ2V0UHJpbWFyeUtleVZpYUluZGV4LiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoIXByaW1hcnlLZXkpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSW5kZXhlZERC
OjpDdXJzb3JLZXlPbmx5KSB7CisgICAgICAgIC8vIEluZGV4IFZhbHVlIFJldHJpZXZhbCBPcGVy
YXRpb24KKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhwcmltYXJ5S2V5LmdldCgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEluZGV4IFJlZmVyZW5jZWQgVmFsdWUg
UmV0cmlldmFsIE9wZXJhdGlvbgorICAgIFZlY3RvcjxjaGFyPiB2YWx1ZTsKKyAgICBvayA9IG1f
YmFja2luZ1N0b3JlLT5nZXRSZWNvcmQobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsICpwcmltYXJ5S2V5LCB2YWx1
ZSk7CisgICAgaWYgKCFvaykgeworICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIklu
dGVybmFsIGVycm9yIGluIGdldFJlY29yZC4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9hdXRvSW5jcmVtZW50ICYm
ICFtX2tleVBhdGguaXNOdWxsKCkpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhT
aGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKHZhbHVlKSwgcHJpbWFyeUtleSwgbV9rZXlQYXRoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNoYXJl
ZEJ1ZmZlcjo6YWRvcHRWZWN0b3IodmFsdWUpKTsKK30KKwordm9pZCBQdXRPcGVyYXRpb246OnBl
cmZvcm0oKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiUHV0T3BlcmF0aW9uIik7CisgICAgQVNT
RVJUKG1fdHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZE9u
bHkpOworICAgIEFTU0VSVChtX2luZGV4SWRzLnNpemUoKSA9PSBtX2luZGV4S2V5cy5zaXplKCkp
OworICAgIGJvb2wga2V5V2FzR2VuZXJhdGVkID0gZmFsc2U7CisKKyAgICBSZWZQdHI8SURCS2V5
PiBrZXk7CisgICAgaWYgKG1fcHV0TW9kZSAhPSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6
OkN1cnNvclVwZGF0ZSAmJiBtX29iamVjdFN0b3JlLmF1dG9JbmNyZW1lbnQgJiYgIW1fa2V5KSB7
CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGF1dG9JbmNLZXkgPSBtX2JhY2tpbmdTdG9yZS0+Z2Vu
ZXJhdGVLZXkoKm1fdHJhbnNhY3Rpb24sIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCk7
CisgICAgICAgIGtleVdhc0dlbmVyYXRlZCA9IHRydWU7CisgICAgICAgIGlmICghYXV0b0luY0tl
eS0+aXNWYWxpZCgpKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwg
Ik1heGltdW0ga2V5IGdlbmVyYXRvciB2YWx1ZSByZWFjaGVkLiIpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBrZXkgPSBhdXRvSW5jS2V5OworICAgIH0gZWxzZQor
ICAgICAgICBrZXkgPSBtX2tleTsKKworICAgIEFTU0VSVChrZXkpOworICAgIEFTU0VSVChrZXkt
PmlzVmFsaWQoKSk7CisKKyAgICBSZWZQdHI8SURCUmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRl
bnRpZmllcjsKKyAgICBpZiAobV9wdXRNb2RlID09IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZTo6QWRkT25seSkgeworICAgICAgICBib29sIG9rID0gbV9iYWNraW5nU3RvcmUtPmtleUV4aXN0
c0luT2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
bV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkLCAqa2V5LCByZWNvcmRJZGVudGlmaWVyKTsK
KyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3Is
ICJJbnRlcm5hbCBlcnJvciBjaGVja2luZyBrZXkgZXhpc3RlbmNlLiIpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVjb3JkSWRlbnRpZmllcikgeworICAg
ICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsICJLZXkgYWxyZWFkeSBleGlzdHMg
aW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBWZWN0b3I8UmVmUHRyPElEQkluZGV4V3JpdGVyPj4gaW5kZXhXcml0ZXJz
OworICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7CisgICAgYm9vbCBvYmV5c0NvbnN0cmFpbnRzID0g
ZmFsc2U7CisgICAgYm9vbCBiYWNraW5nU3RvcmVTdWNjZXNzID0gbV9iYWNraW5nU3RvcmUtPm1h
a2VJbmRleFdyaXRlcnMoKm1fdHJhbnNhY3Rpb24sIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9y
ZSwgKmtleSwga2V5V2FzR2VuZXJhdGVkLCBtX2luZGV4SWRzLCBtX2luZGV4S2V5cywgaW5kZXhX
cml0ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKKyAgICBpZiAoIWJhY2tp
bmdTdG9yZVN1Y2Nlc3MpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRl
cm5hbCBlcnJvcjogYmFja2luZyBzdG9yZSBlcnJvciB1cGRhdGluZyBpbmRleCBrZXlzLiIpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW9iZXlzQ29uc3RyYWludHMpIHsKKyAg
ICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsIGVycm9yTWVzc2FnZSkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gQmVmb3JlIHRoaXMgcG9pbnQsIGRvbid0IGRvIGFu
eSBtdXRhdGlvbi4gQWZ0ZXIgdGhpcyBwb2ludCwgcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIGlu
IGNhc2Ugb2YgZXJyb3IuCisgICAgYmFja2luZ1N0b3JlU3VjY2VzcyA9IG1fYmFja2luZ1N0b3Jl
LT5wdXRSZWNvcmQobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9k
YXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkLCAqa2V5LCBtX3ZhbHVlLCByZWNvcmRJZGVudGlm
aWVyLmdldCgpKTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKKyAgICAgICAgbV9j
YWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFja2luZyBzdG9yZSBlcnJv
ciBwZXJmb3JtaW5nIHB1dC9hZGQuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleFdyaXRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgSURCSW5kZXhXcml0ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOwor
ICAgICAgICBpbmRleFdyaXRlci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmllci5nZXQo
KSwgKm1fYmFja2luZ1N0b3JlLCBtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQpOworICAgIH0KKworICAgIGlmICht
X29iamVjdFN0b3JlLmF1dG9JbmNyZW1lbnQgJiYgbV9wdXRNb2RlICE9IElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZTo6Q3Vyc29yVXBkYXRlICYmIGtleS0+dHlwZSgpID09IElEQktleTo6TnVt
YmVyVHlwZSkgeworICAgICAgICBib29sIG9rID0gbV9iYWNraW5nU3RvcmUtPnVwZGF0ZUtleUdl
bmVyYXRvcigqbV90cmFuc2FjdGlvbiwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkLCAq
a2V5LCAha2V5V2FzR2VuZXJhdGVkKTsKKyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAg
bV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciB1cGRhdGluZyBrZXkgZ2Vu
ZXJhdG9yLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moa2V5LnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgU2V0SW5k
ZXhlc1JlYWR5T3BlcmF0aW9uOjpwZXJmb3JtKCkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIlNl
dEluZGV4ZXNSZWFkeU9wZXJhdGlvbiIpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9p
bmRleENvdW50OyArK2kpCisgICAgICAgIG1fdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlUHJlZW1w
dGl2ZUV2ZW50KCk7Cit9CisKK3ZvaWQgT3BlbkN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybSgpCit7
CisgICAgTE9HKFN0b3JhZ2VBUEksICJPcGVuQ3Vyc29yT3BlcmF0aW9uIik7CisKKyAgICAvLyBU
aGUgZnJvbnRlbmQgaGFzIGJlZ3VuIGluZGV4aW5nLCBzbyB0aGlzIHBhdXNlcyB0aGUgdHJhbnNh
Y3Rpb24KKyAgICAvLyB1bnRpbCB0aGUgaW5kZXhpbmcgaXMgY29tcGxldGUuIFRoaXMgY2FuJ3Qg
aGFwcGVuIGFueSBlYXJsaWVyCisgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHN3aXRj
aCB0byBlYXJseSBtb2RlIGluIGNhc2UgbXVsdGlwbGUKKyAgICAvLyBpbmRleGVzIGFyZSBiZWlu
ZyBjcmVhdGVkIGluIGEgcm93LCB3aXRoIHB1dCgpJ3MgaW4gYmV0d2Vlbi4KKyAgICBpZiAobV90
YXNrVHlwZSA9PSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlByZWVtcHRpdmVUYXNrKQor
ICAgICAgICBtX3RyYW5zYWN0aW9uLT5hZGRQcmVlbXB0aXZlRXZlbnQoKTsKKworICAgIFJlZlB0
cjxJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yOwor
ICAgIGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7CisgICAg
ICAgIEFTU0VSVChtX2N1cnNvclR5cGUgIT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KTsKKyAg
ICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9y
ZUN1cnNvcihtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFi
YXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgbV9kaXJlY3Rpb24pOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChtX3Rhc2tUeXBlID09IElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZTo6Tm9ybWFsVGFzayk7CisgICAgICAgIGlmIChtX2N1cnNvclR5cGUgPT0g
SW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KQorICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29y
ID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcihtX3RyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9p
bmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhD
dXJzb3IobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFz
ZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwgbV9kaXJl
Y3Rpb24pOworICAgIH0KKworICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7CisgICAgICAg
IG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oMCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNl
OjpUYXNrVHlwZSB0YXNrVHlwZShzdGF0aWNfY2FzdDxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2U6OlRhc2tUeXBlPihtX3Rhc2tUeXBlKSk7CisKKyAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZT4gY3Vyc29yID0gbV90cmFuc2FjdGlvbi0+Y3JlYXRlQ3Vyc29yQmFja2VuZCgq
YmFja2luZ1N0b3JlQ3Vyc29yLCBtX2N1cnNvclR5cGUsIHRhc2tUeXBlLCBtX29iamVjdFN0b3Jl
SWQpOworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY3Vyc29yLCBjdXJzb3ItPmtleSgpLCBj
dXJzb3ItPnByaW1hcnlLZXkoKSwgY3Vyc29yLT52YWx1ZSgpKTsKK30KKwordm9pZCBDb3VudE9w
ZXJhdGlvbjo6cGVyZm9ybSgpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJDb3VudE9wZXJhdGlv
biIpOworICAgIHVpbnQzMl90IGNvdW50ID0gMDsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKKworICAgIGlmIChtX2luZGV4
SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKQorICAgICAgICBiYWNraW5nU3RvcmVD
dXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKG1fdHJhbnNh
Y3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RT
dG9yZUlkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5leHQpOworICAgIGVs
c2UKKyAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRl
eEtleUN1cnNvcihtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2Rh
dGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJ
bmRleGVkREI6OkN1cnNvck5leHQpOworICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7Cisg
ICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgZG8geworICAgICAgICArK2NvdW50OworICAgIH0gd2hpbGUgKGJhY2tpbmdT
dG9yZUN1cnNvci0+Y29udGludWVGdW5jdGlvbigwKSk7CisKKyAgICBtX2NhbGxiYWNrcy0+b25T
dWNjZXNzKGNvdW50KTsKK30KKwordm9pZCBEZWxldGVSYW5nZU9wZXJhdGlvbjo6cGVyZm9ybSgp
Cit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJEZWxldGVSYW5nZU9wZXJhdGlvbiIpOworICAgIFJl
ZlB0cjxJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29y
ID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1cnNvcihtX3RyYW5zYWN0aW9uLT5i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwg
bV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKKyAgICBpZiAoYmFja2lu
Z1N0b3JlQ3Vyc29yKSB7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmICghbV9iYWNraW5n
U3RvcmUtPmRlbGV0ZVJlY29yZChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgYmFja2luZ1N0b3JlQ3Vyc29yLT5y
ZWNvcmRJZGVudGlmaWVyKCkpKSB7CisgICAgICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3du
RXJyb3IsICJFcnJvciBkZWxldGluZyBkYXRhIGluIHJhbmdlIikpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoYmFja2luZ1N0b3JlQ3Vy
c29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKKyAgICB9CisKKyAgICBtX2NhbGxiYWNrcy0+b25T
dWNjZXNzKCk7Cit9CisKK3ZvaWQgQ2xlYXJPcGVyYXRpb246OnBlcmZvcm0oKQoreworICAgIExP
RyhTdG9yYWdlQVBJLCAiT2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbiIpOworICAgIGlmICghbV9i
YWNraW5nU3RvcmUtPmNsZWFyT2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQpKSB7CisgICAgICAg
IG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiRXJyb3IgY2xlYXJpbmcgb2JqZWN0IHN0b3JlIikp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsK
K30KKwordm9pZCBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybSgpCit7CisgICAg
TE9HKFN0b3JhZ2VBUEksICJEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbiIpOworICAgIGJvb2wg
b2sgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+YmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5pZCgpLCBt
X29iamVjdFN0b3JlTWV0YWRhdGEuaWQpOworICAgIGlmICghb2spIHsKKyAgICAgICAgUmVmUHRy
PElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBl
cnJvciBkZWxldGluZyBvYmplY3Qgc3RvcmUgJyVzJy4iLCBtX29iamVjdFN0b3JlTWV0YWRhdGEu
bmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KGVycm9y
KTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5n
ZU9wZXJhdGlvbjo6cGVyZm9ybSgpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJWZXJzaW9uQ2hh
bmdlT3BlcmF0aW9uIik7CisgICAgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlJiBkYXRhYmFz
ZSA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCk7CisgICAgaW50NjRfdCBkYXRhYmFzZUlkID0g
ZGF0YWJhc2UuaWQoKTsKKyAgICB1aW50NjRfdCBvbGRWZXJzaW9uID0gZGF0YWJhc2UubWV0YWRh
dGEoKS52ZXJzaW9uOworCisgICAgLy8gRklYTUU6IERhdGFiYXNlIHZlcnNpb25zIGFyZSBub3cg
b2YgdHlwZSB1aW50NjRfdCwgYnV0IHRoaXMgY29kZSBleHBlY3RlZCBpbnQ2NF90LgorICAgIEFT
U0VSVChtX3ZlcnNpb24gPiAoaW50NjRfdClvbGRWZXJzaW9uKTsKKyAgICBkYXRhYmFzZS5zZXRD
dXJyZW50VmVyc2lvbihtX3ZlcnNpb24pOworICAgIGlmICghZGF0YWJhc2UuYmFja2luZ1N0b3Jl
KCktPnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBkYXRhYmFzZS5tZXRhZGF0YSgpLnZlcnNpb24p
KSB7CisgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiRXJyb3Ig
d3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdlIHdoZW4gdXBkYXRpbmcgdmVyc2lvbi4iKTsK
KyAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoZXJyb3IpOworICAgICAgICBtX3RyYW5zYWN0
aW9uLT5hYm9ydChlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKCFk
YXRhYmFzZS5oYXNQZW5kaW5nU2Vjb25kSGFsZk9wZW4oKSk7CisgICAgZGF0YWJhc2Uuc2V0UGVu
ZGluZ1NlY29uZEhhbGZPcGVuKElEQlBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKCptX2NhbGxiYWNr
cywgKm1fZGF0YWJhc2VDYWxsYmFja3MsIG1fdHJhbnNhY3Rpb25JZCwgbV92ZXJzaW9uKSk7Cisg
ICAgbV9jYWxsYmFja3MtPm9uVXBncmFkZU5lZWRlZChvbGRWZXJzaW9uLCAmZGF0YWJhc2UsIGRh
dGFiYXNlLm1ldGFkYXRhKCkpOworfQorCit2b2lkIENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVy
YXRpb246OnBlcmZvcm0oKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiQ3JlYXRlT2JqZWN0U3Rv
cmVBYm9ydE9wZXJhdGlvbiIpOworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkucmVtb3Zl
T2JqZWN0U3RvcmUobV9vYmplY3RTdG9yZUlkKTsKK30KKwordm9pZCBEZWxldGVPYmplY3RTdG9y
ZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKCkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkRlbGV0
ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24iKTsKKyAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFz
ZSgpLmFkZE9iamVjdFN0b3JlKG1fb2JqZWN0U3RvcmVNZXRhZGF0YSwgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YTo6SW52YWxpZElkKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpW
ZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb246OnBlcmZvcm0oKQoreworICAgIExPRyhTdG9yYWdl
QVBJLCAiVmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uIik7CisgICAgbV90cmFuc2FjdGlvbi0+
ZGF0YWJhc2UoKS5zZXRDdXJyZW50VmVyc2lvbihtX3ByZXZpb3VzSW50VmVyc2lvbik7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjQ0M2I2ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgK
QEAgLTAsMCArMSw0NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQlRyYW5zYWN0aW9uQmFj
a2VuZE9wZXJhdGlvbnNfaAorI2RlZmluZSBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25z
X2gKKworI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKKyNpbmNsdWRlICJJREJP
cGVyYXRpb24uaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIK
KworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9i
amVjdFN0b3JlTWV0YWRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENy
ZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUsIG9iamVj
dFN0b3JlTWV0YWRhdGEpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVS
UklERSBGSU5BTDsKK3ByaXZhdGU6CisgICAgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9i
amVjdFN0b3JlTWV0YWRhdGEpCisgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikK
KyAgICAgICAgLCBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9vYmpl
Y3RTdG9yZU1ldGFkYXRhKG9iamVjdFN0b3JlTWV0YWRhdGEpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0aW9u
OworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U+IG1fYmFja2luZ1N0
b3JlOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9yZU1ldGFk
YXRhOworfTsKKworY2xhc3MgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24gOiBwdWJsaWMgSURC
T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+
IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJC
YWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24odHJhbnNhY3Rpb24sIGJhY2tpbmdT
dG9yZSwgb2JqZWN0U3RvcmVNZXRhZGF0YSkpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybSgpIE9WRVJSSURFIEZJTkFMOworcHJpdmF0ZToKKyAgICBEZWxldGVPYmplY3RTdG9yZU9w
ZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJC
YWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRy
YW5zYWN0aW9uKQorICAgICAgICAsIG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAg
ICAgLCBtX29iamVjdFN0b3JlTWV0YWRhdGEob2JqZWN0U3RvcmVNZXRhZGF0YSkKKyAgICB7Cisg
ICAgfQorCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV90cmFu
c2FjdGlvbjsKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlPiBtX2Jh
Y2tpbmdTdG9yZTsKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3Rv
cmVNZXRhZGF0YTsKK307CisKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25D
aGFuZ2VPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgdmVy
c2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IFZlcnNpb25DaGFuZ2VPcGVyYXRpb24odHJhbnNhY3Rpb24sIHRyYW5z
YWN0aW9uSWQsIHZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpKTsKKyAgICB9
CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKK3ByaXZhdGU6Cisg
ICAgVmVyc2lvbkNoYW5nZU9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgdmVyc2lvbiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCisgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFu
c2FjdGlvbikKKyAgICAgICAgLCBtX3RyYW5zYWN0aW9uSWQodHJhbnNhY3Rpb25JZCkKKyAgICAg
ICAgLCBtX3ZlcnNpb24odmVyc2lvbikKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3Mp
CisgICAgICAgICwgbV9kYXRhYmFzZUNhbGxiYWNrcyhkYXRhYmFzZUNhbGxiYWNrcykKKyAgICB7
CisgICAgfQorCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV90
cmFuc2FjdGlvbjsKKyAgICBpbnQ2NF90IG1fdHJhbnNhY3Rpb25JZDsKKyAgICBpbnQ2NF90IG1f
dmVyc2lvbjsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7Cit9OworCitjbGFz
cyBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RT
dG9yZUlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVPYmplY3RT
dG9yZUFib3J0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkKSk7CisgICAgfQor
ICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7Citwcml2YXRlOgorICAg
IENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQorICAgICAgICA6IG1f
dHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVj
dFN0b3JlSWQpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0
b3JlSWQ7Cit9OworCitjbGFzcyBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIDogcHVi
bGljIElEQk9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3Bl
cmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlv
biwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24o
dHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtKCkgT1ZFUlJJREUgRklOQUw7Citwcml2YXRlOgorICAgIERlbGV0ZU9iamVjdFN0b3JlQWJv
cnRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwg
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKKyAgICAg
ICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVN
ZXRhZGF0YShvYmplY3RTdG9yZU1ldGFkYXRhKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0aW9uOworICAgIElEQk9i
amVjdFN0b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9yZU1ldGFkYXRhOworfTsKKworY2xhc3MgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uIDogcHVibGlj
IElEQk9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0
aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwg
Y29uc3QgU3RyaW5nJiBwcmV2aW91c1ZlcnNpb24sIGludDY0X3QgcHJldmlvdXNJbnRWZXJzaW9u
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBWZXJzaW9uQ2hhbmdlQWJvcnRP
cGVyYXRpb24odHJhbnNhY3Rpb24sIHByZXZpb3VzVmVyc2lvbiwgcHJldmlvdXNJbnRWZXJzaW9u
KSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7Citw
cml2YXRlOgorICAgIFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBjb25zdCBTdHJpbmcmIHByZXZpb3VzVmVyc2lv
biwgaW50NjRfdCBwcmV2aW91c0ludFZlcnNpb24pCisgICAgICAgIDogbV90cmFuc2FjdGlvbih0
cmFuc2FjdGlvbikKKyAgICAgICAgLCBtX3ByZXZpb3VzVmVyc2lvbihwcmV2aW91c1ZlcnNpb24p
CisgICAgICAgICwgbV9wcmV2aW91c0ludFZlcnNpb24ocHJldmlvdXNJbnRWZXJzaW9uKQorICAg
IHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBt
X3RyYW5zYWN0aW9uOworICAgIFN0cmluZyBtX3ByZXZpb3VzVmVyc2lvbjsKKyAgICBpbnQ2NF90
IG1fcHJldmlvdXNJbnRWZXJzaW9uOworfTsKKworY2xhc3MgQ3JlYXRlSW5kZXhPcGVyYXRpb24g
OiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJ
REJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVJbmRleE9wZXJhdGlvbih0cmFu
c2FjdGlvbiwgYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7Cisg
ICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7Citwcml2YXRl
OgorICAgIENyZWF0ZUluZGV4T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRh
dGEpCisgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAgICAgLCBtX2Jh
Y2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVj
dFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCisgICAg
eworICAgIH0KKworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1f
dHJhbnNhY3Rpb247CisgICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUludGVyZmFjZT4g
bV9iYWNraW5nU3RvcmU7CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAg
Y29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7Cit9OworCitjbGFzcyBDcmVh
dGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZUlu
ZGV4QWJvcnRPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpKTsK
KyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKK3ByaXZh
dGU6CisgICAgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCkKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQorICAgICAgICAsIG1f
b2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1faW5kZXhJZChpbmRleElk
KQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPiBtX3RyYW5zYWN0aW9uOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9y
ZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElkOworfTsKKworY2xhc3MgRGVsZXRlSW5k
ZXhPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9y
ZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1l
dGFkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVJbmRleE9w
ZXJhdGlvbih0cmFuc2FjdGlvbiwgYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZUlkLCBpbmRleE1l
dGFkYXRhKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklO
QUw7Citwcml2YXRlOgorICAgIERlbGV0ZUluZGV4T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFj
a2luZ1N0b3JlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEm
IGluZGV4TWV0YWRhdGEpCisgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAg
ICAgICAgLCBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9vYmplY3RT
dG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0
YWRhdGEpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247CisgICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZUludGVyZmFjZT4gbV9iYWNraW5nU3RvcmU7CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0
b3JlSWQ7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7Cit9Owor
CitjbGFzcyBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uKHRyYW5z
YWN0aW9uLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7CisgICAgfQorICAgIHZpcnR1
YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7Citwcml2YXRlOgorICAgIERlbGV0ZUlu
ZGV4QWJvcnRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRl
eE1ldGFkYXRhKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAg
ICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleE1ldGFk
YXRhKGluZGV4TWV0YWRhdGEpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247CisgICAgY29uc3QgaW50NjRfdCBt
X29iamVjdFN0b3JlSWQ7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRh
dGE7Cit9OworCitjbGFzcyBHZXRPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRl
cmZhY2UqIGJhY2tpbmdTdG9yZSwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IEdldE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgYmFja2luZ1N0b3JlLCBtZXRhZGF0
YSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGN1cnNvclR5cGUsIGNhbGxiYWNr
cykpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIE9WRVJSSURFIEZJTkFMOwor
cHJpdmF0ZToKKyAgICBHZXRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGNv
bnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4
ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAgICwg
bV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAsIG1fZGF0YWJhc2VJZChtZXRh
ZGF0YS5pZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAg
ICAgLCBtX2luZGV4SWQoaW5kZXhJZCkKKyAgICAgICAgLCBtX2tleVBhdGgobWV0YWRhdGEub2Jq
ZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKS5rZXlQYXRoKQorICAgICAgICAsIG1fYXV0b0lu
Y3JlbWVudChtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmF1dG9JbmNy
ZW1lbnQpCisgICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKKyAgICAgICAgLCBtX2N1cnNv
clR5cGUoY3Vyc29yVHlwZSkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAg
eworICAgICAgICBBU1NFUlQobWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0
b3JlSWQpKTsKKyAgICAgICAgQVNTRVJUKG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0
U3RvcmVJZCkuaWQgPT0gb2JqZWN0U3RvcmVJZCk7CisgICAgfQorCisgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKKyAgICBjb25zdCBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBp
bnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsK
KyAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsKKyAgICBjb25zdCBJREJLZXlQYXRoIG1fa2V5
UGF0aDsKKyAgICBjb25zdCBib29sIG1fYXV0b0luY3JlbWVudDsKKyAgICBjb25zdCBSZWZQdHI8
SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CisgICAgY29uc3QgSW5kZXhlZERCOjpDdXJzb3JUeXBl
IG1fY3Vyc29yVHlwZTsKKyAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNr
czsKK307CisKK2NsYXNzIFB1dE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24geworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVy
ZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0
b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUs
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHV0
TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBW
ZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhL
ZXlzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQdXRPcGVyYXRpb24odHJh
bnNhY3Rpb24sIGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUsIHZhbHVlLCBr
ZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgaW5kZXhJZHMsIGluZGV4S2V5cykpOworICAgIH0KKyAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIE9WRVJSSURFIEZJTkFMOworcHJpdmF0ZToKKyAgICBQ
dXRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwg
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJ
ZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0
b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNh
Y3Rpb24pCisgICAgICAgICwgbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAs
IG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0
U3RvcmUpCisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgLCBtX2tleShrZXkpCisg
ICAgICAgICwgbV9wdXRNb2RlKHB1dE1vZGUpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJh
Y2tzKQorICAgICAgICAsIG1faW5kZXhJZHMoaW5kZXhJZHMpCisgICAgICAgICwgbV9pbmRleEtl
eXMoaW5kZXhLZXlzKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0aW9uOworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNr
aW5nU3RvcmVJbnRlcmZhY2U+IG1fYmFja2luZ1N0b3JlOworICAgIGNvbnN0IGludDY0X3QgbV9k
YXRhYmFzZUlkOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9y
ZTsKKyAgICBjb25zdCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX3ZhbHVlOworICAgIGNvbnN0IFJl
ZlB0cjxJREJLZXk+IG1fa2V5OworICAgIGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZTo6UHV0TW9kZSBtX3B1dE1vZGU7CisgICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9j
YWxsYmFja3M7CisgICAgY29uc3QgVmVjdG9yPGludDY0X3Q+IG1faW5kZXhJZHM7CisgICAgY29u
c3QgVmVjdG9yPEluZGV4S2V5cz4gbV9pbmRleEtleXM7Cit9OworCitjbGFzcyBTZXRJbmRleGVz
UmVhZHlPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBzaXplX3QgaW5kZXhDb3VudCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHRyYW5zYWN0aW9u
LCBpbmRleENvdW50KSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJ
REUgRklOQUw7Citwcml2YXRlOgorICAgIFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbihJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBzaXplX3QgaW5kZXhDb3VudCkK
KyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQorICAgICAgICAsIG1faW5kZXhD
b3VudChpbmRleENvdW50KQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0aW9uOworICAgIGNvbnN0IHNpemVfdCBtX2lu
ZGV4Q291bnQ7Cit9OworCitjbGFzcyBPcGVuQ3Vyc29yT3BlcmF0aW9uIDogcHVibGljIElEQk9w
ZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBj
cmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFj
a2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4
ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6
OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBPcGVuQ3Vyc29yT3BlcmF0aW9uKHRy
YW5zYWN0aW9uLCBiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4
SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRhc2tUeXBlLCBjYWxsYmFja3Mp
KTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKK3By
aXZhdGU6CisgICAgT3BlbkN1cnNvck9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9y
ZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29y
RGlyZWN0aW9uIGRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElE
QkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2Fj
dGlvbikKKyAgICAgICAgLCBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwg
bV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVj
dFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElkKGluZGV4SWQpCisgICAgICAgICwgbV9rZXlS
YW5nZShrZXlSYW5nZSkKKyAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCisgICAgICAg
ICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCisgICAgICAgICwgbV90YXNrVHlwZSh0YXNrVHlw
ZSkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKworICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247Cisg
ICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUludGVyZmFjZT4gbV9iYWNraW5nU3RvcmU7
CisgICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7CisgICAgY29uc3QgaW50NjRfdCBtX29i
amVjdFN0b3JlSWQ7CisgICAgY29uc3QgaW50NjRfdCBtX2luZGV4SWQ7CisgICAgY29uc3QgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKKyAgICBjb25zdCBJbmRleGVkREI6OkN1
cnNvckRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKKyAgICBjb25zdCBJbmRleGVkREI6OkN1cnNvclR5
cGUgbV9jdXJzb3JUeXBlOworICAgIGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6
VGFza1R5cGUgbV90YXNrVHlwZTsKKyAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2Nh
bGxiYWNrczsKK307CisKK2NsYXNzIENvdW50T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlv
biB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUo
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0
b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtl
eVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDb3VudE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgYmFja2lu
Z1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY2Fs
bGJhY2tzKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklO
QUw7Citwcml2YXRlOgorICAgIENvdW50T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0
b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9u
KQorICAgICAgICAsIG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX2Rh
dGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3Rv
cmVJZCkKKyAgICAgICAgLCBtX2luZGV4SWQoaW5kZXhJZCkKKyAgICAgICAgLCBtX2tleVJhbmdl
KGtleVJhbmdlKQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAg
fQorCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV90cmFuc2Fj
dGlvbjsKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlPiBtX2JhY2tp
bmdTdG9yZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBjb25zdCBpbnQ2
NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsKKyAgICBj
b25zdCBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CisgICAgY29uc3QgUmVmUHRyPElE
QkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9OworCitjbGFzcyBEZWxldGVSYW5nZU9wZXJhdGlv
biA6IHB1YmxpYyBJREJPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRy
PElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJh
bnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZVJhbmdlT3BlcmF0aW9uKHRyYW5zYWN0
aW9uLCBiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBj
YWxsYmFja3MpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBG
SU5BTDsKK3ByaXZhdGU6CisgICAgRGVsZXRlUmFuZ2VPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBi
YWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQorICAgICAg
ICAsIG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX2RhdGFiYXNlSWQo
ZGF0YWJhc2VJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAg
ICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxi
YWNrcykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJ
ZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBSZWZQdHI8
SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CisgICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4g
bV9jYWxsYmFja3M7Cit9OworCitjbGFzcyBDbGVhck9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVy
YXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3Jl
YXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ2xlYXJPcGVyYXRpb24odHJhbnNhY3Rp
b24sIGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgY2FsbGJhY2tzKSk7
CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7Citwcml2
YXRlOgorICAgIENsZWFyT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQor
ICAgICAgICAsIG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX2RhdGFi
YXNlSWQoZGF0YWJhc2VJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJ
ZCkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKworICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247Cisg
ICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUludGVyZmFjZT4gbV9iYWNraW5nU3RvcmU7
CisgICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7CisgICAgY29uc3QgaW50NjRfdCBtX29i
amVjdFN0b3JlSWQ7CisgICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKKyNlbmRpZiAvLyBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURC
Q3Vyc29yQmFja2VuZExldmVsREIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5jcHAKaW5kZXggODUwMjYxMi4uZmUx
NjhkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxk
Yi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5jcHAKQEAgLTM2LDcg
KzM2LDYgQEAKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklE
QktleVJhbmdlLmgiCiAjaW5jbHVkZSAiSURCT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiSURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5oCmlu
ZGV4IGVkMWY3MzguLjJhYzAyYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xldmVsZGIvSURCQ3Vyc29yQmFja2VuZExldmVsREIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRMZXZlbERC
LmgKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVMZXZlbERCLmgi
CiAjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQkRh
dGFiYXNlQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwCmlu
ZGV4IGQ1NDFhY2EuLmExY2M0YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2
ZWxEQi5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kTGV2
ZWxEQi5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJ
REJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREIuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgiCiAjaW5jbHVk
ZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgpAQCAtMTk0LDcgKzE5NCw3IEBAIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBJREJGYWN0b3J5QmFja2VuZExldmVsREI6
Om1heWJlQ3JlYXRlCiAgICAgaWYgKCFiYWNrZW5kLT5pc0lEQkRhdGFiYXNlQmFja2VuZEltcGwo
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gSURCVHJhbnNhY3Rpb25CYWNrZW5k
TGV2ZWxEQjo6Y3JlYXRlKHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZEltcGwqPihiYWNr
ZW5kKSwgdHJhbnNhY3Rpb25JZCwgZGF0YWJhc2VDYWxsYmFja3MsIG9iamVjdFN0b3JlSWRzLCBt
b2RlKTsKKyAgICByZXR1cm4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKHN0YXRp
Y19jYXN0PElEQkRhdGFiYXNlQmFja2VuZEltcGwqPihiYWNrZW5kKSwgdHJhbnNhY3Rpb25JZCwg
ZGF0YWJhc2VDYWxsYmFja3MsIG9iamVjdFN0b3JlSWRzLCBtb2RlKTsKIH0KIAogUGFzc1JlZlB0
cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBJREJGYWN0b3J5QmFja2VuZExldmVsREI6OmNy
ZWF0ZUN1cnNvckJhY2tlbmQoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlJiB0cmFuc2Fj
dGlvbkJhY2tlbmQsIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6Q3Vyc29yJiBiYWNraW5nU3Rv
cmVDdXJzb3IsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNiZjU0Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oIgotCi0j
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQotCi0jaW5jbHVkZSAi
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIklE
QkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREJPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1QYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IElEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREI6OmNyZWF0ZShJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZUJh
Y2tlbmQsIGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxi
YWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpU
cmFuc2FjdGlvbk1vZGUgbW9kZSkKLXsKLSAgICBIYXNoU2V0PGludDY0X3Q+IG9iamVjdFN0b3Jl
SGFzaFNldDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFN0b3JlSWRzLnNpemUo
KTsgKytpKQotICAgICAgICBvYmplY3RTdG9yZUhhc2hTZXQuYWRkKG9iamVjdFN0b3JlSWRzW2ld
KTsKLQotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
QihkYXRhYmFzZUJhY2tlbmQsIGlkLCBjYWxsYmFja3MsIG9iamVjdFN0b3JlSGFzaFNldCwgbW9k
ZSkpOwotfQotCi1JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpJREJUcmFuc2FjdGlvbkJh
Y2tlbmRMZXZlbERCKElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlQmFja2VuZCwgaW50
NjRfdCBpZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25z
dCBIYXNoU2V0PGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlv
bk1vZGUgbW9kZSkKLSAgICA6IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZShpZCkKLSAg
ICAsIG1fb2JqZWN0U3RvcmVJZHMob2JqZWN0U3RvcmVJZHMpCi0gICAgLCBtX21vZGUobW9kZSkK
LSAgICAsIG1fc3RhdGUoVW51c2VkKQotICAgICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQotICAg
ICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgICwgbV9kYXRhYmFzZShkYXRhYmFzZUJhY2tl
bmQpCi0gICAgLCBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKGRhdGFiYXNlQmFja2VuZC0+YmFj
a2luZ1N0b3JlKCktPmNyZWF0ZUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCkpCi0gICAgLCBtX3Rh
c2tUaW1lcih0aGlzLCAmSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6dGFza1RpbWVyRmly
ZWQpCi0gICAgLCBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKDApCi0gICAgLCBtX2JhY2tpbmdT
dG9yZShkYXRhYmFzZUJhY2tlbmQtPmJhY2tpbmdTdG9yZSgpKQotewotICAgIC8vIFdlIHBhc3Mg
YSByZWZlcmVuY2Ugb2YgdGhpcyBvYmplY3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVkLgotICAg
IHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOwotCi0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rp
b25Db29yZGluYXRvcigpLT5kaWRDcmVhdGVUcmFuc2FjdGlvbih0aGlzKTsKLX0KLQotSURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6fklEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIoKQot
ewotICAgIC8vIEl0IHNob3VsZG4ndCBiZSBwb3NzaWJsZSBmb3IgdGhpcyBvYmplY3QgdG8gZ2V0
IGRlbGV0ZWQgdW50aWwgaXQncyBlaXRoZXIgY29tcGxldGUgb3IgYWJvcnRlZC4KLSAgICBBU1NF
UlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5k
TGV2ZWxEQjo6c2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5
cGUgdHlwZSwgUGFzc093blB0cjxJREJPcGVyYXRpb24+IHRhc2ssIFBhc3NPd25QdHI8SURCT3Bl
cmF0aW9uPiBhYm9ydFRhc2spCi17Ci0gICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICh0eXBlID09IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZTo6Tm9ybWFsVGFzaykKLSAgICAgICAgbV90YXNrUXVldWUuYXBwZW5kKHRhc2spOwotICAgIGVs
c2UKLSAgICAgICAgbV9wcmVlbXB0aXZlVGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKLQotICAgIGlm
IChhYm9ydFRhc2spCi0gICAgICAgIG1fYWJvcnRUYXNrUXVldWUucHJlcGVuZChhYm9ydFRhc2sp
OwotCi0gICAgaWYgKG1fc3RhdGUgPT0gVW51c2VkKQotICAgICAgICBzdGFydCgpOwotICAgIGVs
c2UgaWYgKG1fc3RhdGUgPT0gUnVubmluZyAmJiAhbV90YXNrVGltZXIuaXNBY3RpdmUoKSkKLSAg
ICAgICAgbV90YXNrVGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lkIElEQlRyYW5zYWN0
aW9uQmFja2VuZExldmVsREI6OmFib3J0KCkKLXsKLSAgICBhYm9ydChJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVy
cm9yICh1bmtub3duIGNhdXNlKSIpKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCOjphYm9ydChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKQotewotICAg
IExPRyhTdG9yYWdlQVBJLCAiSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6YWJvcnQiKTsK
LSAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9v
bCB3YXNSdW5uaW5nID0gbV9zdGF0ZSA9PSBSdW5uaW5nOwotCi0gICAgLy8gVGhlIGxhc3QgcmVm
ZXJlbmNlIHRvIHRoaXMgb2JqZWN0IG1heSBiZSByZWxlYXNlZCB3aGlsZSBwZXJmb3JtaW5nIHRo
ZQotICAgIC8vIGFib3J0IHN0ZXBzIGJlbG93LiBXZSB0aGVyZWZvcmUgdGFrZSBhIHNlbGYgcmVm
ZXJlbmNlIHRvIGtlZXAgb3Vyc2VsdmVzCi0gICAgLy8gYWxpdmUgd2hpbGUgZXhlY3V0aW5nIHRo
aXMgbWV0aG9kLgotICAgIFJlZjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiBwcm90ZWN0
KCp0aGlzKTsKLQotICAgIG1fc3RhdGUgPSBGaW5pc2hlZDsKLSAgICBtX3Rhc2tUaW1lci5zdG9w
KCk7Ci0KLSAgICBpZiAod2FzUnVubmluZykKLSAgICAgICAgbV9iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbi0+cm9sbGJhY2soKTsKLQotICAgIC8vIFJ1biB0aGUgYWJvcnQgdGFza3MsIGlmIGFueS4K
LSAgICB3aGlsZSAoIW1fYWJvcnRUYXNrUXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIE93blB0
cjxJREJPcGVyYXRpb24+IHRhc2sobV9hYm9ydFRhc2tRdWV1ZS50YWtlRmlyc3QoKSk7Ci0gICAg
ICAgIHRhc2stPnBlcmZvcm0oKTsKLSAgICB9Ci0KLSAgICAvLyBCYWNraW5nIHN0b3JlIHJlc291
cmNlcyAoaGVsZCB2aWEgY3Vyc29ycykgbXVzdCBiZSByZWxlYXNlZCBiZWZvcmUgc2NyaXB0IGNh
bGxiYWNrcwotICAgIC8vIGFyZSBmaXJlZCwgYXMgdGhlIHNjcmlwdCBjYWxsYmFja3MgbWF5IHJl
bGVhc2UgcmVmZXJlbmNlcyBhbmQgYWxsb3cgdGhlIGJhY2tpbmcgc3RvcmUKLSAgICAvLyBpdHNl
bGYgdG8gYmUgcmVsZWFzZWQsIGFuZCBvcmRlciBpcyBjcml0aWNhbC4KLSAgICBjbG9zZU9wZW5D
dXJzb3JzKCk7Ci0gICAgbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbi0+cmVzZXRUcmFuc2FjdGlv
bigpOwotCi0gICAgLy8gVHJhbnNhY3Rpb25zIG11c3QgYWxzbyBiZSBtYXJrZWQgYXMgY29tcGxl
dGVkIGJlZm9yZSB0aGUgZnJvbnQtZW5kIGlzIG5vdGlmaWVkLCBhcwotICAgIC8vIHRoZSB0cmFu
c2FjdGlvbiBjb21wbGV0aW9uIHVuYmxvY2tzIG9wZXJhdGlvbnMgbGlrZSBjbG9zaW5nIGNvbm5l
Y3Rpb25zLgotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkRmlu
aXNoVHJhbnNhY3Rpb24odGhpcyk7Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNlLT50cmFuc2FjdGlv
bkNvb3JkaW5hdG9yKCktPmlzQWN0aXZlKHRoaXMpKTsKLSAgICBtX2RhdGFiYXNlLT50cmFuc2Fj
dGlvbkZpbmlzaGVkKHRoaXMpOwotCi0gICAgaWYgKG1fY2FsbGJhY2tzKQotICAgICAgICBtX2Nh
bGxiYWNrcy0+b25BYm9ydChpZCgpLCBlcnJvcik7Ci0KLSAgICBtX2RhdGFiYXNlLT50cmFuc2Fj
dGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZCh0aGlzKTsKLQotICAgIG1fZGF0YWJhc2UgPSAwOwot
fQotCi1ib29sIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OmlzVGFza1F1ZXVlRW1wdHko
KSBjb25zdAotewotICAgIHJldHVybiBtX3ByZWVtcHRpdmVUYXNrUXVldWUuaXNFbXB0eSgpICYm
IG1fdGFza1F1ZXVlLmlzRW1wdHkoKTsKLX0KLQotYm9vbCBJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCOjpoYXNQZW5kaW5nVGFza3MoKSBjb25zdAotewotICAgIHJldHVybiBtX3BlbmRpbmdQ
cmVlbXB0aXZlRXZlbnRzIHx8ICFpc1Rhc2tRdWV1ZUVtcHR5KCk7Ci19Ci0KLXZvaWQgSURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6cmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2UqIGN1cnNvcikKLXsKLSAgICBtX29wZW5DdXJzb3JzLmFkZChjdXJzb3IpOwot
fQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OnVucmVnaXN0ZXJPcGVuQ3Vy
c29yKElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UqIGN1cnNvcikKLXsKLSAgICBtX29wZW5DdXJz
b3JzLnJlbW92ZShjdXJzb3IpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REI6OnJ1bigpCi17Ci0gICAgLy8gVHJhbnNhY3Rpb25Db29yZGluYXRvciBoYXMgc3RhcnRlZCB0
aGlzIHRyYW5zYWN0aW9uLiBTY2hlZHVsZSBhIHRpbWVyCi0gICAgLy8gdG8gcHJvY2VzcyB0aGUg
Zmlyc3QgdGFzay4KLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGFydFBlbmRpbmcgfHwgbV9zdGF0
ZSA9PSBSdW5uaW5nKTsKLSAgICBBU1NFUlQoIW1fdGFza1RpbWVyLmlzQWN0aXZlKCkpOwotCi0g
ICAgbV90YXNrVGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREI6OnN0YXJ0KCkKLXsKLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBVbnVzZWQp
OwotCi0gICAgbV9zdGF0ZSA9IFN0YXJ0UGVuZGluZzsKLSAgICBtX2RhdGFiYXNlLT50cmFuc2Fj
dGlvbkNvb3JkaW5hdG9yKCktPmRpZFN0YXJ0VHJhbnNhY3Rpb24odGhpcyk7Ci0gICAgbV9kYXRh
YmFzZS0+dHJhbnNhY3Rpb25TdGFydGVkKHRoaXMpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREI6OmNvbW1pdCgpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJUcmFu
c2FjdGlvbkJhY2tlbmRMZXZlbERCOjpjb21taXQiKTsKLQotICAgIC8vIEluIG11bHRpcHJvY2Vz
cyBwb3J0cywgZnJvbnQtZW5kIG1heSBoYXZlIHJlcXVlc3RlZCBhIGNvbW1pdCBidXQgYW4gYWJv
cnQgaGFzIGFscmVhZHkKLSAgICAvLyBiZWVuIGluaXRpYXRlZCBhc3luY2hyb25vdXNseSBieSB0
aGUgYmFjay1lbmQuCi0gICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVChtX3N0YXRlID09IFVudXNlZCB8fCBtX3N0YXRlID09IFJ1bm5pbmcp
OwotICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7Ci0KLSAgICAvLyBGcm9udC1lbmQgaGFzIHJl
cXVlc3RlZCBhIGNvbW1pdCwgYnV0IHRoZXJlIG1heSBiZSB0YXNrcyBsaWtlIGNyZWF0ZUluZGV4
IHdoaWNoCi0gICAgLy8gYXJlIGNvbnNpZGVyZWQgc3luY2hyb25vdXMgYnkgdGhlIGZyb250LWVu
ZCBidXQgYXJlIHByb2Nlc3NlZCBhc3luY2hyb25vdXNseS4KLSAgICBpZiAoaGFzUGVuZGluZ1Rh
c2tzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoZSBsYXN0IHJlZmVyZW5jZSB0byB0
aGlzIG9iamVjdCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUKLSAgICAvLyBj
b21taXQgc3RlcHMgYmVsb3cuIFdlIHRoZXJlZm9yZSB0YWtlIGEgc2VsZiByZWZlcmVuY2UgdG8g
a2VlcCBvdXJzZWx2ZXMKLSAgICAvLyBhbGl2ZSB3aGlsZSBleGVjdXRpbmcgdGhpcyBtZXRob2Qu
Ci0gICAgUmVmPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IHByb3RlY3QoKnRoaXMpOwot
Ci0gICAgYm9vbCB1bnVzZWQgPSBtX3N0YXRlID09IFVudXNlZDsKLSAgICBtX3N0YXRlID0gRmlu
aXNoZWQ7Ci0KLSAgICBib29sIGNvbW1pdHRlZCA9IHVudXNlZCB8fCBtX2JhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uLT5jb21taXQoKTsKLQotICAgIC8vIEJhY2tpbmcgc3RvcmUgcmVzb3VyY2VzICho
ZWxkIHZpYSBjdXJzb3JzKSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBzY3JpcHQgY2FsbGJhY2tz
Ci0gICAgLy8gYXJlIGZpcmVkLCBhcyB0aGUgc2NyaXB0IGNhbGxiYWNrcyBtYXkgcmVsZWFzZSBy
ZWZlcmVuY2VzIGFuZCBhbGxvdyB0aGUgYmFja2luZyBzdG9yZQotICAgIC8vIGl0c2VsZiB0byBi
ZSByZWxlYXNlZCwgYW5kIG9yZGVyIGlzIGNyaXRpY2FsLgotICAgIGNsb3NlT3BlbkN1cnNvcnMo
KTsKLSAgICBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLT5yZXNldFRyYW5zYWN0aW9uKCk7Ci0K
LSAgICAvLyBUcmFuc2FjdGlvbnMgbXVzdCBhbHNvIGJlIG1hcmtlZCBhcyBjb21wbGV0ZWQgYmVm
b3JlIHRoZSBmcm9udC1lbmQgaXMgbm90aWZpZWQsIGFzCi0gICAgLy8gdGhlIHRyYW5zYWN0aW9u
IGNvbXBsZXRpb24gdW5ibG9ja3Mgb3BlcmF0aW9ucyBsaWtlIGNsb3NpbmcgY29ubmVjdGlvbnMu
Ci0gICAgaWYgKCF1bnVzZWQpCi0gICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IoKS0+ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhpcyk7Ci0gICAgbV9kYXRhYmFzZS0+dHJh
bnNhY3Rpb25GaW5pc2hlZCh0aGlzKTsKLQotICAgIGlmIChjb21taXR0ZWQpIHsKLSAgICAgICAg
bV9jYWxsYmFja3MtPm9uQ29tcGxldGUoaWQoKSk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnRyYW5z
YWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKHRoaXMpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIG1fY2FsbGJhY2tzLT5vbkFib3J0KGlkKCksIElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgY29tbWl0
dGluZyB0cmFuc2FjdGlvbi4iKSk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmlu
aXNoZWRBbmRBYm9ydEZpcmVkKHRoaXMpOwotICAgIH0KLQotICAgIG1fZGF0YWJhc2UgPSAwOwot
fQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OnRhc2tUaW1lckZpcmVkKFRp
bWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+KikKLXsKLSAgICBMT0coU3RvcmFnZUFQ
SSwgIklEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OnRhc2tUaW1lckZpcmVkIik7Ci0gICAg
QVNTRVJUKCFpc1Rhc2tRdWV1ZUVtcHR5KCkpOwotCi0gICAgaWYgKG1fc3RhdGUgPT0gU3RhcnRQ
ZW5kaW5nKSB7Ci0gICAgICAgIG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24tPmJlZ2luKCk7Ci0g
ICAgICAgIG1fc3RhdGUgPSBSdW5uaW5nOwotICAgIH0KLQotICAgIC8vIFRoZSBsYXN0IHJlZmVy
ZW5jZSB0byB0aGlzIG9iamVjdCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUK
LSAgICAvLyB0YXNrcy4gVGFrZSB0YWtlIGEgc2VsZiByZWZlcmVuY2UgdG8ga2VlcCB0aGlzIG9i
amVjdCBhbGl2ZSBzbyB0aGF0Ci0gICAgLy8gdGhlIGxvb3AgdGVybWluYXRpb24gY29uZGl0aW9u
cyBjYW4gYmUgY2hlY2tlZC4KLSAgICBSZWY8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4g
cHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBUYXNrUXVldWUqIHRhc2tRdWV1ZSA9IG1fcGVuZGluZ1By
ZWVtcHRpdmVFdmVudHMgPyAmbV9wcmVlbXB0aXZlVGFza1F1ZXVlIDogJm1fdGFza1F1ZXVlOwot
ICAgIHdoaWxlICghdGFza1F1ZXVlLT5pc0VtcHR5KCkgJiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCkg
ewotICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBSdW5uaW5nKTsKLSAgICAgICAgT3duUHRyPElE
Qk9wZXJhdGlvbj4gdGFzayh0YXNrUXVldWUtPnRha2VGaXJzdCgpKTsKLSAgICAgICAgdGFzay0+
cGVyZm9ybSgpOwotCi0gICAgICAgIC8vIEV2ZW50IGl0c2VsZiBtYXkgY2hhbmdlIHdoaWNoIHF1
ZXVlIHNob3VsZCBiZSBwcm9jZXNzZWQgbmV4dC4KLSAgICAgICAgdGFza1F1ZXVlID0gbV9wZW5k
aW5nUHJlZW1wdGl2ZUV2ZW50cyA/ICZtX3ByZWVtcHRpdmVUYXNrUXVldWUgOiAmbV90YXNrUXVl
dWU7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgdGFza3MsIHdlIGhh
dmVuJ3QgYWxyZWFkeSBjb21taXR0ZWQvYWJvcnRlZCwKLSAgICAvLyBhbmQgdGhlIGZyb250LWVu
ZCByZXF1ZXN0ZWQgYSBjb21taXQsIGl0IGlzIG5vdyBzYWZlIHRvIGRvIHNvLgotICAgIGlmICgh
aGFzUGVuZGluZ1Rhc2tzKCkgJiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCAmJiBtX2NvbW1pdFBlbmRp
bmcpCi0gICAgICAgIGNvbW1pdCgpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREI6OmNsb3NlT3BlbkN1cnNvcnMoKQotewotICAgIGZvciAoSGFzaFNldDxJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlKj46Oml0ZXJhdG9yIGkgPSBtX29wZW5DdXJzb3JzLmJlZ2luKCk7IGkg
IT0gbV9vcGVuQ3Vyc29ycy5lbmQoKTsgKytpKQotICAgICAgICAoKmkpLT5jbG9zZSgpOwotICAg
IG1fb3BlbkN1cnNvcnMuY2xlYXIoKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCOjpzY2hlZHVsZUNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKGNvbnN0IElEQk9iamVj
dFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCi17Ci0gICAgc2NoZWR1bGVUYXNr
KENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgbV9iYWNraW5nU3RvcmUu
Z2V0KCksIG9iamVjdFN0b3JlTWV0YWRhdGEpLCBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0
aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCkpOwotfQotCi12b2lkIElE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OnNjaGVkdWxlRGVsZXRlT2JqZWN0U3RvcmVPcGVy
YXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkK
LXsKLSAgICBzY2hlZHVsZVRhc2soRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OmNyZWF0ZSh0
aGlzLCBtX2JhY2tpbmdTdG9yZS5nZXQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSksIERlbGV0ZU9i
amVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZU1ldGFkYXRh
KSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6c2NoZWR1bGVWZXJz
aW9uQ2hhbmdlT3BlcmF0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCByZXF1ZXN0
ZWRWZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcywgY29uc3QgSURCRGF0YWJh
c2VNZXRhZGF0YSYgbWV0YWRhdGEpCi17Ci0gICAgc2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCB0cmFuc2FjdGlv
bklkLCByZXF1ZXN0ZWRWZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKSwgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUo
dGhpcywgU3RyaW5nOjpudW1iZXIobWV0YWRhdGEudmVyc2lvbiksIG1ldGFkYXRhLnZlcnNpb24p
KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpzY2hlZHVsZUNyZWF0
ZUluZGV4T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRh
ZGF0YSYgaW5kZXhNZXRhZGF0YSkKLXsKLSAgICBzY2hlZHVsZVRhc2soQ3JlYXRlSW5kZXhPcGVy
YXRpb246OmNyZWF0ZSh0aGlzLCBtX2JhY2tpbmdTdG9yZS5nZXQoKSwgb2JqZWN0U3RvcmVJZCwg
aW5kZXhNZXRhZGF0YSksIENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBv
YmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhLmlkKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rp
b25CYWNrZW5kTGV2ZWxEQjo6c2NoZWR1bGVEZWxldGVJbmRleE9wZXJhdGlvbihpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi17Ci0g
ICAgc2NoZWR1bGVUYXNrKERlbGV0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgbV9iYWNr
aW5nU3RvcmUuZ2V0KCksIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpLCBEZWxldGVJbmRl
eEFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0
YSkpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OnNjaGVkdWxlR2V0
T3BlcmF0aW9uKGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIHNjaGVkdWxlVGFzayhHZXRPcGVyYXRpb246OmNy
ZWF0ZSh0aGlzLCBtX2JhY2tpbmdTdG9yZS5nZXQoKSwgbWV0YWRhdGEsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQsIGtleVJhbmdlLCBjdXJzb3JUeXBlLCBjYWxsYmFja3MpKTsKLX0KLQotdm9pZCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpzY2hlZHVsZVB1dE9wZXJhdGlvbihjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhLCBQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZTo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8
SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQotewotICAgIHNjaGVkdWxlVGFzayhQdXRPcGVyYXRpb246
OmNyZWF0ZSh0aGlzLCBtX2JhY2tpbmdTdG9yZS5nZXQoKSwgZGF0YWJhc2UoKS5pZCgpLCBvYmpl
Y3RTdG9yZU1ldGFkYXRhLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIGluZGV4SWRz
LCBpbmRleEtleXMpKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpz
Y2hlZHVsZVNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbihzaXplX3QgaW5kZXhDb3VudCkKLXsKLSAg
ICBzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQcmVlbXB0aXZlVGFz
aywgU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgaW5kZXhDb3VudCkpOwot
fQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OnNjaGVkdWxlT3BlbkN1cnNv
ck9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRp
cmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCi17Ci0gICAgc2NoZWR1bGVUYXNrKE9wZW5DdXJzb3JPcGVyYXRpb246OmNy
ZWF0ZSh0aGlzLCBtX2JhY2tpbmdTdG9yZS5nZXQoKSwgZGF0YWJhc2UoKS5pZCgpLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JUeXBlLCB0YXNrVHlw
ZSwgY2FsbGJhY2tzKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6
c2NoZWR1bGVDb3VudE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgc2NoZWR1bGVUYXNrKENvdW50T3BlcmF0aW9uOjpj
cmVhdGUodGhpcywgbV9iYWNraW5nU3RvcmUuZ2V0KCksIGRhdGFiYXNlKCkuaWQoKSwgb2JqZWN0
U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwotfQotCi12b2lkIElEQlRy
YW5zYWN0aW9uQmFja2VuZExldmVsREI6OnNjaGVkdWxlRGVsZXRlUmFuZ2VPcGVyYXRpb24oaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBzY2hlZHVsZVRhc2soRGVs
ZXRlUmFuZ2VPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBtX2JhY2tpbmdTdG9yZS5nZXQoKSwgZGF0
YWJhc2UoKS5pZCgpLCBvYmplY3RTdG9yZUlkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci19Ci0K
LXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6c2NoZWR1bGVDbGVhck9wZXJhdGlv
bihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MpCi17Ci0gICAgc2NoZWR1bGVUYXNrKENsZWFyT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgbV9i
YWNraW5nU3RvcmUuZ2V0KCksIGRhdGFiYXNlKCkuaWQoKSwgb2JqZWN0U3RvcmVJZCwgY2FsbGJh
Y2tzKSk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gSURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6Y3JlYXRlQ3Vyc29yQmFja2VuZChJREJCYWNraW5nU3Rv
cmVJbnRlcmZhY2U6OkN1cnNvciYgY3Vyc29yLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29y
VHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgaW50
NjRfdCBvYmplY3RTdG9yZUlkKQotewotICAgIHJldHVybiBtX2RhdGFiYXNlLT5mYWN0b3J5QmFj
a2VuZCgpLmNyZWF0ZUN1cnNvckJhY2tlbmQoKnRoaXMsIGN1cnNvciwgY3Vyc29yVHlwZSwgdGFz
a1R5cGUsIG9iamVjdFN0b3JlSWQpOwotfQotCi19OwotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRiOWIzNC4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCX2gKLSNkZWZp
bmUgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQl9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCi0KLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVJbnRl
cmZhY2UuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAi
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJv
ci5oIgotI2luY2x1ZGUgIklEQk9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL0Rl
cXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCRGF0YWJhc2VDYWxsYmFja3M7Ci0K
LWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIgRklOQUwgOiBwdWJsaWMgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiBjcmVhdGUoSURCRGF0YWJhc2VCYWNrZW5k
SW1wbCosIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25Nb2RlKTsKLSAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KCkgT1ZFUlJJREUgRklOQUw7Ci0gICAg
dmlydHVhbCB2b2lkIGFib3J0KCkgT1ZFUlJJREUgRklOQUw7Ci0gICAgdmlydHVhbCB2b2lkIGFi
b3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pIE9WRVJSSURFIEZJTkFMOwotCi0gICAg
dmlydHVhbCB2b2lkIHJ1bigpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgSW5kZXhlZERCOjpUcmFu
c2FjdGlvbk1vZGUgbW9kZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuIG1fbW9kZTsg
fQotICAgIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIHNjb3BlKCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gbV9vYmplY3RTdG9yZUlkczsgfQotCi0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlVGFz
ayhQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gdGFzaywgUGFzc093blB0cjxJREJPcGVyYXRpb24+
IGFib3J0VGFzayA9IG51bGxwdHIpIHsgc2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZTo6Tm9ybWFsVGFzaywgdGFzaywgYWJvcnRUYXNrKTsgfQotICAgIHZpcnR1YWwgdm9p
ZCBzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgUGFz
c093blB0cjxJREJPcGVyYXRpb24+LCBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gYWJvcnRUYXNr
ID0gbnVsbHB0cikgT1ZFUlJJREU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJPcGVuQ3Vy
c29yKElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgdW5yZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZSopIE9WRVJS
SURFOwotCi0gICAgdmlydHVhbCB2b2lkIGFkZFByZWVtcHRpdmVFdmVudCgpIE9WRVJSSURFIHsg
bV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cysrOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZENvbXBs
ZXRlUHJlZW1wdGl2ZUV2ZW50KCkgT1ZFUlJJREUgeyBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRz
LS07IEFTU0VSVChtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzID49IDApOyB9Ci0gICAgdmlydHVh
bCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uJiBiYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpIHsgcmV0dXJuICptX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOyB9Ci0KLSAgICB2
aXJ0dWFsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSYgZGF0YWJhc2UoKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiAqbV9kYXRhYmFzZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxl
Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYp
IE9WRVJSSURFIEZJTkFMOwotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZURlbGV0ZU9iamVjdFN0
b3JlT3BlcmF0aW9uKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmKSBPVkVSUklERSBGSU5B
TDsKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKGludDY0
X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBJREJE
YXRhYmFzZU1ldGFkYXRhJikgT1ZFUlJJREUgRklOQUw7Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVk
dWxlQ3JlYXRlSW5kZXhPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJ
bmRleE1ldGFkYXRhJikgT1ZFUlJJREUgRklOQUw7Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxl
RGVsZXRlSW5kZXhPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRl
eE1ldGFkYXRhJikgT1ZFUlJJREUgRklOQUw7Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlR2V0
T3BlcmF0aW9uKGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEluZGV4ZWREQjo6
Q3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KSBPVkVSUklERSBGSU5BTDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVQdXRPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJL
ZXk+LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9y
PEluZGV4S2V5cz4mKSBPVkVSUklERSBGSU5BTDsKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVT
ZXRJbmRleGVzUmVhZHlPcGVyYXRpb24oc2l6ZV90IGluZGV4Q291bnQpIE9WRVJSSURFIEZJTkFM
OwotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZU9wZW5DdXJzb3JPcGVyYXRpb24oaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBJ
bmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlLCBJREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4p
IE9WRVJSSURFIEZJTkFMOwotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvdW50T3BlcmF0aW9u
KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KSBPVkVSUklERSBGSU5BTDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2NoZWR1bGVEZWxldGVSYW5nZU9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4p
IE9WRVJSSURFIEZJTkFMOwotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNsZWFyT3BlcmF0aW9u
KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KSBPVkVSUklE
RSBGSU5BTDsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlPiBjcmVhdGVDdXJzb3JCYWNrZW5kKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6Q3Vyc29y
JiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRh
c2tUeXBlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJSSURFOwotCi1wcml2YXRlOgotICAg
IElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCosIGlu
dDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBIYXNoU2V0
PGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUpOwot
Ci0gICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgIFVudXNlZCwgLy8gQ3JlYXRlZCwgYnV0IG5vIHRh
c2tzIHlldC4KLSAgICAgICAgU3RhcnRQZW5kaW5nLCAvLyBFbnF1ZXVlZCB0YXNrcywgYnV0IGJh
Y2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24gbm90IHlldCBzdGFydGVkLgotICAgICAgICBSdW5uaW5n
LCAvLyBCYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIHN0YXJ0ZWQgYnV0IG5vdCB5ZXQgZmluaXNo
ZWQuCi0gICAgICAgIEZpbmlzaGVkLCAvLyBFaXRoZXIgYWJvcnRlZCBvciBjb21taXR0ZWQuCi0g
ICAgfTsKLQotICAgIHZvaWQgc3RhcnQoKTsKLQotICAgIGJvb2wgaXNUYXNrUXVldWVFbXB0eSgp
IGNvbnN0OwotICAgIGJvb2wgaGFzUGVuZGluZ1Rhc2tzKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHRh
c2tUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+Kik7Ci0gICAg
dm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7Ci0KLSAgICBjb25zdCBIYXNoU2V0PGludDY0X3Q+IG1f
b2JqZWN0U3RvcmVJZHM7Ci0gICAgY29uc3QgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbV9t
b2RlOwotCi0gICAgU3RhdGUgbV9zdGF0ZTsKLSAgICBib29sIG1fY29tbWl0UGVuZGluZzsKLSAg
ICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNlOwotCi0gICAgdHlwZWRlZiBEZXF1ZTxP
d25QdHI8SURCT3BlcmF0aW9uPj4gVGFza1F1ZXVlOwotICAgIFRhc2tRdWV1ZSBtX3Rhc2tRdWV1
ZTsKLSAgICBUYXNrUXVldWUgbV9wcmVlbXB0aXZlVGFza1F1ZXVlOwotICAgIFRhc2tRdWV1ZSBt
X2Fib3J0VGFza1F1ZXVlOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPElEQkJhY2tpbmdTdG9yZUlu
dGVyZmFjZTo6VHJhbnNhY3Rpb24+IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb247Ci0KLSAgICAv
LyBGSVhNRTogZGVsZXRlIHRoZSB0aW1lciBvbmNlIHdlIGhhdmUgdGhyZWFkcyBpbnN0ZWFkLgot
ICAgIFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IG1fdGFza1RpbWVyOwotICAg
IGludCBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzOwotCi0gICAgSGFzaFNldDxJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlKj4gbV9vcGVuQ3Vyc29yczsKLSAgICAKLSAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlSW50ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVW
RUxEQikKLQotI2VuZGlmIC8vIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREJfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRMZXZlbERCT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREJPcGVyYXRpb25z
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI4N2EyOS4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREJPcGVyYXRpb25zLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM4NSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREJPcGVyYXRpb25zLmgiCi0KLSNpbmNsdWRlICJJREJDdXJzb3JC
YWNrZW5kTGV2ZWxEQi5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCi0jaW5j
bHVkZSAiSURCSW5kZXhXcml0ZXIuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotdm9pZCBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybSgpCi17Ci0gICAg
TE9HKFN0b3JhZ2VBUEksICJDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbiIpOwotICAgIGlmICgh
bV9iYWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuaWQoKSwgbV9vYmpl
Y3RTdG9yZU1ldGFkYXRhLmlkLCBtX29iamVjdFN0b3JlTWV0YWRhdGEubmFtZSwgbV9vYmplY3RT
dG9yZU1ldGFkYXRhLmtleVBhdGgsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5hdXRvSW5jcmVtZW50
KSkgewotICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5n
Ojpmb3JtYXQoIkludGVybmFsIGVycm9yIGNyZWF0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIsIG1f
b2JqZWN0U3RvcmVNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgbV90cmFu
c2FjdGlvbi0+YWJvcnQoZXJyb3IucmVsZWFzZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LX0KLQotdm9pZCBDcmVhdGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSgpCi17Ci0gICAgTE9HKFN0
b3JhZ2VBUEksICJDcmVhdGVJbmRleE9wZXJhdGlvbiIpOwotICAgIGlmICghbV9iYWNraW5nU3Rv
cmUtPmNyZWF0ZUluZGV4KG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuaWQoKSwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4
TWV0YWRhdGEuaWQsIG1faW5kZXhNZXRhZGF0YS5uYW1lLCBtX2luZGV4TWV0YWRhdGEua2V5UGF0
aCwgbV9pbmRleE1ldGFkYXRhLnVuaXF1ZSwgbV9pbmRleE1ldGFkYXRhLm11bHRpRW50cnkpKSB7
Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJu
YWwgZXJyb3Igd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGluZGV4ICclcycuIiwgbV9pbmRleE1ldGFk
YXRhLm5hbWUudXRmOCgpLmRhdGEoKSkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQot
dm9pZCBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKCkKLXsKLSAgICBMT0coU3Rv
cmFnZUFQSSwgIkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24iKTsKLSAgICBtX3RyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLnJlbW92ZUluZGV4KG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkKTsKLX0K
LQotdm9pZCBEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSgpCi17Ci0gICAgTE9HKFN0b3Jh
Z2VBUEksICJEZWxldGVJbmRleE9wZXJhdGlvbiIpOwotICAgIGJvb2wgb2sgPSBtX2JhY2tpbmdT
dG9yZS0+ZGVsZXRlSW5kZXgobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24o
KSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5pZCgpLCBtX29iamVjdFN0b3JlSWQsIG1faW5k
ZXhNZXRhZGF0YS5pZCk7Ci0gICAgaWYgKCFvaykgewotICAgICAgICBSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIGRlbGV0
aW5nIGluZGV4ICclcycuIiwgbV9pbmRleE1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSkpOwot
ICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7Ci0gICAgfQotfQotCi12b2lkIERl
bGV0ZUluZGV4QWJvcnRPcGVyYXRpb246OnBlcmZvcm0oKQotewotICAgIExPRyhTdG9yYWdlQVBJ
LCAiRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbiIpOwotICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFi
YXNlKCkuYWRkSW5kZXgobV9vYmplY3RTdG9yZUlkLCBtX2luZGV4TWV0YWRhdGEsIElEQkluZGV4
TWV0YWRhdGE6OkludmFsaWRJZCk7Ci19Ci0KLXZvaWQgR2V0T3BlcmF0aW9uOjpwZXJmb3JtKCkK
LXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkdldE9wZXJhdGlvbiIpOwotCi0gICAgUmVmUHRyPElE
QktleT4ga2V5OwotCi0gICAgaWYgKG1fa2V5UmFuZ2UtPmlzT25seUtleSgpKQotICAgICAgICBr
ZXkgPSBtX2tleVJhbmdlLT5sb3dlcigpOwotICAgIGVsc2UgewotICAgICAgICBSZWZQdHI8SURC
QmFja2luZ1N0b3JlSW50ZXJmYWNlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKLSAgICAg
ICAgaWYgKG1faW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKLSAgICAg
ICAgICAgIEFTU0VSVChtX2N1cnNvclR5cGUgIT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KTsK
LSAgICAgICAgICAgIC8vIE9iamVjdFN0b3JlIFJldHJpZXZhbCBPcGVyYXRpb24KLSAgICAgICAg
ICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuT2JqZWN0U3RvcmVD
dXJzb3IobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFz
ZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29y
TmV4dCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9jdXJzb3JUeXBlID09
IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkgewotICAgICAgICAgICAgICAgIC8vIEluZGV4IFZh
bHVlIFJldHJpZXZhbCBPcGVyYXRpb24KLSAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJz
b3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBt
X2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEluZGV4IFJlZmVyZW5jZWQgVmFs
dWUgUmV0cmlldmFsIE9wZXJhdGlvbgotICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNv
ciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhDdXJzb3IobV90cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5k
ZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0g
ICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICBrZXkgPSBiYWNraW5nU3RvcmVDdXJzb3ItPmtleSgpOwot
ICAgIH0KLQotICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXk7Ci0gICAgYm9vbCBvazsKLSAg
ICBpZiAobV9pbmRleElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgewotICAgICAg
ICAvLyBPYmplY3QgU3RvcmUgUmV0cmlldmFsIE9wZXJhdGlvbgotICAgICAgICBWZWN0b3I8Y2hh
cj4gdmFsdWU7Ci0gICAgICAgIG9rID0gbV9iYWNraW5nU3RvcmUtPmdldFJlY29yZChtX3RyYW5z
YWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0
U3RvcmVJZCwgKmtleSwgdmFsdWUpOwotICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBt
X2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGluIGdldFJlY29yZC4iKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmFsdWUuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9hdXRvSW5jcmVtZW50ICYm
ICFtX2tleVBhdGguaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSksIGtleSwgbV9rZXlQYXRoKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1
Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSkpOwotICAgICAgICByZXR1cm47
Ci0KLSAgICB9Ci0KLSAgICAvLyBGcm9tIGhlcmUgd2UgYXJlIGRlYWxpbmcgb25seSB3aXRoIGlu
ZGV4ZXMuCi0gICAgb2sgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KG1f
dHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9v
YmplY3RTdG9yZUlkLCBtX2luZGV4SWQsICprZXksIHByaW1hcnlLZXkpOwotICAgIGlmICghb2sp
IHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBn
ZXRQcmltYXJ5S2V5VmlhSW5kZXguIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
ICghcHJpbWFyeUtleSkgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG1fY3Vyc29yVHlwZSA9PSBJbmRleGVkREI6OkN1
cnNvcktleU9ubHkpIHsKLSAgICAgICAgLy8gSW5kZXggVmFsdWUgUmV0cmlldmFsIE9wZXJhdGlv
bgotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHByaW1hcnlLZXkuZ2V0KCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSW5kZXggUmVmZXJlbmNlZCBWYWx1ZSBSZXRy
aWV2YWwgT3BlcmF0aW9uCi0gICAgVmVjdG9yPGNoYXI+IHZhbHVlOwotICAgIG9rID0gbV9iYWNr
aW5nU3RvcmUtPmdldFJlY29yZChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgKnByaW1hcnlLZXksIHZhbHVlKTsK
LSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJu
YWwgZXJyb3IgaW4gZ2V0UmVjb3JkLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcygp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChtX2F1dG9JbmNyZW1lbnQgJiYgIW1f
a2V5UGF0aC5pc051bGwoKSkgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNoYXJl
ZEJ1ZmZlcjo6YWRvcHRWZWN0b3IodmFsdWUpLCBwcmltYXJ5S2V5LCBtX2tleVBhdGgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2hhcmVkQnVm
ZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSkpOwotfQotCi12b2lkIFB1dE9wZXJhdGlvbjo6cGVyZm9y
bSgpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJQdXRPcGVyYXRpb24iKTsKLSAgICBBU1NFUlQo
bV90cmFuc2FjdGlvbi0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25SZWFkT25seSk7
Ci0gICAgQVNTRVJUKG1faW5kZXhJZHMuc2l6ZSgpID09IG1faW5kZXhLZXlzLnNpemUoKSk7Ci0g
ICAgYm9vbCBrZXlXYXNHZW5lcmF0ZWQgPSBmYWxzZTsKLQotICAgIFJlZlB0cjxJREJLZXk+IGtl
eTsKLSAgICBpZiAobV9wdXRNb2RlICE9IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Q3Vy
c29yVXBkYXRlICYmIG1fb2JqZWN0U3RvcmUuYXV0b0luY3JlbWVudCAmJiAhbV9rZXkpIHsKLSAg
ICAgICAgUmVmUHRyPElEQktleT4gYXV0b0luY0tleSA9IG1fYmFja2luZ1N0b3JlLT5nZW5lcmF0
ZUtleSgqbV90cmFuc2FjdGlvbiwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkKTsKLSAg
ICAgICAga2V5V2FzR2VuZXJhdGVkID0gdHJ1ZTsKLSAgICAgICAgaWYgKCFhdXRvSW5jS2V5LT5p
c1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCAiTWF4
aW11bSBrZXkgZ2VuZXJhdG9yIHZhbHVlIHJlYWNoZWQuIikpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIGtleSA9IGF1dG9JbmNLZXk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGtleSA9IG1fa2V5OwotCi0gICAgQVNTRVJUKGtleSk7Ci0gICAgQVNTRVJUKGtleS0+aXNW
YWxpZCgpKTsKLQotICAgIFJlZlB0cjxJREJSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlm
aWVyOwotICAgIGlmIChtX3B1dE1vZGUgPT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpB
ZGRPbmx5KSB7Ci0gICAgICAgIGJvb2wgb2sgPSBtX2JhY2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5P
YmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2Rh
dGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQsICprZXksIHJlY29yZElkZW50aWZpZXIpOwotICAg
ICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIklu
dGVybmFsIGVycm9yIGNoZWNraW5nIGtleSBleGlzdGVuY2UuIikpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZWNvcmRJZGVudGlmaWVyKSB7Ci0gICAgICAg
ICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgIktleSBhbHJlYWR5IGV4aXN0cyBpbiB0
aGUgb2JqZWN0IHN0b3JlLiIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIFZlY3RvcjxSZWZQdHI8SURCSW5kZXhXcml0ZXI+PiBpbmRleFdyaXRlcnM7Ci0g
ICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBib29sIG9iZXlzQ29uc3RyYWludHMgPSBmYWxz
ZTsKLSAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+bWFrZUlu
ZGV4V3JpdGVycygqbV90cmFuc2FjdGlvbiwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLCAq
a2V5LCBrZXlXYXNHZW5lcmF0ZWQsIG1faW5kZXhJZHMsIG1faW5kZXhLZXlzLCBpbmRleFdyaXRl
cnMsICZlcnJvck1lc3NhZ2UsIG9iZXlzQ29uc3RyYWludHMpOwotICAgIGlmICghYmFja2luZ1N0
b3JlU3VjY2VzcykgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFs
IGVycm9yOiBiYWNraW5nIHN0b3JlIGVycm9yIHVwZGF0aW5nIGluZGV4IGtleXMuIikpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghb2JleXNDb25zdHJhaW50cykgewotICAgICAg
ICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgZXJyb3JNZXNzYWdlKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBCZWZvcmUgdGhpcyBwb2ludCwgZG9uJ3QgZG8gYW55IG11
dGF0aW9uLiBBZnRlciB0aGlzIHBvaW50LCByb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24gaW4gY2Fz
ZSBvZiBlcnJvci4KLSAgICBiYWNraW5nU3RvcmVTdWNjZXNzID0gbV9iYWNraW5nU3RvcmUtPnB1
dFJlY29yZChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFi
YXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQsICprZXksIG1fdmFsdWUsIHJlY29yZElkZW50aWZpZXIu
Z2V0KCkpOwotICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2VzcykgewotICAgICAgICBtX2NhbGxi
YWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBiYWNraW5nIHN0b3JlIGVycm9yIHBl
cmZvcm1pbmcgcHV0L2FkZC4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsraSkgewotICAgICAgICBJ
REJJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7Ci0gICAg
ICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLCAq
bV9iYWNraW5nU3RvcmUsIG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCk7Ci0gICAgfQotCi0gICAgaWYgKG1fb2Jq
ZWN0U3RvcmUuYXV0b0luY3JlbWVudCAmJiBtX3B1dE1vZGUgIT0gSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlOjpDdXJzb3JVcGRhdGUgJiYga2V5LT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJU
eXBlKSB7Ci0gICAgICAgIGJvb2wgb2sgPSBtX2JhY2tpbmdTdG9yZS0+dXBkYXRlS2V5R2VuZXJh
dG9yKCptX3RyYW5zYWN0aW9uLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQsICprZXks
ICFrZXlXYXNHZW5lcmF0ZWQpOwotICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBtX2Nh
bGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHVwZGF0aW5nIGtleSBnZW5lcmF0
b3IuIikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9j
YWxsYmFja3MtPm9uU3VjY2VzcyhrZXkucmVsZWFzZSgpKTsKLX0KLQotdm9pZCBTZXRJbmRleGVz
UmVhZHlPcGVyYXRpb246OnBlcmZvcm0oKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiU2V0SW5k
ZXhlc1JlYWR5T3BlcmF0aW9uIik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luZGV4
Q291bnQ7ICsraSkKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVQcmVlbXB0aXZl
RXZlbnQoKTsKLX0KLQotdm9pZCBPcGVuQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKCkKLXsKLSAg
ICBMT0coU3RvcmFnZUFQSSwgIk9wZW5DdXJzb3JPcGVyYXRpb24iKTsKLQotICAgIC8vIFRoZSBm
cm9udGVuZCBoYXMgYmVndW4gaW5kZXhpbmcsIHNvIHRoaXMgcGF1c2VzIHRoZSB0cmFuc2FjdGlv
bgotICAgIC8vIHVudGlsIHRoZSBpbmRleGluZyBpcyBjb21wbGV0ZS4gVGhpcyBjYW4ndCBoYXBw
ZW4gYW55IGVhcmxpZXIKLSAgICAvLyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gc3dpdGNoIHRv
IGVhcmx5IG1vZGUgaW4gY2FzZSBtdWx0aXBsZQotICAgIC8vIGluZGV4ZXMgYXJlIGJlaW5nIGNy
ZWF0ZWQgaW4gYSByb3csIHdpdGggcHV0KCkncyBpbiBiZXR3ZWVuLgotICAgIGlmIChtX3Rhc2tU
eXBlID09IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHJlZW1wdGl2ZVRhc2spCi0gICAg
ICAgIG1fdHJhbnNhY3Rpb24tPmFkZFByZWVtcHRpdmVFdmVudCgpOwotCi0gICAgUmVmUHRyPElE
QkJhY2tpbmdTdG9yZUludGVyZmFjZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3I7Ci0gICAg
aWYgKG1faW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKLSAgICAgICAg
QVNTRVJUKG1fY3Vyc29yVHlwZSAhPSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOwotICAgICAg
ICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vy
c29yKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJ
ZCwgbV9vYmplY3RTdG9yZUlkLCBtX2tleVJhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fdGFza1R5cGUgPT0gSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlOjpOb3JtYWxUYXNrKTsKLSAgICAgICAgaWYgKG1fY3Vyc29yVHlwZSA9PSBJbmRl
eGVkREI6OkN1cnNvcktleU9ubHkpCi0gICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBt
X2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4
SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIG1fZGlyZWN0aW9uKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEN1cnNv
cihtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQs
IG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBtX2RpcmVjdGlv
bik7Ci0gICAgfQotCi0gICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKLSAgICAgICAgbV9j
YWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPigwKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRh
c2tUeXBlIHRhc2tUeXBlKHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6
VGFza1R5cGU+KG1fdGFza1R5cGUpKTsKLQotICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50
ZXJmYWNlPiBjdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5jcmVhdGVDdXJzb3JCYWNrZW5kKCpiYWNr
aW5nU3RvcmVDdXJzb3IsIG1fY3Vyc29yVHlwZSwgdGFza1R5cGUsIG1fb2JqZWN0U3RvcmVJZCk7
Ci0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhjdXJzb3IsIGN1cnNvci0+a2V5KCksIGN1cnNv
ci0+cHJpbWFyeUtleSgpLCBjdXJzb3ItPnZhbHVlKCkpOwotfQotCi12b2lkIENvdW50T3BlcmF0
aW9uOjpwZXJmb3JtKCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkNvdW50T3BlcmF0aW9uIik7
Ci0gICAgdWludDMyX3QgY291bnQgPSAwOwotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVJbnRl
cmZhY2U6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yOwotCi0gICAgaWYgKG1faW5kZXhJZCA9
PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpCi0gICAgICAgIGJhY2tpbmdTdG9yZUN1cnNv
ciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IobV90cmFuc2FjdGlv
bi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3Jl
SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7Ci0gICAgZWxzZQot
ICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5
Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJh
c2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4
ZWREQjo6Q3Vyc29yTmV4dCk7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKLSAgICAg
ICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcyhjb3VudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBkbyB7Ci0gICAgICAgICsrY291bnQ7Ci0gICAgfSB3aGlsZSAoYmFja2luZ1N0b3Jl
Q3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKLQotICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoY291bnQpOwotfQotCi12b2lkIERlbGV0ZVJhbmdlT3BlcmF0aW9uOjpwZXJmb3JtKCkKLXsK
LSAgICBMT0coU3RvcmFnZUFQSSwgIkRlbGV0ZVJhbmdlT3BlcmF0aW9uIik7Ci0gICAgUmVmUHRy
PElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBt
X2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKG1fdHJhbnNhY3Rpb24tPmJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2tl
eVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5leHQpOwotICAgIGlmIChiYWNraW5nU3Rv
cmVDdXJzb3IpIHsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9y
ZS0+ZGVsZXRlUmVjb3JkKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBiYWNraW5nU3RvcmVDdXJzb3ItPnJlY29y
ZElkZW50aWZpZXIoKSkpIHsKLSAgICAgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJv
ciwgIkVycm9yIGRlbGV0aW5nIGRhdGEgaW4gcmFuZ2UiKSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3It
PmNvbnRpbnVlRnVuY3Rpb24oMCkpOwotICAgIH0KLQotICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoKTsKLX0KLQotdm9pZCBDbGVhck9wZXJhdGlvbjo6cGVyZm9ybSgpCi17Ci0gICAgTE9HKFN0
b3JhZ2VBUEksICJPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uIik7Ci0gICAgaWYgKCFtX2JhY2tp
bmdTdG9yZS0+Y2xlYXJPYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCkpIHsKLSAgICAgICAgbV9j
YWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3IsICJFcnJvciBjbGVhcmluZyBvYmplY3Qgc3RvcmUiKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwotfQot
Ci12b2lkIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKCkKLXsKLSAgICBMT0co
U3RvcmFnZUFQSSwgIkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7Ci0gICAgYm9vbCBvayA9
IG1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmlkKCksIG1fb2Jq
ZWN0U3RvcmVNZXRhZGF0YS5pZCk7Ci0gICAgaWYgKCFvaykgewotICAgICAgICBSZWZQdHI8SURC
RGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9y
IGRlbGV0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5uYW1l
LnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IpOwot
ICAgIH0KLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3Bl
cmF0aW9uOjpwZXJmb3JtKCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIlZlcnNpb25DaGFuZ2VP
cGVyYXRpb24iKTsKLSAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UmIGRhdGFiYXNlID0g
bV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKTsKLSAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBkYXRh
YmFzZS5pZCgpOwotICAgIHVpbnQ2NF90IG9sZFZlcnNpb24gPSBkYXRhYmFzZS5tZXRhZGF0YSgp
LnZlcnNpb247Ci0KLSAgICAvLyBGSVhNRTogRGF0YWJhc2UgdmVyc2lvbnMgYXJlIG5vdyBvZiB0
eXBlIHVpbnQ2NF90LCBidXQgdGhpcyBjb2RlIGV4cGVjdGVkIGludDY0X3QuCi0gICAgQVNTRVJU
KG1fdmVyc2lvbiA+IChpbnQ2NF90KW9sZFZlcnNpb24pOwotICAgIGRhdGFiYXNlLnNldEN1cnJl
bnRWZXJzaW9uKG1fdmVyc2lvbik7Ci0gICAgaWYgKCFkYXRhYmFzZS5iYWNraW5nU3RvcmUoKS0+
dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKCksIGRhdGFiYXNlSWQsIGRhdGFiYXNlLm1ldGFkYXRhKCkudmVyc2lvbikpIHsK
LSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJFcnJvciB3cml0
aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2Ugd2hlbiB1cGRhdGluZyB2ZXJzaW9uLiIpOwotICAg
ICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihlcnJvcik7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24t
PmFib3J0KGVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NFUlQoIWRhdGFi
YXNlLmhhc1BlbmRpbmdTZWNvbmRIYWxmT3BlbigpKTsKLSAgICBkYXRhYmFzZS5zZXRQZW5kaW5n
U2Vjb25kSGFsZk9wZW4oSURCUGVuZGluZ09wZW5DYWxsOjpjcmVhdGUoKm1fY2FsbGJhY2tzLCAq
bV9kYXRhYmFzZUNhbGxiYWNrcywgbV90cmFuc2FjdGlvbklkLCBtX3ZlcnNpb24pKTsKLSAgICBt
X2NhbGxiYWNrcy0+b25VcGdyYWRlTmVlZGVkKG9sZFZlcnNpb24sICZkYXRhYmFzZSwgZGF0YWJh
c2UubWV0YWRhdGEoKSk7Ci19Ci0KLXZvaWQgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlv
bjo6cGVyZm9ybSgpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJDcmVhdGVPYmplY3RTdG9yZUFi
b3J0T3BlcmF0aW9uIik7Ci0gICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5yZW1vdmVPYmpl
Y3RTdG9yZShtX29iamVjdFN0b3JlSWQpOwotfQotCi12b2lkIERlbGV0ZU9iamVjdFN0b3JlQWJv
cnRPcGVyYXRpb246OnBlcmZvcm0oKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiRGVsZXRlT2Jq
ZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiIpOwotICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCku
YWRkT2JqZWN0U3RvcmUobV9vYmplY3RTdG9yZU1ldGFkYXRhLCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhOjpJbnZhbGlkSWQpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNp
b25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSgpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEks
ICJWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb24iKTsKLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRh
YmFzZSgpLnNldEN1cnJlbnRWZXJzaW9uKG1fcHJldmlvdXNJbnRWZXJzaW9uKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
ICYmIFVTRShMRVZFTERCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCT3BlcmF0aW9ucy5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRMZXZlbERCT3BlcmF0aW9ucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl
ZWE3Y2NjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQk9wZXJhdGlvbnMuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDQ0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCT3BlcmF0aW9uc19oCi0jZGVmaW5lIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREJPcGVyYXRpb25zX2gKLQotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwu
aCIKLSNpbmNsdWRlICJJREJPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0Uo
TEVWRUxEQikKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDcmVhdGVPYmplY3RTdG9y
ZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3Jl
LCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlv
bih0cmFuc2FjdGlvbiwgYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7Ci0gICAg
fQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7Ci1wcml2YXRlOgot
ICAgIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3Jl
LCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQotICAg
ICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9iYWNraW5nU3Rv
cmUoYmFja2luZ1N0b3JlKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YShvYmplY3RT
dG9yZU1ldGFkYXRhKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBSZWZQdHI8SURC
QmFja2luZ1N0b3JlSW50ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZTsKLSAgICBjb25zdCBJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsKLX07Ci0KLWNsYXNzIERlbGV0
ZU9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBi
YWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0
YWRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZU9iamVjdFN0
b3JlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlTWV0YWRh
dGEpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsK
LXByaXZhdGU6Ci0gICAgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBi
YWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0
YWRhdGEpCi0gICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBt
X2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCi0gICAgICAgICwgbV9vYmplY3RTdG9yZU1ldGFk
YXRhKG9iamVjdFN0b3JlTWV0YWRhdGEpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3QgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZUludGVyZmFjZT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlTWV0YWRhdGE7Ci19OwotCi1jbGFz
cyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uIDogcHVibGlj
IElEQk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0
aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwg
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFi
YXNlQ2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBWZXJzaW9u
Q2hhbmdlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbklkLCB2ZXJzaW9uLCBjYWxs
YmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtKCkgT1ZFUlJJREUgRklOQUw7Ci1wcml2YXRlOgotICAgIFZlcnNpb25DaGFuZ2VPcGVyYXRp
b24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJh
Y2tzKQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV90
cmFuc2FjdGlvbklkKHRyYW5zYWN0aW9uSWQpCi0gICAgICAgICwgbV92ZXJzaW9uKHZlcnNpb24p
Ci0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgICAgICAsIG1fZGF0YWJhc2VD
YWxsYmFja3MoZGF0YWJhc2VDYWxsYmFja3MpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247Ci0gICAgaW50NjRf
dCBtX3RyYW5zYWN0aW9uSWQ7Ci0gICAgaW50NjRfdCBtX3ZlcnNpb247Ci0gICAgUmVmUHRyPElE
QkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiBtX2RhdGFiYXNlQ2FsbGJhY2tzOwotfTsKLQotY2xhc3MgQ3JlYXRlT2JqZWN0U3RvcmVBYm9y
dE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbih0cmFu
c2FjdGlvbiwgb2JqZWN0U3RvcmVJZCkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9y
bSgpIE9WRVJSSURFIEZJTkFMOwotcHJpdmF0ZToKLSAgICBDcmVhdGVPYmplY3RTdG9yZUFib3J0
T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCkKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9u
KQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQotICAgIHsKLSAgICB9
Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0
aW9uOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwotfTsKLQotY2xhc3MgRGVs
ZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3Jl
TWV0YWRhdGEmIG9iamVjdFN0b3JlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9y
ZSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIE9WRVJSSURFIEZJTkFMOwot
cHJpdmF0ZToKLSAgICBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0
YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCi0gICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFu
c2FjdGlvbikKLSAgICAgICAgLCBtX29iamVjdFN0b3JlTWV0YWRhdGEob2JqZWN0U3RvcmVNZXRh
ZGF0YSkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKLSAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2Jq
ZWN0U3RvcmVNZXRhZGF0YTsKLX07Ci0KLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZl
cnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIGNvbnN0IFN0cmluZyYgcHJldmlvdXNW
ZXJzaW9uLCBpbnQ2NF90IHByZXZpb3VzSW50VmVyc2lvbikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgVmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBw
cmV2aW91c1ZlcnNpb24sIHByZXZpb3VzSW50VmVyc2lvbikpOwotICAgIH0KLSAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybSgpIE9WRVJSSURFIEZJTkFMOwotcHJpdmF0ZToKLSAgICBWZXJzaW9uQ2hh
bmdlQWJvcnRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvbiwgY29uc3QgU3RyaW5nJiBwcmV2aW91c1ZlcnNpb24sIGludDY0X3QgcHJldmlvdXNJbnRW
ZXJzaW9uKQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwg
bV9wcmV2aW91c1ZlcnNpb24ocHJldmlvdXNWZXJzaW9uKQotICAgICAgICAsIG1fcHJldmlvdXNJ
bnRWZXJzaW9uKHByZXZpb3VzSW50VmVyc2lvbikKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKLSAgICBTdHJp
bmcgbV9wcmV2aW91c1ZlcnNpb247Ci0gICAgaW50NjRfdCBtX3ByZXZpb3VzSW50VmVyc2lvbjsK
LX07Ci0KLWNsYXNzIENyZWF0ZUluZGV4T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
SW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ3JlYXRlSW5kZXhPcGVyYXRpb24odHJhbnNhY3Rpb24sIGJhY2tpbmdTdG9yZSwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybSgpIE9WRVJSSURFIEZJTkFMOwotcHJpdmF0ZToKLSAgICBDcmVhdGVJbmRleE9wZXJh
dGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJCYWNr
aW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgICAgICA6IG1fdHJhbnNh
Y3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3Jl
KQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQotICAgICAgICAsIG1f
aW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0
IFJlZlB0cjxJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U+IG1fYmFja2luZ1N0b3JlOwotICAgIGNv
bnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEg
bV9pbmRleE1ldGFkYXRhOwotfTsKLQotY2xhc3MgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbiA6
IHB1YmxpYyBJREJPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElE
Qk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNh
Y3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKHRyYW5z
YWN0aW9uLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9p
ZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7Ci1wcml2YXRlOgotICAgIENyZWF0ZUluZGV4QWJv
cnRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCi0gICAgICAgIDogbV90cmFu
c2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3Rv
cmVJZCkKLSAgICAgICAgLCBtX2luZGV4SWQoaW5kZXhJZCkKLSAgICB7Ci0gICAgfQotCi0gICAg
Y29uc3QgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV90cmFuc2FjdGlv
bjsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBjb25zdCBpbnQ2NF90
IG1faW5kZXhJZDsKLX07Ci0KLWNsYXNzIERlbGV0ZUluZGV4T3BlcmF0aW9uIDogcHVibGljIElE
Qk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9u
PiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURC
QmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlSW5kZXhPcGVyYXRpb24odHJhbnNhY3Rpb24sIGJh
Y2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkpOwotICAgIH0KLSAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIE9WRVJSSURFIEZJTkFMOwotcHJpdmF0ZToKLSAgICBEZWxl
dGVJbmRleE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0
aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgICAg
ICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9iYWNraW5nU3RvcmUo
YmFja2luZ1N0b3JlKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQot
ICAgICAgICAsIG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQotICAgIHsKLSAgICB9Ci0K
LSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0aW9u
OwotICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U+IG1fYmFja2luZ1N0
b3JlOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIGNvbnN0IElEQklu
ZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwotfTsKLQotY2xhc3MgRGVsZXRlSW5kZXhBYm9y
dE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhN
ZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwg
aW5kZXhNZXRhZGF0YSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIE9WRVJS
SURFIEZJTkFMOwotcHJpdmF0ZToKLSAgICBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uKElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKLSAgICAgICAgOiBt
X3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmpl
Y3RTdG9yZUlkKQotICAgICAgICAsIG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQotICAg
IHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBt
X3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIGNv
bnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwotfTsKLQotY2xhc3MgR2V0T3Bl
cmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NP
d25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGNv
bnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4
ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZXRPcGVyYXRpb24o
dHJhbnNhY3Rpb24sIGJhY2tpbmdTdG9yZSwgbWV0YWRhdGEsIG9iamVjdFN0b3JlSWQsIGluZGV4
SWQsIGtleVJhbmdlLCBjdXJzb3JUeXBlLCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVh
bCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKLXByaXZhdGU6Ci0gICAgR2V0T3BlcmF0
aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRh
JiBtZXRhZGF0YSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29y
VHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX3Ry
YW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fYmFja2luZ1N0b3JlKGJhY2tpbmdT
dG9yZSkKLSAgICAgICAgLCBtX2RhdGFiYXNlSWQobWV0YWRhdGEuaWQpCi0gICAgICAgICwgbV9v
YmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9pbmRleElkKGluZGV4SWQp
Ci0gICAgICAgICwgbV9rZXlQYXRoKG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3Rv
cmVJZCkua2V5UGF0aCkKLSAgICAgICAgLCBtX2F1dG9JbmNyZW1lbnQobWV0YWRhdGEub2JqZWN0
U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKS5hdXRvSW5jcmVtZW50KQotICAgICAgICAsIG1fa2V5
UmFuZ2Uoa2V5UmFuZ2UpCi0gICAgICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCi0gICAg
ICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1ldGFk
YXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgICAgIEFTU0VS
VChtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmlkID09IG9iamVjdFN0
b3JlSWQpOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUludGVy
ZmFjZT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7Ci0g
ICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX2lu
ZGV4SWQ7Ci0gICAgY29uc3QgSURCS2V5UGF0aCBtX2tleVBhdGg7Ci0gICAgY29uc3QgYm9vbCBt
X2F1dG9JbmNyZW1lbnQ7Ci0gICAgY29uc3QgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdl
OwotICAgIGNvbnN0IEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7Ci0gICAgY29u
c3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi1jbGFzcyBQdXRPcGVy
YXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093
blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50
NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9y
ZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5
LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElk
cywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgUHV0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUs
IGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3Ms
IGluZGV4SWRzLCBpbmRleEtleXMpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0o
KSBPVkVSUklERSBGSU5BTDsKLXByaXZhdGU6Ci0gICAgUHV0T3BlcmF0aW9uKElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFj
ZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3Jl
TWV0YWRhdGEmIG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mIHZhbHVlLCBQ
YXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1v
ZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVj
dG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5
cykKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fYmFj
a2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJ
ZCkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQotICAgICAgICAsIG1fdmFs
dWUodmFsdWUpCi0gICAgICAgICwgbV9rZXkoa2V5KQotICAgICAgICAsIG1fcHV0TW9kZShwdXRN
b2RlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICAgICAgLCBtX2luZGV4
SWRzKGluZGV4SWRzKQotICAgICAgICAsIG1faW5kZXhLZXlzKGluZGV4S2V5cykKLSAgICB7Ci0g
ICAgfQotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV90cmFu
c2FjdGlvbjsKLSAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlPiBtX2Jh
Y2tpbmdTdG9yZTsKLSAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKLSAgICBjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmU7Ci0gICAgY29uc3QgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gbV92YWx1ZTsKLSAgICBjb25zdCBSZWZQdHI8SURCS2V5PiBtX2tleTsKLSAg
ICBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgbV9wdXRNb2RlOwot
ICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotICAgIGNvbnN0IFZl
Y3RvcjxpbnQ2NF90PiBtX2luZGV4SWRzOwotICAgIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+IG1f
aW5kZXhLZXlzOwotfTsKLQotY2xhc3MgU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uIDogcHVibGlj
IElEQk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0
aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwg
c2l6ZV90IGluZGV4Q291bnQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNl
dEluZGV4ZXNSZWFkeU9wZXJhdGlvbih0cmFuc2FjdGlvbiwgaW5kZXhDb3VudCkpOwotICAgIH0K
LSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIE9WRVJSSURFIEZJTkFMOwotcHJpdmF0ZToKLSAg
ICBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvbiwgc2l6ZV90IGluZGV4Q291bnQpCi0gICAgICAgIDogbV90cmFuc2FjdGlv
bih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX2luZGV4Q291bnQoaW5kZXhDb3VudCkKLSAgICB7
Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV90
cmFuc2FjdGlvbjsKLSAgICBjb25zdCBzaXplX3QgbV9pbmRleENvdW50OwotfTsKLQotY2xhc3Mg
T3BlbkN1cnNvck9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFj
a2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERC
OjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29y
VHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgT3BlbkN1cnNvck9wZXJhdGlvbih0cmFuc2FjdGlvbiwgYmFja2luZ1N0b3Jl
LCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgZGlyZWN0aW9u
LCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7Ci1wcml2YXRlOgotICAgIE9wZW5DdXJzb3JP
cGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURC
QmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIElu
ZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
KQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9iYWNr
aW5nU3RvcmUoYmFja2luZ1N0b3JlKQotICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlk
KQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQotICAgICAgICAsIG1f
aW5kZXhJZChpbmRleElkKQotICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCi0gICAgICAg
ICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQotICAgICAgICAsIG1fY3Vyc29yVHlwZShjdXJzb3JU
eXBlKQotICAgICAgICAsIG1fdGFza1R5cGUodGFza1R5cGUpCi0gICAgICAgICwgbV9jYWxsYmFj
a3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IFJlZlB0cjxJREJCYWNr
aW5nU3RvcmVJbnRlcmZhY2U+IG1fYmFja2luZ1N0b3JlOwotICAgIGNvbnN0IGludDY0X3QgbV9k
YXRhYmFzZUlkOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIGNvbnN0
IGludDY0X3QgbV9pbmRleElkOwotICAgIGNvbnN0IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IG1f
a2V5UmFuZ2U7Ci0gICAgY29uc3QgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gbV9kaXJlY3Rp
b247Ci0gICAgY29uc3QgSW5kZXhlZERCOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKLSAgICBj
b25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIG1fdGFza1R5cGU7Ci0g
ICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi1jbGFzcyBD
b3VudE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRp
YyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0
b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
Q291bnRPcGVyYXRpb24odHJhbnNhY3Rpb24sIGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIE9WRVJSSURFIEZJTkFMOwotcHJpdmF0ZToKLSAgICBDb3Vu
dE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJ
REJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0g
ICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX2JhY2tpbmdT
dG9yZShiYWNraW5nU3RvcmUpCi0gICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCi0g
ICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9pbmRl
eElkKGluZGV4SWQpCi0gICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKLSAgICAgICAgLCBt
X2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3QgUmVmUHRy
PElEQkJhY2tpbmdTdG9yZUludGVyZmFjZT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgY29uc3QgaW50
NjRfdCBtX2RhdGFiYXNlSWQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0g
ICAgY29uc3QgaW50NjRfdCBtX2luZGV4SWQ7Ci0gICAgY29uc3QgUmVmUHRyPElEQktleVJhbmdl
PiBtX2tleVJhbmdlOwotICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tz
OwotfTsKLQotY2xhc3MgRGVsZXRlUmFuZ2VPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9u
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3Rv
cmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBEZWxldGVSYW5nZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwgYmFja2luZ1N0b3JlLCBkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAg
IHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7Ci1wcml2YXRlOgotICAgIERl
bGV0ZVJhbmdlT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNh
Y3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4g
a2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDog
bV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX2JhY2tpbmdTdG9yZShiYWNr
aW5nU3RvcmUpCi0gICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCi0gICAgICAgICwg
bV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9rZXlSYW5nZShrZXlS
YW5nZSkKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQot
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247
Ci0gICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUludGVyZmFjZT4gbV9iYWNraW5nU3Rv
cmU7Ci0gICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7Ci0gICAgY29uc3QgaW50NjRfdCBt
X29iamVjdFN0b3JlSWQ7Ci0gICAgY29uc3QgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdl
OwotICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotY2xh
c3MgQ2xlYXJPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tp
bmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IENsZWFyT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUsIGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZv
aWQgcGVyZm9ybSgpIE9WRVJSSURFIEZJTkFMOwotcHJpdmF0ZToKLSAgICBDbGVhck9wZXJhdGlv
bihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5n
U3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAg
ICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX2JhY2tpbmdTdG9y
ZShiYWNraW5nU3RvcmUpCi0gICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCi0gICAg
ICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9jYWxsYmFj
a3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IFJlZlB0cjxJREJCYWNr
aW5nU3RvcmVJbnRlcmZhY2U+IG1fYmFja2luZ1N0b3JlOwotICAgIGNvbnN0IGludDY0X3QgbV9k
YXRhYmFzZUlkOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIGNvbnN0
IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZF
TERCKQotI2VuZGlmIC8vIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREJPcGVyYXRpb25zX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCAzNGMyOWVkLi5iOTgyMTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNjQ1LDYgKzE2NDUsMTAgQEAKIAkJNTBFMThD
REExNkY5Mjg1ODAwQzY1NDg2IC8qIFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbUNhY2hlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MEUxOENENzE2Rjky
ODU4MDBDNjU0ODYgLyogU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtQ2FjaGUuaCAqLzsgfTsKIAkJ
NTEwMTg0NjkwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDE4NDY3MEIwODYwMkEwMDRBODI1RiAv
KiBDYWNoZWRQYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNTEwMTg0NkEwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwMTg0NjgwQjA4NjAy
QTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuY3BwICovOyB9OworCQk1MTA1OUREQjE4MjBCMTc2MDBE
RkY5QjEgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTA1OURENzE4MjBCMTc2MDBERkY5QjEgLyog
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgKi87IH07CisJCTUxMDU5RERDMTgyMEIxNzYw
MERGRjlCMSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTA1OUREODE4MjBCMTc2MDBERkY5QjEgLyog
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oICovOyB9OworCQk1MTA1OURERDE4MjBCMTc2MDBE
RkY5QjEgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTA1OUREOTE4MjBCMTc2MDBERkY5
QjEgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAgKi87IH07CisJCTUxMDU5
RERFMTgyMEIxNzYwMERGRjlCMSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTA1OUREQTE4
MjBCMTc2MDBERkY5QjEgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oICovOyB9
OwogCQk1MTBENEEzMzEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEQ0QTJE
MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuY3BwICovOyB9OwogCQk1
MTBENEEzNDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTBENEEyRTEwMzE2NUVF
MDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmggKi87IH07CiAJCTUxMEQ0QTM2MTAz
MTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEQ0QTMwMTAzMTY1RUUwMDQ5RUE1
NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcCAqLzsgfTsKQEAgLTgyNTYsNiArODI2MCwx
MCBAQAogCQk1MEUxOENENzE2RjkyODU4MDBDNjU0ODYgLyogU3R5bGVDdXN0b21GaWx0ZXJQcm9n
cmFtQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3R5bGVDdXN0b21G
aWx0ZXJQcm9ncmFtQ2FjaGUuaDsgcGF0aCA9IHN0eWxlL1N0eWxlQ3VzdG9tRmlsdGVyUHJvZ3Jh
bUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMDE4NDY3MEIwODYwMkEw
MDRBODI1RiAvKiBDYWNoZWRQYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENhY2hlZFBhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwMTg0NjgwQjA4
NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ2FjaGVkUGFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUxMDU5REQ3MTgyMEIxNzYwMERGRjlCMSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTA1OUREODE4MjBC
MTc2MDBERkY5QjEgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMDU5REQ5MTgyMEIxNzYwMERGRjlCMSAvKiBJREJUcmFu
c2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MTA1OUREQTE4MjBCMTc2MDBERkY5QjEgLyogSURCVHJhbnNh
Y3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxMEQ0QTJEMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU29ja2V0U3RyZWFt
RXJyb3JCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwRDRBMkUxMDMx
NjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUVycm9yQmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTb2NrZXRTdHJlYW1FcnJvckJhc2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTEwRDRBMzAxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhh
bmRsZUJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU29ja2V0
U3RyZWFtSGFuZGxlQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjg0
NCw3ICsxNjg1MiwxMSBAQAogCQkJCTUxRDcxOUE0MTgxMTA2RTAwMDE2REM1MSAvKiBJREJUcmFu
c2FjdGlvbi5jcHAgKi8sCiAJCQkJNTFENzE5QTUxODExMDZFMDAwMTZEQzUxIC8qIElEQlRyYW5z
YWN0aW9uLmggKi8sCiAJCQkJNTFENzE5QTYxODExMDZFMDAwMTZEQzUxIC8qIElEQlRyYW5zYWN0
aW9uLmlkbCAqLywKKwkJCQk1MTA1OURENzE4MjBCMTc2MDBERkY5QjEgLyogSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbC5jcHAgKi8sCisJCQkJNTEwNTlERDgxODIwQjE3NjAwREZGOUIxIC8qIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCAqLywKIAkJCQk1MUY2RTA4RjE4MTFEMjUyMDA1OEEw
MEEgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmggKi8sCisJCQkJNTEwNTlERDkx
ODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwICov
LAorCQkJCTUxMDU5RERBMTgyMEIxNzYwMERGRjlCMSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRP
cGVyYXRpb25zLmggKi8sCiAJCQkJNTFFQUM1NjUxODE1RUQzRTAwNEYxQkE0IC8qIElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuY3BwICovLAogCQkJCTUxRUFDNTY2MTgxNUVEM0UwMDRGMUJBNCAv
KiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggKi8sCiAJCQkJNTFENzE5QUIxODExMDZFMDAw
MTZEQzUxIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgKi8sCkBAIC0yMjU0MSw2ICsyMjU1
Myw3IEBACiAJCQkJMkVERjM2OUYxMjJDOTRDODAwMkY3RDRFIC8qIEZpbGVFeGNlcHRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMDk5RDA5MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBODhBOTA1MTc1NTNDRDcw
MDBDNzRGOSAvKiBGaWxlSWNvbkxvYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTEwNTlEREMx
ODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUY1NUIzREJFMTI1MUYxMkQwMDNFRjI2OSAvKiBGaWxlSW5wdXRUeXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5NzZENkM4NjEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZUxpc3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTQ2ODlGMUFGMTI2N0JBRTEwMEU4RDM4MCAvKiBGaWxlTWV0YWRh
dGEuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ3NDQsNiArMjQ3NTcsNyBAQAogCQkJCUUxQTY0M0Yy
MEVDMDk3MjUwMDc3OTY2OCAvKiBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyRDcwQkExMzE4MDc0RERGMDAwMTkwOEEgLyogUGxhdGZvcm1DQUxheWVyTWFjLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGMzQ3NDJFOTEzNDM2MzUwMDA1MzFCQzIgLyogV29ya2VyU2Ny
aXB0RGVidWdTZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxMDU5RERFMTgyMEIxNzYwMERG
RjlCMSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwNzk2OURCNjE3RDE0MTUxMDA3RkY4NDIgLyogSlNSVENJY2VDYW5kaWRhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3RDZCMzQ5MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJTY3JpcHRM
b2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFQTc2ODA0MEZFNzEyNjQwMEFCOUM4QSAvKiBX
b3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjczNjUsNiArMjcz
NzksNyBAQAogCQkJCUFBNEMzQTc2MEIyQjE2NzkwMDIzMzRBMiAvKiBJbmxpbmVTdHlsZVNoZWV0
T3duZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE5QUUwNjMxNDJENkIyNDAwNjU2M0ExIC8q
IFN0eWxlRmlsdGVyRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzE3NjEyMjEzQzUxNjY5
MDAyNkU0NTQgLyogU3R5bGVGbGV4aWJsZUJveERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NTEwNTlEREIxODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFRjQ0N0QwRTY3NDgwNjAwMUMxMjg3IC8qIFN0eWxlR2Vu
ZXJhdGVkSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTEwREM3NkExNDc0N0JBQjAwNUUy
NDcxIC8qIFN0eWxlR3JpZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTExMERCOUQxNEY1
REY4NzAwQTAzQjkzIC8qIFN0eWxlR3JpZEl0ZW1EYXRhLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
Mjc3ODksNiArMjc4MDQsNyBAQAogCQkJCTdFOTlBRjUxMEIxMzg0NjQ2OEZCMDFBNSAvKiBXaW5k
b3dGb2N1c0FsbG93ZWRJbmRpY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzc5OTE5OTYx
MjAwRERGNDAwRUEwNDFDIC8qIFdPRkZGaWxlRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTJFNDM0NjQ1MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTEwNTlEREQxODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJh
dGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjM4MjA4OTYxNDdEMzVGOTAwMTBCQzA2IC8q
IFdvcmtlckNvbnNvbGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGMzQ3NDJFMDEzNDM2
MzFGMDA1MzFCQzIgLyogV29ya2VyRGVidWdnZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBM0UyNjQzMDE0NzQ4OTkxMDA1QTg1ODggLyogV29ya2VyRXZlbnRRdWV1ZS5jcHAgaW4gU291
cmNlcyAqLywK
</data>

          </attachment>
      

    </bug>

</bugzilla>